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

131 阅读5分钟

image.png

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

一、本课堂重点内容

  • 分布式系统
  • 一致性与共识算法
  • 从Raft入手
  • 实现细节以及未来

二、详细知识点介绍

01.分布式系统面临的挑战

  • 分布式系统位于基础架构的最下层,若失效对上层的影响很大。
  • 各种各样的错误
    • 网络
    • 磁盘
    • CPU

1.1 理想的分布式系统

高性能:可拓展、低延时、高吞吐
正确:一致性、易于理解
可靠:容错、高可用

02.一致性与共识算法

2.1 什么是一致性?

  • 对于我们的KV

    • 像操作一台机器一样
    • 要读到最近写入的值
  • 一致性是一种模型(或语义)

    • 来约定一个分布式系统如何向外界(应用)提供服务
    • KV中常见的一致性模型
    • 最终一致性:读取可能暂时读不到但是总会读到
    • 线性一致性:最严格,线性执行

线性一致性--用户最常用

2.2复制节点

  1. 当主副本失效时,为了使得算法简单
    ·我们人肉切换,只要足够快
    ·我们还是可以保证较高的可用性。
  2. 但是如何保证主副本是真的失效了呢?
    ·在切换的过程中,主副本又开始接收client端的请求·两个主副本显然是不正确的,log会被覆盖写掉·我们希望算法能在这种场景下仍然保持正确
  3. 要是增加到三个节点呢?
    ·能不能允许少数节点挂了的情况下,仍然可以工作
    . falut-tolerance

2.3 共识算法

含义:一个值一旦确定,所有人都认可
缺点:错误总是发生、错误类型很多、容错(有文章证明是一个不可能的任务)

  • 共识协议不等于一致性
    • 应用层面不同的一致性,都可以用共识协议来实现。比如可以故意返回旧的值
    • 简单的复制协议也可以提供线性一致性
  • 一般讨论共识协议时提到的一致性,都指线性一致性
    • 因为弱一致性往往可以使用相对简单的复制算法实现

03.共识算法案例:Raft

3.1 Paxos

Paxos算法可以说是一致性领域最著名的算法之一了
Paxos算法解决的问题正是分布式一致性问题,即一个分布式系统中的各个进程如何就某个值(决议)达成一致。
Paxos将系统中的角色分为提议者 (Proposer),决策者 (Acceptor),和最终决策学习者 (Learner)。

3.2 Raft

Raft是一种共识算法,旨在替代Paxos。 它通过逻辑分离比Paxos更容易理解,但它也被正式证明是安全的,并提供了一些额外的功能。[1] Raft提供了一种在计算系统集群中分布状态机的通用方法,确保集群中的每个节点都同意一系列相同的状态转换。 它有许多开源参考实现,具有Go,C ++,Java和Scala中的完整规范实现。

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

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

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

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

Raft角色

O)X2NWVV9IMIIB()8ICZRCP.png

3.3 Raft安全性-同Term

  • 对于Term内的安全性
    • 目标:
      • 对于所有已经的commited的<term, index>位置上至多只有一条log
      • 由于Raft的多数派选举,我们可以保证在一个term中只有一个leader
  • 我们可以证明一条更严格的声明:在任何<term,index>位置上,至多只有一条log

3.4 Raft安全性–跨Term

  • 对于跨Term的安全性
    • 目标:
      • ·如果一个log 被标记commited,那这个log一定会在未来所有的leader中出现Leader completeness
  • 可以证明这个property
    • Raft选举时会检查Log的是否outdated,只有最新的才能当选Leader
    • 选举需要多数派投票,而commited log 也已经在多数派中(必有overlap )
    • 新Leader一定持有commited log,且 Leader永远不会overwrite log

04.KV

image.png

4.1 一致性读写的定义

  • Raft 不保证一直有一个 leader
    • 只保证一个term至多有一个leader
    • 可能存在多个term的leader
  • Split-brain

image.png

image.png

多个副本只有单个副本可以提供服务 服务无法水平拓展 ·增加更多Raft 组 ·如果操作跨Raft 组

image.png

4.2 回到共识算法

Raft :关于Log

  • 论文中就给出的方案,当过多的Log占用后,启动snapshot,替换掉Log。如果对于持久化的状态机,如何快速的产生Snapshot
  • 多组Raft的应用中,Log 如何合流
  • 关于configuration change
  • 论文中给出的joint-consensus以及单一节点变更两种方案

image.png

·Raft是正确的,但是在工程世界呢?
·真实世界中不是所有的错误都是完美fail-stop的
. cloudflare的case,etcd在partial network 下, outage 了6个小时[1]

image.png

4.3 共识算法的未来

高性能

  • 数据中心网络100G,时延约为几个us
  • RDMA网卡以及programable switch的应用
  • 我们想要的是:us级别的共识,以及us 级别的容错
  • HovercRaft
    • P4 programable switch : IPmulticast
  • Mu
    • Use one-sided RDMA
    • pull based heartbeat instead of push-based.

image.png

image.png

  • 多节点提交(Leaderless)
    • 节点跨地域,导致节点间的RTT(Round Trip Time)很大
    • EPaxos[1]
      • 使用了冲突图的方式来允许并行Commit
      • 不冲突的情况下1RTT提交时间

image.png

三、个人总结:

1.了解了分布式一致性协议相关问题以及共识协议中的Paxos和Raft。
2.算法共识的未来

四、参考文献

juejin.cn/post/713013… 作者:青训营官方账号
[1] Wang, Zhaoguo, et al. "On the Parallels between Paxos and Raft, and how to Port Optimizations." Proceedings ofthe 2019 ACM Symposium on Principles of Distributed Computing. 2019. [2]Howard,Heidi, and Richard Mortier. "Paxos vs Raft: Have we reached consensus on distributed consensus?."Proceedings of the 7th Workshop on Principles and Practice of Consistency for Distributed Data.2020

《ApacheHadoop YARN: Yet Another Resource Negotiator》