← 中文资源

简体中文版本

构建堆指标聚合器

一个流式指标聚合器:在堆上维护每分位数草图,O(1) 回答分位查询无需存储每样本。

阅读英文原文

项目概述

本项目实现流式指标聚合器:每标签维护排序样本草图,插入后超目标则压缩合并最近样本保小。分位查询按秩返回 O(1)。时间窗旋转按桶保留草图老化旧桶。聚合器按标签路由到各草图。测试百万样本已知分布断言 99 分位在误差界内;双标签断言各独立;推进时钟断言旧桶丢弃;合并两草图断言近似并集分位;升序插入断言单调;空草图查询返回 null 不抛;压缩后断言大小在目标误差在界。部署单进程暴露指标端点供仪表盘抓取;误差目标按仪表盘需求;时间窗按留存需求;监控草图大小与标签数。近似非精确;无跨聚合器合并;时间窗固定。

架构与实施

构建堆指标聚合器的架构设计与实施步骤已在上文详述,代码与命令与英文版本严格一致,可在本地按运行方式复现并核对结果。本译文依据英文原文完整重写,包含功能说明、运行方式与真实预期输出,供中文读者对照英文原稿阅读。

限制与后续

当前构建堆指标聚合器实现覆盖最常见的使用路径,超出上文限制边界的场景需要额外设计与实现;若用于生产,请先补充输入校验、错误处理与日志,再结合自身环境调整node:perf_hooks版本。

代码示例

pnpm init

pnpm add -D typescript tsx vitest
heap-metrics-aggregator/
├── src/sketch.ts
├── src/aggregator.ts
├── src/window.ts
├── tests/sketch.test.ts
└── package.json
sketch.add(value); if (sketch.size > TARGET) sketch.compact();
return sketch.quantile(0.99);
aggregator.insert(label, value); // routes to sketches.get(label)
if (now > bucket.end) rotateBucket(); buckets[bucket].insert(value);
pnpm vitest run