背景

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

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

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

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

  • 客户端地址
  • 消息发布时间
  • 分发消费者、订阅者名称
  • ACK 消费者、订阅者名称
  • 消息 ID

    最终捋了下:

都以两个 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/

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

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

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

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

按照刚才同样的数据存储三天,只需要不到 6G 的磁盘空间,我们生产环境已经平稳运行一段时间了。



因为我们是批量写入数据的,所以在最高峰 20K 的 TPSCPU 使用不到 0.1 核,内存使用最高 120M,这点确实是对 ES 碾压了。



磁盘占用也是非常少。

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

还存在的问题

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

分词功能有限

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

不支持集群

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

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

过期时间无法混用

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

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

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

默认无法查询所有字段

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

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



没有官方 SDK

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

总结

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

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

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

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

VictoriaLogs:一款超低占用的 ElasticSearch 替代方案的更多相关文章

  1. 我们计划为EasyDSS定制开发一款超低延时的EasyPlayer Flash播放器

    现象 最近团队在做EasyDSS RTMP流媒体服务器开发的过程中,遇到了一个关于延时累积的问题,先大概描述一下过程: 在EasyRTMP Android进行长时间的RTMP推流压力测试,在EasyD ...

  2. RTSP Windows专用播放器EasyPlayer : 稳定、兼容、高效、超低延时

    EasyPlayer RTSP Windows专用播放器 EasyPlayer RTSP Windows 播放器是由EasyDarwin团队开发和维护的一个完善的RTSP流媒体播放器项目,视频编码支持 ...

  3. 基于机器学习的语音编解码器声网Agora Silver:支持超低码率下的高音质语音互动

    从 1860 年电话发明,到现如今通过网络进行语音互动,语音始终是最自然.最基础的实时互动方式.过去几年,语音实时互动成为越来越多人日常生活的一部分.但是每个人都会遇到弱网环境,这会直接影响语音通话体 ...

  4. 你见过吗?9款超炫的复选框(Checkbox)效果

    复选框(Checkbox)在各个浏览器中的效果不一致,因此很多 Web 开发人员会自己重新设计一套界面和使用体验都更佳的复选框功能.下面就给大家分享9款超炫的复选框(Checkbox)效果,纯 CSS ...

  5. 7款超酷HTML5 3D动画精选应用及源码

    对以前来讲,3D动画拿到网页上展示是一件非常奢侈的事情,第一是浏览器不够先进,第二是大部分只能用flash实现伪3D.HTML5的出现,让实现网页3D动画变得非常简单,当然前提是你不要再使用像IE67 ...

  6. 9款超绚丽的HTML5/CSS3应用和动画特效

    1.CSS3飘带状3D菜单 菜单带小图标 这次我们要来分享一款很特别的CSS3菜单,菜单的外观是飘带状的,并且每一个菜单项有一个精美的小图标,鼠标滑过菜单项时,菜单项就会向上凸起,像是飘带飘动一样,形 ...

  7. 四款超棒的jQuery数字化签名插件

    在浏览器中,我们有很多方式来绘制生成签名效果,并且有很多很棒很智能的jQuery插件.数字化签名是未来的发展方向,正是这个原因我们这里收集并且推荐了四款超棒的jQuery数字化签名插件,希望大家喜欢! ...

  8. 9款超酷的jQuery/CSS3插件

    Article From here: http://js.itivy.com/?p=1883 1.jQuery向前滑动切换焦点图 这款jQuery焦点图非常绚丽,切换图片的时候每张图片是向前滑动的,很 ...

  9. 程序猿必备的10款超炫酷HTML5 Canvas插件

    1.超炫酷HTML5 Canvas 3D旋转地球动画 这是一款基于HTML5 Canvas的3D地球模拟动画,动画以太空作为背景,地球在太空中旋转,同时我们也可以拖拽鼠标来从不同的角度观察地球.另外我 ...

  10. 基于jQuery8款超赞的评分插件

    基于jquery8款超赞的评分插件.这是一款基于jquery.barrating插件实现的,该评级小部件可灵活设置CSS样式.具体效果请查看演示.效果图如下: 在线预览   源码下载 实现的代码. h ...

随机推荐

  1. Qt+QtWebApp开发笔记(三):http服务器动态html连接跳转基础交互

    前言   网页很多时候是动态的,于是本篇文章目标实现一个简答的动态页面-页静态页面互相跳转,点击可以跳转到子页面.   Demo    下载地址   链接:https://pan.baidu.com/ ...

  2. 03、SECS-I 协议介绍

    03.SECS-I 协议介绍 上一篇我们学习了 SECS-II 协议,对 SECS-II 协议有了初略的了解,现在我们再来一起学习 SECS-I 协议. 文章的内容基本上来自参考资料和自己看的文档,若 ...

  3. 封装vue基于element的select多选时启用鼠标悬停折叠文字以tooltip显示具体所选值

    相信很多公司的前端开发人员都会选择使用vue+element-ui的形式来开发公司的管理后台系统,基于element-ui很丰富的组件生态,我们可以很快速的开发管理后台系统的页面(管理后台系统的页面也 ...

  4. 使用git 将本地代码上传码市私用仓库操作

    1  现在在登录码市建立项目 2   本地建立一个文件夹,然后使用git bash 3   初始化本地库  git init 4,进入刚刚在码云新建的项目里,复制框框里的路径 5,然后在回到本地新建的 ...

  5. AI 协助办公 |记一次用 GPT-4 写一个消息同步 App

    GPT-4 最近风头正劲,作为 NebulaGraph 的研发人员的我自然是跟进新技术步伐.恰好,现在有一个将 Slack channel 消息同步到其他 IM 的需求,看看 GPT-4 能不能帮我完 ...

  6. Python-Loguru:让记录日志更装13

    " 今天勇哥来介绍一款让日志记录在 Python 中变得更加轻松愉快的库--Loguru.它提供了强大的功能和简洁的接口,使我们能够以更加灵活和直观的方式记录和管理日志信息,据说比loggi ...

  7. 【技术积累】JavaSciprt中的函数【一】

    什么是函数?如何声明函数? JavaScript中的函数是一段可重复使用的代码块,它可以接受输入并返回输出. 在JavaScript中,函数是一种特殊的对象,因此可以将其存储在变量中,将其作为参数传递 ...

  8. 了解基于模型的元学习:Learning to Learn优化策略和Meta-Learner LSTM

    摘要:本文主要为大家讲解基于模型的元学习中的Learning to Learn优化策略和Meta-Learner LSTM. 本文分享自华为云社区<深度学习应用篇-元学习[16]:基于模型的元学 ...

  9. 基于DSP的设备振动信号的采集技术方案综述

    前记  在能源领域,由于很多地方都是无人值守,设备故障检测是一个必须面对的问题.笔者通过几个行业案例了解到,由于很多设备发生故障时候会产生特定频谱的声音,所以该行业对振动监测的需求特别强烈,由于涉及到 ...

  10. SQL专家云回溯某时间段内的阻塞

    背景 SQL专家云像"摄像头"一样,对环境.参数配置.服务器性能指标.活动会话.慢语句.磁盘空间.数据库文件.索引.作业.日志等几十个运行指标进行不同频率的实时采集,保存到SQL专 ...