写点什么

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

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

评论

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

Python 的 sum():Pythonic 的求和方法

华为云开发者联盟

Python 列表 元组 Pythonic 求和

量化模拟线上流量实践

FunTester

性能测试 接口测试 测试框架 FunTester 线上流量

数据上报那些事

神策技术社区

数据 神策数据

太香了!Github疯传的阿里分布式设计实录让面试进阶齐飞!

Java 程序员 架构 面试 后端

三面阿里,有惊无险成功拿到offer定级P7,只能说是真的难

Java 编程 java架构

极光笔记丨iOS 15推送新特性

极光JIGUANG

ios 消息推送 移动端

遭 GitHub 连夜封杀下架?被泄露的阿里内部 Java 面试手册到底有多强?

收到请回复

Java 面试 阿里 大厂Offer

云栖大会|盛宴之下,共赴一场视频云的进化论

阿里云CloudImagine

阿里云 音视频 WebRTC 视频云 云栖大会

容器化 | ClickHouse Operator 原理解析

RadonDB

数据库 Kubernetes Clickhouse

☕【Java技术指南】「编译器专题」深入分析探究“静态编译器”(JAVA\IDEA\ECJ编译器)是否可以实现代码优化?

洛神灬殇

Java 编译器 静态编译器 10月月更

一篇神文让你"一夜封神"Mycat中间件(最详细讲解)

程序员小呆

Java 程序员 架构师 mycat

第 17 章 -《Linux 一学就会》- Linux计划任务与日志的管理

学神来啦

Linux 运维 linux学习 linux云计算 linux基础

百亿级系统架构首公开!阿里这份300多页的设计实录你还没有吗?

Java 程序员 架构 面试 后端

性能加速最高可达28倍!这个NLP工具包不容错过

百度开发者中心

预训练模型 NLP 大模型

架构师一定要看!微服务设计的四个原则

Java 程序员 架构 面试 后端

优酷鸿蒙开发实践 | 鸿蒙卡片开发

阿里巴巴终端技术

ios android HarmonyOS 优酷 移动端

怎么阅读 Linux 内核源码

程序员小呆

Java Linux 程序员 架构师

涨薪60%,从美团干到阿里p7,这份Github上的面试笔记把所有Java知识都写出来了

Java 程序员 架构 面试 后端

MySQL索引总结:14张图+代码+文字

Java MySQL 数据库 架构 后端

一篇神文让你深入理解计算机系统——学习笔记

程序员小呆

Java 程序员 架构师 计算机

金九银十吃透这份Spring Boot实战文档,让你超过90%的Java面试者

Java 编程 架构 面试 springboot

索信达助力国有大行提升监管报送质量

索信达控股

大数据 数据治理 金融监管 金融行业 银行业

Python代码阅读(第37篇):获取两个列表中相同的元素

Felix

Python 编程 Code Programing 阅读代码

接连三次霸榜GitHub,这个国产GitHub项目是真的强...

百度开发者中心

最佳实践 方法论 百度飞桨 开源技术

Apache ShardingSphere 在京东白条场景的落地之旅

SphereEx

开源 数据架构 架构设计 ShardingSphere SphereEx

211本+985硕+计算机专业投面百度,坐等一周迎来三面,已拿offer

Java 学习 程序员 架构 大厂面试

阿里技术官耗时半年总结出“满分”架构笔记,拿捏分布式到微服务

进击的王小二

Java 架构 分布式 微服务

亿级流量架构演进实战 | 从零构建亿级流量API网关 01

松然聊技术

亿级架构

亿级流量架构演进实战 | 从零构建亿级流量API网关 02

松然聊技术

亿级架构

Java核心基础——注解

老农小江

注解 java

明道云APaaS在保险业中的应用场景例举

明道云

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