OCI SWE · VO System Design

Oracle OCI:100 万 VM 的 Ping 与心跳健康监控

以每 10 秒心跳、五分钟覆盖为约束,估算摄入与探测压力,比较 push/pull、故障判定和分片设计。

题目重点:以每 10 秒心跳、五分钟覆盖为约束,估算摄入与探测压力,比较 push/pull、故障判定和分片设计。

题意与假设

这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。

  • “五分钟内收集”训练解读为每台 VM 的最近健康信号在五分钟内可查询;这不等于保证五分钟内发现所有类型故障。
  • 心跳上报包含 vmId、序号或时间戳和运行状态;服务端使用接收时间判断新鲜度,客户端时钟仅作辅助。

解题路线

  1. 基础量级:100 万 VM ÷10 秒=10 万次心跳/秒,若每次原始负载约 200 B,单向 payload 约 20 MB/s,未计协议、复制与重试。平均只是起点,还要预算同秒抖动和重启风暴。
  2. 主动 ping 若每 10 秒覆盖全部 VM,也要约 10 万请求/秒加相应回复;若只需每五分钟探测一次,平均约 3333 请求/秒,但故障发现上界会更慢。
  3. 按区域、租户或 vmId 哈希分片采集器,入口限流与批量写入,状态表存最后接收时间、连续失败次数、上报序号;历史事件异步归档。
  4. 用 N 次漏报或超时阈值判疑似故障,再主动 ping 或查宿主机信号确认;采集器故障应区分为“未知”而非判整片 VM 已死。心跳抖动和网络隔离会带来假阳性。
  5. 规划采集器扩缩容、分片迁移、重放去重、多区域隔离和仪表盘新鲜度;用故障注入验证五分钟覆盖目标与误报率。

手动走一遍

若连续 3 次 10 秒心跳缺失判疑似故障,理想网络下约 30 秒发现;但 VM、网络和采集器三者故障不可仅凭缺失区分。若 20% VM 在同一分钟重连,入口需承受突发远高于平均 10 万次/秒。

规模与取舍

H 次心跳每次 O(1) 状态更新,100 万 VM 当前状态为 O(V) 存储;定期全表扫描 O(V) 每轮,可用时间轮或到期索引降低无故障时的扫描。网络和复制成本按事件速率线性增加。

易错点与追问

容易失分的边界

  • 把平均 10 万次/秒当峰值容量,不算重试、抖动与热区。
  • 把五分钟收集约束直接解释为 100% 故障检测保证。
  • 采集系统自身断连时把所有 VM 判为故障,造成告警风暴。

继续深挖

  • 如何区分 VM 关机、宿主机网络故障和采集器故障?
  • 如果 VM 位于私网且不可被 ping,如何设计 push 心跳与代理层?
  • 健康历史存储 30 天时如何按压缩、采样与聚合控制成本?
✓已复制微信号!