Uber 时序数据库M3DB初探

简介: 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

 

目录
相关文章
|
API Windows
怎么申请 bing api key
1:打开网址 https://login.live.com/ 注册帐号并登录(点击上图中的登录按钮即可),在新窗口点击下方的“立即注册”(有帐号的可以直接登录)2:填写相关信息(推荐使用hotmail邮箱),填写完毕后点击下方的 即可PS:国家或地区请勿选择‘中国’,否则会出现‘在你的市场中未提供...
21588 1
|
12月前
|
JSON JavaScript 数据格式
Github 2024-10-21 开源项目周报 Top15
本周GitHub热门项目涵盖技术面试笔记、数学动画引擎Manim、现代C++ JSON库、隐私优先知识管理SiYuan等,涉及TypeScript、Python、Go等多种语言,聚焦开源工具与社区驱动创新。
614 64
|
消息中间件 算法 调度
分布式系统学习10:分布式事务
本文是小卷关于分布式系统架构学习系列的第13篇,重点探讨了分布式事务的相关知识。随着业务增长,单体架构拆分为微服务后,传统的本地事务无法满足需求,因此需要引入分布式事务来保证数据一致性。文中详细介绍了分布式事务的必要性、实现方案及其优缺点,包括刚性事务(如2PC、3PC)和柔性事务(如TCC、Saga、本地消息表、MQ事务、最大努力通知)。同时,还介绍了Seata框架作为开源的分布式事务解决方案,提供了多种事务模式,简化了分布式事务的实现。
865 5
|
Linux 数据安全/隐私保护 Windows
解决Windows密码丢失问题:详细指南
最近因为某些工作缘故,接触到windows比较频繁,特此记录一下 当下,计算机安全是每个人都不能忽视的重要问题。然而,有时可能因为忘记密码而无法访问自己的Windows系统,这会导致数据和信息的临时不可用。 本文将详细介绍两种场景下的密码恢复方法:一种是针对虚拟机,另一种适用于物理机。通过这些方法,可以快速恢复对系统的访问,确保业务的连续性。
解决Windows密码丢失问题:详细指南
|
人工智能 监控 并行计算
Stable Diffusion火影数据集训练:SwanLab可视化训练
**使用Stable Diffusion 1.5模型训练火影忍者风格的文生图模型。在22GB显存的GPU上,通过Huggingface的`lambdalabs/naruto-blip-captions`数据集进行训练,利用SwanLab进行监控。所需库包括`swanlab`, `diffusers`, `datasets`, `accelerate`, `torchvision`, `transformers`。代码、日志和更多资源可在GitHub和SwanLab找到。训练涉及数据下载、模型配置、训练过程可视化及结果评估。**
Stable Diffusion火影数据集训练:SwanLab可视化训练
|
存储 数据处理 数据库
InfluxDB数据之谜:如何巧妙地删除和修改你的时间序列数据?
【8月更文挑战第20天】InfluxDB是一款高性能时间序列数据库,专为快速存储与检索时间序列数据设计。本文通过Python示例介绍如何在InfluxDB中执行数据删除与间接修改操作。首先安装`influxdb`库,接着连接数据库。使用`DELETE`语句可按条件删除数据;因InfluxDB不直接支持数据修改,可通过查询、更新并重写数据的方式来实现。注意这种方式可能影响性能,需谨慎使用。随着社区发展,未来将提供更多高效的数据管理工具。
2133 1
|
存储 关系型数据库 MySQL
lower_case_table_names 修改为何不生效
lower_case_table_names 是 MySQL 和 MariaDB 中的一个系统变量,它决定了数据库和表名在存储和引用时的大小写敏感性。这个变量有以下几个可能的值: 0:表名存储为给定的大小写,并区分大小写。这是大多数 Unix 系统的默认设置。 1:表名在存储和引用时都转换为小写,不区分大小写。这是 Windows 和 macOS 的默认设置。 2:表名存储为给定的大小写,但引用时不区分大小写。 如果你尝试修改 lower_case_table_names 的值但发现它不生效,可能是由以下几个原因造成的: 配置文件位置不正确:确保你在正确的配置文件中进行了修改。对于 MyS
2355 2
|
Java
Java中的throw和throws:异常处理详解
Java中的throw和throws:异常处理详解
1706 0

热门文章

最新文章