分布式系统中的一致性与共识
一、分布式系统的容错与抽象
分布式系统中会出现各种问题,如数据包丢失、重排、重复、延迟,时钟不准确,节点暂停或崩溃等。简单处理这些故障的方法是让整个服务失败并向用户显示错误信息,但这往往不可接受。因此,我们需要找到容忍故障的方法,让服务在部分组件出现故障时仍能正常运行。
构建容错系统的最佳方式是找到一些具有有用保证的通用抽象,实现一次后让应用程序依赖这些保证。这类似于事务,通过使用事务,应用程序可以忽略崩溃、并发访问和存储设备不可靠等问题。
在分布式系统中,共识是一个重要的抽象,即让所有节点就某件事达成一致。尽管网络故障和进程失败的情况下,可靠地达成共识是一个棘手的问题,但一旦实现了共识,应用程序可以将其用于各种目的,例如在单领导者复制的数据库中选举新的领导者。
二、一致性保证
(一)最终一致性
在复制数据库中,由于写入请求到达不同节点的时间不同,同一时刻不同节点可能会有不同的数据,这种不一致性在各种复制方法(单领导者、多领导者或无领导者复制)中都会出现。
大多数复制数据库至少提供最终一致性,即停止写入数据库并等待一段时间后,所有读取请求最终会返回相同的值。从本质上讲,这种不一致是暂时的,最终会自行解决。不过,最终一致性是一个非常弱的保证,它没有说明副本何时会收敛。在收敛之前,读取可能返回任何值或无值。
最终一致性给应用程序开发者带来了困难,因为它与单线程程序中变量的行为有很大不同。开发者需要时刻注意其局限性,因为相关的错误往往很微妙,在系统出现故障或高并发时才会显现。
(二)更强的一致性模型
为了应对
超级会员免费看
订阅专栏 解锁全文
1330

被折叠的 条评论
为什么被折叠?



