“外行看功能,内行看架构”,医院基础系统架构设计的重要性不言而喻。首都医科大学附属北京世纪坛医院(以下简称“世纪坛医院”)的HIS系统于2004年上线,5年后由于原HIS厂商倒闭,系统运维工作由医院信息中心独立承担。因上线时间久,其系统架构已难适应医院业务发展的现实需求。在借鉴行业先进解决方案、听取业务部门意见基础上,世纪坛医院于2018年开启了HIS系统架构自主优化之路,时至今日已初具成效。
2021年5月9日,在中国研究型医院学会医疗信息化分会医疗和临床科研大数据应用专业委员会主办、HIT专家网承办的 “2021年医疗大数据融合发展·香山HIT青年论坛”上,世纪坛医院信息中心工程师王鹏分享了HIS系统架构优化的经验。
原HIS 系统架构面临安全、效率等深层问题
世纪坛医院的HIS系统开发语言为Visual Basic 6.0,数据库采用Oracle 11G,结构为C/S,服务器为IBM P740。因上线时间早,原系统为“客户端直连数据库”的两层架构,带来一定的运行效率及安全性问题,同时也造成“开发改造中面临的问题多源于架构问题”的积弊。
为了从根本上解决问题,信息中心决定全面梳理系统深层问题,主要表现在以下三个方面:
一是安全性及运行效率问题。
原“客户端直连数据库”的两层架构,造成所有的网络终端节点都可以直接访问数据库,带来安全隐患。同时因“有多少客户端,就相当于有多少个数据库连接”,随着医院业务量增长,数据库运行压力随之增加。峰值期间数据库约有2700多个连接,导致系统资源浪费,数据交互实时性差。
二是改造成本问题。
C/S架构导致系统模块之间相互独立,代码复用性差,开发改造成本较高。
三是管理成本问题。
系统缺少日志监控,出现问题排查困难,常见的数据库锁需人工花费较长时间处理;业务逻辑不合理,日常运维管理成本较高。
通过分析问题,系统架构优化的需求随之清晰,需求主要有三:一是系统架构由两层变为三层,提升系统安全性和运行效率;二是提供日志全程检索和查询功能,降低运维难度与成本;三是改变与第三方接口的对接方式,实现接口方式的低耦合、实时性、多样化。
同时,信息中心确定了系统架构优化的基本原则:不能影响现有系统的使用,要做到逐步改变、逐步替换;在系统上运行的程序众多,数量高达91个,因此要尽可能减少客户端的改造工作量。
增设服务端,架构优化带来运行效能提升
世纪坛医院在HIS系统架构优化中实现的最大变化是增设服务端,系统由“客户端-数据库”两层架构,改为“客户端-服务端-数据库”三层架构。基于以上架构升级,系统的整体安全性、运行效率等均有所提升。
一是系统运行效率提升。
改造后,客户端在程序启动时,先连接服务端的负载应用服务器,由负载应用服务器分配一个可用的应用服务器。客户端后续每次请求,都会连通到应用服务器,由应用服务器进行数据处理后,放入采集日志服务器(如图1所示)。由此减少了客户端与数据库的连接数,数据库的长连接从1500多个降低到300多个,减轻了数据库压力。
图1 优化后的HIS系统业务流程
二是系统安全性、稳定性增强
服务端采用分布式部署,负载均衡服务器和应用服务器之间通过心跳检测机制实时监控运行状态,并能做到故障的自动转移。同时,服务端增加安全认证功能,对所有访问链接进行安全认证,确保认证通过,才允许运行。
三是降低管理成本
服务端具备日志监控功能,每一条日志都会详细记录执行状态,包括执行时间、返回行数,以及所属程序、模块,能够帮助运维人员快速定位问题,便于后续的错误查找。
四是减少改造成本
服务端收集所有客户端的SQL,方便运维人员通过服务端查询SQL内容,进而对SQL进行优化。同时,为减轻客户端改造代码量,将服务器返回的json经过转换,装载到AdoDB.Recordset模块。这样客户端需要修改时,通过模块替换就可完成大部分工作。
五是接口异步改造,减少客户端等待时间,提升用户体验
以门诊收费与发票监管系统对接业务为例,系统改造前,当收费操作启动时,发票信息会同时发送到票据监管系统,由票据监管系统返回结果后,系统才可结束本次收费任务。任务完成的时间长短,很大程度取决于第三方系统结果返回的时间;系统优化后,当收费操作启动时,客户端向服务端发送消息,启动一个异步线程,专门处理与票据监管系统的信息交互,从而可以极大减少客户端的等待时间。
未来将对HIS 系统进一步实施服务化改造
当前的系统优化工作仅是整个HIS系统改造计划中的一部分。在世纪坛医院信息中心的设想中,未来HIS系统应该将当前在客户端实现的业务功能,下沉到在服务端实现。客户端主要做好用户界面,突出简单稳定;服务端主要做好业务逻辑,突出集中可控。具体来讲就是按整洁架构的原则,分三层构建新的HIS系统:
最内层是核心层。
核心层包含医院级业务逻辑,主要包括数据字典和业务功能的原子操作。核心层不依赖任何其他层,作为“积木块”供其他层使用。核心层定义接口,由适配层实现。适配层根据外部存储环境的不同,如数据库、大文本或内存对象,实现具体的数据读取和存储操作。核心层的独立性保证了整个系统的稳定性和可测试性。
中间层是应用层。
应用层包含应用级业务逻辑,主要包括针对具体应用的处理规则判断及业务流程。应用层依赖于核心层,通过拼装核心层的“积木块”完成应用级业务逻辑,相当于具体应用的调度中心。如挂号操作,针对窗口应用和互联网应用的不同情况,在号源获取、前置检查以及后置通知等方面,应用层都有独立的业务逻辑。
最外层是适配层。
适配层是入口层,负责对接所有外部系统,验证入参有效性并进行数据转换,外部系统包括:医保系统、叫号系统、PACS系统等所有第三方系统,也包括数据库、文本等外部存储系统。适配层也是“防腐层”,通过定义接口,隔离了内部与外部两个系统,降低外部系统变化对HIS内部逻辑带来的风险。这部分改造工作,世纪坛医院信息中心已经逐步分模块地有序展开。
待服务化改造完成后,将重写客户端程序,并进一步优化应急系统切换、自动化测试、自动化发布等流程。