参考
从Paxos到Zookeeper分布式一致性原理与实践(倪超 著)
CouchDB权威指南 (莱诺 译)
有中心服务器概念。数据集中存放在单台数据库中,业务系统集中部署在单台服务器上。
集中式的最大优点是部署简单。
概念:分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此仅仅依靠网络消息进行通信和协调的系统。
特点:分布性、对等性、并发性、无全局时钟、随机故障
说白了,分布式系统面临的最大挑战有两个:
通信和协调
可靠的通信系统是分布式系统运行的基石(但是很遗憾,世界上从来就没有什么可靠的通信系统),现在的架构趋势是用统一的消息系统(消息总线)替代直接的组件间消息传递机制(P2P/Restflu/Socket/gRPC...),这一块现在的解决方案是Kafka集群/Redis集群等。
协调的核心要义是实现分布式事务(准确来讲是分布式一致性),解决方案是Zookeeper。
事务是“一系列对数据的读写操作”,事务具有ACID的特性。
ACID:原子性、一致性、隔离性、持久性
原子性:要么全部成功,要么全部失败
一致性:从A账户划100到B账户,A账户必须减100,同时B账户必须加100。而不能A账户减100,同时B账户只加50。
隔离性:事物之间不会发生相互干扰。
持久性:事务一旦成功就永久生效,不会丢失。
事务的ACID特性在集中式系统中是依赖“数据库内置事务”来实现的。在分布式系统中实现的方案有如下两种:
1、使用现有的分布式数据库技术,例如Mycat中间件技术、HBase分布式数据库。
2、借助Zookeeper实现分布式事务(实际上HBase的分布式事务实现部分也是基于Zookeeper)。
分布式系统有三个基本需求:一致性、可用性、分区容错性。
其中分区容错性是指,分布式系统的网络被划分为若干个子网,子网内节点属同一广播域。这样子网间通信可靠性大大低于子网内通信。在子网间通信中断的情况下系统仍能够提供一致性和可用性服务,这就叫分区容错性。
任何分布式系统最多只能满三个基本特性中的两个。
从数据存储的角度来看分布式的数据存储系统有三个基本的需求:
· 数据一致性:即使存在并发的更新,所有客户端看任何时候看到的数据必须是一致的。
· 可用性:所有客户端总能得到某一版本的数据。
· 数据库分割性:数据可分割存储在多台服务器上。
这三个需求是没办法同时满足的。
关系型数据库系统(MySQL,SQL Server)满足的是 一致性+可用性
分布式一致性算法Paxos满足的是 一致性+可分割性
分布式数据库系统(CouchDB)满足 可用性+可分割性 ,实际上就是牺牲一致性、争取可用性、达到最终一致性。
分布式系统很难达到强一致性(ACID),但可以采用适当方式满足BASE(基本可用、弱状态、最终一致性)
Zookeeper的核心价值是实现分布式事务,即采用ZAB的一致性协议在分布式系统中实现一致性。
介绍:Zookeeper是一个典型的分布式数据一致性解决方案。分布式应用程序可以基于它实现诸如数据发布/订阅,负载均衡、命名服务、分布式协调通知、集群管理、Master选举、分布式锁、分布式队列等功能。Zookeeper可以保证如下分布式一致性特性:顺序一致性,原子性,单一视图、可靠性、实时性。