分布式基础

  1. 分布式特点

  2. 为什么使用分布式;

  3. 分布式存在的问题;

  4. 分布式CAP理论;
  5. 分布式共识以及一致性;

  6. 分布式锁;

  7. 分布式事务;

  8. 分布式框架;

一、分布式的特点:

  • 分布式系统 :一个硬件或软件组件分布在不同的网络节点上,彼此之间通过 消息传递 进行 通信和协调 的系统。

  • 分布性 :分布式系统中的多台计算机都会在空间上随意分布,同时机器的分布情况也会随时变动。

  • 对等性 :分布式系统中的计算机 没有主/从之分 :既没有控制整个系统的主机,也没有被控制的从机,组成分布式系统的所有计算机节点都是 对等 的。 副本 (replica)是分布式系统对数据和服务提供的一种 冗余方式 。在常见的分布式系统中,为了对外提供 高可用 的服务,往往会对数据和服务进行副本实现。数据副本是指在不同的节点上持久化同一份数据;服务副本是指多个节点提供同样的服务。这是和集群最大的区别,集群通常有主从之分,且会有全量以及增量的数据复制过程。

  • 并发性 :多个线程同时更新内存中的变量的值,为更新操作的并发行。

  • 缺乏全局时钟 :由于分布式系统缺乏一个全局的时钟序列控制,所以在分布式系统中,很难定义两个事件究竟谁先谁后。

一个比较著名的关于分布式的定义是: 分布式系统是若干独立计算机的集合,这计算机对用户来说就像单个相关系统。

目前比较成熟的分布式系统有Kafka,Redis-cluster,HDFS,TiDB等等。

Redis-cluster将整个系统的数据平均分配到各个节点中,每个节点负责一定数量的槽位,实现了数据分布式存储和读取。

二、为什么使用分布式

先说一下我们公司曾经发生的事情。

我们是一个精品电商公司,那时候我们的后端服务只有两个应用,一个是订单服务,一个是除了订单服务之外的其他所有服务。此外,就算是两个应用,用的也是同一套数据库,数据库当时只是读写分离。最开始毫无问题,但随着业务和流量不断壮大起来了,在19年米粉节的时候,除了事故。一个负责拼团的哥们在开发中写了慢查询SQL,而且是循环执行慢查询。从而导致把数据库弄挂了,导致影响了全站。用户无法下单,无法浏览商品等等。当时这件事的影响还是比较恶劣的。

2.同样是一次大促活动,有一个哥们开发时写了一个bug,在线上出现了panic,导致后端服务挂掉,它的一个代码影响了整个后端服务。

这几件事也让领导们痛定思痛,认为该到拆分业务的时候了,确定各个业务边界上下文,让各个子业务相互独立,依赖的数据库也相互独立部署,不相互干扰。

在19年上半年就逐渐各个业务开始拆分成微服务了,我记得第一个拆分的是商品服务。

我想从上面的例子中,也多少能看到一些分布式系统存在的意义了,分布式系统主要能够为整个系统提供高可用、高性能、可扩展的服务。

1、分布式中各个系统相互独立部署,不会存在相互干扰的问题,也会便于业务扩展;

2、明确各个子系统责任边界,功能和职责更加清晰;

3、实现各个子系统的解耦,实现高内聚、低耦合的目标;

三、分布式存在的问题

1、一致性的问题

多个子系统,如何能够保证数据一致性的问题。

2、如何保证高可用

当某个服务出现故障了,该如何做。对于调用方是否需要降级熔断,对于提供方是否可以限流等等。

3、面对越来越多的服务,如何统一管理,避免过于错综复杂,没有章法。

因为节点和节点只能通过网络传输,那么很有可能由于网络出错造成数据丢失、数据乱序等等各种各样的问题。

四、分布式CAP

CAP理论是Eric Brewer首次提出来的一种分布式的理论,它主要包括了一致性、高可用性以及分区容错性。

C:强一致性,保证某个节点更改数据,客户端不管从哪个节点都能读到最新的数据。类似于单点的操作;

A:高可用,客户端访问,永远都能得到响应,通常我们会通过冗余备份实现。

P:分区容错性。因为网络的问题,导致节点间不能相互通信,被分割的节点仍然能对外提供服务。

CAP三个最多只能保证两个,不能保证全部。

1、 CA without P:

满足强一致性和可用性的,但不满足分区容错。

如果既要满足强一致性,也要满足可用性,那就必须不会允许分区容错,如果发生容错是无法同时保证CA两点的。

这种

2、CP without A:

满足强一致性和分区容错性,不满足可用性

如果此时发生了网络分区,为了保证一致性,我们这时就会拒绝提供继续写入功能,从而失去了可用性。

3、 AP without C:

满足可用性,分区容错性,不满足强一致性

如果此时发生了分区,那么如果想时时刻刻都保证可用性,那么就不能满足一致性。因为如果依然可以写入,那么某个分区的节点就会造成数据不一致。

虽然上面说了三种,但通常都是在满足P的情况下,我们是需要C和A的哪一个,而不是三选二。因为我们的网络必然是不可靠的,引起网络出错,节点通信异常的因素非常多,整个TCP分层的各个层都有可能导致通信异常,此外节点本身也会出现宕机。所以P是必然存在的。

相比于CAP,还有一种理论叫BASE理论,它强调的是基本可用性、最终一致性以及软状态。

基本可用是说可以暂时牺牲一些非核心的功能,保证核心的功能可用;

最终一致性比较好理解,相比强一致性,它的要求更低一些。

软状态就是指允许数据存在短暂不一致,此时正在不同副本之间进行复制。

五、分布式共识以及一致性

参考资料:

1、 Harvest, Yield, and Scalable Tolerant Systems, Armando Fox , Eric Brewer, 1999

2、 分布式理论基础

3、 分布式基础-分布式CAP理论

参考资料:

分布式系统中的开源软件

--------EOF---------
微信分享/微信扫码阅读