微服务实战系列之ZooKeeper(中)

这篇具有很好参考价值的文章主要介绍了微服务实战系列之ZooKeeper(中)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

昨日博主的第一篇ZooKeeper,对它自身具备的能力做了初步介绍。书接上文,马不停蹄,我们继续挖掘它内在的美,充分把握它的核心与脉络。

微服务实战系列之ZooKeeper(中),架构设计,微服务,zookeeper,架构,分布式,ZAB

揭秘ZooKeeper

Q:集群一致性协同是如何进行的

我们讲到分布式,一般是在集群环境下实现的。以ZooKeeper为例,它是如何保障集群环境下的成功运转呢?

微服务实战系列之ZooKeeper(中),架构设计,微服务,zookeeper,架构,分布式,ZAB

1. 节点角色

通过上图,我们认识一下ZooKeeper的3类节点:

  • Leader节点
    Leader作为ZooKeeper的领袖,有着举足轻重的作用。它是ZooKeeper集群环境如何稳定运行的关键,主要负责读写和调度等核心工作。如果它宕机了,一致性调度从此冷却,整个集群将面临群龙无首的局面,直至系统瘫痪。
  • Follower节点
    作为随从节点,主要负责客户端的读操作,如果遇到写申请, 需要转发Leader节点完成,自身不做任何处理。如Leader宕机,会立即参与Leader的选举,具有投票权。
  • Observer节点
    作为候选角色,Observer为提升整个集群的执行效率提供一定帮助,但仅限于读操作。不参与写,不参与Leader的选举。

了解3类节点后,我们大概知道每个Server(Node)是如何执行客户端申请以及Server集群内部是如何完成最终一致性协同的过程。

比如Client对任一类节点发起读操作,则每个节点均可立即返回本地数据,如此便提高了响应性能;
比如Client对Follower节点发起写操作,则它会写命令转交Leader完成,最后由Leader完成写操作和数据同步;
比如Leader发生宕机,则Follower们立即启动选举,任命新的Leader。而Observer完全可以“袖手旁观,置之不理”,此刻真是“开心开心极了...”
微服务实战系列之ZooKeeper(中),架构设计,微服务,zookeeper,架构,分布式,ZAB

2. 基础协议

为了实现上述一致性数据同步,ZooKeeper基于ZAB(Zookeeper Atomic Broadcast 原子广播协议)完成的。

ZAB准确来讲提供了一套完整的数据同步消息机制。(无论哪类节点)从接收客户端请求到客户端收到实时数据,并实现集群内部数据写操作的一致性,均是通过ZAB机制完成的。

微服务实战系列之ZooKeeper(中),架构设计,微服务,zookeeper,架构,分布式,ZAB

通过上图,我们了解到,Leader负责处理写请求,如其他节点接收到写请求,需转发Leader完成。那么Leader收到请求后,如何继续工作呢?

  1. 发布全局唯一事务申请zxid(zxid是64位的Long类型);
  2. 所有的Follower均对此申请进行反馈;
  3. Leader如收到反馈过半,则执行写提交,最后完成集群同步;
Q:集群选举如何进行的

我们都知道Leader至关重要,是维持ZooKeeper的集群健康运转的大脑。但天有不测风云,即使7*24高可用高可靠,也难免百密一疏。如果Leader真的宕机了? 如何维持集群秩序呢?

接下来,博主带着各位盆友,继续揭秘ZooKeeper中 Leader的选举过程。

既然有选举,就有投票,有投票,就有候选人,有投票人。那么候选人和投票人是怎么产生的,最终谁才能胜任?
微服务实战系列之ZooKeeper(中),架构设计,微服务,zookeeper,架构,分布式,ZAB
在正式讲解选项过程前,我们先了解一些基础知识。

1. 节点状态

在ZooKeeper集群中,涉及4中状态:

节点状态 简介
LOOKING 寻 找 Leader 状态,即开始选举的初始状态
FOLLOWING 跟随者状态,表明当前节点为Follower
LEADING 领袖状态,表明当前节点为Leader
OBSERVING 观察者状态,表明当前节点为Observer
2. 节点ID

我们在搭建ZooKeeper集群时,一般需要为每个Server(Node)标识一个唯一的编号(从小到大,比如1.2.3,以此类推)。

这个ID一般记录在每个ZooKeeper Server中的数据文件中,安装时指定。

3. 奇数

ZooKeeper集群信仰奇数,为什么? 因为有“过半才OK”的理念。
所以我们在搭建集群时,务必按要求配置,否则ZooKeeper可能无法正常工作哦。

4. 投票选举Leader
选举场景 简介
启动时 选择此刻集群中的节点ID最大者投票。当然开始时,均可为自己投票,实时更新状态
故障恢复时 根据ZXID顺序,优先执行,并选择此刻集群中的节点ID最大者投票

投票结束后,收到票数过半者则当选新一任Leader,其他节点自动更新为Follower,而Observer自必不说,全程不参与。

到此为止,我们具备了以上基础知识后,继续回看上图,是不是可以理解了?


结语

博主通过揭秘ZooKeeper内在的核心逻辑,剖析它是如何完成我们想象中的职责和工作的。通过以上内容,我们可以发现,无论是什么协议或算法,均服务于某个业务和技术场景。所以感谢前辈们的辛勤耕耘,才有ZooKeeper的用武之地。


历史回顾

  • 微服务实战系列之ZooKeeper(上)
  • 微服务实战系列之MQ
  • 微服务实战系列之通信
  • 微服务实战系列之J2Cache
  • 微服务实战系列之Cache(技巧篇)
  • 微服务实战系列之MemCache
  • 微服务实战系列之EhCache
  • 微服务实战系列之Redis
  • 微服务实战系列之Cache
  • 微服务实战系列之Nginx(技巧篇)
  • 微服务实战系列之Nginx
  • 微服务实战系列之Feign
  • 微服务实战系列之Sentinel
  • 微服务实战系列之Token
  • 微服务实战系列之Nacos
  • 微服务实战系列之Gateway
  • 微服务实战系列之加密RSA
  • 微服务实战系列之签名Sign

微服务实战系列之ZooKeeper(中),架构设计,微服务,zookeeper,架构,分布式,ZAB文章来源地址https://www.toymoban.com/news/detail-763234.html

到了这里,关于微服务实战系列之ZooKeeper(中)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微服务实战系列之Cache(技巧篇)

    凡工具必带使用说明书,如不合理的使用,可能得到 “意外收获” 。这就好比每个人擅长的领域有所差异,如果放错了位置或用错了人,也一定会让 Leader 们陷入两难之地: “上无法肩负领导之重托,下难免失去伙伴之信任” ,最终的结局大致是 不欢而散 。 通过前序系列

    2024年02月03日
    浏览(57)
  • SpringCloudAlibaba微服务实战系列(二)Nacos配置中心

    在java代码中或者在配置文件中写配置,是最不雅的,意味着每次修改配置都需要重新打包或者替换class文件。若放在远程的配置文件中,每次修改了配置后只需要重启一次服务即可。话不多说,直接干货拉满。 首先引入配置相关的依赖 其次保证项目启动时,配置先从nacos配置

    2024年02月16日
    浏览(41)
  • 微服务实战系列之J2Cache

    经过近几天陆续发布 Cache 系列博文,博主已对业界主流的缓存工具进行了基本介绍,当然也提到了一些基本技巧。相信各位盆友看见这么多 Cache 工具后,在选型上一定存在某些偏爱: A同学说:不管业务千变万化,我对Redis的爱永不变。 B同学说:不管集中式还是分布式,单

    2024年02月04日
    浏览(34)
  • SpringCloudAlibaba微服务实战系列(三)Sentinel1.8.0+流控

    Sentinel被称为分布式系统的流量防卫兵,是阿里开源流量框架,从 服务限流、降级、熔断等 多个纬度保护服务。Sentinel同时提供了简洁易用的控制台,可以看到接入应用的秒级数据,并可以在控制台设置一些规则保护应用。它比Hystrix支持的范围广泛,如Spring Cloud、Dubbo、gRP

    2024年02月16日
    浏览(29)
  • Nestjs 微服务实战 - 动态微服务创建链接

    所有的微服务都需要做服务治理 服务治理包括(配置中心、服务发现、注册服务等等),常见的包括 Java 的 Nacos,这里不关注与服务治理,只说明,如何用 nest 网关,并且在网关层动态实现微服务注入 nestjs 官网的案例明显是偏向于手动注册微服务的,例如: 以上属于官网列

    2024年01月24日
    浏览(28)
  • go-zero微服务实战——服务构建

    接上一节go-zero微服务实战——基本环境搭建。搭建好了微服务的基本环境,开始构建整个微服务体系了,将其他服务也搭建起来。 order的目录结构,如下 根目录 api服务 rpc服务 自定义逻辑层logic 自定义参数层models 自定义工具层util api服务和rpc服务都是基于goctl一键生成的,当

    2024年02月14日
    浏览(31)
  • zookeeper分布式协调系统的架构设计与源码剖析

    目录 001_我们一般到底用ZooKeeper来干什么事儿? 002_有哪些开源的分布式系统中使用了ZooKeeper? 003_为什么我们在分布式系统架构中需要使用ZooKeeper集群? 004_ZooKeeper为了满足分布式系统的需求要有哪些特点 005_为了满足分布式系统的需求,ZooKeeper的架构设计有哪些特点? 006_

    2024年02月03日
    浏览(35)
  • 《学成在线》微服务实战项目实操笔记系列(P92~P120)【下】

    史上最详细《学成在线》项目实操笔记系列【下】,跟视频的每一P对应,全系列18万字,涵盖详细步骤与问题的解决方案。如果你操作到某一步卡壳,参考这篇,相信会带给你极大启发。 4.1 (课程发布)模块需求 P92 课程预览:在发布课程之前需要预览一下,看最终的效果有没

    2024年02月19日
    浏览(36)
  • SpringCloudAlibaba微服务实战系列(五)Sentinel1.8.5+Nacos持久化

    前面介绍Sentinel的流控、熔断降级等功能,同时Sentinel应用也在面临着一个问题:我们在Sentinel后台管理界面中配置了一堆流控、降级规则,但是Sentinel一重启,这些规则全部消失了。那么我们就要考虑Sentinel的持久化问题。 Sentinel为我们提供了几种持久化的解决方案: 存储到

    2024年02月10日
    浏览(40)
  • SpringCloudAlibaba微服务实战系列(四)Sentinel熔断降级、异常fallback、block细致处理

    接着上篇文章的内容,在Sentinel中如何进行降级和熔断呢? 降级规则 在Sentinel中降级主要有三个策略:RT、异常比例、异常数,也是针对某个资源的设置。而在 1.8.0+ 版本后RT改为了 慢调用比例 需要设置允许的慢调用 RT(即最大的响应时间),请求的响应时间大于该值则统计

    2024年02月16日
    浏览(33)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包