实时分析性数据库 Druid 架构解析

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: Druid 是一个实时分析型的数据库,用于大规模实时数据导入、快速查询分析的场景,包括网站访问点击流分析、网络性能监控分析、应用性能指标存储与分析、供应链分析、广告分析等。 ![image.png](https://intranetproxy.alipay.com/skylark/lark/0/2020/png/34834/1600427846485-f227ea8b-07c5-47

Druid 是一个实时分析型的数据库,用于大规模实时数据导入、快速查询分析的场景,包括网站访问点击流分析、网络性能监控分析、应用性能指标存储与分析、供应链分析、广告分析等。

image.png

Druid 的核心集成了数据仓库、时序数据库、日志搜索系统的设计,主要包含如下特性:

  1. 列式存储:Druid 使用列存方式组织数据,访问时可按需加载访问到的列,支持快速的扫描和聚合计算能力;同时数据按列式存储,能极大的提升数据的压缩率。
  2. 分布式可扩展:Druid 集群可扩展至上百台服务器,可以高并发出力读写请求,提供每秒百万级的数据导入,以及亚秒级的查询延时。
  3. 支持实时及批量导入:Druid 支持实时或批量方式导入数据,非常方便点支持从 Kafka、Hadoop 等数据源导入数据。
  4. 高可用&负载均衡:Druid 集群支持在线的增加、移除服务节点,集群会进行自动的负载均衡,当有节点故障时,Druid 通过也可通过多副本高可用的方式自动 Failover。
  5. 云原生架构:Druid 将数据存储在外部 Deep Storage(例如 云存储、HDFS 等),即使 Druid 服务节点故障,也不影响数据的可靠性。
  6. 索引加速:Druid 通过位图方式自动对数据建索引,支持快速的索引过滤。
  7. 时间分区:Druid 会先将数据按时间分区,也可根据其他方式进一步分区,基于时间范围的查询只会访问对应时间范围内地数据。
  8. 预聚合:Druid 支持在导入数据时对数据进行提前的聚合分析,例如sum、count、min、max等,作为数据的元数据存储,当实际访问时,可直接访问预聚合好的数据。
  9. SQL 支持:Druid 同时支持 SQL、HTTP 方式访问,表达能力强,灵活方便。

Druid 数据模型

架构解析

核心组件

  • Coordinator 负责集群的协调及数据高可用
  • Overlord 控制集群数据导入任务的分配
  • Broker 处理客户端查询请求
  • Router 是可选的路由组件
  • Historical 负责可查询数据的存储
  • MiddleMangager 负责数据的导入

部署方式

Druid 的各个组件可以随意部署,但根据组件的职能,会分成三类,每一类组件建议在服务器上混部。

  • Master Servers:运行集群的 Coordinator 与 Overlord 控制类的组件。
  • Query Servers:运行集群查询类组件,包括 Broker、Router
  • Data Servers:运行集群数据导入、存储相关组件,包括 Middle Managers、Histricals

外部依赖

Druid 本身不存储数据,数据的存储依赖于外部的组件,数据的存储(Deep Storage)依赖外部的存储,例如 AWS S3、阿里云 OSS、HDFS 等分布式存储,云数据存储依赖 MySQL、PostgreSQL 等数据库;依赖 Zookeeper 实现服务发现、Leader 选举等功能。

Deep Storage

Druid 本身不存储数据,而将数据存储到外部的 Deep Storage,由 Deep Storage 保证数据的可靠存储,例如 AWS S3、阿里云 OSS、HDFS 等分布式存储。

Druid 的数据会按数据顺序组织,并按时间维度对数据进行分区存储,一段时间范围的数据会存储到一起,组成一个 Segment。数据在 Segment 里会按列存方式进行压缩存储,并对 Dimension 数据建立索引。
image.png

Segment 结构

Druid 的所有数据都包含时间戳列,还包含多个 Dimensions 以及 Metrics 列,其中 Dimension 列可支持快速过滤、聚合,Druid 在存储 Dimension 列时,会进行压缩存储,并通过位图方式建索引,每一列的数据包含

  1. Dictionary:存储列值到 整型 ID 的映射
  2. Column Data:根据 1产生的一系列的整型 ID,进行压缩存储
  3. Inverted Index(Bitmaps):针对 Column 里每个不同的 value,会建一个位图倒排索引

image.png
比如 Page 列的存储,包含 "Justin Bieber", "Ke$ha" 两个取值,该列对应的存储类似如下三个部分

1: Dictionary that encodes column values
  {
    "Justin Bieber": 0,
    "Ke$ha":         1
  }

2: Column data
  [0,
   0,
   1,
   1]

3: Bitmaps - one for each unique value of the column
  value="Justin Bieber": [1,1,0,0]
  value="Ke$ha":         [0,0,1,1]
 

当某一段时间范围内地数据量很大时,在将数据存储为 Segments 时,可以采用 sharding 策略,比如按文件大小切分 Segments、或根据指定的 Dimension 进行 Hash 分到多个 Segments,在检索的时候,能进一步减少需要查询的数据。

读写流程

数据导入

Druid 支持从 Kafka、Hadoop 里导入数据,数据导入以 Task 方式进行,Overlord 负责导入任务的分配,Middle Manager 负责实际的数据导入,数据会先写到 Middle Manager 的内存,积累到一定大小或时间窗口后,数据会组织为 Segment 写到 Deep Storage,并将 Segment 的元数据写入到 Metadata Storage。

Coordinator 会周期性的检测 Metadata Storage,当发现新的 Segment 产生时,会将 Segment 根据负载情况分给其中的部分 Historical(根据副本数) 节点管理,Historical 节点接管 Segment 的管理,这部分 Segment 即可用于查询。
image.png

数据查询

Broker 接收数据的查询请求,根据 Metadata 的信息,计算出查询关联的 Middle Managers、Historicals 节点,并将请求发送到对应的节点, Middle Managers、Historicals 根据查询的时间范围,找出所有可能包含查询数据的 Segments,并从中过滤出满足条件的数据,Broker 负责将查询结果进行汇总返回给客户端。
image.png

总结

  1. Druid 与传统数据库通过读写 API 写入数据的方式不同,通过 Pull 方式拉取数据,对接常用的 Kafka、HDFS等大数据生态数据源。
  2. 借助外部可靠的 Deep Storage 和 Meatadata store 来实现数据、元数据的存储,将 Druid 从数据存储的高可靠管理中解放,让各个组件的实现都非常轻量;
  3. Druid 的实现高度模块化,每个模块有独立的职能,但因为组件非常多,在部署管理上稍微有些复杂。
  4. 通过列式存储以及位图索引,极大的降低存储成本,并支持高效的数据过滤查询。
  5. 通过时间分区策略,对事件型、时序类型场景非常友好,能快速根据查询时间范围降低扫描的数据量。
相关文章
|
12天前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
57 6
|
12天前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
29 1
|
17天前
|
存储 SQL Apache
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
Apache Doris 是一个基于 MPP 架构的高性能实时分析数据库,以其极高的速度和易用性著称。它支持高并发点查询和复杂分析场景,适用于报表分析、即席查询、数据仓库和数据湖查询加速等。最新发布的 2.0.2 版本在性能、稳定性和多租户支持方面有显著提升。社区活跃,已广泛应用于电商、广告、用户行为分析等领域。
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
|
13天前
|
Kubernetes Cloud Native 云计算
云原生技术深度解析:重塑企业IT架构的未来####
本文深入探讨了云原生技术的核心理念、关键技术组件及其对企业IT架构转型的深远影响。通过剖析Kubernetes、微服务、容器化等核心技术,本文揭示了云原生如何提升应用的灵活性、可扩展性和可维护性,助力企业在数字化转型中保持领先地位。 ####
|
14天前
|
运维 Kubernetes Cloud Native
Kubernetes云原生架构深度解析与实践指南####
本文深入探讨了Kubernetes作为领先的云原生应用编排平台,其设计理念、核心组件及高级特性。通过剖析Kubernetes的工作原理,结合具体案例分析,为读者呈现如何在实际项目中高效部署、管理和扩展容器化应用的策略与技巧。文章还涵盖了服务发现、负载均衡、配置管理、自动化伸缩等关键议题,旨在帮助开发者和运维人员掌握利用Kubernetes构建健壮、可伸缩的云原生生态系统的能力。 ####
|
17天前
|
机器学习/深度学习 人工智能 自然语言处理
医疗行业的语音识别技术解析:AI多模态能力平台的应用与架构
AI多模态能力平台通过语音识别技术,实现实时转录医患对话,自动生成结构化数据,提高医疗效率。平台具备强大的环境降噪、语音分离及自然语言处理能力,支持与医院系统无缝集成,广泛应用于门诊记录、多学科会诊和急诊场景,显著提升工作效率和数据准确性。
|
6天前
|
API 持续交付 网络架构
深入解析微服务架构:原理、优势与实践
深入解析微服务架构:原理、优势与实践
11 0
|
7天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
25 2
|
1月前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
67 0
|
1月前
|
算法 Java 容器
Map - HashSet & HashMap 源码解析
Map - HashSet & HashMap 源码解析
54 0

推荐镜像

更多
下一篇
无影云桌面