什么是共识
什么是一致性?
分布式系统中,一致性是指对于系统中的多个服务节点,给定一系列操作,在协议(往往通过某种共识算法) 保障下,试图使得它们对处理结果达成某种程度的一致。如果分布式系统能实现“一致”,对外就可以呈现是一个功能正常的,性能和稳定性都要好很多的“虚处理节点”
一致性并不代表结果正确与否,而是系统对外呈现的状态一致与否,例如,所有节点都达成失败状态也是一种一致 ,分布式系统实现了一致性之后,对外部看来就是一个单节点系统
什么是共识算法呢?
共识算法解决的是在一个分布式的网络中,各节点对某个提案(Proposal) ,大家达成一致意见的过程。提案的含义在分布式系统中十分宽泛,如多个事件发生的顺序、某个键对应的值、谁是领导……等等,可以认为任何需要达成一致的信息都是一个提案,共识的目的就是为了达成一致,一致是目的,共识是手段。
如果分布式系统中各个节点都能保证以十分强大的性能(瞬间响应、高吞吐) 无故障的运行,则实现共识过程并不复杂,简单通过多播过程投票即可。很可惜的是,现实中这样“完美”的系统并不存在,如响应请求往往存在时延、网络会发生中断、节点会发生故障、甚至存在恶意节点故意要破坏系统
共识算法类型
Fabric共识机制
Fabric共识机制 Solo模式
Solo:中心化网络,整个fabric网络依赖于一个order节点
Fabric共识机制 Kafka模式
Kafka:半中心化
Fabric网络中的数据一致性,由Zookeeper来保证,并实现共识;
Zookeeper的核心是原子广播机制,这个机制保证了各个server之间的同步。实现这个机制的协议叫做ZAB协议,ZAB协议和Raft类似;
当前Fabric1.x平台只实现了非拜占庭共识;