关于java:分布式事务五之最大努力通知

41次阅读

共计 1097 个字符,预计需要花费 3 分钟才能阅读完成。

最大致力告诉型 (Best-effort delivery) 是最简略的一种柔性事务,实用于一些最终一致性工夫敏感度低的业务,且被动方处理结果不影响被动方的处理结果。典型的应用场景:如银行告诉、商户告诉等。

最大致力告诉

最大致力告诉型 (Best-effort delivery) 是最简略的一种柔性事务,实用于一些最终一致性工夫敏感度低的业务,且被动方处理结果 不影响被动方的处理结果。典型的应用场景:如银行告诉、商户告诉等。最大致力告诉型的实现计划,个别合乎以下特点:

  1. 不可靠消息:业务流动被动方,在实现业务解决之后,向业务流动的被动方发送音讯,直到告诉 N 次后不再告诉,容许音讯失落(不可靠消息)。
  2. 定期校对:业务流动的被动方,依据定时策略,向业务流动被动方查问(被动方提供查问接口),复原失落的业务音讯。

最大致力告诉示例

举例来说:笔者已经做过一个短信发送平台,背景是公司外部有多个业务都有发送短信的需要,如果每个业务独立实现短信发送性能,存在性能实现上的反复。因而专门做了一个短信平台我的项目,所有的业务方都接入这个短信平台,来实现发送短信的性能。简化后的架构如下所示:

短信发送流程

业务方发送一次短信的流程蕴含如下步骤:

  1. 业务方将短信发送申请提交给短信平台;
  2. 短信平台接管到要发送的短信,记录到数据库中,并标记其状态为”已接管 ”;
  3. 短信平台调用内部短信发送供应商的接口,发送短信。内部供应商的接口也是异步将短信发送到用户手机上,因而这个接口调用后,立刻返回,进入第 4 步;
  4. 更新短信发送状态为 ” 已发送 ”;
  5. 短信发送供应商异步告诉短信平台短信发送后果。而告诉可能失败,因而最多只会告诉 N 次。;
  6. 短信平台接管到短信发送后果后,更新短信发送状态,可能是胜利,也可能失败(如手机欠费)。到底是胜利还是失败并不重要,重要的是咱们晓得了这调短信发送的最终后果;
  7. 如果最多只告诉 N 次,如果都失败了的话,那么短信平台将不晓得短信到底有没有胜利发送。因而短信发送供应商须要提供一个查问接口,以不便短信平台驱动的去查问,进行定期校对。

在这个案例中,短信发送供应商告诉短信平台短信发送后果的过程中,就是最典型的最大致力告诉型计划,告诉了 N 次就不再告诉。通过提供一个短信后果查问接口,让短信平台能够进行定期的校对。而因为短信发送业务的工夫敏感度并不高,比拟适宜采纳这个计划。

须要留神的是,短信后果查问接口很重要,必须要进行定期校对。因为前期要进行对账,笔者在做这个我的项目的时候,一个月的短信发送总量在高峰期能够达到 1 亿条左右,即便一条短信只有 5 分钱,一个月就有 500W。

参考文档

柔性事务:最大致力告诉

本文最先公布至微信公众号,版权所有,禁止转载!

正文完
 0