【Zookeeper】二、主从应用(master-worker架构)

embedded/2025/2/12 22:07:21/
以一张具有代表性的架构风格展开本篇论述

在这里插入图片描述一般在这种架构中,主节点所负责的工作主要有

  • 跟踪从节点状态
  • 分配任务到从节点,并跟踪任务的有效性(任务是否正常执行完成)

此时,我们需要关注三个问题

  • 主节点崩溃
    如果主节点发生了错误,那么整个系统将无法分配新的任务;对于已经失败的任务也无法进行重新分配。
  • 从节点崩溃
    如果从节点发生错误,已经分配的任务将无法执行完成。
  • 主从之间的通信发生故障
    如果主从之间通信故障,主节点将无法感知从节点的任务执行状态,并且从节点也无法接收新的任务。
主节点崩溃

对于这个问题,我们需要有一个备份主节点(backup master)。当主要主节点(primary master)崩溃时,backup master能够接管primary master的任务,进行故障转移。接管意味着,新的master能够切入到旧的master崩溃时的状态。此时,就需要旧的master失效时的一些信息,而这个信息已经无法从旧的master进行获取,需要从其他地方获取,即通过Zookeeper进行获取。

还有另外一种情况。当主节点负载很高,导致消息传递发生了延迟,导致backup master误认为primary master已经失效,此时backup master会成为第二个primary master。同时由于网络等原因,一些从节点无法与第一个primary mastter通信,而与第二个primary master建立了主从关系。这种情况被称之为脑裂(split-brain)。简单来讲,脑裂就是系统中两个或多个部分开始独立工作,导致整体行为不一。

所以需要一种方法来处理主节点失效的情况,并且避免脑裂。

从节点崩溃

主节点分配任务到有效的从节点,从节点执行任务并报告任务的执行状态。如果从节点崩溃了,主节点需要将尚未完成的任务重新派发到其他从节点。所以,主节点需要具备检测从节点失效的能力,并确定那些从节点有效以便于派发任务。

主从之间的通信发生故障

如果一个从节点与主节点的网络连接断开,重新分配一个任务可能会导致两个从节点执行相同的任务。如果一个任务允许多次执行,我们在进行任务再分配时可以不用关心从节点是否完成了该任务。如果一个任务不允许,那么我们的应用需要适应多个从节点执行相同任务的可能性。

通过以上描述,总结出主从架构有以下几点需求
  • 主节点选举
  • 崩溃检测
  • 组成员关系管理:主节点需要知道哪一个从节点具备执行任务的能力。
  • 元数据管理。用于保存任务的分配状态和执行状态。

ZooKeeper提供了实现这些原语的关键机制,使得开发者可以更加关注应用本身的业务逻辑。

什么是原语?

比如说我写到这里的时候,饥肠辘辘,想吃宫保鸡丁,于是我开始自己动手做这道菜。

  • 切(原语):首先,需要将鸡肉切成丁,将辣椒切成段。
  • 炒(原语):其次,需要在锅中加热油,然后炒鸡肉。
  • 调味(原语):最后,在炒的过程中,需要加入调料,如酱油、糖、醋等。

通过这些基本的“原语”(准备食材和烹饪操作),可以组合它们来完成一道美味的菜肴。在计算机中,原语就是构建更复杂系统和程序的基本构件。


http://www.ppmy.cn/embedded/140550.html

相关文章

Firewall防火墙配置

文章目录 一、firewalld简介二、firewalld特性三、firewalld相关文件及目录四、firewalld配置五、firewalld配置实例一、firewalld简介 firewalld 提供了支持网络/防火墙区域(zone)定义网络链接以及接口安全等级的动态防火墙管理工具。它支持 ipv4, ipv6 防火墙设置以及以太网…

CircuitBreaker机制详解:Elasticsearch中的资源管理

CircuitBreaker机制详解:Elasticsearch中的资源管理 在现代软件架构中,熔断器(CircuitBreaker)是一种重要的模式,用于防止系统过载并保护系统稳定性。在Elasticsearch中,熔断器机制尤其关键,因为它们帮助管理资源使用,防止节点因资源耗尽而崩溃。本文将深入探讨Elasti…

废品买卖回收管理系统|Java|SSM|Vue| 前后端分离

【重要①】前后端源码万字文档部署文档 【重要②】正版源码有问题包售后 【包含内容】 【一】项目提供非常完整的源码注释 【二】相关技术栈文档 【三】源码讲解视频 【其它服务】 【一】可以提供远程部署安装,包扩环境 【二】提供软件相关的安装包 【三】如…

输入三个整数x,y,z,请把这三个数由小到大输出。-多语言实现

目录 C 语言实现 Python 实现 Java 实现 Js 实现 题目:输入三个整数x,y,z,请把这三个数由小到大输出。 程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后…

go语言range的高级用法-使用range来接收通道里面的数据

在 Go 语言中,可以使用 for ... range 循环来遍历通道(channel)。for ... range 循环会一直从通道中接收值,直到通道关闭并且所有值都被接收完毕。 使用 for ... range 遍历通道 示例代码 下面是一个使用 for ... range 遍历通…

如何调试 chrome 崩溃日志(MAC)

引言 在使用 Chrome 浏览器的过程中,偶尔会遇到浏览器崩溃的情况。为了找出崩溃的原因并修复问题,我们需要对崩溃后的 .dmp 文件进行详细分析。本文将详细介绍如何从用户的系统中获取崩溃日志文件,使用 minidump_stackwalk 查看浏览器版本信…

金融服务的未来:测试自动化如何驱动合规、安全与创新

在快节奏、监管严格的金融服务领域,提供卓越的服务不仅仅关乎速度,还关乎管理巨大的复杂性。随着金融机构面临越来越大的创新压力,它们还肩负着维持严格的安全和合规标准的重任。 测试自动化不仅仅是一种工具;它 使团队能够 满怀…

HBase 原理

一、HBase系统架构 HBase采用主从架构,主要由以下几个组件组成: Client:客户端,可以是HBase Shell、Java API客户端、Rest API等,提供访问接口,并维护对应的缓存以加速HBase的访问。客户端缓存Region的位…