分布式系统学习小记1 —— 基础知识概况

“这是我自学算力大集群相关知识的第1篇笔记。”

摘要
  • 什么是分布式系统

简单定义,即一组协作计算机通过网络相互通信以获得/完成连贯任务的系统。

比如上学时需要组织一次班级活动,有的同学负责布置教室、有的负责编排节目、采购等等。大家一起为了一次活动分工协作,这便是对于分布式系统的一种通俗化比喻。

  • 分布式系统有什么优点?为什么需要建立分布式系统?

正如上面所说,这是一种“人多力量大”的模式,并且可以使“每位系统成员做自己所擅长的事情”。具体:


1.可提供更高的系统性能这里的性能可以是计算性能、存储性能(如容量、响应速度)或通讯性能(如负载均衡、通过网络聚合提高带宽)。


2.提升系统容错性

1)提供系统冗余,在系统中发生错误时不至于导致当前运行的任务失败或整个系统下线。即保证系统在发生非致命错误时仍能在线并继续当前任务。比如多块存储设备组成存储阵列,当其中一个故障时,拥有镜像或备份的其他存储部分可立即代替故障部分继续工作(NAS玩家都懂)。

2)提升可恢复性由于分布式系统各个部分拥有不同的功能,且每部分也都是标准化组件,当系统发生了不可避免的下线情况,也可针对导致故障的部分进行快速修复/替换,以便快速恢复上线。

3)可进行异地部署不论是考虑数据安全还是网络延迟等等原因,异地部署往往都是大型数据中心/集群所必须的。毕竟大家都不希望一个不可预测的自然灾害或者一场火灾导致数据丢失,正所谓不要把鸡蛋都放在同一个篮子里。

4)可提升系统安全性分布式系统可以设计成仅通过网络传输的方式对各个子节点任务进行隔离运行,以免遭受攻击或因某个子系统错误导致整个任务失败/系统崩溃。

5)可扩展性正如前文提及,分布式系统可以提供较好的可扩展性。比如当发现算力不足或存储不足时,可以很方便的增加相关节点。同理在需求不高时也可对部分节点进行下线操作以达到节能的目的。

  • 分布式系统的局限性

既然分布式系统这么好,是不是应该从企业到个人的各个层面都使用呢?答案当然是否定的,是否使用应根据实际的业务、体量与场景来决定。更多的设备将导致更高的能耗、空间、散热等一系列的要求。同时,随着系统节点增多,发生故障时,排查的难度与时间可能也会随之增加。节点增加也会导致系统内部的通讯/协同所需的开销增大。遂,最后实际所增加的性能很难达到各个部件单独性能总和的100% 。

  • 分布式系统示例 MapReduce

MapReduce 是一种用于‌大规模数据集并行处理‌的‌编程模型和计算框架‌,来自Google。它的核心思想是将复杂的计算任务分解为三个主要阶段——Map 、 Shuffle 和 Reduce,以便在分布式集群上高效处理海量数据。

1.所谓Map即拆解任务‌:

 把原始数据(如一本厚字典)切成小份分给多个同学(计算节点)。每个同学负责数自己那部分‌每个单词出现的次数‌,记录为:<单词, 1>(如:<“鸡🐔”, 1>、<“篮球🏀”, 1>)。 

好比:每人分到字典的10页,统计自己页面的单词。

2.Shuffle 整理归类‌: 

系统自动把所有人记录的纸条收上来,‌按单词归类排序‌(比如所有“鸡🐔”的纸条放一堆,“篮球🏀”的放另一堆)。 

好比:课代表把全班的“鸡🐔”纸条收在一起,“篮球🏀”的收在另一叠。

3.Reduce 汇总结果‌: 

每组同学领一叠‌相同单词的纸条‌,把数字加起来(如“鸡🐔”纸条有50张,结果就是<“鸡🐔”, 50>),最终得到完整统计。

好比:A组算“鸡🐔”的总数,B组算“篮球🏀”的总数。

By the way,分布式系统所有的数据需要存储在支持分布式系统特性的文件系统上,在 MapReduce 的例子中,所使用的是GFS文件系统。

以上就是第一篇笔记的内容,我们可以大致了解分布式系统是什么,以及其有哪些特点,并举了 MapReduce 的例子来进行粗浅、感性的理解。

感谢观看🎉