详解分布式事务XA实现数据一致性的协议与原理
|
分布式数据库能解决性能难题,但事务一致性(Consistency)的问题,却很难在分布式数据库上得到解决。 数据一致性? 一致性问题,“万恶之源”是数据冗余和分布并通过网络交互+网络异常是常态。 1、数据一致性的情形 主库、从库和缓存数据一致性,相同数据冗余,关系数据库,为保证关据库的高可用和高性能,一般会采用主从(备)架构并引入缓存。其中数据不一致性存在于数据冗余的时间窗口内。常用的解决方案见数据库之互联网常用架构方案。 多副本数据之间的数据一致性,相同数据副本,大数据领域,一份数据会有多个副本并存储到不同的节点上。客户端可以访问任何一个节点进行读写操作。常用的解决方案是基于Paxos、ZAB、Raft、Quorum、Gossip等的开源实现。
分布式服务之间的数据一致性,相关数据分布,分布式服务,不同的服务操作不同的库(表),而且库(表)间要保持一致。常用的解决方案是分布式事务一致性解决方案。 分布式服务,就是把之前通过本地接口交互的模块,拆分成单独的应用独立部署,并通过RPC和MQ交互。拿物流中的订单和库存举例(新增一条订单记录,库存就要-1),集中式架构中,要想保证订单表和库存表的一致性,只要一个本地事务(ACID)就能保证两者的强一致性;而分布式架构中,订单表由订单服务操作,库存表由库存服务操作。要想保证订单表和库存表的一致性,那么就必须保证订单服务对订单表的操作和库存服务对库存表的操作同时成功。之前的一个本地事务就变成了一个分布式事务。由于服务之间通过网络交互+网络异常是常态,就会产生服务间数据不一致的情况。这就涉及一个分布式事务一致性的问题。 如何来保证分布式事务的ACID,业界也有比较成熟的方案,一般是2段提交2PC协议或者改进版也就是3段提交3PC协议,下面来分别简单介绍下。 2PC协议也成为2段提交,1prepare阶段,2commit阶段。 (编辑:怀化站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


