Uber 时序数据库M3DB初探

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 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在压缩算法上有哪些独到之处?本文中阿里云数据库高级专家叶翔将为大家深度解读。
19470 0
|
5月前
|
存储 监控 NoSQL
什么是时序数据库
【7月更文挑战第7天】时序数据库专注存储按时间排序的数据,用于实时监控与分析指标趋势。
|
7月前
|
存储 物联网 数据处理
什么是时序数据库?
【5月更文挑战第13天】什么是时序数据库?
106 1
|
存储 Cloud Native 物联网
时序数据库学习一:什么是时序数据库
时序数据库学习一:什么是时序数据库
1078 0
|
消息中间件 存储 SQL
使用Databricks+Confluent进行实时数据采集入湖和分析【Databricks 数据洞察公开课】
本文介绍网约车模拟数据从产生,发布到流数据服务 Confluent,通过Databricks Structured Streaming进行实时数据处理,存储到LakeHouse,并使用spark和spark sql进行分析的应用实践。
717 0
使用Databricks+Confluent进行实时数据采集入湖和分析【Databricks 数据洞察公开课】
|
存储 消息中间件 NoSQL
开源时序数据库解析(一):KairosDB
  KairosDB   KairosDB最初是从OpenTSDB 1.x版本fork出来的一个分支,目的是在OpenTSDB的代码基础上进行二次开发来满足新的功能需求。其改造之一就是支持可插拔式的存储引擎,例如支持H2可以方便本地开发和测试,而不是像OpenTSDB一样与HBase强耦合。在其最初的几个版本中,HBase也是作为其主要的存储引擎。但是在之后的存储优化中,慢慢使用Cassandra替换了HBase,它也是第一个基于Cassandra开发的时序数据库。在最新的几个版本中,已不再支持HBase,因为其存储优化使用了Cassandra所特有而HBase没有的一些特性。   在整
1673 0
|
消息中间件 大数据 数据库
|
存储 算法 数据库
【直播预告】阿里巴巴高级算法工程师麦慧君:阿里云时序数据库TSDB For InfluxDB®介绍
主要讲解时序数据和时序数据库的特性,介绍目前DB-Engines排名第一的时序数据库InfluxDB
6089 0
|
存储 算法 数据挖掘
时序数据库连载系列:时序数据库那些事
时序数据库连载系列:时序数据库那些事 正如《银翼杀手》中那句在影史流传经典的台词:“I've seen things you people wouldn't believe... All those ... moments will be lost in time, like tears...in rain.” 时间浩瀚的人类历史长河中总是一个耀眼的词汇,当科技的年轮划到数据时代,时间与数据库碰到一起,把数据库内建时间属性后,产生了时序数据库。
5083 0