首页 > 其他分享 >招联金融基于 Apache Doris 数仓升级:单集群 QPS 超 10w,存储成本降低 70%

招联金融基于 Apache Doris 数仓升级:单集群 QPS 超 10w,存储成本降低 70%

时间:2024-08-29 19:23:37浏览次数:13  
标签:数仓 架构 招联 实时 70% 数据 Doris

在竞争激烈的消费金融市场中,有效利用海量数据、提升业务运营效率是赢得市场的关键。早期招联采用典型的 Lambda 架构提供业务报表、数据运营、个性推荐、风险控制等数据服务,而 Lambda 过多的技术栈也引发了数据孤岛、查询效率不足、代码复用性差以及开发运维成本高昂等诸多问题。因此,招联引入 Apache Doris 对架构进行了升级,不仅替换了冗余的技术栈,还实现了实时数仓存储和计算引擎的统一,从而大幅精简了整体架构。

如今,招联内部已有 40+ 个项目使用 Apache Doris ,拥有超百台集群节点,个别集群峰值 QPS 可达 10w+ 。通过应用 Doris ,招联金融在多场景中均有显著的收益,比如标签关联计算效率相较之前有 6 倍的提升,同等规模数据存储成本节省超 2/3,真正实现了降本提效。

存在的问题

早期架构由实时数仓和离线数仓两套组成,是较为典型的 Lambda 架构。由于历史原因,整个架构非常复杂,用到 Hbase、kafka、Clickhouse、 Spark、Impala、Hive、Kudu、Vertica 等多种技术栈。

招联金融基于 Apache Doris 数仓升级:单集群 QPS 超 10w,存储成本降低 70%_金融案例

该架构虽功能完备,但由于其技术栈的复杂度及能力的局限性也带来了诸多问题:

  • 运维依赖性高:Lambda 架构包含较多的技术组件,且部分组件为闭源、内部逻辑不透明,强依赖厂家技术支持。
  • 资源利用率低:实时及离线两套架构间代码无法复用,这无疑增加了维护成本;且两套架构间资源无法合理共享和调度、数据无法复用,资源利用率非常低。
  • 数据时效性低:组件多、数据处理链路也长,多组件数据传输影响了时效性,降低了数据查询的效率。
  • 并发能力弱: Vertica、Impala 等部分查询引擎无法应对高并发场景的需求。

升级目标

基于以上待解决的问题,招联对未来即将升级的新架构提出了几点要求:

  • 架构简化:精简架构,统一组件标准,解决不同架构间兼容性问题;尽量采用开源软件,底层逻辑透明化,确保平台升级迭代可控,降低运维成本及难度。
  • 混合部署与弹性伸缩:需要满足在线混合部署的使用条件,支持弹性扩容,最大化资源利用率,实现降本增效。
  • 实时分析:搭建高性能实时数仓能力,可支持上万超高 QPS、秒级别查询响应,实现数据分析实时化。

在上述目标驱使下,招联迅速定位到 Apache Doris 这一开源实时数据仓库 ,Doris 以其简洁的架构设计、丰富的数据接口、高效的查询性能以及低廉的运维成本深得内部认可,可为后续的升级和优化提供强有力的技术支撑。

数仓生态全新升级

招联金融基于 Apache Doris 数仓升级:单集群 QPS 超 10w,存储成本降低 70%_实时仓库_02

基于 Apache Doris 的数仓生态相较于旧架构实现了极大的精简。主要变动集中在实时数仓部分,使用 Doris 替代了原先 Clickhouse、Hbase、Kafka、Vertica 等复杂的技术栈

尽管当前架构仍然保留了离线和实时两套处理链路,但在系统设计上实现了高度的代码可复用性,Doris 实时数仓所有代码均可从离线数仓 1:1 复制,以保证两套架构的逻辑一致性和维护便捷性。不仅如此,数据也最大程度在实时及离线数仓中进行了复用,当数据进入实时数仓,经过 DWD 层、DWS 层加工处理后会同时同步到离线数仓中,既提高了数据的时效性,又确保了两套架构数据的一致性。

Apache Doris 的引入,不仅大幅简化了数仓生态整体架构,硬件成本也实现约 10% 的降低(如累加开发、运维成本,将有更大比例的节约)。同时,得益于代码和数据的高复用率,架构的运维管理也变得便捷高效。

基于 Apache Doris 的实时数仓

招联金融基于 Apache Doris 数仓升级:单集群 QPS 超 10w,存储成本降低 70%_hadoop_03

具体到实时数仓来说,原先由 Flink、 Kafka 、HBase 应对实时场景,Clickhouse 、Vertica 及部分 Doris 能力应对准实时场景。当前只保留 Flink 进行数据采集,其他组件均替换为 Doris, Flink 采集数据到 Doris 中,经由 ODS、DWD、DWS、DM/APP 层处理后,由 Doris 直接提供查询及分析服务。

此外,存储和计算引擎也都统一到 Doris,并通过 CCR 实现 Doris 集群读写分离和数据同步,避免单点压力过大导致系统性能下降,提高了数据查询效率以及系统的稳定性。

如何避免数据乱序:

  • Watermark 机制:实时数仓中,Flink 负责将 ODS 中数据消费到 Doris 中,为避免该过程出现数据乱序,可利用 Watermark 机制来容忍数据迟到,确保数据的时效性和正确性。
  • 任务串行: 为确保数据的连续性,在调度系统中实现了多批次任务串行机制,上一批次任务未完成时,下一批次就不会开始。同时引入动态窗口机制,每当发起任务时,会自动获取上一批次最新业务节点到此刻时间节点之间的数据,既能保证了批次之间的相互独立,又确保了数据处理的连续性和时效性。

招联金融基于 Apache Doris 数仓升级:单集群 QPS 超 10w,存储成本降低 70%_实时仓库_04

招联金融基于 Apache Doris 数仓升级:单集群 QPS 超 10w,存储成本降低 70%_数据仓库_05

01 客群筛选场景

在市场营销、风险控制等精细化数据运营中,客群筛选是确认目标人群、制定营销策略的重要手段。

在客群筛选过程中,通常需要对集市中多张标签表进行关联计算,大约需要处理 2.4 亿条数据。之前使用 Vertica 计算引擎进行处理时,耗时 30-60 分钟;替换为 Doris 之后,仅用时 5-10 分钟即可完成,相较之前有 6 倍的性能提升。除了显著的性能提升外,Doris 作为一款开源的数据库,无需支付任何许可费用,这与商业化产品 Vertica 相比有着显著的成本优势。

招联金融基于 Apache Doris 数仓升级:单集群 QPS 超 10w,存储成本降低 70%_数据分析_06

02 高频点查场景

对于某场景需求,招联需确保系统的 QPS(每秒查询次数)达到 10万次,同时,单次接口响应时间不能超过 60 ms。这意味着,除去网络传输与程序逻辑处理的耗时后,数据查询耗时需控制在 15 ms 内,对系统的性能要求十分严苛。此外,系统还承载着每日庞大的数据更新任务,最大更新量高达 20 亿条,这要求系统不仅能应对高并发,还要确保在高负载下依然能够稳定运行。

之前招联使用 Redis 来应对高并发需求,其并发能力和稳定性基本可以满足要求。但 Redis 的核心问题在于使用成本非常高昂。相比之下,Doris 不仅能够支持单节点上万 QPS 的超高并发,也具备大规模数据的快速写入能力,2000 万数据仅需 4 分钟即可写入完成。最为关键的是,Doris 在成本方面展现出非常显著的优势。

在处理同等规模的数据量时,Doris 仅需 Redis 1/3 的内存,实现存储成本的大幅降低与效率的显著提升,真正做到了降本增效。

数据传输场景

从前文可知,依托于 Doris 跨集群数据复制(CCR)能力,已实现 Doris 集群读写分离;另外,因招联内部业务已大范围应用 Doris, CCR 也成为数据库间数据传输的必然选择。

Apache Doris 跨集群数据复制 CCR 能够在库/表级别将源集群的数据变更同步到目标集群,可用于提升在线服务的数据可用性、隔离在离线负载、建设两地三中心等。详情可参考往期技术解析博客:跨集群复制功能 CCR

从测试数据来可知 CCR 传输效果:

  • 存量数据:对于千万级数据,可在几分钟内完成同步;对于亿级别的数据,也可在预期范围内完成,比如 1 亿数据约为 220G,使用 CCR 仅耗时 1500+ 秒(25分钟)。
  • 增量数据:增量数据的同步性能则更加优异,千万级增量数据同步 1 分钟内即可完成,亿级别数据同步仅需不到 8分钟。

招联金融基于 Apache Doris 数仓升级:单集群 QPS 超 10w,存储成本降低 70%_数据分析_07

经验分享

1. CCR 超时: (TRollbackTxnResult_({Status:TStatus({StatusCode:OK ErrorMsgs:[l}) MasterAdd ress:<nil>}) )

网络波动存在丢包导致 RPC 超时,为确保网络稳定,可升级 CCR 版本至 2.1.4 版本可支持设置 RPC 超时时间。

2. Create table as 语法导致的 slot 一系列问题:

2.0 版本在处理 create table as 语句时,采用的是旧执行优化器,而因旧执行优化器为列字段裁剪,普遍存在 slot 相关问题。升级为 2.1 以上版本后,slot 相关问题得以解决;可以创建临时表 xxx,执行 set enable_nereids_dml = ‘true’来规避该问题。

结束语

截止当前,招联金融内部已有 40+ 个项目接入 Apache Doris ,总集群数近十个,集群节点超百个,某集群峰值 QPS 可达 10w+ 。未来,招联还将持续推广 Apache Doris 在内部的使用范围,并将对存算分离、数据湖能力进行探索及应用:

标签:数仓,架构,招联,实时,70%,数据,Doris
From: https://blog.51cto.com/u_14767244/11869461

相关文章

  • P7075 [CSP-S2020] 儒略日 题解
    P7075[CSP-S2020]儒略日题面:题目描述为了简便计算,天文学家们使用儒略日(Julianday)来表达时间。所谓儒略日,其定义为从公元前4713年1月1日正午12点到此后某一时刻间所经过的天数,不满一天者用小数表达。若利用这一天文学历法,则每一个时刻都将被均匀的映射到数轴......
  • 数仓之TABLESAMPLE采样
    前言在日常工作中,我们会对表中记录随机抽样然后探查,如何进行抽样就是本章要讲的重点。数仓中的抽样方法有很多,这里主要介绍一下:随机抽样、块抽样、桶抽样、分组抽样这四种,话不多说,直接上干货。随机抽样随机抽样就是给每行数据赋值一个随机数,排序之后进行抽样,主要分为:or......
  • 代码随想录算法训练营第一天 | 数组part01:数组理论基础,704. 二分查找,27. 移除元素 97
    数组理论基础数组是存放在连续内存空间上的相同类型数据的集合数组徐璈注意的是:数组的下标都是从0开始的数组内存空间是的地址是连续的正因为舒适的内存空间是连续的,所以在删除和增添元素的时候,需要移动其他元素的地址。在c++中,vector的底层实现是array,严格来说,vector是容......
  • [开题]flask框架医院设备管理系统1704r9(程序+论文+python)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着医疗技术的飞速发展,医院设备日益增多且种类繁杂,传统的设备管理方式已难以满足现代医院高效运营的需求。设备管理涉及设备采购、领用、......
  • 代码随想录算法训练营第二十天| 235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插
    235.二叉搜索树的最近公共祖先不想动脑子,沿用了普通二叉树的最近公共祖先,和昨天那题一样classSolution{public:TreeNode*lowestCommonAncestor(TreeNode*root,TreeNode*p,TreeNode*q){if(root==NULL||root==p||root==q)returnroot;......
  • 合宙LuatOS产品规格书——Air700EAQ
    LuatAir700EAQ是合宙的LTECat.1bis通信模块,采用移芯EC716E平台,支持LTE3GPPRel.13技术。该模块专为满足小型化、低成本需求而设计,具备超小封装和极致成本优势。Air700EAQ支持移动双模,内置丰富的网络协议,集成多个工业标准接口,支持USB2.0,以及远程OTA固件升级。主要特点包......
  • Python:RTX 40系列显卡安装 CUDA ,以 RTX 4070 为例,CUDA Toolkit 12.6 Downloads
    简简单单Onlinezuozuo:简简单单Onlinezuozuo简简单单Onlinezuozuo简简单单Onlinezuozuo简简单单Onlinezuozuo:本心、输入输出、结果简简单单Onlinezuozuo:联系我们:VX:tja6288/EMAIL:[email protected]文章目录Python:RTX40系列显卡安装CUDA,以RTX4......
  • 题解:CF70D Professor's task
    题意实现以下两种操作:往点集\(S\)中添加一个点\((x,y)\)。询问点\((x,y)\)是否在点集\(S\)的凸包中。分析动态凸包板子。建议先完成P2521[HAOI2011]防线修建。上题维护的是上半个凸包,本题维护上下两个。将凸包中的点按\(x\)排序,通过\((x,y)\)前驱......
  • wsl损坏,WSLRegisterDistribution Failed with Error 0x8007019e
    背景之前由于关机中断还是什么原因,导致wsl不能用了,今天心血来潮想要用一下wsl,于是找办法修了一下。过程根据下面这个文章进行修复的。https://thegeekpage.com/wslregisterdistribution-failed-with-error-0x8007019e/我执行了以下操作:关闭linux子系统,重启;开启子系统,重启......
  • LGP10702 [SNCPC2024] 下棋题解
    P10702[SNCPC2024]下棋本蒟蒻的第一篇题解定位博弈论(nim)+进制转换相关知识OIWIKI博弈论NIM进制转换正题读题所有k进制下所有数位的乘积为自身因子的数。他称之为LNC数。给出x枚棋子,然后LNC选定一个整数k(k≥2)。随后他们交替取走若干枚棋子,要求取走的棋......