如果是从一致性算法层面讲:
个人觉得叫容错分布式一致性协议更合适,当然这里容错俩字很关键,而且暗含是通常所说的复制状态机的强一致性需求(比如线性一致性)。
一致性本身是个应用广泛的概念,比如并发编程、数据库事务处理、缓存一致性等等。其他很多算法也可以解决某些场景下(对系统模型的假设条件强弱)、对一致性的不同要求(比如线性、序列、因果、最终等等)。比如:
2PC无法容错但能解决强一致性;
并发编程中的内存序通常来说保证happen-before的因果序。所以不同应用场景对一致性的要求是不同的。
Paxos这个名字应该是被普遍当做了类Paxos算法。其实在Paxos之前类似多数派等概念就已经有了,而且像vsync中的gbcast、view stamped replication等等其实也是在Leslie Lamport的Basic Paxos算法之前的。并且gbcast和Basic Paxos虽然可以互相转化,但是是有本质区别的,所以严格来说不能叫做"Paxos算法"。当然,后续的Multi-Paxos、Zab、Raft可以看做是在异步网络、crash failure的系统模型下对强一致性的需求在Basic Paxos上做的一些演进与优化吧。
所以,我觉得对于一致性相关的问题,还是需要从问题本身的场景需求和解决这个场景需求下的相关算法历史来更客观地理解。包括其他回答中提到的应用逐渐多起来的拜占庭将军问题的应用。前言
目前的应用系统,不管是企业级应用还是互联网应用,最终数据的一致性是每个应用系统都要面临的问题,随着分布式的逐渐普及,数据一致性更加艰难,但是也很难有银弹的解决方案,也并不是引入特定的中间件或者特定的开源框架能够解决的,更多的还是看业务场景,根据场景来给出解决方案。根据笔者最近几年的了解,总结了几个点,更多的应用系统在编码的时候,更加关注数据的一致性,这样系统才是健壮的。
基础理论相关
说起事务,目前的几个理论,ACID事务特性,CAP分布式理论,以及BASE等,ACID在数据库事务中体现,CAP和BASE则是分布式事务的理论,结合业务系统,例如订单管理,例如仓储管理等,可以借鉴这些理论,从而解决问题。
ACID 特性
- A(原子性)事务的原子操作单元,对数据的修改,要么全部执行,要么全