Datadog推出Rust编写实时度量引擎Monocle,性能大幅提升
快速阅读: Datadog推出用Rust编写的Monocle存储引擎,统一度量指标存储,提高数据吞吐和查询效率,解决并发和扩展难题,性能显著提升。
Datadog推出了Monocle,这是一款用Rust编写的新型实时时间序列存储引擎。该系统统一了公司的度量指标存储基础设施,提供更高的数据摄入吞吐量和更低的查询延迟,同时简化了运维复杂性。Monocle替代了之前的存储后端,解决了长期存在的并发挑战和扩展性问题。
Datadog存储基础设施的早期设计将责任分散在多个系统之间。度量指标数据被写入实时数据库(RTDB),后者存储元组,而索引数据库则维护标识符和标签。存储路由器将指标导向RTDB节点,查询在RTDB和索引节点之间展开。每个节点包含用于摄入、存储、快照、查询和限流的子系统,所有这些都通过共享的控制平面进行协调。
RTDB的这种架构经历了多次迭代。第一代依赖Cassandra实现高写入吞吐,但查询灵活性有限。随后是基于Redis的设计,提高了响应性,但在持久性和单线程执行方面遇到问题。MDBM是一个内存映射的键值存储,提供了更好的操作系统缓存使用,但遇到了可扩展性的瓶颈。之后,基于Go的B+树引擎采用了每个核心一个线程的模型,增加了并发性,但也增加了复杂性。后来,RocksDB提供了持久性,并通过DDSketch支持分布式指标,但在扩展方面仍有挑战。
Monocle将这些先前方法整合到一个统一的Rust引擎中。它采用了每个核心一个分片、每个分片一个工作者的模型,每个存储工作者管理自己的日志结构化合并树(LSM树)实例,用于数据摄入、提供查询服务和执行后台任务,如压缩。设计采用了早期的分片存储:通过时间序列键标识每个数据单元,它们被分配到一个分片上,确保CPU核心间的负载均衡。正如Datadog工程师所述,“这种每个核心一个分片、异步工作者模型是RTDB的基础。”设计消除了写入路径上的锁和原子操作,减少了争用,Rust的内存安全性保障了系统的安全性和并发性。
Monocle的内部组件将数据摄取、存储与查询处理整合于单一系统中。写入操作通过内存表缓冲,并采用受LSM树启发的压缩机制实现持久化。基数树缓冲区加速了聚合操作,统一缓存降低了查询延迟。数据按时间分段存储,每段采用最近最少使用(LRU)策略,在保留最相关查询的同时驱逐过期查询,确保系统在高负载下仍能保持数据的新鲜度和响应能力。
Datadog报告的性能基准测试显示了显著的提升。Monocle实现了数据摄入吞吐量的60倍增长,高峰时查询延迟减少了5倍,与早期系统相比,成本效率提高了一倍。这些改进得益于每个核心一个分片的并发模型、Rust的高效性以及在写入和查询路径上的优化。
Datadog的工程师指出,Rust重写和模块化设计的另一个关键优势在于:为Monocle开发的组件现在正被复用到Datadog的其他系统中,这不仅提升了可维护性,还增强了平台范围的一致性。
(以上内容均由Ai生成)