目录
背景
现状:同一公司下2个部门都有人员服务,这2个人员服务由不同的团队开发,数据库不公用。
需求:同一个身份证只能出现在其中一个人员服务中。
解决方案:新增人员的时候,先向对方咨询,“你那边是否有这个人”
-
有:放弃新增
-
无:继续新增
业务流程漏洞(低概率出现重复新增问题)
若同时新增A,则互相向对方咨询都发现对方系统中没有A,所以都新增成功了。
解决方案
并发转成顺序操作(互斥)。
如引入分布式锁zookeeper/redis。
优点:
-
实现简单。
-
代码更改少。
缺点:
没有共同的分布式锁服务。
延时双校验
流程如下
-
查询是否有A。
-
无,则本地新增。
-
休眠2秒。(这个随意定,这里是举例)
-
再次查询是否有A。
-
无则返回成功新增,否则将该记录删除,并返回新增失败。
优点:
-
实现简单。
-
代码更改少。
缺点: