AICon上海|与字节、阿里、腾讯等企业共同探索Agent 时代的落地应用 了解详情
写点什么

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

  • 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:16887

评论

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

如何选择Intel 傲腾持久内存的几种工作模式

Steven Xu

内存 存储 内存数据库 Snapshot 高性能服务器

模块三作业-消息队列系统架构设计文档

张大彪

什么是批判性思考及推理

sherlockq

几种讨论场景下的原则

sherlockq

基于腾讯云Serverless部署游戏:合成大西瓜

一颗小树

#Serverless #python #腾讯云

ECMAScript 2019(ES10)新特性简介

程序那些事

JavaScript ecmascript nodejs 程序那些事

最高学习效率:15.87%

石云升

学习 5月日更

教你写好技术文章

元闰子

技术人 写作技巧

卸载 Navicat!事实已证明,正版客户端,它更牛逼

比伯

Java 编程 架构 互联网 计算机

自己在 InfoQ 平台的期冀——共同成长

liuzhen007

1 周年盛典

别再傻傻分不清AVSx H.26x MPEG-x了

LoveYFan

音视频

H5和WebRTC实时通讯方案的不同

liuzhen007

5月日更

Tomcat 中是怎么处理文件上传的?

AI乔治

Java tomcat 架构 HTTP

道-可道

顿晓

表达 5月日更

让 Go 代码跑上移动端

Rayjun

Go 语言 gomobile

原来长大以后,我发现以前面临到的难题并没有不见,只是换了角度出现在生活的另一面。

叶小鍵

一文入门Golang之文件操作【推荐收藏】

liuzhen007

文件 Go 语言 5月日更

第八大洲环游记(一):平流层上的非洲故事

脑极体

机器学习 Machine Learning- 吴恩达Andrew Ng 第1~5课总结 John 易筋 ARTS 打卡 Week 46

John(易筋)

ARTS 打卡计划

从理论走向实践,金五银六Java线程池指南已上线,一次性教给你!

飞飞JAva

Java 线程池

区块链蕴含的变革力量

CECBC

区块链

区块链数字钱包——未来世界的银行卡

CECBC

区块链

从分层架构到微服务架构(一)

元闰子

学习 读书笔记 架构

5分钟快速上手结构化思维方式

鲁米

方法论

测试

bilibili

对Spring Cloud+Nginx架构的主要组件不清楚,看这个就好

小Q

Java 学习 架构 面试 微服务

【LeetCode】整数反转Java题解

Albert

算法 LeetCode 5月日更

五月,开篇

程序员架构进阶

个人提升 28天写作 5月日更 总结思考

一张漫画解读:程序员为什么会跑路?

Java架构师迁哥

网络攻防学习笔记 Day3

穿过生命散发芬芳

5月日更 网络攻防

教你写好代码注释

元闰子

软件开发 代码注释

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