auto commit
This commit is contained in:
parent
f3cc8a890d
commit
c468418885
102
notes/分布式基础.md
102
notes/分布式基础.md
|
@ -1,56 +1,56 @@
|
||||||
<!-- GFM-TOC -->
|
<!-- GFM-TOC -->
|
||||||
* [基本概念](#基本概念)
|
* [一、基本概念](#一基本概念)
|
||||||
* [1. 异常](#1-异常)
|
* [异常](#异常)
|
||||||
* [1.1 服务器宕机](#11-服务器宕机)
|
* [1. 服务器宕机](#1-服务器宕机)
|
||||||
* [1.2 网络异常](#12-网络异常)
|
* [2. 网络异常](#2-网络异常)
|
||||||
* [1.3 磁盘故障](#13-磁盘故障)
|
* [3. 磁盘故障](#3-磁盘故障)
|
||||||
* [2. 超时](#2-超时)
|
* [超时](#超时)
|
||||||
* [3. 衡量指标](#3-衡量指标)
|
* [衡量指标](#衡量指标)
|
||||||
* [3.1 性能](#31-性能)
|
* [1. 性能](#1-性能)
|
||||||
* [3.2 可用性](#32-可用性)
|
* [2. 可用性](#2-可用性)
|
||||||
* [3.3 一致性](#33-一致性)
|
* [3. 一致性](#3-一致性)
|
||||||
* [3.4 可扩展性](#34-可扩展性)
|
* [4. 可扩展性](#4-可扩展性)
|
||||||
* [数据分布](#数据分布)
|
* [二、数据分布](#二数据分布)
|
||||||
* [1. 哈希分布](#1-哈希分布)
|
* [哈希分布](#哈希分布)
|
||||||
* [2. 顺序分布](#2-顺序分布)
|
* [顺序分布](#顺序分布)
|
||||||
* [负载均衡](#负载均衡)
|
* [三、负载均衡](#三负载均衡)
|
||||||
* [复制](#复制)
|
* [四、复制](#四复制)
|
||||||
* [1. 强同步复制协议](#1-强同步复制协议)
|
* [1. 强同步复制协议](#1-强同步复制协议)
|
||||||
* [2. 异步复制协议](#2-异步复制协议)
|
* [2. 异步复制协议](#2-异步复制协议)
|
||||||
* [CAP](#cap)
|
* [五、CAP](#五cap)
|
||||||
* [BASE](#base)
|
* [六、BASE](#六base)
|
||||||
* [1. 基本可用](#1-基本可用)
|
* [基本可用](#基本可用)
|
||||||
* [2. 软状态](#2-软状态)
|
* [软状态](#软状态)
|
||||||
* [3. 最终一致性](#3-最终一致性)
|
* [最终一致性](#最终一致性)
|
||||||
* [容错](#容错)
|
* [七、容错](#七容错)
|
||||||
* [1. 故障检测](#1-故障检测)
|
* [故障检测](#故障检测)
|
||||||
* [2. 故障恢复](#2-故障恢复)
|
* [故障恢复](#故障恢复)
|
||||||
* [CDN 架构](#cdn-架构)
|
* [八、CDN 架构](#八cdn-架构)
|
||||||
* [参考资料](#参考资料)
|
* [参考资料](#参考资料)
|
||||||
<!-- GFM-TOC -->
|
<!-- GFM-TOC -->
|
||||||
|
|
||||||
|
|
||||||
# 基本概念
|
# 一、基本概念
|
||||||
|
|
||||||
## 1. 异常
|
## 异常
|
||||||
|
|
||||||
### 1.1 服务器宕机
|
### 1. 服务器宕机
|
||||||
|
|
||||||
内存错误、服务器停电等都会导致服务器宕机,此时节点无法正常工作,称为不可用。
|
内存错误、服务器停电等都会导致服务器宕机,此时节点无法正常工作,称为不可用。
|
||||||
|
|
||||||
服务器宕机会导致节点失去所有内存信息,因此需要将内存信息保存到持久化介质上。
|
服务器宕机会导致节点失去所有内存信息,因此需要将内存信息保存到持久化介质上。
|
||||||
|
|
||||||
### 1.2 网络异常
|
### 2. 网络异常
|
||||||
|
|
||||||
有一种特殊的网络异常称为 **网络分区** ,即集群的所有节点被划分为多个区域,每个区域内部可以通信,但是区域之间无法通信。
|
有一种特殊的网络异常称为 **网络分区** ,即集群的所有节点被划分为多个区域,每个区域内部可以通信,但是区域之间无法通信。
|
||||||
|
|
||||||
### 1.3 磁盘故障
|
### 3. 磁盘故障
|
||||||
|
|
||||||
磁盘故障是一种发生概率很高的异常。
|
磁盘故障是一种发生概率很高的异常。
|
||||||
|
|
||||||
使用冗余机制,将数据存储到多台服务器。
|
使用冗余机制,将数据存储到多台服务器。
|
||||||
|
|
||||||
## 2. 超时
|
## 超时
|
||||||
|
|
||||||
在分布式系统中,一个请求除了成功和失败两种状态,还存在着超时状态。
|
在分布式系统中,一个请求除了成功和失败两种状态,还存在着超时状态。
|
||||||
|
|
||||||
|
@ -58,9 +58,9 @@
|
||||||
|
|
||||||
可以将服务器的操作设计为具有 **幂等性** ,即执行多次的结果与执行一次的结果相同。如果使用这种方式,当出现超时的时候,可以不断地重新请求直到成功。
|
可以将服务器的操作设计为具有 **幂等性** ,即执行多次的结果与执行一次的结果相同。如果使用这种方式,当出现超时的时候,可以不断地重新请求直到成功。
|
||||||
|
|
||||||
## 3. 衡量指标
|
## 衡量指标
|
||||||
|
|
||||||
### 3.1 性能
|
### 1. 性能
|
||||||
|
|
||||||
常见的性能指标有:吞吐量、响应时间。
|
常见的性能指标有:吞吐量、响应时间。
|
||||||
|
|
||||||
|
@ -72,11 +72,11 @@
|
||||||
|
|
||||||
- 但是在并发的系统中,由于一个请求在调用 I/O 资源的时候,需要进行等待。服务器端一般使用的是异步等待方式,即等待的请求被阻塞之后不需要一直占用 CPU 资源。这种方式能大大提高 CPU 资源的利用率,例如上面的例子中,单个请求在无并发的系统中响应时间为 10 ms,如果在并发的系统中,那么吞吐量将大于 100 req/s。因此为了追求高吞吐量,通常会提高并发程度。但是并发程度的增加,会导致请求的平均响应时间也增加,因为请求不能马上被处理,需要和其它请求一起进行并发处理,响应时间自然就会增高。
|
- 但是在并发的系统中,由于一个请求在调用 I/O 资源的时候,需要进行等待。服务器端一般使用的是异步等待方式,即等待的请求被阻塞之后不需要一直占用 CPU 资源。这种方式能大大提高 CPU 资源的利用率,例如上面的例子中,单个请求在无并发的系统中响应时间为 10 ms,如果在并发的系统中,那么吞吐量将大于 100 req/s。因此为了追求高吞吐量,通常会提高并发程度。但是并发程度的增加,会导致请求的平均响应时间也增加,因为请求不能马上被处理,需要和其它请求一起进行并发处理,响应时间自然就会增高。
|
||||||
|
|
||||||
### 3.2 可用性
|
### 2. 可用性
|
||||||
|
|
||||||
可用性指系统在面对各种异常时可以提供正常服务的能力。可以用系统可用时间占总时间的比值来衡量,4 个 9 的可用性表示系统 99.99% 的时间是可用的。
|
可用性指系统在面对各种异常时可以提供正常服务的能力。可以用系统可用时间占总时间的比值来衡量,4 个 9 的可用性表示系统 99.99% 的时间是可用的。
|
||||||
|
|
||||||
### 3.3 一致性
|
### 3. 一致性
|
||||||
|
|
||||||
可以从两个角度理解一致性:从客户端的角度,读写操作是否满足某种特性;从服务器的角度,多个数据副本之间是否一致。
|
可以从两个角度理解一致性:从客户端的角度,读写操作是否满足某种特性;从服务器的角度,多个数据副本之间是否一致。
|
||||||
|
|
||||||
|
@ -86,21 +86,21 @@
|
||||||
2. 弱一致性:新数据写入之后,不能保证在数据副本上能读取到最新值;
|
2. 弱一致性:新数据写入之后,不能保证在数据副本上能读取到最新值;
|
||||||
3. 最终一致性:新数据写入之后,只能保证过一了一个时间窗口才能读取到最新值;
|
3. 最终一致性:新数据写入之后,只能保证过一了一个时间窗口才能读取到最新值;
|
||||||
|
|
||||||
### 3.4 可扩展性
|
### 4. 可扩展性
|
||||||
|
|
||||||
指系统通过扩展集群服务器规模来提高性能的能力。理想的分布式系统需要实现“线性可扩展”,即随着集群规模的增加,系统的整体性能也会线程增加。
|
指系统通过扩展集群服务器规模来提高性能的能力。理想的分布式系统需要实现“线性可扩展”,即随着集群规模的增加,系统的整体性能也会线程增加。
|
||||||
|
|
||||||
# 数据分布
|
# 二、数据分布
|
||||||
|
|
||||||
分布式系统的数据分布在多个节点中,常用的数据分布方式有哈希分布和顺序分布。
|
分布式系统的数据分布在多个节点中,常用的数据分布方式有哈希分布和顺序分布。
|
||||||
|
|
||||||
## 1. 哈希分布
|
## 哈希分布
|
||||||
|
|
||||||
哈希分布就是将数据计算哈希值之后,按照哈希值分配到不同的节点上。例如有 N 个节点,数据的主键为 key,则将该数据分配的节点序号为:hash(key)%N。
|
哈希分布就是将数据计算哈希值之后,按照哈希值分配到不同的节点上。例如有 N 个节点,数据的主键为 key,则将该数据分配的节点序号为:hash(key)%N。
|
||||||
|
|
||||||
传统的哈希分布算法存在一个问题:当节点数量变化时,也就是 N 值变化,那么几乎所有的数据都需要重新分布,将导致大量的数据迁移。
|
传统的哈希分布算法存在一个问题:当节点数量变化时,也就是 N 值变化,那么几乎所有的数据都需要重新分布,将导致大量的数据迁移。
|
||||||
|
|
||||||
**一致性哈希**
|
#### 一致性哈希
|
||||||
|
|
||||||
Distributed Hash Table(DHT):对于哈希空间 0\~2<sup>n</sup>,将该哈希空间看成一个哈希环,将每个节点都配置到哈希环上。每个数据对象通过哈希取模得到哈希值之后,存放到哈希环中顺时针方向第一个大于等于该哈希值的节点上。
|
Distributed Hash Table(DHT):对于哈希空间 0\~2<sup>n</sup>,将该哈希空间看成一个哈希环,将每个节点都配置到哈希环上。每个数据对象通过哈希取模得到哈希值之后,存放到哈希环中顺时针方向第一个大于等于该哈希值的节点上。
|
||||||
|
|
||||||
|
@ -110,7 +110,7 @@ Distributed Hash Table(DHT):对于哈希空间 0\~2<sup>n</sup>,将该
|
||||||
|
|
||||||
<div align="center"> <img src="../pics//91ef04e4-923a-4277-99c0-6be4ce81e5ac.jpg"/> </div><br>
|
<div align="center"> <img src="../pics//91ef04e4-923a-4277-99c0-6be4ce81e5ac.jpg"/> </div><br>
|
||||||
|
|
||||||
## 2. 顺序分布
|
## 顺序分布
|
||||||
|
|
||||||
哈希分布式破坏了数据的有序性,顺序分布则不会。
|
哈希分布式破坏了数据的有序性,顺序分布则不会。
|
||||||
|
|
||||||
|
@ -120,7 +120,7 @@ Distributed Hash Table(DHT):对于哈希空间 0\~2<sup>n</sup>,将该
|
||||||
|
|
||||||
<div align="center"> <img src="../pics//8f64e9c5-7682-4feb-9312-dea09514e160.jpg"/> </div><br>
|
<div align="center"> <img src="../pics//8f64e9c5-7682-4feb-9312-dea09514e160.jpg"/> </div><br>
|
||||||
|
|
||||||
# 负载均衡
|
# 三、负载均衡
|
||||||
|
|
||||||
衡量负载的因素很多,如 CPU、内存、磁盘等资源使用情况、读写请求数等。分布式系统应当能够自动负载均衡,当某个节点的负载较高,将它的部分数据迁移到其它节点。
|
衡量负载的因素很多,如 CPU、内存、磁盘等资源使用情况、读写请求数等。分布式系统应当能够自动负载均衡,当某个节点的负载较高,将它的部分数据迁移到其它节点。
|
||||||
|
|
||||||
|
@ -128,7 +128,7 @@ Distributed Hash Table(DHT):对于哈希空间 0\~2<sup>n</sup>,将该
|
||||||
|
|
||||||
一个新上线的工作节点,由于其负载较低,如果不加控制,总控节点会将大量数据同时迁移到该节点上,造成该节点一段时间内无法工作。因此负载均衡操作需要平滑进行,新加入的节点需要较长的一段时间来达到比较均衡的状态。
|
一个新上线的工作节点,由于其负载较低,如果不加控制,总控节点会将大量数据同时迁移到该节点上,造成该节点一段时间内无法工作。因此负载均衡操作需要平滑进行,新加入的节点需要较长的一段时间来达到比较均衡的状态。
|
||||||
|
|
||||||
# 复制
|
# 四、复制
|
||||||
|
|
||||||
复制是保证分布式系统高可用的基础,让一个数据存储多个副本,当某个副本所在的节点出现故障时,能够自动切换到其它副本上,从而实现故障恢复。
|
复制是保证分布式系统高可用的基础,让一个数据存储多个副本,当某个副本所在的节点出现故障时,能够自动切换到其它副本上,从而实现故障恢复。
|
||||||
|
|
||||||
|
@ -154,7 +154,7 @@ Distributed Hash Table(DHT):对于哈希空间 0\~2<sup>n</sup>,将该
|
||||||
|
|
||||||
缺点:一致性差。
|
缺点:一致性差。
|
||||||
|
|
||||||
# CAP
|
# 五、CAP
|
||||||
|
|
||||||
分布式系统不可能同时满足一致性(C:Consistency)、可用性(A:Availability)和分区容忍性(P:Partition tolerance),最多只能同时满足其中两项。这三个概念上文中已经提到。
|
分布式系统不可能同时满足一致性(C:Consistency)、可用性(A:Availability)和分区容忍性(P:Partition tolerance),最多只能同时满足其中两项。这三个概念上文中已经提到。
|
||||||
|
|
||||||
|
@ -164,21 +164,21 @@ Distributed Hash Table(DHT):对于哈希空间 0\~2<sup>n</sup>,将该
|
||||||
|
|
||||||
需要注意的是,分区容忍性必不可少,因为需要总是假设网络是不可靠的。因此实际上设计分布式系统需要在一致性和可用性之间做权衡。
|
需要注意的是,分区容忍性必不可少,因为需要总是假设网络是不可靠的。因此实际上设计分布式系统需要在一致性和可用性之间做权衡。
|
||||||
|
|
||||||
# BASE
|
# 六、BASE
|
||||||
|
|
||||||
BASE 是 Basically Available(基本可用)、Soft state(软状态)和 Eventually consistent(最终一致性)三个短语的缩写。BASE 理论是对 CAP 中一致性和可用性权衡的结果,是基于 CAP 定理逐步演化而来的。BASE 理论的核心思想是:即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。
|
BASE 是 Basically Available(基本可用)、Soft state(软状态)和 Eventually consistent(最终一致性)三个短语的缩写。BASE 理论是对 CAP 中一致性和可用性权衡的结果,是基于 CAP 定理逐步演化而来的。BASE 理论的核心思想是:即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。
|
||||||
|
|
||||||
## 1. 基本可用
|
## 基本可用
|
||||||
|
|
||||||
指分布式系统在出现故障的时候,保证核心可用,允许损失部分可用性。
|
指分布式系统在出现故障的时候,保证核心可用,允许损失部分可用性。
|
||||||
|
|
||||||
例如,电商在做促销时,服务层可能只提供降级服务,部分用户可能会被引导到降级页面上。
|
例如,电商在做促销时,服务层可能只提供降级服务,部分用户可能会被引导到降级页面上。
|
||||||
|
|
||||||
## 2. 软状态
|
## 软状态
|
||||||
|
|
||||||
指允许系统存在中间状态,而该中间状态不会影响系统整体可用性,即不同节点的数据副本之间进行同步的过程允许存在延时。
|
指允许系统存在中间状态,而该中间状态不会影响系统整体可用性,即不同节点的数据副本之间进行同步的过程允许存在延时。
|
||||||
|
|
||||||
## 3. 最终一致性
|
## 最终一致性
|
||||||
|
|
||||||
指所有的数据副本,在经过一段时间的同步之后,最终都能够达到一致的状态。
|
指所有的数据副本,在经过一段时间的同步之后,最终都能够达到一致的状态。
|
||||||
|
|
||||||
|
@ -186,21 +186,21 @@ BASE 是 Basically Available(基本可用)、Soft state(软状态)和 Ev
|
||||||
|
|
||||||
ACID 是传统数据库系统常用的设计理论,追求强一致性模型。BASE 常用于大型分布式系统,只需要保证最终一致性。在实际的分布式场景中,不同业务单元和组件对一致性的要求是不同的,因此 ACID 和 BASE 往往会结合在一起使用。
|
ACID 是传统数据库系统常用的设计理论,追求强一致性模型。BASE 常用于大型分布式系统,只需要保证最终一致性。在实际的分布式场景中,不同业务单元和组件对一致性的要求是不同的,因此 ACID 和 BASE 往往会结合在一起使用。
|
||||||
|
|
||||||
# 容错
|
# 七、容错
|
||||||
|
|
||||||
分布式系统故障发生的概率很大,为了实现高可用以及减少人工运维成本,需要实现自动化容错。
|
分布式系统故障发生的概率很大,为了实现高可用以及减少人工运维成本,需要实现自动化容错。
|
||||||
|
|
||||||
## 1. 故障检测
|
## 故障检测
|
||||||
|
|
||||||
通过 **租约机制** 来对故障进行检测。假设节点 A 为主控节点,节点 A 向节点 B 发送租约,节点 B 在租约规定的期限内才能提供服务。期限快到达时,节点 B 需要向 A 重新申请租约。
|
通过 **租约机制** 来对故障进行检测。假设节点 A 为主控节点,节点 A 向节点 B 发送租约,节点 B 在租约规定的期限内才能提供服务。期限快到达时,节点 B 需要向 A 重新申请租约。
|
||||||
|
|
||||||
如果过期,那么 B 不再提供服务,并且 A 也能知道 B 此时可能发生故障并已经停止服务。可以看到,通过这种机制,A 和 B 都能对 B 发生故障这一事实达成一致。
|
如果过期,那么 B 不再提供服务,并且 A 也能知道 B 此时可能发生故障并已经停止服务。可以看到,通过这种机制,A 和 B 都能对 B 发生故障这一事实达成一致。
|
||||||
|
|
||||||
## 2. 故障恢复
|
## 故障恢复
|
||||||
|
|
||||||
当某个节点故障时,就将它上面的服务迁移到其它节点。
|
当某个节点故障时,就将它上面的服务迁移到其它节点。
|
||||||
|
|
||||||
# CDN 架构
|
# 八、CDN 架构
|
||||||
|
|
||||||
CND 通过将内容发布到靠近用户的边缘节点,使不同地域的用户在访问相同网页时可以就近获取。不仅可以减轻服务器的负担,也可以提高用户的访问速度。
|
CND 通过将内容发布到靠近用户的边缘节点,使不同地域的用户在访问相同网页时可以就近获取。不仅可以减轻服务器的负担,也可以提高用户的访问速度。
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user