美年大健康黄伟:从选型到迁移,一个月升级核心数据库
核心生产系统的数据库,从接到替换需求到完成分布式升级,需要多久?一个月,这是美年大健康的回答。一个月集中调配各种资源,美年大健康完成了应用程序基本零改造的平滑迁移,新数据库在成本更低的前提下,有力保障了全国数百家分院业务的稳定运行。
美年大健康(以下简称美年)产业控股股份有限公司成立于 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 技术,从而更好地赋能美年的业务、助力美年的数字化转型进程。
相关文章:

美年大健康黄伟:从选型到迁移,一个月升级核心数据库
核心生产系统的数据库,从接到替换需求到完成分布式升级,需要多久?一个月,这是美年大健康的回答。一个月集中调配各种资源,美年大健康完成了应用程序基本零改造的平滑迁移,新数据库在成本更低的前提下&#…...

OpenHarmony应用构建工具Hvigor的构建流程
前言 OpenHarmony 应用和服务使用 Hvigor 作为工程的构建工具。本篇文章将介绍 Hvigor 的构建流程,通过修改脚本配置使 Hvigor 执行自定义任务。 Hvigor 的构建流程 加载命令行参数和环境变量;初始化项目结构,创建 Project 和 Module 实例…...
ChatGPT在金融财务领域的10种应用方法
1.生成报告 在金融领域中,最耗时的任务之一是报告生成。通过ChatGPT,您可以在一定程度上自动化这个过程。这款人工智能工具可以获取关于公司财务表现的结构化数据,并生成一份书面摘要,详细说明关键点、趋势和观察结果。这个功能在…...

全程云OA ajax.ashx SQL注入漏洞复现
0x01 产品简介 全程云OA为企业提供日常办公管理、公文管理、工作请示、汇报、档案、知识体系、预算控制等26个功能,超过100多个子模块。为企业内部提供高效、畅通的信息渠道,同时也能大力推动公司信息系统发展,提高企业的办公自动化程度和综合管理水平,加快企业信息的流通…...

VMware 安装 macOS虚拟机(附工具包)
VMware 安装 macOS虚拟机,在Windows上体验苹果macOS系统! 安装教程:VMware 安装 macOS虚拟机VMware Workstation Pro 是一款强大的虚拟机软件,可让您在 Windows 电脑上运行 macOS 系统。只需简单几步操作,即可轻松安装…...

Tomcat与Servlet是什么关系
Tomcat与Servlet是什么关系 Apache Tomcat和Servlet之间存在密切的关系,可以说它们是一对密切合作的组件。下面是它们的关系: Tomcat是Servlet容器: Tomcat是一个开源的、轻量级的Servlet容器。Servlet容器是一个Web服务器扩展,用…...
C++11_右值引用
文章目录 前言一、右值引用是什么?那么,什么又是右值?右值引用 二、使用步骤和意义1.1.11.2 2.右值引用的最大意义2.1 完美转发2.2 万能折叠 前言 C11 是2011年对C这门语言发布的新标准,并且此次标准引入了十分多的新特性&#x…...

C#使用条件语句判断用户登录身份
目录 一、示例 二、生成 利用条件语句判断用户登录身份,根据用户登录身份的不同,给予相应的操作权限。 一、示例 主要用if语句及ComboBox控件。其中,ComboBox是窗体中的下拉列表控件,在使用ComboBox控件前,可以先向…...

在VM下使用Composer完成快照方式的软件制作
Composer允许您构建软件、应用程序、偏好设置文件或是文档的安装包,安装包可以部署到远程电脑或是作为镜像流程的一部分。构建软件包的第一步就是创建包源,根据要打包的软件,Composer允许您监视软件的安装和使用驱动器上已存在的文件来创建包…...

YOLOv5改进 | Neck篇 | 利用Damo-YOLO的RepGFPN改进特征融合层
一、本文介绍 本文给大家带来的改进机制是Damo-YOLO的RepGFPN(重参数化泛化特征金字塔网络),利用其优化YOLOv5的Neck部分,可以在不影响计算量的同时大幅度涨点(亲测在小目标和大目标检测的数据集上效果均表现良好涨点幅度超级高!)。RepGFPN不同于以往提出的改进模块,其…...

设计模式——最全梳理,最好理解
新年献礼! 设计模式呕心梳理 创建型模式 单例模式(Singleton Pattern)https://blog.csdn.net/qq_34869143/article/details/134874044 整理中... 结构型模式 代理模式(Proxy Pattern)https://blog.csdn.net/qq_34…...

外包干了4个月,技术退步明显了...
先说一下自己的情况,大专生,18年通过校招进入武汉某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四…...

rust 注释文档生成 cargo doc
rust的cargo文档生成 只需要在每个函数写清楚注释,就可以自动生成文档,很方便 即不用写文档,又可以快速查看,是开发rust的必备技能 rust安装和开发环境配置,可以参考:链接 1.写注释的方法 连续三个 \ 即…...

大语言模型(LLM)框架及微调 (Fine Tuning)
大语言模型(LLM) 技术作为人工智能领域的一项重要创 新在今年引起了广泛的关注。 LLM 是利用深度学习和大数据训练的人工智能系统,专门 设计来理解、生成和回应自然语言。这些模型通过分析大量 的文本数据来学习语言的结构和用法,…...
速盾高防ip:专业防御ddos
速盾高防IP是速盾网络为企业提供的专业DDoS攻击防御解决方案之一。作为一种先进的网络安全服务,速盾高防IP致力于保护客户的网络资源免受分布式拒绝服务(DDoS)攻击的威胁。以下是速盾高防IP的一些关键特点和优势: 实时攻击监测&am…...
第5章-第8节-Java面向对象中的内部类
1、内部类:属于类的成员之一,类的内部又定义类,外层的class称为外部类,内部的class称为内部类。 设计了某个类,根据需求发现其内部又需要定义一个独立的内部结构,此时就考虑将其定义为内部类,内…...

首次引入大模型!Bert-vits2-Extra中文特化版40秒素材复刻巫师3叶奈法
Bert-vits2项目又更新了,更新了一个新的分支:中文特化,所谓中文特化,即针对中文音色的特殊优化版本,纯中文底模效果百尺竿头更进一步,同时首次引入了大模型,使用国产IDEA-CCNL/Erlangshen-Megat…...

从零学Java - 接口
Java 接口 文章目录 Java 接口1.接口的语法1.1 与抽象类的区别 2.如何使用接口?2.1 接口的使用规范 3.什么是接口?3.1 常见关系 4.接口的多态性5.面向接口编程5.1 接口回调 6.特殊接口6.1 常量接口6.2 标记接口 7.接口的好处 补充面向对象 七大设计原则 1.接口的语法 接口&a…...
安全防御之身份鉴别技术
身份认证技术用于在计算机网络中确认操作者的身份。在计算机网络世界中,用户的身份信息是用一组特定的数据来表示的,计算机也只能识别用户的数字身份。身份认证技术能够作为系统安全的第一道防线,主要用于确认网络用户的身份,防止…...
axios post YII2无法接收post参数问题解决
axios post YII2无法接收post参数问题解决 在yii 配置文件中增加 ‘parsers’ > [“application/json” > “yii\web\JsonParser”] 如下所示: $config [id > basic,language > zh-CN,timeZone > env(TIME_ZONE, PRC),basePath > $basePath,bo…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...

MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...

html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...

视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
Vite中定义@软链接
在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...