内容提要
文章以Kahuna为例回应“.NET缺少Raft”的争论。Kahuna是分布式协调服务,底层为同一作者开发的分区化Raft库Kommander和Actor运行时Nixie,支持Multi-Raft、Percolator事务、MVCC和脚本DSL,并可编译到浏览器WASM。作者认为.NET的Raft包虽多,但成熟者仅DotNext和Kommander,真正缺少的是经生产验证的共识底座。
延伸解读
从库到服务:.NET 共识生态的缺失环节
文章指出,.NET 并不缺 Raft 库,NuGet 上有 65~71 个相关包,但绝大多数是个人实验品。真正同时具备持久化 WAL、快照、动态成员、持续维护和对抗性验证五要素的,只有 DotNext 和 Kommander 两家。与 Java 的 Apache Ratis、SOFAJRaft、Atomix 以及 Go 的 hashicorp/raft、etcd、dragonboat 相比,.NET 缺的不是库,而是被顶级基础设施反复使用、踩过坑的共识底座,以及围绕底座长出来的成品服务。Kahuna 正是朝这个方向
Jepsen 验证:比 star 数更硬的成熟度指标
文章强调,判断共识实现是否成熟,金标准不是 star 数,而是 Jepsen 测试。Kahuna 配有一整套 Jepsen 测试,独立仓库维护,覆盖 register、lock、append、sequencer、snapshot 五种负载,故障注入包括网络分区、杀进程、进程暂停和成员变更。更难得的是公开的 FINDINGS.md 诚实列出未修复的 bug。这种对抗性验证和透明态度,比营销稿或 star 数更有说服力,也是 Java 和 Go 成熟组件当年走过的路。
技术亮点:Multi-Raft、Percolator 事务与 WASM 支持
Kahuna 底层 Kommander 采用 Multi-Raft 分区架构,数据分片后每个分区独立 Raft group,节点可同时担任不同分区的 Leader 和 Follower,Leader 自动均衡,存储层可选 RocksDB 或 SQLite。事务上实现 Percolator 风格的两阶段提交,叠加 MVCC 快照隔离,支持乐观和悲观并发模式。此外,整个 Core 同时编译 net10.0 和 net10.0-browser,能以 thread-free 模式跑在浏览器 WASM 里,这在其他语言的 R
Q&A
Kahuna 是什么?它和 Raft 库有什么关系?
Kahuna 是一个开箱即用的分布式协调服务,提供分布式锁、强一致 KV 和幂等序列号,对标 etcd 和 ZooKeeper。它底层依赖 Kommander(分区化 Raft 共识库)和 Nixie(Actor 运行时),因此 Kahuna 本身不是 Raft 库,而是基于 Raft 构建的成品服务。
.NET 生态中真正成熟的 Raft 实现有哪些?
根据文章,虽然 NuGet 上有 65~71 个 Raft 相关包,但绝大多数是个人实验品。真正同时具备持久化 WAL、快照、动态成员、持续维护和对抗性验证五要素的,只有 DotNext 和 Kommander 两家。
Kahuna 在技术上有哪些亮点?
Kahuna 采用 Multi-Raft 分区架构,每个分区独立 Raft group,支持 Leader 自动均衡;事务基于 Percolator 风格的两阶段提交和 MVCC 快照隔离,提供乐观和悲观并发模式;自带脚本 DSL,可注册 C# 自定义函数;整个 Core 可编译到 net10.0 和 net10.0-browser,能以 thread-free 模式运行在浏览器 WASM 中。
如何验证 Kahuna 的共识实现是否成熟?
文章指出判断共识实现成熟度的金标准是 Jepsen 测试。Kahuna 配有一整套 Jepsen 测试,独立仓库维护,包含五个负载(register、lock、append、sequencer、snapshot),故障注入覆盖网络分区、杀进程、进程暂停和成员变更,并公开了 FINDINGS.md 诚实记录未修复的 bug。
.NET 生态在 Raft 方面与 Java/Go 的主要差距是什么?
文章认为 .NET 缺的不是 Raft 库,而是一个被顶级基础设施反复使用、踩过坑的共识底座,以及围绕底座长出来的成品服务。Java 有 Apache Ratis、SOFAJRaft、Atomix;Go 有 hashicorp/raft(支撑 Consul 和 Nomad)、etcd 和 dragonboat,这些经过多年生产锤炼。
Kahuna 项目由谁开发?开发背景如何?
Kahuna 由 Phalcon 框架的作者 Andrés Gutiérrez 开发,全部采用 MIT 协议。他为了做一个 .NET 版 etcd,先自己造了 Actor 框架 Nixie 和 Raft 库 Kommander。项目于 2025 年 2 月启动,至今已有 900 多个 commit,几乎每天都有提交。