亮网络解锁器,解锁网络数据的无限可能 了解详情
写点什么

星云零售信贷基于 Apache Doris 的 OLAP 演进之路

  • 2023-07-14
    北京
  • 本文字数:5416 字

    阅读完需:约 18 分钟

星云零售信贷基于 Apache Doris 的 OLAP 演进之路

腾梭科技是国内领先的零售金融数字化及安全服务提供商,是腾讯投资且在金融领域的战略合作伙伴,并与腾讯联合研发了“星云智慧信贷解决方案。在其信贷业务转型过程中,随着系统规模不断扩大,早期架构无法再满足业务需求,因此腾梭科技决定引入 Apache Doris 实现业务升级。本文将详细介绍其信贷业务如何基于 Apache Doris 在助贷系统日志分析场景的实践应用,实现毫秒级并发查询响应与极致存储性价比的性能表现。


作者 | 刘建波,腾梭科技研发总监


腾梭科技是国内领先的零售金融数字化及安全服务提供商,是腾讯投资且在金融领域的战略合作伙伴,专注于为持牌金融机构提供零售金融业务全流程解决方案。结合核心团队多年风控与反欺诈经验,腾梭与腾讯联合研发了“星云智慧信贷解决方案“和“伽利略智慧风控系统”,全方位解决金融机构在零售金融业务中遇到的技术难题,推动金融机构信贷风险管理由策略驱动转向人工智能模型驱动,增强业务精准营销能力,助力银行实现普惠金融,延伸金融服务广度和深度,打通服务实体经济的“最后一公里”。


作为互联网金融科技公司,腾梭科技由早期的网贷转型为以助贷为核心的业务模式,联合行业内各大友商行共同提供信贷服务。在获得一定客户群体基础后,腾梭科技信贷服务开展了全量客群的挖掘,开启线上以及线下结合或纯线上贷款全流程业务模式的探索,为新零售金融场景提供微服务技术应用,包括潜在客户信用评估、拒贷款分析、贷后管理、预期催收以及风控管理等方面。


基于以上业务模式的演进,系统技术架构也随之发生了变化与升级,从集中式的单机系统转化为分布式场景。由于引入了各大合作银行的 TP 系统(如 MySQL 、Oracle、PostgreSQL 等),使系统规模不断扩大,当传统的关系型数据库无法完成多种数据源之间的数据关联时,架构逐渐出现数据孤岛与数据割裂的现象,因此 OLAP 引擎的应用成为打破数据孤岛必不可少的工具。 对于助贷系统的架构升级,如何进行高效数据采集和处理、如何在庞大的客户数据中准确了解潜在客户需求与信用情况以加快贷款审批速度、如何通过客户数据管理实现高效精准获客、赋能营销策略,成为了我们业务重点发展方向。


为了满足这些要求,腾梭科技历经三代架构演进。第一代架构基于 Kettle 离线数仓,第二代架构引入 Trino 进行统一查询,在经过两代架构使用后发现其性能的不足,决定引入 OLAP 引擎。最终通过产品调研选择 Apache Doris 作为第三代架构核心进行数据统一存储与分析。本文将详细介绍三代架构的演进历程和应用实践,分享业务场景落地经验。

早期架构演进

架构 1.0 :基于 Kettle + MySQL 离线数仓

在业务初期,我们使用 Flume Sink 进行数据采集,利用 DolphineScheduler + Shell 进行数据调度,基于 Kettle 抽取离线数据进入关系型数据库中形成离线数仓,进行基础的 T+1 报表取数工作。由于 Kettle 仅支持离线取数的功能,不支持数据存储,因此数据始终保存在原始端。随着数据量的不断增大,当事实表条数达到千万级时,Kettle 的性能逐渐变得不稳定,单表查询任务的执行时间出现延迟现象,无法满足较大业务规模的使用需求。同时,Kettle 不支持多数据源之间的关联查询功能,在 TP 系统多样的情况下,查询效率无法得到保障。

架构 2.0 :基于 Presto / Trino 统一查询


针对第一代架构存在的问题,我们在第二代架构升级中借助 Trino 作为分布式 SQL 查询引擎进行联邦查询,实现多种类型数据源的即席查询和批量 ETL 查询,打通信贷、风控之间的多源异构数据查询需求。由于 Trino 缺少存储和管理元数据的功能,在面对高并发点查场景下导致联合查询响应较慢,查询效率依旧无法得到改善。

基于 Apache Doris 的新一代架构

为了彻底解决早期架构的问题,我们重新整理了架构的核心诉求:满足企业数据规模、支持灵活关联查询、架构使用和运维成本可控。基于此,我们对当下热门的 OLAP 产品进行了调研比对,如 Apache Doris、Clickhouse 等 MPP 数据库以及除 Presto 以外的其他 SQL on Hadoop 相关引擎。我们首先放弃了 SQL on Hadoop 这一类产品,因为其技术生态太过于庞大、涉及组件过多,考虑到架构投入产出比,可能造成团队的负担,成为技术债务。其次我们放弃了 Clickhouse 选项,主要因为它不支持 MySQL 协议、学习成本高、在多表 Join 查询性能中表现较差、对组件依赖较高等问题,并且开发人员需要花费大量成本在扩容与运维工作中,不满足我们的核心诉求。最终,我们发现 Apache Doris 不论是在大规模数据量下的查询性能还是使用难度与运维成本等方面都具有一定优势,因此决定引入其进行架构重构。



如上图所示,银行各类业务数据与用户日志由 Flume 与 Flink CDC 进行数据采集、DolphinScheduler 进行数据调度写入数仓。 Apache Doris 实时数仓主要负责数据分层存储与汇总处理,为应用端提供报表开发、查询分析等功能。在 ODS 层中,我们主要利用 Apache Doris 存储客户在发起贷款申请后所产生的身份证 OCR 识别附件、相关征信数据授权(如还款流水、支用记录、公积金或税务)等第三方数据,其中身份证 OCR 附件存放于对象存储中,ODS 层中主要负责存放其在对象存储的 URL 路径信息。这些原始数据会通过 DWD 与 DWS 层进行标签分类汇总,最终在 ADS 层形成各类统计数据,供前端业务人员查询与分析。


在搭建过程,Apache Doris 的高性能、极简易用、实时统一等诸多特性使我们的实时数据流程架构变得简单,大大降低了维护和使用成本。新架构的升级为我们优化了早期架构的痛点,具体表现如下:


  • 元数据管理: Apache Doris 通过对外 API 提供元数据管理功能,彻底解决了早期架构中多源异构数据无法联合查询的痛点,实现在各 TP 系统中无缝衔接地进行数据开发。

  • 查询性能提升: Apache Doris 完全实现了向量化查询引擎,能够胜任各种查询并发、吞吐的场景并且性能表现强悍,解决了第二代架构中 Trino 在查询并发响应慢的问题。

  • 运维难度低: Apache Doris 基于 Sytemd 进程保活,具备多副本+ 副本自动均衡机制,除了需要定时备份元数据外几乎可以达到零运维,极大降低了运维成本与难度,实现降本增效的需求。

  • 使用简单: Apache Doris 兼容 MySQL 协议,能够支持使用标准 SQL,不仅极大降低了业务人员的学习成本,还可以轻松实现 MySQL 业务迁移至 Apache Doris,带来开发效率的提升。

新数仓架构搭建经验

在新架构搭建完成后,我们开始基于 Apache Doris 进行应用实践,通过并发查询加速与数仓底座建设两方面助力复杂场景下的业务应用。以下是我们总结出来的一些经验:

并发查询加速

风控分析是星云零售最最常见的业务,由于金融交易系统会涉及大量的交易日志与明细日志等数据,存在大量高并发低延时的点查询以及高吞吐低并发的大表关联等需求场景,需要在多场景下保持一致的高性能分析体验,因此我们最重要的实践就是并发查询加速。



在引入新架构之前,我们使用 MySQL 预聚合的方式进行数据分库,这会造成 IO 与 CPU 消耗非常大的问题,导致 MySQL 系统崩溃。在引入 Apache Doris 之后,我们采用 Unique Key 模型对明细数据进行存储,引入 Aggregate Key 模型进行数据预聚合,为后续的物化视图与实时报表做准备。在社区的帮助下,我们还使用了逻辑分区和物理分桶进行了 Key 列的优化,利用 Colocation Join 的方式创建业务关联表模型,保证分区和分桶、分区键以及 Key 值统一一致。如上图所示,各业务人员在进行大表关联查询时,不需要再进行跨节点 Shuffle Join,可以直接通过本地节点查询,避免了数据在网络传输中带来的性能开销,有效提升了高吞吐场景下的查询效率。



除金融交易系统外,风控分析还需要进行特征指标计算与代宗行为分析等业务。Apache Doris 的 MPP 架构完全支持了业务所需的高吞吐和多表查询能力,并且在列表多维度查询时,可以根据不同的业务场景,借助其 Bloom Filter 物化索引机制进行 Key 列的优化设计。这种方式不仅改善了客户的查询体验,还能够大幅提升查询效率,达到毫秒级查询响应。

数仓底座建设


在与 B 端合作开展助贷业务过程中会产生大量的离线报表业务,因此,我们首先基于 Apache Doris 作为数仓底座,利用调度工具 DolphinScheduler、日志采集工具 Flume 以及数据同步工具 DataX 等进行数据采集。同时,通过增量或者全量的方式将数据从业务端或者异构数据源中采集落库至 Apache Doris 数据仓库中,形成数据集市。


在该集市中,业务人员可以方便地提取所需数据进行报表开发,并展示于实时交易大屏,以支持风控数据分析和业务决策。为了确保数仓稳定性和性能,我们利用了 Grafana 和 Prometheus 对集群状态进行监控,主要用于关注 Apache Doris 的内存使用情况、 ETL 过程中 Compaction 的稳定性以及查询响应时间。通过这些监控工具,可以帮助我们及时发现数据集市的运行效果与异常情况。

Apache Doris 助力信贷业务场景落地

基于 Apache Doris 的功能实践,我们建设了星云零售管理后台、自助报表等一体化业务分析平台。接下来,我们主要介绍在业务场景落地过程中,风控大数据报表平台、统一日志存储分析与用户行为分析的业务实践。

交互式分析查询,实现风控大数据平台智能化


如上图所示,星云管理后台会对风控数据进行分析,涉及授信情况分析、用信分析、放款结构分析、拒绝申贷原因分析等报表业务,我们希望通过风控报表平台实现风控策略化、智能化,提升线上的风控能力、提高审批效率并完善信贷业务流程。以授信情况分析为例,具体的操作流程如下:


  • 数据调度: 指标数据首先通过 DolphinScheduler 和 Shell 任务编排实现风控离线数仓各分层数据的调度与流通、统一管理。

  • 数据同步: 借助 Apache Doris 的 JDBC Catalog 以 Insert Into 的方式,将多个外部源表中的数据增量导入数仓贴源层,实现统一建模、统一数据口径。

  • 数据处理: 在 Apache Doris 的 DW 层中进行数据关联分析、聚合、日区分落盘等操作,最终结合维表数据共同创建物化视图或者落地大宽表。基于 Apache Doris 的分层存储与数据处理,我们的报表开发时间从天级别提升至小时级别,大幅提高报表开发的效率。

  • 数据分析: 基于以上三个步骤,业务人员可以在平台中进行自定义交互式分析查询,如查询某一段时间内授信额度区间的占比,并以饼状图形式呈现。

极致性价比,达成统一日志存储分析


星云零售在业务运营过程中会存在大量的日志存储分析场景,如使用 API 访问异常日志。在引入 Apache Doris 之前,我们使用 Grafana + Loki 进行多节点本地支持存储,这种方式不仅无法保证存储统一性,并且增加运维成本。


在引入 Apache Doris 后,我们基于 Stream Load 自定义开发 Flume Sink 与 Tail Dir 日志采集组件,能够支持动态配置,使节点灵活且易于扩展。我们还采用了 Apache Doris 的动态分区表模型,实现动态添加分区或者删除分区,减少了运维过程中的使用负担。更重要的是,Apache Doris 提供了极致的列存储压缩比,使存储成本极大幅度下降,并且 2.0 版本的倒排索引功能支持文本类型的全文检索,也能对普通数值日期的等值、范围查询进行加速,能够从海量数据中秒级检索出满足条件的日志,更加契合我们后续对日志数据分析的需求。总而言之,基于 Apache Doris 的实时日志存储功能为我们提供了全面的实时预警监控、实时监控大屏、故障分析等能力,真正意义上实现统一实时的日志存储分析。

JSON 统一存储 + 丰富解析函数,助力用户行为日志分析


在营收信贷业务过程中,我们会对潜在客户进行广告投放,通过自动获取用户行为日志数据,分析信贷需求来加强营销活动、提升获客效果,达到精准投放的目的。我们借助 Stream Load 自定义的日志采集工具收集用户在小程序或者 App 中的访问日志,利用 JSON 统一存储功能与丰富的解析函数对行为日志进行实时查询分析、跑批离线宽表加工等操作。


在这一过程中,Apache Doris 的引入使用户行为日志降低 70% 的存储成本,同时提供了丰富且开箱即用的用户行为分析函数,避免业务人员重复进行复杂 SQL 函数编写、验证、推导再应用,极大提高了数据开发效率,为后续广告精准投放提供了强有力的数据支持。

总结收益

当前,腾梭科技星云零售信贷业务基于 Apache Doris 搭建了高度统一实时的数据仓库,实现星云管理后台中的风控报表管理、运营报表管理、用户行为日志分析等信贷业务应用。 Apache Doris 的引入为我们带来以下收益与成果:


  • 灵活数据分析: 不论是业务端还是数据开发端,都可以基于 Doris 支持自定义导数、动态配置,实现灵活及易扩展的多维数据分析。

  • 查询快速响应: 从业务层面来看,现阶段的风控信贷点查、偏离计算等复杂场景都可以基于 Apache Doris 进行多表关联,并且实现毫秒级查询响应,大幅提升查询效率。

  • 交付效率提升: 助贷业务的核心业务为客户管理,在引入 Apache Doris 后,其数据分层存储与开箱即用的分析函数,在用户行为、信用评估、风险控制等多方面提供了有效报表分析,以挖掘更多潜在用户,大幅提升交付效率,实现精准获客的目标。

  • 综合成本降低: 与之前数据源端存储不同,Apache Doris 极致的存储压缩比,降低了 70 % 的存储成本。同时,Apache Doris 支持集群节点进程保活、自动均衡极致,几乎达到零运维,为公司运维成本控制提供了核心收益。

未来规划

未来,我们希望基于 Apache Doris 冷热分层技术实现统一的数据归档功能,将冷数据、历史数据定时进行归档,进一步优化数仓存储空间。同时,利用 Apache Doris 湖仓一体功能实现智能数据网关,使 Schema 列类型等元数据能够映射至 Apache Doris 的数据结构中,形成统一元数据映射结构,提供一致性的查询体验。

2023-07-14 16:113428
用户头像
李冬梅 加V:busulishang4668

发布了 821 篇内容, 共 390.4 次阅读, 收获喜欢 1008 次。

关注

评论

发布
暂无评论
发现更多内容

经济日报刊评:数字人民币应用场景拓展

CECBC

太为难我了,阿里面试了7轮(5年经验,拿下P7岗offer)

Java 程序员 架构 面试

金融科技加速经济低碳转型 但面临政策、市场、技术等多方挑战

CECBC

手写一个简单的SpringBoot Starter

赵镇

setTimeout(〒︿〒) 请原谅我一直以来对你的忽视

编程三昧

JavaScript 大前端 定时器 基础知识

「SQL数据分析系列」8. 分组和聚合

数据与智能

数据库 sql 大数据 存储 计算

Three.js杂记(十二)—— VR全景效果制作·中

空城机

大前端 three.js 6月日更

双非渣本后端,三个月逆袭字节,入职那天“泪目”了

Java架构师迁哥

模块6 学习总结

TH

如何应对不好回应的沟通场景?

石云升

读书笔记 沟通 6月日更

备战618!分布式电商项目:天猫Java亿级高并发架构设计笔记

Java架构追梦

Java 阿里巴巴 架构 面试 亿级架构

四个决策树让你彻底掌握 HTTP 状态码

看山

HTTP 6月日更

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

Java 程序员 架构 面试

拆分电商系统为微服务

唐江

架构实战营

排序算法之冒泡排序

xcbeyond

排序算法 冒泡排序 6月日更

Angular | 浅谈Angular错误处理方式

devpoint

angular.js angular 6月日更

现在后端开发都在用什么数据库存储数据?

Linux服务器开发

MySQL 数据库 后端 中间件 Linux服务器开发

前端 JavaScript 之『节流』的简单代码实现

编程三昧

JavaScript 大前端 js 防抖节流 代码实现

🌏【架构师指南】分布式事务(XA)与一致性算法(Paxos、Raft、Zab、NWR)

洛神灬殇

ZAB raft协议 paxos协议 6月日更

Redis入门一:简介

打工人!

数据库 nosql redis 6月日更

网络攻防学习笔记 Day49

穿过生命散发芬芳

网络攻防 6月日更

模块6作业 拆分电商系统为微服务

TH

架构实战营

模块6课后作业

方堃

架构师实战营 模块六作业(拆分电商系统为微服务)

好吃不贵

业务架构

架构实战营 模块六:课后作业

Ahu

架构实战营

冯 · 诺依曼结构原理及层次结构分析

若尘

计算机组成原理

Dajngo网站开发---Task2

IT蜗壳-Tango

6月日更

架构实战营 模块六作业

netspecial

架构实战营

电商系统微服务拆分设计

Lane

堆与堆排序

wzh

Java 数据结构 算法 堆排序 数据结构与算法

作为程序员,你会使用Notion吗?

Bob

程序员 Notion 笔记

星云零售信贷基于 Apache Doris 的 OLAP 演进之路_数据湖仓_SelectDB_InfoQ精选文章