分布式事务解决方案

技术文档网 2021-06-11

问题

假设 user ,order, wallet 在 三个rpc服务中. 一开始注册用户就涉及到了了分布式事务...不用分布式怎么确保都创建成功呢?

方案一

大佬:说明业务和表拆错了,一个业务应该可以分阶段提交,并且提交应该支持幂等。 没有失败回滚这种事情,失败也要落库,后续通过其它补偿处理。

:失败也要落库,不错,那就是凡是涉及到跨库操作的,在一定时间后都需要做一下最终一致性检查操作了.

大佬:写入数据库就算提交一个业务,你带着写入数据库的都不用回滚这个设定去写代码就好了,写出来的业务自然是分阶段提交的。

: 多谢大佬指点呀....真是拨云见日~~ 那就是,凡是有写入失败的,就放入 mq ,让相应的业务做补偿处理,其他的不用管.

方案二

大佬: 你要是能说服产品把流程改成让用户主动重试,连 mq 都不需要。毕竟 mq 只能解决好竞争和超时的问题,真正的业务报错 mq 是解决不了的,回滚操作也有报错的风险呢,套娃一样用 mq 会增加业务的理解成本。

: 如果用户重试,不用mq,那就是,凡是写入失败的业务,直接调用相应的rpc,修改记录.用户那边用 websocket 推送提醒一下咯.

大佬: 我大多是情况下只能做出当下业务能用的设计,没经历过设计出来不用改或者很好加业务的情况。 毕竟程序员只是产品经理的笔。产品经理怎么想就怎么做,理解一致才比较好加业务。

相关文章

  1. 硅谷互联网公司的开发流程

    开发流程包括这么几个阶段: OKR 的设立; 主项目及其子项目的确立; 每个子项目的生命周期; 主项目的生命周期; 收尾、维护、复盘。 第一点,OKR 的设立 所有项目的起始,都应该从 Ro

  2. RESTful-表述性状态转移风格

    REST英文全拼:Representational State Transfer 面向资源编程 资源指的就是一类数据 产品表->就是产品资源 最重要的是如何表示一个资源 地址即

  3. 稳定性思考

    产品功能线 0-1: 当系统从无到有的时候,首要考虑的是研发效率,功能快速迭代,满足快速增长的业务需求 1-10 系统已经搭建起来,此时考虑的是系统的稳定性。 可用性:1.隔离:区分出核心和非核心功能

  4. Supervisor守护队列发邮件

    安装 CentOS: yum -y install supervisor Debien/Ubuntu适用:apt-get install supervisor 配置 修改主配置文件:vim /et

  5. 安装libsodium,让服务器支持chacha20等加密方式

    用chacha20加密方式需要安装libsodium 注意:libsodium从1.0.15开始就废弃了aes-128-ctr yum install wget m2crypto git libsod

随机推荐

  1. 硅谷互联网公司的开发流程

    开发流程包括这么几个阶段: OKR 的设立; 主项目及其子项目的确立; 每个子项目的生命周期; 主项目的生命周期; 收尾、维护、复盘。 第一点,OKR 的设立 所有项目的起始,都应该从 Ro

  2. RESTful-表述性状态转移风格

    REST英文全拼:Representational State Transfer 面向资源编程 资源指的就是一类数据 产品表->就是产品资源 最重要的是如何表示一个资源 地址即

  3. 稳定性思考

    产品功能线 0-1: 当系统从无到有的时候,首要考虑的是研发效率,功能快速迭代,满足快速增长的业务需求 1-10 系统已经搭建起来,此时考虑的是系统的稳定性。 可用性:1.隔离:区分出核心和非核心功能

  4. Supervisor守护队列发邮件

    安装 CentOS: yum -y install supervisor Debien/Ubuntu适用:apt-get install supervisor 配置 修改主配置文件:vim /et

  5. 安装libsodium,让服务器支持chacha20等加密方式

    用chacha20加密方式需要安装libsodium 注意:libsodium从1.0.15开始就废弃了aes-128-ctr yum install wget m2crypto git libsod