其他分享
首页 > 其他分享> > 微服务架构下如何保证数据的一致性

微服务架构下如何保证数据的一致性

作者:互联网

从本地事务到分布式事务的演变

总结一下,当业务量级扩大之后的分库,以及微服务落地之后的业务服务化,都会产生分布式数据不一致的问题。既然本地事务无法满足需求,因此分布式事务就要登上舞台。什么是分布式事务?我们可以简单地理解,它就是为了保证不同数据库的数据一致性的事务解决方案。这里,我们有必要先来了解下 CAP 原则和 BASE 理论。CAP 原则是 Consistency(一致性)、Availablity(可用性)和 Partition-tolerance(分区容错性)的缩写,它是分布式系统中的平衡理论。在分布式系统中,一致性要求所有节点每次读操作都能保证获取到最新数据;可用性要求无论任何故障产生后都能保证服务仍然可用;分区容错性要求被分区的节点可以正常对外提供服务。事实上,任何系统只可同时满足其中二个,无法三者兼顾。对于分布式系统而言,分区容错性是一个最基本的要求。那么,如果选择了一致性和分区容错性,放弃可用性,那么网络问题会导致系统不可用。如果选择可用性和分区容错性,放弃一致性,不同的节点之间的数据不能及时同步数据而导致数据的不一致。

在这里插入图片描述

强一致性解决方案

二阶段提交协议

三阶段提交协议

最终一致性解决方案

TCC 模式

  1.   tryFunc();
  2.   confirmFunc();
  3.   cancelFunc();
  4.    
微服务架构下的数据一致性保证 pptx0星超过10%的资源371KB 下载
  1.   // try 方法
  2.   @Compensable(confirmMethod = "confirmRecord", cancelMethod = "cancelRecord", transactionContextEditor = MethodTransactionContextEditor.class)
  3.   @Transactional
  4.   public String record(TransactionContext transactionContext, CapitalTradeOrderDto tradeOrderDto) {}
  5.    
  6.   // confirm 方法
  7.   @Transactional
  8.   public void confirmRecord(TransactionContext transactionContext, CapitalTradeOrderDto tradeOrderDto) {}
  9.    
  10.   // cancel 方法
  11.   @Transactional
  12.   public void cancelRecord(TransactionContext transactionContext, CapitalTradeOrderDto tradeOrderDto) {}
  13.    

补偿模式

可靠事件模式

在这里插入图片描述

  1.   public void doServer(){
  2.   // 发送消息
  3.   send();
  4.   // 执行业务
  5.   exec();
  6.   // 更新消息状态
  7.   updateMsg();
  8.   }
  9.    

开源项目的分布式事务实现解读

RocketMQ

ServiceComb

   

标签:事务,架构,业务,消息,提交,一致性,服务,保证数据
来源: https://www.cnblogs.com/csjoz/p/16592262.html