1. 前端 (FrontEnd)
- APP: 应用程序,用户通过手机或电脑上的应用程序与系统交互。
- Web Page: 网页,用户通过浏览器访问的网页界面。
- H5: HTML5,一种网页技术,用于构建动态和交互式的网页内容。
- Landing page: 登陆页面,用户首次访问时看到的页面,通常用于引导用户进行下一步操作。
2. 后端 (Backend)
业务模块 (Business Module)
- User Management Module: 用户管理模块,处理用户注册、登录、个人信息管理等功能。
- Order Management Module: 订单管理模块,处理订单创建、修改、查询等操作。
- Payment Module: 支付模块,处理支付流程,包括支付方式选择、支付确认等。
- Delivery Module: 配送模块,处理配送相关的业务,如配送地址管理、配送状态更新等。
- Menu Management Module: 菜单管理模块,管理商品或服务的菜单信息。
- Restaurant Management Module: 餐厅管理模块,针对餐饮行业的业务管理,如餐厅信息管理、菜品管理等。
- Marketing Module: 营销模块,处理营销活动、促销信息等。
- Search and Recommendation Module: 搜索和推荐模块,提供搜索功能和个性化推荐服务。
- API Gateway (Interface Service Module): API网关(接口服务模块),作为系统的统一入口,负责请求的路由、协议转换、安全控制等。
存储组件 (Storage components)
- Cache (Redis, Memcached): 缓存(Redis, Memcached),用于存储频繁访问的数据,提高访问速度。
- RDBMS (PostgreSQL, MySQL): 关系型数据库管理系统(PostgreSQL, MySQL),用于存储结构化数据。
- Message Queues (RabbitMQ, Kafka): 消息队列(RabbitMQ, Kafka),用于异步通信和解耦系统组件。
- NoSQL (MongoDB, HBase): 非关系型数据库(MongoDB, HBase),用于存储大规模的非结构化或半结构化数据。
- Search Engines (Elasticsearch): 搜索引擎(Elasticsearch),提供全文搜索和数据分析功能。
- Content Delivery Networks: 内容分发网络,用于加速静态资源的分发。
3. 日志收集 (Log Collection)
- CDC (Changed Data Capture): 变更数据捕获,用于实时捕获数据库中的数据变更。
- Canal: 一种开源的CDC工具。
- Flink CDC: 基于Apache Flink的CDC解决方案。
- Debezium: 一种开源的CDC框架。
- Sqoop: 用于在Hadoop和关系型数据库之间传输数据的工具。
- Logging Server: 日志服务器,用于收集和存储系统日志。
- Message Queue (Kafka): 消息队列(Kafka),用于日志的异步传输和处理。
4. 分布式存储 (Distributed Storage)
- Offline DW (S3/HDFS/HBase/DataLake): 离线数据仓库(S3/HDFS/HBase/DataLake),用于存储和处理离线数据。
- Real-time DW (Kafka/Clickhouse/DataLake): 实时数据仓库(Kafka/Clickhouse/DataLake),用于存储和处理实时数据。
5. 查询引擎 (Query Engine)
- Hive: 一种数据仓库工具,用于处理大规模数据集。
- Impala/Greenplum: 实时查询引擎,提供快速的数据查询和分析能力。
- Clickhouse: 一种列式数据库,适用于实时数据分析。
- Doris(StarRocks): 一种高性能的分布式分析型数据库。
- Kylin: 一种开源的分布式分析引擎,适用于大规模数据集的多维分析。
- Presto (Only Computer): 一种分布式SQL查询引擎,适用于大规模数据集的快速查询。
- Druid (Only Computer): 一种实时数据分析系统,适用于实时数据的聚合和查询。
- Spark (Only Computer): 一种通用的分布式计算框架,适用于大规模数据处理和分析。
6. 可视化仪表盘 (Visualization Dashboard)
- Superset: 一种开源的数据探索和可视化平台。
- Tableau: 一种商业智能和数据分析工具,提供丰富的可视化功能。
- Microsoft Power BI: 一种商业智能工具,用于数据可视化和分析。
- Self built (Echarts): 自建的可视化工具,基于Echarts库开发。
针对查询引擎的扩展:
详细分类与解释
1. 批处理引擎(Batch Processing)
这类引擎擅长处理海量数据,但延迟较高,不适合交互式查询。
- Hive: 是Hadoop生态的元老。它通过将SQL翻译成MapReduce/Tez/Spark作业来运行。优势是稳定、容错性好、生态成熟。劣势是延迟非常高,因为中间结果要写磁盘。适用于今天分析昨天数据的“T+1”离线场景。
- Spark SQL: 是Spark生态的组件。它利用内存计算和DAG执行引擎,比Hive快一个数量级。它不仅是查询引擎,更是通用的分布式计算框架,可以无缝衔接ETL、流处理、机器学习等任务。
2. MPP引擎(大规模并行处理)
这类引擎将任务并行化分配到多个节点同时执行,专为低延迟、交互式查询设计。
- Presto: 由Facebook开发。它不依赖MapReduce,而是纯MPP架构,数据在内存中管道化传输,延迟很低。最大的特点是联邦查询,可以一条SQL查询Hive、Kafka、MySQL、Redis等多种数据源。但它只是一个查询引擎,不负责数据存储和管理。
- Doris / StarRocks: 是近年来非常流行的新一代MPP分析型数据库。它集存储和计算于一体,架构简单(无需依赖Hadoop系列组件),性能极其出色。它在高并发点查询(数千QPS)和复杂SQL查询方面都有很好表现,是许多公司构建实时数仓的首选。
- ClickHouse: 由Yandex开发。它最大的优势是单表查询性能,在压缩比和向量化执行引擎上做到了极致,特别适合对单张海量表进行聚合过滤。但它的短板是多表JOIN性能较弱,对事务支持有限。非常适合日志、点击流等宽表分析。
- Impala / Greenplum: 是更早期的MPP方案。Impala与Hadoop生态紧密集成,类似于Presto。Greenplum是基于PostgreSQL的MPP数据仓库,功能完备,但架构相对较重,在云原生时代面临新引擎的挑战。
3. 预计算与特殊场景引擎
这类引擎通过牺牲灵活性来换取极致的查询性能。
- Kylin: 核心思想是“空间换时间”。它在数据导入阶段就根据预定义的维度(Cube)计算出所有可能的聚合结果。查询时直接返回结果,速度极快。但一旦业务需求变更(如增加维度),需要重新构建Cube,灵活性很差。适用于指标和维度固定的固化报表。
- Druid: 专为时序数据和事件数据优化。它支持实时数据摄入,并自动对数据进行预聚合(Roll-up),非常适合做实时监控大盘。它能承受极高的查询并发,但复杂查询能力不如通用的MPP引擎。
如何选择?
选择哪个查询引擎,取决于你的具体需求:
- 做T+1的离线ETL和报表?->Hive或Spark(如果对速度有要求)。
- 需要交互式地探索数据,且数据源多样?->Presto。
- 构建高并发的实时报表系统,要求低延迟且架构简单?->Doris / StarRocks。
- 分析海量的用户行为日志或事件数据,主要是单表聚合?->ClickHouse。
- 需要做实时监控,查询QPS要求极高?->Druid。
- 业务指标固定,要求亚秒级响应的固定报表?->Kylin。
在实际的大数据平台中,这些引擎常常是共存和互补的,共同组成一个Lambda架构或数据湖仓一体架构
现代企业级数据平台几乎都是多种查询引擎(乃至更广泛的数据处理组件)的结合体。这种结合不是为了替代,而是为了互补,以构建一个能够满足不同业务场景、不同数据延迟要求、不同成本考量的统一数据平台。
这种结合的核心思想是:将正确的工具用于正确的场景。
下面通过几个关键维度来阐述它们是如何结合的:
1. 按数据处理流程结合(Lambda / Kappa 架构思想)
这是最常见的结合方式,根据数据产生、处理到消费的整个生命周期,在不同阶段使用不同的引擎。
典型流程:
实时数据流:
- 数据源:应用日志、数据库变更(CDC)、用户点击流。
- 引擎/组件:Kafka(消息队列)作为实时数据总线。
- 处理:Flink或Spark Streaming进行实时ETL、数据清洗、聚合,形成实时流。
批量数据导入:
- 数据源:业务数据库(MySQL, PostgreSQL)的日终快照、传统ETL文件。
- 引擎/组件:Sqoop、DataX将数据批量导入数据湖/仓。
- 处理:Spark或Hive进行复杂的、批量的数据清洗、转换和整合(T+1作业)。
数据存储与分层:
- 原始层/数据湖(ODS):存储在HDFS或S3上,由Hive管理元数据。
- 明细层/轻度汇总层(DWD/DWS):经过清洗和轻度聚合的数据,可能存储在HDFS/S3(由Hive/Spark管理)或直接导入到ClickHouse/Doris中以获得更快的查询速度。
- 应用层/集市层(ADS):为特定业务场景高度聚合的数据,存储在Doris、ClickHouse、Redis或关系型数据库中,供应用直接调用。
数据查询与服务:
- 交互式即席查询:分析师使用Presto或Trino直接查询数据湖(HDFS/S3)中的数据,探索原始或轻度汇总的数据,避免数据移动。
- 高性能OLAP分析:面向高并发、低延迟的报表和BI系统,将数据导入Doris或StarRocks,利用其MPP架构提供极速查询体验。
- 超高并发点查与监控:实时监控大盘、用户行为分析等场景,使用ClickHouse或Druid。
- 固化报表:对固定维度的报表,使用Kylin进行预计算,实现亚秒级响应。
2. 按业务场景结合(多引擎并存)
一个成熟的企业数据平台会同时运行多个引擎,由不同的业务团队或应用按需调用。
3. 技术上的互补性结合
- Presto + Hive:这是经典的“解耦”组合。Presto负责高性能查询,而Hive仅作为元数据仓库(Hive Metastore)。Presto通过读取Hive的元数据来理解存储在HDFS或S3上的数据结构和位置。这样,数据存储和计算能力就分开了。
- Spark + 所有其他引擎:Spark作为强大的数据加工厂,可以读取Hive、HBase、Kafka中的数据,进行复杂的ETL处理,然后将结果输出到Doris、ClickHouse、Elasticsearch等任何适合查询的引擎中。它扮演着数据搬运和转换的核心角色。
- 数据湖仓一体(Data Lakehouse):这是当前的主流趋势。以Apache Iceberg、Hudi、Delta Lake等表格式为基础,在数据湖(S3/HDFS)之上提供类似数据仓库的管理能力和事务支持。在这种情况下,Spark、Flink用于数据写入和加工,而Trino、Spark、Doris都可以作为查询引擎直接查询这些开放格式的数据,实现了批流一体、存算分离的现代化架构。
总结
在企业应用中,将这些查询引擎结合起来,可以构建一个层次清晰、分工明确、弹性可扩展的数据架构:
- Hive/Spark作为可靠的批处理和数据管理基石。
- Flink作为实时处理的骨干。
- Presto/Trino作为数据探索和联邦查询的瑞士军刀。
- Doris/StarRocks、ClickHouse、Druid作为面向最终应用和用户的高性能专业化查询终端。
这种“组合拳”的方式,确保了企业能够以合理的成本,高效地应对从离线到实时、从探索到服务、从低并发到高并发的全方位数据挑战。