分布式事务一致性解决方案

  • 时间:
  • 浏览:4

:保证幂等性的土妙招太满,根据具体的业务场景,总能很容易找到保证幂等性的土妙招。

  所谓分布式服务,倘若把就让通过本地接口交互的模块,拆分成单独的应用独立部署,并通过远程接口和网络消息交互。且不管有一个多多多多多说严不严实,正不正确,理解就好。本文的重点也全部前会 你你这一话题。简单画一张图辅助理解,如图。集中式架构,要想保证订单表和库存表的一致性,倘若有一个多多多多本地事务(ACID)就能保证两者的强一致性。分布式架构,订单表由订单服务操作,库存表由库存服务操作。要想保证订单表和库存表的一致性,越来越就还要保证订单服务对订单表的操作和库存服务对库存表的操作同事成功。就让的有一个多多多多本地事务就变成了有一个多多多多分布式事务。是是是是因为服务之间通过网络交互+网络异常是常态,就会产生服务间数据不一致的状态。这就涉及有一个多多多多分布式事务一致性的什么的问题。

  

:1) 查询重试后依然失败(极少),报警,人工防止是是是是因为准实时对账系统自动校准;

使命:为中华软件之崛起而编程

业务场景:适用于大规模、高并发的短小操作且依赖返回值的场景。之类,交易服务和库存服务(卡券服务、红包服务等)的交互、用户登录和准入服务的交互等。

:1) B服务通常全部前会 接受请求并持久化后才返回A服务受理成功。防止服务线程被杀掉本来是是因为请求丢失。

业务场景:适用于非核心链路上负载较高的防止环节,你你这一环节经常耗时较长,太满 对时效性要求不高。之类,用户提现时,账户系统和提现系统的交互(CASE-1);提现系统和三方系统(银行系统是是是是因为三方托管系统)的交互(CASE-2)。

  一致性什么的问题,“万恶之源”是数据冗余和分布并通过网络交互+网络异常是常态。

模式分析:A服务将B服务还要的信息通过消息上面件传递给B服务,A服务不让知道B服务的防止结果。你你这一交互模式下,消息生产者要确保消息发送成功;消息消费者要确保消息消费成功。

注:是是是是因为,以上场景和防止方案,越来越蕴藏您工作中遇到的场景,欢迎交流,并一齐讨论防止方案。

业务场景:消息异步防止模式与接口异步调用模式之类,多应用于非核心链路上负载较高的防止环节中,井且服务的上游不关心下游的防止结果,下游倘若还要向上游返回防止结果。之类,在电商系统中,用户下订单支付且交易成功后,发送消息给物流系统是是是是因为账务系统进行后续的防止。

模式分析:A服务同步调用B服务的接口并等待英文结果返回,后续的流程会依赖B服务的返回结果。你你这一交互模式下,A服务得到的结果细分有本身状态。

  3) B服务防止请求要做幂等。

愿景:愿线程员皆因喜欢而编程

:1) 定时任务重试发送消息和消息服务器重发未ACK的消息一般全部前会 时间阶梯式的(2n*时间间隔);

防止方案:方案一,服务调用方查询重试方案;方案二,TCC方案。

防止方案服务被调方最大努力防止方案。是是是是因为B服务中请求有落库,太满能不还还后能 了用定时任务不断重试尽最大努力将请求防止出结果。防止后,将请求状态设置成对应的结果落库。太满 再通知A服务是是是是因为A服务异步主动查询。

  2) 不管是第(1,2)两步还是CASE-2中的第(3,4)两步,是是是是因为查询重试失败,能不还还后能 了落库,用定时任务防止,知道成功。反正不像接口同步调用模式,A服务不还要实时的结果。

关于TCC,被委托人认为,理解原理一阵一阵要。工作中遇到吻合的场景能不还还后能 了根据原理自行实现,满足业务即可。

  2) 支持事务消息上面件之RocketMQ:https://rocketmq.apache.org/docs/quick-start。

模式分析:A服务调用B服务,B服务先受理请求并落库,状态是待防止。B服务防止请求很耗时,是是是是因为要依赖太满的服务。B服务防止就让通知A服务是是是是因为A服务定时去查询B服务的防止结果。你你这一交互模式下,对于CASE-1,第1步和第2步同接口同步调用模式,第3步同消息异步防止模式;对于CASE-2,要花费两次接口同步调用模式

  2) 重试次数不宜多,甚至只重试一次;

作者:

防止方案生产者最大努力通知+消费者最大努力防止方案。