分布式架构

随着计算机系统规模变得越来越大,将所有的业务单元集中部署在一个或若干个大型机上的体系结构,已经越来越不能满足当今计算机系统,分布式的处理方式越来越受到业界的青睐——计算机系统正经历从集中式向分布式架构的变革。

分布式的特点

分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。分布式系统主要有如下几个特征:
  • 分布性
分布式系统中的多台计算机都会在空间上随意分布,同时机器的分布状况也会随时变动。
  • 对等性
分布式系统中的计算机没有主从之分,即没有控制整个系统的主机,也没有被控制的从机,组成分布式系统的所有计算机节点都是对等的。
  • 并发性
在一个计算机网络中,程序运行过程中的并发性操作是非常常见的行为,例如同一个分布式系统中的多个节点,可能会并发地操作一些共享的资源,诸如数据库或者分布式存储等。
  • 缺乏全局时钟
一个典型的分布式系统是由一系列在空间上随意分布的多个进程组成的,具有明显的分布性,这些进程之间通过交换信息来进行相互通信。因此,在分布式系统中,很难定义两个事件究竟谁先谁后,原因就是因为分布式系统缺乏一个全局的时钟序列控制。
  • 故障总是会发生
组成分布式系统的所有计算机,都有可能会发生任何形式的故障。

分布式环境的各种问题

     分布式环境中存在一些典型的问题:

  • 通信异常
分布式系统需要在各个节点之间进行网络通信,因此每次网络通信都会伴随着网络不可用的风险,网络光纤、路由器或是DNS等硬件设备或者是系统不可用都会导致最终分布式系统无法顺利完成一次网络通信。即使分布式系统各节点之间的网络通信能够正常进行,其延时也会远远大於单机操作。
  • 网络分区
当网络由于发生异常情况,导致分布式系统中部分节点之间的网络延时不断增大,最终导致组成分布式系统的所有节点中,只有部分节点之间能够进行正常通信,而另外一些节点则不能,这个现象称为网络分区,俗称“脑裂”。
  • 三态
分布式系统中的每一次的请求与响应,存在特有的“三态”概念,即成功、失败和超时。
  • 节点故障
组成分布式系统的服务器节点出现的宕机或者“僵死”现象。

事务的ACID特性

事务是由一系列对系统中数据进行访问与更新的操作所组成的一个程序执行逻辑单元,狭义的事务特指数据库事务。一方面,当多个应用程序并发访问数据库时,事务可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相干扰。另外一方面,事务为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持数据一致性的方法。事务具有四个特征:原子性,一致性,隔离性和持久性。事务的ACID特性如下图所示:


分布式事务

      在单机数据库中,我们很容易实现一个满足ACID特性的事务处理系统,但是在分布式的数据库中,数据分散在各个不同的机器上,如何对这些数据进行分布式的事务处理具有非常大的挑战,比如前面说到的机器宕机和各种网络异常问题等。

      分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于分布式系统的不同节点之上。通常一个分布式事务中会涉及到对多个数据源或业务系统的操作。例如,一个跨银行的转账操作涉及调用两个异地的银行服务,其中一个是本地银行提供的取款服务,另一个是目标银行提供的存款服务,这两个服务本身是无状态并且是互相独立的,共同构成了一个完整的分布式事务。如果从本地银行取款成功,但是因为某种原因存款服务失败了,那么就必须回滚到取款前的状态,否则用户可能会发现自己的钱不翼而飞。一个分布式事务可以看作是由多个分布式的操作序列组成的,例如上面举例中的取款服务和存款服务,通常可以把这一系列分布式的操作序列称为子事务。

CAP和BASE理论

CAP定理

      CAP理论告诉我们,一个分布式系统不可能同时满足一致性(C:Consistency)、可用性(A:Available)和分区容错性(P:Partition Tolerance)这三个基本需求,最多只能同时满足其中的两项。CAP定理的示意图如下所示:

        

  • 一致性
      在分布式环境中,一致性是指数据在多个副本之间是否能够保持一致的特性。在一致性的需求下,当一个系统在数据一致的状态下执行更新操作后,应该保证系统的数据仍然处于一致的状态。例如一个将数据副本分布在不同分布式节点上的系统来说,如果对第一个节点的数据进行了更新操作并且更新成功后,其他节点上的数据也应该得到更新,并且所有用户都可以读取到其最新的值,那么这样的系统就被认为具有强一致性(或严格的一致性)。
  • 可用性

      可用性是指系统提供的服务必须一直处于可用的状态,对于用户的每一个操作请求总是能够在有限的时间内返回结果。“有效的时间内”是指,对于用户的一个操作请求,系统必须能够在指定的时间(即响应时间)内返回对应的处理结果,如果超过了这个时间范围,那么系统就被认为是不可用的。

      “返回结果”是可用性的另一个非常重要的指标,它要求系统在完成对用户请求的处理后,返回一个正常的响应结果。正常的响应结果通常能够明确的反映出对请求的处理结果,即成功或失败,而不是一个让用户感到困惑的返回结果。

  • 分区容错性

      分区容错性约束了一个分布式系统需要具有如下特性:分布式系统在遇到任何网络分区故障的时候,仍然需要能够保证对外提供满足一致性和可用性的服务,除非是整个网络环境都发生了故障。

      网络分区是指在分布式系统中,不同的节点分布在不同的子网络(机房或异地网络等)中,由于一些特殊的原因导致这些子网络之间出现网络不连通的状况,但各个子网络的内部网络是正常的,从而导致整个系统的网络环境被切分成了若干个孤立的区域。需要注意的是,组成一个分布式系统的每个节点的加入与退出都可以看作是一个特殊的网络分区。

      由于一个分布式系统无法同时满足上面的三个需求,而只能满足其中的两项,因此在进行对CAP定理的应用的时候,需要根据业务的要求抛弃其中的一项,下表所示是抛弃CAP定理中任意一项特性的场景说明。

      

      

      





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章