最近写了一个关于 铁道部购票系统的若干文章

铁道部新客票系统的设计(一)

铁道部新客票系统的设计(二)

铁道部新客票系统的设计(三)

正好遇到一个博友,咨询了一个问题,这个问题正好可以作为分布式系统的数据一致性的简单例子,当然,这个只是比较简单的情况

现在先抛出问题,假设有一个主数据中心在北京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->M : 你收到我的一条消息没有,消息的ID是12345

M->A:  我收到了你的一条消息数据,消息数据是ID;12345

这样就一个请求,一个应答,就完成了一次可靠性的传输。如果A一致没有收到M的应答,就不断的重试。这个时候M就必须保证幂等性。不能重复的处理消息。那么最极端的情况是,怎么也收不到M的应答,这个时候是系统故障。自己检查一下吧。

这么设计就要求,A在发送消息的时候持久化这个消息的数据内容,然后不断的重试,一旦接收到M的应答,就删除这条消息。同样,M端也是一样的。不要相信MQ的持久化机制,不是很靠谱的。

那么M给A发送消息也采取类似的原理就可以了。

下面在看看第二个问题,如何保持数据的一致性更新,这个还是可以参考TCP/IP的协议。

首先A发送一条消息给M:我要发送一批消息数据给你,批次号是10000,数据是5条。

M发送一条消息给A:ok,我准备好了,批次号是10000,发送方你A

接着A发送5条消息给M,消息ID分别为1,2,3,4,5 ,批次号是10000,

紧接着,A发送一个信息给M:我已经完成5小消息的发送,你要提交数据更新了

接下来可能发送两种情况

1 那么M发送消息给A:ok,我收到了5条消息,开始提交数据

2 那么M也可以发送给A:我收到了5条消息,但是还缺少,请你重新发送,那么A就继续发送,直到A收到M成功的应答。

整个过程相当复杂。这个也就是数据一旦分布了,带来最大的问题就是数据一致性的问题。这个成本非常高。

对于第三个问题,这个就比较复杂了

这个最核心的问题就是消息的顺序性,我们只能在每个消息发一个消息的序列号,但是还是没有最好解决这个问题的办法。因为消息接收方不知道顺序。因为即使给他了序列号,也没有办法告诉他,这个应该何时处理。最好的办法是在第二种方式的基础作为一个批次来更新。

这个只是以最简单的例子来说明一下分布式系统的要保证数据一致性是一件代价很大的事情。当然有的博主会说,这个何必这么复杂,直接数据库同步不就可以了。这个例子当然是没有问题的,万一这个几个库的模型都不一样,我发送消息要处理的事情不一样的。怎么办?

转载于:https://www.cnblogs.com/aigongsi/archive/2012/09/21/2696773.html

关于分布式系统的数据一致性问题(一)相关推荐

  1. 关于分布式系统的数据一致性问题(三)

    在我的博文里面 关于分布式系统的数据一致性问题(二) 里面主要介绍了数据分布的情况下保证一致性的情况,在第二篇文章里面,我这里提出了三个问题 订单系统调用支付系统支付订单,支付成功,但是返回给订单系统 ...

  2. 不懂这些高并发分布式架构、分布式系统的数据一致性解决方案,你如何能找到高新互联网工作呢?强势解析eBay BASE模式、去哪儿及蘑菇街分布式架构...

    互联网行业是大势所趋,从招聘工资水平即可看出,那么如何提升自我技能,满足互联网行业技能要求?需要以目标为导向,进行技能提升,本文主要针对高并发分布式系统设计.架构(数据一致性)做了分析,祝各位早日走上 ...

  3. 结合现有分布式系统的数据一致性思考

    背景 我们项目本身分成了多套系统,但数据上有要求一致性的地方(比如订单状态,通俗点讲就是系统A更新了订单状态为状态一,那么系统B也需要把相同订单的订单状态更新成状态一,这样可以让我们不管是读系统A还是 ...

  4. 分布式系统数据一致性解决方案

    2019独角兽企业重金招聘Python工程师标准>>> 1.微服务架构的数据一致性问题 以电商平台为例,当用户下单并支付后,系统需要修改订单的状态并且增加用户积分.由于系统采用的是微 ...

  5. Re:从 0 开始的微服务架构--(四)如何保障微服务架构下的数据一致性--转

    原文地址:http://mp.weixin.qq.com/s/eXvoJew3bjFKzLLJpS0Otg 随着微服务架构的推广,越来越多的公司采用微服务架构来构建自己的业务平台.就像前边的文章说的, ...

  6. 分布式系统(微服务架构)的一致性和幂等性问题相关概念解析

    前言 什么是分布式系统?关于这点其实并没有明确且统一的定义.在我看来,只要一个系统满足以下几点就可以称之为分布式系统 系统由物理上不同分布的多个机器节点组成 系统的多个节点通过网络进行通信,协调彼此之 ...

  7. (转)如何保障微服务架构下的数据一致性?

    转自: https://cloud.tencent.com/developer/article/1459734 [1]写在前面 随着微服务架构的推广,越来越多的公司采用微服务架构来构建自己的业务平台. ...

  8. 不同微服务独立数据库,如何保障微服务架构下的数据一致性

    虽然已经红了很久,但是"微服务架构"正变得越来越重要,也将继续火下去.各个公司与技术人员都在分享微服务架构的相关知识与实践经验,但我们发现,目前网上的这些相关文章中,要么上来就是很 ...

  9. 分布式数据一致性的探讨

    很多分布式系统都会用缓存,本地缓存或者NoSQL,亦或者两者都上.在笔者认为,只要用到缓存系统,就必然会存在数据不一致的时间段,这个时间有长有短而已,当然最终数据是要一致的,也就是达成最终一致性(ev ...

最新文章

  1. Citrix通用打印服务器配置
  2. RDKit | 基于分子指纹可视化化学空间
  3. [Offer收割]编程练习赛15 A.偶像的条件[贪心]
  4. magento二次开发的基本步骤分享
  5. Java操作MongoDB之mongodb-driver
  6. java学习--基础知识阶段性总结--网络编程
  7. win7电脑0x000007b蓝屏怎么办
  8. 解析大型.NET ERP系统 自动更新
  9. 跨境电商SaaS会成为一门大生意吗?
  10. 4G升级5G需要换手机还是换手机卡,还是都不用换?
  11. iOS GitHub上常用第三方框架与一些参考文本总结
  12. POJ3295 Tautology(栈+思路详解)
  13. 第二次练车,练了一天倒库
  14. C++ Guaranteed Copy Elision
  15. 通过星座获取日期月份
  16. 贤胜足球分析系统 v2.4.4 大小球测试版 怎么用
  17. 信息学奥赛一本通答案dj空格分隔输出1026
  18. SQL SERVER 链接服务器
  19. 重读《C primer plus》(五)
  20. 指称关系(Referring Relationships)

热门文章

  1. MySQL 5.6通过MMM实现读写分离的高可用架构
  2. 深入理解C#第三版部分内容
  3. 《Raspberry Pi用户指南》——导读
  4. DotNet中几种常用的加密算法
  5. WordPress插件开发: 文章同步到OSC博客插件(OscPress) (四)
  6. pjsip学习笔记二
  7. Security issue about static code checking
  8. php 分页类使用,php 分页类
  9. STM32中GPIO的8种工作模式!
  10. 【linux服务器安全系列】之存储技术