AI驱动软件测试平台开发商Momentic近期对其缓存系统进行了重构,以应对每天超200万次、总计200亿条记录的查询需求。这一改进得益于从PostgreSQL迁移到列式数据库ClickHouse。采用新缓存架构的核心原因是缓存数据表数据量急剧膨胀——从约8万条记录激增至10亿条,这一变化开始暴露出PostgreSQL的性能瓶颈。随着数据量增长了好几个数量级,情况只会变得更糟。Momentic决定迁移至ClickHouse时,其缓存系统每日处理约60万次缓存查询,且要求响应延迟低于一秒。相较于PostgreSQL,ClickHouse在架构层面一大核心优势是采用了稀疏主键索引,而非B树索引。PostgreSQL的查询开销通常会随数据量增大而上升,而ClickHouse在已知键值的情况下可将检索范围缩小至少量数据颗粒,在海量数据场景下大幅提升查询效率。通过精心设计主键,将测试ID、步骤ID、平台版本、Git分支与提交时间戳纳入主键字段,在90%的场景中实现了高效检索。但主干分支查询却需要访问海量条目,存在性能隐患:这意味着大多数查询只需要读取1至2个数据分片,但某些异常查询每次都要读取几乎所有数据分片,导致内存使用和磁盘操作出现剧烈波动。为解决这一问题,Momentic采用了物化视图,按测试ID预计算所有可用的提交时间戳,让查询直接定位至对应数据分片。另一项关键优化是减少单次测试执行产生的查询次数,原先在PostgreSQL中使用的三次独立查询在ClickHouse上运行时效率很差。我们改用仅执行INSERT操作,并结合ClickHouse的ReplacingMergeTree引擎:用SELECT获取缓存,重新INSERT已使用的缓存,以此来延长其过期时间(TTL),单次测试任务结束后INSERT新缓存,然后让ClickHouse异步完成数据去重。这项优化带来的性能提升十分显著,我们得以彻底移除Redis缓存层——此时由于缓存键基数已大幅升高,Redis的价值已经相当有限。为了完成迁移,Momentic让ClickHouse与PostgreSQL并行运行,将所有写入同时复制到两个系统。生产流量继续由PostgreSQL提供服务,同时对ClickHouse进行“影子查询”,并对两个数据库的结果进行差异比对,确保正确性。在Momentic确认新系统稳定可靠后,流量逐步从PostgreSQL切换到ClickHouse。即使在切换完成后,双写机制仍维持了一段时间,一旦出现异常可安全回滚至原数据库。通过这次重构,Momentic成功将缓存规模扩展至200亿条记录,每天处理超200万次查询,同时平均解析延迟稳定维持在250毫秒左右。如需深入了解此次迁移及其设计决策,请参阅原文。
--91likeyou---
通过这次重构,Momentic 成功将缓存规模扩展至 200 亿条记录,每天处理超 200 万次查询,同时平均解析延迟稳定维持在 250 毫秒左右。如需深入了解此次迁移及其设计决策,请参阅原文。
查看英文原文:
🔥 热词:#PostgreSQL · #ClickHouse · #200 · #从PostgreSQL切换到ClickHouse · #提升系统性能与伸缩性 · #AI · #驱动软件测试平台开发商 · #Momentic