拓冰建站拓冰建站
首页 / 资讯中心 / 正文

5Draft(五帝)测试报告

5Draft五帝测试报告报告日期2026-09-05 测试版本commit7818ff1 报告人5Draft 团队项目地址https://gitee.com/galaxy_0/5d-raft.git一、测试概述1.1 测试目的验证 5Draft 预测性健康感知 Raft 的核心功能正确性覆盖趋势分析劣化检测、毛刺过滤、预测钳制消息编解码精度、脏数据降级、边界处理主动调度连续计数触发、分差门禁、乒乓抑制健康感知投票Lease 有效择优 / 失效回退HealthMonitor 真实 CPU 记账线程注册/注销、负载下降/恢复仿真集群端到端禅让闭环真实 NuRaft 集群上的主动禅让全链路真实验证无 Mock真实集群 真实 CPU 压力触发禅让1.2 测试范围层次测试程序验证目标单元测试unit_tests各模块函数级正确性仿真集成5draft_demo无网络依赖的闭环行为验证真实集成nuraft_demo真实 NuRaft 集群 混沌注入禅让全链路验证nuraft_real_test真实 CPU 压力触发禅让无 Mock1.3 测试环境项目值操作系统WSL2 Debian (kernel 6.18.33.2-microsoft-standard-WSL2)编译器g 14.2.0 (Debian 14.2.0-19)构建工具CMake 3.31.6在线逻辑核数36构建类型Release代码版本commit7818ff1二、单元测试结果程序./build/unit_tests退出码0 总用例数31 通过31 失败02.1 趋势分析模块5 项用例结果验证点Trend/持续劣化: 一阶导为负✅ PASS健康分持续下降时 H′ 0Trend/持续劣化: 预测分低于当前分✅ PASSH_pred H 4·H′ HTrend/瞬态毛刺: 恢复后预测分不过度悲观✅ PASS单周期暴跌后恢复pred 0.7Trend/瞬态毛刺: 当前分恢复✅ PASSH 恢复至 0.9Trend/钳制: 预测分落在 [0,1]✅ PASS快速上升场景 pred 被钳制2.2 消息编解码模块11 项用例结果验证点Codec/正常解码✅ PASS“0.83,-0.02,0.003” 正确解析Codec/数值一致✅ PASS全精度setprecision 15往返一致Codec/空串拒绝✅ PASS空串返回 falseCodec/脏数据拒绝✅ PASS“abc,def” 返回 falseCodec/负数 h 钳制为 0✅ PASSh -0.5 → 0.0Codec/超大 h 钳制为 1✅ PASSh 5.0 → 1.0Codec/多余数值字段取前 3 个✅ PASS“0.5,0.1,0.01,0.9” 取前 3Codec/仅 2 个字段拒绝✅ PASS“0.5,0.1” 返回 falseCodec/空格容忍✅ PASS 0.5 , 0.1 , 0.01 解析成功Codec/非数字多余字段拒绝✅ PASS“0.5,0.1,0.01,extra” 返回 falseCodec/NaN 拒绝✅ PASS“nan,0.0,0.0” 返回 falseCodec/Inf 拒绝✅ PASS“inf,0.0,0.0” 返回 false2.3 主动调度模块4 项用例结果验证点Scheduler/连续2次不触发✅ PASSconsecutive_required32 次不触发Scheduler/连续3次触发禅让给最优 Peer✅ PASS第 3 次触发 transfer_leadership(2)Scheduler/分差不足不触发禅让✅ PASSdiff0.02 threshold0.08不触发Scheduler/差值回落重置计数乒乓抑制✅ PASS差值回落后计数清零不再触发2.4 投票决策模块3 项用例结果验证点Vote/Lease 有效且候选人更差 → 拒绝✅ PASS候选人 pred Leader pred thresholdVote/Lease 有效但候选人显著更优 → 授票✅ PASSdiff0.10 0.08授票Vote/Lease 失效 → 回退标准 Raft 授票✅ PASSlease_validfalse 时直接授票2.5 HealthMonitor 模块4 项用例结果验证点HealthMonitor/RTT 200ms 评分归一化到 0✅ PASSnet 权重 1.0RTT200ms → score0 → H0.1HealthMonitor/Reset 清零导数✅ PASSReset 后 h1h20HealthMonitor/注册负载线程后 CPU 可用率真实下降✅ PASS满核施压后 CPU 0.80HealthMonitor/卸载负载后 CPU 可用率恢复✅ PASS卸载后 CPU 施压期2.6 仿真集群端到端3 项用例结果验证点SimCluster/端到端: 劣化 Leader 主动禅让✅ PASSLeader 0 → 1pred diff0.56SimCluster/端到端: 禅让给最健康节点 node1✅ PASS禅让目标为预测分最高的节点SimCluster/端到端: 禅让后任期递增✅ PASSterm 1 → 22.7 单元测试汇总 31 checks, 0 failures 三、仿真集群演示结果程序./build/5draft_demo退出码0场景 1Leader 缓慢劣化内存泄漏式输入Leader node0 健康分从 0.90 逐步下降至 0.35Follower node10.90、node20.85预期连续 3 个周期预测分显著落后 → 主动禅让实际5Draft: Leader 0 主动禅让给 1 (pred diff0.56, term1)结论✅ 成功触发预测性禅让新 Leader node1场景 2Leader 瞬态抖动单周期暴跌后恢复输入Leader 健康分单周期跌至 0.30 后立即恢复 0.90预期二阶导数识别为触底反弹H″0连续计数不累积 → 不切换结论✅ 瞬态抖动被二阶导数 连续计数抑制未发生切换场景 3RequestVote 健康感知子场景预期实际Lease 有效弱候选人挑战健康 Leader拒绝✅ 拒绝Lease 有效强候选人挑战劣化 Leader授票✅ 授票Lease 失效Leader 失联回退标准 Raft 授票✅ 授票结论✅ 全部符合预期四、真实 NuRaft 集群演示结果程序./build/nuraft_demo退出码0 端口25011~25013测试过程启动 3 个真实 NuRaft 节点组阁成功初始 Leader node1term1对 Leader node1 注入混沌劣化健康h0.35, h′-0.05, pred0.15Follower 保持真实健康心跳 meta 持续交换关键日志真实输出[INFO] 集群就绪初始 Leader node1term1 [WARN] 5Draft node 1 进入混沌演练自身健康被注入为 h0.35 h-0.05 pred0.15 [INFO] 已对 Leader node1 注入劣化健康pred≈0.15等待 5Draft 主动禅让... [INFO] 5Draft: Leader 1 主动禅让给 3 (pred diff0.723977, term1) [WARN] [NuRaft] Server is elected as leader for term 2 [INFO] 禅让成功Leader node1 → node3新 term2[PASS]验证点检查项结果真实 NuRaft 集群组阁成功✅混沌注入劣化健康后 Follower 预测分更优✅ (diff0.724)ActiveScheduler 调用 yield_leadership 禅让✅新 Leader node3 当选term 1→2三节点一致✅五、全链路真实验证结果无 Mock程序./build/nuraft_real_test退出码0 核心特点不注入任何健康数据全程真实采集5.1 验证方案真实 3 节点 NuRaft 集群基线期 3s真实采集 CPU/内存对 Leader 施加真实 CPU 压力36 线程 × 85% 占空Leader CPU 真实下滑内核记账 /proc/self/task心跳 meta 携带真实健康ActiveScheduler 判定pred diff0.82yield_leadership 主动禅让卸载压力旧 Leader CPU 真实恢复5.2 实测数据时间线阶段时刻node1 角色node1 Hnode1 H′node1 prednode1 CPU说明基线t3.00sLeader0.930.000.931.00三节点健康一致施压t0.50sFollower0.51-0.090.130.15已禅让node2 为新 Leader恢复t4.00sFollower0.930.000.931.00压力卸载后恢复施压后仅 0.5s一个采样间隔内即完成禅让远早于任何 election timeout。5.3 六项检查结果检查项通过标准实测值结果检查1集群组阁Leader 选出term1node1, term1✅ PASS检查2基线健康CPU 0.9, H 0.75CPU1.00, H0.934✅ PASS检查3施压降载CPU 0.5CPU0.153内核记账✅ PASS检查4预测下滑pred 下降 0.150.934 → 0.130✅ PASS检查5主动禅让Leader 切换term 递增node1→node2, term 1→2✅ PASS检查6卸载恢复CPU 0.9CPU1.00✅ PASS5.4 真实关键日志[INFO] 本机在线逻辑核数36将对 Leader 施加 36 线程 × 85% 占空比的真实 CPU 压力 [INFO] [检查2] 基线期 Leader 真实 CPU 可用率1、健康分 H0.933951 [PASS] [INFO] 5Draft: Leader 1 主动禅让给 2 (pred diff0.820605, term1) [INFO] [检查3] 施压后 Leader 真实 CPU 可用率最低降至 0.15305内核记账非注入 [PASS] [INFO] [检查4] Leader 真实预测健康分最低降至 0.13001基线 H0.933951 [PASS] [INFO] [检查5] 主动禅让发生node1 → node2term 1 → 2 [PASS] [INFO] [检查6] 卸载后旧 Leader 真实 CPU 可用率恢复至 1 [PASS] [INFO] 真实验证结论5/5 项检查通过整体 [PASS] 六、测试覆盖率分析6.1 模块覆盖模块单元测试仿真验证真实集群验证全链路验证TrendAnalyzer✅ 5 项✅——MessageExtension✅ 11 项✅编解码链路✅✅ActiveScheduler✅ 4 项✅✅✅VoteDecider✅ 3 项✅✅✅HealthMonitor✅ 4 项——✅真实 CPUFiveDraftNode—✅✅✅NuraftNode——✅✅IRaftServer 适配—✅✅✅6.2 功能点覆盖功能点覆盖情况健康分加权计算✅ HealthMonitor 权重测试一阶/二阶导数趋势分析✅ TrendAnalyzer 测试预测分外推与钳制✅ TrendAnalyzer 钳制测试消息编解码精度✅ setprecision 15 往返一致脏数据/边界数据降级✅ 11 项编解码边界测试连续计数防抖✅ Scheduler 连续 2/3 次测试分差阈值门禁✅ Scheduler 分差不足测试乒乓抑制✅ Scheduler 差值回落重置测试Lease 有效择优投票✅ VoteDecider 测试Lease 失效回退 Raft✅ VoteDecider 测试真实 CPU 内核记账✅ HealthMonitor 线程注册测试 全链路验证负载卸载后恢复✅ HealthMonitor 恢复测试 全链路验证主动禅让仿真✅ SimCluster 端到端主动禅让真实集群注入✅ nuraft_demo主动禅让真实集群无 Mock✅ nuraft_real_test禅让后任期递增✅ 仿真 真实集群禅让目标为最健康节点✅ SimCluster七、已知限制与未覆盖项项目说明macOS 健康采集HealthMonitor 在 macOS 上未实现平台接口返回中性默认值并降级未在 macOS 上测试网络 RTT 维度全链路验证中网络分固定为 0.8loopback未覆盖真实网络抖动场景大规模集群仅在 3 节点集群上验证未测试 5 节点场景长时稳定性单次运行约 30~60 秒未做 24h 长时稳定性测试并发压力测试ActiveScheduler 多线程并发调用 UpdatePeerHealth OnLeaderTick 的压力测试未覆盖成员变更场景未测试禅让过程中伴随 add_srv/remove_srv 的并发场景八、结论8.1 总体结果测试层次用例数通过失败通过率单元测试31310100%仿真集群演示3 场景30100%真实 NuRaft 演示110100%全链路真实验证6 项检查60100%合计41410100%8.2 核心结论趋势分析正确一阶导/二阶导能区分持续劣化与瞬态抖动预测分钳制在 [0,1]编解码健壮全精度序列化脏数据/越界/NaN/Inf 均正确降级主动调度有效连续计数 分差阈值 乒乓抑制三层防抖仅在持续显著劣化时禅让投票安全Lease 失效自动回退标准 Raft不破坏 Raft Safety真实 CPU 记账可信注册线程后 CPU 可用率真实下降1.00→0.15卸载后恢复→1.00全链路禅让成功真实 36 核 CPU 压力下Leader 在 500ms 内主动禅让term 1→2无 Mock8.3 建议补充 macOS 平台健康采集实现增加 5 节点集群与成员变更并发的集成测试增加长时稳定性测试24h增加 ActiveScheduler 多线程并发压力测试在真实网络环境非 loopback下验证网络 RTT 维度的健康感知投票附录测试复现命令# 构建cmake-S.-Bbuild-DCMAKE_BUILD_TYPERelease cmake--buildbuild -j$(nproc)# 1. 单元测试./build/unit_tests# 2. 仿真集群演示./build/5draft_demo# 3. 真实 NuRaft 集群演示混沌注入./build/nuraft_demo# 4. 全链路真实验证无 Mock推荐./build/nuraft_real_test
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门