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

devtools/2024/11/25 23:36:25/
以一张具有代表性的架构风格展开本篇论述

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

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

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

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

对于这个问题,我们需要有一个备份主节点(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/devtools/136071.html

相关文章

[Redis#1] 前言 | 再谈服务端高并发分布式结构的演进

目录 电子商务应用架构演进 概述 常见概念 架构演进 总结 总结 应用(Application)/ 系统(System) 模块(Module)/ 组件(Component) 分布式(Distributed&#xff0…

MySQL更换瀚高语法更换

MySQL更换瀚高语法更换 一、前言二、语句 一、前言 水一篇,mysql更换瀚高之后,一些需要更换的语法介绍 > 二、语句 MySQL瀚高MySQL用法瀚高用法说明ifnull(x,y)coalesce(x,y)相同相同用于检查两个表达式并返回第一个非空表达式。如果第一个表达式不是 NULL&…

python内存分析

处理图片内存溢出问题 1.第一次分析,没有主动del图片对象 ,对应分析表中左图 profile def my_function(): i 0for img in line_img_list:i1print(i)img_stream minio.download_file("line", img)if img_stream is None:print("有问…

Compose学习记录(3): ViewModel数据驱动更新组件

前面已经学习过在 Composable 函数中保存UI的状态,然后修改状态来更新UI控件的内容。如: Composable fun Greeting(name: String, modifier: Modifier Modifier) {val expand rememberSaveable { mutableStateOf(false) }// ...使用expand控制是否展开…

LeetCode 力扣 热题 100道(六)合并两个有序链表(C++)

合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3,4,4]示例 2: 输入:l1 [], l2 [] 输出:[]示…

【Diffusion分割】CorrDiff:用于脑肿瘤分割的校正扩散模型

CorrDiff: Corrective Diffusion Model for Accurate MRI Brain Tumor Segmentation 要进行精确的临床诊断和治疗,必须对核磁共振成像图像中的脑肿瘤进行准确分割。然而,现有的医学图像分割方法存在误差,可分为随机误差和系统误差两类。随机误差产生于各种不可预测的影响,给…

C++线程基础使用方法

文章目录 **1. 什么是线程****2. C 中的线程库****3. 创建线程**基本用法使用 Lambda 表达式使用类成员函数 **4. 管理线程**join 和 detach检查线程是否可加入 **5. 数据共享与同步**数据竞争问题使用互斥锁 (std::mutex)死锁与避免 **6. 条件变量****7. 线程间通信**使用 std…

【hacker送书第16期】Python数据分析、挖掘与可视化、AI全能助手ChatGPT职场工作效率提升技巧与案例

解锁数据分析与AI应用的双重秘密:全面推广《Python数据分析、挖掘与可视化从入门到精通》与《AI全能助手ChatGPT职场工作效率提升技巧与案例》 前言Python数据分析、挖掘与可视化从入门到精通💕内容简介获取方式 AI全能助手ChatGPT职场工作效率提升技巧与…