HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

退运险业务及系统架构演进史

  • 2023-11-28
    北京
  • 本文字数:3025 字

    阅读完需:约 10 分钟

退运险业务及系统架构演进史

⽂章简介:本⽂回顾退运险上线⼗年以来相关系统架构的演进。


背景   


退运险对于我司来说是⼀个举⾜轻重⼀款产品,初创时期贡献了 99.9% 的保费收⼊,随着公司的发展各类产品的不断创新,退运险的⽐重在缩⼩,但 它的规模在不断扩⼤,当前年保单量已超百亿。为了满⾜业务的发展,相应的系统经历不断的演进。


初代架构

  

核⼼系统于 2013 年 11 ⽉开始设计,当时不知道业务到底能有多⼤,所以起个名字叫⽆界⼭,由于对未来的不可知,初版微架都⽐较保守(初代⼤神⼤⻦⾔)。退运险作为其⽀持的最重要也是量最⼤的业务,很多设计都基于它,当时⽇需处理的保单达 380 万,可能现在看这个数据不算什么,但是要知道当时通常中⼩型保险公司核⼼系统的⽇均⽀持保单量在 10 万以内,较普遍是 1 ⾄ 3 万左右;⼤中型公司则约在⼏⼗万量级,不超过百万。处理⽅式也特 别简单:ODPS 预处理报⽂,再解析报⽂,扔出 notify 消息,核⼼收到后处理,通过分库分表⽅式解决⼤数据存储问题。各个系统在 hsf 等中间件的帮助下具备⽔平扩展能⼒。



初代架构存在的问题是性能实在是蜗⽜,资源调度极度上不去,消息压⼒⼤,⼀旦有异常,堆积导致 notify 奔溃,业务规模也不断在扩⼤,特别是双⼗⼀⼤促时尤为突出,⽇保单量已达亿级别,系统也渐渐显得⼒不从⼼,2015 年进⾏升级引⼊美洲豹(JStorm),将之前 dispatcher 和 nightelf 两个项⽬合⼆为⼀,架构上通过中间件解决⽔平扩容和单点问题,于当年年 11 ⽉份正式⽣产运⾏。



⼆代架构

初代架构迭代优化后基本能很好的⽀持退运险业务,但是公司在不断发展,后续健康险、意外险、财产险等业务不断的开展,核⼼系统也需要⽀持 越来越多的实时业务,对系统的稳定性要求越来越⾼,然⽽退运险⼊库时间⽐较集中,系统负载持续在⾼位,导致系统稳定性下降。要同时⽀持退运险业务和实时业务,虽然可以通过⽔平扩容的⽅式提⾼系统的吞吐量,但是⼀ 天就跑四五个⼩时跑报⽂,扩容会⼀定程度上造成资源浪费,⽽且在跑报⽂时间段内也不能避免不影响实时业务。在电商平台进⾏⼤促活动时尤为突出,在双 11 期间为了追求更⾼的 QPS,前期需要投⼊⼤量的⼈⼒和资源进⾏ 系统调优和压测,⽣产也需要准备⼤量的云资源进⾏⽀持。JStorm 是分布式 实时计算引擎,⽽在退运险场景⾥只⽤其任务分发的功能,有点杀鸡⽤⽜⼑。⽽且 JStorm ⽇常维护成本太⾼,使⽤极其不便。  

在 2018 年进⾏⼀次完全的重构,针对退运险的业务基于⽆界⼭核⼼系统衍⽣出⽆界⼭-电商⼦系统,底层使⽤⽆界⼭ 1.0 的 DB,⽀持电商场景包括退运险、保证保质保险等创新业务。得益于公司 Devops 的建设,让这套系统测试、发布和扩容更⾼效。服务间的调⽤使⽤ dubbo,消息中间件使⽤ kafaka, bill 服务也通过消息进⾏异步处理。上线后当年双 11 单⽇⽀持 8 千万保单⼊库, 峰值 TPS 达到 2.2 万,期间未造成其它实时业务的超时等异常情况。   


完成基础架构调整后,于 2019 年进⾏业务层的深度优化。因为退运险作为公司第⼀批险种,在核⼼已经运⾏了五六年。在这段时间⾥,核⼼已经新上了数千个产品,对接了四五个事业部,为了兼容,原有的单独针对淘系报⽂的⼊库逻辑已经被改的⾯⽬全⾮。另外⼈员以及部⻔的变动,短时间内经历多次交接,⼀些特殊逻辑在过程中没交待清晰。以上这些问题,都给维护、测试和排错等⼯作带来诸多的不便。⽽随着众安与淘系的合作程度加深,淘系退运险保单量正在进⼀步增加,预计 2019 年双⼗⼀会达到顶峰。完成本次优化后,删减了冗余的代码逻辑,减少了 DB 查询次数,提升了系统的整体性能。上线后 2019 年双 11 单⽇处理保单 1.6 亿,处理⽤时⽤了 160 分钟, 峰值 TPS 达 2.7 万,报⽂报⽂同⽐去年增加⼀倍处理时⻓缩短 40%。



主要改进内容:


开发⽆界⼭-电商⼦系统,与其它险种系统进⾏隔离,减少相互影响,bill 通过 kafaka 异步⼊库,进⼀步削峰;

使⽤ dubbo 中间件替代⽼旧的 HSF 进⾏服务间调⽤,提⾼系统性能;

使⽤新的报⽂处理平台和 kafaka 消息中间件替代 JStorm 进⾏异步处理;

优化 ODPS 预处理逻辑,调整报⽂结构,降低 ODPS 处理资源消耗;

产品配置、⽤户信息进⾏本地化缓存,减少重复 DB 查询,提升系统性能。


三代架构   


数字⽣活事业部⼀直在⾮阿退运险⽅向进⾏了不断地努⼒,期间接⼊过蘑菇街、趣店等电商平台,但都量不⼤⽇保单在万单级别,近年来随着抖 ⾳、快⼿等新兴平台电商业务蓬勃发展,使得退运险在⾮阿渠道得以突破, 2020 年 6 ⽉份快⼿接⼊,2021 年 7 ⽉份抖⾳接⼊后,⾮阿退运险⽇保单量逐渐超千万单。退运险不仅仅只有阿⾥单⼀渠道和场景,逐步向多元化的⽅向发 展。三代架构在这过程中也逐渐形成,公司⽆界⼭核⼼也升级为 2.0 不在和退 运险共⽤ DB,其它险种和退运险相互再⽆影响。根据当前需求新开发报⽂管 理平台,使⽤ OCeanBase 分区表替代原来分库分表,使⽤ Redis 的 Message queue 进⾏报⽂⽂件的分发处理。以及开发 gateway-data、anacientone 系统处理退运险实时业务。   



在降本增效的环境下,不再不计代价的追求⾼ QPS,⽽是要求以更经济的⽅式⽀持业务。为了达到这个⽬标,在优化系统的同时,也优化业务模式,⽐如淘系报⽂之前 T +1 给前⼀天所有的报⽂,导致会出现⼀个报⽂有上亿条数据,处理数据时间过于集中,处理过程只能串⾏进⾏,导致系统资源没有充分利⽤。最终我们和渠道⼀起进⾏优化整改,以 T+H 的⽅式给报⽂增加给报⽂频次,给了更⻓的时间窗⼝处理数据,也⼤⼤减少单个报⽂数据量, 从⽽进⼀步进⾏了削峰,⽇常只需 400QPS 就能保障业务正常运转,以往需要 达到 4000QPS。⼤促期间以往需要⼏⼗台 ECS ⽀持,QPS 需要达到 2 万,现 在只需原来的⼗分⼀就能满⾜要求,以更少的系统资源⽀持业务,达到降本增效的⽬的。同时也提⾼保单的⼊库时效,提升了⽤户体验。



主要改进内容:


⽀持实时接⼊,其中快⼿以及⼀些⼩渠道通过实时⽅式接⼊;

⽀持配置个性化策略解析报⽂,可以配置不同频次解析报⽂;

⽀持异常检测、预警,以及⾃动修复;

剔除 ODPS 预处理报⽂,⼀来减少报⽂处理环节,⼤⼤降低⼤⽂件传输消 耗,⼆来直接减少了 ODPS 计算费⽤;

⽀持回传结果⽂件,解决对账问题;

其它险种 DB 隔离,不再相互影响。


总结

  

对⽐三代架构,其中的中间件可能⼤不相同,但是核⼼的思想基本是⼀致的,就是通过异步的⽅式进⾏削峰。⼤道⾄简⽀持年保单量百亿的系统也 不过如此。其实退运险虽然数据量庞⼤,但是它在电商的交易场景⾥⽤户感知不强,所以它对实时性的要求⽐较低,结合它的这⼀特性才有这样的系统 设计。另外是因为站在巨⼈的肩膀上,依托公司的各项基础设施,才能这么简单构建这类处理海量数据的分布式系统。   


我司成⽴⼗周年,退运险业务上线也正好⼗年,这⼗年业务规模不断地扩⼤,形态也有变化,系统经历了⼏次变⾰。也经历公司各个时期,从⼈⾁运维,到 Duang、boom、ship、最后到现在的 DevCube。基于公司⾃研的 DevOps 研发运维⼀体化解决⽅案,使我们的系统能敏捷迭代,全链路监控预警,以及快速修复⽣产故障等。   


退运险是互联⽹的产物,所以得益于互联⽹相应的技术和思想,才构建这套系统。正如布鲁克斯在《⼈⽉神话》中所说的没有银弹,没有⼀个系统 ⼀开始就能做到尽善尽美,会随着业务发展、技术进步不断的调整和优化。 回头看之前的技术选型会有问题,但在当时就是最合适的⽅案。  

本⽂未对业务场景以及⼀些技术细节进⾏展开,对相关⽅⾯有兴趣的同学可以单独找我探讨。后续相关的负责⼈也会输出相关⽂章介绍。


2023-11-28 15:16803

评论

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

Google 宣布 Android APK 退位对鸿蒙意味着什么?|【话题讨论】

老猿Python

android 鸿蒙 Google AAB格式

Redisson 分布式锁源码 04:可重入锁释放

程序员小航

Java redis 分布式锁 redisson redisson 分布式锁

Rust从0到1-Cargo-Workspaces

rust cargo workspaces

【LeetCode】点菜展示表Java题解

Albert

算法 LeetCode 7月日更

带你用VUE实现上传图片效果

华为云开发者联盟

CSS html Vue js 标签

程序员跳槽指南

孙叫兽

程序员 跳槽 攻略

架构实战营 - 模块1 - 微信架构及学生管理系统毕设架构

雪中亮

架构实战营 #架构实战营

BTCs挖矿软件开发|BTCs挖矿系统APP开发

架构实战营 作业 模块一

脉醉

#架构实战营

IPFS公司有哪些?IPFS 哪家公司好?

敏捷项目管理会不会代替传统项目管理?

万事ONES

项目管理 ONES 敏捷管理

开发小技巧之:unicode的排序和正则匹配

程序那些事

Unicode 排序 程序那些事

【Flutter 专题】95 图解 Dart 单线程实现异步处理之 Task Queue

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 7月日更

斗宠大陆APP开发|斗宠大陆软件系统开发

包租婆软件开发|包租婆系统APP开发

骆驼币挖矿软件开发|骆驼币挖矿APP系统开发

阿凡达挖矿软件开发|阿凡达挖矿APP系统开发

微服务错误码设计实践

循环智能

微服务 gRPC 异常处理 错误码 接口设计

多链星球APP开发|多链星球系统软件开发

在线HTTP请求/响应头转JSON工具

入门小站

工具

学习哪门编程语言好,我来回答

实力程序员

5分钟带你了解微前端(内含大量代码示例)

LigaAI

大前端 qiankun

2022前端面试必备题+答案

buchila11

写代码是意识流?

卢卡多多

代码规范 意识 7月日更

Rust从0到1-Cargo-自定义命令

rust cargo 自定义命令 Custom Commands

BVD比特视频APP系统开发搭建

电脑误删文件如何恢复?两个方法解决你的困扰

淋雨

EasyRecovery 文件恢复 硬盘数据恢复

Apache Flink 入门知识超全概括!

云祁

大数据 flink 7月日更

java算法易筋经:常见java-API使用技巧

华为云开发者联盟

Java List 数组 队列 java-API

徒步运动系统开发|徒步运动软件APP开发

关于深度学习编译器,这些知识你需要了解一下

华为云开发者联盟

深度学习 tensorflow 编译器 算子开发 深度学习编译器

退运险业务及系统架构演进史_云计算_众安保险_InfoQ精选文章