计算效率提升 10 倍,存储成本降低 60%,灵犀科技基于 Apache Doris 建设统一数据服务平台

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
云原生数据仓库AnalyticDB MySQL版,基础版 8ACU 100GB 1个月
简介: 灵犀科技早期基于 Hadoop 构建大数据平台,在战略调整和需求的持续扩增下,数据处理效率、查询性能、资源成本问题随之出现。为此,引入 [Apache Doris](https://doris.apache.org/) 替换了复杂技术栈,升级为集存储、加工、服务为一体的统一架构,实现存储成本下降 60%,计算效率提升超 10 倍的显著成效。

灵犀科技早期基于 Hadoop 构建大数据平台,以 Hive、Clickhouse、Starrocks 搭建离线数仓,Flink、Redis 搭建实时数仓。2023 年随着公司的战略调整和需求扩增,数据处理效率、查询性能、资源成本问题随之出现。为了快速应对业务的发展需要,灵犀科技引入 Apache Doris 搭建了集存储、加工、服务为一体的统一架构,有效解决上述挑战,实现存储成本下降 60%,计算效率提升超 10 倍 的显著成效。

早期架构及痛点

基于 Hadoop 体系的大数据平台架构如下图所示,分为实时及离线两条数据处理链路:

  • 离线处理链路:在离线数据处理流程中,数据通过爬虫、埋点、业务系统和算法分析等多种方式被采集,通过 HDFS Put 命令和 SeaTunnel 工具被导入/同步到 Hive 的 ODS 层中。使用 Hive 对数据进行更新、清洗、聚合、主题构建。因 Hive 存在计算性能限制,又引入 ClickHouse 优化大规模数据集的多维聚合计算,引入 StarRocks 进行多源数据的 ID 映射。最终,处理后的数据通过 Seatunnel 同步到 TiDB,提供业务的实时查询需求。
  • 实时处理链路:在实时数据处理流程中,数据通过爬虫的方式写入 Kafka,Flink 读取 Kafka 的信息并根据系统下发在 Redis 的数据处理规则,完成数据的处理并最终写入 TiDB,提供实时的数据查询服务。

早期架构及痛点.png

整体架构中,各组件的职能明确,并承载公司多年的数据服务工作。然而,随着 2023 年公司战略调整和需求扩大,数据处理效率、查询性能受到影响,架构疲态尽显。具体问题包括:

  • 系统复杂:集成多种数据组件增加了系统的复杂性,导致系统维护和故障排除困难。
  • 数据一致性:在多个数据库和存储系统之间同步数据时,会导致大量数据冗余,同时容易出现数据一致性问题,使得数据排错变得困难。
  • 系统扩展性:随着数据量的增长,系统的可扩展性不足,扩展所需资源也随之增加。
  • 使用成本: 团队成员需具备多样化技能,以管理和维护复杂的系统组件。维护多样化的系统导致较高的使用成本,包括硬件及软件的成本投入。

技术选型

为了快速应对业务发展需要,灵犀科技决定对架构进行升级。经过对多种大数据组件的对比,最终选择引入 Apache Doris 来构建公司新一代数据服务平台,Apache Doris 是一种低成本且能满足以下特性的架构:

  • 架构简洁:架构简洁,易于部署维护,简化开发流程,提升工作效率;
  • 多源数据融合能力:能够集成 HDFS、Kafka、MySQL 等多种数据源,具备高效的数据融合能力;
  • 高效的数据建模能力:相较于多组件架构,能够高效率的执行 SQL,实现快速建模;
  • 具备实时数据处理能力:能够支撑分钟级延迟的数据生产;
  • 数据服务能力:能同时高效满足表报分析与常规的数据查询服务;
  • 稳定可靠:具备容灾恢复能力,确保数据存储的高可靠性。

基于 Apache Doris 的统一数据服务平台

基于 Apache Doris 的统一数据服务平台.png

新架构中,使用 Apache Doris 替代了原先架构中数据存储与数据分析引擎,实现集存储、形成集存储、加工、服务为一体的统一架构,依赖于 Apache Doris 的湖仓一体能力,实现数据的宽入->窄处理→宽出,具体来讲:

  • 数据宽入: Apache Doris 提供多样化数据导入方式,结合 Multi-Catalog 能力,可实现多数据源的快速导入。具体来讲,使用 Broker Load 导入 HDFS 冷数据(历史数据),使用 Catalog 导入类 MySQL 静态数据,使用 Routine Load 导入埋点数据以及爬虫数据(增量实时数据),使用 Binlog Routine Load 导入业务应用数据(增量实时数据)。
  • 窄处理:利用 Doris 实现数据的统一存储及计算。Doris 采用列式存储,按列进行数据的编码压缩和读取,能够实现极高的压缩比,并利用 Doris 的极速计算引擎进行数据分析。
  • 数据宽出:Doris 提供各类异构数据源的查询和写入能力,支持用户将这些外部数据源统一到 Doris 的元数据映射结构上,当用户通过 Doris 查询这些外部数据源时,能够提供一致的查询体验。

在数仓建模上遵循维度建模思路。ODS 层采用明细模型(Duplicate Key),保证了数据完整变更链路的存储,数据不做任何的加工处理;DWD、DM、APP 层选用主键模型(Unique Key),在数据的录入过程中完成的数据更新。为确保一致性的数据服务,基于 Doris 提供统一的应用服务,避免多组件间数据传输导致数据孤岛,同时避免多组件繁重的数据存储和同步成本。

经过半年多使用,以 Apache Doris 为基石的数仓建设取得了显著成果:

  • 从存储成本来看,同样的数据规模,原先架构需要 130+TB 磁盘资源,使用 Doris 后,仅需 60TB 即可,成本下降超过 60%。
  • 从计算性能来看,下图测试结果可清晰得知 Doris 显著优势,与 Hive 的数仓计算耗时相比,Doris 计算效率提升超 10 倍。

基于 Apache Doris 的统一数据服务平台-2.png

基于 Apache Doris 的最佳实践

01 负载隔离实现资源高效管理

Doris 的多租户和资源隔离方案,主要目的是为了多用户在同一 Doris 集群内进行数据操作时,减少相互之间的干扰,能够将集群资源更合理的分配给各用户。

灵犀科技基于 Apache Doris 资源隔离方案对集群资源进行了租户级别的隔离。针对在线与离线任务,将节点资源划分为 Online 和 Offline 两个标签,并将 BE 节点均匀分配到这两个标签上。表数据依然以 3 副本的方式存储,其中 2 个副本存放在 Online 资源组,1 个副本存放在 Offline 资源组。Online 资源组主要用于高并发低延迟的在线数据服务,而一些大查询或离线 ETL 操作,则可以使用 Offline 资源组中的节点执行。从而实现在统一集群内同时提供在线和离线服务的能力。

同时,定义了多租户,并为每个租户分配不同的资源权限,通过租户级别的资源隔离,提高了资源使用效率,确保各业务模块按需获得计算与存储资源。在数据存储方面也进行了类似的划分,从而实现数据生产与业务应用的同时兼顾,提高了数据管理的可控性,降低了运维复杂度。

使用参考负载管理文档

01 负载隔离实现资源高效管理.png

为了在确保集群稳定性的同时充分利用资源,我们将用户划分为多种角色,以应对不同时间段的资源需求。举例来说:

01 负载隔离实现资源高效管理-2.png

  • 普通角色的用户(非生产性用户),仅使用 Offline 组的资源
  • 系统忙时(早上 8 点到晚上 8 点),生产用户可使用的资源仅为 Offline 组的资源
  • 系统闲时(晚上 8 点到第二天早上 8 点),生产用户可使用所有的服务资源处理数据
  • 应用系统用户,仅使用 Online 组的资源

资源划分确保了应用系统在高峰时段的资源不被挤占,同时也兼顾了夜间大批量数据处理的性能需求。

02 多重机制保障集群稳定性

在一体化数仓建设中,集群需同时支持服务应用和数据生产,因此集群的稳定性显得格外重要。为此,灵犀科技采取了以下安全保障措施:

  • 熔断机制:由于集群面向多种服务应用,常常会出现不规范的使用场景。为应对这种情况,我们引入了熔断机制。当 SQL 运行超过设定时长时,系统会及时报警并终止该查询,以实现熔断效果。
# 查询正常执行的查询
select * from information_schema.active_queries


# 通过查询时长设置熔断,杀掉长查询
kill query {query_ID}
  • 监控报警:借助飞轮科技提供的 Doris Manager 进行巡检监控,及时上报集群的 CPU、内存状态,同时我们也建立了任务的异常报警机制,实现了问题监控和处理。通过 Doris Manager 的巡检监控,我们能够及时上报集群的 CPU 和内存状态。此外,我们还建立了任务异常报警机制,实现了对问题的监控与处理。

02 多重机制保障集群稳定性.png

  • 流量控制:针对常规的任务处理,控制整体的应用并发,合理利用闲时时间进行的数据的生产工作,确保能够在高峰期保持系统的高性能,同时在低峰期最大化资源的使用,提高了整体系统的生产效率。

03 Doris 支撑企业相似度高效分析

公司依托详尽的企业信息,从多维度——包括企业类型、组织形式、经营范围以及产品服务等,构建了全面的企业产业链信息库。灵犀科技采用先进的数组结构来存储这些数据,并充分利用 Doris Array 数据结构以及强大的数据函数功能,精准分析企业间的相似度,以帮助企业更精准的招商引资。

原方案:

过往的方案中,采取每日将数据库中的新增数据同步至向量库,并转化为向量化数据进行存储。当用户发起请求时,将请求数据同样转化为向量,并查询向量库以获取相似企业的 ID 列表。随后,还需通过这些 ID 再次访问数据库,以获取并展示详细的企业信息。

这一流程存在显著弊端:数据冗余存储导致资源浪费,且数据不同步问题严重影响了结果的准确性。此外,每次页面请求都需要依次访问两个服务,不仅响应时间长,代码复杂度也较高,一旦出现问题,排查难度极大。

新方案:

为解决上述问题,引入 Doris 制定全新的方案。利用 Doris Array 的数据结构,承载企业所属产业、行业等相关信息,比如:一家企业的产业编码为 ["160", "208", "219", "399"],表示这家企业属于智能制造、汽车、新能源、物联网产业。然后运用数据相交函数 array_intersect计算两家企业在产业、行业之间的相交度,为企业相似度分析提供数据支撑。简化模型如下:

03 Doris 支撑企业相似度高效分析.png

与之前方案不同的是,引入 Doris 之后,只需一次 SQL 请求即可完成相似度计算并返回企业详细计算,代码简单且流程缩短,接口响应时间稳定在 5 秒以内,较原方案快了 1 倍;同时,系统也无需进行冗余数据的存储及同步操作,避免了数据不一致的问题。

总结与规划

截至目前,灵犀科技基于 Apache Doris 建设的统一数据数据平台已上线并稳定运行,有效解决了数据孤岛问题,实现了数据整合与流通。在数据集成(ETL)、标准化、治理和可视化等方面取得显著进展,相较于原有的多组件架构,数据生产能力提升超过 10 倍、存储成本节省超 60%。未来,灵犀科技将进一步探索 Apache Doris 潜力,并在以下方面进行深入实践:

  • 存算分离:进一步提升资源的利用率,精细化分配存储和计算资源。
  • 大模型 BI:将 Apache Doris 作为公司智能问答大模型的知识库,支撑大模型 BI 的查询。

最后,衷心感谢 Apache Doris 社区和 SelectDB 伙伴的积极支持,期待与大家在未来继续深入合作。

相关实践学习
AnalyticDB MySQL海量数据秒级分析体验
快速上手AnalyticDB MySQL,玩转SQL开发等功能!本教程介绍如何在AnalyticDB MySQL中,一键加载内置数据集,并基于自动生成的查询脚本,运行复杂查询语句,秒级生成查询结果。
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
相关文章
|
12天前
|
存储 SQL Apache
Apache Doris 创始人:何为“现代化”的数据仓库?
3.0 版本是 Apache Doris 研发路程中的重要里程碑,他将这一进展总结为“实时之路”、“统一之路”和“弹性之路”,详细介绍了所对应的核心特性的设计思考与应用价值,揭晓了 2025 年社区发展蓝图
Apache Doris 创始人:何为“现代化”的数据仓库?
|
14天前
|
SQL 存储 数据处理
别让你的CPU打盹儿:Apache Doris并行执行原理大揭秘!
别让你的CPU打盹儿:Apache Doris并行执行原理大揭秘!
58 1
别让你的CPU打盹儿:Apache Doris并行执行原理大揭秘!
|
29天前
|
SQL 存储 Apache
Apache Doris 3.0.3 版本正式发布
亲爱的社区小伙伴们,Apache Doris 3.0.3 版本已于 2024 年 12 月 02 日正式发布。该版本进一步提升了系统的性能及稳定性,欢迎大家下载体验。
|
5月前
|
存储 消息中间件 Java
Apache Flink 实践问题之原生TM UI日志问题如何解决
Apache Flink 实践问题之原生TM UI日志问题如何解决
53 1
|
25天前
|
存储 人工智能 大数据
The Past, Present and Future of Apache Flink
本文整理自阿里云开源大数据负责人王峰(莫问)在 Flink Forward Asia 2024 上海站主论坛开场的分享,今年正值 Flink 开源项目诞生的第 10 周年,借此时机,王峰回顾了 Flink 在过去 10 年的发展历程以及 Flink社区当前最新的技术成果,最后展望下一个十年 Flink 路向何方。
313 33
The Past, Present and Future of Apache Flink
|
3月前
|
SQL Java API
Apache Flink 2.0-preview released
Apache Flink 社区正积极筹备 Flink 2.0 的发布,这是自 Flink 1.0 发布以来的首个重大更新。Flink 2.0 将引入多项激动人心的功能和改进,包括存算分离状态管理、物化表、批作业自适应执行等,同时也包含了一些不兼容的变更。目前提供的预览版旨在让用户提前尝试新功能并收集反馈,但不建议在生产环境中使用。
895 13
Apache Flink 2.0-preview released
|
3月前
|
存储 缓存 算法
分布式锁服务深度解析:以Apache Flink的Checkpointing机制为例
【10月更文挑战第7天】在分布式系统中,多个进程或节点可能需要同时访问和操作共享资源。为了确保数据的一致性和系统的稳定性,我们需要一种机制来协调这些进程或节点的访问,避免并发冲突和竞态条件。分布式锁服务正是为此而生的一种解决方案。它通过在网络环境中实现锁机制,确保同一时间只有一个进程或节点能够访问和操作共享资源。
114 3
|
4月前
|
SQL 消息中间件 关系型数据库
Apache Doris Flink Connector 24.0.0 版本正式发布
该版本新增了对 Flink 1.20 的支持,并支持通过 Arrow Flight SQL 高速读取 Doris 中数据。
|
5月前
|
消息中间件 监控 数据挖掘
基于RabbitMQ与Apache Flink构建实时分析系统
【8月更文第28天】本文将介绍如何利用RabbitMQ作为数据源,结合Apache Flink进行实时数据分析。我们将构建一个简单的实时分析系统,该系统能够接收来自不同来源的数据,对数据进行实时处理,并将结果输出到另一个队列或存储系统中。
311 2
|
5月前
|
消息中间件 分布式计算 Hadoop
Apache Flink 实践问题之Flume与Hadoop之间的物理墙问题如何解决
Apache Flink 实践问题之Flume与Hadoop之间的物理墙问题如何解决
66 3

推荐镜像

更多