写点什么

Uber 开源其大规模指标平台 M3

  • 2018-08-25
  • 本文字数:1515 字

    阅读完需:约 5 分钟

Uber 的工程团队发布了其开源指标平台 M3,该平台已经在 Uber 内部使用多年。构建这个平台是为了取代基于 Graphite 的系统,M3 提供了集群管理、聚合、收集、存储管理、分布式时序数据库(TSDB)以及带有其查询语言 M3QL 的查询引擎。

Uber 之前的指标和监控系统是基于 Graphite 的,由一个共享的 Carbon 集群作为支撑,Nagios 负责告警,Grafana 负责提供仪表盘功能。这种方式的问题在于弹性和集群能力比较差、扩展 Carbon 集群的运维成本比较高以及缺少副本的功能,使得每个节点都面临单点故障的风险。新的 M3 指标系统就是为了应对这些问题而产生的。除了扩展性、全局性、跨数据中心的响应式查询之外,新系统的目标还包括标记指标、维持以 StatsD 和 Graphite 格式发送指标的服务的兼容性。 Rob Skillington 是 Uber 的软件工程师,在最近的文章中描述了M3 的架构。M3 目前存储了66 亿条时序数据,每秒收集5 亿个指标并且每秒存储2000 万个指标。

初始版本的M3 包含了一些开源的组件,包括用于聚合的 statsite 、用于存储的 Cassandra 以及用于索引的 Elasticsearch 。但是这些组件逐渐被内部实现替代了,这主要是因为不断增加的运维成本以及对新特性的需求。在 Uber,因为很多团队在广泛使用 Prometheus,M3 在构建的时候,集成 Prometheus 作为远程的存储后端。

Prometheus 的集成是通过一个 sidecar 组件实现的,该组件会向本地区域(regional)的 M3DB 实例写入数据,并将查询扩展至“区域间协调器(inter-regional coordinator),它会从本地区域的 M3DB (存储引擎)实例协调读取”。这种模型的运行方式类似于 Thanos ,Thanos 是 Prometheus 的一个扩展,提供了跨集群联合、无限制存储以及跨集群全局查询的功能。但是,Uber 团队基于各种原因并没有选择Thanos ,主要原因在于非本地存储的指标所带来的高延迟。Thanos 从AWS S3 中拉取并缓存指标数据,因此会带来相关的延迟和用于缓存的额外空间使用,鉴于Uber 在延迟方面的需求以及庞大的数据量,这种方式是不可行的。

M3 的查询引擎提供了所有指标数据的全局视图,无需跨区域的副本。指标写入到本地区域的 M3DB 实例中,副本对区域来讲是本地化的。查询既可以访问本地区域实例,也可以访问存储指标的远程区域中的协调器。结果是在本地聚合的,未来的工作计划是所有的查询都会在远程协调器中进行。

M3 允许用户指定每个指标存储的保存期限和粒度,就像 Carbon 一样。M3 的存储引擎会将每个指标在区域内生成三个副本。为了减少磁盘的使用,会采用自定义的压缩算法对数据进行压缩。大多数的时序数据库都具有压缩整理(compaction)的特性,较小的数据块会重写到较大的数据块中,并重新组织结构以便于提升查询性能。M3DB 尽可能地避免这种压缩整理,从而最大限度地利用主机资源进行更多的并发写入操作并实现稳定的写入和读取延迟。

Skillington 在文章中说到,“M3DB 只有在绝对必要的时候,才会将基于时间的数据压缩整理到一起,比如回填(backfilling)数据,或者将时间窗口索引文件联合在一起具有一定意义的时候”。指标使用一个流模型进行缩小采样(downsample),当指标进入的时候,缩小采样的流程就会执行。

因为PromQL 缺少了一些特性,所以 Uber 内部使用了M3 自己的查询语言 M3QL。在能够处理的指标基数方面会有一些限制,这主要指的是查询而并非存储。M3 通过采用 Bloom 过滤器内存映射文件的索引,优化了对时间数据的访问。Bloom 过滤器用来确定集合中是否存在某些内容,在M3 中,它用来确定要查询的序列是否需要从硬盘中检索。团队目前正在致力于添加在 Kubernetes 上运行 M3 的功能

M3 是使用 Go 语言编写的,可以通过 Github 获取。

查看英文原文: Uber Open Sources Its Large Scale Metrics Platform M3

2018-08-25 16:554398

评论

发布
暂无评论
发现更多内容

一线技术人应该关注的四种思维能力

阿里巴巴中间件

阿里云 技术文章

为什么资源隔离对HTAP至关重要?

OceanBase 数据库

软件测试 | 测试开发 | app自动化测试(Android)-- Capability 使用进阶

测吧(北京)科技有限公司

Andriod

软件测试 | 测试开发 | app自动化测试(Android)--高级定位技巧

测吧(北京)科技有限公司

xpath

软件测试 | 测试开发 | 用 Pytest+Allure 生成漂亮的 HTML 图形化测试报告

测吧(北京)科技有限公司

pytest Allure

TiFlash 源码解读(七)TiFlash Proxy 模块

PingCAP

TiDB TiDB 源码解读

易观分析&Pangle联合发布《全球新兴市场移动应用报告》

易观分析

新兴市场

软件测试 | 测试开发 | 简单快速的从GitHub同步代码

测吧(北京)科技有限公司

git

华为云快成长直播ERP专场,以数据驱动企业智慧变革

科技云未来

fastposter v2.9.2 最简海报生成器

物有本末

海报生成器 电商海报 图片生成

软件测试 | 测试开发 | 常见接口协议解析

测吧(北京)科技有限公司

TCP

你的秋日好运正在派件,请查收9月月更活动!

InfoQ写作社区官方

热门活动 9月月更

边缘服务网格 osm-edge 概览

Flomesh

Service Mesh 服务网格

软件测试 | 测试开发 | 测试人生 | 薪资翻倍涨至50W是种什么样的体验?

测吧(北京)科技有限公司

测试

上了NVMe的路,才能飙起全闪存的车

脑极体

软件测试 | 测试开发 | AppCrawler 自动遍历测试实践(三):动手实操与常见问题汇总

测吧(北京)科技有限公司

测试

开学季 | Y 省教育厅这张卷,融云答出了100分!

融云 RongCloud

通讯协议

虚拟机内存管理之内存分配器

字节跳动终端技术

vm 内存 虚拟机 内存管理 内存分配

软件测试 | 测试开发 | 测试人生 | 双非学历入职名企大厂还薪资翻倍?

测吧(北京)科技有限公司

面试 测试

助力企业成就好生意,华为云快成长直播

科技云未来

从任正非的内部信,看系统开发公司如何度过寒冬

CRMEB

开源治理的基本实践与指导原则

SEAL安全

开源 开源安全 软件供应链安全 开源安全与治理

软件测试 | 测试开发 | app自动化测试(Android)--触屏操作自动化

测吧(北京)科技有限公司

自动化测试 app测试

博睿数据携手亚马逊云科技,助您开启全链路可观测之旅

博睿数据

可观测性 智能运维 博睿数据 全链路 亚马逊云科技

TDengine3.0计算查询引擎的优化与升级

TDengine

数据库 tdengine 时序数据库 企业号九月金秋榜

设计模式的艺术 第二十章中介者模式练习(设计一套图形界面类库,包含若干预定义的窗格(Pane)对象,如TextPane、ListPane等,窗格之间不允许直接引用。基于该类库的应用由一个包含一组窗格的窗口(Window)组成,窗口协调窗格之间的行为)

代廉洁

设计模式的艺术

基于MonoRepo的Web端CI/CD实践与优化

RingCentral铃盛

企业号九月金秋榜

软件测试 | 测试开发 | Jenkins 集成 Android 代码检查

测吧(北京)科技有限公司

android jenkins

YOLOX-PAI:加速YOLOX,比YOLOV6更快更强

阿里云大数据AI技术

深度学习 模型优化 企业号九月金秋榜

从原理剖析带你理解Stream

华为云开发者联盟

开发 企业号九月金秋榜

软件测试 | 测试开发 | 疫情之下工资翻了2倍多,这4个月学习比工作8年学到的还多

测吧(北京)科技有限公司

软件测试

Uber开源其大规模指标平台M3_DevOps & 平台工程_Hrishikesh Barua_InfoQ精选文章