正文
虽然本人在前面也写过好几篇分布式系统相关的文章,主要包括CAP理论、分布式存储与分布式事务,但对于分布式系统,并没有一个跟清晰的概念 。分布式系统涉及到很多的技术、理论与协议,很多人也说,分布式系统是“入门容易,深入难”,我之前的学习也只算是管中窥豹,只见得其中一斑 。因此,一致希望能对分布式系统有一个更全面的认识,至少能够把分布式系统中的各个技术、理论串起来,了解他们在分布式系统分别解决什么问题,有哪些优秀的实现 。
我曾在 *** 上搜索过”如何学习分布式系统“,也在知乎上关注了该话题,但并没有看到一个全面的、有指导意义的答案 。本文的目标是给打算全面学习分布式系统的自己、以及感兴趣的读者指明一条可行的路径,使得之后的学习不再盲目 。
不过,我并没有越过这座山,我只是站在山前,从前人留下的痕迹揣测山的全貌与沟壑,臆想的成分居多,还望各位大师指点迷津 。
什么是分布式系统分布式系统是由一组通过 *** 进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统 。分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务 。其目的是利用更多的机器,处理更多的数据 。
首先需要明确的是,当单个节点的处理能力无法满足日益增长的计算、存储任务的时候,且硬件的提升(加内存、加磁盘、使用更好的CPU)高昂到得不偿失的时候,应用程序也不能进一步优化的时候,我们才需要考虑分布式系统 。因为,分布式系统要解决的问题本身就是和单机系统一样的,而由于分布式系统多节点、通过 *** 通信的拓扑结构,会引入很多单机系统没有的问题,为了解决这些问题又会引入更多的机制、协议,带来更多的问题 。。。
在很多文章中,主要讲分布式系统分为分布式计算(computation)与分布式存储(storage) 。计算与存储是相辅相成的,计算需要数据,要么来自实时数据(流量数据),要么来自存储的数据;而计算的结果也是需要存储的 。在操作系统中,对计算与存储有非常详尽的讨论,分布式系统只不过将这些理论推广到多个节点罢了 。
那么分布式系统怎么将任务分发到这些计算机节点呢,很简单的思想,分而治之,即分片(partition) 。对于计算,那么就是对计算任务进行切换,每个节点算一些,最终汇总就行了,这就是MapReduce的思想;对于存储,更好理解一下,每个节点存一部分数据就行了 。当数据规模变大的时候,Partition是唯一的选择,同时也会带来一些好处:
(1)提升性能和并发,操作被分发到不同的分片,相互独立
(2)提升系统的可用性,即使部分分片不能用,其他分片也不会受到影响
理想的情况下,有分片就行了,但事实的情况却不大理想 。原因在于,分布式系统中有大量的节点,且通过 *** 通信 。单个节点的故障(进程crash、断电、磁盘损坏)是个小概率事件,但整个系统的故障率会随节点的增加而指数级增加,*** 通信也可能出现断网、高延迟的情况 。在这种一定会出现的“异常”情况下,分布式系统还是需要继续稳定地对外提供服务,即需要较强的容错性 。最简单的办法,就是冗余或者复制集(Replication),即多个节点负责同一个任务,最为常见的就是分布式存储中,多个节点复杂存储同一份数据,以此增强可用性与可靠性 。同时,Replication也会带来性能的提升,比如数据的locality可以减少用户的等待时间 。
下面这种图形象生动说明了Partition与Replication是如何协作的 。
文章插图
Partition和Replication是解决分布式系统问题的一记组合拳,很多具体的问题都可以用这个思路去解决 。但这并不是银弹,往往是为了解决一个问题,会引入更多的问题,比如为了可用性与可靠性保证,引用了冗余(复制集) 。有了冗余,各个副本间的一致性问题就变得很头疼,一致性在系统的角度和用户的角度又有不同的等级划分 。如果要保证强一致性,那么会影响可用性与性能,在一些应用(比如电商、搜索)是难以接受的 。如果是最终一致性,那么就需要处理数据冲突的情况 。CAP、FLP这些理论告诉我们,在分布式系统中,没有更佳的选择,都是需要权衡,做出最合适的选择 。
分布式系统挑战分布式系统需要大量机器协作,面临诸多的挑战:
之一,异构的机器与 *** :
推荐阅读
- 男朋友给你微信密码是爱你吗 男朋友找我要微信密码是什么意思
- 汽车检测到压力损失是什么意思 汽车损失是什么意思
- 宝宝老是打嗝是什么原因 宝宝老是打嗝怎么办
- 梦见买药是什么预兆
- 汽车上面的esc是什么意思 escom在汽车上是什么意思
- 所谓世俗是什么意思 所谓的是什么意思
- 媳妇梦见在世婆婆死了是什么意思
- 人的悲喜不相通什么意思 人类的悲欢并不通是什么梗?
- 已婚女人梦见蒜头是什么意思 预兆着什么
- 熊罴貔貅是什么意思 貔貅是什么意思 怎么读音?