MRS IoTDB时序数据库的架构设计与实现(下)

本文涉及的产品
数据管理 DMS,安全协同 3个实例 3个月
推荐场景:
学生管理系统数据库
日志服务 SLS,月写入数据量 50GB 1个月
简介: MRS IoTDB集群是完全对等的分布式架构,既基于Raft协议避免了单点故障问题,又通过Multi-Raft协议避免了单一Raft共识组带来的单点性能问题,同时对分布式协议的底层通讯、并发控制和高可用机制做了进一步优化。

MRS IoTDB的集群架构

基于Multi-Raft的分布式对等架构

MRS IoTDB集群是完全对等的分布式架构,既基于Raft协议避免了单点故障问题,又通过Multi-Raft协议避免了单一Raft共识组带来的单点性能问题,同时对分布式协议的底层通讯、并发控制和高可用机制做了进一步优化。

 首先,整个集群的所有节点构成一个元数据组(MetaGroup),只用于维护存储组的元数据信息。例如下图蓝灰色框所示的一个4节点的IoTDB集群,全部4个节点构成一个元数据组(MetaGroup);

其次,根据数据副本数构造数据组。例如副本数为3,则构造一个包括3个节点的数据组(DataGroup)。存储组用于存储时间序列数据及对应的元数据。

分布式系统中通常以多副本的方式实现数据的可靠存储。同一份数据的多个副本存储在不同的节点中且必须保证一致,因此需要使用Raft共识协议来保证数据的一致性,它将一致性的问题拆分成了几个相对独立的子问题,即领导者选举、日志复制、一致性保证等。Raft协议中有以下重要的概念:

(1)Raft组。Raft组中有一个通过选举产生的leader节点,其他节点是follower。当一个写入请求到来时,首先要提交给leader节点处理,leader节点先在自己的日志里面记录下这个写入请求,然后将这条日志分发到follower节点。

(2)Raft日志。Raft通过日志的方式保证操作不会丢失,日志中维护了一个 Commit编号和Apply编号。如果一条日志被Commit,就代表目前集群中超过半数的节点都收到并持久化了这条日志。如果一条日志被Apply,就表示当前节点执行了这条日志。当某些节点出现故障并重新恢复时,该节点的日志就会落后于领导者的日志。则在这个节点追上领导人的日志之前,它不能向外界正常提供服务。

image.png

元数据分层管理

元数据管理策略是MRS IoTDB分布式设计中的要点。在进行元数据管理策略设计时首先要考虑元数据在读写流程中的用途:

写入数据时需要元数据进行数据类型、权限等合法性检查。查询数据时需要元数据进行查询路由。同时,由于时序数据场景中元数据庞大,还需要考虑元数据对内存资源的消耗。

现有的元数据管理策略要么采用将元数据交由元数据节点专门管理的方式,这种方法会降低读写性能; 要么采用在集群所有节点全量保存元数据的方式,这种方式会消耗大量的内存资源。

为了解决上述问题,MRS IoTDB设计了双层粒度元数据管理策略,其核心思想是通过将元数据拆分为存储组和时间序列两层分别管理:

(1) 存储组元数据:元数据组(MetaGroup)包含了查询数据时的路由信息,存储组(Storage Group)的元数据信息在集群所有节点上全量保存。存储组的粒度较大,一个集群内部的存储组数量级远远小于时间序列的数量级。因此在集群所有节点上对这些存储组元数据的保存,大大减少了内存的占用。

元数据组中的每个节点称为元数据持有者,采用Raft协议来保证每个持有者与同组的其他持有者的数据一致性。

(2) 时间序列元数据:数据组(DataGroup)中的时间序列元数据中包含了数据写入时需要的数据类型、权限等信息,这些信息保存在数据组所在节点(集群部分节点)上。由于时间序列元数据的粒度较小,数量远远多于存储组元数据,因此这些时间序列元数据保存在数据组所在的节点上,避免了不必要的内存占用,同时也能通过存储组元数据的一级过滤快速定位,同时数据组的Raft一致性也避免了时间序列元数据存储的单点故障。

数据组中的每个节点称为数据分区持有者,采用Raft协议来保证每个持有者与同组的其他持有者的数据一致性。

该方法将元数据按存储组和时间序列两层粒度分别在元数据持有者和数据分区持有者中管理,由于时间序列数据和元数据在数据组内同步,因此每次数据写入不需要进行元数据的检查与同步操作,仅需要在修改时间序列元数据时进行存储组元数据的检查与同步操作,从而提高系统性能。例如创建一个时间序列并进行50万次数据写入的操作中,元数据检查与同步操作从50万次降至1次。

元数据分布

根据元数据分层管理可知,元数据分为存储组元数据和时间序列元数据。

存储组元数据在全集群所有的节点上都有副本,属于MetaGroup组。

时间序列元数据只在对应的DataGroup上存储,存储一些时间序列的属性,字段类型,字段描述等信息。时间序列元数据的分布方式和数据分布方式一样,都是通过slot hash产生。

image.png

时间序列数据分布

分布式系统实现中基于哈希环和环上查找算法将时序数据按照存储组进行分区。将集群各个节点按哈希值放到哈希环上,对于到来的一个时间序列数据点,计算这个时间序列名称所对应的存储组的哈希值并放置到哈希环上,在环上按顺时针方向进行搜索,找到的第1个节点就是要插入的节点。

使用哈希环进行数据分区时,容易出现两个节点的哈希值的差较小的情况,因此在使用一致性哈希环的基础上引入虚拟节点,具体做法是将每个物理节点虚拟成若干个,并将这些虚拟节点按照哈希值放置到哈希环上,在很大程度上避免了数据倾斜的情况,使数据分布得更加均匀。

首先,整个集群预设10000个slot,均匀将此10000个slot分布在各个DataGroup上。如下图所示,IoTDB集群有4个DataGroup,整个集群有10000个slot,则平均每个DataGroup有10000/4=2500个slot.由于DataGroup的数量等于集群节点数4,也就相当于平均每个节点2500个slot.

image.png

其次, 完成slot到DataGroup、Time Partition和time series的映射。

IoTDB集群根据raft协议划分成多个DataGroup组,每一个DataGroup组中包含多个slot,而每一个slot中包含多个time partition,同时每一个time partition中包含多个time series,构成关系如下图所示:

image.png

最后,通过Hash计算slot的值,完成输入存储组和时间戳到slot的映射:

相关实践学习
MySQL基础-学生管理系统数据库设计
本场景介绍如何使用DMS工具连接RDS,并使用DMS图形化工具创建数据库表。
相关文章
|
3月前
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。
|
3月前
|
消息中间件 缓存 监控
优化微服务架构中的数据库访问:策略与最佳实践
在微服务架构中,数据库访问的效率直接影响到系统的性能和可扩展性。本文探讨了优化微服务架构中数据库访问的策略与最佳实践,包括数据分片、缓存策略、异步处理和服务间通信优化。通过具体的技术方案和实例分析,提供了一系列实用的建议,以帮助开发团队提升微服务系统的响应速度和稳定性。
|
25天前
|
存储 SQL Apache
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
Apache Doris 是一个基于 MPP 架构的高性能实时分析数据库,以其极高的速度和易用性著称。它支持高并发点查询和复杂分析场景,适用于报表分析、即席查询、数据仓库和数据湖查询加速等。最新发布的 2.0.2 版本在性能、稳定性和多租户支持方面有显著提升。社区活跃,已广泛应用于电商、广告、用户行为分析等领域。
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
|
26天前
|
缓存 关系型数据库 MySQL
高并发架构系列:数据库主从同步的 3 种方案
本文详解高并发场景下数据库主从同步的三种解决方案:数据主从同步、数据库半同步复制、数据库中间件同步和缓存记录写key同步,旨在帮助解决数据一致性问题。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
高并发架构系列:数据库主从同步的 3 种方案
|
6月前
|
存储 关系型数据库 MySQL
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
|
3月前
|
消息中间件 缓存 监控
优化微服务架构中的数据库访问:策略与实践
随着微服务架构的普及,如何高效管理和优化数据库访问成为了关键挑战。本文探讨了在微服务环境中优化数据库访问的策略,包括数据库分片、缓存机制、异步处理等技术手段。通过深入分析实际案例和最佳实践,本文旨在为开发者提供实际可行的解决方案,以提升系统性能和可扩展性。
|
3月前
|
存储 负载均衡 数据库
探索后端技术:从服务器架构到数据库优化的实践之旅
在当今数字化时代,后端技术作为支撑网站和应用运行的核心,扮演着至关重要的角色。本文将带领读者深入后端技术的两大关键领域——服务器架构和数据库优化,通过实践案例揭示其背后的原理与技巧。无论是对于初学者还是经验丰富的开发者,这篇文章都将提供宝贵的见解和实用的知识,帮助读者在后端开发的道路上更进一步。
|
4月前
|
XML 分布式数据库 数据库
【计算机三级数据库技术】第13章 大规模数据库架构--附思维导图
文章概述了分布式数据库、并行数据库、云计算数据库架构和XML数据库的基本概念、目标、体系结构以及与传统数据库的比较,旨在提供对这些数据库技术的全面理解。
46 1
|
4月前
|
存储 缓存 关系型数据库
Django后端架构开发:缓存机制,接口缓存、文件缓存、数据库缓存与Memcached缓存
Django后端架构开发:缓存机制,接口缓存、文件缓存、数据库缓存与Memcached缓存
73 0
|
4月前
|
存储 前端开发 关系型数据库
Linux 技术架构:前端、后端与数据库的完美融合
【8月更文挑战第25天】本文深入剖析了Linux操作系统的技术架构,重点介绍了前端、后端及数据库三大核心组成部分。Linux前端技术不仅涵盖了图形用户界面(GUI),包括GNOME、KDE等桌面环境,还涉及HTML、CSS、JavaScript等Web前端技术及其相关框架。后端技术则聚焦于Python、Java等多种编程语言、Apache和Nginx等Web服务器以及MySQL、PostgreSQL等数据库管理系统。Linux数据库技术覆盖了关系型和非关系型数据库,如MySQL、MongoDB等,并提供了多种数据库管理工具。
102 0

热门文章

最新文章