欢迎您的访问
专注于Java技术系列文章的Java技术分享网站
精选技术专栏

四、ZooKeeper 进阶:分布式系统的理解

JetBrains全家桶破解:IDEA 2021 破解到 2099 年教程

永久链接: https://tech.souyunku.com/?p=6302

作者:zkp_java | 出处:https://blog.csdn.net/zkp_java/article/category/8044591

分布式系统集群的特点

  • 集群中所有节点维护的数据要一致
  • 所有节点都可以提供相同的业务功能(不一定是在同一时刻提供)
  • 集群需要保障系统的高可用,某个节点宕机不会影响服务

集群环境下如何保障数据一致性

集群环境下有三种方式可以保障数据一致性:数据复制和集中存储。

  • 数据复制:先向单节点写入,再复制到其他节点,zookeeper就是这样实现的;或者多节点同时写入,但只适合多节点写入的数据不是相同数据的应用场景;在master-slave场景中,同步复制(slave从master全部复制完成才给客户端返回写入成功)可保证强一致性,但会影响可用性,异步复制(数据写入master就返回写入成功,不需要等到salve复制完成,之后master通过push向slave推送数据或者slave通过pull方式从master拉取数据)可提高可用性但会降低一致性(如果master向客户端返回写入成功但尚未开始同步数据到slave时master宕机了,客户端再从slave读取该数据时会产生数据不一致问题)。
  • WNR:N代表总副本数,W代表每次写操作要保证的最少写成功的副本数,R代表每次读操作最少读取的副本数,当W+R>N时,可保证每次读取的数据至少有一个副本具有最新的更新(例如可以通过版本号或者时间戳判断哪个副本的数据是最新的),多个写操作的顺序难以保证,可能导致多副本间的写操作顺序不一致,Dynamo通过箱量时钟保证最终一致性。
  • 集中存储:借助可靠性较高的集中存储,比如NAS存储,分布式缓存(redis)等。

分布式系统之sharding

对于业务系统来说,就是业务拆分,不同的子模块单独是一个的集群,整体业务系统是个大分布式系统。

对于数据系统(比如mongodb)来说,就是数据的拆分,如下图所示的mongodb部署架构图:

img_0921_01_1.png
图中有四个分片(shard),每个分片是一个由若干台机器组成的副本集(replica set),每个副本集内所有机器的数据都是一样的。从每个副本集各取出一部分数据最后才能够组成一份完整的数据。

zookeeper集群

  • zookeeper集群是一种对等集群,所有节点(机器)数据都一样;
  • 集群节点之间靠心跳感知彼此的存在;
  • 所有写操作都在主节点,其他节点只能读,虽然也可以接收写请求,但是内部会把写操作转给主节点;
  • 通过选举机制选出主节点,从而保障了主节点的高可用,这样主节点就不是固定的,万一主节点宕机还可以重新选举出主节点;
  • 至少需要三个节点,而且节点个数必须是基数;
  • 当一半以上的数据写入成功后,则返回写入成功,是最终一致性策略;

如下图所示的zookeeper集群架构:
img_0921_01_2.png
client发送到follow的写请求转发给leader,由leader执行完写操作后再同步到follow。

分布式系统之CAP理论

CAP的定义

C是一致性(Consistency)、A是可用性(Availability)、P是分区容忍性(Partition tolerance)。

CAP的定义:一个分布式系统不可能同时满足一致性、可用性和分区容忍性这三个要求,只能满足其中两项。

CAP的理解

  • 一致性:分布式环境下,一致性主要是指数据在多个副本之间是否保持一致,即通过某个节点的写操作结果对后面通过其他节点的读操作可见,如果数据更新后并发访问情况下可立即感知该更新,称为强一致性,如果允许之后部分或者全部感知不到该更新,称为弱一致性,若在之后的一段时间(通常该时间不固定)后,一定可以感知该更新,称为最终一致性
  • 可用性:是指系统提供的服务必须一直处于可用状态,对用户的请求总是能够在有限的时间内返回结果,有限的时间强调的是用户能够接受的时间,任何一个没有发生故障的节点必须在有限的时间内返回合理的结果;
  • 分区容忍性:集群出现网络割裂时,集群还能继续提供一定的可用性和一致性,除非整个网络不可用,也即部分节点宕机或者无法与其他节点通信时,各分区间还可保持分布式系统的功能;
  • 只能满足其中两项并不是说另外一项就完全没有,而是要求没有那么严格;
  • 分区容忍性是分布式系统必须有的特性,因为网络不可靠,所以只能在C和A之间权衡;

note:可用性与常说的高可用性的可用性不是一个概念,即如果服务访问不到,不属于没有可用性。

放弃CAP定理

  • 放弃分区容忍性( P ):即集群如果出现网络割裂的话,整个集群无法提供可用性和一致性服务,这种情况要么集群节点无状态(没理解????),要么是把所有数据放在一个节点上,这样就失去了扩展性,也不能叫分布式系统了,所以,单机应用因为放弃了P,得到很好的CA;
  • 放弃可用性(A):放弃可用性,并不是完全没有可用性,是指允许响应超时的时间可以更长,比如报表可以运行10分钟左右,甚至在某些情况下允许超时错误;
  • 放弃一致性( C ):放弃一致性是放弃数据得强一致性,而保留数据的最终一致性,即数据最终是完全一致的,但有一个时间窗口的问题,这需要根据不同的业务来定义。比如新浪微博的内容,时间窗口可以超过10分钟,而交易订单只允许几秒钟。

分布式系统之base理论

BASE是Basically Available(基本可用)、Soft State(软状态)和Eventually Consistent(最终一致性)三个短语得简写,它是对CAP中的一致性和可用性权衡的结果。

BASE的核心思想是即使无法做到强一致性,但是每个应用可以根据自身的业务特点,采取适当的方式达到最终一致性,同时获取到系统可用性。

BASE之基本可用体现在两个方面:

  • 响应时间上的损失:比如有些请求1秒内给出响应,有些请求可能会在5秒内给出响应;
  • 功能上的损失:例如对于电商系统来说,某些区域可能不能购买某些商品,又或者大促时,部分消费者被引流到降级页面;

BASE之弱状态:

  • 也称为软状态,是指允许系统中的数据存在中间状态,并认为该状态不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间存在一定的延时;例如在双11在淘宝购物时,但系统提示还是待付款;

BASE之最终一致性:

  • 系统中的数据副本在经过一段时间同步后,最终能够达到一个一致的状态。

专栏推荐

专栏汇总:2000+ 道 Java互联网大厂面试题

专栏汇总:RabbitMQ 源码解析

专栏汇总:Dubbo 源码分析

专栏汇总:Tomcat源码分析

专栏汇总:RocketMQ 源码分析

附录 ZooKeeper 进阶 ,系列文章

一、ZooKeeper 进阶:基本介绍

二、ZooKeeper 进阶:持久节点、临时节点及ACL

三、ZooKeeper 进阶:watcher的使用及原理

四、ZooKeeper 进阶:分布式系统的理解

五、ZooKeeper 进阶:自带客户端原生api的使用

六、ZooKeeper 进阶:开源客户端curator

七、ZooKeeper 进阶:选举及数据一致性

八、ZooKeeper 进阶: Leader选举源码分析

赞(61) 打赏



版权归原创作者所有,任何形式转载请联系作者;搜云库技术团队 » 四、ZooKeeper 进阶:分布式系统的理解

JetBrains全家桶破解:IDEA 2021 破解到 2099 年教程
JetBrains全家桶破解:IDEA 2021 破解到 2099 年教程

评论 抢沙发

一个专注于Java技术系列文章的技术分享网站

觉得文章有用就打赏一下文章作者

微信扫一扫打赏

微信扫一扫打赏