lindb 是饿了么研发的一款高性能、高可用并且具备水平拓展性的开源分布式时序数据库。lindb 目前在饿了么存储了全量的监控数据,每天增量写入 88tb,全量数据总计 2.7pb。
高性能
lindb 参考了其他时序数据库里的最佳实践,并且在此基础上做了些优化。 和 influxdb 中的 continuous-query 不一样,在创建数据库之后,lindb支持根据指定的时间间隔自动对数据进行rollup。 不仅如此,lindb 在并行查询和计算分布式时序数据方面速度相当快。
原生的多活支持
lindb 在设计阶段就是为了在饿了么的多活系统架构下工作的。lindb的计算层(brokers)支持高效的跨机房聚合查询。
高可用
lindb 使用 etcd 集群以保证元数据的高可用和存储安全(也支持单机模式启动)。 当出现故障时,多通道复制的wal协议可以避免数据的不一致情况:
1). 任一复制通道只有一名成员负责数据的权威性,因此避免了数据冲突;
2). 数据可靠性保障:只要先前的leader数据并未丢失,当其重新上线时,这些数据便将被复制到其他的副本中;
水平拓展性
lindb 使用了基于 series(tags) 的 sharding 策略,可以真正解决热点问题(另外也考验了系统设计的能力),简单的增加新的 broker 和 storage 节点即可实现水平拓展。
metric的治理能力
为了保证系统的健壮性,lindb 并不假设所有用户都已了解 metric 使用的最佳实践。因此,lindb 提供了 metric 和 tag 粒度的限制能力,避免整体集群在部分用户错误的使用姿势下崩溃。
饿了么的监控体系于2015年之前通过statsd与graphite技术建立,在2016年公司开发了第一个版本基于rocksdb的本地存储系统lindb1.0,系统实现了全链路监控的自用型功能,基本满足了公司的需求。在2017年,公司通过扩展rocksdb将lindb系统升级到了2.0版本。在2018年,公司参考rocksdb的思想基于排倒索引与自研存储开发的lindb3.0版本,很好的提升了系统的性能,满足了业务上多活的需求。
lindb开源地址:https://github.com/lindb/lindb