#graph #time-series #time

bin+lib veda

韦达是一个用于监控的时间序列数据库

1 个不稳定版本

使用旧的 Rust 2015

0.1.0 2017年6月21日

#2529数据库接口

Apache-2.0/MIT

5KB

韦达

韦达是一个指标平台,设计上参考了 graphite/statsd/influxdb,设计之初有如下目标:

  • 存储引擎方面
  • 顺序写入,尽可能降低随机IO:TSM树存储
  • 数据分页,大量缓存,充分利用现有机器上大量冗余的内存资源。
  • 采用前缀分裂树的方式复用,集群上每台机器存储的都是总树型结构的小分支,在无冗余的情况下任何节点,包括 branch 节点都不会有重复(有利于集群扩展和降压)。
  • 引入主从复制机制来进行容灾
  • 采用保留机制,分为几个层级,同时写入,最短 interval 时间为 1 秒。
  • 多级缓存,利用上面的保留机制,能查内存就查内存。
  • 支持不限数量的 metric 和 tag (吹牛,其实最多 2^32-1 个)。
  • 索引字段单独查询,直接查询出 data 的 offset 来。
  • 查询方面:
  • 内存内长期保持足够长(3 小时)的数据,避免大量短期内的查询 IO。
  • 构建自己的查询语言(参考 graphite 的查询函数即可)。
  • 由于存储的支持,提供多维查询能力。
  • 流式计算
  • 提供流式计算引擎和 API,其特点是数据一定是从当前时间开始的,并且按照时间的顺序增量输出,程序本身并不提供任何存储功能,因此,提供 websocket 和 tcp 两种 API。
  • 对于那些数量和频率极高的查询,系统会自动将其提升为流式计算,但是会在另外的地方提供一定量的存储。
  • 对于上一条,会自动剔除查询量减小的查询,查询量的评估一定是以万分比为单位的。

组件列表

韦达将由以下组件构成:

veda

veda 系统最核心的组件,当然要命名为 veda。这其中,附带了一个存储引擎和一个 rpc 接口。

负责接收上游传来的原始数据,并将其做一定程度的保留。这里要说的是,我做了一定程度的兼容处理,一个端口是直接接收 plain 数据(现行)。另一个是采用 protobuf+zmq 的方式来进行接收(期望)。

提供查询和控制的 rpc 接口,同样是采用 protobuf+zmq 的方式来进行查询,多线程应答。

nova

veda 系统的计算组件,名叫 诺娃。

nova 负责流式计算,本身是一系列的计算集群,由一个节点进行统计和调度。让计算节点与数据直接连接,调度节点挂了并不能影响任何的计算,只是不能再自动修改了。因此调度节点不需要高可用。

nova 本身提供比 veda 更多的计算模块,同时提供聚合、分析、实时查询等功能。

nova-worker

接收具体的指标数据,并将计算结果返回,没有额外的功能。

nova-master

接收各个 veda/nova-worker 的统计指标,并且在内部会有一个 property-queue,每隔一定时间将查询进行重新排序和剔除操作。

zeon

zeon 是 veda 系统的最前端,属于附加组件。在未来的模型中,zeon 直接接受 udp 流,并且转换成 protobuf+zmq 的模式。

lovedog

lovedog 是 veda 系统的 HTTP 接口组件,属于附加组件。当然,直接用 veda 提供的 rpc 接口也是可以的……

无运行时依赖