架构师之路 — 分布式系统 — 分布式网络分区难题

Posted 范桂飓

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了架构师之路 — 分布式系统 — 分布式网络分区难题相关的知识,希望对你有一定的参考价值。

目录

文章目录

分布式网络通信难题

分布式系统体系结构从其出现之初就伴随着诸多的难题和挑战。

通信异常

从集中式向分布式演变的过程中,必然引入网络因素,由于网络本身的不可靠性,因此也引入了额外的问题。

分布式系统需要在各个节点之间进行网络通信,因此每次网络通信都会伴随着网络不可用的风险,网络光纤、路由器或是 DNS 等硬件设备或 是系统不可用都会导致最终分布式系统无法顺利完成一次网络通信。

另外,即使分布式系统各个节点之间的网络通信能够正常进行,其延时也会大于单机操作。通常我们认为现代计算机体系结构中,单机内存访问的延时在纳秒数量级(通常是 10ns),而正常的一次网络通信的延迟在 0.1~1ms 左右(相当于内存访问延时的 105 倍),如此巨大的延时差别,也会影响到消息的收发过程,因此消息丢失和消息延迟变得非常普遍;

网络分区

当网络由于发生异常情况,导致分布式系统中部分节点之间的网络延时不断增大,最终导致组成分布式系统的所有节点中,只有部分节点之间能够正常通信,而另一些节点则不能,我们将这个现象称为网络分区。

当网络分区出现时,分布式系统会出现局部小集群,在极端情况下,这些局部小集群会独立完成原本需要整个分布式系统才能完成的功能,包括对数据的事务处理,这就对分布式一致性提出了非常大的挑战;

三态

上面两点,我们已经了解到在分布式环境下,网络可能会出现各式各样的问题,因此分布式系统的每一次请求与响应,存在特有的三态概念,即:

  1. 成功
  2. 失败
  3. 超时

在传统的单机系统中,应用程序在调用一个函数之后,能够得到一个非常明确的响应:成功或失败。

而在分布式系统中,由于网络是不可靠的,虽然在绝大部分情况下,网络通信也能够接受到成功或失败的响应,当时当网络出现异常的情况下,就可能会出现超时现象,通常有以下两种情况:

  1. 由于网络原因,该请求并没有被成功地发送到接收方,而是在发送过程中就发生了消息丢失现象;
  2. 该请求成功地被接收方接收后,进行了处理,但是在将响应反馈给发送方的过程中,发生了消息丢失现象;

当出现这样的超时现象时,网络通信的发起方是无法确定当前请求是否被成功处理的。

节点故障

节点故障则是分布式环境下另一个比较常见的问题,指的是组成分布式系统的服务器节点出现的宕机或 “僵死” 现象,通常根据经验来说,每个节点都有可能出现故障,并且每天都在发生。

以上是关于架构师之路 — 分布式系统 — 分布式网络分区难题的主要内容,如果未能解决你的问题,请参考以下文章

架构师之路 — 分布式系统 — 分布式事务难题

架构师之路 — 分布式系统 — BASE 定理

RPC实战与核心原理,京东首席架构师带你解决分布式通信难题

架构师之路系列文章

架构师之路系列文章

架构师之路系列文章