其他分享
首页 > 其他分享> > 深入理解分布式系统:分区、复制、分布式事务以及系统一致性与共识

深入理解分布式系统:分区、复制、分布式事务以及系统一致性与共识

作者:互联网

分布式数据

引言

你可能会出于各种各样的原因,希望将数据库分布到多台机器上:

可扩展性
如果你的数据量、读取负载、写⼊负载超出单台机器的处理能⼒,可以将负载分散到多台计算机上。

容错/⾼可⽤性
如果你的应⽤需要在单台机器(或多台机器,⽹络或整个数据中⼼)出现故障的情况下仍然能继续⼯
作,则可使⽤多台机器,以提供冗余。⼀台故障时,另⼀台可以接管。

延迟
如果在世界各地都有⽤户,你也许会考虑在全球范围部署多个服务器,从⽽每个⽤户可以从地理上最近
的数据中⼼获取服务,避免了等待⽹络数据包穿越半个世界。

在具体实现上,⽆共享架构(shared-nothing architecture)因其较高的性价比,以及强大的功能而被广泛使用,无共享架构有时称为⽔平扩展(horizontal scale) 或向外扩展(scale out))。
在这种架构中,运⾏数据库软件的每台机器/虚拟机都称为节点(node)。每个节点只使⽤各⾃的处理器,内存和磁盘。节点之间的任何协调,都是在软件层⾯使⽤传统⽹络实现的。

虽然分布式⽆共享架构有许多优点,但它通常也会给应⽤带来额外的复杂度,有时也会限制你可⽤数据模型的表达⼒。接下来我们将详细讨论分布式系统带来的各种问题,以及问题的解决方案;

五.复制

六.分区

  1. ⼆级索引存在不同的分区。辅助索引中的条⽬可以包括来⾃主键的所有分区的记录。
    2.当⽂档写⼊时,需要更新多个分区中的⼆级索引;
    3.但是可以从单个分区中进⾏读取。

七、事务

8.分布式系统的麻烦

防护令牌:当使⽤锁或租约来保护对某些资源的访问时,需要确保⼀个被误认为⾃⼰是“天选者”的节点不能中断系统的其它部分。实现这⼀⽬标的⼀个相当简单的技术就是防护令牌。(fencing)屏蔽令牌保证它是单调递增,资源仅接受最新的写入。
- c。请注意,这种机制要求资源本身在检查令牌⽅⾯发挥积极作⽤,通过拒绝使⽤旧的令牌,⽽不是已经被处理的令牌来进⾏写操作——仅仅依靠客户端检查⾃⼰的锁状态是不够的。

- 拜占庭故障

	- 拜占庭故障:在不信任的环境中达成共识的问题被称为拜占庭将军问题。

	- 拜占庭容错

		- 拜占庭容错:当⼀个系统在部分节点发⽣故障、不遵守协议、甚⾄恶意攻击、扰乱⽹络时仍然能继续正确⼯作,称之为拜占庭容错(Byzantine fault-tolerant)
		- 拜占庭容错相当复杂&实现成本很高:在本书讨论的那些系统中,我们通常可以安全地假设没有拜占庭式的错误。在你的数据中⼼⾥,

所有的节点都是由你的组织控制的(所以他们可以信任),辐射⽔平⾜够低,内存损坏不是⼀个⼤问题。
制作拜占庭容错系统的协议相当复杂【84】,部署拜占庭容错解决⽅案的成本使其变得不切实际。

	- 弱谎言形式

		- 弱谎言形式提供简单实用的可靠性保证:尽管我们假设节点通常是诚实的,但值得向软件中添加防⽌“撒谎”弱形式的机制——例如,由硬件问题导致的⽆效消息,软件错误和错误配置。这种保护机制并不是完全的拜占庭容错,但它们仍然是简单⽽实⽤的步骤,以提⾼可靠性。

- 系统模型与实现

	- 算法

		- 有很多算法被设计以解决分布式系统问题,即容忍分布式系统的各种故障。

	- 系统模型:这个模型是⼀个抽象,描述⼀个

【算法】可能承担的事情。以某种方式将我们期望在系统中发生的错误形式化。

		- 定时假说系统模型

			- a。同步模型:假设⽹络延迟,进程暂停和和时钟误差都是有界限的,即假设⽹络延迟,暂停和时钟漂移将永远不会超过某个固定的上限。需要注意⽆限延迟的实际情况。
			- b。部分同步模型:⼀个系统在⼤多数情况下像⼀个同步系统⼀样运⾏,但有时候会超出⽹络延迟,进程暂停和时钟漂移的界限。
			- c。异步模型:不允许对时机做任何假设。

		- 节点失效系统模型

			- a。崩溃-停⽌故障(crash-stop):意味着节点可能在任意时刻突然停⽌响应,此后该节点永远消失——它永远不会回来
			- b。崩溃-恢复故障(crashrecovery):假设节点可能会在任何时候崩溃,但也许会在未知的时间之后再次开始响应。节点具有稳定的存储且会在崩溃中保留,⽽内存中的状态会丢失。
			- c。拜占庭(任意)故障:节点可以做(绝对意义上的)任何事情,包括试图戏弄和欺骗其他节点。
			- 对于真实系统的建模,具有崩溃-恢复故障(crash-recovery)的部分同步模型(partialsynchronous)通常是最有⽤的模型。

	- 算法的正确性

9.一致性与共识

因此,启发式决策只是为了逃出灾难性的情况⽽准备的,⽽不是为了⽇常使⽤的。

	- 分布式事务的限制

		- 核⼼认识:事务协调者本身就是⼀种数据库(存储了事务的结果),需要像其他重要数据库⼀样⼩⼼地打交道。
		- 限制1.如果协调者没有复制,只是在单台机器上运行,那么他是整个系统的失效单点。ps:即存疑问题
		- 限制2. 应⽤服务器不再是⽆状态的。

许多服务器端应⽤都是使⽤⽆状态模式开发的(受HTTP的⻘睐),所有持久状态都存储在数据库中,因此具有应⽤服务器可随意按需添加删除的优点。
但是,当协调者成为应⽤服务器的⼀部分时,它会改变部署的性质。突然间,协调者的⽇志成为持久系统状态的关键部分—— 与数据库本身⼀样重要,因为协调者⽇志是为了在崩溃后恢复存疑事务所必需的。这样的应⽤服务器不再是⽆状态的了。
- 限制3. 由于XA需要兼容各种数据系统,因此它必须是所有系统的最⼩公分⺟。例如,它不能检测不同系统间的死锁,因为这将需要⼀个标准协议来让系统交换每个事务正在等待的锁的信息。以及无法与SSI 协同⼯作,因为这需要⼀个跨系统定冲突的协议。
- 限制4. 2PC成功提交⼀个事务需要所有参与者的响应。因此,如果系统的任何部分损坏,事务也会失败。因此,分布式事务⼜有【扩⼤失效】(amplifying failures)的趋势,这⼜与我
们构建容错系统的⽬标背道⽽驰。

- 容错共识

	- 概念

		- ⾮正式地,共识意味着让⼏个节点就某事达成⼀致。共识问题通常形式化如下:⼀个或多个节点可以提议(propose)某些值,⽽共识算法决定(decides)采⽤其中的某个值。

	- 共识算法必须满足的性质

		- a。协商一致性(Uniform agreement):所有节点都接受相同的决议。
		- b。诚实性(Integrity):所有节点不能反悔,即对一项提议不能有两次决定。
		- c。合法性(Validity):如果一个节点决定了值v,则v一定是由某个节点所提议的。
		- d。可终止性(Termination):节点如果没有崩溃,则最终一定可以达成协议。

	- 可终⽌性是⼀种活性属性,⽽另外三种是安全属性。

		- i。协商一致性和诚实性定义了共识的【核⼼思想】:决议一直的结果,⼀旦决定,你就不能改变。

ii。合法性属性束腰式为了排除一些无意义的方案。
iii。可终止性引入了【容错】思想:⼀个共识算法不能简单地永远闲坐着等死 ,它必须取得进展。即使部分节点出现故障,其他节点也必须达成⼀项决定。

	- 共识算法和全序⼴播

		- ⼤多数这些算法实际上并不直接使⽤这⾥描述的形式化模型(提议并决定单个值,同时满足以上4个属性)。取而代之的是全序⼴播算法,全序⼴播将消息按照相同的顺序发送到所有节点,有且只有一次。
		- 全序⼴播相当于重复进⾏多轮共识(每一轮共识的决定对应于一条消息):

			- 由于协商一致性,所有节点决定以相同的顺序发送相同的消息。
			- 由于诚实性,消息不能重复。
			- 由于合法性,消息不会被破坏,也不会凭空捏造。
			- 由于可终止性,消息不会丢失。

	- 时代编号和法定⼈数

		- 迄今为⽌所讨论的所有共识协议,在内部都以某种形式使⽤⼀个领导者,但它们并不能保证领导者是独⼀⽆⼆的。相反,它们可以做出更弱的保证:协议定义了⼀个时代编号(epoch number),并确保在每个时代中,领导者都是唯⼀的。

			- 时代编号在Paxos中称为投票编号(ballot number,在视图戳复制中成为视图编号(view number,以及在Raft中称为任期号码(term number)),

		- 对领导者想要做出的每⼀个决定,都必须将提议值发送给其他节点,并等待法定⼈数的节点响应并赞成提案。法定⼈数通常(但不总是)由多数节点组成【105】。只有在没有意识到任何带有更⾼时代编号的领导者的情况下,⼀个节点才会投票赞成提议。
		- 因此,我们有两轮投票:第⼀次是为了选出⼀位领导者,第⼆次是对领导者的提议进⾏表决。关键的洞察在于,这两次投票的法定⼈群必须相互【重叠】(overlap):如果⼀个提案的表决通过,则⾄少得有⼀个参与投票的节点也必须参加过最近的领导者选举【105】

	- 共识的局限性

		- 优点

			- 共识算法对于分布式系统来说是⼀个巨⼤的突破:它为其他充满不确定性的系统带来了基础的安全属性(协商一致性,诚实性和合法性),然⽽它们还能保持容错(只要多数节点正常⼯作且可达,就能取得进展)。

		- 缺点

			- 在异步复制模式下,节点发生故障切换时,一些已经提交的数据可能会丢失。
			- 共识系统通常依靠超时来检测失效的节点。在网络糟糕的情况下,会导致频繁的领导者选举,继而导致糟糕的性能表现,
			- 共识系统需要至少三个节点才能容忍单节点故障,如果⽹络故障切断了某些节点同其他节点的连接,则只有多数节点所在的⽹络可以继续⼯作,其余部分将被阻塞(参阅“线性⼀致性的代价”)。

- 成员与协调服务

标签:事务,分区,协调者,数据库,提交,分布式系统,一致性,节点,分布式
来源: https://www.cnblogs.com/xuxh120/p/15627954.html