免费建立国外网站,深圳互联网公司排行榜100,晋江网站建设哪家好,重庆市建设执业资格注册管理中心网站看到这一篇文章的 xdm #xff0c;应该对组织结构同步有一些想法了吧#xff0c;如果没有#xff0c;可以看前面两篇文章#xff0c;可以通过如下地址查看一下#xff1a;
【性能优化上】第三方组织结构同步优化一#xff0c;你 get 到了吗#xff1f; 坑爹#xff0c…看到这一篇文章的 xdm 应该对组织结构同步有一些想法了吧如果没有可以看前面两篇文章可以通过如下地址查看一下
【性能优化上】第三方组织结构同步优化一你 get 到了吗 坑爹线上同步近 3w 个用户导致链路阻塞引入发的线上问题你经历过吗
这类文章主要是期望能给 xdm 带来不一样的思考如有表述不当的地方还请不吝赐教期望对你有帮助
这篇文章主要是阐述将临时表中的用户组数据/用户数组按照既定的步骤同步到我们的正式表过程中遇到异常中断可以对我们的正式平台无影响能够保证下一次同步任务过来仍然可以进行断点续传
首先全量同步和增量同步分别指什么 全量同步
简单理解全量同步咱们就是将对方所有的数据全部同步到我们内部系统中对于组织结构同步的时候我们没有必要每一次都是全量的一般是第一次无到有的时候会用到全量同步可以理解为全量覆盖
增量同步
那么增量同步就比较好理解了此处的增量同步指的是第三方数据对于目前内部系统数据来说哪一些是增加或者变动的数据那么就同步这一部分数据到内部系统中
那么对于我们本次同步组织结构来说就看内部系统是否已经存在了 /IDaaS 组如果存在了那么就走增量同步如果不存在则走全量同步 全量同步基本流程
全量同步的基本流程比较简单再来回顾一下之前文章的一张总体图 可以看到全量同步和增量同步在我们整个同步流程的第四个阶段到这个阶段的时候第三方组织结构的数据已经全部正确的写入到了我们的临时表中
这个时候我们就需要将临时表中的数据按照我们的逻辑和步骤写入到正式表中
此处阶段显示判断是否有 /IDaaS 组如果没有则在同步记录表中写入 同步类型为 full 全量同步如果有 /IDaaS 组则记录同步类型为 incr 增量同步 全量同步比较简单总共分成两个阶段一个阶段是全量同步组 full_sync_group一个是全量同步用户 full_sync_user
序号步骤含义1full_sync_group全量同步临时表中的组到正式表2full_sync_user全量同步临时表中的用户到正式表
此处比较简单同步用户之前自然是先要将组给同步过来完全分清楚对于正式表中数据是从无到有所以步骤相对就简单一些
开始全量同步 在进行全量同步前仍然还是检查当前的同步状态是否是 sync_in且同步步骤是否是sync_temp_user若不是则不处理 检查用户数量是否超过平台最大限制 若过程中出现 error则关闭当前任务不进行同步并且将同步记录中同步状态设置为同步中断 sync_interrupt同步记录表中重试次数 1检查临时表有效用户 已有正式表中未删除用户的数量是否超过平台最大限制一般平台会有对于一个租户最多容纳多少用户的限制更新同步状态为同步失败 sync_fail并且清空临时数据通知其他服务处理失败且关闭当前任务 校验当前同步步骤是 sync_temp_user 或者 full_sync_group 则开始正式将临时表的组信息同步到正式表中并将当前的同步步骤修改为 full_sync_group
这次这样进行判断如果是 sync_temp_user 说明第一次处理到这里如果是 full_sync_group 步骤说明这个步骤之前被中断了此刻需要断点续传 获取临时表中的组深度且获取按照深度排序的组列表按照由浅到深的将组数据写入到正式表中删除临时用户表如果过程中出现 error则在该租户的同步记录中同步状态标记为 sync_interrupt
当同步步骤是 full_sync_group 或者 full_sync_user 的时候则开始将用户从临时表加入到正式用户表中且将同步步骤修改为 full_sync_user
同理此处这样的处理逻辑也是为了断点续传逻辑之外关于一个步骤中数据库的处理都是开启事务的 一层一层的去添加用户先从临时表中查询同一个深度下对应的所有用户从正式表中读取已经存在的用户从临时表中按照例如 1000 条每次去读取数据有效合法用户写到到正式表中校验如果用户已经存在于正式表中则记录冲突用户且不录入该用户反之亦然删除临时表中已经插入到正式表中的用户数据并在临时表中更新指定用户是非法的如果过程中出现 error则在该租户的同步记录中同步状态标记为 sync_interrupt同步结束则将同步状态设为 sync_success 同步步骤设置为 sync_end同时将临时表中非法的组非法的用户全部读书出来将非法数据传出去最终清除临时用户组表和临时用户表 在 redis 中记录下一次需要同步的时间
增量同步基本流程
增量同步的话相对步骤就会多一些看起来可能会觉得复杂实际上按照如下步骤走的话会很清晰并不复杂
序号步骤含义1incr_sync_markup_group标记组步骤2incr_sync_markup_user标记用户步骤3incr_sync_delete_user从正式表中删除用户步骤4incr_sync_add_group将临时表中的组写入到正式表中5incr_sync_move_user处理正式表中移动用户6incr_sync_add_user将临时表中的用户添加到正式表中7incr_sync_edit_user编辑正式表中的用户8incr_sync_delete_group删除正式表中的组9sync_end增量同步结束
那么对于增量同步为什么需要那么多步骤才能保证咱们顺利同步才能保证咱们可以断点续传
实际上稍加思考的话我们就需要考虑这些问题
同步数据自然是需要先同步组 那么对于组的增删改查用户的增删改我们需要按照这样的顺序处理呢 思考之后自然是 删除正式表中的用户避免后续冲突此步骤说明最新的同步数据中没有这一部分用户添加组移动用户 如果移动的目的组不存在的话那还玩什么所以添加组要放在这个步骤的前面添加用户编辑用户删除组 开始处理增量同步数据 下面关于校验步骤的位置理由都是为了确定当前执行的步骤是正确的并且为了做到断点续传 开始标记组 校验当前同步步骤是 sync_temp_user 或者 incr_sync_markup_group则当前的同步步骤修改为 incr_sync_markup_group读取原有正式表中的组读取临时表中的组数据通过标记找到新增的组找到删除的组并在临时用户组表中标记新增的组在正式表中标记删除的组 开始标记用户 校验当前同步步骤是 incr_sync_markup_group 或者 incr_sync_markup_user则将当前步骤修改为 incr_sync_markup_user获取原有正式表中的非IDaaS组下的用户读取临时表中的用户通过读取出来的临时表中的用户去读取正式表中的数据标记哪一些用户是新增的哪一些是修改的哪一些是移动的组变动了在正式表中标记删除的用户 开始处理正式表临时表中的标记数据 删除用户 检查当前步骤是 incr_sync_markup_user 或者是 incr_sync_delete_user 才进行且更新步骤为 incr_sync_delete_user新增用户组校验同步步骤是 incr_sync_delete_user 或者是 incr_sync_add_group 才进行且更新步骤为 incr_sync_add_group移动用户校验同步步骤是incr_sync_add_group 或者是 incr_sync_move_user 才进行且更新步骤为 incr_sync_move_user删除用户组校验同步步骤是 incr_sync_move_user 或者是 incr_sync_delete_group 才进行且更新步骤为 incr_sync_delete_group新增用户校验同步步骤是 incr_sync_delete_group 或者是incr_sync_add_user 才进行且更新步骤为 incr_sync_add_user修改用户校验同步步骤是 incr_sync_add_user 或者是 incr_sync_edit_user 才进行且更新步骤为 incr_sync_edit_user如果过程中出现 error则在该租户的同步记录中同步状态标记为 sync_interrupt同步结束则将同步状态设为 sync_success 同步步骤设置为 sync_end同时将临时表中非法的组非法的用户全部读书出来将非法数据传出去最终清除临时用户组表和临时用户表 在 redis 中记录下一次需要同步的时间
自然对于每一个步骤的实现方式根据实际情况来定这只是一个例子主要是理解整个流程的 3 张表4 个同步状态以及 14 个同步步骤 是怎么保证断点续传的
可以看到对于每一个步骤都在我们的操控范围内还记的最开始创建同步任务的时候吗 这个 同步中断 就是用于断点续传的
可以这样来实现 断点续传
后台会启动一个定时任务定时去扫同步记录表中 同步状态是 sync_interrupt 状态的记录 根据每一条记录是全量同步还是增量同步来走不同的同步路径 再根据每一条同步记录中的同步步骤就可以接着中断之前的步骤来进行同步数据了
自然细心的同学还发会发同步记录表中有重试次数这个字段用法是每中断一次这个字段值 1如果发现已经 3 次了那么就会删除这条记录若之后再次触发该租户的同步任务则从 0 开始同步即可
至此关于本次组织结构同步的内容更新完毕如果对你能够带来一些思考的话欢迎冒个泡吧
感谢阅读欢迎交流点个赞关注一波 再走吧
欢迎点赞关注收藏
朋友们你的支持和鼓励是我坚持分享提高质量的动力 好了本次就到这里
技术是开放的我们的心态更应是开放的。拥抱变化向阳而生努力向前行。
我是阿兵云原生欢迎点赞关注收藏下次见~
文中提到的技术点感兴趣的可以查看这些文章
【性能优化上】第三方组织结构同步优化一你 get 到了吗 坑爹线上同步近 3w 个用户导致链路阻塞引入发的线上问题你经历过吗 OAUTH之钉钉第三方授权 可以进入地址进行体验和学习https://xxetb.xet.tech/s/3lucCI