分布式一致性
我们常说的“一致性(Consistency)”在分布式系统中指的是 副本(Replication)问题中对于同一个数据的多个副本,其对外表现的数据一致性,如线性一致性、因果一致性、最终一致性等,都是用来描述副本问题中的一致性的。
而共识(Consensus)则不同,我认为对Censensus最合适的翻译是共识而非一致,关于共识问题的定义详见我之前的文章,简单来说,共识问题中所有的节点要最终达成共识,由于最终目标是所有节点都要达成一致,所以根本不存在一致性强弱之分。
只有当你使用像Paxos这样的共识算法作为解决副本问题的核心组件时(工业界非常常见,通常是变种的Paxos作为核心实现Replicated State Machine,同样见这篇文章),才会对外展现出不同的一致性级别。但是,即使是在这样的场景下,讨论一个共识算法的一致性也是不合适的,因为整个副本系统最终的一致性并不单单取决于共识算法,Client访问所遵循的规范也会有决定性的作用。比如说:即使副本系统使用multi-paxos在所有副本服务器上同步了日志序号,但如果Client被允许从非Leader节点获取数据,则整个副本系统仍然不是强一致的(思考如果访问了非多数派节点的情况)。
做个总结:
Paxos是共识(Consensus)算法而不是强一致性(Consistency)协议 一致性(Consistency)是副本(Replication)问题中的概念,共识(Consensus)算法没有一致性级别的区分。