技术编程|分布式一致性算法,你确定不了解一下


集中式与分布式集中式分布式分布式事务
一致性协议2PC:Two-Phase Commit二阶段提交协议3PC:Three-phase Commit 三阶段提交协议Paxos算法RAFT算法
总结
集中式与分布式集中式
就是将所有的业务都部署在一个中心主机(节点)上 , 所有的功能都由这个主机集中处理 。
特点
部署结构简单、不需要考虑多个主机之间的分布式协作问题 。 分布式
分布式系统:指将硬件或者软件组件部署在不同的网络计算机上 , 彼此之间仅仅通过消息传递进行通信和协调的系统 。
特点
分布性:多台计算机可空间上随意分布 , 跨机房、跨城市都可以 。
对等性:分布式系统中没有主/从之分 , 都是对等的节点或者服务 。副本:指分布式系统对数据或服务冗余 , 以此提供高可用 。 数据副本:是指在不同的节点上持久化一份数据 , 当某一个节点上存储的数据丢失时 , 可以从副本上读取到该数据 , 这是分布式系统数据丢失问题最为有效的手段 。 服务副本:指多个节点提供同样的服务 , 每个节点都有能力接收来自外部的请求并进行相应的处理 。
**并发性:**分布式系统中的多个节点 , 可能会并发地操作一些共享资源 , 诸如数据库或分布式存储等 。
**缺乏全局时钟:**一个典型的分布式系统是由一系列在空间上随意分布的进程组成 , 进程彼此之间通过消息进行通信 。 因此 , 无法判断两个事件谁先谁后 。 可使用逻辑时钟 。
**故障总是会发生:**除非需求指标允许 , 在系统设计时不能放过任何异常情况 。 如宕机、网络分区、网络超时等 。
每一次分布式系统的请求与响应三态:成功 , 失败 , 超时 。
超时情况:
没有成功发送到接收方 , 在发送过程中发生信息丢失 。
成功发送到接收方 , 并成功处理 , 但返回给发送方过程中发生信息丢失 。
所以需要有幂等 。 分布式事务
分布式事务是指事务的参与者 , 支持事务的服务器 , 资源服务器以及事务管理器分别位于分布式系统的**不同节点之上 。 **通常一个分布式事务中会涉及对多个数据源或业务系统的操作 。 分布式事务也可以被定义为一种嵌套型的事务 , 同时也就具有了ACID事务的特性 。 CAP理论
Consistency(一致性):数据一致更新 , 所有数据变动都是同步的(强一致性) 。
Availability(可用性):好的响应性能
Partition tolerance(分区容错性) :可靠性
分区容错性:分布式系统在遇到任何网络分区故障的时候 , 仍然需要保证对外提供满足一致性和可用性的服务 , 除非是整个网络环境都发生了故障 。
网络分区:是指在分布式系统中 , 不同的节点分布在不同的子网络(机房或异地网络等)中 , 由于一些特殊的原因导致这些子网络之间出现网络不连通的状况 , 但各个子网络的内部网络是正常的 , 从而导致整个网络的环境被切成了若干个孤立的区域 。

技术编程|分布式一致性算法,你确定不了解一下
本文插图

定理:任何分布式系统只可同时满足二点 , 没法三者兼顾 。
需要根据实际业务进行取舍 。

技术编程|分布式一致性算法,你确定不了解一下
本文插图

CA系统(放弃P):指将所有数据(或者仅仅是那些与事务相关的数据)都放在一个分布式节点上 , 就不会存在网络分区 。 所以强一致性以及可用性得到满足 。
CP系统(放弃A):如果要求数据在各个服务器上是强一致的 , 然而网络分区会导致同步时间无限延长 , 那么如此一来可用性就得不到保障了 。 坚持事务ACID(原子性、一致性、隔离性和持久性)的传统数据库以及对结果一致性非常敏感的应用通常会做出这样的选择 。
AP系统(放弃C):这里所说的放弃一致性 , 并不是完全放弃数据一致性 , 而**是放弃数据的强一致性 , 而保留数据的最终一致性 。 **如果既要求系统高可用又要求分区容错 , 那么就要放弃一致性了 。 因为一旦发生网络分区 , 节点之间将无法通信 , 为什么满足高可用 , 每个节点只能用本地数据提供服务 , 这样就会导致数据不一致 。 一些遵守BASE原则数据库 , (如:Cassandra、CouchDB等)往往会放宽对一致性的要求(满足最终一致性即可) , 一次来获取基本的可用性 。 BASE理论


推荐阅读