这是我参与「第五届青训营」伴学笔记创作活动的第13天。
当下,信息和计算需求爆炸式增长,单机性能已经难以满足要求,此外,摩尔定律逐渐失效、单机性能提升速度放缓,单机性能短时间内无法取得突破性进步。在这样的背景下,分布式系统已然成为现代架构的基石,即通过多个独立的计算节点的计算资源来完成共同的目标。
什么是分布式
分布式系统是计算机程序的集合,这些程序利用跨多个独立计算节点的计算资源来实现共同的目标。具体来说,分布式包括分布式计算、分布式存储、分布式数据库等多种应用场景。
分布式的优势包括:
- 去中心化
- 不依赖于特定的中心主机,不会因为一台机器的崩溃造成整个计算系统的崩溃
- 低成本
- 对单机性能没有过高要求,完全可以使用多个性能相对较低的机器实现一个性能较高的机器的效果
- 弹性
- 可以随时增加和减少计算节点
- 资源共享
- 各个计算节点共享资源
- 可靠性高
- 单个节点的故障不影响整体
但同时,分布式技术也面临着一些挑战,例如:不可靠的网络、异构的机器与硬件环境、安全防护等。
常见的分布式系统
常见的分布式存储系统:
- Google File System(GFS):Google出品的分布式文件系统
- Ceph:统一的分布式存储系统
- Hadoop HDFS:基于GFS架构的开源分布式文件系统
- Zookeeper:高可用的分布式数据管理与系统协调框架
常见的分布式数据库系统:
- Google Spanner:Google出品的可扩展、全球分布式的数据库
- TiDB:开源的分布式关系型数据库
- HBase:开源的NoSQL数据库
- MongoDB:文档数据库
常见的分布式计算系统:
- Hadoop:基于MapReduce计算模型的分布式计算框架
- Spark:在Hadoop基础上加以改进的分布式计算框架,特点是使用内存而不是外置磁盘存储数据
- YARN:分布式资源调度系统
分布式系统故障模型
这里列出分布式系统中常见的故障模型,在分布式系统的设计中,应当建立这些故障模型并设置相应的处理逻辑。
- Byzantine Failure:节点可以任意篡改发送给其他节点的数据
- Authentication Detectable Byzantine(ADB) Failure:是Byzantine Failure的特例,节点可以篡改数据,但不能伪造其他节点的数据
- Performance Failure:节点未在特定时间段内收到数据,即收到数据的时间点太早或太晚
- Omission Failure:节点收到数据的时间无限晚,即收不到数据
- Crash Failure:在Omission Failure的基础上增加了节点停止响应的假设,可以看作是持续性的Omission Failure
- Fail-Stop Failure:在Crash Failure的基础上增加了错误可检测的假设
举例来说,节点的磁盘故障(例如磁头不寻道、磁介质损伤等)可能会带来Fail-Stop Failure(错误可被节点发现);磁盘坏道、坏块问题可能会带来Fail-Stop Failure和ADB Failure(本机数据错误,但其他节点的数据不受影响);主板故障可能会导致Crash Failure(节点完全崩溃);网络故障可能会带来Byzantine Failure(网络问题导致数据发生错误),等等。