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

译文
开发 前端
Apache Kafka正逐渐引入Kraft以简化一致性方法,基于Raft而建的系统则给明天的超大规模工作负载带来了希望。

译者 | 布加迪

审校 | 重楼

共识是一致分布式系统的基础。为了在不可避免的崩溃事件中保证系统可用性,系统需要一种方法来确保集群中的每个节点保持一致,以便在发生故障的情况下,工作可以在节点之间无缝切换PaxosRaftView Stamped ReplicationVSR共识协议通过为领导者选举(leader election)、原子配置更改同步等流程提供逻辑,帮助提高分布式系统的弹性。

与所有设计素一样,不同的分布式共识方法具有不同的利弊Paxos是最古老的共识协议,被用于许多系统,比如Google Cloud SpannerApache CassandraAmazon DynamoDBNeo4jPaxos通过三个阶段、无领导者、多数获胜的协议达成共识。虽然Paxos力求正确性方面有效,理解、实施和推理起来困难重重。这一方面是由于它掩盖了达成共识方面的许多挑战(比如领导者选举和重新配置,使其难以分解子问题。

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

图1图1

由于Raft分解了共识问题的不同逻辑组件,比如通过使领导者选举成为复制之前一个不同步骤,因此它是一灵活的协议,可以适应复杂的现代分布式系统,这系统需要在扩展到PB级吞吐量的同时保持正确性和性能,对于处理代码库的新工程师来说更容易理解。

由于这些原因,Raft已被迅速用于今天的分布式云原生系统,比如MongoDBCockroachDBTiDBRedpanda,以实现更高的性能和事务效率。

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共识组,由领导者许多追随者组成,由主题的复制因子指定。如果有2f +1个节点Redpanda Raft组可以容忍f次故障;比如在有五个节点的集群和复制因子为5的主题中,两个节点可能失效,而主题将保持运行。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分区处理元数据和集群管理,但复制由代理处理,因此您仍然有这两个不同的平台以及固有的复杂性引起的低效率。

图2图2

结合Raft与性能工程

正如CockroachDB、MongoDB、Neo4j和TiDB数据行业领导者所展示的那样,基于Raft的系统提供了一种更简单、更快速和更可靠的分布式数据环境。Raft正成为当今分布式数据系统的标准共识协议,因为它与性能工程结合得特别好,可以进一步提高数据处理的吞吐量。

比如说,Redpanda将Raft与快速架构要素结合在一起,在处理1GBps的工作负载时,在尾部延迟p99.99上比Kafka快至少10倍,仅需三分之一的硬件,而不影响数据安全。传统上,GBps+的工作负载对Apache Kafka来说历来是一负担,但Redpanda可以以两位数的毫秒延迟支持它们,同时保留Jepsen验证的可靠性。

是如何实现的呢?RedpandaC++编写,使用每核线程架构来最大限度地发挥现代芯片和网卡的性能。这些素共同提升了Raft对于分布式流数据平台的价值。

图3图3

比如说由于Redpanda绕过了Kafka的页面缓存和Java虚拟机JVM依赖,它可以将硬件级知识嵌入到Raft实现中。每次在Raft中写入数据时,通常都必须刷新,以保证磁盘上写入内容的持久性。在Redpanda乐观的Raft方法中,较小的间歇刷新被丢弃,改为调用结束时进行较大的刷新。虽然这在每次调用引入了一些额外的延迟,但减少了总体系统延迟并增加了总体吞吐量,因为它减少了刷新操作总数。

虽然有许多有效的方法来确保分布式系统的一致性和安全性区块链工作量证明和权益证明协议做得很好,但Raft是一种经过验证的方法,足够灵活,可以像Redpanda一样进行改进,以适应新挑战。随着我们进入一个数据驱动的新世界——这一方面受人工智能和机器学习用例驱动,未来掌握在能够利用实时数据流的开发人员手中。

Raft的系统以及C++和每核线程架构之类的性能工程素,正在推动数据流在未来的关键任务应用程序中派上大用场。

原文标题:Why Raft-native systems are the future of streaming data,作者:Doug Flora

责任编辑:华轩 来源: 51CTO
相关推荐

2020-07-03 14:05:26

Serverless云服务商

2021-11-29 18:27:12

Web Wasmjs

2016-04-28 09:29:35

ZD至顶网网络频道

2023-05-04 07:44:13

编程界小语言Java

2023-03-21 10:16:36

2019-09-26 18:30:03

2019-08-27 16:48:07

云原生云计算微服务

2023-05-17 16:37:29

2018-08-17 09:00:00

2020-04-07 18:56:41

区块链网络安全物联网

2022-10-08 06:38:01

元宇宙NFT加密货币

2023-09-26 10:33:20

数据中心游戏行业

2021-02-25 14:09:55

人工智能数据机器学习

2021-04-07 06:58:32

边缘计算计算云计算

2020-05-13 10:45:54

云计算云原生疫情

2022-03-14 08:33:09

TypeScriptJavaScript前端

2020-12-30 19:19:35

ARM架构X86架构芯片

2020-11-02 17:21:07

云计算

2022-05-20 11:41:00

数据科学编程语言Python

2023-09-25 15:24:30

数据中心
点赞
收藏

51CTO技术栈公众号