饿了么时序数据库LinDB架构演进

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
云原生内存数据库 Tair,内存型 2GB
云数据库 MongoDB,通用型 2核4GB
简介: 2019年3月2日,阿里云栖开发者沙龙时序数据库专场中,饿了么技术经理黄杰分享了饿了么公司时序数据库从设计构建到监控一系列开发更新过程,揭秘了LinDB数据库内部架构并对LinDB未来的发展做出了展望。

以下内容根据演讲视频以及PPT整理而成。

饿了么的监控体系于2015年之前通过StatsD与Graphite技术建立,在2016年公司开发了第一个版本基于RocksDB的本地存储系统LinDB1.0,系统实现了全链路监控的自用型功能,基本满足了公司的需求。在2017年,公司通过扩展RocksDB将LinDB系统升级到了2.0版本。在2018年,公司参考RocksDB的思想基于排倒索引与自研存储开发的LinDB3.0版本,很好的提升了系统的性能,满足了业务上多活的需求。下图展示了公司数据库的发展历程。

1

基于LinDB系统优良的性能与公司增长的需求,饿了么公司的对LinDB数据库的不断改进的目标如下所示:

  1. 数据库监控体系结构足够轻量,减少维护所需人力物力;
  2. 体系支持Measurement、Tags与Fields技术;
  3. 可以解决指标写入的热点问题,采用Series技术进行Sharding过程,体系支持水平扩展;
  4. 支持近实时读写功能,高效快捷的查询出数据;
  5. 监控体系下的数据库支持多活;
  6. 自动的Rollup;
  7. 支持类SQL的查询方式;
  8. 安全性上高度可靠,可以支持多个副本;

2

二.系统整体架构
如下图所示是公司数据库的整体架构。
image

3

公司的数据库从结构上分为四层,不同于传统数据库在存储层进行多活,公司将多活设计在了计算层中,以此提升系统的效率。在数据写入层中,不同客户端的写入数据会存入对应的不同机房的集群中。在用户查询层中,用户将通过HTTP的访问对相应LinProxy模块中的数据进行查询。在系统的计算层LinProxy中,公司为不同的LinProxy定义了不同的逻辑集群,逻辑集群将通过相应的方式向对应的物理集群进行数据的查询。
在进行重量级查询时,数据会不断地从下层送到上层,导致在计算层中数据处理遇到瓶颈。系统的计算层采用了并行处理请求的方式,通过拓扑结构将数据一层层的送给用户。系统同样支持更高级的计算,例如对股票曲线的预算或时间线的预判等。

三.写入过程
如下图所示,数据在系统中的写入分为WAL的复制与本地写入两步。WAL复制的过程中,系统参考了Kafka设计方式,即用户只要写入WAL成功就被认为数据写入成功,通过这种方式提高了整个系统的吞吐量。本地写入过程中,用户将WAL的数据解析写入自己的存储结构中,并可以通过本地存储查到已写入的数据。

4

例如下图所示情景,在一份含有三个副本的数据中,用户将写入成功的副本一数据分别同步到副本二与副本三中,系统采用了透取技术,用“推”的方式将数据从Leader节点推送给Follower节点。系统的复制协议采用多通道复制协议,主要基于WAL在多节点之间的复制,WAL在每个节点上的写入由独立的写操作完成,所以当客户端写入对应Leader节点的WAL成功就认为本次写操作是成功的,Leader所在的节点负责把相应的WAL复制到对应的Follower中, 同理写WAL成功被认为复制成功。

5_

下图所示多通道复制的原理图,多通道复制技术仿照Kafka机制设计而来,这种设计理念将WAL视为巨大的数组以此实现将客户端上的数据一点点的写入。对于Leader节点有三个指针,分别代表写入指针,复制指针与复制完成后Follower的位置指针。通过多通道复制设计,系统提高了吞吐量,但同时降低了数据一致性的程度。

6_

系统本地写入存储数据的结构如下图所示,系统的一个数据库在单节点上会存在多个Shard,每个Shard负责各自的数据写入,并含有各自的WAL,所有Shard共享同一个索引数据。所储存的数据会根据数据库的Interval按时间片进行存储。系统的设计具有以下的优势:

  1. 方便处理TTL,遇到过期的数据使用者可以直接删除相应的目录;
  2. 每个Shard下面会存在Segment,Segment根据Interval来存储相应时间片的数据;
  3. 每个Segment下面按Interval方式存储了很多Data Family,以此减少数据文件之间的合并操作,平衡写入放大的问题;

7_

下图所示为数据本地写入的过程。系统会为每一个Shard启一个写线程,该线程负责这个Shard的所有写操作。在写入的过程中,系统首先会把Measurement、Tags、Fields对应的数据写入数据库的索引文件,并生成相应的ID数据。系统会根据索引得到的ID,结合写入时间和数据库Interval计算得到需要写入到对应Segment下的对应Family中。整个写过程先写内存,再由Flusher线程把内存中的数据推到相应的文件中。

8_

四.如何查询
下图所示为系统的查询过程。用户提交的请求首先到达Proxy层,在该层中进行SQL解析,并将解析的数据送到Aggregator Stream中进行聚合操作。系统通过LinProxy层中的LinConnect模块将处理好的请求发送到机房集群中,在机房集群中进行数据的反馈。ZooKeeper在系统中负责简单的Metadata存储。整个系统的操作采取了异步化的方式,这样可以利用系统线程在IO等待时做一些计算操作。

9

系统在节点层面上的数据查询过程如下图所示。该过程类似于Map操作,公司在节点层面上使用了Actor来替代传统的Task,大大增加了索引查询的效率。

10

五.存储结构
在存储过程中,对数据的索引分为ID与倒排索引两部分,系统首先将输入的字符串转换成Int类型,并根据Time Series的规则为数据生成对应的唯一ID。系统根据Tags标签进行倒排索引,将索引指向一个ID列表。TSID列表以BitMap的方式存储,以方便查询的时候通过BitMap操作来过滤出用户想要的数据。系统中的每一类数据都存储在独立的RocksDB Family中。系统的具体索引步骤如下图。

11

将数据中的字符串转换实例的过程如下图。系统首先将CPU数据、Host数据及地区数据全部转换为整型数字,再根据相应的数据规则对转换后的数字进行倒排解析,将解析后的数据存储入库。

12

13

系统的存储模式参考了LSM方式,下图列出了系统根据LSM方式设计的存储模式。

14

在系统存储的内存层面,系统设计了两个版本的Memory Table,一个负责写入数据,一个负责将数据写入文件中。在Memory Table中,每个Table都会拥有对应的Store及Block块。存储结构如下图所示。

15

系统的文件存储中使用同一个Measurement的数据以Block的方式存储在一起,查询时通过Measurement ID定位到该的数据所存储的Block中。在文件存储结构的尾部,系统指向了Metric索引,在索引块中包含了很多Offset模块,通过这种方式方便用户得知系统的版本号并加快索引速度。系统的文件存储结构如下图所示。

16

六.系统自身监控
系统拥有很好的自身监控能力。在系统自身监控的模块,使用者可以清晰看到系统各个方面的运行情况,通过每项数据的变动,使用者可以清楚掌握系统目前的状况,监控数据示意图如下图所示。

17

18

19

相关文章
|
15天前
|
存储 关系型数据库 MySQL
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
|
1天前
|
存储 关系型数据库 分布式数据库
PolarDB,阿里云的云原生分布式数据库,以其存储计算分离架构为核心,解决传统数据库的扩展性问题
【7月更文挑战第3天】PolarDB,阿里云的云原生分布式数据库,以其存储计算分离架构为核心,解决传统数据库的扩展性问题。此架构让存储层专注数据可靠性,计算层专注处理SQL,提升性能并降低运维复杂度。通过RDMA加速通信,多副本确保高可用性。资源可独立扩展,便于成本控制。动态添加计算节点以应对流量高峰,展示了其灵活性。PolarDB的开源促进了数据库技术的持续创新和发展。
12 2
|
5天前
|
SQL 存储 运维
网易游戏如何基于阿里云瑶池数据库 SelectDB 内核 Apache Doris 构建全新湖仓一体架构
随着网易游戏品类及产品的快速发展,游戏数据分析场景面临着越来越多的挑战,为了保证系统性能和 SLA,要求引入新的组件来解决特定业务场景问题。为此,网易游戏引入 Apache Doris 构建了全新的湖仓一体架构。经过不断地扩张,目前已发展至十余集群、为内部上百个项目提供了稳定可靠的数据服务、日均查询量数百万次,整体查询性能得到 10-20 倍提升。
网易游戏如何基于阿里云瑶池数据库 SelectDB 内核 Apache Doris 构建全新湖仓一体架构
|
2月前
|
存储 运维 5G
基于阿里云数据库 SelectDB 内核 Apache Doris 的实时/离线一体化架构,赋能中国联通 5G 全连接工厂解决方案
数据是 5G 全连接工厂的核心要素,为支持全方位的数据收集、存储、分析等工作的高效进行,联通 5G 全连接工厂从典型的 Lambda 架构演进为 All in [Apache Doris](https://c.d4t.cn/vwDf8R) 的实时/离线一体化架构,并凭借 Doris 联邦查询能力打造统一查询网关,数据处理及查询链路大幅简化,为联通 5G 全连接工厂带来数据时效性、查询响应、存储成本、开发效率全方位的提升。
基于阿里云数据库 SelectDB 内核 Apache Doris 的实时/离线一体化架构,赋能中国联通 5G 全连接工厂解决方案
|
19天前
|
存储 SQL 数据库
数据库技术探索:基础架构、应用场景与未来展望
一、引言 数据库技术是信息时代的基石,为企业和组织提供了数据存储、检索、分析和管理的核心支撑
|
19天前
|
存储 Cloud Native 物联网
数据库技术前沿探索:架构、优化与行业实践
一、引言 在信息化和数字化的浪潮中,数据库技术作为企业核心竞争力的关键要素,其重要性不言而喻
|
1天前
|
SQL 中间件 关系型数据库
MyCAT数据库中间件的架构与使用方法
MyCAT数据库中间件的架构与使用方法
|
27天前
|
缓存 关系型数据库 MySQL
MySQL数据库——InnoDB引擎-架构-内存结构(Buffer Pool、Change Buffer、Adaptive Hash Index、Log Buffer)
MySQL数据库——InnoDB引擎-架构-内存结构(Buffer Pool、Change Buffer、Adaptive Hash Index、Log Buffer)
40 3
|
5天前
|
网络协议 安全 分布式数据库
技术分享:分布式数据库DNS服务器的架构思路
技术分享:分布式数据库DNS服务器的架构思路
12 0
|
1月前
|
NoSQL 关系型数据库 MySQL
高可用数据库架构:互备(Multi-Master)技术详解
本文介绍了分布式系统中的互备(Multi-Master)机制,特别是在高可用数据库系统中的应用。互备机制超越了传统的主从复制,允许每个Master节点同时进行读写操作并互相同步数据,以提高可用性和负载均衡。文章探讨了主从复制与互备模式的区别,以及互备模式的数据同步和冲突解决策略。还以MySQL的双主复制和MongoDB的副本集为例,展示了MM模式在数据库高可用性中的实践。最后,强调了互备在未来分布式系统中的重要性。
43 7

相关产品

  • 云原生多模数据库 Lindorm