分布式消息最终一致性事务
现在先抛出问题,假设有一个主数据中心在北京M,然后有成都A,上海B两个地方数据中心,现在的问题是,假设成都上海各自的数据中心有记录变更,需要先同步到主数据中心,主数据中心更新完成之后,在把最新的数据分发到上海,成都的地方数据中心A,地方数据中心更新数据,保持和主数据中心一致性(数据库结构完全一致)。数据更新的消息是通过一台中心的MQ进行转发。 先把问题简单化处理,假设A增加一条记录Message_A,发送到M,B增加一条记录 MESSAGE_B发送到M,都是通过MQ服务器进行转发,那么M系统接收到条消息,增加两条数据,那么M在把增加的消息群发给A,B,A和B找到自己缺失的数据,更新数据库。这样就完成了一个数据的同步。 从正常情况下来看,都没有问题,逻辑完全合理,但是请考虑以下三个问题 1 如何保证A->M的消息,M一定接收到了,同样,如何保证M->A的消息,M一定接收到了 2 如果数据需要一致性更新,比如A发送了三条消息给M,M要么全部保存,要么全部不保存,不能够只保存其中的几条记录。我们假设更新的数据是一条条发送的。 3 假设同时A发送了多条更新请求,如何保证顺序性要求? 这两个问题就是分布式环境下数据一致性的问题 对于第一个问题,比较好解决,我们先看看一个tcp/ip协议链接建立的过程 我们的思路可以从这个上面出发,在简化一下,就一个请求,一个应答。 简单的通信模型是这样的 A