招商信诺人寿基于 Apache Doris 统一 OLAP 技术栈实践

news2024/11/23 22:38:47

本文导读:

当前,大数据、人工智能、云计算等技术应用正在推动保险科技发展,加速保险行业数字化进程。在这一背景下,招商信诺不断探索如何将多元数据融合扩充,以赋能代理人掌握更加详实的用户线索,并将智能分析贯穿业务全链路,实现对用户、产品、场景策略的全面洞察与闭环迭代。本文将详细介绍招商信诺在大数据基础建设方面的探索之旅,从最初为线报表、Ad-hoc 分析提供服务的 OLAP 引擎,逐步发展至基于 Apache Doris 构建的统一实时数据仓库,通过一套架构实现各业务领域的多元数据实时分析与融合统一管理,最终实现保险一线业务降本增收的目标。

作者:招商信诺大数据平台研发团队


招商信诺人寿是由招商银行与信诺集团中外合资的寿险公司,为企业和个人提供涵盖保险保障、健康管理、财富规划等产品及服务。目前,招商信诺已累积服务客户超千万、完成理赔客户超百万,并凭借一站式便捷的健康管理服务、可灵活配置“定制化”的保险方案获得广大用户的持续选择与信赖。

面对全球数据量爆炸性增长的趋势,数据的时效性与准确性对企业精细化运营越来越重要。我们希望通过数据能够快速感知客户行为、定位客户问题、高效匹配用户所需的产品与服务,以达到精细化业务营销、拓宽可保边界等目标。

随着业务不断拓展、分析场景逐渐多元化,业务分析师的要求也变得更为复杂,不仅要求数仓能够快速开发数据报表,还需要实现流批一体、湖仓一体、多元化数据类型的统一分析与管理。在大数据基础建设中,这些融合统一的特性变得至关重要。在这样的背景下,持续升级与改进数仓架构,从最初仅支持 BI 报表、数据大屏的一代架构到采用多个系统和组件提供数据服务的二代架构,再到如今新一代统一实时数据仓库 ,通过 Apache Doris 一套组件实现了架构的简化、技术栈的统一、数据的统一管理与分析,不仅提升了数据处理效率,并且满足了更多样化的数据分析需求。

本文将详细介绍招商信诺在数仓架构迭代与升级过程中如何基于 Apache Doris 统一存储、计算和查询出口、如何满足写入时效性的要求、如何在高并发点查与多表关联等场景下实现极速查询性能,为销售线索高效写入与查询、客户留存信息高频更新、服务场景数据一致打通等方面提供助力,进一步将客户线索转化为私域商机,赋予企业在经营、服务、营销等多方面的能力。

架构 1.0 :多组件准实时数仓

最初的业务需求是希望通过数仓来承载面向 C 端用户的保单自助查询、面向业务分析人员的多维分析报表以及面向管理者的实时数据大屏(Dashboard)三类业务场景。数仓需要满足业务数据的统一存储和高效的查询能力,以支持业务高效分析决策,同时还需要支持数据回写,以实现闭环式业务运营。

  • 保单自助查询:用户通过招商信诺 APP 根据保单 ID 自助查询承保合同,或者通过不同维度(如承保时间、保险类别、理赔金额)进行自定义筛选查询,查看保单生命周期内的信息。
  • 多维报表分析:依据业务需求,业务分析人员通过开发明细数据、指标维度报表,获得关于保单在产品创新、费率、反理赔欺诈等方面的业务洞察,并据此支持经营策略调整。
  • 数据大屏(Dashboard):主要用于某银行渠道、某分公司的实时大屏,通过对指标等数据的统一汇总,将热门险种、每日销售额、保险种类缴纳总额与占比、历年保险缴纳涨幅趋势等信息展示于实时大屏中。

业务初期对数据服务的要求较为单一,主要是以提升报表数据的时效性为主,因此在数仓搭建的过程中,我们采用典型的 Lambda 架构,通过实时与离线两条链路分别进行数据采集、计算与存储,其中数仓主要采用宽表模型设计以支持对指标数据、明细数据的查询分析。

招商信诺1.png

由架构图可以看到,FlinkCDC 负责实时数据采集,我们自研的 Hisen 工具(包括 Sqoop、DataX 以及 Python)负责离线数据采集。原始数据采集后,实时数据利用 Flink 进行计算、离线数据交由 Hive 进行批处理,最终导入至不同的 OLAP 组件(包括 Presto、Clickhouse、HBase 以及 MySQL)中,由 OLAP 向上层业务提供数据服务,其中各组件在架构中分别扮演不同的角色:

MySQL

按照业务需求,在数据完成计算后主要用于存储指标数据。目前,数仓表的数据量已经突破千万级, 而 MySQL 存储具有局限性,容易出现执行时间过长、系统返回错误等问题。

Clickhosue

Clickhouse 在单表数据读取的性能上表现出色,在大表 Join 性能较弱。随着业务场景的增加,实时数据量不断叠加与更新下,Clickhouse 面对新的业务需求存在一定局限:

  • 为减少指标重复计算,需要引入星型模型进行多表关联与高并发点查询,而 Clickhouse 无法支持;
  • 当保单内容发生变更时,需要数据实时更新写入,而 Clickhouse 缺少实时事务的支持,面对数据变更时需要重新生成宽表以覆盖旧数据,在数据更新时效性要求方面存在一定不足;

HBase

主要用于主键查询,从 MySQL 与 Hive 中读取用户基础状态数据,包括客户积分、承保时间、累积承保保额。由于 HBase 不支持二级索引,对于非主键的数据读取较为局限,无法满足关联查询场景,同时 HBase 也不支持 SQL 语句查询。

Presto

由于上述组件在数据查询方面的场景限制,我们还引入了 Presto 作为离线数据的查询引擎,用于与 Hive 中的数据进行交互式分析,为上游端提供报表服务。

在数仓 1.0 版本上线后,已在超过 10 余家分公司中上线使用,开发了大量的数据大屏以及 BI 报表。随着业务范围的不断拓展,营销、运营以及客户服务等场景对数据写入与查询性能提出了更高的要求,然而混合使用四个组件提供数据服务的 1.0 版本架构在实际业务中存在一些挑战。为了避免由于架构组件过多所产生的运维成本升高、研发人员学习成本升高等问题,也为了确保在离线与实时链路中多源数据的一致性,我们决定展开架构更新迭代之旅。

组件需求与系统选型

为满足业务需求,我们需要为架构“减负”,尽可能地缩短数据处理过程。而 1.0 架构由于组件过多,链路冗余等问题势必降低了数据存储与分析的性能与时效性。因此,我们希望寻找一个 OLAP 系统既能覆盖大部分的业务场景,也能够降低复杂技术栈带来的开发、运维和使用成本,还能最大化的提升架构性能。具体要求如下:

  • 导入性能:具备实时写入、实时更新的能力,并支持高吞吐的海量数据写入。
  • 查询性能:提供维度数据以及交易数据的查询服务,具备高性能的海量数据实时查询的能力。
  • 灵活性多维分析、自助查询能力:不仅能够支持主键索引以提供点查与范围查询,还能够支持多维度检索分析,提供对亿级数据的表关联查询,实现灵活动态、下钻上卷的业务数据分析。
  • 数据平台架构简化:需要一款综合能力强的组件以替换当前冗余架构,满足在实时与离线数据的读写、不同场景下的高查询性能、简单易用的 SQL 语句查询等能力。

基于此,我们开始系统选型,将市面上热门组件与现有架构进行多方面对比,评估是否满足业务方对组件的需求,最终在众多 OLAP 中锁定了 Apache Doris,具体原因如下:

  • 支持低延迟实时写入: 支持 FlinkCDC 在海量数据下的高吞吐写入,提供实时数据对外服务;支持主键表模型写时合并,实现微批高频实时写入;支持 Upsert 与 Insert Overwrite,保证高效的数据更新。
  • 保证数据一致有序: 支持 Label 机制和事务性导入,保证写入过程中 Exactly Once 语义;支持主键模型 Sequence 列设置,保证数据导入过程中的有序性。
  • 查询性能优异: Doris 支持 Rollup 预聚合与物化视图完成查询加速;支持向量化处理以减少虚函数调用和 Cache Miss;支持倒排索引以加速文本类、普通数值、日期类等全文检索或范围查询。
  • 支持高并发点查询: 支持分区分桶裁剪,通过 Partition 将时间分区、设置 Bucket 数量过滤非必要的数据,以减少底层数据扫描,实现查询快速定位;此外,在 Doris 2.0 版本中还新增了行式存储格式、短路径点查、预处理语句等一系列优化,进一步提升点查执行效率、降低 SQL 解析开销。
  • 支持多种数据模型: 支持星型模型,满足亿级数据表关联查询需求;支持大宽表聚合,提供单表极速查询性能与多维分析能力。
  • 架构简单、易运维、易扩展、高可用: Doris FE 节点负责管理元数据与多副本、BE 节点负责数据存储与任务执行。这使得架构在部署与配置方面操作简单,易于运维;同时 Doris 能够一键加减节点、自动副本补齐与节点间的负载均衡,易于扩展;且当单节点故障时,Doris 依旧能够保持集群稳定运行,满足我们对服务高可用、数据高可靠的要求。

招商信诺2.png

从对比图中我们也可以看出,不论是实时还是离线场景,Apache Doris 的综合能力最均衡也是最优秀的一个,能够支持自助查询、实时与离线 OLAP 分析能力、高并发点查与表关联等查询场景,并且写入性能、高可用、易用性等方面表现优异,是一款能够满足多个业务场景的组件。

架构 2.0:基于 Apache Doris 统一技术栈

招商信诺3.png

数仓架构的两代版本主要在存储、计算、查询分析方面有很大不同。1.0 版本依赖于多个组件共同构建 OLAP 分析引擎,在业务拓展阶段逐步出现架构存储冗余、数据延迟、维护成本过高等问题。架构 2.0 版本基于 Apache Doris 升级改造,替换了 Presto、MySQL、HBase、Clickhouse 四个组件并将数据迁移至 Apache Doris 中,以提供统一的对外查询服务。

新架构不仅实现了技术栈的统一,还降低了开发、存储与运维等各方面的成本支出,实现了业务与数据的进一步统一。基于 Apache Doris 一套系统能够同时支撑在线与离线任务处理,实现数据存储统一;能够满足了不同场景的数据分析服务,支持高吞吐的交互式分析与高并发的点查询,实现业务分析统一

01 加速数据分析效率

通过 Doris 极速分析性能,在面向 C 端用户的高并发点查询场景中,QPS 能够达到数千至数万,对于数亿或者数十亿数据的查询达到毫秒级响应; 利用 Doris 丰富的数据导入方式和高效的写入能力,实现秒级写入时延,并利用 Unique Key 写时合并来进一步加速在并行读写阶段的查询性能。此外,我们还利用了 Doris 冷热分层将海量的历史冷数据存储于廉价的存储介质中,降低了历史数据的存储成本并提升了对热数据的查询效率。

02 降低各类成本支出

新架构较于原有架构,核心组件的数量减少了一半,平台架构得以大幅简化,运维成本大大降低。此外,Apache Doris 使数据无需再通过不同组件完成存储与查询服务,统一了实时与离线业务负载、降低了存储成本;数据服务 API 对外提供服务时也无需再合并实时与离线数据,使数据服务 API 接入时的开发成本缩减至 50 %;

03 保证数据服务高可用

因为 Doris 的统一存储、计算和服务的数仓架构,平台整体灾备方案易于实施,不再担心多个组件造成数据丢失、重复带来的问题。更重要的是,Doris 自带的跨集群复制 CCR 功能,能够提供集群间数据库表秒级至分钟级的同步,当系统崩溃导致业务中断或者丢失时,我们可以从备份中快速恢复。

Doris 跨集群复制 CCR 功能两大机制满足了我们在系统服务可用性方面的抢需求,保证了数据服务高可用,具体如下:

  • Binlog 机制:当数据发生变更时,通过该机制我们可以自动记录数据修改的记录与操作,并且对每个操作构建了递增序列的 LogID,实现数据的可追溯性与有序性。
  • 持久化机制:在系统崩溃或者发生突发事件后,通过该机制能够将数据持久化至磁盘来确保数据的可靠性和一致性。

保险一线业务收益与实践

目前,基于 Apache Doris 统一技术栈的实时数仓已经在 2022 年 Q3 上线并投入生产环境使用,用于支撑海量数据的 OLAP 高效分析能力,并在平台上支撑了更多业务相关的场景。在业务经营方面,销售线索的规模也在不断扩大,目前已达到亿级。随着 Apache Doris 的功能的进一步引入,由数仓支持的一线业务营收也在持续增长中。

  • 销售线索高效追踪: 目前,我们已经在销售与业绩类追踪上线 30 + 新场景应用,业务人员能够基于销售线索准确、快速地获取客户在官网、APP、商城、公众号、小程序等渠道的保险测评、直播参与数据、企微活动参与数据、免险投保等轨迹与数据,并通过 Apache Doris 多维分析进行线索转化,最终实现精准触达客户、有效抓住客户动机、及时跟进成单。
  • 客户留存信息高频更新: 在新客户转化与老客户关怀类已上线 20 + 新场景应用,业务场景的顺利进行离不开数据平台对于客户留存信息的高频更新能力,通过 Apache Doris 对老客户数据定期分析,能够有效查询客户在不同阶段的保险业务需求,发现老客户的保障缺口,拓宽老客户可保边界,进一步增加业务经营收益。
  • 业务场景数据一致打通: 在客户服务方面,我们更关注为客户提供一致化的体验与快速响应的服务。目前,我们已经上线了 20 + 相关服务体验的新场景应用,避免出现信息不对称、数据不一致的情况,保证各个销售环节的数据在承保、理赔、客服咨询、会员中心等流程中能够一致统一。

未来规划

Apache Doris 的引入在实时数仓架构简化与性能提升方面起到了至关重要的作用。目前,我们已经基于 Apache Doris 替换了 Presto、Clickhouse、MySQL、HBase 多个组件以实现 OLAP 技术栈统一、各类成本降低,并提升导入与查询性能。

同时我们也计划进一步基于 Doris 在批处理层(Batch Layer)的尝试应用,将离线数据批处理统一在 Doris 中进行,解决 Lambda 架构在实时和离线链路中成本叠加、无法兼容的问题,真正实现架构在计算、存储、分析的统一。同时,我们也将继续发挥 Doris 统一的优势,利用 Multi-Catalog 让数据在湖与仓之间自由流动,实现数据湖和多种异构存储之上无缝且极速的分析服务,成为一套更完整、更开放统一的大数据技术生态系统。

非常感谢 SelectDB 团队一直以来对我们的技术支持。至此,招商信诺数据仓库不再局限于简单的报表场景,通过一套架构支撑了多种不同场景的数据分析、满足了实时与离线数据的统一写入与查询,为产品营销、客户运营、C 端以及 B 端等业务提供数据价值,使保险人员更高效地获取数据、更准确地预知客户需求,为企业获得先机。

未来,我们也会持续参与到 Apache Doris 社区建设中,贡献保险行业在实时数仓的建设经验与实践应用,希望 Apache Doris 不断发展壮大,为基础软件建设添砖加瓦!

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

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

相关文章

mysql redis的区别

.mysql和redis的数据库类型 mysql是关系型数据库,主要用于存放持久化数据,将数据存储在硬盘中,读取速度较慢。 redis是NOSQL,即非关系型数据库,也是缓存数据库,即将数据存储在缓存中,缓存的读取…

Stm32_点灯

利用HAL库基本语法实现C8T6点灯操作 引脚配置 PB3、4 、5 //设置为output PB6、7 设置Input且为上拉初始化代码: 由于3、4、5引脚默认输出为0灯泡默认点亮所以要将他们初始化为1 void Inint(){//初始化灯泡函数熄灭HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PI…

无涯教程-JavaScript - RADIANS函数

描述 RADIANS函数将度数转换为弧度。度和弧度之间的转换是通过以下关系式计算的 180度π弧度 其中π是数学常数,PI3.14159265358979 ... 语法 RADIANS (angle)争论 Argument描述Required/OptionalAngleAn angle in degrees that you want to convert.Required 适用性 E…

主动写入流对@ResponseBody注解的影响 | 京东云技术团队

问题回溯 2023年Q2某日运营反馈一个问题,商品系统商家中心某批量工具模板无法下载,导致功能无法使用(因为模板是动态变化的) 商家中心报错(JSON串): {"code":-1,"msg":&…

http概念

概念:HTTP,hyper text transfer protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。 特点: 1.基于TCP协议:面向连接,安全。 2.基于请求-响应模型的:一次请求对应一…

2.求循环小数

题目 对于任意的真分数 N/M &#xff08; 0 < N < M &#xff09;&#xff0c;均可以求出对应的小数。如果采用链表表示各个小数&#xff0c;对于循环节采用循环链表表示&#xff0c;则所有分数均可以表示为如下链表形式。 输入&#xff1a; N M 输出&#xff1a; 转换…

内容创作者如何下载头条号西瓜视频的视频

如果你是一位科技博客作者或是视频创作专家&#xff0c;我相信你必然会遇到这样的问题&#xff1a; 如何将头条号的西瓜视频的视频下载下来&#xff1f; 对于这个问题&#xff0c;其实并不存在所谓的标准答案&#xff0c;因为头条号和西瓜视频并没有提供官方支持的下载方式。…

文件外发流程如何设置,才能进行事前事中事后管控呢?

随着信息技术的快速发展&#xff0c;企业内部数据的安全性成为业务运行过程中的关键问题之一。尤其是对于那些包含商业秘密、客户数据以及机密文件等敏感信息的企业而言&#xff0c;文件的外发往往会导致严重的商业损失和声誉损害。根据IBM的数据报告&#xff0c;2022年全球数据…

【二叉搜索树】将二叉搜索树变平衡-力扣 1382 题

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

一文解析 Python 读取配置文件的常用方法!

在程序运行使用当中&#xff0c;尤其是框架设计中&#xff0c;配置文件是必不可少的&#xff0c;配置文件的存在能够放置参数或者选项设置&#xff0c;使得程序更加灵活可用&#xff0c;下面就来介绍 Python 读取配置文件的常用方法。 常用的配置文件种类有很多&#xff0c;甚至…

【Nginx27】Nginx学习:代理模块(一)基本配置与概念

Nginx学习&#xff1a;代理模块&#xff08;一&#xff09;基本配置与概念 来了来了它来了。要说 Nginx 最早最出名的名头是什么&#xff1f;相信不少老码农马上就会想到&#xff0c;最开始&#xff0c;Nginx 的名头就是一款性能最高的 反向代理 服务器。现在其实也是&#xff…

Harmony 开始支持 Flutter ,聊聊 Harmony 和 Flutter 之间的因果

相信大家都已经听说过&#xff0c;明年的 Harmony Next 版本将正式剥离 AOSP 支持 &#xff0c;基于这个话题我已经做过一期问题汇总 &#xff0c;当时在现有 App 如何兼容 Harmony Next 问题上提到过&#xff1a; 华为内部也主导适配目前的主流跨平台方案&#xff0c;主动提供…

听GPT 讲Istio源代码--pilot(7)

File: istio/pilot/pkg/model/log.go 在Istio项目中&#xff0c;istio/pilot/pkg/model/log.go文件的作用是定义了Istio Pilot的日志记录功能。 该文件中定义了一个名为log的全局日志记录器&#xff0c;并且还定义了一些与日志记录相关的变量&#xff0c;如verbose、verboseCou…

Linux高性能服务器编程 学习笔记 第三章 TCP协议详解

与IP协议相比&#xff0c;TCP协议更靠近应用层&#xff0c;因此在应用程序中有更强的可操作性。一些重要的socket选项都和TCP协议相关。 本章从以下方面讨论TCP协议&#xff1a; 1.TCP头部信息。TCP头部信息出现在每个TCP报文段中&#xff0c;用于指定通信的源端端口号、目的端…

气传导与入耳式传导区别?气传导耳机好用吗?

​入耳式耳机隔音效果好&#xff0c;但佩戴舒适性差&#xff0c;音质更偏向沉浸式。相比传统入耳式耳机&#xff0c;气传导耳机可以提供开放的听觉体验&#xff0c;音质更加自然真实&#xff0c;同时避免了长时间佩戴耳机可能会带来的不适感。以下是我总结了最好用的几款气传导…

使用RTMDet模型训练DOTA_v1.0教程

1. 环境配置 需要注意&#xff0c;如果之前安装过mmrotate&#xff0c;那么这个mmyolo请单独创建一个虚拟环境&#xff0c;因为mmyolo和mmrotate的最新版本不兼容。 1.创建环境 conda create -n mmyolo python3.82.安装依赖 # 进入mmyolo环境中 conda activate mmyolo# 安装…

Oracle两个日期都存在返回最小/最大的,如果只存在一个就返回存在的日期

Oracle函数 Oracle两个字段日期都存在返回最小的&#xff0c;如果只存在一个就返回存在的日期. 函数说明LEAST(value1, value2, …)最小值GREATEST(value1, value2, …)最大值COALESCE(value1, value2, …)返回第一个不是空值的参数

计算机网络与技术——物理层

&#x1f60a;计算机网络与技术——物理层 &#x1f47b;物理层的基本概念&#x1f47b;数据通信基础知识&#x1f6a2;数据通信系统的模型&#x1f6a2;信道的基本概念&#x1f6a2;信道的极限容量 &#x1f47b;物理层下面的传输媒体&#x1f50a;导引型传输媒体&#x1f50a…

006-第一代光电小工具(二)

第一代光电小工具(二) 文章目录 第一代光电小工具(二)项目介绍串口QCustomPlot 部分开启OpenGl更新曲线 总结一下 关键字&#xff1a; Qt、 Qml、 QCustomPlot、 串口、 QSerialPort 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML&#xff08;…

Ubuntu系统下载及安装教程

史上最全最新Ubuntu安装教程&#xff08;图文&#xff09; - 知乎 (说明&#xff1a;本教程介绍的是安装DeskTop版的系统) 1.官网下载镜像 官方网址: https://ubuntu.com/#download进入官网后会有最新版本的镜像下载地址&#xff0c;如果需要下载最新版本&#xff0c;直接点…