分布式系统知识体系大纲
分布式有几十年的历史了,但从来没有想今天这么火过。从分布式存储到微服务架构,从区块链到边缘计算,无所不在,无人不知。下面我们就分布式所涉及的基本内容列一个大纲,以供大家学习,了解。
本大纲旨在向软件工程师介绍现实中分布式系统的基础知识,以便让大家获得对分布式系统中关键术语的直观理解,并探讨生产中问题。
分布式系统的定义
什么是分布式系统?Lamport在1987给出了分布式的定义
A distributed system is one in which the failure of a computer you didn't even know existed can render your own computer unusable.
一个分布式系统是那种发生问题后,你都不知道发生在哪里,最终导致你的计算机变得无法访问和使用。
上面其实是对分布式的一个简单描述,可以说不是严格的定义。分布式是将业务分散在多个处理单元(节点)上,通过单元(单元)间的协作完成一个共同的任务。
分布式的节点
节点是分布式的基本单元,英文名为Node。在分布式系统中节点也是要认真考虑的问题,包含性能和容错等内容。
- 硬件设备
- 双网卡冗余,单网卡的故障会导致节点的不可用,因此需要考虑双网卡冗余
- CPU绑定,CPU的缓存对提升性能有很大的帮助,绑定CPU避免进程跨CPU切换导致缓存失效。
- RDMA,高性能的设备对性能的提升非常明显
- 操作系统
- 内存拷贝对性能的影响
- 零拷贝技术
- 缓存与文件系统
- 编程语言与编译器
- 程序写法对性能的影响
- 编译器优化
分布式的网络
网络是分布式的基石,分布式系统只有通过网络才能将多个节点连接成为一个整体。一般分布式系统都是基于TCP协议进行的,另外,在TCP的基础上回封装自己的私有协议。
- 网络是节点沟通的通道
- 人类交流通过讲话
- 计算机交互通过协议(TCP、UDP、RPC)
- 计算机的协议其实类似人类的语言
- 消息随时间广播
- 这是分布式系统的缓慢部分
- 我们称这为“延迟latency"
- 网络会存在各种异常
- 重复Duplicate
- 延误Delay
- 丢失Drop
- 重新排序Reorder
分布式协议
由于分布式系统的复杂性和网络的不可靠性,因此科学家发明了很多算法来解决这些问题。分布式领域核心的算法有3类,分布式解决分布式一致性的算法,进行负载均衡选路的算法和信息高效分发的协议。
- 分布式一致性协议
- 二阶段提交
- 三阶段提交
- Paxos协议
- Raft协议
- ZAB协议
- 选路算法
- DHT一致性哈希算法
- 数据分发算法
- Gossip
分布式应用
分布式系统在实际生产中涉及的内容很多,但从应用方面就包括分布式计算和分布式存储。而分布式存储又分为IaaS的存储、KV存储、表格存储和缓存等等,内容之多,数不胜数。
分布式任务处理服务:负责具体的业务逻辑处理
分布式节点注册和查询:负责管理所有分布式节点的命名和物理信息的注册与查询,是节点之间联系的桥梁
分布式DB:分布式结构化数据存取
分布式Cache:分布式缓存数据(非持久化)存取
分布式文件:分布式文件存取
网络通信:节点之间的网络数据通信
监控管理:搜集、监控和诊断所有节点运行状态
分布式编程语言:用于分布式环境下的专有编程语言,比如Elang、Scala
分布式算法:为解决分布式环境下一些特有问题的算法,比如解决一致性问题的Paxos算法
开源项目:Redis,ZooKeeper,Dubbo,Etcd,Ceph,K8S
上述内容都是进行分布式开发和设计必须的内容,希望对大家有所帮助。