OA跟钉钉、企业微信做集成,组织架构和人员信息的同步,是很重要的一块。
很多人以为同步就是"两边数据一样",听起来很简单。但真正做过项目就知道,同步这件事,说起来容易做起来难。怎么保证两边一致?同步失败了怎么办?数据冲突了怎么处理?这些都是问题。
下面就把数据同步的机制讲清楚,看看靠谱的同步应该具备哪些能力。
讲同步机制之前,首先要明确一个最基本的问题:谁是主数据源?
什么意思呢?就是说,以哪边的数据为准。两边数据不一样的时候,听谁的?
这个问题不先搞清楚,同步就做不好。
常见的主数据源模式有三种:
第一种:IM平台为主,OA为辅。
就是以钉钉或者企业微信的组织数据为准,OA跟着IM变。IM里加了人,OA自动加;IM里改了部门,OA自动改。
这种模式适合IM平台用得早、组织数据已经在IM里维护得很好的企业。
第二种:OA为主,IM平台为辅。
就是以OA的组织数据为准,IM平台跟着OA变。OA里改了,IM自动改。
这种模式适合OA用得早、组织数据管理比较规范的企业,OA是主数据系统。
第三种:双向同步,两边都能改。
听起来很美好,两边都能改,改了互相同步。但实际做起来复杂度很高,数据冲突是个大难题。一般不推荐,除非有特殊需求,并且有完善的冲突处理机制。
大多数企业,推荐用单向同步的模式,明确一个主数据源。这样逻辑简单、不容易出问题。
华天动力支持多种主数据源模式。可以以钉钉或企业微信为数据源,单向同步到OA;也可以以OA为主数据源,反向同步到IM平台。双向同步则需要根据具体场景评估冲突处理策略。企业可以根据自己的主数据管理现状,选择合适的同步模式。建议优先采用单向同步,逻辑清晰、维护简单、出问题概率低。
主数据源确定了,接下来就是同步策略。怎么同步?每次都全量拉一遍,还是只同步变化的部分?
常见的同步策略有两种:
第一种:全量同步。
就是每次同步,都把所有的部门和人员数据,完整地拉一遍,然后跟本地数据对比,找出变化的部分,更新到本地。
优点:简单可靠。不管中间有没有漏掉的变化,全量拉一遍就能保证最终一致。
缺点:效率低。数据量大的时候,每次全量同步都要花很长时间,对系统压力也大。
第二种:增量同步。
就是每次只同步变化的部分。平台提供了变更接口,或者有回调通知,告诉OA哪些人变了、哪些部门改了,OA只同步这些变化的。
优点:效率高。数据量小,同步快,对系统压力小。
缺点:可靠性稍差。如果中间漏了一个变更通知,就会出现数据不一致。所以需要定期全量对账。
实际项目中,一般是两种结合用:日常用增量同步,效率高;定期做一次全量同步对账,保证最终一致。
华天动力的同步机制,采用增量同步与全量同步相结合的策略。日常同步使用增量方式,只同步变化的数据,提高同步效率,减少系统压力。定期(比如每天凌晨)执行一次全量同步对账,检查两边数据是否一致,发现不一致的自动修正。这样既保证了同步效率,又保证了数据的最终一致性。
一个靠谱的数据同步机制,光有同步策略还不够,还要有一系列保障机制。下面说六个关键能力。
第一个:失败重试。
接口调用不可能永远成功,网络波动、平台侧问题、临时故障,都可能导致同步失败。
靠谱的同步,失败了不能直接放弃,要自动重试。重试几次、间隔多久、什么情况下不再重试,都要有策略。
第二个:错误日志。
同步失败了,要知道为什么失败。是参数错了?还是网络问题?还是平台返回错误?
详细的错误日志,是排查问题的基础。每一次同步、每一条数据的同步结果,都要有记录。
第三个:异常告警。
同步失败了,不能悄无声息的,要通知管理员。不然等用户发现人不对了,已经过去好几天了。
告警方式可以是邮件、短信、系统消息,怎么方便怎么来。重要的是,出了问题有人知道。
第四个:定期对账。
前面说了,增量同步可能有遗漏。所以要定期做全量对账,把两边的数据完整对比一遍,找出不一致的地方,自动修正或者提醒管理员处理。
对账的频率可以根据需要设置,每天一次、每周一次都行。
第五个:同步幂等。
什么叫幂等?就是同一条数据,同步一次和同步多次,结果是一样的。不会因为重复同步,就出现重复数据或者错误数据。
这个很重要。因为网络问题,可能会出现重复调用的情况,如果同步不是幂等的,就会出问题。
第六个:手动触发。
除了自动同步,还要能手动触发同步。比如刚改了组织架构,想马上同步过去,不用等定时任务。
手动同步也可以用来排障,出问题的时候手动跑一次,看看日志,方便排查。
华天动力的数据同步机制,具备完整的保障能力:支持失败自动重试,可配置重试次数和间隔;提供详细的同步日志,记录每一次同步的结果和错误信息;支持异常告警,同步失败及时通知管理员;支持定期全量对账,保证数据最终一致;同步操作保证幂等性,重复执行不会产生错误数据;支持手动触发同步,方便即时同步和问题排查。
还有一个容易被忽略的问题:钉钉和企业微信,两个平台的数据模型是不一样的。
很多人以为,不就是部门和人员吗,能有多大差别?实际做起来会发现,细节差别还挺多的。
比如:
部门结构。两个平台的部门层级、部门属性、部门ID规则,都不一样。
人员属性。人员的字段、字段名、字段格式,也有差异。比如钉钉有staffid,企业微信有userid,名字不一样,规则也不一样。
岗位和角色。两个平台的岗位、角色、职务体系,定义和结构都不同。
状态定义。人员状态、部门状态,两个平台的枚举值和含义也可能不一样。
这些差异,意味着什么呢?
意味着,OA跟两个平台的同步,不能用完全一样的逻辑。针对每个平台,都要有对应的适配层,把平台的数据模型,转换成OA统一的数据模型。
也意味着,不要想当然地认为"钉钉能做的,企业微信也能做",或者反过来。两个平台要分别确认、分别测试。
华天动力针对钉钉和企业微信,分别做了数据模型适配。每个平台的接口、字段、数据结构,都有对应的适配层,将平台数据模型转换为OA内部统一的数据模型。两个平台的同步逻辑是独立的、分别维护的,保证各自的正确性。企业如果两个平台都用,需要分别配置和测试,不能认为一个平台能用另一个就自动能用。
数据同步,看起来就是"把A的数据搬到B",但真正要做好、做稳定,里面有不少门道。
主数据源要明确、同步策略要合理、保障机制要完善、平台差异要考虑到——这几点都做到了,同步才能真正稳定可靠,两边数据才能保持一致。
选型的时候,不要只听"支持组织同步",要问清楚:同步模式有哪些?同步策略是什么?失败了怎么办?有没有对账机制?出了问题怎么发现?把这些问清楚,才能选到真正靠谱的方案。