当我们在生产线上用一台服务器来提供数据服务的时候,我会遇到如下的两个问题。

当咱们在生产线上用一台服务器来供给数据服务的时分,我会遇到如下的两个问题:

大数据存储:分布式体系的事务处理(大数据与采用分布式处理,分布式数据库和云存储)  大数据 分布式系统 事务处理 第1张

(1)一台服务器的功能不足以供给满足的才能服务于一切的网络恳求。

(2)咱们总是惧怕咱们的这台服务器停机,形成服务不可用或是数据丢掉。

所以咱们不得不对咱们的服务器进行扩展,参加更多的机器来分管功能上的问题,以及来处理单点故障问题。 一般,咱们会经过两种手法来扩展咱们的数据服务:

(1)数据分区:便是把数据分块放在不同的服务器上(如:uid % 16,一致性哈希等)。

(2)数据镜像:让一切的服务器都有相同的数据,供给适当的服务。

关于第一种状况,咱们无法处理数据丢掉的问题,单台服务器出问题时,会有部分数据丢掉。所以,数据服务的高可用性只能经过第二种办法来完结——数据的冗余存储(一般工业界以为比较安全的备份数应该是3份,如:Hadoop和Dynamo)。

可是,参加更多的机器,会让咱们的数据服务变得很杂乱,尤其是跨服务器的业务处理,也便是跨服务器的数据一致性。这个是一个很难的问题。 让咱们用最经典的Use Case:“A帐号向B帐号汇钱”来阐明一下,了解RDBMS业务的都知道从帐号A到帐号B需求6个操作:

1)从A帐号中把余额读出来。

2)对A帐号做减法操作。

3)把成果写回A帐号中。

4)从B帐号中把余额读出来。

5)对B帐号做加法操作。

6)把成果写回B帐号中。

为了数据的一致性,这6件事,要么都成功做完,要么都不成功,并且这个操作的过程中,对A、B帐号的其它拜访必需锁死,所谓锁死便是要扫除其它的读写操作,否则会有脏数据的问题,这便是业务。那么,咱们在参加了更多的机器后,这个工作会变得杂乱起来:

1)在数据分区的计划中:假如A帐号和B帐号的数据不在同一台服务器上怎样办?咱们需求一个跨机器的业务处理。也便是说,假如A的扣钱成功了,但B的加钱不成功,咱们还要把A的操作给回滚回去。这在跨机器的状况下,就变得比较杂乱了。

2)在数据镜像的计划中:A帐号和B帐号间的汇款是能够在一台机器上完结的,可是别忘了咱们有多台机器存在A帐号和B帐号的副本。假如对A帐号的汇钱有两个并发操作(要汇给B和C),这两个操作发生在不同的两台服务器上怎样办?也便是说,在数据镜像中,在不同的服务器上对同一个数据的写操作怎样确保其一致性,确保数据不抵触?

一起,咱们还要考虑功能的要素,假如不考虑功能的话,业务得到确保并不困难,体系慢一点就行了。除了考虑功能外,咱们还要考虑可用性,也便是说,一台机器没了,数据不丢掉,服务可由其他机器持续供给。 所以,咱们需求要点考虑下面的这么几个状况:

1)容灾:数据不丢、结点的Failover

2)数据的一致性:业务处理

3)功能:吞吐量 、 呼应时刻

前面说过,要处理数据不丢,只能经过数据冗余的办法,就算是数据分区,每个区也需求进行数据冗余处理。这便是数据副本:当呈现某个节点的数据丢掉时能够从副本读到,数据副本是分布式体系处理数据丢掉反常的仅有手法。所以,在这篇文章中,简略起见,咱们只评论在数据冗余状况下考虑数据的一致性和功能的问题。简略说来:

1)要想让数据有高可用性,就得写多份数据。

2)写多份的问题会导致数据一致性的问题。

3)数据一致性的问题又会引发功能问题。

这便是软件开发,按下了葫芦起了瓢。

转载请说明出处
知优网 » 大数据存储:分布式体系的事务处理(大数据与采用分布式处理,分布式数据库和云存储)

发表评论

您需要后才能发表评论