为什么 Raft 原生系统是流数据的未来

news2024/11/25 1:22:50

虽然Apache Kafka正在逐步引入KRaft以简化其一致性方法,但基于Raft构建的系统对于未来的超大规模工作负载显示出更多的潜力。

​共识是一致性分布式系统的基础。为了在不可避免的崩溃事件中保证系统的可用性,系统需要一种方式来确保集群中的每个节点保持一致,以便在发生故障时工作可以无缝地在节点之间转移。共识协议(如Paxos、Raft和View Stamped Replication(VSR))通过提供领导者选举、原子配置更改、同步等过程的逻辑,帮助推动分布式系统的弹性。

与所有设计元素一样,分布式共识的不同方法提供了不同的权衡。Paxos是最古老的共识协议,被用于许多系统,如Google Cloud Spanner、Apache Cassandra、Amazon DynamoDB和Neo4j。Paxos通过三阶段、无领导者、多数胜出的协议实现共识。尽管Paxos在确保正确性方面非常有效,但它非常难以理解、实现和推理。这部分是因为它隐藏了许多达成共识的挑战(如领导者选举、重新配置),使得将其分解为子问题变得困难。

Raft(可靠、复制、冗余和容错)可以被看作是Paxos的一种演进,专注于可理解性。Raft可以实现与Paxos相同的正确性,但在现实世界中更容易理解和实现,因此通常可以提供更高的可靠性保证。例如,Raft使用一种稳定的领导形式,简化了复制日志管理,其领导者选举过程更高效。

由于Raft将共识问题的不同逻辑组件进行了分解,例如通过在复制之前将领导者选举作为一个独立的步骤,它是一种灵活的协议,适用于需要在保持正确性和性能的同时扩展到PB级吞吐量的复杂、现代分布式系统,同时对于新的工程师来说,理解起来更简单。 基于这些原因,Raft已经迅速被采用于当今的分布式和云原生系统,如MongoDB、CockroachDB、TiDB和Redpanda,以实现更高的性能和事务效率。

Redpanda是如何实现Raft的

当Redpanda的创始人Alex Gallego确定世界需要一个新的流数据平台来支持那些可能导致Apache Kafka崩溃的GBps+工作负载时,他决定从头开始重写Kafka。成为Redpanda的要求是:1)它需要简单轻量,以减少在大规模可靠运行Kafka集群时的复杂性和低效性;2)它需要最大化现代硬件的性能,以提供大型工作负载的低延迟;3)它需要保证即使在非常大的吞吐量下也能确保数据的安全性。实现Raft为这三个要求提供了坚实的基础:

  1. 简单性。每个Redpanda分区都是一个Raft组,因此平台中的所有内容都是围绕Raft进行推理,包括元数据管理和分区复制。这与Kafka的复杂性形成对比,Kafka中的数据复制由ISR(同步副本)处理,元数据管理由ZooKeeper(或KRaft)处理,这两个系统必须相互推理。

  2. 性能。Redpanda的Raft实现可以容忍少数副本的干扰,只要领导者和大多数副本是稳定的。在少数副本响应延迟的情况下,领导者不必等待它们的响应才能继续进行,从而减少对延迟的影响。因此,Redpanda具有更强的容错性,并且可以在大规模上提供可预测的性能。

  3. 可靠性。当Redpanda接收事件时,它们被写入一个主题分区并追加到磁盘上的日志文件中。然后,每个主题分区形成一个Raft共识组,由一个领导者和若干个跟随者组成,由主题的复制因子指定。在给定2ƒ+1个节点的情况下,Redpanda的Raft组可以容忍ƒ个故障;例如,在一个具有五个节点和复制因子为五的主题的集群中,可以有两个节点失败,主题仍然可以正常运行。Redpanda利用Raft联合共识协议,在重新配置期间提供一致性。

为了实现现代云原生解决方案所需的可扩展性、可靠性和速度,Redpanda还在一些关键方面扩展了核心Raft功能。它在Raft的基础上进行了创新,包括选举过程、心跳生成以及对Apache Kafka ACKS的支持。这些创新确保在所有场景下实现最佳性能,这使得Redpanda比Kafka快得多,同时仍然保证数据的安全性。事实上,Jepsen测试验证了Redpanda是一个没有已知一致性问题的安全系统,并且具有坚实的基于Raft的共识层。

关于KRaft

虽然Redpanda采用了原生的Raft方法,但传统的流数据平台在采用现代共识方法方面一直落后。Kafka本身是一个复制的分布式日志,但在历史上它依赖于另一个复制的分布式日志——Apache ZooKeeper来进行元数据管理和控制器选举。这存在一些问题的原因如下:

  1. 管理多个系统增加了管理负担;
  2. 由于元数据处理和双重缓存的低效性,可扩展性受到限制;
  3. 集群可能变得非常臃肿和资源密集;

事实上,看到ZooKeeper和Kafka节点数量相等的集群并不罕见。这些限制并没有被Apache Kafka的贡献者和维护者忽视,他们正在用自我管理的元数据仲裁系统Kafka Raft(KRaft)替换ZooKeeper。这种基于事件的Raft变体减少了Kafka元数据管理的管理挑战,并且这是Kafka生态系统朝着现代共识和可靠性方法发展的一个有希望的迹象。不幸的是,KRaft并没有解决在Kafka集群中存在两个不同的共识系统的问题。在新的KRaft范式中,KRaft分区处理元数据和集群管理,但复制由代理处理,因此仍然存在这两个不同的平台和由此产生的复杂性的低效性。

将Raft与性能工程相结合

正如CockroachDB、MongoDB、Neo4j和TiDB等数据行业的领导者所展示的那样,基于Raft的系统提供了更简单、更快速、更可靠的分布式数据环境。Raft正在成为当今分布式数据系统的标准共识协议,因为它与性能工程结合得非常好,进一步提高了数据处理的吞吐量。例如,Redpanda将Raft与高速架构组件结合起来,在处理1GBps的工作负载时,至少比Kafka快10倍的尾部延迟(p99.99),并且只使用三分之一的硬件,而不会影响数据的安全性。传统上,GBps+的工作负载对于Apache Kafka来说是一个负担,但Redpanda可以以两位数毫秒级的延迟支持它们,同时保持经过Jepsen验证的可靠性。这是如何实现的呢?Redpanda是用C++编写的,并使用每核心一个线程的架构,以充分发挥现代芯片和网络卡的最大性能。这些元素共同作用,提升了Raft在分布式流数据平台中的价值。例如,因为Redpanda绕过了Kafka的页面缓存和Java虚拟机(JVM)依赖,它可以将硬件级别的知识嵌入到其Raft实现中。通常,每次在Raft中进行写操作时,都需要进行刷新以确保写入磁盘的持久性。在Redpanda对Raft的乐观方法中,较小的间断性刷新被放弃,而在调用结束时进行较大的刷新。虽然这会在每次调用中引入一些额外的延迟,但它减少了整体系统的延迟并增加了整体吞吐量,因为它减少了刷新操作的总数。虽然在分布式系统中确保一致性和安全性有许多有效的方法(区块链通过工作量证明和权益证明协议非常出色地完成了这一点),但Raft是一种经过验证的方法,并且足够灵活,可以像Redpanda一样进行增强,以适应新的挑战。随着我们进入一个由部分由人工智能和机器学习用例驱动的数据驱动的可能性的新世界,未来掌握在能够利用实时数据流的开发人员手中。 基于Raft的系统,结合C++和每核心一个线程的架构等性能工程元素,正在推动关键任务应用的数据流未来。

作者:Doug Flora

更多技术干货请关注公众号“云原生数据库

squids.cn,目前可体验全网zui低价RDS,免费的迁移工具DBMotion、SQL开发工具等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/795916.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

快速跑 nerf instant-ngp 快速调试与配置,跑自己的数据

1.下载Anaconda3 2.打开Anaconda Prompt (Anaconda) 创建虚拟环境 conda create -n nerf-ngp python3.8切换到虚拟环境 conda activate nerf-ngp安装相关依赖包 pip install commentjson imageio numpy opencv-python-headless pybind11 pyquaternion scipy tqdm安装完毕后…

现在设计师都在用哪些工具做UI设计

随着国内企业在用户交互方面的竞争,UI设计的未来是无限的。 如果你仍然或只是在寻找一个合适的UI设计工具,那么这篇文章应该非常适合你。 1.即时设计 即时设计是一款免费的在线 UI 设计工具,无系统限制,浏览器打开即可使用&…

Java面试准备篇:全面了解面试流程与常见问题

文章目录 1.1 Java面试概述1.2 面试流程和注意事项1.3 自我介绍及项目介绍1.4 常见面试问题 在现代职场中,面试是求职过程中至关重要的一环,特别是对于Java开发者而言。为了帮助广大Java开发者更好地应对面试,本文将提供一份全面的Java面试准…

Python中安装pyinstaller并打包为exe可执行程序

环境:vs2022 win10 python3.7.8 工具:pyinstaller 1、安装pyinstaller,cmd --> pip install pyinstaller 2、安装完成后,打开cmd,输入命令:pyinstaller -F xxx.py ,xxx为py文件的全路径&am…

超细整理,Python接口自动化测试-关联参数(购物接口实例)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 什么是参数关联&a…

Hadoop生态体系-2

目录标题 1、MapReduce介绍2、数据仓库3、HIVE4、HQL4.1 hive读写文件机制4.2 Hive数据存储路径 1、MapReduce介绍 思想:分而治之 map:“分”,即把复杂的任务分解为若干个“简单的任务”来处理。可以进行拆分的前提是这些小任务可以并行计算&#xff0c…

3D 渲染技巧-如何创建高质量写实渲染?

掌握创建高质量建筑渲染和任何 3D 渲染的艺术是一项复杂且需要技巧的工作,通常需要多年的经验和实践。实现逼真的结果需要仔细考虑众多因素,并避免可能导致缺乏真实性的假渲染效果的常见错误。 避免常见错误 - 提升渲染游戏的技巧 在追求创建真正逼真的…

数据中心机房机柜配电新模式的探讨与选型

安科瑞 华楠 摘 要:对数据中心机房列头柜配电方式特征和问题进行深入研究,分析机房末端配电安全性及可用性,主要阐述了数据中心机房机柜配电新模式。 关键词:数据中心;机房机柜;配电模式 1 原始配电方案 …

Pycharm中如何设置在新窗口打开项目

settingAppearance&Behavior–System SettingsOpen project in - new window

抑郁症的自我治疗:警惕隐藏在微笑背后的抑郁症

抑郁症是一种常见的心理疾病,它可以隐藏在微笑背后。许多人经常感到沮丧、情绪低落,这时候可能是抑郁症的前兆。然而,自我治疗也是一种非常有效的抑郁症治疗方法。在本文中,我将分享一些关于如何自我治疗抑郁症的方法。 首先&…

递归对比对象函数

在JavaScript中,对象之间的比较通常通过引用进行。当你使用运算符比较两个对象时,它会检查它们是否引用了同一个内存地址,而不是逐个比较对象的属性。 上图可见,obj1和{}是两个不同的对象,尽管它们具有相同的结构&…

运算方法与运算器

一、定点数运算及溢出检测 1. 定点数加法运算 2. 定点数减法运算 3. 数溢出的概念及其判断方法 运算结果超出了某种数据类型的表示范围 (1)溢出的概念 (2)溢出的检测方法 溢出只可能发生在同符号数相加 方法1:对操…

Photo Director Ultra 14.7相片大师AI照片编辑中文软件

今天给大家分享的是Photo Director Ultra 14.7相片大师AI照片编辑中文软件。CyberLink PhotoDirector Ultra是一款功能强大的照片编辑软件,它集照片编辑、组织管理和分享于一体。 #资源介绍 Photo Director Ultra 14.7通过智能对象消除、色彩调整、照片滤镜等多种工具实现照片…

【C++】开源:crowcpp微型web框架配置使用

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍crowcpp微型web框架配置使用。 无专精则不能成,无涉猎则不能通。。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下&#…

二值信号量

Q: 什么是信号量? A: 信号量(Semaphore),是在多任务环境下使用的一种机制,是可以用来保证两个或多个关键代码段不被并发调用。 信号量这个名字,我们可以把它拆分来看,“信号”可以起到通知信号…

CSDN原理等级的提升方法

文章目录 原力增长是一种积分型的社交平台,它有多个可以增长用户积分的渠道,也可以升级发付费资源,以下是几个主要的渠道:1.原创文章:2.回答问题:3.发动态:4.浏览文章:5.翻译文章&am…

回归预测 | MATLAB实现SO-CNN-BiLSTM蛇群算法优化卷积双向长短期记忆神经网络多输入单输出回归预测

回归预测 | MATLAB实现SO-CNN-BiLSTM蛇群算法优化卷积双向长短期记忆神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现SO-CNN-BiLSTM蛇群算法优化卷积双向长短期记忆神经网络多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 Matlab实…

8-Linux进程管理

Linux的进程管理 基本介绍显示系统执行的进程ps 指令基本介绍 终止进程kill和killall基本语法 查看进程树 pstree服务 service 管理service介绍service管理指令chkconfig 指令 systemctl 管理指令基本指令systemctl 设置服务的自启动状态示例打开或者关闭指定端口 动态监控进程…

[CrackMe]Brad Soblesky.1.exe和Brad Soblesky.2.exe的逆向及注册机编写

1. CrackMe小程序Brad Soblesky.1.exe分析 首先尝试程序功能, 发现其会弹出一个对话框, 上面有字符串, 可以通过直接定位MessageBox的位置, 但这里使用搜索字符串的方法: 查找所有字符串: 追踪到后, 就可以发现一个非常清晰的结构: 发现是明文, 立马就可以找到对应的密钥 2. Cr…

解决了项目中几个比较搞心态的bug(前端vue、小程序)

1、keep-alive 正常keep-alive的使用便可以做项目的缓存,但是我们的项目很不正常 项目是属于动态缓存,动态缓存有一个弊端 举个栗子: a组件为设置了需要缓存的页面; b组件为设置了需要缓存的页面; c组件为设置了不需…