众安保险五年的云计算故事

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 Tair(兼容Redis),内存型 2GB
简介: 作为首家获得互联网牌照的保险公司,众安保险与云计算携手走过了5年的时间,这五年的时间内,众安保险见证了阿里云的成长和成熟,也走出了属于自己的一条上云之路,那么众安保险云上的数据库设计有哪些故事呢?本文中,众安保险数据库负责人钟海平将为大家揭晓。

作为首家获得互联网牌照的保险公司,众安保险与云计算携手走过了5年的时间,这五年的时间内,众安保险见证了阿里云的成长和成熟,也走出了属于自己的一条上云之路,那么众安保险云上的数据库设计有哪些故事呢?本文中,众安保险数据库负责人钟海平将为大家揭晓。

_

众安保险业务背景介绍

众安保险是首家获得互联网牌照的保险公司,同时也是全国最大的互联网保险公司,累计销售保单超过百亿,具有5个整体生态和200多家合作伙伴。因为需要支持很多的互联网业务场景,因此在基础架构设计初期就提出了四个基本要求:在线业务数据存储百T级、“4个9”、毫秒级响应、符合金融监管要求。

众安保险的大部分核心业务都是基于MySQL之上的,主要采用了阿里云RDS,目前Redis尝试向阿里云迁移,其他的数据源是自建的,部分借助阿里云ECS部署。众安保险的DBA团队在2013年底尝试将核心业务系统迁到阿里云上,2014年引进了淘宝分布式中间件并做了数据层水平拆分以及数据库垂直拆分,2015年做了一些配置管理工具,2016年之后主要在自动化运维以及自研数据库中间件进行了一些尝试。

云数据库应用实践

在2013年时,众安保险的数据库架构比较落后,每个产品独立部署数据库,最终所有数据库汇总到财务数据库进行对账。当时大部分核心系统都是外采的,数据模型基本上都是行业通用的。但是在2013年刚使用RDS时也有所收获,使用RDS帮助整个基础环境部署节约了很多事情。不再需要经过繁琐的步骤完成数据库部署,只需要购买即可。

目前,众安所使用的RDS实例大概有300~400个。实际的数据源DB层大概有近2000个,在这种规模化使用的背景下会发现阿里云账户管理以及监控排查等都是很痛苦的。虽然阿里云提供了一整套的产品解决方案,但是如果希望排查某一个数据源某一个指标的异常,需要登录不同的阿里云账号,之后选择不同的实例再看不同的DB,这是非常痛苦的。

MySQL的权限是基于“用户+IP”的,最初阿里云只能提供“只读”和“读写”两种权限,而且后台运维是不可视的。现在阿里云有一个设置“可维护时间段”,这对于用户而言非常好,因为这样在使用云数据库的后台的运维只会在时间窗口进行变更。

初版的优化架构中首先对于RDS进行了分层,不再将RDS看做单独的实例,而是看成RDS实例资源池,并根据不同规格以及资源要求进行了分类。在DB层,对于应用数据源按照不同的产品进行了拆分。其上一层是中间件层,最上面则是应用层,应用提供了整体的查询方案。

对于离线的计算需求,通过Datax回流到ODPS进行支持做BI分析。此外,众安还自己实现了监控方案来排查分库分表等问题。阿里云RDS售卖的其实是数据库服务,其主机是不可访问的。正因如此,宿主机的物理资源是不可见的,所以在监控时对接了阿里云API获得实时的监控数据。此外,众安DBA团队还自己实现了DB Agent用于采集纯DB级别的指标,将采集的数据冗余地存储在时序数据库中。对于一些监控配置项用MySQL存储,对于汇总报告,则使用文件存储。通过实时和离线分析,最终满足各种监控应用场景。

对于有数据库维护经验的人而言,肯定会有资源使用瓶颈的体验。而大部分资源瓶颈就是CPU、内存以及磁盘IO,很少因为磁盘空间不足而产生问题。而在2015年,众安发现阿里云RDS单个实例只支持2T存储空间。在大量的分库分表的情况下,其实单表空间会压缩得很小,因为做了大量分布式事务的拆分,因此效率其实非常高。曾经在迁移的最高峰,用到了上限存储空间的98.7%,达到上限的时候阿里云RDS就会变成只读模式,这是很可怕的事情。解决思路就是使用阿里云DTS做数据迁移,引入了阿里数据TDL中间件做规则路由的调整,重新实现数据散列和分布。

阿里云的DTS数据迁移服务都是在页面上完成配置的。因为有分库分表,那么单个库就能达到上万张表,手动通过页面配置迁移任务是不现实的。此外,任务的异常调度不可知,虽然DTS服务能够帮助将数据全链路地迁移到另外一个数据源,但是迁移过程却是不可感知的。此外,还有毫秒级的延迟,其延迟显示就是几毫秒,而在数据库中一毫秒的QPS就是上万,那么几毫秒的延迟就意味着丢失大量的业务数据。同步效率不可控,在迁移数据的过程中其实业务还是在运行的,怎样尽量减少对于在线业务的影响,是同步效率所需要考虑的。而TDL就完全是一个黑盒了,虽然完成了迁移,但对于具体实现不可知。

针对以上两点,众安尝试做了一些自研,做了内部自研的数据库中间件平台,采用了Proxy代理模式,与MyCat类似。在连接池与配置管理上做了深度优化,借助中间件基本上可以达到直连数据库,在效率上没有什么损耗,甚至于在高并发场景下会优于原生的直连。最大的区别,就是众安内部的DTS在监控管理上做了很多事情,希望迁移过程是可控的,在业务高峰发生异常的时候可以降低速度,但是不用停止,支持在线数据库和备份数据集。众安自研的DTS在启动任务的时候就会采集BinLog,并且通过内部工具进行解析,通过消息消费存储起来。而数据迁移管理工具将会贯穿数据迁移的整个过程,首先迁移数据结构,之后全量迁移数据,之后利用增量的BinLog构建出全新的数据库,借此构建出准实时的数据库。在中间增加缓冲代理DMDS,不仅支持TDL客户端也支持Proxy模式。

业务应用实践

众安保险在业务方面最为突出的三个挑战包括,高频的业务开发,全年纯数据库开发发布超过2万次,日均发布超过60次,线上数据变更也很可怕;此外,众安保险有多个事业部以及孵化的子公司,那么如何让数据在各个子公司之间共享;第三部分就是性能效率的保障。

针对于每天要做的繁琐数据库发布,众安引入了开源组件,加入了自己的流程管理机制,做了自动发布和维护的支持。提交的数据库支持仓库,也支持本地数据文件。预检查就是检查本次发布是否会造成冲突,是否可以发布,是否有业务影响,是否处于业务高峰期,当然还有很多校验。拆分可执行文件就是做了很多分库分表的工作。执行简单而言就分成了三部分,创建类、变更类和DML更新类。整个过程DBA都可以参与监控,实时进行干预。

针对于数据安全共享,众安保险搭建了一个平台,实现了一些补充和完善。实现了安全保障和风险管控,以及用户内部账号赋权等。对于实时发现的异常可以实时进行阻断,还有贯穿全程的审计,包括数据库层面的审计、提交需求应用的审计以及最终展现的审计。

对于性能效率方面的解决方案,主要分为资源环境类、SQL执行类。在用RDS的时候用几个不同的规格做了内部的针对自身业务场景的性能测试,也沉淀了一些容量预估经验。在SQL执行这部分引入了很多分析方法,比如索引分析以及碎片分析,对应到后台就是一些定时任务以及自动扫描,嵌套到管理工具里面,发生需求的时候可以实时判断是否去做。由于阿里云帮助做了很多,因此DBA不需要太多关注底层的事情。主要一套监控体系即可,发生问题再去处理,而主要精力用于支持业务,更多地参与到业务本身的模型设计和架构设计本身上去。

借助自研的DTS和数据库中间件可以实现任意地水平拆分。当发生故障的时候可以实时地捕获数据库的状态。而对于很多企业而言,经常会因为一些运维人员或者运营人员的误操作误删了数据,使用备份数据恢复是一件很痛苦的事情,因为变更的是一条简单的数据,所以在众安通过反解析BinLog实现了应急闪回,精准地定位到需要闪回的数据,通过BinLog解析恢复数据,进而大大地节省了时间成本。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
11月前
|
监控 持续交付 API
深入理解云计算中的微服务架构:原理、优势与实践
深入理解云计算中的微服务架构:原理、优势与实践
469 83
|
机器学习/深度学习 并行计算 测试技术
MLX vs MPS vs CUDA:苹果新机器学习框架的基准测试
如果你是一个Mac用户和一个深度学习爱好者,你可能希望在某些时候Mac可以处理一些重型模型。苹果刚刚发布了MLX,一个在苹果芯片上高效运行机器学习模型的框架。
660 1
|
存储 人工智能 算法
五子棋简易AI算法1
基本思想 设置不同连接方式的权值并进行存储
581 1
|
存储 关系型数据库 数据库
ElasticSearch深度解析入门篇:高效搜索解决方案的介绍与实战案例讲解,带你避坑
ElasticSearch深度解析入门篇:高效搜索解决方案的介绍与实战案例讲解,带你避坑
ElasticSearch深度解析入门篇:高效搜索解决方案的介绍与实战案例讲解,带你避坑
|
Python
Python中的异步编程:理解并使用asyncio和aiohttp
【8月更文挑战第24天】在Python中,异步编程是一个强大的工具,它可以帮助我们编写出高性能的网络应用。本文将介绍Python的异步编程库asyncio和aiohttp,并通过示例代码展示如何使用它们来创建一个简单的HTTP服务器。我们将看到,通过使用这些库,我们可以在不阻塞主线程的情况下处理大量的并发请求。
183 1
|
11月前
|
JSON JavaScript 前端开发
harmony-chatroom 自研纯血鸿蒙OS Next 5.0聊天APP实战案例
HarmonyOS-Chat是一个基于纯血鸿蒙OS Next5.0 API12实战开发的聊天应用程序。这个项目使用了ArkUI和ArkTS技术栈,实现了类似微信的消息UI布局、输入框光标处插入文字、emoji表情图片/GIF动图、图片预览、红包、语音/位置UI、长按语音面板等功能。
780 3
|
缓存 监控 Linux
在Linux中,如何设计一个高性能的Web服务器?
在Linux中,如何设计一个高性能的Web服务器?
|
监控 架构师 项目管理
项目管理架构师的角色与职责:构建高效项目交付框架
【8月更文第7天】在当今快速变化的商业环境中,组织需要灵活高效的项目交付机制来应对不断出现的新挑战。项目管理架构师(Project Management Architect, PMA)作为一种新兴的角色,在确保项目成功交付方面扮演着至关重要的角色。本文将探讨PMA的核心职责,以及他们如何通过设计和实施项目管理流程来提高项目的可扩展性和适应性,并通过有效的项目治理来提升团队的整体表现。
420 0
|
监控 Dubbo 网络协议
6种微服务的RPC框架
6种微服务的RPC框架
|
Web App开发 JavaScript 前端开发
笔记:WebRTC 网络技术理论与实战(一)
笔记:WebRTC 网络技术理论与实战(一)
415 0