分布式系统中的机器,配置不一样,其上运行的服务也可能由不同的语言、架构实现,因此处理能力也不一样;节点间通过 *** 连接,而不同 *** 运营商提供的 *** 的带宽、延时、丢包率又不一样 。怎么保证大家齐头并进,共同完成目标,这四个不小的挑战 。
第二,普遍的节点故障:
虽然单个节点的故障概率较低,但节点数目达到一定规模,出故障的概率就变高了 。分布式系统需要保证故障发生的时候,系统仍然是可用的,这就需要监控节点的状态,在节点故障的情况下将该节点负责的计算、存储任务转移到其他节点
第三,不可靠的 *** :
节点间通过 *** 通信,而 *** 是不可靠的 。可能的 *** 问题包括: *** 分割、延时、丢包、乱序 。
相比单机过程调用,*** 通信最让人头疼的是超时:节点A向节点B发出请求,在约定的时间内没有收到节点B的响应,那么B是否处理了请求,这个是不确定的,这个不确定会带来诸多问题,最简单的,是否要重试请求,节点B会不会多次处理同一个请求 。
总而言之,分布式的挑战来自不确定性,不确定计算机什么时候crash、断电,不确定磁盘什么时候损坏,不确定每次 *** 通信要延迟多久,也不确定通信对端是否处理了发送的消息 。而分布式的规模放大了这个不确定性,不确定性是令人讨厌的,所以有诸多的分布式理论、协议来保证在这种不确定性的情况下,系统还能继续正常工作 。
而且,很多在实际系统中出现的问题,来源于设计时的盲目乐观,觉得这个、那个应该不会出问题 。Fallacies_of_distributed_computing很有意思,介绍了分布式系统新手可能的错误的假设:
分布式系统特性与衡量标准透明性:使用分布式系统的用户并不关心系统是怎么实现的,也不关心读到的数据来自哪个节点,对用户而言,分布式系统的更高境界是用户根本感知不到这是一个分布式系统,在书中,作者是这么说的:
A distributed system is a collection of independent computers that appears to its users as a single coherent system.
可扩展性:分布式系统的根本目标就是为了处理单个计算机无法处理的任务,当任务增加的时候,分布式系统的处理能力会随之增加 。简单来说,就是要比较方便地通过增加机器来应对数据量的增长,同时,当任务规模缩减的时候,可以撤掉一些多余的机器,达到动态伸缩的效果
可用性与可靠性:一般来说,分布式系统是需要长时间甚至7*24小时提供服务的 。可用性是指系统在各种情况对外提供服务的能力,简单来说,可以通过不可用时间与正常服务时间的比值来衡量;而可靠性而是指计算结果正确、存储的数据不丢失 。
高性能:不管是单机还是分布式系统,大家都非常关注性能 。不同的系统对性能的衡量指标是不同的,最常见的:高并发,单位时间内处理的任务越多越好;低延迟:每个任务的平均时间越少越好 。这个其实跟操作系统CPU的调度策略很像
一致性:分布式系统为了提高可用性可靠性,一般会引入冗余(复制集) 。那么如何保证这些节点上的状态一致,这就是分布式系统不得不面对的一致性问题 。一致性有很多等级,一致性越强,对用户越友好,但会制约系统的可用性;一致性等级越低,用户就需要兼容数据不一致的情况,但系统的可用性、并发性很高很多 。
组件、理论、协议回到顶部
假设这是一个对外提供服务的大型分布式系统,用户连接到系统,做一些操作,产生一些需要存储的数据,那么在这个过程中,会遇到哪些组件、理论与协议呢
用一个请求串起来用户使用Web、APP、SDK,通过HTTP、TCP连接到系统 。在分布式系统中,为了高并发、高可用,一般都是多个节点提供相同的服务 。那么,之一个问题就是具体选择哪个节点来提供服务,这个就是负载均衡(load balance) 。负载均衡的思想很简单,但使用非常广泛,在分布式系统、大型网站的方方面面都有使用,或者说,只要涉及到多个节点提供同质的服务,就需要负载均衡 。
通过负载均衡找到一个节点,接下来就是真正处理用户的请求,请求有可能简单,也有可能很复杂 。简单的请求,比如读取数据,那么很可能是有缓存的,即分布式缓存,如果缓存没有命中,那么需要去数据库拉取数据 。对于复杂的请求,可能会调用到系统中其他的服务 。
承上,假设服务A需要调用服务B的服务,首先两个节点需要通信,*** 通信都是建立在TCP/IP协议的基础上,但是,每个应用都手写socket是一件冗杂、低效的事情,因此需要应用层的封装,因此有了HTTP、FTP等各种应用层协议 。当系统愈加复杂,提供大量的http接口也是一件困难的事情 。因此,有了更进一步的抽象,那就是RPC(remote produce call),是的***调用就跟本地过程调用一样方便,屏蔽了 *** 通信等诸多细节,增加新的接口也更加方便 。
推荐阅读
- 男朋友给你微信密码是爱你吗 男朋友找我要微信密码是什么意思
- 汽车检测到压力损失是什么意思 汽车损失是什么意思
- 宝宝老是打嗝是什么原因 宝宝老是打嗝怎么办
- 梦见买药是什么预兆
- 汽车上面的esc是什么意思 escom在汽车上是什么意思
- 所谓世俗是什么意思 所谓的是什么意思
- 媳妇梦见在世婆婆死了是什么意思
- 人的悲喜不相通什么意思 人类的悲欢并不通是什么梗?
- 已婚女人梦见蒜头是什么意思 预兆着什么
- 熊罴貔貅是什么意思 貔貅是什么意思 怎么读音?