分布式系统定义与面临的问题
主要分为以下几点进行论述
分布式环境的各种问题
-
通信异常
-
网络分区
-
三态
-
节点故障
分布式系统定义:
分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。
上面这个简单的定义涵盖了几乎所有有效地部署了网络化计算机的系统。通俗的理解,所谓分布式系统,就是一个业务拆分成多个子业务,分布在不同的服务器节点,共同构成的系统成为分布式系统,同一个分布式系统中的服务器节点在空间部署上可以随意分布的,这些服务器可能放在不同的机柜中,也可能在不同的机房中,甚至分布在不同的城市。
例如:分布式系统就是一群人一起干活。人多力量大,每个服务器的算例是有限的,但是通过分布式系统,由n个服务器组成起来的集群,算力是无限扩张的。
分布式环境的各种问题
通信异常:
分布式系统需要在各个节点之间进行通信,通信必然要引入网络因素,而由于网络本身的不可靠性,因此每次网络通信都会伴随着网络不可用的风险(光纤,路由,DNS等硬件设备或系统的不可用),都会导致最终分布式系统无法顺利进行一次网络通信,另外,即使分布式系统各节点之间的网络通信能够正常执行,其延时也会大于单机操作,存在巨大的延迟差别,也会影响消息的收发过程,因此消息丢失和消息延迟变得非常普遍。
网络分区
由于网络发生异常情况,导致分布式系统中部分节点之间的网络延迟不断增大,最终导致分布式系统中只有部分节点能够进行正常通信,而另外一些节点则不能,这种情况为网络分区,也就是俗称的脑裂。当出现网络分区时,网络之间出现了网络不连通,但各个子网络的内部网络是正常的,从而导致整个系统的网络环境被切分成了若干个孤立的区域,分布式系统机会出现局部小集群,在极端情况下,这些小集群会独立完成原本需要整个分布式系统才能完成的功能,包括数据的事务处理,这就是分布式一致性提出非常大的挑战
三态
从上面的介绍已经了解了在分布式环境下,网络可能会出现各式各样的问题,因此分布式系统每一次请求与响应存在特有的“三态”概念,即成功、失败、超时。在传统的单机系统中,应用程序调用一个函数之后,能够得到非常明确的响应:成功或失败,而在分布式系统中,由于网络的不可靠,虽然绝大部分情况下,网路通信能够接收到成功或失败的响应,但是当网路出现异常的情况下,就会出现超时现象,通常有以下两种情况:
1.由于网络原因,该请求并没有被成功的发送到接收方,而是在发送过程就发生了丢失现象。
2.该请求成功的被接收方接收后,并进行了处理,但在响应反馈给发送方的过程中,发生了消息丢失现象。
节点故障
节点故障是分布式系统下另一个比较常见的问题,也就是说组成分布式系统的服务器节点出现的宕机或者“僵死”现象,根据以往平时遇到的问题来说,每个节点都有可能出现故障,并且经常发生
其实以上几点内容,都是分布式系统下创建的几种问题,其实我们在平时的项目开发中也都有经常遇到,那当然既然有这方面的问题出现,基本上就会有应对这几种问题的解决方案。所以说,分布式系统对一致性提出了极大的挑战。