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

63 阅读4分钟

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

  • 远程过程调用(RPC)

    • 分布式系统中通常将不同组件,或者不同节点的交互使用 RPC 的方式进行封装,在调用方的视角一次远程过程调用不需要关心如何对请求和响应进行编码,也不用关心具体的网络传输。
  • 状态机(State Machine)

    • 一种编程架构,状态机只取决于当前的状态与的输入,确定下一个状态
  • 并发/并行

    • 并发:多个任务可以在重叠的实践中启动、运行、完成,并发不一定意味着并行,可以通过切换的方式做到在一个执行单元上实现并发任务
    • 并行:真正的多个任务同时运行,如多核CPU
  • 容错

    • 通常指一种软件架构,架构可以容许一定数目的节点失效,同时保证系统正常或降级运行
  • 高可用

    • 指系统可以达到较高的可用时间,如系统保证一年中只有若干分钟不可用,通常以 SLA(Service-level agreement) 进行描述,容错架构是实现高可用系统的一种方式

分布式系统面临的挑战

  • 各种各样的错误

    • 网络
    • 磁盘
    • CPU
  • 挑战:

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

    • 高性能:可拓展、低时延、高吞吐
    • 正确:一致性、易于理解(出了问题可以快速的定位问题)
    • 可靠:容错、高可用

什么是一致性?

  • 对于我们的 KV

    • 像操作一台机器一样

      • 要读到最近写入的值
  • 一致性是一种模型(或语义)

    • 来约定一个分布式系统如何向外界提供服务

    • KV 中常见的一致性模型

      • 最终一致性:读取可能暂时读不到但是总会读到
      • 线性一致性:最严格,线性执行

共识算法:

  • 什么是共识算法

    • The consensus problem requires agreement among a number of processes (or agents) for a single data value.Some of the processes (agents) may fall or be unreliable in other ways , so consensus protocols must be fault tolerant or resilient.
    • 简而言之,一个值一旦确定,所有人都认同
  • 共识协议不等于一致性

    • 应用层面不同的一致性,都可以用共识协议来实现

      • 比如可以故意返回旧的值
    • 简单的复制协议也可以提供线性一致性

  • 一般讨论共识协议时提到的一致性,都指线性一致性

    • 因为弱一致性往往可以使用相对简单的复制算法来实现

案例:共识算法案例 RAFT

  • Raft 是在 paxos 的基础上的基础上,着重于易于理解

    • 协议接口直接暴露 Log 给用户
    • 强 Leader 简化 Paxos 中的二阶段
    • 使用随机事件简化选主逻辑
  • Raft 的基本工作原理

    • 各个节点的角色
    • Log 同步
    • 失效节点如何恢复 Log
    • 如何选举新 Leader
    • Term 以及安全性的保证
  • Raft 在工程中的优化

    • Prevote 的应用,防止离群 Leader 重加入时引发的切主

一致性协议的限制

  • 对于分布式系统

    • 拓展性:写入性能不能水平拓展
    • 性能:强 Leader 的一致性协议跨地域部署时带来的额外网络开销
  • 对于 KV 系统,解决方案一般是通过分片的方式水平拆组

    • 引入了事务的概念
    • 常见二阶段提交
  • 复制状态机RSM

    • RSM (replicated state machine)

      • Raft 中所有的 consensus 都是直接使用 Log 作为载体
    • Commited Index

      • 一旦 Raft 更新 Commited Index ,意味着这个 Index 前的所有 Log 都可以提交给状态机
      • Commited Index 是不持久化的,状态机也是 Volatile 的,重启后第一条 Log 开始

raft 安全性——跨 Term

  • 对于跨 Term 的安全性:

    • 目标:

      • 如果一个 log 被标记 Commited, 那这个 log 一定会在未来所有的 leader 中出现 leader completeness
    • 可以证明这个 property

      • raft 选举时会检查 log 的是否 outdated ,只有最新的才能当选 leader
      • 选举需要多数派投票,而 Commited log 也已经在多数派中(必要 overlap)
      • 新 leader 一定持有 Commited log ,且 leader 永远不会 overwrite log

发展方向

  • 一致性协议作为系统

    • 分布式日志:暴露日志的接口提供给上层应用,提供灵活高可用的一致性服务
  • 高性能一致性协议

    • 低延时:结合 RDMA 网络以及可编程交换机,实现 us 级别操作。
    • LeaderLess:节点就地提交,降低 WAN 网络下 RTT 开销
  • Paxos 与 Raft 的相互关联

    • 移植 Paxos 的研究到成熟