美年大健康黄伟:从选型到迁移,一个月升级核心数据库

news2024/11/17 16:20:01

核心生产系统的数据库,从接到替换需求到完成分布式升级,需要多久?一个月,这是美年大健康的回答。一个月集中调配各种资源,美年大健康完成了应用程序基本零改造的平滑迁移,新数据库在成本更低的前提下,有力保障了全国数百家分院业务的稳定运行。

美年大健康(以下简称美年)产业控股股份有限公司成立于 2004 年,是一家集健康咨询、健康评估、健康管理为一体的健康体检与医疗集团,旗下“美年”、“慈铭”、“奥亚”、“美兆”四大品牌,目前,在全国 300 多个城市有 600 多家分院,每年体检人数超过 3000 万。

如此大的业务量背后需要一套功能强大的体检系统来支持。实际上,美年不仅业务量大,业务类型也很多,集团需要根据用户需求的变化和体检设备的升级不断推出新的业务类型,比如,2022 年 9 月新推出的“脑睿佳”专项脑检产品就颇受欢迎。

2023 年 3 月,美年 SOA 系统(Sale & Order Assistant System,销售制单辅助系统)原来使用的 RDS 告急,监控告警信息显示,随着新体检系统的部署上线,带来数据量的增长很快将突破 RDS 上限。黄伟表示:“如果再不更换数据库,SOA 系统随时有可能崩盘,为了保证新的体检系统顺利上线到各个分院,必须马上进行数据库升级。”在美年 SOA 系统数据库升级至 OceanBase 后,有效保障了各个分院销售制单业务的稳定运行,也为美年的数字化转型提供了坚实的支撑。

图片

随着人们生活水平的提高和健康保健意识的增强,健康体验行业保持高速增长态势。同时,健康领域的消费升级和品质的提升也成为主要消费趋势。针对市场变化, 2019 年,美年提出了“医疗导向、品质驱动、服务支撑、创新引领”十六字核心战略,随后又提出“All in 数字化”来大力推动公司的数字化转型。

作为美年生产系统的体检软件是美年数字化转型的重要支撑。然而,这套业务系统已经很老旧了,该系统用十多年前比较流行的编程语言 PowerBulider(PB)开发,采用的也是当年流行的 C/S 架构。随着网络环境的改善和软件技术的不断进步,这套 C/S 架构系统逐步落后。2021 年,美年决定重新开发一套新的健康体检系统,这才有了今天的「扁鹊」和「SOA」系统。

扁鹊系统是美年新一代智慧体检管理 SaaS 平台。相比前一代系统,扁鹊在功能上有很大提升,它能实现分时预约、快速登记、智慧导诊、数据实时互通、样本追踪、检查类异常结果自动上报等功能,是美年提升医疗质量、客户体验、精细化管理水平以及创新能力的主要平台。

SOA 是美年为销售提供订单报价和落单的系统,用以提升订单的过程效率及管理规范,实现本地单、全国单、多品牌订单和实体卡等关键订单的业务在线化和管理协同。

SOA 是扁鹊系统的一部分,它作为扁鹊系统的一个独立功能模块,于 2020 年 6 月 30 日先行开发完成,并开始在各个分院上线。随着 2022 年中,新一代扁鹊智慧体检 Saas 系统的正式上线,SOA 系统也产生了新的版本迭代升级需求,例如:老系统订单、套餐数据的同步等,这类需求很明显带来了大量业务数据的增长。初期扁鹊系统上线比较慢,到去年年底共上线了 10 家分院。进入 2023 年,扁鹊上线节奏明显加快,到 3 月份上线了近 200 家分院。正当研发部门准备在剩下的 300 多家分院开始上线时——作为扁鹊业务支撑的 SOA 系统数据库报警了。原来,SOA 最早选的数据库是 RDS,到 3 月份的时候数据库容量逐渐承受不住。

“有一天 DBA 来告诉我,SOA 系统的 RDS 存储空间已经超过上限。后面还有 300 多家分院等着上,按目前的增长速度很快就要接近 RDS 极限。”美年高级研发总监黄伟表示。一旦数据库崩溃告急,所有订单都无法处理,美年的业务也将面临停摆风险。黄伟意识到替换数据库已经是当务之急,并给自己定了一个目标:在一个月内解决数据库升级的问题。

图片

扁鹊系统和 SOA 两个系统都是关乎美年未来业务发展的关键项目。相比扁鹊系统而言,SOA 系统设计要早两年,有些设计没有考虑到后来业务大规模增长的情况。当黄伟仔细审视 SOA 数据库系统的时候才发现,SOA 的数据库设计存在一些不合理的地方,否则就不会出现眼下的局面。

比如,有超过 2 亿行的单表存在,这样的设计原本可以优化;目前数据库存储的数据量达数 TB,但其中存在很多应该归档的冷数据和一些无用数据……“过去有些分院对数据管理没有严格要求,订单没有很好地维护,有些订单早该结束了也不结束,还有些无主数据,需要进行清理和分类。” 黄伟说。不过,这些工作现在暂时顾不上,只能等到新数据库上线后再进行补救了,现在最要紧的把这个 MySQL 数据库替换下来。

黄伟介绍:“我们对于新的数据库第一个要求是要能承受得住不断增长的数据量,也就是要高度可扩展。其次,新数据库要能高度兼容 MySQL,否则就要对应用程序进行大量改造,时间上不允许。第三,不能比 MySQL 慢。最后,成本希望能与 MySQL 持平,如有增加也应该是有少许增加。” 

基于以上几点需求,美年进行了数据库的测试、对比、选型,通过全面的评估和比较,OceanBase 满足了美年对数据库的各项要求,最终确认选型 OceanBase。何晶是美年后端开发专家,具体负责从 MySQL 数据库升级到 OceanBase 的工作。何晶介绍,为了评估 OceanBase 对 MySQL 的兼容性,美年对 OceanBase 用生产中的流量进行了全流量的回放,结果表明,99% 以上的语句是兼容的。而在性能方面,评估结果显示 OceanBase 80% 优于 MySQL。

SOA 系统中原来有一些非常复杂的 SQL 语句。比如,有多表聚合,还有很多子查询,在数据量不大的时候,性能降低不明显,一旦数据量达到一定程度,性能就明显下来了。针对剩下的 20% 不如 MySQL 的地方,开发人员做了针对性的优化以后,数据库的性能也有明显的改进。

图片

在完成了对 SQL 语句的优化后,美年在 OceanBase 的支持下制订了详细的迁移规划,并在测试环境和预发布环境中进行了演练。最后在今年 4 月份,即下半年体检旺季到来之前顺利地完成了从 MySQL 到 OceanBase 的迁移。

图片

数据库迁移的结果让美年非常满意。黄伟表示,作为一款分布式数据库,OceanBase 能稳定应对目前的 SOA 订单数据及未来的业务增长,在性能上也满足了需求。同时,在成本上也有节省,尤其在存储费用上。借助数据压缩技术,原来 TB 级的数据量经过数据的清理和压缩,现在只有 GB 级,数据压缩了 5/6,存储成本下降非常明显。

此外,上线 OceanBase 还降低了运维人员的负担,在一定程度上也等于降低成本。黄伟介绍,OceanBase 提供的工作台和一些工具,可以自动诊断数据库的问题,能对 SQL 进行审查并提出修改建议。另外,以往很多工作需要开发人员与 DBA 进行沟通,现在有了工作台和工具,研发人员自己就可以利用它们来进行业务的优化。

OceanBase 上线还有一个让黄伟感到很高兴的是:OceanBase 的主备集群也非常完美地契合了美年体检系统两地三中心的容灾架构。现在,美年的 SOA 系统在北京和上海两地各部署一套,上海为生产中心(两个可用区分开部署),北京为灾备中心,生产中心和容灾中心可以实现一键切换。相比美年其他一些系统灾备数据需要通过中间件来传输,SOA 将逻辑复制变成了物理复制,非常方便。

图片

另外,OceanBase 数据库采用多副本,支持读写分离,其只读节点可以专门用作数据的统计和分析任务,供数据团队使用,避免了对正常业务的干扰。同时,因为不用再单独部署一个数据库,降低了系统的复杂性。比如 BI 部门就可以很好地利用只读节点进行日常的数据抽取。

鉴于 OceanBase 在 SOA 系统中的良好表现,另一核心系统「扁鹊」也采用了OceanBase 来进行数据归档和定制化改造。用 OceanBase 进行数据聚合后,一些查询可以直接接入到 OceanBase 中进行,相当于利用 OceanBase 做了扁鹊全量的数据聚合,保证了一些 2C 的业务数据直接查询。另外,美年还利用 OceanBase 来保存一些非热点数据,如过往三年的体检数据,为客户提供一些定制化改造服务,借助 OceanBase 至少保存 3 年以上的数据随时调用,方便客户拿到体检报告时,可以及时调取以前的数据来对比身体健康的变化。

图片

对于未来的规划,黄伟表示,美年会结合 OceanBase 的特点对现有架构进行优化,提高可用性,以及进一步优化公司的数据存储体系,降低成本。另外,黄伟透露,他对 Serverless 数据库技术非常感兴趣。因为体检行业具有明显的潮汐特征,上午业务量高,下午业务量很少,非常适合 Serverless,希望能尽快引入 Serverless 技术,从而更好地赋能美年的业务、助力美年的数字化转型进程。

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

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

相关文章

【Android】自定义View组件,并实现在 Compose、Kotlin、Xml 中调用

从事 Android 开发以来,很少有过自定义 View 的相关开发需求,大部分 UI 都是可以集成某些官方组件,在组件的基础上完成能够大大缩短开发时间。但今天我要讲的是:如何使用 Android 开发一个Compose、Xml都可以调用的组件&#xff1…

Vue中break关键字

Change() {//每次触发该事件,都要讲data重新赋值一次this.data JSON.parse(JSON.stringify(this.data1));// 根据选中的等级更新数据switch (this.selectedlevel) {case 1:// 更新数据为一级数据this.data this.data.filter(item > item.level "1"…

架构(1)

目录 1.如何理解架构的演进? 2.如何理解架构的服务化趋势? 3.架构中有哪些技术点? 4.谈谈架构中的缓存应用? 5.在开发中缓存具体如何实现? 1.如何理解架构的演进? 初始阶段的网站架构应用服务和数据服…

2024年1月6日 十二生肖 今日运势

小运播报:2024年1月6日,星期六,农历十一月廿五 (癸卯年乙丑月己巳日),法定节假日。 红榜生肖:牛、猴、鸡 需要注意:鼠、虎、猪 喜神方位:东北方 财神方位&#xff1a…

【2024最新版】Win11基础配置操作(磁盘分区、修改各种默认存储位置、安装软件操作)【释放C盘空间】

文章目录 一、硬盘分区0. 磁盘管理1. 压缩卷2. 新建简单卷向导 二、修改默认存储位置1. 保持新内容的地方a. 位置b. 操作 2. 快速访问六件套a. 位置b. 操作 三、安装软件0. 应用商店设置a. 设置中心b. 修改下载设置 1. 微信电脑版设置a. 下载b. 安装c. 聊天记录迁移与备份d. 存…

MySQL-DCL

DCL是数据控制语言,用来管理数据库用户,控制数据库的访问权限。 管理用户:管理哪些用户可以访问哪些数据库 1.查询用户 USE mysql; SELECT * FROM user; 注意: MySQL中用户信息和用户的权限信息都是记录在mysql数据库的user表中的…

Vue入门一(前端发展史|Vue介绍|Vue插值语法|Vue指令|style与class使用|条件渲染)

文章目录 一、前端的发展史二、Vue介绍 和 基本使用1) Vue介绍2) Vue特点3) M-V-VM思想1.MVVM介绍2.MVVM的特性3.MVVM逻辑 4) 组件化开发、单页面开发组件化开发单页面开发 5) 引入方式6) 补充解释型的语言是需要解释器的 nodejs:一门后端语言7) 快速使用 三、Vue之…

力扣1944.队列中可以看到的人数--单调栈

思路: 由题知一个人能 看到 他右边另一个人的条件是这两人之间的所有人都比他们两人 矮 ,也就是说,在自己右边第一个比自己高的人后面的人就肯定看不到了那么只需要找到右边第一个比自己高的人与自己之间的所有满足要求的人就行了&#xff0…

PyTorch|一次画一批图像

想想这样一个场景,我们训练了一个神经网络,输入一些信息,这个网络可以根据信息为我们生成相关图片。 这些图片并不是一张,而是多张,我们想把这些图片一次全部显示出来,而不是一张一张的显示(这…

CSS 缩小旋转动画

<template><div class="container" @mouseenter="startAnimation" @mouseleave="stopAnimation"><!-- 旋方块 --><div class="box" :class="{ rotate-scale-down: isAnimating }"><!-- 元素内容…

Linux 进程(十) 进程替换

用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec*函数以执行另一个程序。当进程调用一种exec*函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。调用exec*并不创建新进程,所以调用exec*前…

stable diffusion 人物高级提示词(四)朝向、画面范围、远近、焦距、机位、拍摄角度

一、朝向 英文中文front view正面Profile view / from side侧面half-front view半正面Back view背面(quarter front view:1.5)四分之一正面 prompt/英文中文翻译looking at the camera看向镜头facing the camera面对镜头turned towards the camera转向镜头looking away from …

c语言题目之统计二级制数中1的个数

文章目录 题目一、方法1二、方法2三&#xff0c;方法3总结 题目 统计二进制数中1的个数 输入一行&#xff0c;输出一行 输入&#xff1a; 输入一个整数 输出&#xff1a; 输出存储在内存中二进制的1的个数 一、方法1 之前的文章中&#xff0c;小编写了有关于内存在二进制中的存…

基于YOLOv7算法的高精度实时安全背心目标检测识别系统(PyTorch+Pyside6+YOLOv7)

摘要&#xff1a;基于YOLOv7算法的高精度实时安全背心目标检测系统可用于日常生活中检测与定位安全背心&#xff0c;此系统可完成对输入图片、视频、文件夹以及摄像头方式的目标检测与识别&#xff0c;同时本系统还支持检测结果可视化与导出。本系统采用YOLOv7目标检测算法来训…

flutter 五:MaterialApp

MaterialApp const MaterialApp({super.key,this.navigatorKey, //导航键this.scaffoldMessengerKey, //scaffold管理this.home, //首页Map<String, WidgetBuilder> this.routes const <String, WidgetBuilder>{}, //路由this.initialRoute, //初始路由th…

四种“栈溢出检测方法”实现分析(2种纯软件、一种纯硬件、一种软硬件结合)

1、两种纯软件的栈溢出检测方法 参考博客&#xff1a;《freeRTOS的栈溢出检测机制》&#xff1b; 2、纯硬件&#xff1a;使用栈限制寄存器 2.1、工作逻辑分析 前提条件&#xff1a;使用满减栈硬件上提供栈限制寄存器&#xff08;用SP_limit表示&#xff09;&#xff0c;可以…

互联网广告行业发展历程

在20年的历程中&#xff0c;广告主与媒体方持续面对着一些问题&#xff0c;一些核心问题推动了行业的迭代。 互联网广告经过了20年左右的高速发展&#xff0c;已愈发成熟&#xff0c;其历程是有趣的。 对互联网广告发展的理解&#xff0c;网上的文章并不多&#xff0c;已有的…

AIGC初探:提示工程 Prompt Engineering

简介 提升工程是什么 提示工程&#xff08;Prompt Engineering&#xff09;是人工智能领域中的一个概念&#xff0c;特别是在自然语言处理&#xff08;NLP&#xff09;领域中。它是一种通过设计和优化输入提示来提高AI模型表现的方法。 对于基于转换器的大型语言模型&#x…

无监督学习(K-Means)的认识

目录 一、无监督学习 二、无监督学习和有监督学习的区别 三、K-Means 3.1数据分析 3.2k-meas算法 3.3数据正态化后k-means 3.4找最佳k&#xff08;Elbow Plot&#xff09; 四、k-means算法的优缺点 一、无监督学习 无监督学习是一种机器学习的方法&#xff0c;…

机器学习--回归算法

&#x1f333;&#x1f333;&#x1f333;小谈&#xff1a;一直想整理机器学习的相关笔记&#xff0c;但是一直在推脱&#xff0c;今天发现知识快忘却了&#xff08;虽然学的也不是那么深&#xff09;&#xff0c;但还是浅浅整理一下吧&#xff0c;便于以后重新学习。 &#x1…