分布式系统,你知道多少?

一、前言

2011年中国互联网协会对外宣布,中国成为世界上网民最多的国家,而随着近些年互联网的喷井发展,中国网民规模也达到了9亿多人(如下图)。随之也将信息带入了 大数据 时代,同时为了应付上亿人次的访问量, 高并发 也成为了当今应用避免不了的话题,而这就够了吗?有一项调查结果显示,如果网页的加载时间超过3秒,就会有超过50%的用户选择离开,自然 快响应 必然不能缺席。
在这里插入图片描述
在大数据、高并发、快响应的要求下,单机系统已经不再满足如今互联网的业务需求,那么如何解决?随着硬件资源变得便宜,如今的应用系统也已经从单机系统发展为多机协作的系统,而我们称这样的多台机器互相协作完成业务需求的系统称为分布式系统。。虽然分布式系统使开发变得更加复杂与困难,但随着分布式系统的发展与流行,结合前人的开发经验与理念,我们站在巨人的肩膀上提出了微服务架构的概念(此处只详细说明分布式系统,微服务概念下篇再详细介绍),而至于什么是分布式系统?不妨往下观看。

二、分布式系统

1、概述

为了让大家更好的了解什么是分布式系统,我们这里给出一个简易的分布式框架(如下图)。首先,用户使用 PC端 或 移动端 通过互联网向网站发送请求,请求到达服务器后,通过网关中的路由算法将其请求发送到对应的Web服务器上去,从而完成对应的业务需求。而这就是一个简单的分布式系统的工作原理。虽然它有许多问题,但是不影响它传达的理论。
在这里插入图片描述
所以什么是分布式系统呢?分布式系统是一组为了完成共同任务而协调工作的计算机节点,它们通过网络进行通信。它采用分而治之的思想,通过使用多台廉价的普通机器进行独立运算,然后通过协同工作完成任务,同时分布式系统也满足了当今互联网对大数据、高并发、快响应的要求。
说了那么多,那它又具有哪些优点呢?

  • 高性能:因为大量请求被合理地分摊到各个节点,使每一台Web服务器的压力减少,并且多个请求可以使用多台机器来处理,所以能处理更多的请求和数据,性能自然比单机系统更高。如此,便解决了如今互联网系统的三个关键性问题——"大数据、高并发、快响应”
  • 高可用:自动避开存在的故障节点,继续对外提供服务。在单机系统中,机械故障会造成网站不可使用。但在分布式系统中,如果某个计算机节点出现故障,系统会自动剔除这个节点,不再会向这个节点转发请求,而系统依然可以使用。
  • 可伸缩性:当现有机器的性能不能满足业务的发展时,我们需要更多的机器提供服务。只要改造路由算法,就能路由到新的机器,从而将更多的机器容纳到系统中,继续满足大数据、高并发和快响应的要求。反之,当现有机器已经大大超过所需,则可以减少机器,从而节省成本。
  • 可维护性:如果设备当中一台机器因某种原因不能对外提供服务,如机器出现故障,此时只需要停止那些出现故障的节点,对其进行处理,然后重新上线即可。
  • 灵活性:当系统需要更新时,只需要在非高峰期,停用部分节点,将这些节点更新为最新节点,然后再通过路由算法将请求路由到这些更新后的节点,最后更新那些旧版本的节点,就可以让网站在更新系统时不间断地对外提供服务了。

2、切分方法

在分布式系统中,需要 将系统按照不同的维度(业务、数据等)切分给各个不同节点的机器,这里列举了三种常用的切分方法。
在这里插入图片描述

(1)、水平切分方法

水平切分方法,顾名思义就是将同一个系统部署到多台机器上,使得每台机器都有相同的应用,能独立完成计算,互不干扰。如下图:
在这里插入图片描述
优 点:

  • 简 单:只需要实现一个路由算法,将请求合理地分配给各个节点即可。目前实现这个功能的网关有 Nginx、Netflix Zuul和SpringCloud Gateway 等。
  • 独 立:每个节点都有完整的运算功能,不需要依赖其他节点,因此系统之间不需要太多的交互。
  • 高可用:当出现不能工作的节点时,系统仍然可以继续运行,无须停机,因为路由算法不会给不能工作的节点分配请求。
  • 可伸缩:可以随着业务的增长,增加服务节点,也可以随着业务的缩减,减少服务节点,二者都十分容易。
  • 高性能:因为都是在单机内完成,不需要做外部调用,因此可以得到很高的性能。

缺 点:

  • 降低了可维护性:如果对产品业务进行升级,则需要对全部节点进行升级,不方便进行系统维护。
  • 降低了可扩展性:水平切分方法需要将所有的业务全部集中在一套系统里开发,耦合度高,不方面日后的维护与扩展。
  • 使系统变得不可靠与不稳定:当通过打包的形式来升级系统,容易使得系统变得不稳定和不可靠。

(2)、垂直切分方法

垂直切分方法就是按照 业务的维度 来进行拆分,将各个业务独立出来,单独开发与维护,从而解决业务的增加与深入,以及用户数的爆增使得业务变得异常复杂的问题。如下图:
在这里插入图片描述
优 点:

  • 提高业务独立性:只要根据业务把系统划分成高内聚、低耦合的模块,就能极大地降低开发难度。
  • 提高灵活性:任何一个业务发生改变,都只需维护相关的系统,而无须将全部系统打包上线。
  • 提高可维护性:独立的系统更容易发现问题,因为将业务分离出去后,发生的异常情况更容易被定位,从而使开发者和业务人员维护起来更方便。

缺 点:

  • 增加了系统之间的协作:系统之间需要协作完成任务,比如用户购买(交易)商品这一业务操作就需要用户、交易、商品,这三个系统共同协作来完成。
  • 降低了可用性:因为系统之间存在依赖,所以任何一个系统出现问题,都会影响其他系统。比如产品系统出现问题,用户购买商品这一个操作便不能完成。
  • 数据一致性难以保证:因为系统之间需要通信,而网络通信往往并不可靠,所以节点之间的数据一致性难以保证。

(3)、混合切分方法

混合切分方法就是将水平切分与垂直切分方法结合起来,也是现今大部分微服务架构采用的切分方法。比如先将系统按照业务维度进行划分到不同的服务器集群里,再对每种业务进行水平切分,使得每种业务系统可以在多个节点中运行。如下图:
在这里插入图片描述
混合切分方法不仅集合了垂直切分的优点,也具备了水平切分的优点,而相对于耦合性和缺乏灵活性来说,混合切分方法更容易处理大量交互和数据一致性的问题,因此它也逐渐成为了现今主流的划分方式。但是它依然无法克服系统之间大量交互和难以维护的数据一致性的问题,同时切分节点过多也会使实现分布式系统的硬件成本提高。

3、面临问题

在非单机节点的情况下,分布式系统只能通过网络通信来完成协作,使得它存在许多不确定性。所以网络的不可靠性(比如丢包、延时等)、传输速率大小等因素对分布式系统产生了很多的限制,总结归纳如下:

  • 异构的机器和网络:在分布式系统中,机器的配置、架构、性能、系统等都是不一样的。在不同的网络之间,通信宽带、延时、丢包率也是不一样的。那么在多机的分布式系统中,如何才能让所有的机器齐头并进,为同一个业务目标服务,这是一个相当复杂的问题。
  • 普遍的节点故障:在分布式系统中,存在很多机器因为某些原因(如断电、磁盘损害)不能继续工作。分布式系统怎么去发现它们,并且自动将它们剔除出去,将请求分配到能够正常工作的节点,以保证系统能够继续提供服务,这也是需要面对的问题。
  • 不可靠的网络和机器:多机器之间的交互是通过网络进行的,而网络传输必然发生分隔、延时、乱序、丢包等问题。机器也会因为请求量的增加而降低处理能力,而这些都会影响用户对网站的忠诚度。

总结来说就是:因为网络和机器的众多不确定性,注定了分布式的难点在于”如何让多个节点之间保持一致性,服务于企业的实际业务“

4、分布式系统的衡量标准

既然分布式系统能解决如此之多的问题,那么什么样的分布式系统设计是优良的呢?在《分布式系统:原理与规范》一书中,给出了一些大家都认可的衡量标准,如下:

  • 透明性:所谓透明性,就是指一个分布式系统对外来说如同一个单机系统,使用者不需要知道其内部的实现,只需要知道其参数、功能和返回结果即可。
  • 可伸缩性:当分布式系统的全部现有节点都无法满足业务膨胀的需求时,可以根据需要加入新的节点来应对业务数据的增加。当业务收缩时,又可以更加需求减少节点来达到节省资源的效果。
  • 可用性:一般来说,分布式系统可全天不间断地提供服务,即使在出现故障的情况下,也尽可能对外提供服务。因而,可以通过正常服务时间和不可用时间的比值来衡量其可用性。
  • 可靠性:可靠性,主要针对数据来说,数据要计算正确且不丢失地存储。
  • 高性能:因为有多个节点分摊请求,所以能更快地处理请求。再加上每个节点都可以高性能地处理请求,所以分布式系统的性能比单机系统的性能高得多。
  • 一致性:由于分布式系统采用多节点,在处理一个业务的时候,需要多台机器协作处理数据。而因为网络通信的原因(丢包、延迟、不稳定、协作时序错乱等),会造成数据的不一致或者丢失。对于像金额这样的数据是不允许发生错误和丢失的,所以如何保证数据的一致性和防止丢失是分布式系统的一个重要衡量标准。

三、分布式系统的设计原则

由于分布式系统的复杂性,一些学者与专家提出了许多的解决理念,而最著名、最具有影响的就属 CAP原则 和 BASE原则 。
在这里插入图片描述

1、CAP原则

在说CAP原则之前,我们先来说一下分布式系统的主要特点:一致性、可用性和分区容忍。直接上概念,如下:

  • 一致性(Consistency):保持所有节点在同一时刻具有相同的、逻辑一致的数据。
  • 可用性(Availability):保证每个请求不管成功还是失败都有响应。
  • 分区容忍(Partition tolerance):系统中任何的信息丢失或者失败都不会影响系统的继续运作。
    所以根据这3个特点,2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP猜想。2年后,麻省理工学院的Seth Gilbert和Nancy Lynch从理论上证明了CAP。之后,CAP理论正式成为分布式计算领域的公认定理。它指出了任何分布式系统都不能同时满足这3个特点。自然它就符合如下图的集合关系。
    在这里插入图片描述
    说 明:
  • CA:满足一致性和可用性的系统,在可扩展性上难建树。
  • CP:满足一致性和分区容忍性的系统,通常性能不是特别高。
  • AP:满足可用性和分区容忍性的系统,通常对于一致性要求低一些,但性能会比较高。
  • 中间空白部分:任何系统都只能较好的完成其中的两个指标,无法完成3个指标。

2、BASE理论

在开始说BASE理论之前,我们先来了解两个概念——” 强一致性弱一致性 “(其实在CAP原则中的一致性是强一致性)。

  • 强一致性:当用户完成数据更新操作之后,任何后续线程或者其他节点都能访问到最新值。根据CAP原则,若追求强一致性必然要对性能做出较大的牺牲。

  • 弱一致性:当用户完成数据更新操作之后,并不能保证后续线程或者其他节点马上访问到最新值。它只能通过某种方法来保证最后的一致性。

BASE理论是eBay的架构师 Dan Prichett在ACM上发表的文章中正式提出来的,是对大部分分布式系统的实践总结。其核心思想就是:”即使分布式系统无法做到最强一致性,也可以采用适当的方法达到最终一致性“。其BASE理论核心内容就是:“放弃强一致性,保证系统的可用性”。因为分布式系统自身的融合和扩展就是相当复杂,如果需要保证强一致性就需要额外引入许多复杂的协议,这样导致技术的复杂化,同时针对性能也有影响。BASE理论则建议让数据在一段时间内不一致,从而降低技术实现的复杂性,并提高系统的性能,最后再通过其他手段使得数据达到一致性即可。

BASE 其实不是一个单词,它是BA、SE 几个专业英文缩写组成的,所以不要弄错了噢。那么它们分别代表什么呢?

  • BA(Basically Avalilable 基本可用):通俗的来说,在分布式系统中,最重要的需求是保证基本可用,有响应结果返回。比如"双十一剁手节"时,你正在抢购商品时,如果此时抢购失败,那么它会提示一个“系统繁忙、请过会儿再来”,如果此时它不给你返回响应,那么你得一直在等待剁手,你想想这得多疼啊。因此,当系统给用户一个明确的消息,能让用户不必做漫长的等待,为用户提供了一个良好的服务。

  • S(Soft State 软状态): 其意义在于允许系统存在中间状态。一般来说,系统之间的数据通信都会存在副本,而这些副本都会存在一定的延迟。这时推荐使用一致性代替强一致性,这样有利于提高系统多的可用性和性能。在网站用户的体验中,快速显示结果往往比一致性更为重要,因为没有人愿意使用一个十几秒都不能响应的网站。

  • E(Eventual Consistency 最终一致性):指系统中的所有数据副本经过一定时间后,最终能够达到一致的状态,以保证数据的正确性。

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值