聊聊「分布式系统」

什么是分布式系统?

关于什么是分布式系统,可能很多程序员也说不太清楚,似乎也没有一个统一的定义。有人认为,只要是物理空间上分布在不同位置的系统,就是分布式系统;有人认为,微服务架构下的各个子系统,彼此之间通过 RPC 框架调用,这就组成了一个分布式系统;有的认为,分布式系统主要是将一个东西,分发给不同的处理机。还有人这样解释:

不知道这种解释方式你是否能看懂…..

我对分布式系统定义的理解,是《从 Paxos 到 Zookeeper》这本书中说的:

分布式系统是一个硬件或软件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。

上面这个定义的关键有两点:(1)硬件或软件位于不同的计算机上。(2)彼此之间会进行通信和协调。

集群

在这里我将集群分为两类:

  • 第一类:同一套代码部署在多台服务器上(如 Web 后端服务),功能完全相同,彼此之间无通信。
  • 第二类:多个节点协调完成一个功能,彼此分工不同(如 ZooKeeper 集群).

如此看来,第一类集群,不能属于分布式系统。因为这种集群(cluster)一般是系统的简单复制,相同的系统部署在多个服务器上面以满足高可用,虽然不同节点分布在不同的服务器上面,但彼此之间并无通信。

那么微服务架构中的各个子系统算不算『分布式系统』呢?我觉得算。因为微服务架构中各个子系统位于不同的服务器,且彼此之间有通信。

分布式系统的特点

  • 分布性(分布式系统中的计算机在空间上位于不同位置)
  • 对等性(分布式系统中的计算机没有主从之分,彼此对等)
  • 缺乏全局时钟
  • 故障总是会发生(废话)

分布式系统中的各种问题

  • 通信异常(因为位于不同物理空间上,通过网络通信,就必然面临通信异常问题)
  • 网络分区(俗称“脑裂”,指与分布式系统中的部分节点失去通信)
  • 三态(分布式系统中发出的请求,除了“成功”、“失败”两种状态外,还有一种“超时”状态,你不知道调用到底成功了还是失败了)

脑裂,见我的另一篇博文 什么是『脑裂』?

分布式系统中的数据一致性问题

见我的博客 关于「数据一致性」什么是「CAP」?

完。

码先生
Author: 码先生

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注