0%

分布式理论及架构的一些整理

CAP理论及BASE理论

分布式系统的CAP理论

分布式系统的CAP理论

一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。
麻省理工学院的Seth Gilbert和Nancy Lynch从理论上证明了CAP

分布式系统的BASE理论

eBay的架构师Dan Pritchett源于对大规模分布式系统的实践总结,在ACM上发表文章提出BASE理论,BASE理论是对CAP理论的延伸,核心思想是即使无法做到强一致性(Strong Consistency,CAP的一致性就是强一致性),但应用可以采用适合的方式达到最终一致性(Eventual Consitency)。

BASE是指基本可用(Basically Available)、软状态( Soft State)、最终一致性( Eventual Consistency)。

  • 基本可用(Basically Available)
    基本可用是指分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用。
    电商大促时,为了应对访问量激增,部分用户可能会被引导到降级页面,服务层也可能只提供降级服务。这就是损失部分可用性的体现。
  • 软状态( Soft State)
    软状态是指允许系统存在中间状态,而该中间状态不会影响系统整体可用性。分布式存储中一般一份数据至少会有三个副本,允许不同节点间副本同步的延时就是软状态的体现。mysql replication的异步复制也是一种体现。
  • 最终一致性( Eventual Consistency)
    最终一致性是指系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。

两阶段提交主要保证了分布式事务的原子性:即所有结点要么全做要么全不做。
一个协调者,多个参与者。协调者收集参与者的投票,全通过就commit,否则abort。
将提交分成两阶段进行的目的很明确,就是尽可能晚地提交事务,让事务在提交前尽可能地完成所有能完成的工作,这样,最后的提交阶段将是一个耗时极短的微小操作,这种操作在一个分布式系统中失败的概率是非常小的,也就是所谓的“网络通讯危险期”非常的短暂,这是两阶段提交确保分布式事务原子性的关键所在。(唯一理论上两阶段提交出现问题的情况是当协调者发出提交指令后当机并出现磁盘故障等永久性错误,导致事务不可追踪和恢复)。
(注意,二阶段提交相对的就是一阶段提交,就是普通的本地事务模式)

关于分布式事务、两阶段提交协议、三阶提交协议

无论是二阶段提交还是三阶段提交都无法彻底解决分布式的一致性问题。Google Chubby的作者Mike Burrows说过, there is only one consensus protocol, and that’s Paxos” – all other approaches are just broken versions of Paxos. 意即世上只有一种一致性算法,那就是Paxos,所有其他一致性算法都是Paxos算法的不完整版。
3PC在2PC的基础上,加上了第一个CanCommit阶段。在第三个doCommit阶段,如果超时会自动commit,其它阶段超时会自动rollback。

深入理解分布式系统的2PC和3PC

2PC协议中,如果出现协调者和参与者都挂了的情况,有可能导致数据不一致。(这个应该指的是一个参加者节点在一段很短的时间内处于数据不一致状态,这也是不允许的,即使之后能够逐步恢复)
简单概括一下就是,如果挂掉的那台机器已经执行了commit,那么协调者可以从所有未挂掉的参与者的状态中分析出来,并执行commit。如果挂掉的那个参与者执行了rollback,那么协调者和其他的参与者执行的肯定也是rollback操作。
所以,再多引入一个阶段之后,3PC解决了2PC中存在的那种由于协调者和参与者同时挂掉有可能导致的数据一致性问题。
3PC存在的问题
在doCommit阶段,如果参与者无法及时接收到来自协调者的doCommit或者rebort请求时,会在等待超时之后,会继续进行事务的提交。
所以,由于网络原因,协调者发送的abort响应没有及时被参与者接收到,那么参与者在等待超时之后执行了commit操作。这样就和其他接到abort命令并执行回滚的参与者之间存在数据不一致的情况。

XA事务

MySQL的XA事务,估计就是对XA事务的支持。这样如果有一个XA事务管理器,就可以在MySQL和其它支持XA事务的数据库如SQL Server之间,进行分布式事务处理了。

X/Open 组织(即现在的 Open Group )定义了分布式事务处理模型。 X/Open DTP 模型( 1994 )包括应用程序( AP )、事务管理器( TM )、资源管理器( RM )、通信资源管理器( CRM )四部分。一般,常见的事务管理器( TM )是交易中间件,常见的资源管理器( RM )是数据库,常见的通信资源管理器( CRM )是消息中间件。 通常把一个数据库内部的事务处理,如对多个表的操作,作为本地事务看待。数据库的事务处理对象是本地事务,而分布式事务处理的对象是全局事务。
XA 就是 X/Open DTP 定义的交易中间件与数据库之间的接口规范(即接口函数),交易中间件用它来通知数据库事务的开始、结束以及提交、回滚等。 XA 接口函数由数据库厂商提供。

拜占庭将军问题

拜占庭将军问题(Byzantine Generals Problem),是由莱斯利兰伯特提出的点对点通信中的基本问题。 在分布式计算上,不同的计算机透过讯息交换,尝试达成共识;但有时候,系统上协调计算机(Coordinator / Commander)或成员计算机 (Member / Lieutanent)可能因系统错误并交换错的讯息,导致影响最终的系统一致性。拜占庭将军问题就根据错误计算机的数量,寻找可能的解决办法 ,这无法找到一个绝对的答案,但只可以用来验证一个机制的有效程度)。

开源分布式系统

HBase

HBase可以看作对应Google BigTable的开源实现。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。

解析全球级分布式数据库Google Spanner

OceanBase

OceanBase

一个高性能的分布式表格系统,提供类似BigTable的性能和扩展性,但表格中保存的是强类型的数据,比如integer, string, datetime等。 它使用C++编写,运行于64位Linux环境下。生产环境下需要使用多台机器搭建OceanBase集群以提供高可用和高性能,但是你也完全可以使用一台机器运行OceanBase。

TFS(Taobao !FileSystem)

淘宝针对海量非结构化数据存储设计的分布式系统,构筑在普通的Linux机器集群上,可为外部提供高可靠和高并发的存储访问。高可扩展、高可用、高性能、面向互联网服务。

Tair

Tair是一个高性能,分布式,可扩展,高可靠的key/value结构存储系统。

tair的总体结构

tair的总体结构

tair的负载均衡算法

tair的负载均衡算法

tair的分布采用的是一致性哈希算法,对于所有的key,分到Q个桶中,桶是负载均衡和数据迁移的基本单位。config server 根据一定的策略把每个桶指派到不同的data server上。因为数据按照key做hash算法,所以可以认为每个桶中的数据基本是平衡的。保证了桶分布的均衡性,就保证了数据分布的均衡性。


本文地址:http://xnerv.wang/summary-of-distributed-theory-and-architecture/