欢迎光临散文网 会员登陆 & 注册

技术原理浅析

2023-04-03 09:27 作者:Cpp程序员  | 我要投稿

一、前言

     在监控领域,通常需要指标存储组件TSDB,目前开源的TSDB组件比较多,各个组件性能、高可用性、维护成本等等各有差异。本文不分析选型问题,重点讲解VictoriaMetrics(后面简称为vm)。

     有兴趣的朋友建议结合源码进行分析,由于源码不断变更,此分析基于 v1.80.0,后续版本变化理论上不会很大。

 

二、架构与能力

   vm开源版本分为single-server(all in one)的单节点模式和cluster模式,单点模式合适本地调试或测试使用,生产使用的cluster模式分为vmselect、vminsert、vmstorage三个主要模块:  

    (1)vmselect:查询模块,可无状态部署,客户端发送请求到查询模块后,查询模块会把请求分发到所有storage模块(由于没有元数据中心节点,固数据存储在哪无法感知,类似clickhouse的设计模式),得到原始的block数据后在select模块进行合并,再得到一个总结果。

    (2)vminsert:写入模块,可无状态部署,写入数据的请求发到此模块后,根据labels通过一定的hash计算出一个值,根据这个值确定此条数据发往哪个storage节点。因此相同的时间线会往同一个点节点发送,如果有某个时间线数据量特别大则会出现数据倾斜问题后某个storage写入和查询压力都会增大。在扩容货缩容后,由于节点的列表变更,固计算出的hash发往的storage节点也会变更。

    (3)vmstorage:存储模块,有状态,存储模块的移除须先从select和insert的配置中移除才不会有异常,此模块压力最大,非常消耗内存和IO,固推荐使用SSD和比较大的内存,宁愿用大规格的机器也不用量多但规格较小的机器(缓存不命中则会造成较多的IO,性能下降严重)。

 


三、vmstorage 存储模块

  本文重点讲难度最高的 storage 模块,也只是属于个人理解,如有错误或偏差,望指正。

1、存储目录结构

 

/data 数据目录的逻辑结构如下:

 (1)每个block只包括一个时间线,内部根据时间排序。

   (2) 每个block最大容纳8000个sample,不同block可并发处理。

2、 写入流程与风险点

 3、查询流程与风险点

 

 4、数据过期机制

    开源的cluster版本只能针对租户使用全局的统一过期时间,收费的企业版才能支持租户单独设置过期时间。

 

 

 


技术原理浅析的评论 (共 条)

分享到微博请遵守国家法律