【VictoriaMetrics】vm单机版和vm-storage的查询功能的对比
1.vm-storage源码调用表
文件 | 行号 | 函数 | 说明 |
---|---|---|---|
app/vmstorage/main.go | 53 | main | 入口 94行调用srv.RunVMSelect() |
app/vmstorage/transport/server.go | 151 | func (s *Server) RunVMSelect() |
启动vm-select的服务器端 208行调用s.processVMSelectConn(bc) |
app/vmstorage/transport/server.go | 269 | func (s *Server) processVMSelectConn |
275行调用s.processVMSelectRequest(ctx) |
app/vmstorage/transport/server.go | 467 | func (s *Server) processVMSelectRequest |
处理存储相关的各个命令 498行调用s.processVMSelectSearch(ctx) |
app/vmstorage/transport/server.go | 1037 | func (s *Server) processVMSelectSearch |
从存储引擎读取数据 |
2.vm单机版的源码
文件 | 行号 | 函数 | 说明 |
---|---|---|---|
app/victoria-metrics/main.go | 33 | main | 入口 |
app/victoria-metrics/main.go | 84 | requestHandler | http处理函数 108行调用vmselect.RequestHandler |
app/vmselect/main.go | 87 | RequestHandler | 查询请求入口 220行调用prometheus.QueryRangeHandler |
app/vmselect/prometheus/prometheus.go | 1088 | QueryRangeHandler | /api/v1/query_range 入口 1112行调用queryRangeHandler |
app/vmselect/prometheus/prometheus.go | 1118 | queryRangeHandler | queryRangeHandler 1151行调用promql.Exec |
app/vmselect/promql/exec.go | 29 | Exec | 执行查询 43行调用evalExpr |
app/vmselect/promql/eval.go | 186 | evalExpr | 191行调用evalRollupFunc |
app/vmselect/promql/eval.go | 482 | evalRollupFunc | 509行调用evalRollupFuncWithMetricExpr |
app/vmselect/promql/eval.go | 646 | evalRollupFuncWithMetricExpr | 684行调用netstorage.ProcessSearchQuery 截止这个函数,VM单机版和群集版的vm-select几乎是一致的。 |
app/vmselect/netstorage/netstorage.go | 1009 | ProcessSearchQuery | 执行ql查询语言。从存储引擎读取数据 |
3.结论
- 证实了我的猜想:
- vm单机版和vm集群版,在查询上,本质的不同就是进程内处理数据和进程间处理数据的差别。
- vm单机版中,解析完promql后,直接通过存储引擎的接口拉取数据,然后进行计算。(逻辑上并未看见因为存储引擎就在本机而做的特殊优化)
- VM群集版中:
- vm-select负责解析promql,然后转换成range_query的参数
- vm-select通过网络协议请求vm-storage
- vm-storage查询到time series和data point后,返回给vm-select(数据极度精简,且经过ZTD算法压缩)
- vm-select从多个vm-storage收到数据后,进行去重、计算、输出JSON
- vm单机版从理论上比vm群集版节约了这些步骤:
- vm-select到vm-storage的网络通讯可以省掉
- vm-storage向vm-select返回数据的ZSTD压缩可以省掉
- 不必访问多个vm-storage,因此vm-select的响应时间等于最慢的那个vm-storage。单机版中没有这个等待。
- 数据量很大的情况下,上述的节省也是非常可观的。
- 我认为vm单机版的优化还是不够:
- 如果存储节点在本地,起码可以做边捞取数据边汇总,这样查询时候的内存占用就会减小很多。(但这样也不会节约计算时间)
- 最好增加recording rules的能力,通过预计算提升查询性能
【VictoriaMetrics】vm单机版和vm-storage的查询功能的对比的更多相关文章
- Linux虚拟内存(swap)调优篇-“swappiness”,“vm.dirty_background_ratio”和“vm.dirty_ratio”
Linux虚拟内存(swap)调优篇-“swappiness”,“vm.dirty_background_ratio”和“vm.dirty_ratio” 作者:尹正杰 版权声明:原创作品,谢绝转载 ...
- Springboot+Vue实现仿百度搜索自动提示框匹配查询功能
案例功能效果图 前端初始页面 输入搜索信息页面 点击查询结果页面 环境介绍 前端:vue 后端:springboot jdk:1.8及以上 数据库:mysql 核心代码介绍 TypeCtrler .j ...
- 通过维基API实现维基百科查询功能
通过英文维基的免费API,可以实现对维基百科的搜索查询或者标题全文查询等,尝试了一下通过title实现全文查询,返回的结果是wikitext格式,暂时不知道该如何应用,所以仅实现了查询功能,可以返回最 ...
- Django models .all .values .values_list 几种数据查询结果的对比
Django models .all .values .values_list 几种数据查询结果的对比
- 创建ASP.NET Core MVC应用程序(5)-添加查询功能 & 新字段
创建ASP.NET Core MVC应用程序(5)-添加查询功能 & 新字段 添加查询功能 本文将实现通过Name查询用户信息. 首先更新GetAll方法以启用查询: public async ...
- MySQL 5.5开启慢查询功能
vim /etc/my.cnf [mysqld] slow-query-log = on # 开启慢查询功能 slow_query_log_file = /usr/local/mysql/data/s ...
- php+mysql预查询prepare 与普通查询的性能对比
prepare可以解决大访问量的网站给数据库服务器所带来的负载和开销,本文章通过实例向大家介绍预查询prepare与普通查询的性能对比,需要的朋友可以参考一下. 实例代码如下: <?php cl ...
- ASP.NET MVC系列:为视图添加查询功能
首先,在MoviesController里添加一个查询方法,代码如下 public ActionResult SearchIndex(string title) { //查询数据库中的电影表 var ...
- 完善ext.grid.panel中的查询功能(紧接上一篇)
今天的代码主要是实现,Ext.grid.panel中的查询,其实我也是一名extjs新手,开始想的实现方式是另外再创建一个新的grid类来存放查询出的数据(就是有几个分类查询就创建几个grid类),这 ...
随机推荐
- [C# Expression] 之基础概念
00 | 什么是表达式树 表达式树以树形数据结构表示代码,其中每一个节点都是一种表达式,比如方法调用和 x < y 这样的二元运算等.可以对表达式树中的代码进行编辑和运算. 这样能够动态修改可执 ...
- JAVA微信公众号网页开发——获取公众号关注的所有用户(微信公众号粉丝)
package com.weixin.sendmessage; import org.apache.commons.lang.StringUtils; import org.apache.http.H ...
- 【LeetCode】207. Course Schedule 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/course-s ...
- 【LeetCode】435. Non-overlapping Intervals 解题报告(Python)
[LeetCode]435. Non-overlapping Intervals 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemi ...
- Springcloud-alibaba学习实践(2)- nacos&Eureka Server服务注册实践
前言:上一篇已搭建好了springcloud服务注册中心(Nacos&Eureka Server),本篇继续代码实践,注册服务到服务中心,本篇只是演示了两种注册中心,后续我们以Nacos注册中 ...
- request参数获取,参数校验,参数处理
需求: 1.post接口,需要在过滤器中进行参数校验,校验通过之后再执行方法 2.原有代码中使用x-www-form-urlencoded传参,新需求要使用json格式 3.原有代码校验过滤器使用Se ...
- [数学]高数部分-Part VI 重积分
Part VI 重积分 回到总目录 Part VI 重积分 二重积分的普通对称性 二重积分的轮换对称性(直角坐标系下) 二重积分直角坐标系下的积分方法 二重积分极坐标系下的积分方法 二重积分中值定理 ...
- 【MySQL作业】DDL 和 DML——美和易思使用 DML 删除表数据应用习题
点击打开所使用到的数据库>>> 删除客户"刘一鸣". 执行 SQL 代码"delete from customer where cName=' 刘一鸣 ...
- CSS基础 定位相关属性的使用方法
1.相对定位:position:relative: 属性名:position 属性值:relative: 特点:1.相对自己的位置移动 2.配合方位名词移动,如:top.left.right,bott ...
- 龙芯发布.NET 6.0.100开发者试用版
龙芯在龙芯开源社区发布了LoongArch64-.NET-SDK-6.0.100开发者试用版 新闻 ,龙芯.NET基于上游社区 版本 适配支持龙芯平台架构. 目前支持LoongArch64架构和MIP ...