基于 paxos 的复制键值存储的领导者选举

2024-01-12

我将使用多个 Paxos 实现一个键值存储。我会有几个节点,其中一个是主节点。该主节点接收更新请求并将值复制到从节点。

我的问题是如何选择主节点(或领导者)?我还可以使用Paxos算法吗?如果是这样,您认为有必要将paxos实现抽象为一个单元,不仅可以供复制单元使用,还可以供领导者选举单元使用吗?

如果我使用 id 最小的节点作为领导者?我如何实施主租约?

感谢您的任何答复。


在讨论实际问题之前,我建议,对于类似paxos的系统,你不要将其视为主从关系,而是平等的对等关系。 Basic Paxos 甚至没有领导者的概念。 Multi-paxos 附加一个领导者作为性能优化,选举该领导者是协议的一部分。

Multi-Paxos 归结为下面的 Paxos:有一个准备阶段和一个接受阶段。 Multi-Paxos 的见解是,一旦一个节点赢得了接受轮,它就同时赢得了领导者选举,之后该领导者就不需要准备阶段,直到它检测到另一个节点已接管领导权。


现在一些实用的建议。我在多个 paxos、multi-paxos 和其他共识系统方面拥有多年的工作经验。

我首先建议not实现 Paxos 或 Multi-paxos。优化 Paxos 系统的性能同时保持其正确性非常困难,尤其是当您遇到这些类型的问题时。我会改为研究实现 Raft 协议.

就这两种协议而言,Raft 协议比 Multi-Paxos 具有更好的吞吐量。 Raft 作者(和其他人)认为 Raft 更容易理解和实现。

您还可以考虑使用开源 Raft 系统之一。我没有任何使用它们的经验来告诉你维护起来有多么容易。不过,我听说过维护 Zookeeper 实例的痛苦。 (我也听到过对 Zookeeper 正确性证明的抱怨。)

接下来,已经证明每个共识协议都可以永远循环。在您的系统中构建超时机制,并在适当的情况下进行随机退避。这就是实际工程师解决理论上不可能的问题的方法。

最后,检查您的吞吐量需求。如果您的吞吐量足够高,您将需要弄清楚如何跨多个共识集群进行分区。那是一个完整的“另一个蜡球”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于 paxos 的复制键值存储的领导者选举 的相关文章

  • 深入浅出paxos

    原文 https rebootcat com 2020 12 05 paxos
  • 微信分布式数据存储协议对比——Paxos和Quorum

    微信分布式数据存储协议对比 Paxos和Quorum 2017 4 19 1 36 00 作者丨莫晓东 责编丨仲培艺 分布式系统是网络化的计算机系统 海量数据的互联网应用只能通过分布式系统协调大量计算机来支撑 微信后台存储大量使用了分布式数
  • ZooKeeper之(六)应用实例

    6 1 Java API 客户端要连接 Zookeeper服务器可以通过创建 org apache zookeeper ZooKeeper 的一个实例对象 然后调用这个类提供的接口来和服务器交互 ZooKeeper 主要是用来维护和监控一个
  • 基于zookeeper的MySQL主主负载均衡的简单实现

    基于zookeeper的MySQL主主负载均衡的简单实现 1 先上原理图 2 说明 两个mysql采用主主同步的方式进行部署 在安装mysql的服务器上安装客户端 目前是这么做 以后想在zookeeper扩展集成 客户端实时监控mysql应
  • Cassandra - 合理的最大表数是多少?

    我是卡桑德拉的新手 据我了解 每个键空间可以存储的最大表数是 Integer Max Value 然而 如此大量的表从性能角度 速度 存储等 来看有何影响 对此有什么建议吗 虽然 Cassandra 中有大量表的合法用例 但这种情况很少见
  • 运行多个工作守护进程 SLURM

    我想在一台机器上运行多个工作守护进程 按照达米安弗朗索瓦的回答关于slurm 集群的最少计算机数量是多少可以办到 问题是目前我只能在一台机器上执行 1 个工作守护进程 例如 当我跑步时 sudo slurmd N linux1 cDvv s
  • Java:正确关闭多线程服务器的套接字

    我正在尝试创建一个多线程服务器 多个客户端可以连接并提供服务 但是 我不确定在需要时如何正确释放我的资源 我的服务器运行一个输入线程 等待用户输入 和一个处理线程 处理连接和用户 我在服务器类中打开一个 ServerSocket 并将其传递
  • redis分布式锁解决什么问题?

    所以我刚刚读到了有关 redlock 的内容 我的理解是它需要3台独立的机器才能工作 所谓独立 意味着所有机器都是主机 它们之间没有复制 这意味着它们服务于不同类型的数据 那么为什么我需要锁定三个独立的 Redis 实例 作为主实例 中存在
  • 允许在一跳中完全绑定任何 6 元组模式的最小索引集是什么?

    我正在尝试在wiredtiger 之上构建一个六元组商店 元组可以描述如下 graph subject predicate object alive transaction 数据库中存储的每个元组都是唯一的 查询与常规 SPARQL 查询类
  • 写入大量、复制、大于内存的键值存储

    我正在寻找可以从 EC2 实例使用的键值存储 item 只是一个非结构化字符串 不需要索引 项目大小可达约 5MB 但通常低于 10kB 很多写入 读取不需要很快 可以把memcache放在前面 缓存经常需要的读取 数据太大 无法装入内存
  • 我可以使用什么库来进行简单、轻量级的消息传递?

    我将启动一个需要分布式节点之间通信的项目 该项目是用 C 编写的 我需要一个轻量级消息传递库来在节点之间传递非常简单的消息 基本上只是文本字符串 图书馆必须具备以下特点 无需外部设置 我需要能够在我的代码中启动并运行所有内容 我不想要求用户
  • Amazon S3架构[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • PHP 会话很难跨分布式系统扩展吗?

    在工作中 我们几乎用 Java 和 Perl 完成所有工作 但我想使用 PHP 和会话构建一个功能 有些人认为尝试在我们的系统上进行 PHP 会话是一个坏主意 因为它分布到许多服务器 具体问题会是什么 您还可以使用自定义会话保存处理程序 h
  • 如何使用消息代理和数据库设计分布式应用程序?

    我想实现一个分布式销售点系统 有点像中描述的系统销售点应用程序架构建议 https stackoverflow com questions 2454629 point of sale app architecture advice 它是一个
  • paxos 与 raft 进行领导者选举

    读完paxos和raft paper后 我有以下困惑 paxos论文仅描述了单个日志条目的共识 相当于raft算法中的领导者选举部分 在raft的leader选举中 paxos的方式相对于简单的随机超时方式有什么优势呢 一个常见的误解是原始
  • 首次启动时无法识别 iCloud 键值存储

    我的应用程序使用 iCloud 键值存储 在多个设备之间同步唯一 ID 在应用程序首次启动时 如果它确实必须工作 那么就可以接受 看起来设备在首次启动时还不熟悉 iCloud 的值 只有在应用程序安装并运行一段时间后才熟悉 我在应用程序主视
  • 为什么Hadoop文件系统不支持随机I/O?

    分布式文件系统 例如 Google 文件系统和 Hadoop 不支持随机 I O 不能修改之前写入的文件 只能写入和追加 他们为什么要这样设计文件系统 该设计有哪些重要优点 P S 我知道 Hadoop 将支持修改写入的数据 但他们表示 它
  • 网络断开后,raft follower如何重新加入?

    我在木筏上遇到了问题 在论文 寻找一种可理解的共识算法 扩展版 中写道 要开始选举 追随者会增加其当前的 任期并过渡到候选状态 第 5 2 节 它还说 AppendEntries RPC 和 RequestVot RPC 中的接收者应为 R
  • 为什么Redis中没有有序的hashmap?

    Redis 数据类型 http redis io topics data types包括排序集 http redis io topics data types intro sorted sets以及其他用于键值存储的必要数据结构 但我想知道
  • 为什么使用 no-op 来填补 paxos 事件之间的空白是合法的?

    我正在学习Paxos算法 http research microsoft com en us um people lamport pubs paxos simple pdf http research microsoft com en us

随机推荐

  • 使用 Maven / Eclipse 停止自动构建

    我们使用 Maven 和 Eclipse 我们有一个多模块项目 相当大 Eclipse Maven 集成似乎会自行决定何时对构建依赖模块做出反应 这很痛苦 我已经打开了自动构建 但这似乎没有做出任何改变 有一些操作 例如 删除资源或启动模块
  • 奇怪的Python类型“文本”?

    我使用库 suds 与 SOAP 服务器进行通信 请求成功完成后 我收到答复 answer client invoke RetrieveBLABLAObject modelthings 这个答案是请求对象的许多不同字段的结构 每个字段都是由
  • 命令行中“程序&”是什么意思?

    我需要使用套接字开发客户端和服务器程序 我的程序应该从命令行获取端口号 我看到一个例子 上面写着 myprogram 2454 我想知道那是什么 的意思是那里 这意味着在后台启动该进程 http tldp org LDP abs html
  • 将数据发送到 Google Cloud ML 自定义预测例程时出现未知错误

    我正在尝试在 AI Platform 上编写自定义 ML 预测例程 以从客户端获取文本数据 进行一些自定义预处理 将其传递到模型中 然后运行模型 我能够成功地将这段代码打包并部署到谷歌云上 但是 每次我尝试从 node js 向它发送请求时
  • 在 CVS 中移动文件而不重置修订号

    最近我一直在源代码树中移动源文件 例如 将一堆文件放入一个公共程序集中 我一直在这样做 从 CVS 中删除文件 然后将其再次添加到新位置 问题是文件的修订号重置回 1 1 有没有一些简单的方法可以在不重置号码的情况下移动物品 我可能应该提到
  • 将 ConstraintLayout 中的所有子宽度与最宽子宽度匹配,宽度 = 换行内容

    ConstraintLayout 功能强大 但有时也很棘手 我想实现一个布局ConstraintLayout这可以很容易地实现LinearLayout 蓝色区域是父constraintLayout 红色部分是LinearLayout 我想通
  • 如何从 R 发送电子邮件

    我想从 R 发送电子邮件 这是我到目前为止所拥有的 library sendmailR from lt email protected cdn cgi l email protection to lt email protected cdn
  • 在 R 中处理非常大的数据集

    我正在处理一个非常大的数据集 我正在从 Oracle 数据库下载该数据集 数据框大约有 2100 万行和 15 列 我的操作系统是 windows xp 32 位 我有 2GB RAM 短期内我无法升级我的内存或操作系统 它正在工作 我需要
  • 根据条件向数据框中添加新行 python pandas

    需要根据条件向数据帧添加新行 当前数据框 在此数据框中有 4 列 我想做的就是检查 时间 列 检查每个夜班午夜 12 点的最接近值 并添加两个新行作为 11 59 59 和 00 00 01与最近的数据点相同的值 例如 03 01 晚的最接
  • WebSocket - 发送第二条消息后,我得到:服务器不得屏蔽它发送到客户端的任何帧

    我成功收到第一条消息 但第二条 相同的消息 我收到错误 服务器不得屏蔽发送给客户端的任何帧 它只有一个客户 private void RunWebSocketListener int websocket port 8996 TcpListe
  • IntelliJ IDEA - Android JDK 不起作用

    我刚刚安装了 IntelliJ IDEA 10 0 0 2 社区版我已经安装了 Android SDK C Program Files Android android sdk windows 我想创建一个新的android项目 所以我创建一
  • WPF 在 XAML 继承类中使用 override 属性

    我有一个小问题 找不到任何解决方案 也许这是 Visual Studio 中的问题 我创建了一个从 Image 继承的新类 然后我重写 Source 属性 class GifImage Image public new ImageSourc
  • 更新属性文件中的属性值而不删除其他值[重复]

    这个问题在这里已经有答案了 内容First properties name elango country india phone 12345 我要变化country from india to america 这是我的代码 import j
  • 如何真正理解 robocopy 返回码 2

    我正在努力解决如何处理有时会返回 2 的部署脚本robocopy 命令和输出如下 它返回 2 这意味着 额外文件 总体而言 这似乎是成功的 我应该接受 2 作为成功吗 ROBOCOPY Robust File Copy for Window
  • MySQL DELETE 查询的解释

    有没有办法解释DELETE使用 MySQL 进行查询 就像我们可以解释的那样SELECT query 从 MySQL 5 6 3 开始 EXPLAIN 提供有关 SELECT DELETE INSERT REPLACE 和 UPDATE 语
  • UINavigationBar 的自定义高度或 UINavigationBar 的替代方案

    我有一个带有导航栏的 viewController 我想增加导航栏的高度 但我不能 我已经搜索过增加导航栏的高度 但没有取得任何成功 是否有任何增加导航栏或任何其他库 替代方案的高度 不允许直接更改 It is not permissibl
  • Android Widget 位图尺寸

    Hallo 我正在编写一个小部件 但不确定使用什么大小的位图作为每个屏幕分辨率 密度的背景 根据Android 开发者应用程序小部件 http developer android com guide topics appwidgets in
  • 如何配置系统以使用 FIWARE yum 存储库?

    我知道 FI WARE 提供了一个公共 yum 存储库 位于http repositories testbed fiware org http repositories testbed fiware org 可用于安装 FI WARE 软件
  • ImportError:无法从“collections”导入名称“MutableMapping”(/usr/local/lib/python3.10/collections/__init__.py)

    我正在 vs code 中运行这个简单的 Flask 应用程序 将其 Docker 化并加载到 ECS 任务正在退出并出现以下错误 ImportError 无法从 集合 usr local lib python3 10 collection
  • 基于 paxos 的复制键值存储的领导者选举

    我将使用多个 Paxos 实现一个键值存储 我会有几个节点 其中一个是主节点 该主节点接收更新请求并将值复制到从节点 我的问题是如何选择主节点 或领导者 我还可以使用Paxos算法吗 如果是这样 您认为有必要将paxos实现抽象为一个单元