VictoriaLogs:一款超低占用的 ElasticSearch 替代方案

news2024/9/29 3:34:47

84b6dbfe9b107bb240a3a3d679587d36.png

image.png

背景

前段时间我们想实现 Pulsar 消息的追踪流程,追踪实现的效果图如下:4ef6230a5ff0784cf4dec93f32d471b0.png

实现其实比较简单,其中最重要的就是如何存储消息。

消息的读取我们是通过 Pulsar 自带的 BrokerInterceptor 实现的,对这个感兴趣的朋友后面会单独做一个分享。

根据这里的显示内容我们大概需要存储这些信息:

  • 客户端地址

  • 消息发布时间

  • 分发消费者、订阅者名称

  • ACK 消费者、订阅者名称

  • 消息 ID 最终捋了下:c7da10e118206a51429c352d8b5b3133.png

都以两个 consumer 计算:
一条消息占用内存:140+ 535*2 + 536*2 =2282byte存储三天:TPS * 86400 * 3=TPS*259200
总存储:2282*TPS*259200≈ 百GB

根据我们的 TPS 计算,三天的大概会使用到 上百 G 的存储,这样首先就排除了 Redis 这种内存型数据库。

同样的换成 MySQL 存储也不划算,因为其实这些数据并不算那么重要。

做了几个技术选型都不太满意,不是资源开销太大就是没有相关的运维经验。

后面在领导的提醒下,我们使用的 VictoriaMetrics 开源了一个 VictoriaLogs,虽然当时的版本还是 0.1.0,使用过他们家 Metrics 的应该都会比较信任他们的技术能力,所以就调研了一下。

具体的信息可以查看官方文档:https://docs.victoriametrics.com/VictoriaLogs/

0e46c303f5b72ae362db950c4571c8f2.png
image.png

简单来说就是它也是一个日志存储数据库,并且有着极低的资源占有率,相对于 ElasticSearch 来说内存、磁盘、CPU 都是几十倍的下降率。

ba2775b6bef8f1e3f5ac36a0aaa93de9.png
image.png

通过官方的压测对比图会发现确实在各方面对 ES 都是碾压。0e14760c99124518ca41eb5840cfe7e0.png

官方宣传的第一反应是不能全信,于是我自己压测了一下,果然 CPU 内存 磁盘的占用都是极低的。

同时也发现运维部署确实简单,直接一个 helm install 就搞定,就是一个二进制文件,不会依赖第二个组件。

按照刚才同样的数据存储三天,只需要不到 6G 的磁盘空间,我们生产环境已经平稳运行一段时间了。04e5e6a9b6c27122a530f95b820886cc.png因为我们是批量写入数据的,所以在最高峰 20K 的 TPSCPU 使用不到 0.1 核,内存使用最高 120M,这点确实是对 ES 碾压了。

42b34ceb7177c634da4bc4fa3a5d7c86.png磁盘占用也是非常少。

这些有点得归功于它有些的压缩、编解码算法,以及 Golang  带来的相对于 Java 的极低资源占用。

还存在的问题

如果一切都这么完美的话那 VictoriaLogs  确实也太变态了, 自然他也有一些不太完美的地方。

分词功能有限

首先第一个是分词功能有限,只能做简单的搜索,无法做到类似于 ES 的各种分词,插件当然也别想了。

不支持集群

当前版本不支持集群部署,也就是无法横向扩展了;不过幸好他的的单机性能已经非常强了。

这也是目前阶段部署简单的原因。

过期时间无法混用

VictoriaLogs 支持为数据配置过期时间自动删除,有点类似于 Redis,它会在后台启动一个协程定期判断数据是否过期,但只能对所有数据统一设置。

比如我想在 VictoriaLogs 中存放两种不同类型的数据,同时他们的过期删除时间也不相同;比如一个是三天删除,一个是三月后删除。

这样的需求目前是无法实现的,只能部署两个 VictoriaLogs.

默认无法查询所有字段

16f27092aea1076660c1607f2fb5f072.png
image.png

由于 VictoriaLogs  可以存储非结构化数据,默认情况下只能查询内置的三个字段,我们自定义的字段目前没法自动查询,需要我们手动指定。

这个倒不是致命问题,只是使用起来稍微麻烦一些;社区也有一些反馈,相信不久就会优化该功能。7db3466911f58ba02e17ec1a24bedbe4.png9454423b10fdfba2ddc3773fafcea428.png

  • https://github.com/VictoriaMetrics/VictoriaMetrics/issues/4780

  • https://github.com/VictoriaMetrics/VictoriaMetrics/issues/4513

没有官方 SDK

3efe9f4f0aa0e8f06f07bb388a0e716b.png
image.png

这也是个有了更好的一个功能,目前只能根据 REST API 自己编写。

总结

当前我们只用来存储 Pulsar 链路追踪数据,目前看来非常稳定,各方面资源占用极少;所以后续我们会陆续讲一些日志类型的数据迁移过来,比如审计日志啥的。

之后再逐步完善功能后,甚至可以将所有应用存放在 ElasticSeach 中的日志也迁移过来,这样确实能省下不少资源。

总得来说 VictoriaLogs  资源占用极少,如果只是拿来存储日志相关的数据,没有很强的分词需求那它将非常合适。

截止到目前最新版也才 0.3.0 还有很大的进步空间,有类似需求的可以持续关注。

往期推荐

k8s 常见面试题

新手如何快速参与开源项目

从 Pulsar Client 的原理到它的监控面板

使用 ChatGPT 碰到的坑

734a5fb945dc0669e949a7f52f7b2cb7.gif

点分享

f1e16665acb7ab052786945def0adade.gif

点收藏

b473b737b36b91cbd3b251726235bb22.gif

点点赞

a493ca04ae9fe05ac4aeb9d4feee28cf.gif

点在看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/933620.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Harbour.Space Scholarship Contest 2023-2024 (Div. 1 + Div. 2) A ~ D

比赛链接 A 正常枚举就行&#xff0c;从最后一位往前枚举&#xff0c;-1、-2、-3...这样 #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define endl \nusing namespace std;typedef pair<int, int> PII; typedef long l…

开源软件的可访问性:让技术更加包容

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

Pico如何使用C/C++选择哪个I2C控制器,以及SDA和SCL针脚

本文一开始讲述了解决方案&#xff0c;后面是我做的笔记&#xff0c;用来讲述我的发现流程和探究的 Pico I2C 代码结构。 前提知识 首先要说明一点&#xff1a;Pico 有两个 I2C&#xff0c;也就是两套 SDA 和 SCL。这点你可以在针脚图中名字看出&#xff0c;比如下图的 Pin 4…

【CHI】(十四)Link Handshake

1.Link layer Credit 本节介绍了链接层信用证&#xff08;L-Credit&#xff09;机制。信息通过使用L-Credit在接口通道传输。要将一个flit从 Transmitter传输到Receiver&#xff0c;Transmitter必须获得L-Credit。 1.1L-Credit flow control 通过将LCRDV信号置起&#xff0c;…

聊聊近况,一个字【累】

首发博客地址 https://blog.zysicyj.top/ 1 最近生活状态真的是一团糟呀&#xff0c;我们家是承包了二十亩葡萄园的&#xff0c;但是只有我爸妈忙活&#xff0c;今年还好我小舅在这边帮忙&#xff0c;不然我的时间还要被压缩的更厉害&#xff0c;写博客学习那肯定是不敢想的了。…

MacOS goland go1.21 debug问题

安装dlv brew install dlv 安装之后在终端会显示所在目录 类似/usr/local/Cellar/delve/1.21.0/bin 配置goland 在文件系统中找到goland 右击选择show package contents -> Contents -> plugins -> go 尝试替换 其中对应系统 的 dlv 结果还是不行 然后打开应用gol…

汤普森采样(Thompson sampling): Beta分布直观理解(可视化)

本文是博客《汤普森采样(Thompson sampling):理论支持》得附录&#xff0c;进一步理解直观理解Beta分布。 1、曝光(αβ)比较大&#xff0c;且点击(α)比较好的情况&#xff0c;可见现在返回的值大部分在0.8左右。 2、曝光(αβ)比较大&#xff0c;且点击(α)比较小的情况&am…

C++数据结构学习——栈

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、栈二、C语言实现1.声明代码2.实现增删查改代码3.测试代码 总结 前言 栈&#xff08;Stack&#xff09;是计算机科学中一种常见的数据结构&#xff0c;它是…

系统架构设计、Linux、 C++、Java、Python、Andorid、iOS等技术笔记目录分享 - 最全讲解

架构设计师应具备的专业素质&#xff1a; 掌握业务领域的知识、掌握技术知识、掌握设计技能、掌握编程技能、具备沟通能力、具备决策能力、知道组织策略、应是谈判专家。 →点击 笔者主页&#xff0c;欢迎关注哦&#xff08;互相学习&#xff0c;共同成长&#xff09; 笔者看…

Linux网络编程:Web服务器

文章目录&#xff1a; 一&#xff1a;超文本编辑语言HTML 二&#xff1a;HTTP超文本传输协议 1.请求和响应消息流程 myhttpd.c getline函数,&#xff1a;用于读取http协议头 2.错误 2.1 处理出错返回disconnect 2.2 错误页面展示send_error 3.写出http应答协议头 写…

网络安全新闻与事件分析:关注当前的网络安全事件、漏洞披露和攻击趋势,分析其背后的技术细节和影响。

第一章&#xff1a;引言 随着数字化时代的不断发展&#xff0c;网络安全已经成为我们生活和工作中不可忽视的一部分。每时每刻&#xff0c;都有各种各样的网络安全事件、漏洞披露和攻击活动在全球范围内发生。作为IT从业者&#xff0c;我们有责任紧跟网络安全的最新动态&#…

开发智能应用的新范式:大数据、AI和云原生如何构建智能软件

文章目录 1.利用大数据实现智能洞察2. 集成人工智能和机器学习3. 云原生架构的弹性和灵活性4. 实现实时处理和响应5. 数据安全和隐私保护6. 可解释性和透明性7. 持续创新和迭代8. 数据伦理和合规性 &#x1f388;个人主页&#xff1a;程序员 小侯 &#x1f390;CSDN新晋作者 &a…

Inventor软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 Inventor软件是一款由Autodesk公司开发的三维计算机辅助设计&#xff08;CAD&#xff09;软件&#xff0c;主要用于机械设计和工程领域。它基于参数化建模技术&#xff0c;可以创建出复杂的三维模型&#xff0c;并且提供了丰富的…

Apache Poi 实现Excel多级联动下拉框

由于最近做的功能&#xff0c;需要将接口返回的数据列表&#xff0c;输出到excel中&#xff0c;以供后续导入&#xff0c;且网上现有的封装&#xff0c;使用起来都较为麻烦&#xff0c;故参考已有做法封装了工具类。 使用apache poi实现excel联动下拉框思路 创建隐藏单元格&a…

23.树表和哈希表的查找

当表插入、删除操作频繁时&#xff0c;为维护表的有序性&#xff0c;需要移动表中很多记录。基于此&#xff0c;我们可以改用动态查找表——几种特殊的树。表结构在查找过程中动态生成。对于给定值key&#xff0c;若表中存在&#xff0c;则成功返回&#xff1b;否则&#xff0c…

HTML5-1-标签及属性

文章目录 语法规范标签规范标签列表通用属性基本布局 页面的组成&#xff1a; HTML&#xff08;HyperText Markup Language&#xff0c;超文本标记语言&#xff09;是用来描述网页的一种语言&#xff0c;它不是一种编程语言&#xff0c;而是一种标记语言。 HTML5 是下一代 HTM…

Linux内核数据结构 散列表

1、散列表数据结构 在Linux内核中&#xff0c;散列表&#xff08;哈希表&#xff09;使用非常广泛。本文将对其数据结构和核心函数进行分析。和散列表相关的数据结构有两个&#xff1a;hlist_head 和 hlist_node //hash桶的头结点 struct hlist_head {struct hlist_node *first…

Linux学习笔记-Ubuntu系统下配置ssh免密访问

Ubuntu系统下配置ssh免密访问 一、基本信息二、ssh安装2.1 查看是否已经安装ssh2.2 安装ssh2.3 查看ssh安装状态 三、启动、停止&#xff0c;及开机自启动3.1 启动ssh3.2 关闭ssh3.3 使用systemctl设置ssh服务自启动3.4 使用systemctl关闭ssh开机启动 四、配置通过密钥进行免密…

Spring Authorization Server入门 (十六) Spring Cloud Gateway对接认证服务

前言 之前虽然单独讲过Security Client和Resource Server的对接&#xff0c;但是都是基于Spring webmvc的&#xff0c;Gateway这种非阻塞式的网关是基于webflux的&#xff0c;对于集成Security相关内容略有不同&#xff0c;且涉及到代理其它微服务&#xff0c;所以会稍微比较麻…

基于Spring Gateway路由判断器实现各种灰度发布场景

文章目录 1、灰度发布实现1.1 按随机用户的流量百分比实现灰度1.2 按人群划分实现的灰度1.2.1 通过Header信息实现灰度1.2.2 通过Query信息实现灰度1.2.3 通过RemoteAdd判断来源IP实现灰度 2、路由判断器2.1. After2.2. Before2.3. Between2.4. Cookie2.5. Header2.6. Host2.7.…