注册账号案例
采用用户、账号分离设计(这样设计的好处是,当用户的业务信息发生变化时,不会影响认证、授权等系统机制),因此需要保证用户信息与账号信息的一致性。
用户向用户用心发起注册请求,用户中心保存用户业务信息,然后通知统一账号服务新建该用户所对应登录账号。
解决方案分析
针对注册业务,如果用户与账号信息不一致,则会导致严重问题,因此该业务对一致性要求较为严格,即当用户服务和账号服务任意一方出现问题都需要回滚事务。
采用seata实现2PC方案分析
在用户中心发起全局事务,统一账户服务为事务参与者,用户中心和统一账户服务只要有一方出现问题则全局事务回滚,符合要求。实现方法如下:
- 用户中心添加用户信息,开启全局事务
- 统一账号服务添加账号信息,作为事务参与者
- 其中一方执行失败seata对SQL进行你操作删除用户信息和账号信息,实现回滚。
采用Hmily实现TCC方案分析
TCC也可以实现用户中心和统一账户服务只要有一方出现问题则全局事务回滚,符合要求。实现方法如下:
用户中心
try:添加用户,状态为不可用
confirm:更新用户状态为可用
cancel:删除用户