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

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

点在看

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值