当前位置: 首页 > news >正文

架构师面试(二十五):分布式存储 Leader 设计

问题

在非常多的分布式存储系统中,如:Zookeeper、Etcd、Kafka等,往往会存在一个 【Leader】 角色,并由该角色负责数据的写入,这样设计最主要的原因是什么呢?

    A. 唯一负责数据写入的 Leader 角色可以避免并发写入时的数据冲突问题;

    B. 唯一负责数据写入的 Leader 角色简化了系统整体的设计,降低了系统实现的复杂度;

    C. 方便实现数据的顺序一致性,进而达到强一致性的目的;

    D. 多节点写入的设计在同步副本数据时容易造成网络拥堵。

解析

在分布式存储系统中,往往会有一个负责数据写入的【Leader】角色,这样设计的原因包括:避免多节点写入的数据冲突;避免多节点写入时副本同步的网络拥堵;单节点写入可以降低系统复杂度;单节点写入更容易实现顺序一致性等等。

上面的 ABCD 四个选项都是原因,但最主要的原因是 A 选项,避免数据冲突。数据冲突是致命的,像网络拥堵、系统复杂度、顺序一致性是可以通过其他方式缓解或解决的。关于避免数据冲突,我们详细再描述一下哈!

假设一个分布式存储系统,包含nodeA、nodeB、nodeC 三个节点,这三个节点互为副本,没有主角色;这三个节点上同时存在着  x=1 的数据记录。

假设有两个客户端 clientA 和 clientB 同时分别向 nodeA 和 nodeB 写入 x=5 和 x=9;

写入成功后,nodeA 会将 x=5 同步给 nodeC;同时,nodeB 会将 x=9 同步给 nodeC。

此时,我们需要理解  nodeC 的心情,它应该听谁的呢?x 应该是 5 还是 9,还是1呢?怎么解决 nodeC 比较困惑的问题呢?

通常的解决方案是: 必须要有一个“全局说了算”的角色存在,这个“全局说了算”的角色,很容易就可以想到是 zookeeper。

是的,引入 zookeeper 是可以解决这个问题,但似乎不够优雅,而且引入外部的一个组件,会造成系统的复杂度。

于是,这个“全局说了算”的角色为何不让 nodeA、nodeB、nodeC 其中的一个节点来做呢?

这就是 【Leader】角色的由来,让【Leader】承担起 “写” 的职责,上面 x=5 or x=9 的问题就自然不存在了。

参考答案

A

http://www.dtcms.com/a/107570.html

相关文章:

  • 元素定位-cssSelector
  • SSM框架学习(Day-1)
  • Kubernetes 入门篇之 Node 安装与部署
  • 视频分析设备平台EasyCVR视频结构化AI智能分析:筑牢校园阳光考场远程监控网
  • 基于 Cesium.js 的交互式绘图工具库
  • IO 端口与 IO 内存
  • 电流与电压的守护者
  • 3. 矩阵置零
  • Vue + Axios + Mock.js 全链路实操:从封装到数据模拟的深度解析
  • 两种方法证明r(A+B)<=r(A,B)<=r(A)+r(B)
  • 【一起来学kubernetes】33、Hpa使用详解
  • 常见操作系统特点及区别对比
  • 双翌闪耀2025上海机器视觉展,以创新技术赋能产业未来
  • C++中的继承
  • P2782 友好城市
  • 私有云(三)双节点部署openstack
  • 自学-C语言-基础-数组、函数、指针、结构体和共同体、文件
  • 111.在 Vue 3 中使用 OpenLayers 实现动态曲线流动图(类似 ECharts 迁徙状态)
  • 从代码学习深度学习 - 残差网络(ResNet)PyTorch版
  • MSVC编译遇到C2059、C2143、C2059、C2365、C2059等错误的解决方案
  • 打开pycharm显示编制索引后卡死
  • C++软件开发架构
  • llm-universe 踩坑记录
  • 数值与字典解决方案第二十五讲:数组的合并拆分及筛选
  • GNSS信号模拟器、导航信号模拟器、导航模拟信号源介绍
  • 如何解决 PyQt5 中的 `xcb` 插件加载错误
  • vue修饰符
  • ns-3使用animation出现文件小、无时间、打开后只有拓扑没有内容
  • 《静默与轰鸣的对决》
  • 什么是向量搜索Vector Search?