Distributed 认识分布式

分布式

一言以蔽之,分布式服务是为了解决单一服务遇到的问题而产生的,如服务器性能瓶颈、服务器容量、服务器容灾机制等等。

分布式是目前主流推崇的一种架构方案,但是设计难度比较大。

一般来说,分布式实现有2种形式:

  • 水平扩展:各个机器的属性、数据、处理等逻辑完全相同,各自分担压力达到负载均衡的目的,用户可以访问任意一个节点完成操作
  • 垂直拆分:将服务细分,将一个大的服务拆成2个小的服务分别部署在不同的机器上,如服务1负责浏览商品,服务2负责支付处理

在分布式的前提下,衍生了2种概念,其实说白了都是一家人,只是分工不同罢了:

  1. 集群:提供高可用服务、提供负载均衡、提高容灾等级
  2. 微服务:提供可扩展性、实现低耦合、高内聚、提高可移植性等

后面还会对微服务做出更详细的探究,关于集群在数据库系列章节中相信你已经有所了解,不再对名词作一一赘述。

设计思路

分布式系统一般有两种设计思路,分别为中心化和去中心化。

其中最具有代表性的设计案例就是k8s和zookeeper。

中心化设计

k8s是中心化设计的代表,由Master指定Worker进行工作,这样做有一个好处,当Worker出现问题时直接换一个Worker进行顶替操作,并将有问题的Worker踢出即可:

image-20210409233924998

但是这样做也带来一个坏处,整个分布式系统中极其依赖Master,一旦Master宕掉之后整个系统全面崩盘。

不过,你可以在条件允许的情况下对Master进行热备操作,由2个Master来领导整个集群,提供高可用性。

去中心化设计

在去中心化设计中,所有分布式系统成员众生平等,没有天生的leader,只有天生的woker,所有的leader都是通过公平选举而产生的。

去中心化的设计并非是不要中心,而是由节点来自由的选择中心。

去中心化最大的问题在于脑裂,比如Elasticsearch中的cluster就是去中心化的设计,而脑裂问题则在于如果经历一些网络波动,可能将原本的单个集群拆分成多个集群,当网络恢复正常后由于这2个集群之前都在故障期间各自进行工作,尝试合并时可能发生严重的数据冲突问题。

image-20210409235539774

此时的解决方式一定要按照实际情况来做决定,这是一个十分令人头疼的问题。

而在另外的一些场景中,脑裂问题的解决方式一般是删除小的集群,全部听大集群的,而上图中这样的做法显然不合理。

CAP定理

在2000年的时候,加州大学柏克莱分校的计算机科学家埃里克·布鲁尔在2000年的分布式计算原理研讨会(PODC)上提出一个猜想,名为CAP猜想。

他认为,对于一个分布式计算系统来说,不可能同时满足以下三点:

  • 一致性 C:在分布式环境中,一致性是指数据在多个副本之间是否能够保持一致的特性,等同于所有节点访问同一份最新的数据副本。在一致性的需求下,当一个系统在数据一致的状态下执行更新操作后,应该保证系统的数据仍然处于一致的状态。
  • 可用性 A:每次请求都能获取到正确的响应,但是不保证获取的数据为最新数据。
  • 分区容错性 P:分布式系统在遇到任何网络分区故障的时候,仍然需要能够保证对外提供满足一致性和可用性的服务,除非是整个网络环境都发生了故障。

一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。

在这三个基本需求中,最多只能同时满足其中的两项,P是必须的,因此只能在CP和AP中选择,zookeeper 保证的是CP,对比spring cloud系统中的注册中心 eruka实现的是 AP。

img

在2005年时,CAP猜想被证实,从此称为大名鼎鼎的CAP定理。

感兴趣的可以Google搜索一下这相关的实验,确实是这样的,但我也没有仔细的进行研究。

BASE理论

BASE理论由eBay架构师Dan Pritchett提出,在2008年上被分表为论文,并且eBay给出了他们在实践中总结的基于BASE理论的一套新的分布式事务解决方案。

BASE 是 Basically Available(基本可用)、Soft-state(软状态) 和 Eventually Consistent(最终一致性) 三个短语的缩写。

  • 基本可用:在分布式系统出现故障,允许损失部分可用性(服务降级、页面降级)。
  • 软状态:允许分布式系统出现中间状态。而且中间状态不影响系统的可用性。这里的中间状态是指不同的 data replication(数据备份节点)之间的数据更新可以出现延时的最终一致性。
  • 最终一致性:data replications 经过一段时间达到一致性。

BASE 理论是对 CAP 中的一致性和可用性进行一个权衡的结果,理论的核心思想就是:我们无法做到强一致,但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性。

image-20210410000557954

即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。也就是牺牲数据的一致性来满足系统的高可用性,系统中一部分数据不可用或者不一致时,仍需要保持系统整体“主要可用”。

针对数据库领域,BASE思想的主要实现是对业务数据进行拆分,让不同的数据分布在不同的机器上,以提升系统的可用性,当前主要有以下两种做法:

  • 按功能划分数据库
  • 分片(如开源的Mycat、Amoeba等)。

由于拆分后会涉及分布式事务问题,所以eBay在该BASE论文中提到了如何用最终一致性的思路来实现高性能的分布式事务,这里不再详细研究。

posted @ 2021-04-10 00:14  云崖君  阅读(461)  评论(0编辑  收藏  举报