这是我参与「第五届青训营」伴学笔记创作活动的第8天
一.分布式理论
什么是分布式?
分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。
严格地讲,同一个分布式系统中的计算机在空间部署上是可以随意分布的, 这些计算机可以分布在不同的空间。一个标准的分布式系统在没有任何特定业务逻辑约束的情况下,都会有如下几个特征。
-
分布性
- 分布式系统中的多台计算机都会在空间上随意分布,同时,机器的分布情况也会随时变动。
-
对等性
- 在常见的分布式系统中,为了对外提供高可用的服务,我们往往会对数据和服务进行副本处理。
数据副本是指在不同的节点上持久化同一份数据,当某一个节点上存储的数据丢失时,可以从副本上读取到该数据,这是解决分布式系统数据丢失问题最为有效的手段。- 另一类副本是
服务副本,指多个节点提供同样的服务,每个节点都有能力接收来自外部的请求并进行相应的处理。
-
并发性
- 在一个计算机网络中,程序运行过程中的并发性操作是非常常见的行为,例如同一个分布式系统中的多个节点,可能会并发地操作一些共享的资源,诸如数据库或分布式存储等。
时间和事件顺序
- Lamport逻辑时钟
1.对于每一个节点Pi我们定义时钟Ci为一个函数,它为任意的事件 a赋值编号为Ci(a)
⒉.如果事件a表示节点Pi发送某条消息,b表示节点Pj接受这条消息,则有Ci(a)<Cj(b)
于是我们可以在时空图中加入类似右图虚线所示的“tick line"
在同一节点内的连续两个事件之间,至少要有一条tick line
利用逻辑时钟,我们可以对整个系统中的事件进行全序排序
利用以上理论,我们可以想到既然时间与事件顺序存在影响关系,那么我们可以有一个全局时钟,以这个全局时钟作为整个分布式系统的全局时钟,以若干个全局时钟的单位作为一次原子操作的时间,就可以解决分布式的时间序列问题(选取分布式系统中操作最长的操作),但是性能上会有一定的损失。
CAP理论
CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性)这三个基本需求,最多只能同时满足其中的2个。
| 选项 | 描述 |
|---|---|
| Consistency(一致性) | 指数据在多个副本之间能够保持一致的特性(严格的一致性) |
| Availability(可用性) | 指系统提供的服务必须一直处于可用的状态,每次请求都能获取到非错的响应(不保证获取的数据为最新数据) |
| Partition tolerance(分区容错性) | 分布式系统在遇到任何网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务,除非整个网络环境都发生了故障 |
CAP理论往往运用于数据库领域,同样可以适用于分布式存储方向
- CA:放弃分区容错性,加强一致性和可用性,其实就是传统的单机数据库的选择
- AP:放弃一致性(这里说的一致性是强一致性),追求分区容错性和可用性,例如一些注重用户体验的系统
- CP:放弃可用性,追求一致性和分区容错性,例如与钱财安全相关的系统
- 具体采取那种策略比较合适,还需要分析业务场景而定。
二.分布式事务
两阶段提交
两阶段提交(Two-Phase Commit,以下简称2PC)方案,通常也被称为一种协议,从字面意思理解就是事务分两个阶段进行提交,整个方案在执行分布式事务的过程中被分为两个重要阶段:
- 准备阶段(Prepare Phase):事务发起方通过事务管理器发起一个分布式事务后,由事务协调器(事务管理器)通知各个事务参与方(资源管理器),给他们发送一条prepare指令,每个参与者要么返回失败,要么就进行执行本地事务(分支事务),写本地redo和undo日志,但是不进行事务的commit,到达一种临界状态,此时每个参与者持有当前本地事务涉及的锁资源不释放;
- 提交阶段(Commit Phase):事务协调器收集所有事务参与方在一阶段返回的信息,如果都成功则通知所有参与方进行事务提交(Commit),如果有返回失败或超时,则通知所有参与方进行事务回滚(Rollback)。参与方根据协调者的指令执行提交或者回滚操作,释放所有事务处理过程中使用的锁资源。
三阶段提交
相比两阶段,三阶段做了一些改进:
- 三阶段提交协议引入了超时机制。
- 在第一阶段和第二阶段中,引入了一个准备阶段。保证了在最后提交阶段之前各参与节点的状态是一致的。
三阶段提交
简单讲:就是除了引入超时机制之外,3PC把2PC的准备阶段再次一分为二,这样三阶段提交就有CanCommit、PreCommit、DoCommit三个阶段。
参考引用
- 《分布式系统概念与设计》
- 字节内部课程资料
- juejin.cn/post/702893…