业务流程

采用用户、账号分离设计(这样设计的好处是,当用户的业务信息发生变化时,不会影响的认证、授权等系统
机制),因此需要保证用户信息与账号信息的一致性。

用户向用户中心发起注册请求,用户中心保存用户业务信息,然后通知统一账号服务新建该用户所对应登录
账号。

解决方案分析

针对注册业务,如果用户与账号信息不一致,则会号致严重问题,因此该业务对一致性要求较为严格,即当
用户服务和账号服务任意一方出现问题都需要回滚事务。

根据上述需求进行解决方案分析:

1、采用可靠消息一致性方案
可靠消息一致性要求只要消息发出,事务参与者接到消息就要将事务执行成功,不存在回滚的要求,所以不
适用。

2、采用最大努力通知方案
最大努力通知表示发起通知方执行完本地事务后将结果通知给事务参与者,即使事务参与者执行业务处理失
败发起通知方也不会回滚事务,所以不适用。

3、采用Seata实现2PC
在用户中心发起全局事务 ,统一账户服务为事务参与者,用户中心和统一账户服务只要有一方出现问题则全局事务回滚,符合要求。

实现方法如下:

  1. 用户中心添加用户信息,开启全局事务
  2. 统一账号服务添加账号信息,作为事务参与者
  3. 其中一方执行失败Seata对SQL进行逆操作删除用户信息和账号信息 ,实现回滚。

4、采用Hmily实现TCC

ICC也可以实现用户中心和统一账户服务只要有一方出现问题则全局事务回滚,符合要求。

实现方法如下:

  1. 用户中心

    try:添加用户,状态为不可展
    confirm:更新用户状态为可用
    cancel:删除用户
  2. 统一账号服务

    try:添加账号,状态为不可用
    confirm :更新账号状态为可用
    cancel :删除账号