目标
构建经 HTTP 接收多服务 NDJSON 日志、持久化为可查询结构、并以级别/服务/时间过滤流式返回最新事件的日志聚合器。
要点
TCP 分块可能在行中落地,切分器必须缓存跨块的半行——测试在每个字节边界切分证明零丢失;severity 生成列把级别字符串变成可排序整数,WHERE severity >= 3 变成索引范围扫描;轮转在事务边界移动文件,写方零感知。 被拒行计数而非中断整批,单个坏生产者不阻塞其他服务,202 响应里的 rejected 计数让漂移可见。
提示
尾部查询按自增 id 倒序而非时间戳排序:更便宜且符合事件到达序。
验证
EXPLAIN QUERY PLAN 断言索引真被使用;轮转中途摄取的测试对账两个文件确认零丢失。 项目目录骨架:
log-aggregator/
├── src/
│ ├── server.js
│ ├── parser.js
│ ├── store.js
│ └── rotate.js
├── test/
│ ├── parser.test.js
│ └── api.test.js
├── package.json
└── README.md
实施阶段:NDJSON parser → Indexed storage → Ingest endpoint → Tail query and rotation。