分布式系统的数据一致性问题 - 大数据教程
当前位置:天才写手 > tutorial > 大数据教程 > 分布式系统的数据一致性问题
2018-05-19 08:00 星期六
分布式系统的数据一致性问题

在众多学习中,文章也许不起眼,但是重要的下面我们就来讲解一下!!

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

有人把数据比喻为蕴 藏能量的煤矿。煤炭按照性质有焦煤、无烟煤、肥煤、贫煤等分类,而露天煤矿、深山煤矿的挖掘成本又不一样。与此类似,大数据并不在“大”,而在于“有用”。价值含量、挖掘成本比数量更为重要。对于很多行业而言,如何利用这些大规模数据是成为赢得竞争的关键。
  大数据的价值体现在以下几个方面:1)对大量消费者提供产品或服务的企业可以利用大数据进行精准营销;2) 做小而美模式的中长尾企业可以利用大数据做服务转型;3) 面临互联网压力之下必须转型的传统企业需要与时俱进充分利用大数据的价值。
不过,“大数据”在经济发展中的巨大意义并不代表其能取代一切对于社会问题的理性思考,科学发展的逻辑不能被湮没在海量数据中。著名经济学家路德维希·冯·米塞斯曾提醒过:“就今日言,有很多人忙碌于资料之无益累积,以致对问题之说明与解决,丧失了其对特殊的经济意义的了解。”这确实是需要警惕的。

这两个问题就是分布式环境下数据一致性的问题
对于第一个问题,比较好解决,我们先看看一个TCP/IP协议链接建立的过程oracle视频
分布式系统的数据一致性问题
我们的思路可以从这个上面出发,在简化一下,就一个请求,一个应答。
简单的通信模型是这样的
A->M : 你收到我的一条消息没有,消息的ID是12345
M->A:  我收到了你的一条消息数据,消息数据是ID;12345
这样就一个请求,一个应答,就完成了一次可靠性的传输。如果A一致没有收到M的应答,就不断的重试。这个时候M就必须保证幂等性。不能重复的处理消息。那么最极端的情况是,怎么也收不到M的应答,这个时候是系统故障。自己检查一下吧。
这么设计就要求,A在发送消息的时候持久化这个消息的数据内容,然后不断的重试,一旦接收到M的应答,就删除这条消息。同样,M端也是一样的。不要相信MQ的持久化机制,不是很靠谱的。
那么M给A发送消息也采取类似的原理就可以了。oracle视频
下面在看看第二个问题,如何保持数据的一致性更新,这个还是可以参考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成功的应答。
整个过程相当复杂。这个也就是数据一旦分布了,带来最大的问题就是数据一致性的问题。这个成本非常高。
对于第三个问题,这个就比较复杂了
这个最核心的问题就是消息的顺序性,我们只能在每个消息发一个消息的序列号,但是还是没有最好解决这个问题的办法。因为消息接收方不知道顺序。因为即使给他了序列号,也没有办法告诉他,这个应该何时处理。最好的办法是在第二种方式的基础作为一个批次来更新。
这个只是以最简单的例子来说明一下分布式系统的要保证数据一致性是一件代价很大的事情。当然有的博主会说,这个何必这么复杂,直接数据库同步不就可以了。这个例子当然是没有问题的,万一这个几个库的模型都不一样,我发送消息要处理的事情不一样的。怎么办?
更多视频教程文章的课程,可到课课家官网查看。我在等你哟!!!

 

    关键字:

在线提交作业