Kiwi Rust 与 kiwi-cpp 实现对比:可复用经验、已建 Issue 与后续优先级 #411
AlexStocks
started this conversation in
Ideas
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
背景与范围
Kiwi 是 kiwi-cpp 的 Rust 演进版本,但两者目前已经不是简单的逐文件翻译关系。Rust Kiwi 选择了 Tokio、OpenRaft、Tonic 和权威 RocksDB 数据集,并把 Redis 8.8.1 精确兼容、崩溃恢复和系统稳定性作为当前主线;kiwi-cpp 则保留了长期运行中积累的 braft/brpc/RocksDB 实现与故障记录。
本轮对比固定在以下快照:
main@3164d4a0fead580ac6701fb0595e50193c4edff9unstable@0fa4f1b95ff2f89873d06eb86de40532dd91d146目标不是把 C++ 实现机械移植到 Rust,而是把 kiwi-cpp 的实现经验和失败历史映射到 Kiwi 当前架构,区分:
.planning/KANBAN.md覆盖的事项;实现对比
JoinHandle和失败传播还没有形成统一生命周期HELLO和 compatibility manifest/Oracle 规划ShutDown/Join/Clear,但仍存在优雅关闭、重启回群和崩溃问题INFOINFO仍返回版本、OS、PID、端口、uptime、cluster mode 等硬编码值本轮已经拆出的可执行 Issue
#408:建立 RESP、Raft、storage 的有界优雅关闭生命周期
kiwi-cpp 已有显式停止链,但 #69 和 #77 说明“收到退出信号”不等于具备可靠的集群关闭和恢复合同。Rust Kiwi 当前生产入口收到 Ctrl+C 后主要依赖
RuntimeManager::stop()和 runtime drop/timeout,RESP、Raft gRPC、append-log drain、OpenRaft、StorageServer 等任务没有统一 owner 与 join 顺序,Linux SIGTERM 也没有进入同一关闭链。#408 建议固定以下合同:停止 admission → 在共享 deadline 内 drain 已接收请求 → 停止 Raft/gRPC → 停止 storage/background task → 最后关闭 runtime;同时用 standalone 和三节点 leader/follower 进程级重启验证资源释放、membership 恢复和已确认数据。
#410:删除 INFO 硬编码假数据并接入真实 runtime、storage 与 Raft 状态
当前
INFO会报告固定的redis_version:7.0.0、os:Windows、PID 1、端口 7379、uptime 1、standalone/cluster disabled 等值,即使实际平台、监听端口或 Raft 模式不同。监控和客户端会把这些字段当作服务事实,因此应优先删除假状态,而不是继续扩充静态模板。#410 建议通过有界只读 provider 生成一次一致状态快照,并使用 exact Redis 8.8.1 Oracle 固定 section、默认集合、未知 section、字段格式以及 RESP2/RESP3 行为;暂时没有真实来源的字段应按兼容合同输出真实零值、明确 unavailable 或省略,不能伪造。
kiwi-cpp Issue 与 Kiwi 现有规划的映射
以下事项有价值,但目前不需要再创建重复 Issue:
.planning/KANBAN.mdM3-002:Transaction、WATCH、Lua 与错误/TTL 语义M3-003:阻塞命令与连接行为M5-001、M5-002M10-001:单 Group 瓶颈证据与 Multi-Raft 立项评估建议的优先级
P1:先完成生产正确性和可诊断性
下一阶段:补齐客户端行为和系统级验证
M3-002、M3-003推进事务、阻塞命令、连接取消和 leader 切换语义;M5-001、M5-002建立 3/5 节点 process harness、网络/磁盘故障矩阵和 Elle/Jepsen history;后续评估,不提前承诺实现
建议长期采用的对比原则
希望维护者确认的问题
server、clients、stats、persistence、replication/cluster、keyspace最小集合,再逐步扩充其余 section?以上结论只适用于文首固定 SHA;相关入口、规划或 Issue 状态变化后,需要重新对账。
All reactions