网络可靠
对于分布式系统来说,网络、计算、存储是三大基石,系统之间进行拆分隔离之后,那么必定存在网络通讯,而网络是最不可靠的。
不管是从硬件层面还是软件层面来说,网络是不可靠的。(断电、配置错误、IDC不可用等)
所以对于一些API调用,需要进行容错设计,重试&幂等 自动重连接等机制 。
延迟为零
延迟描述的是两地之间通讯所耗费的时间,比如北京到北美。而带宽说的是一次可以传输的数据量。两个描述的不是一个东西。
延迟基本上除了受限于地理位置的距离,也和是否使用高速专用网络通道也有关系。
所以设计层面 1.将少量静态数据部署在CDN中,用户可以更快速的获取数据。2.提供服务器的处理性能,硬件层面、软件层面、性能优化层,避免出现网络拥塞和服务器超载。
带宽是无限的
当大量的视频流或者文件流进行在网络带宽中传输数据时,会造成排队延迟,瓶颈和网络拥塞。服务数据丢包。无序传送和消息丢失。网络性能不好导致整个系统的不稳定。
提供网络带宽质量
- 全面监控:对系统的网络监控,及时发现相关问题。
- 多路服用:将数据从几个来源结合并发送通过相同的通信信道。
- 轻量级数据格式:采用JSON 或者RPC 二进制序列化格式。
- 网络流量控制:使用字节流、速率限制、拥塞控制、指数退避等机制。
网络安全
系统在对外传输的各种数据时,需要使用加解密进行处理。因为网络传输是不安全的。
拓扑不变
网络拓扑结果其实会一直变化,比如修改服务配置等,所以需要实时检测网络的拓扑结构的变化。
有1名管理员
小的系统可能只有一个运维,但是当系统成为分布式系统的时候,应该将部署自动化,以及对应的自动化运维。而不是还是人工进行运维,要不然出现问题,到恢复这个时间,会很长,故障时间也会很长。最好的方式是使用IAC(基础设置即代码)保证系统的监控和可观测性。
运输成本为零
大多数人认为网络成本是没有成本的,其实并不然,服务器、网络交换机、负载均衡、代理、防火墙、操作系统、网络都需要费用。
此外我们还需要设计一个高度可用、可靠和容错的分布式系统,除了基础设施外,网络数据传输成本。
- 应用层到传输层需要时间和CPU资源
- 信息需要在服务端进行序列化,将数据传输到客户端,客户端进行反序列化。不推荐使用XML,一般使用JSON、protbuf。
网络是同构的
对于分布式系统来说,网络是异构的,需要和各种设计集成,所以最好的方式是采用同样的数据格式规范,网络传输协议等。而不是独有一套,那样的话出现问题后维护成本比较高。
小结
本篇主要介绍了分布式系统中8个谬误
- 网络是可靠的。
- 延迟为零。
- 带宽是无限的。
- 网络是安全的。
- 拓扑不会改变。
- 有一名管理员。
- 运输成本为零。
- 网络是同质的。
参考资料
https://www.jdon.com/56806.html
https://architecturenotes.co/fallacies-of-distributed-systems/