当前位置: 首页 > news >正文

【分布式系统】分布式系统的8个谬误

在这里插入图片描述

网络可靠

在这里插入图片描述

对于分布式系统来说,网络、计算、存储是三大基石,系统之间进行拆分隔离之后,那么必定存在网络通讯,而网络是最不可靠的。
不管是从硬件层面还是软件层面来说,网络是不可靠的。(断电、配置错误、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/

http://www.lryc.cn/news/101593.html

相关文章:

  • tinkerCAD案例:25. 量角器 - 测量角度
  • Flutter 使用texture_rgba_renderer实现桌面端渲染视频
  • linux虚拟机开机后桌面显示CentOS-7.5-x86盘片文件,并且无法远程连接虚拟机?
  • 【Spring Boot 源码学习】走近 AutoConfigurationImportSelector
  • 系统学习Linux-MySQL数据库备份(四)
  • 具身智能controller---RT-1(Robotics Transformer)(中---实验介绍)
  • 无涯教程-jQuery - load( url, data, callback)方法函数
  • 【Shell】Shell编程之免交互
  • 从Vue2到Vue3【七】——Vue2中响应式原理的实现及其缺陷
  • 用C语言实现堆排序算法
  • tauri在github上进行自动更新打包并发版过程,实战操作避坑
  • css中flex后文本溢出的问题
  • restful接口设计规范[仅供参考]
  • Metabase 远程代码执行(CVE-2023-38646)
  • 【TiDB理论知识 07】SQL执行流程
  • 微服务——服务异步通讯RabbitMQ
  • 事件冒泡、事件捕获和事件委托
  • WEB 典型安全功能说明
  • SQL编译优化原理
  • qt signal slots lambda
  • Spring【声明式事务】
  • 【雕爷学编程】MicroPython动手做(17)——掌控板之触摸引脚2
  • pytorch 中 view 和reshape的区别
  • 认识数组指针
  • SSM面试题-Spring容器的启动流程
  • Vue 3:玩一下web前端技术(八)
  • AI绘画Stable Diffusion原理之Autoencoder-Latent
  • C++核心知识点总结
  • echart折线图,调节折线点和y轴的间距(亲测可用)
  • Power BI-云端报表定时刷新--ODBC、MySQL、Oracle等其他本地数据源的刷新(二)