浅谈分布式一致性协议| 青训营笔记

104 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的的第15天

分布式系统面临的挑战

  • 数据规模越来越大
  • 服务的可用性要求越来越高
  • 快速迭代的业务要求系统足够易用

CAP实际情况

CAP理论证明,任何分布式系统只可同时满足二点,没法三者兼顾。

选 择说 明
CA放弃分区容错性,加强一致性和可用性,其实就是传统的单机数据库的选择
AP放弃一致性(这里说的一致性是强一致性),追求分区容错性和可用性,这是很多分布式系统设计时的选择,例如很多NoSQL系统就是如此
CP放弃可用性,追求一致性和分区容错性,基本不会选择,网络问题会直接让整个系统不可用

一致性与共识算法

一致性的含义

  • 一致性是一种模型(或语义),来约定一个分布式系统如何向外界(应用)提供服务。比如Client客户端想读取分布式机器最近写入的值,那么就需要这种一致性需要。

  • KV中常见的一致性模型分类:

    • 最终一致性(读取可能暂时读不到但是总会读到)
    • 线性一致性(最严格,线性执行)。Linearizability是最理想的。

共识算法

  • 在分布式系统中让所有节点达成共识达到数据一致性。
  • 在分布式系统中错误总是发生,比如网络断开、分区、缓慢、重传、乱序CPU、IO等都机会停住,因此共识算法可以达到容错(falute-tolerance),使系统整体不会因为个别机器宕机而全盘崩溃。
  • 共识协议不等于一致性:
    • 应用层面不同的一致性,都可以用共识协议来实现,比如可以故意返回旧的值。
    • 简单的复制协议也可以提供线性一致性。
  • 一般讨论共识协议时提到的一致性,都指线性一致性,因为弱一致性往往可以使用相对简单的复制算法实现。

一致性协议案例: Raft

  • 易于理解作为算法的设计目标

    • 使用了RSM、Log、RPC的概念
    • 直接使用RPC 对算法进行了描述
    • Strong Leader-based
    • 使用了随机的方法减少约束
  • 正确性

    • 形式化验证
    • 拥有大量成熟系统

一致性协议的发展方向

  • Raft Paxos相互移植
  • 多数分布式系统都选择共识算法作为底座,不同的一致性协议有不同的特性。