平安人寿基于 Apache Doris 统一 OLAP 技术栈实践

news2024/11/28 8:25:38

导读:平安人寿作为保险行业领军企业,坚持技术创新,以数据业务双轮驱动的理念和更加开放的思路来应对不断增长的数据分析和应用需求;以深挖数据价值、保障业务用数效率为目标持续升级大数据产品体系。自 2022 年起平安人寿开始引入开源实时数据仓库 Apache Doris 并基于此统一 OLAP 技术栈,通过统一的数据开发与服务打破了原有系统的数据“孤岛”、降低了需求的开发成本、加速了业务需求的交付周期,并满足了业务方更高数据时效性与查询响应度的要求,最终形成更开放、灵活、可扩展的企业级管理与分析大数据产品体系,实现数据价值的最大化释放,助力企业由“粗放型”业务增长转变为“精细化”效益提升。

作者:平安人寿大数据架构师 杜天敏|孙顺

保险业务的持续拓展,离不开企业的数字化战略创新。平安人寿秉承“一站式服务”的理念,以数据驱动服务质量,并早在 2005 年已经建立了离线数仓,将业务系统的数据集中存储于 Oracle 中并按业务需求开发数据报表,同时根据寿险的不同业务主题搭建了数据集市,以加快报表生成。

随着大数据时代的到来,传统数据库出现性能瓶颈,基于 Oracle 的数据仓库无法满足海量数据的存储、处理与应用需求,因此在 2016 年平安人寿引入了 Hadoop 建立寿险大数据平台。在近十年的大数据技术探索中,以提升数据质量、加快业务数据分析效率、加速数据价值变现为目标,平安人寿基于大数据平台构建了数据中台并引入数据治理体系,全方位保障业务用数效率、提升数据生产力。在数据应用层引入了多个开源大数据处理和分析组件,结合业务对于分析的实际需求开发了多个数据应用系统,为业务用户分析决策提供支持。

如今,随着数智化时代的到来,数据价值的重要性得到更深度认可,深挖数据价值成为新的目标。在此背景下,平安人寿坚持技术创新,以更加开放的思路来应对不断增长的数据分析和应用需求,升级大数据产品体系正是其中至关重要的一步。

为了进一步提升数据应用效率、降低多组件带来的运维和使用成本,平安人寿自 2022 年起开始引入开源实时数据仓库 Apache Doris,对多个数据应用系统进行了升级,基于 Apache Doris 统一了 OLAP 引擎层技术栈。Apache Doris 的引入为平安人寿大数据产品体系打破了原有系统的数据“孤岛”、统一了数据开发与应用层查询服务,降低了需求的开发成本、加速了业务需求的交付周期,并满足业务方更高数据时效性与查询响应度的要求,最终形成更开放、灵活、可扩展的企业级管理与分析大数据产品体系,实现数据价值的最大化释放。

本文将深入探讨大数据产品体系中应用系统的迭代升级经验,分享平安人寿在数据开发与服务化平台的创新应用实践,并介绍如何基于 Apache Doris 极速分析与融合统一的特性,助力企业运营效率提升、业务决策高效,实现由“粗放型”业务增长转变为“精细化”效益提升,通过以数据驱动的数智化转型,推进保险企业高质量发展。

早期大数据产品体系总览

WechatIMG789.jpg

早期大数据产品体系如上图所示,数据流转过程主要分为离线与实时两条链路:

  • 离线数据通过 Sqoop 、ETL 工具接入,借助 MapReduce、Spark 或 Tez 计算引擎对数据进一步处理转化、层层加工,基于 Hive 搭建离线数仓,并分别借助 PostgreSQL、Presto、Druid、HBase、Clickhouse 以及 Kylin 等不同组件支持离线数据查询与检索。
  • 实时数据通过 Kafka 消息队列实时写入,借助 Flink 计算处理,并将计算好的指标结果存储于 PostgreSQL 中,与离线数据关联查询支持上游应用层实时分析。

基于实际的分析需求,平安人寿开发了各类数据应用系统以支持不同业务人群进行决策分析,包括面向管理层的报表分析系统、面向总部运营人员的即席查询系统、面向一线业务人用的多维分析系统以及面向总部与分公司营销人员的人群圈选系统。

WechatIMG790.jpg

针对各类应用系统,在分析过程中对 OLAP 性能有不同的要求,具体如下:

  • 报表分析系统:管理层需要通过报表全景分析对经营数据进行探查,了解各线业务经营情况,以支持业务洞察、问题定位、趋势预测以及经营全貌概览。当管理者在查看数据时,对于报表产出时效性与查询速度有较高的要求,通常单个报表页面涉及成千上百个指标计算,这时则需要 OLAP 能够支持高并发和低延迟响应,使报表响应时间控制在百毫秒以内。
  • 即席查询:总部运营人员需要通过可视化分析直观地展示寿险理赔、核保、保全等数据结果,使运营人员能够更好地理解数据、及时地作出业务决策。在该场景中,实时、灵活地查询数据是业务运营人员最主要的诉求,因此 OLAP 需要满足数据及时更新与快速响应。
  • 多维分析系统:一线业务人员结合指标数据进行多维分析,从不同角度来审视业务的衡量指标,以支持更细致的业务数据剖析。该场景是企业内最常见的应用场景,承接了一线业务 90 % 的查询流量,每日数据查询访问量高达数十万,对后台数据计算与前台响应的速度要求较高,且希望能够进行更复杂的指标二次开发。
  • 人群圈选系统:总部与分公司营销人员需要通过对客户数据汇总计算后形成寿险用户属性、用户行为、用户消费等维度标签。营销人员借助多个标签找到潜在用户群体,以更精准投放与推广寿险产品。因此,灵活的开发与关联查询标签数据是营销人员最主要的诉求。

早期应用痛点

由于早期架构基于多个 OLAP 组件(包括 Presto 、PostgreSQL、Hive、Kylin、Druid、Clickhouse 以及 HBase)提供计算存储与查询服务,虽然能够满足业务要求,但架构复杂与链路过长势必会增加运维成本、学习成本,同时也无法保障系统之间多源数据的一致性。

更重要的是,随着用户规模的增长与业务场景多样化,数据的写入效率、查询时效性、后台稳定性也逐渐无法得到保证,时常影响业务分析效率。接下来,将详细为大家分析以上业务应用痛点、选型过程以及相应的解决方案,希望为读者带来关于架构升级的新视角。

01 报表分析系统

早期主要基于 Hive 与 PostgreSQL 支持该应用场景,当业务全域数据经过 ETL 清洗处理后,全量存储于 Hive 中。为了满足管理层快速查看报表的需求,开发人员首先会将数据进行多轮处理清洗,并采用预汇总结果的方式,将计算好的指标数据导入 PostgreSQL 中。

虽然这种方式能够应对查询低延迟响应的要求,但指标结果多轮计算会导致数据处理链路过长、各类成本的叠加,例如将数据拆分存储至 14 个 PostgreSQL 库中所造成的存储冗余与资源成本增加、将报表异地聚合与定制化开发所造成的开发成本增加、将 PostgreSQL 与应用端交叉使用所造成的运维成本增加等。

02 即席查询

早期即席查询场景由多个组件共同支持,其中 Hive 负责离线数据分层存储、PostgreSQL 用于存储指标结果数据、Presto 则作为查询引擎对 Hive 中数据查询下压。然而,由于业务查询严重依赖 PostgreSQL 中的指标数据,一旦未提前计算好指标,查询压力将全部交给 Presto,容易造成资源浪费、查询响应延迟等问题。同时,该系统的权限管理不清晰、业务之间没有资源隔离限制,所有业务运营人员均可以查询 Hive 底层中的数据,造成临时表多、查询任务并发过高、资源抢占等问题。

03 多维分析系统

早期该场景利用 Druid 组件提供维度与指标存储查询服务。在业务数据激增的过程中,平台容易出现导数失败或系统故障,Druid 节点重启时常需要 24 小时,系统超长重启时间对业务中断带来了巨大的风险。

同时,Druid 在查询性能中存在一定的局限性,如不支持关联查询、不支持精细去重。在理赔与用户数据 Join 的查询场景下,业务人员只能先将所需数据形成宽表满足查询需求;在面对用户数据精细去重时,只能对 Druid 组件功能改造。这些局限性不仅使查询复杂度增加,也会消耗大量的人力、学习、开发等成本。

04 人群圈选系统

早期该系统借助 HBase 提供标签计算与存储、Clickhouse 与 Kylin 作为人群圈选的查询引擎。
在标签构建过程中,由于 HBase 只能通过主键进行查询,不支持二级索引,无法使用复杂的查询语句和条件进行数据检索,开发人员需要通过主键来设计和实现标签查询,增加开发难度和复杂性。同时,HBase 的扩展能力也存在一定局限性,比如无法处理数字或日期等复杂数据类型、无法展开更细粒度的追踪调用。
在标签查询过程中,当系统面对 200 人的并发查询需求,Clickhouse 时常难以承载,需要借助 Kylin 通过 Cube 预聚合索引来分担查询压力。然而在两个组件共同提供服务时,Clickhouse 与 Kylin 配合灵活度不足成为目前系统最大的痛点之一。以查询 Array 字段为例,Clickhouse 支持 Array 而 Kylin 不支持,涉及到相关字段查询时,非常依赖于后端人工判断数据在哪种数据库中,再发送查询请求给 Clickhouse。除此之外,两个组件皆无法支持多表关联查询,也无法提供灵活的数值区间圈选。

大数据产品体系组件选型与思考

在上述各应用痛点中不难发现,组件过多容易出现数据存储冗余、数据不一致等问题,开发人员也需要来回导数整合组件之间的数据流,加重开发运维成本。并且,组件之间还会加重数据孤岛的现象,使数据之间缺乏关联与共享。基于此,我们希望选出一款综合性强、灵活度高的组件,能够统一 OLAP 技术栈,打通平台之间的数据读取,覆盖日常分析场景需求,实现高效导数与极速分析。除此之外,为了将数据治理更体系化,还希望引入的 OLAP 组件支持指标、标签等维度数据统一计算与存储,借用 API 为上游应用层提供统一查询服务

在经过调研选型后,如图所示,我们发现 Apache Doris 非常符合升级需求,不仅能够覆盖常规业务场景,满足写查性能需求,同时,基于 Apache Doris 统一技术栈也将大幅度降低架构复杂度,减少运维、开发以及使用成本,最大化提升架构性能。因此,平安人寿基于 Apache Doris 开启了新架构的升级之旅。

WechatIMG791.jpg

大数据产品体系基于 Apache Doris 融合统一的演进之路

在未引入 Apache Doris 之前,大数据产品体系借助不同 OLAP 组件提供数据存储、计算与查询服务。引入 Apache Doris 后,平安人寿以 OLAP 引擎统一为基础,在 Apache Doris 集群之上构建了一体化指标与标签设计平台,形成 “上下经营一张表”,完善经营指标管理体系,并通过 API 接口直通应用层,面向多种场景的统一数据服务

WechatIMG792.jpg

01 引擎优化:基于 Apache Doris 逐步统一 OLAP 技术栈

目前,平安人寿已使用 Apache Doris 替换了 HBase、PostgreSQL 、Presto 、Druid 组件,统一指标标签计算存储,支持报表分析、即席查询以及多维分析的应用,并已上线了管理层的报表应用系统、总部与一线运营人员的可视化分析系统。同时,平安人寿也已完成 Apache Doris 与各类数据源适配,进一步替换 Clickhouse、Kylin 组件。预计在今年 11 月份,Apache Doris 将上线并应用于营销机构人群圈选系统的生产使用。

通过 Apache Doris 一套系统同时满足数据存储、计算与查询服务,不仅避免了数据多轮计算带来的重复开发与冗余存储问题,更满足了更灵活、更细粒度、更高效的查询分析。平安人寿在应用上线后取得如下收益:

  • 降低各类资源成本:借助 Apache Doris 丰富的数据模型,数据无需经过多轮预聚合汇总,能够大幅度简化数据处理流程,降低运维成本的同时释放了原 14 个 PostgreSQL 数据库的资源成本压力。
  • 提升开发与查询效率:统一指标与标签数据开发在降本的同时更加速了业务交付时间,开发周期由原来的两周缩短至一天,效率提升 14 倍。在引入 Apache Doris 后,借助 Doris 设置了查询层级权限,使业务人员只可访问数据 ADS 层中的数据,解决数仓各表交叉使用的问题,提升指标数据复用率与使用效率;借助 Doris 优异的高并发性能满足了报表分析与多维分析场景下的秒级毫秒级的查询响应需求,查询提速达 5-10 倍。
  • 打破数据孤岛,实现闭环管理:在统一技术栈的优势下,Apache Doris 打破了各类应用系统数据孤岛的现象,为业务人员提供了更全面的数据、更细粒度的维度查询,实现精细化的查询分析、一致的业务洞察视角、闭环式的数据管理,使企业上下更精准地掌握寿险经营走向。

02 语义与服务层优化:基于 Apache Doris 统一指标和标签服务

当统一了 OLAP 技术栈后,平安人寿进一步引入统一语义层,将复杂查询语句进行拆解转化,简化加速 SQL 语句执行效率,并借助数据服务 API 接入的方式,连接各业务应用层。

借助这种方式,平安人寿全域数据从采集接入后进入 Doris 数仓,业务人员在后台通过拖拽实现指标标签数据自助定义和自动计算,生成的 SQL 会发送至 Doris ADS 层中。其中,若涉及复杂的多表关联查询,SQL 语句会在语义层中过滤,生成简单的执行语句。借助通用的 API 服务,调用 Doris 库中数据,统一支持业务分析在客户经营、代理人、保单、产品、理赔等方面的需求。目前,平安人寿基于统一服务化平台已支持日均数百万次的数据调用,每张报表的查询响应时间实现 200 - 300 ms ,实现多场景下极速、统一的数据服务

至此,平安人寿从数据设计直通数据服务,有效避免业务之间冗余开发与重复使用,缩短业务交付周期,加速查询响应时间。基于高内聚低耦合的统一服务平台,使查询分析能够及时配合业务需求变更,确保了企业内外数据流转的流畅性。

总结与未来规划

一站式数据门户是平安人寿大数据产品体系自始至终的构建目标,基于 Apache Doris 统一 OLAP 多个技术栈,并将标签与指标标准化开发与管理,共同提供统一的数据服务,使业务分析师能够进行自助式的数据探查,减少对技术人员的依赖,同时,通过方便快捷地访问、分析和可视化各种数据资源,实现数据高效、低成本的交付。

未来,平安人寿将进一步拓展 Apache Doris 湖仓一体化的应用,使用 Doris 替换 Presto 进行数据湖查询分析,让数据和计算在湖与仓之间自由流动。同时,还将引入 Apache Doris 多租户和资源隔离方案,完善应用系统间负载均衡性能,避免导数过程中出现任务并发高、CPU 内存占用大、查询性能受阻的风险,减少多用户数据操作时在同一集群内被干扰,将集群资源更合理的分配给各个应用系统。

最后,非常感谢飞轮科技团队一直以来对平安人寿的技术支持,加速平安人寿数智化转型进程。至此,各级业务人员能够加速数据分析效率,帮助企业及时发现和解决问题,从而提升运营效率;管理层能够通过海量数据洞察市场趋势、客户需求以驱动业务决策。

平安人寿将持续推动保险行业转型进程,带来更多业务机会与产品创新,也将持续参与 Apache Doris 的社区建设,将相关成果贡献回馈社区,实现价值共享!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1192523.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS3 用户界面、图片、按钮

一、CSS3用户界面&#xff1a; 在CSS3中&#xff0c;增加了一些新的用户界面特性来调整元素尺寸、框尺寸和外边框。CSS3用户界面属性&#xff1a;resize、box-sizing、outline-offset。 1、resize&#xff1a; resize属性指定一个元素是否应该由用户去调整大小。 <style…

YOLOv5 - common.py文件解读

&#x1f368; 本文为[&#x1f517;365天深度学习训练营学习记录博客 &#x1f366; 参考文章&#xff1a;365天深度学习训练营 &#x1f356; 原作者&#xff1a;[K同学啊 | 接辅导、项目定制](https://mtyjkh.blog.csdn.net/) &#x1f680; 文章来源&#xff1a;[K同学的学…

霍尔电流传感器如何进行可靠性测试?主要应用在哪些领域?

霍尔电流传感器广泛应用于航空航天、电源监测、飞行器状态监测、变速驱动设备、焊接设备供电电源、新能源汽车蓄电池管理系统等领域&#xff0c;在电流检测领域中有着重要地位和实用价值&#xff0c;在电驱系统中被称为新能源汽车的动力“心脏”。因此&#xff0c;霍尔电流传感…

Java枚举类的使用

说明: 根据设计图抽象的枚举类,一张模板背景图(会改变),二维码(传入参数生成),一个关闭的icon(固定不变) 设计图如下 枚举类 去除重复模板后共五个,根据需求编写枚举类如下,url则对应不同的模板,编写成后台人员的可配置项, public enum ImageTemplateEnum {PURCHASE("p…

3.前端调式

1. Elements 先来看这张图最上头的一行是一个功能菜单&#xff0c;每一个菜单都有它相应的功能和使用方法&#xff0c;依次从左往右来看 箭头按钮 用于在页面选择一个元素来审查和查看它的相关信息&#xff0c;当我们在Elements这个按钮页面下点击某个Dom元素时&#xff0c;箭…

【EI会议征稿】第三届能源动力与控制工程国际学术会议(EPECE 2024)

第三届能源动力与控制工程国际学术会议&#xff08;EPECE 2024&#xff09; The 3rd International Conference on Energy and Power Engineering, Control Engineering (EPECE 2024) 第三届能源动力与控制工程国际学术会议&#xff08;EPECE 2024&#xff09;将于2024年2月2…

如何用Python3+requests+unittest实现接口自动化测试实战

一、Requests介绍 首先让我们来看 Requests 官方的介绍&#xff1a; Requests is an elegant and simple HTTP library for Python, built for human beings. 翻译过来就是&#xff1a;Requests 是为人类写的一个优雅而简单的 Python HTTP 库。这个介绍很直白了&#xff0c;…

SUB-1G芯片--PAN3028 一款低功耗远距离无线收发芯片

PAN3028 是一款采用 ChirpIoT TM 调制解调技术的低功耗远距离无线收发芯片&#xff0c;支持半双工无线通信&#xff0c;工作频段为 370~590 MHz 和 740~1180MHz&#xff0c;该芯片具有高抗干扰性、高灵敏度、低功耗和超远传输距离等特性。最高具有-140dBm 的灵敏度&#xff0c;…

逐步学习 Swagger enum:从入门到精通

enum 是 Swagger 规范中用来定义枚举类型的一种方式。它允许开发者在 API 文档中明确列出该接口的参数、返回值或请求体中可接受的枚举值。通过使用 Swagger enum&#xff0c;开发者可以更清晰地描述 API 的输入和输出&#xff0c;提高 API 文档的可读性和可维护性。 enum 使用…

《QT从基础到进阶·十八》QT中的各种鼠标事件QEvent

1、界面标题栏事件&#xff1a; NonClientAreaMouseButtonPress 标题栏点击事件 NonClientAreaMouseButtonRelease 标题栏释放事件 bool CustomPopDialog::event(QEvent* event) {switch (event->type()){case QEvent::MouseButtonRelease://Event of mouse releasing wind…

基于 HarmonyOS 的 HTTPS 请求过程开发示例(ArkTS)

介绍 本篇 Codelab 基于网络模块以及 Webview 实现一次 HTTPS 请求&#xff0c;并对其过程进行抓包分析。效果如图所示&#xff1a; 相关概念 ● Webview&#xff1a;提供 Web 控制能力&#xff0c;Web 组件提供网页显示能力。 ● HTTP数据请求&#xff1a;网络管理模块&am…

6、规划绩效域

1、变更 &#xff08;1&#xff09;变更有哪几种原因&#xff08;类型&#xff09;&#xff1f; 纠正措施&#xff08;比如进度落后了&#xff0c;我们会有赶工和快速跟进的措施&#xff09; 缺陷补救 预防措施 更新措施 2、变更的目的和变更控制流程的意义 考点1&#…

Vue框架项目,给容器添加水印watermark

1、在/utils下新增一个名为waterMark.js的脚本 具体水印样式可以在代码里自行调节style 参数 - 水印内容, 加水印的容器, 是否显示时间 let watermark {};function getCurrentDateTime() {const now new Date();const year now.getFullYear();const month String(now.ge…

Vue入门教学——编写第一个页面

以Vue2.0为例子。 1、创建一个Vue项目 创建过程&#xff1a;Vue-cli&#xff08;脚手架&#xff09;的创建_vue脚手架创建项目命令-CSDN博客【注】项目名不能有大写字母。创建完毕后&#xff0c;使用VSCode打开项目文件夹&#xff08;其他编辑器也行&#xff09;。 2、运行项…

人声与背景音乐源分离

一.人声分离项目说明 人声分离是将音频录音分离为各个源的任务。该存储库是音乐源分离的 PyTorch 实现。用户可以通过安装此存储库将自己喜欢的歌曲分成不同的来源。用户还可以训练自己的源分离系统。该存储库还可用于训练语音增强、乐器分离和任何分离系统。 2.1 环境配置 …

嵌入式开发:ST-LINK V2.1仿真器,Type-C接口

标题ST-LINK V2.1仿真器&#xff0c;Type-C接口 之前做的版本虽然也是V2.1的&#xff0c;但使用的接口是USB的Micro形式&#xff0c;不支持正反插&#xff0c;也不兼容现在通用的手机数据线&#xff0c;出差的时候又要多带一条线。 现在终于把我的ST-LINK的接口改了一下 如下…

修改Android Studio默认的gradle目录

今天看了一下&#xff0c;gradle在C盘占用了40多G。我C盘是做GHOST的&#xff0c;放在这里不方便。所以就要修改。 新建目录名&#xff08;似乎无必要&#xff09; ANDROID_SDK_HOMEG:\SOFTWARES\android-sdk GRADLE_USER_HOMEG:\SOFTWARES\.gradle 修改目录 File->Setti…

“探秘!根据关键词搜索商品列表的虾皮API大揭露!“

要使用虾皮API根据关键词获取商品列表&#xff0c;您需要使用虾皮API的搜索功能。以下是使用Python和虾皮API根据关键词获取商品列表的基本步骤&#xff1a; 注册虾皮API账号并获取API凭证&#xff08;访问虾皮开放平台并创建应用以获取API凭证&#xff09;。安装必要的Python…

软件学习心得

标定表示&#xff1a;通过不断修改软件控制参数&#xff0c;使得系统得到最佳运行状态 通过xcp协议进行标定&#xff08;XCP寻址的通讯方式&#xff09; A2L文件是上位机解析ECU描述文件数据库&#xff1a;存放了变量名称、数据格式、转换规则&#xff0c;还存放了ECU的通讯信息…

python 把函数的值赋给变量

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 一个是模块的调用和一个自定义函数返回值赋值给变量 编写一个简单的函数模块&#xff1a; def run(name): list1 hello namereturn list1编写一个调用的脚…