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

77 阅读2分钟

这是我参与【第四届青训营-大数据场】笔记创作活动的第15天

分布式共识机制

采用基于哈希图数据结构的HashNet共识机制、基于随机选择函数的拜占庭协商(BA-VRF)共识机制和基础DAG共识机制,提出了基于HashNet的增强DAG共识和用于公证人选择的BA-VRF共识机制相结合的双层共识机制,使得交易并发量更高、交易确认速度更快,并可快速构建面向不同应用场景的生态体系。

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

image.png

主副本把所有的操作打包成 Log

  • 所有的 Log 写入都是持久化的,保存在磁盘上应用包装成状态机,只接收 Log 作为 Input
  • 主副本确认 Log 已经成功写入到副本机器上,当状态机 apply 后,返回客户端

image.png

什么是一致性

对于我们的 KV

  • 像操作一台机器一样

  • 要读到最近写入的值

  • 一致性是一种模型(或语义)

  • 来约定一个分布式系统如何向外界(应用)提供服务 KV 中常见的一致性模型

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

当主副本失效时,为了使得算法简单

  • 我们人肉切换,只要足够快
  • 我们还是可以保证较高的可用性。

但是如何保证主副本是真的失效了呢?

  • 在切换的过程中,主副本又开始接收 client 端的请求两个主副本显然是不正确的,log 会被覆盖写掉我们希望算法能在这种场景下仍然保持正确

要是增加到三个节点呢?

  • 每次都等其他节点操落盘性能较差
  • 能不能允许少数节点挂了的情况下,仍然可以工作
  • falut-tolerance

共识算法

共识协议不等于一致性

  • 应用层面不同的一致性,都可以用共识协议来实现。
  • 比如可以故意返回旧的值
  • 简单的复制协议也可以提供线性一致性

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

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

Raft

  • 2014 年发表
  • 易于理解作为算法的设计目标
  • 使用了 RSM、Log、RPC 的概念直接使用 RPC 对算法进行了描述 Strong Leader-based
  • 使用了随机的方法减少约束正确性
  • 形式化验证
  • 拥有大量成熟系统