美文网首页
【分布式】副本协议

【分布式】副本协议

作者: Bogon | 来源:发表于2022-12-10 00:28 被阅读0次

副本协议

副本控制协议指按特定的协议流程控制副本数据的读写行为,使得副本满足一定的可用性和一致性要求的分布式协议。

副本控制协议要具有一定的对抗异常状态的容错能力,从而使得系统具有一定的可用性,同时副本控制协议要能提供一定一致性级别。

由CAP 原可知,要设计一种满足强一致性,且在出现任何网络异常时都可用的副本协议是不可能的。

为此,实际中的副本控制协议总是在可用性、一致性与性能等各要素之间按照具体需求折中。

副本控制协议可以分为两大类:“中心化(centralized)副本控制协议”和“去中心化(decentralized)副本控制协议”。

中心化副本控制协议

中心化副本控制协议的基本思路是由一个中心节点协调副本数据的更新、维护副本之间的一致性。

图给出了中心化副本协议的通用架构。
中心化副本控制协议的优点是协议相对较为简单,所有的副本相关的控制交由中心节点完成。
并发控制将由中心节点完成,从而使得一个分布式并发控制问题,简化为一个单机并发控制问题。

所谓并发控制,即多个节点同时需要修改副本数据时,需要解决“写写”、“读写”等并发冲突。单机系统上常用加锁等方式进行并发控制。对于分布式并发控制,加锁也是一个常用的方法,但如果没有中心节点统一进行锁管理,就需要完全分布式化的锁系统,会使得协议非常复杂。

中心化副本控制协议的缺点是系统的可用性依赖于中心化节点,当中心节点异常或与中心节点通信中断时,系统将失去某些服务(通常至少失去更新服务),所以中心化副本控制协议的缺点正是存在一定的停服务时间。

image.png

primary-secondary 协议

在primary-secondary 类型的协议中,副本被分为两大类,其中有且仅有一个副本作为primary 副本,除primary 以外的副本都作为secondary 副本。

维护primary 副本的节点作为中心节点,中心节点负责维护数据的更新、并发控制、协调副本的一致性。

Primary-secondary 类型的协议一般要解决四大类问题:数据更新流程、数据读取方式、Primary 副本的确定和切换、数据同步(reconcile)。

数据更新基本流程

  • 数据更新都由primary 节点协调完成。

  • 外部节点将更新操作发给primary 节点

  • primary 节点进行并发控制即确定并发更新操作的先后顺序

  • primary 节点将更新操作发送给secondary 节点

  • primary 根据secondary 节点的完成情况决定更新是否成功并将结果返回外部节点

image.png

在工程实践中,如果由primary 直接同时发送给其他N 个副本发送数据,则每个 secondary 的更新吞吐受限于primary 总的出口网络带宽,最大为primary 网络出口带宽的1/N。

为了解决这个问题,有些系统(例如,GFS),使用接力的方式同步数据,即primary 将更新发送给第一 个secondary 副本,第一个secondary 副本发送给第二secondary 副本,依次类推。

数据读取方式

数据读取方式也与一致性高度相关。如果只需要最终一致性,则读取任何副本都可以满足需求。

如果需要会话一致性,则可以为副本设置版本号,每次更新后递增版本号,用户读取副本时验证版本号,从而保证用户读到的数据在会话范围内单调递增。

使用primary-secondary 比较困难的是实现强一致性。

由于数据的更新流程都是由primary 控制的,primary 副本上的数据一定是最新的,所以 如果始终只读primary 副本的数据,可以实现强一致性。如果只读primary 副本,则secondary 副本将不提供读服务。

实践中,如果副本不与机器绑定,而是按照数据段为单位维护副本,仅有primary 副本提供读服务在很多场景下并不会造出机器资源浪费。

将副本分散到集群中个,假设primary 也是随机的确定的,那么每台机器上都有一些数据的primary 副本,也有另一些数据段的secondary 副本,从而某台服务器实际都提供读写服务。

由primary 控制节点secondary 节点的可用性。
当primary 更新某个secondary 副本不成功时,primary 将该secondary 副本标记为不可用,从而用户不再读取该不可用的副本。不可用的 secondary 副本可以继续尝试与primary 同步数据,当与primary 完成数据同步后,primary 可以副本标记为可用。

这种方式使得所有的可用的副本,无论是primary 还是secondary 都是可读的,且在一个确定的时间内,某secondary 副本要么更新到与primary 一致的最新状态,要么被标记为不可用,从而符合较高的一致性要求。
这种方式依赖于一个中心元数据管理系统,用于记录哪些副本可用,哪些副本不可用。
某种意义上,该方式通过降低系统的可用性来提高系统的一致性。

primary 副本的确定与切换

在primary-secondary 类型的协议中,另一个核心的问题是如何确定primary 副本,尤其是在原primary 副本所在机器出现宕机等异常时,需要有某种机制切换primary 副本,使得某个secondary 副本成为新的primary 副本。

通常的,在primary-secondary 类型的分布式系统中,哪个副本是primary 这一信息都属于元信息,由专门的元数据服务器维护。执行更新操作时,首先查询元数据服务器获取副本的primary 信息,从而进一步执行数据更新流程。

由于分布式系统中可靠的发现节点异常是需要一定的探测时间的,这样的探测时间通常是10 秒级别,这也意味着一旦primary 异常,最多需要10 秒级别的发现时间,系统才能开始primary 的切换,在这10 秒时间内,由于没有primary,系统不能提供更 新服务,如果系统只能读primary 副本,则这段时间内甚至不能提供读服务。从这里可以看到,primary-backup 类副本协议的最大缺点就是由于primary 切换带来的一定的停服务时间。

数据同步

不一致的secondary 副本需要与primary 进行同步(reconcile)。

通常不一致的形式有三种:

一、由于网络分化等异常,secondary 上的数据落后于primary 上的数据。

二、在某些协议下,secondary 上的数据有可能是脏数据,需要被丢弃。
所谓脏数据是由于primary 副本没有进行某一更新操作,而secondary 副本上反而进行的多余的修改操作,从而造成secondary 副本数据错误。

三、secondary 是一个新增加的副本,完全没有数据,需要从其他副本上拷贝数据。

对于第一种secondary 数据落后的情况,常见的同步方式是回放primary 上的操作日志(通常是redo 日志),从而追上primary 的更新进度。

对于脏数据的情况,较好的做法是设计的分布式协议不产生脏数据。
如果协议一定有产生脏数据的可能,则也应该使得产生脏数据的概率降到非常低得情况,从而一旦发生脏数据的情况可以简单的直接丢弃有脏数据的副本,这样相当于副本没有数据。

另外,也可以设计一些基于undo 日志的方式从而可以删除脏数据。
如果secondary 副本完全没有数据,则常见的做法是直接拷贝primary 副本的数据,这种方法往往比回放日志追更新进度的方法快很多。但拷贝数据时primary 副本需要能够继续提供更新服务,这就要求primary 副本支持快照(snapshot)功能。即对某一刻的副本数据形成快照,然后拷贝快照,拷贝完成后使用回放日志的方式追快照形成后的更新操作。

去中心化副本控制协议

image.png

去中心化副本控制协议没有中心节点,协议中所有的节点都是完全对等的,节点之间通过平等协商达到一致。
从而去中心化协议没有因为中心化节点异常而带来的停服务等问题。

去中心化协议的最大的缺点是协议过程通常比较复杂。尤
其当去中心化协议需要实现强一致性时,协议流程变得复杂且不容易理解。
由于流程的复杂,去中心化协议的效率或者性能一般也较中心化协议低。
一个不恰当的比方就是,中心化副本控制协议类似专制制度,系统效率高但高度依赖于中心节点,一旦中心节点异常,系统受到的影响较大;去中心化副本控制协议类似民主制度,节点集体协商,效率低下,但个别节点的异常不会对系统总体造成太大影响。

相关文章

  • 【分布式】副本协议

    副本协议 副本控制协议指按特定的协议流程控制副本数据的读写行为,使得副本满足一定的可用性和一致性要求的分布式协议。...

  • 分布式存储-Redis篇-上

    分布式存储题目: 分布式存储⼀般都是通过多副本的形式保证数据可靠,多副本之间使⽤⼀致性协议保证数据⼀致,所以⼀般都...

  • Raft 协议

    Raft 是工程上使用较为广泛的强一致性、去中心化、高可用的分布式协议,用于管理副本复制(Log Replicat...

  • Raft协议

    Raft概述 Raft 是工程上使用较为广泛的 强一致性、去中心化、高可用 的分布式协议,用于管理副本复制(Log...

  • 数据副本控制协议

    1、中心化副本控制协议:由一个主节点协调副本数据的更新,并维护副本之间的一致性。最常用的协议就是primary-s...

  • 2PC和3PC基本原理

    分布式一致性回顾 在分布式系统中,为了保证数据的高可用,通常,我们会将数据保留多个副本(replica),这些副本...

  • 跟我学分布式事务之2PC和3PC

    分布式一致性回顾 在分布式系统中,为了保证数据的高可用,通常,我们会将数据保留多个副本(replica),这些副本...

  • 分布式事务[转]

    一、分布式数据一致性 在分布式系统中,为了保证数据的高可用,通常会将数据保留多个副本(replica),这些副本会...

  • objective-c Copy

    copy:创建的是不可变副本,需要遵守NSCopying协议 mutableCopy:创建的是可变副本,需要遵守N...

  • 老司机解密:分布式事务浅析及简单实现

    在分布式系统中,为了保证数据的高可用,通常,我们会将数据保留多个副本(replica),这些副本会放置在不同的物理...

网友评论

      本文标题:【分布式】副本协议

      本文链接:https://www.haomeiwen.com/subject/bioofdtx.html