哈希算法题目:设计一个基于哈希的分布式实时监控系统(支持多维度聚合和异常检测)
字数 690 2025-11-06 12:40:04
哈希算法题目:设计一个基于哈希的分布式实时监控系统(支持多维度聚合和异常检测)
题目描述:设计一个分布式实时监控系统,用于收集来自多个服务器的指标数据(如CPU使用率、内存使用量、请求延迟等)。系统需要支持:
- 实时接收时间序列数据
- 按不同维度(服务器ID、指标类型、时间窗口)进行聚合统计
- 基于滑动窗口检测异常值
- 支持多级哈希索引实现快速查询
解题过程:
第一步:理解数据模型
- 每个数据点包含:服务器ID、指标类型、时间戳、数值
- 示例:{"server": "web-01", "metric": "cpu", "timestamp": 1620000000, "value": 85.5}
第二步:设计哈希索引结构
- 使用复合键哈希:将服务器ID和指标类型组合为哈希键
- 哈希函数:hash(server + "|" + metric) → 分片ID
- 时间窗口分桶:按时间间隔(如1分钟)创建哈希桶
第三步:实现存储结构
class MetricStorage:
def __init__(self, shards=10):
self.shards = [{} for _ in range(shards)] # 分片存储
self.index = {} # 多维索引
def _get_shard(self, key):
return hash(key) % len(self.shards)
第四步:实现数据写入
- 将数据点路由到对应分片
- 更新时间窗口的聚合统计(平均值、最大值、最小值)
- 维护滑动窗口的循环缓冲区
第五步:实现多维查询
- 支持三种查询模式:
- 精确查询:指定服务器和指标
- 范围查询:指定时间范围
- 聚合查询:按服务器分组统计
第六步:异常检测算法
- 使用滑动窗口计算基线统计(均值、标准差)
- 基于Z-score检测异常:|当前值-均值|/标准差 > 阈值
- 维护异常状态机避免抖动
第七步:分布式扩展
- 一致性哈希管理分片
- 添加副本分片保证高可用
- 实现查询路由和结果聚合
这个设计通过多级哈希索引平衡了写入性能和查询灵活性,适用于大规模监控场景。