关于分布式系统:分布式存储高可用方案探究

9次阅读

共计 2180 个字符,预计需要花费 6 分钟才能阅读完成。

为防止单点瓶颈,进步存储的可用性及负载能力,零碎通常部署多个节点。但此时会呈现一些问题:

  • 客户端写入数据胜利,零碎各内节点的数据是否也都写入胜利
  • 如果零碎内一个节点挂掉,零碎是否仍旧可用
  • 如果零碎内因为网络故障产生分区,零碎是否仍旧可用

这些问题是多节点的分布式存储系统必须面对并解决的问题,即保证系统的数据统一,可用和分区容忍。

零碎的高可用有两种策略:

  • 主从模式:分主从节点,主节点挂了从节点主动选主切换为主节点。只有主节点可进行写操作,从节点复制主节点数据,只可读以减轻负担。如:zookeeper,redis sentinel
  • 复制模式:节点角色平等,相互通信替换信息,一个节点挂掉会被踢出集群,不影响零碎的应用。如:Eureka,redis cluster(数据分片,元信息通过 gossip 保障统一)

咱们心愿所有节点最终均保留残缺的数据,以便客户端可从任意节点读取数据,进步读取性能。零碎某一节点挂掉后也能复原数据。

为进步存储服务的写入性能,会对数据持续分片,每个分片服务要做到高可用,个别为主从部署。如 Redis cluster,es,kafka。客户端读取或写入数据时,先路由到相应节点再读取或写入。三者不同的是,读取 redis cluster 须要客户端找到指定分片节点,如果 cluster 发现数据不在客户端申请的分片(slot 产生迁徙),会返回客户端正确的分片地址,客户端再次发动申请。es 不必客户端找到指定分片,它会在外部进行路由,客户端申请一次即可失去数据。

分布式一致性协定探讨了多个节点的数据如何达成统一,即不同节点如何替换数据,包含:

  • 如何写入数据,数据如何同步到其余节点
  • 主 / 从节点挂了如何切换至从节点并使其余节点晓得
  • 集群状态感知,如新节点退出其余节点如何晓得或者不须要晓得

按节点间的关系可分为两大类:

  • 有主节点,即主从模式:raft zab paxos。集群的节点分主从,主节点负责写操作,而后同步到从节点,从节点负责读操作。当主节点挂了,一个从节点被选举晋升为主节点。
  • 无主节点,即复制模式:Gossip 协定。节点的角色雷同,无主从之分,任何节点都可进行读写。如果一个节点写入数据,会随机同步至 n 个节点,这 n 个节点持续随机向 n 个节点同步,最终集群所有节点状态雷同。

几个实践:
CAP:分布式系统的个性,Consistency(一致性)、Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。是 NOSQL 数据库的基石。

  • Consistency(一致性):分布式系统中各节点在同一时刻,同一 key 的 value 雷同
  • Availability(可用性):集群中某一节点挂掉后依然可用
  • Partition tolerance(分区容错性):集群内如果网络分区,一些节点的数据不会被分区外的客户端拜访到,因而要求数据保留在所有的节点。

Base:是 Basically Available(根本可用)、Soft state(软状态)和 Eventually consistent(最终一致性)三个短语的简写,BASE 是对 CAP 中一致性和可用性衡量的后果。其核心思想是即便无奈做到强一致性(Strong consistency),但每个利用都能够依据本身的业务特点,采纳适当的形式来使零碎达到最终一致性(Eventual consistency)。

  • Basically Available(根本可用):假如零碎,呈现了不可预知的故障,但还是能用,相比拟失常的零碎而言:

    • 响应工夫上的损失:失常状况下的搜索引擎 0.5 秒即返回给用户后果,而根本可用的搜索引擎能够在 1 秒作用返回后果。
    • 性能上的损失:在一个电商网站上,失常状况下,用户能够顺利完成每一笔订单,然而到了大促期间,为了爱护购物零碎的稳定性,局部消费者可能会被疏导到一个降级页面。
  • Soft state(软状态):绝对于原子性而言,要求多个节点的数据正本都是统一的,这是一种“硬状态”。软状态指的是:容许零碎中的数据存在中间状态,最终并认为该状态不影响零碎的整体可用性,即容许零碎在多个不同节点的数据正本存在数据延时。如设置 key 为 1,其中在 A 节点的值已设为 1,但在 B 节点仍为 2,但最终会为 1.。容许一些节点的值不为 1
  • Eventually consistent(最终一致性):不可能始终是软状态,必须有个工夫期限。在期限过后,该当保障所有正本保持数据一致性。从而达到数据的最终一致性。这个工夫期限取决于网络延时,零碎负载,数据复制方案设计等等因素。零碎可能保障在没有其余新的更新操作的状况下,数据最终肯定可能达到统一的状态,因而所有客户端对系统的数据拜访最终都可能获取到最新的值。

Acid:atomic 原子性,consistence 一致性,isolation 隔离性,duration 持久性,保障事务的强一致性

分布式系统不会是一个完满的零碎,即数据写入时所有节点会立刻更新最新的数据且始终提供服务,如果零碎内某个节点挂掉,不影响读写操作整个零碎像是一个单体利用,满足 acid。
因为数据同步到各个节点须要肯定工夫,在客户端收到写入胜利的响应后,所有节点是否实现数据的变更,此时再申请,是否会失去最新数据。如果一个节点挂掉,零碎是否会响应客户端申请。多节点的存在使得它受 CAP 原理的限度。满足 CP:ZK,AP:eureka

正文完
 0