• 9 时序数据库M3DB架构与原理


    一、M3DB介绍

    M3DB是Uber开源的一款分布式时序数据库,已在Uber内部使用多年。M3DB有以下特性:

    • 分布式的时序数据库,可以水平扩展存储。
    • 支持Pormetheus的查询语言PromQL,Prometheus可以使用M3DB做为存储后端。
    • 支持多租户,不同租户(Namespace)提供不同的配置(数据失效时间、Bloack大小等)。
    • 支持数据聚合,可以对监控指标进行采样。

    二、M3DB架构

    组件:

    • M3Coordinator:协调器,用于协调上游系统(如 Prometheus 和 M3DB )之间的读写操作,相当于M3DB集群的网关。
    • M3Storage Node:存储节点,实际存储时序数据的组件,支持分片、多副本。
    • M3Seed Node(Etcd):种子节点,用于存储元数据,包括集群、Namespace等的配置。

    三、M3DB原理

    1.基本概念

    • Placement:用于管理M3DB的Topology(拓扑结构),包括IsolationGroup(所在区域)、Node(M3DB节点)、Shard(分片)、Replication(副本)等。
    • Namespace:逻辑上的多租户,每个租户可以设置数据过期时间、Block大小等配置。所有租户共享拓扑结构。
    • Block:M3DB存储数据的基本单位,将时间长短作为存储大小,例如设置Block大小为2h,则Block内存储2小时的数据。

    2.存储引擎

    2.1.数据压缩

    • M3DB使用M3TSZ算法对Block进行压缩。
    • M3TSZ基于Facebook Gorilla算法实现,是一种专用于压缩时序数据的算法,在Uber的生产使用中,一条时序数据会被压缩到1.45bytes,压缩比非常高。

    2.2.内存结构

    • Database:M3DB进程,一个Database拥有多个Namespace。
    • Namespaces:租户,一个Namespace拥有多个Shard。
    • Shards:分片,一个Shard拥有多个Series,M3DB会根据Series id的Hash值分配Series到不同的Shards中。
    • Series:时序数据(Time series datapoints),数据结构包括id、tags、datapoint(timestamp、value)。Series包括Buffer和Cached blocks。
    • Buffer:缓冲区,M3DB会先将时序数据写入Buffer,Flush机制会将Buffer中的数据形成Block,并持久化到磁盘中。
    • Cached blocks:缓存,M3DB会缓存部分Block。

    2.3.持久化存储结构

    • Commit log:日志文件,M3DB的所有写入操作会记录Commit log,用于M3DB启动时加载数据以及灾难恢复。M3DB写入Commit log时,会先写入内存中,由M3DB定时(可配置)批量刷新到磁盘中,所以可能会有Commit log丢失的情况。
    • Fileset files:数据文件组,M3DB的Flush机制会将Block写入到Fileset文件中。Fileset包含一组文件,包括Data file(数据文件)、Index file(索引文件)等等。

    2.4.读写流程

    1)写流程

    写入M3DB的时序数据必须指定四个属性:Namespace, Series id, Timestamp, Value。

    • M3DB找到Namespace。
    • M3DB根据Series id计算Hash值,并找到Shard。
    • M3DB将时序数据写入Buffer,并记录Commit log。
    • M3DB的Flush机制会定期读取Buffer,并根据Timestamp将满足Block大小的时序数据形成Block(例如Block大小为2h,M3DB会将2小时的数据形成Block)。
    • Block形成后,M3DB会用M3TSZ算法压缩Block,压缩后将Block持久化到Fileset files。
    2)读流程

    读取M3DB的时序数据必须指定四个属性:Namespace,Series id,Timestamp范围。

    • M3DB找到Namespace。
    • M3DB根据Series id计算Hash值,并找到Shard。
    • M3DB会合并Timestamp范围内的Buffer、Block(Cached、Fileset)。
    • 合并完成后M3DB返回结果。

    3.拓扑结构

    3.1.Placement

    用于管理M3DB的Topology(拓扑结构),M3DB可以使用Placement扩展移除M3DB节点。基本概念:

    • Replication:副本,M3DB可以保存同一份数据的多个副本,保证数据的高可用。
    • Shard:分片,一个分片包含一个或多个Replication。分片包含3个状态:
      • Initializing:初始化Shatd,此时无法对Shard进行操作。
      • Available:可用状态,此时可以正常操作Shard。
      • Leaving:移除中。
    • Node:M3DB节点,是以IP+Port来区分,一个实例包含一个Replication下的多个Shard。
    • IsolationGroup:Node所在的区域分组,保证同一分组下只保存一个Replication。

    3.2.IsolationGroup分组

    可以按照M3DB实例所在的区域进行分组,多个Replication可以分布到不同的IsolationGroup中,以此实现区域上的高可用:

    • 按Rack(机柜)分组:

    • 按Zone(机房)分组:

    • 按Region(地域)分组:

    4.高可用

    4.1.一致性等级(Consistency Levels)

    M3DB提供连接集群的一致性等级以及读写一致性等级,当Client连接M3DB集群达不到连接一致性等级,则无法进行读写操作。

    1)写一致性等级(Write consistency levels)
    • One:只需要写一个Node成功,就表示此次操作成功。
    • Majority:写大部分Node成功,此次操作才成功。计算Majority的公式为,n代表Node数量,majority=(n+1)/2, 例如n=3,majority=2,表示需要至少有写2个Node成功,此次操作才算成功。

    • All:写所有Node成功,此次操作才成功。

    2)读一致性等级(Read consistency levels)
    • One:只需要读一个Node成功,就表示此次操作成功。
    • UnstrictMajority: 首先读大部分Node,如果成功,则此次操作成功,否则会尝试只读一个Node,成功则表示此次操作成功。
    • Majority: 读大部分Node成功,此次操作才成功。
    • All: 读所有Node成功,此次操作才成功。
    3)连接一致性等级(Connect consistency levels)
    • Any: M3DB依次尝试按照All、Majority、One三个等级连接,只要有一个成功,则连接成功,否则连接失败。
    • None: M3DB始终认为连接是成功的。
    • One: 只需要连接一个Node成功,就认为连接成功。
    • Majority: 连接大部分Node成功,连接才成功。
    • All: 连接所有Node成功,连接才成功。
    4)读写一致性组合
    • 读UnstrictMajority,写Majority,此为默认组合。例如Node数量为3,写必须满足至少有2个Node写成功,保证大部分Node的数据保持一致,读优先满足至少2个Node读成功,如果失败,则降级,满足一个Node读成功即可,保证集群出现大面积故障时,能尽量提供读服务。监控系统一般使用该组合。
    • 读Majority,写Majority。如果对数据一致性要求较高,写成功的数据,必须能读出来,可以使用该组合,当集群出现大面积故障时,M3DB则不提供读写服务。

    4.2.灾难恢复

    M3DB会在Bootstrap(启动节点)和Repair(后台修复机制)两个阶段恢复数据,并且提供两种恢复数据的方式:

    • 基于Commit log恢复数据。
    • 当Commit log丢失,从其他Replication中恢复,恢复时遵循一致性等级。
  • 相关阅读:
    Java List集合
    Java 集合删除重复元素、删除指定元素
    进程和线程
    Java 线程的同步与死锁
    Java 线程的常用操作方法
    Java 多线程实现
    统计分析
    递归方法(回文)
    素数的输出
    动手动脑二
  • 原文地址:https://www.cnblogs.com/chenmingming0225/p/15995197.html
Copyright © 2020-2023  润新知