哈希算法题目:设计一个基于哈希的分布式实时监控系统(支持多维度聚合和异常检测)
字数 690 2025-11-06 12:40:04

哈希算法题目:设计一个基于哈希的分布式实时监控系统(支持多维度聚合和异常检测)

题目描述:设计一个分布式实时监控系统,用于收集来自多个服务器的指标数据(如CPU使用率、内存使用量、请求延迟等)。系统需要支持:

  1. 实时接收时间序列数据
  2. 按不同维度(服务器ID、指标类型、时间窗口)进行聚合统计
  3. 基于滑动窗口检测异常值
  4. 支持多级哈希索引实现快速查询

解题过程:

第一步:理解数据模型

  • 每个数据点包含:服务器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)

第四步:实现数据写入

  • 将数据点路由到对应分片
  • 更新时间窗口的聚合统计(平均值、最大值、最小值)
  • 维护滑动窗口的循环缓冲区

第五步:实现多维查询

  • 支持三种查询模式:
    1. 精确查询:指定服务器和指标
    2. 范围查询:指定时间范围
    3. 聚合查询:按服务器分组统计

第六步:异常检测算法

  • 使用滑动窗口计算基线统计(均值、标准差)
  • 基于Z-score检测异常:|当前值-均值|/标准差 > 阈值
  • 维护异常状态机避免抖动

第七步:分布式扩展

  • 一致性哈希管理分片
  • 添加副本分片保证高可用
  • 实现查询路由和结果聚合

这个设计通过多级哈希索引平衡了写入性能和查询灵活性,适用于大规模监控场景。

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