# 分布式系统八大问题

分布式应用大多数都运行在复杂的环境中。 这也导致了其更容易比单体服务发生问题。早在20世纪90年代在Sun MicroSystem中就被提出了分布式系统的八大谬论。 在这里我们来认识下这八大缪论是什么？

* 网络是可靠的
* 延迟为零
* 带宽是无限的
* 网络是安全的
* 拓扑不会变
* 只存在一个管理员
* 传输代价为零
* 网络是同质的

## 网络是可靠的

在局域网中，网络看起来是可靠的。 毕竟，随着硬件技术以及底层通信技术的发展，网络组件具有更高的可靠性。而且即使单一的组件出现故障，还有很多冗余，但情况确实如此吗？ 随着网络环境的越来越复杂，网络管理员很可能犯错误，尤其是在网络配置上。某些情况下，高达1/3的网络更改会导致网络的可靠性故障。软件和硬件都可能出现故障，尤其是路由器， 它占到所有故障的1/4左右。 “不可中断”的电源供应有可能出现断电、管理员可能进行不明智的网络设备更改、可能出现网络阻塞、可能遇到DDos攻击，以及软件和防火墙的更新或 布丁失败。 网络会因为自然和非自然的因素导致故障， 设计一个能应对这些情况的网络需要很高的技巧。 尤其是在分布式系统中，跨数据中心，跨城市的网络通信更容易出现故障。

## 延迟为零

延迟和带宽不同，延迟是指花费在应答上的时间。常见的延迟除了服务器处理延迟，还有网络延迟，包括传输延迟、节点延迟和阻塞延迟。我们也可以通过ping命令在操作系统上进行 测试。 如ping www.baidu.com

## 带宽是无限的

虽然大多数现在电缆可以应对无限带宽，另外最近随着5G技术的发展，带宽已经达到了一个比较高的水准，但这样就能理解带宽是无限了吗？ 绝大多数的分布式系统目前还遭受 着带宽占满，被限流的痛苦。 目前绝大多数数据中心也仅仅是万兆带宽，而互联网、大数据时代，由于信息的爆炸增长，对带宽的需求也在不断的增加。

## 网络是安全的

网络安全的问题，一直都是安全人员面临的一个重大挑战，同时也有很多措施被安全人员所提出来。尽管如此，每年还是有数以亿计的损失发生在网络安全领域。数据加密的技术与风控 系统也在快速的发展，以适用互联网时代的数据安全挑战。

## 拓扑不会改变

恰恰相反，拓扑不仅会变化，而且是经常性的发生变化。 尤其在高速成长的业务中，系统的拓扑结构每天都在发生巨大的变化。 所以拓展性是分布式系统设计中非常核心的一个特性。 一个不能很好拓展的系统，不是合格的分布式系统。

## 只存在一个管理员

由于分布式系统的复杂性，往往在一个分布式系统当中存在多种角色，而这多种角色中又包含多个管理员。

## 传输代价为零

传输代价显然不是零，我们通过使用云计算厂商提供的存储服务就知道，很多对象存储，都是以传输进行收费，比如下行流量。

## 网络都是同质的

今天，或许已经很少见到同质网络了。 由于在分布式系统中，硬件、操作系统、传输协议等的不同，网络更多的是以异构的形式存在。

## 小结

正因为具有以上谬论，所以我们在设计分布式系统的时候，坚决不能做以上假设，否则可能导致灾难性的后果。
