Uber 时序数据库M3DB初探

本文涉及的产品
云数据库 Redis 版,标准版 2GB
推荐场景:
搭建游戏排行榜
云原生多模数据库 Lindorm,多引擎 多规格 0-4节点
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: Uber 时序数据库M3DB初探 Uber M3 是一个已在优步使用多年的指标平台。 M3 可以在较长的保留时间内可靠地存储大规模指标。本篇文章抛砖引玉,带大家了解一下M3DB,同时M3也可以做为Prometheus后端存储,旨在为Prometheus指标提供安全,可扩展且可配置的多租户的存储。

Uber 时序数据库M3DB初探

 

7554fb422814fd849f751bd4d04151fea697dc3f


Uber M3 是一个已在优步使用多年的指标平台。 M3 可以在较长的保留时间内可靠地存储大规模指标。本篇文章抛砖引玉,带大家了解一下M3DB,同时M3也可以做为Prometheus后端存储,旨在为Prometheus指标提供安全,可扩展且可配置的多租户的存储。

组件介绍


d04df0ddad6207e97c12eb5a4773d2fa6f3f97ed

M3 Coordinator

M3 Coordinator 是一种服务,用于协调上游系统(如 Prometheus 和 M3DB )之间的读写操作。它是用户可以部署以访问 M3DB 的优势的桥梁,例如长期存储和与其他监控系统(如 Prometheus )的多 DC 设置。

M3DB

M3DB 是一个分布式时间序列数据库,提供可扩展存储和时间序列的反向索引。它经过优化,具有成本效益和可靠的实时和长期保留指标存储和索引。

M3 Query


4bb5bfa7ef844f02f6d9930260386c143f1627f6

M3 Query 是一种服务,它包含一个分布式查询引擎,用于查询实时和历史指标,支持多种不同的查询语言。它旨在支持低延迟实时查询和可能需要更长时间执行的查询,聚合更大的数据集,用于分析用例。

M3 Aggregator

M3 Aggregator 是一种作为专用度量聚合器运行的服务,它基于存储在 etcd 中的动态规则提供基于流的下采样。它使用领导者选举和聚合窗口跟踪,利用 etcd 来管理此状态,从而可靠地为低采样度量标准发送至少一次聚合到长期存储。这提供了成本有效且可靠的下采样和汇总指标。这些功能也存在于 M3 Coordinator 中,但专用聚合器是分片和复制的,而 M3 Coordinator 则不需要并且需要谨慎部署和以高可用性方式运行。还有一些工作要使用户更容易访问聚合器,而无需他们编写自己的兼容生产者和消费者。

高可用方案 : Quorum Read/Write

Uber M3DB 在高可用方面采用的是 Quorum Write/Read 方式。下面是 Quorum 算法的介绍。

Quorum 机制详细描述

在有冗余数据的分布式存储系统当中,冗余数据对象会在不同的机器之间存放多份拷贝。但是同一时刻一个数据对象的多份拷贝只能用于读或者用于写。

该算法可以保证同一份数据对象的多份拷贝不会被超过两个访问对象读写。

分布式系统中的每一份数据拷贝对象都被赋予一票。每一个读操作获得的票数必须大于最小读票数(read quorum)(Vr),每个写操作必须获得获得的票数必须大于最小写票数(write quorum)(Vw)才能读或者写。如果系统有V票(意味着一个数据对象有V份冗余拷贝),那么最小读写票数(quorum)应满足如下限制:

  1. Vr + Vw > V
  2. Vw > V/2

第一条规则保证了一个数据不会被同时读写。当一个写操作请求过来的时候,它必须要获得Vw个冗余拷贝的许可。而剩下的数量是V-Vw 不够Vr,因此不能再有读请求过来了。同理,当读请求已经获得了Vr个冗余拷贝的许可时,写请求就无法获得许可了。

第二条规则保证了数据的串行化修改。一份数据的冗余拷贝不可能同时被两个写请求修改。

 

根据用户对数据的一致性的要求,M3DB 提供了不同程度的强度。在写多读少的场景中,write consistency 可以配置成one,read consistency 则需要配置成 all 以获取确保最新和最全的数据。在读多写少的情况,write consistency 可以配置成 all,read consistency 则可以配置成 one。这样,所有 replicas 的数据是一致的。

Write consistency levels

  • One: Corresponds to a single node succeeding for an operation to succeed.

  • Majority: Corresponds to the majority of nodes succeeding for an operation to succeed.

  • All: Corresponds to all nodes succeeding for an operation to succeed.

Read consistency levels

  • One: Corresponds to reading from a single node to designate success.

  • UnstrictMajority: Corresponds to reading from the majority of nodes but relaxing the constraint when it cannot be met, falling back to returning success when reading from at least a single node after attempting reading from the majority of nodes.

  • Majority: Corresponds to reading from the majority of nodes to designate success.

  • All: Corresponds to reading from all of the nodes to designate success.

 

9071e9ea86acc74903c46e67941b4da01aa33c6f
以上是一个有三个备份的 M3DB 集群,每个节点中拥有三个分片。假设用户配置的 write consistency 是 all,则每次用户写入 M3DB 都需要将数据确认成功写入到三个节点在返回成功,有一个节点失败或者无响应,写入请求都会返回失败。如果配置是 majority,则两个节点写入成功,写入请求将会返回成功。同理,one 的情况,只要任意一个节点写入成功,写入请求就会返回成功。
根据不同 write consistency level,我们需要配置相应的 read consistency level,以确保准确性和完成行。
One => All | All => One | Majority => Majority。All => One 场景最简单,由于写入时候确保各个节点的一致性,我们可以读取任意一个节点数据即可。在 One => All 的场景中,M3DB 需要对所有节点进行读操作,比较版本,选取最新版本的数据和整合所有数据,将结果返回。同理,Majority => Majority 场景选用类似操作。

 

根据上面这个配置,在 write consistency = all 的情况下,允许最多两个节点挂掉,M3DB 仍可服务。
在 write consistency = majority 的情况下,允许最多一个节点挂掉。在 write consistency = one 的时候,任何节点都必须在线且健康,才能保证服务可用性和准确性。


阿里云时序时空数据库TSDB 1元购!立即体验https://promotion.aliyun.com/ntms/act/tsdbtry.html?spm=5176.149792.775960.1.dd9e34e2zgsuEM&wh_ttid=pc

 

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
目录
相关文章
|
监控 算法 数据库
深度解读Facebook刚开源的beringei时序数据库
Facebook最近开源了beringei时序数据库,其是用来解决其内部监控数据存储和查询需求的数据库,特点是读写速度快。beringei在压缩算法上有哪些独到之处?本文中阿里云数据库高级专家叶翔将为大家深度解读。
19415 0
|
9天前
|
数据采集 消息中间件 存储
实时数据处理的终极武器:Databricks与Confluent联手打造数据采集与分析的全新篇章!
【9月更文挑战第3天】本文介绍如何结合Databricks与Confluent实现高效实时数据处理。Databricks基于Apache Spark提供简便的大数据处理方式,Confluent则以Kafka为核心,助力实时数据传输。文章详细阐述了利用Kafka进行数据采集,通过Delta Lake存储并导入数据,最终在Databricks上完成数据分析的全流程,展示了一套完整的实时数据处理方案。
33 3
|
4月前
|
消息中间件 存储 物联网
InfluxDB的竞争对手有哪些?
【5月更文挑战第13天】InfluxDB的竞争对手有哪些?
112 12
|
11月前
|
SQL Cloud Native druid
全球第一!新一代云原生实时数仓 SelectDB 登顶 ClickBench 榜单!
全球第一!新一代云原生实时数仓 SelectDB 登顶 ClickBench 榜单!
89 0
|
消息中间件 存储 canal
|
大数据 数据处理 Apache
Flink 已经成为各大公司大数据实时处理的发力重点。
Flink 已经成为各大公司大数据实时处理的发力重点。
122 0
|
传感器 数据处理 开发者
亚马逊将推新AWS服务Kinesis处理实时数据流
亚马逊将推出一项可实时处理数据的新服务Kinesis,该服务每秒能够处理成千上万的数据流。专为实时应用设计的Kinesis允许开发者从任何来源提取任何数量的数据,按照需要进行扩展缩减。
373 0
|
NoSQL 存储 Apache
Cassandra全球使用的公司及场景
Apache Cassandra是最流行的分布式宽表数据库,具有SQL的入口,最初由Facebook开发,后续贡献给Apache。阿里云Cassandra公测,就有不少客户在问,Cassandra到底有哪些公司在使用,可以解决什么问题。
Cassandra全球使用的公司及场景
|
存储 监控 Cloud Native
时序数据库连载系列:指标届的独角兽Prometheus
简介 Prometheus是SoundCloud公司开发的一站式监控告警平台,依赖少,功能齐全。 于2016年加入CNCF,广泛用于 Kubernetes集群的监控系统中,2018.8月成为继K8S之后第二个毕业的项目。
3786 0
|
消息中间件 大数据 数据库