这是我参与【第四届青训营-大数据场】笔记创作活动的第15天
分布式共识机制
采用基于哈希图数据结构的HashNet共识机制、基于随机选择函数的拜占庭协商(BA-VRF)共识机制和基础DAG共识机制,提出了基于HashNet的增强DAG共识和用于公证人选择的BA-VRF共识机制相结合的双层共识机制,使得交易并发量更高、交易确认速度更快,并可快速构建面向不同应用场景的生态体系。
- 高性能:可拓展、低时延、高吞吐
- 正确:一致性、易于理解
- 可靠:容错、高可用
主副本把所有的操作打包成 Log
- 所有的 Log 写入都是持久化的,保存在磁盘上应用包装成状态机,只接收 Log 作为 Input
- 主副本确认 Log 已经成功写入到副本机器上,当状态机 apply 后,返回客户端
什么是一致性
对于我们的 KV
-
像操作一台机器一样
-
要读到最近写入的值
-
一致性是一种模型(或语义)
-
来约定一个分布式系统如何向外界(应用)提供服务 KV 中常见的一致性模型
-
最终一致性:读取可能暂时读不到但是总会读到· 线性一致性:最严格,线性执行
当主副本失效时,为了使得算法简单
- 我们人肉切换,只要足够快
- 我们还是可以保证较高的可用性。
但是如何保证主副本是真的失效了呢?
- 在切换的过程中,主副本又开始接收 client 端的请求两个主副本显然是不正确的,log 会被覆盖写掉我们希望算法能在这种场景下仍然保持正确
要是增加到三个节点呢?
- 每次都等其他节点操落盘性能较差
- 能不能允许少数节点挂了的情况下,仍然可以工作
- falut-tolerance
共识算法
共识协议不等于一致性
- 应用层面不同的一致性,都可以用共识协议来实现。
- 比如可以故意返回旧的值
- 简单的复制协议也可以提供线性一致性
一般讨论共识协议时提到的一致性,都指线性一致性
- 因为弱一致性往往可以使用相对简单的复制算法实现
Raft
- 2014 年发表
- 易于理解作为算法的设计目标
- 使用了 RSM、Log、RPC 的概念直接使用 RPC 对算法进行了描述 Strong Leader-based
- 使用了随机的方法减少约束正确性
- 形式化验证
- 拥有大量成熟系统