–摘要
2022年2月,我公司承担了某市”急救医疗服务平台”项目的开发工作,在该项目中我担任架构师一职,主要负责项目整体架构设计工作。该项目目标是通过5G+医疗健康项目建设,提高市域内所有医疗机构急救医护人员医疗服务水平,使急诊患者得到及时,有效,准确的治疗,实现急诊患者上车即入院的愿景。本文以该项目为例,讨论软件架构风格在该项目中的具体应用。应用层通过采用B/S架构,解决各医疗机构地域广不好部署和运维难的问题;业务交互层通过采用隐式调用风格,通过发布订阅模式,降低各系统耦合度;数据层采用数据库系统风格,满足共享数据源的需求;通过采用以上架构风格,提高了软件的架构质量和开发效率,最终项目成功上线,获得市卫健委和市域内各医疗机构一致好评。
–背景
随着工信部与卫健委5G+医疗健康应用项目通知的发布,通过5G完善医疗服务质量已成为各医疗机构重点需求。通过5G+急诊救治的应用,在救护车接到患者的第一时间,将病患体征以及病情等大量生命信息数据实时回传到后台指挥中心,帮助院内医生做出正确指导并提前制定抢救方案的医疗急救服务,实现患者“上车即入院”的愿景。基于该市域内各医疗机构对于急救医疗服务平台的迫切需求及我公司在医疗软件方面的深耕,我公司于2022年2月承建了该市的“急救医疗服务平台”项目建设,该项目涵盖120指挥中心,院前急救,院内抢救,预检分诊四大子系统及胸痛、卒中、创伤三大中心建设。在此项目中,我担任架构师一职,主持并参与了该项目整体架构设计工作,整个项目共耗时12个月于2023年2月通过验收,上线运行。下面,我将首先介绍软件系统开发中常用的软件架构风格及具体含义,然后详细介绍该项目中采用的架构风格及具体实施效果。
–过渡回应相关问题
软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式。常用的软件架构风格有数据流风格,调用/返回风格,独立构件风格,虚拟机风格,仓库风格。数据流风格包括批处理序列风格和管道-过滤器风格,其每一步处理都是独立,顺序执行,适用于简单的线性流程。调用/返回风格包括主程序/子程序风格,层次结构风格和面向对象风格,其主要思想是将复杂的大系统分解为一些小系统,以便降低复杂度,增加可修改性,程序从其执行起点开始到执行结束,将控制返回给程序调用构件。独立构件风格包括进程通信风格和事件驱动系统(隐式调用)风格,其特点是每个构件都是独立的个体,它们之间不直接通信,以便降低耦合度,提高灵活性。虚拟机风格包括解释器风格和基于规则的系统风格,基本思想是可以人为构建一个运行环境,在这个环境之上,可以解析与运行自定义的一些语言,这样来增加架构的灵活性。仓库风格包括数据库系统风格,超文本系统风格,黑板系统风格,其以数据为中心,善于管理数据信息,适合大量数据的应用场合,适用于复杂的逻辑系统。
—一总
在急救医疗服务平台的架构设计中,我们综合使用了多种架构风格,本文重点介绍B/S架构风格、隐式调用风格、数据库系统风格三种架构风格在该项目中的实施过程和效果。
—三分
首先应用层我们采用B/S的架构风格,主要解决市域内多家医疗机构推广难、维护难的问题。以卫健委牵头的下属市级医院及各级卫生局下属县级医院,总量达到300多家,各医疗机构分布在全市各个地区,路途很远,且都是医卫专网通讯,一般是无法远程支持的,这给我们的系统推广以及后期维护带来了很大难题,如果使用C/S架构,更新客户端一旦遇到问题很可能需要全市各个站点跑一遍。这让我们在系统推广和维护方面面临较大压力。我们采用的B/S架构风格能够解决这个难题,并充分考量现在的相关技术成熟度,例如现在的VUE框架完全能够实现以前客户端的功能,项目中我们使用了大量的前端缓存技术与websocket技术,能够满足急救业务实时性交互等需求。vue是单页面应用,页面可以局部刷新,不用每次跳转页面都要请求所有数据和dom,这样大大加快了访问速度和提升用户体验。而且他的第三方ui库很多节省开发时间。
其次业务交互层我们使用隐式调用风格,通过发布和订阅的模式进行系统间数据交互,降低系统耦合度。我们采用开源的消息中间件RabbitMQ作为连接构件,RabbitMQ是基于AMQP协议的,通过使用通用协议就可以做到在不同语言之间传递,主要由交换机、路由器、队列、生产者、消费者组成,具有良好的可伸缩性和消息持久化。在架构的设计过程中由于院前急救系统要和胸痛、卒中、创伤中心之间进行交互,各系统之间的通信经过RabbitMQ分发到各个订阅此消息的应用系统,有效的解决耦合问题,在编码的过程中只要采用这种风格的web应用,整个迭代过程效率极高,错误率降低,而且我们使用的spring框架,消息队列的管理完全基于配置,清晰简单,维护性良好,不同的web系统监听的队列也可以随时变换组合,基于消息中间件的架构设计能够让系统的构件化思路得到良好实施,可以降低本项目的二次开发的难度。
最后数据层我们采用数据库系统风格,满足共享数据源的需求。本项目我们采用oracle11g数据库系统。通过数据库用户区分各系统,通过表记录业务数据。为了保证数据的安全性,我们通过oracle11g的 Data Guard模式, 解决数据库容灾问题,在某机房部署生产数据库,另外其他机房部署备份的物理数据库。在多系统运行中,为了提高查询性能,我们通读写分离的设计,使用了oracle的rac,在多个主机上运行一个数据库的技术,即是一个db多个instance.它的好处是可以由多个性能较差的机器构建出一个整体性能很好的集群,并且实现了负载均衡,读写分离。我们将院前急救,院内抢救及车载心电监护仪、除颤仪所有的数据进行集中存储,为日常业务提供数据操作,为管理层决策提供支持。通过oracle数据库系统的使用,data guard和rac技术的加持,使数据层不仅达到了数据的共享需求,而且保证了数据的安全性、稳定性和高可用性,数据库服务器的高吞吐量和易伸缩性。
–结尾
历时12个月,项目于2023年2月完成验收,上线运行。项目运行至今,使用效果良好,通过各项质控指标显示市域内急救医疗服务整体水平得以有效提升,急诊患者能够得到及时有效治疗,实现了急诊患者上车即入院的愿景。在项目总结过程中,我们一致人为项目的成功主要得益于以上架构风格的选择达到了预期的效果,隐式调用风格的选择降低了系统间的耦合度,提高了开发效率;B/S架构风格的选择降低了实施难度;数据库系统风格的选择保证了不同业务系统之间的数据共享。
当然,项目虽然取得了一定的成绩,但也存在一些问题和不足。在整个项目推进的过程中,随车护士发现,心电图回传到后台指挥中心有时会存在延迟现象,影响抢救方案的及时制定,在经过仔细分析后,我们发现主要受网络带宽影响,数据中心图片服务网络带宽为500M,不能满足大图像的传输速度要求,通过调整网络带宽为“双千兆”网络覆盖,上下行对等,解决了此问题。我们总结了以上经验和教训,并向其他技术人员分享,形成组织过程资产,作为以后项目的宝贵参考文件。当然我深知,成为一名优秀的架构师,还需要在今后的工作中和学习中不断的总结经验,吸取教训,和同行进行交流,加强自己的系统架构与设计能力,提升自己业务水平,力争为我国医疗信息化建设多做贡献。

















暂无评论内容