前言

(为了简便,部分位置会使用VM来简称VictoriaMetrics。)

在研究VictoriaMetrics存储引擎期间,有很多感慨。 Metric数据的存储和查询,这个主题一点都不稀奇了。开源界更是百花齐放,能用的组件随手拈来。 在成熟的组件林立的一个小小的领域里,VM以性能为主打的卖点,干赢了排行世界第一的infulexDB,不是赢一点点,而是十倍提升,也就是高出了一个数量级……彼得·蒂尔的《从0到1》这本书里也提了十倍提升的理念:

专利技术多好才算好很多呢?一般来说,你的专利技术想有足够的壁垒的话,你必须在比它相近的这些替代品好出十倍以上,才能有真正的垄断优势。

——《从0到1》

​ 看似平平无奇喜闻乐见的歌,被人重新唱出了新的滋味; ​ 看起来已经毫无悬念的TSDB市场,被vm用十倍提升打开了局面。 把简单的事情做到极致,也会产生巨大的威力。

为什么要去研究存储引擎呢?

  1. 如同芯片一样,从开源项目的数量和质量来看,中国国内软件开发的平均水平仍然是低于发达国家的。单从性能而言,VM是TSDB领域的世界第一。深入了解优秀开源产品的细节,再分享出来,或许什么时候,中国人也能做个世界第一的开源产品出来。
  2. 从微观的层面讲,学习优秀的源码能够提高编程水平。golang是如此的简洁且好用,但是由于健壮和垃圾收集的原因,它似乎只适合于应用层的业务开发;系统级的软件,主流的仍然还是C/C++, rust等语言的天下。然而,valyala大神及其VM团队,以强悍的工程能力,把golang的代码的性能打磨到极致。 举个例子:反复阅读很多平平无奇的代码时,我发现在vm-storage存储组件的核心写入路径上,居然一次堆内存分配都没有,从而也就绕开了GC带来的性能影响。 踏实的把简单的事情做到位,这种严谨认真的态度值得我们学习。
  3. 阅读源码后,我把发现的一些问题和优化点提到了项目的issues,结果我居然成了vm 1.74.0的Contributor之一。同时,以前因为组件能力限制而无法满足的特性,未来也有信心自研出来了。有了VM的启迪,未来完全自研一个比VM更好的TSDB也不是不可能。

本书打算从这些方面来深入介绍 VictoriaMetrics 的内部实现细节:

  • 第一章:介绍 metrics 监控领域的基础概念
  • 第二章:介绍其他常见的可以用于存储 metrics 的存储引擎
  • 第三章:介绍 VictoriaMetrics 的官方宣传,了解这个产品的核心卖点
  • 第四章:介绍 VM 的 TSDB 的设计理念
  • 第五章:从 vm-storage 这个服务开始,介绍 tsdb 的基础结构,包括目录结构/文件结构等。
  • 第六章:介绍 vm-storage 的数据处理流程,主要是:写入,合并,查询这三种流程。
  • 第七章:介绍 VictoriaMetrics 的其他相关知识。
  • 第八章:介绍日志存储引擎 VictoriaLogs 这个产品的基本信息

results matching ""

    No results matching ""