基于微服务理论的大中型医院门诊信息服务系统的设计与实现

2019-09-04 10:00赵龙张云华
软件工程 2019年8期
关键词:微服务

赵龙 张云华

摘  要:随着现代医疗条件不断提升、患者就医需求日益增加,医院门诊部门人流大幅度增加,部门运转压力增大。为了缓解医院门诊业务压力,优化门诊流程,合理分流人群,合理引导患者有序就诊,本文设计并实现了一个基于微服务理论的门诊信息服务系统,引导患者快速完成就医环节、减少等候时间、避免纠纷,同时大幅度降低医护工作人员维护就诊秩序的工作量。

关键词:微服务;门诊信息服务;优化流程

中图分类号:TP311.5     文献标识码:A

Abstract:With the continuous improvement of modern medical conditions and the increasing demand for medical treatment,the outpatient has increased substantially,which add additional pressure on the department.In order to ease the stress on the outpatient department,this paper designs and implements an outpatient information service system based on micro-service theory to optimize the medical process and patient management,guiding the patients to be treated orderly.With the help of this system,patients will be able to enjoy a more favorable medical environment with efficient treatment,less time for waiting and less disputes.Meanwhile,the workload for maintaining the order will be greatly reduced.

Keywords:micro-service;outpatient information service;optimization process

1   引言(Introduction)

伴随着中国城镇化建设的步伐,在大城市的带动下小城镇的生活节奏也发生了难以想象的变化,居民的生活水平在不断提升,对教育、医疗这些国民基础项目的服务水平也越来越高,传统的医疗服务效率低下,医疗资源无法得到更高效的使用,造成了一部分资源的浪费,降低了看病治病的效率。并且随着医院业务需求的增加,系统设计、更新换代也变得更加复杂化。

传统的Spring框架(MVC架构)并发量差、容错性差,当用户大规模访问时服务器后台因为一些原因导致服务器奔溃,用户体验很差,服务质量得不到保障。而采用Spring(微服务架构[1])可以将单个项目拆分成多个子模块分别部署在不同服务器上,采用负载均衡策略对各个模块进行部署。高效地解决了在患者集中挂号时期的服务器宕机问题,方便了医患者使用,提高工作效率。

门诊信息服务系统主要是为患者(或家属)服务的信息系统,它是数字化医疗[2]的重要组成部分,是医院信息化建设的对外窗口。全方位向患者提供咨詢信息,向患者实时发布就医进程,引导患者进行排队候诊,合理分散人流。对分布在不同场景的信息服务显示屏、自助机具及其他相关硬件设备,进行远程监控和管理。

2  微服务架构的研究(Research on micro-service architecture)

微服务(Microservice)是在2012年的,作为加速Web和移动应用程序开发进程的一种方法,是一种架构风格和模式,通过将复杂的系统分解成更小的、批次协同工作的服务,形成大规模的商业服务,其是自主的、自包含的和可独立部署的服务。当今世界,许多企业构建大型的、面向服务的企业应用程序时,都默认将微服务作为标准。由于SpringBoot框架的强大,开发微服务不再冗长乏味。

SpringBoot的优势:

(1)简化编码:SpringBoot帮助开发者快速建立并启动一个Web容器,在SpringBoot中只需要添加stater-web依赖即可更加方便管理依赖库。

(2)简化配置:SpringBoot更多采用Java Config的方式,对Spring进行配置无需提供复杂的xml、Annotation的配置方式。

(3)简化部署:SpringBoot内嵌了tomcat、jetty等服务器,只需将项目打成jar包、war包,即可一键启动。

(4)简化监控:我们可以引入spring-boot-start-actuator依赖,直接使用 REST方式来获取进程的运行期性能参数,以达到监控的目的,比较方便。但Spring Boot只是微框架,没有相应的服务发现与注册的配套功能,没有外围监控集成方案,没有外围安全管理方案,所以在微服务架构中,还需要dubbo等来配合一起使用。

3   系统总体架构设计((System design for the overall framework)

为了提高系统的高可用性,部署方便,提高模块复用率,减少各模块之间相互依赖,方便升级,以及系统的集中管理,采用多层分控结构设计包括主服务单元、子服务单元以及显示单元。总体框架图如图1所示。

(1)数据库:主要负责医院数据的存储可分为患者信息,医护信息、医疗设备信息、医院综合能力评估信(专家评审、患者评审、医护自评等),医院病历数据(历史病历、常见病病历、罕见病病历等)。所有数据进行统一的存储与管理,一切数据均存储在MySQL中,而对某些常用信息(医护信息、长期病患者慢性、病患者、ICU患者等一些特殊患者信心)会在Redis进行二次存储,以方便读取。

(2)具体服务:把逻辑层处理过的最终数据通过接口调用的方式存储到MySQL中,并对敏感数据进行二次更新或存储到Redis中。

(3)业务逻辑层:主要提供给屏幕显示下达指令,实现顺序叫号、重复叫号、过号等分诊服务器操作,以及医生、诊室、诊位信息的维护操作,计算统计医院的评估值等操作,为用户界面提供高效的支持。

(4)用户界面:主要通过ElementUI+vue.js实现常规的显示(患者挂号情况、医生就诊情况、患者取药情况、医院评估统计的实时显示)设备运转统计、常见病处理方法展示等。

4   系统模块设计(System module design)

4.1   信息发布模块

给用户提供编辑节目的页面信息显示服务器对终端设备按照组进行管理,编辑号节目单之后可以选择节目单适用哪些设备播放,节目单包括患者排队信息、患者就诊信息、医生叫号信息、患者取药信息以及医院的常规通知信息,医院评估信息等,具体结构如图2所示。

4.2   排队叫号

排队叫号系统分为医生端叫号器、分诊服务器、护士工作站、一次分诊屏、二次分诊屏,自助报到机。

(1)医生端叫号器

采用虚拟叫号软件或者跟诊疗系统结合的方式实现,有三个功能:顺序叫号、重复叫号、过号。操作调用分诊服务器提供的接口。

(2)分诊服务器

分诊服务器是核心,主要进行队列的处理。

(3)分诊屏幕

一次分诊屏和二次分诊屏只需要显示二次就诊队列当前状态即可,每次队列有变化,则触发一次显示刷新。显示功能交给信息发布的显示模块进行。

(4)护士工作站

护士工作站通过分诊系统的接口对分诊系统的排队情况进行调整。包括:医护工作者信息维护、诊室信息维护、诊位信息维护、医生和诊位的对应信息、对诊位和医生状态的设定:开诊、暂停、闭诊、一级分诊队列排队顺序调整,包括调整患者优先级,调整同优先级的患者就诊顺序。

有分诊实时统计功能,能够显示当前诊区的基本状态,比如今天总挂号量、总报到量、已经就诊人数、等待就诊人数,包括每个号别的统计,每位医生平均诊治时间,实际开诊时间等等,提供给分诊台护士。

简化配置功能,尽量让软件配置与实际的场景相一致,如果出诊没有变动,则开机自动运行,到点切换。如果出诊有变化,护士能够对配置做微调。

有群发短信功能,能够让护士在系统上给医生群发通知短信,可以选择定时发送或者自由发送,提醒医生不要忘记出诊时间。

具体的结果图如图3所示。

4.3   设备管理

此模块的功能比较单一,通过监测设备运行情况,将运行状况实时回传到告警管理中心并对故障设备进行故障鉴定,制定报警级别。录入设备信息,报警编号等方便检修人员的进一步查看检修。

4.4   医院综合评估

通过对模糊综合评价算法对评价因素(评价因素包括专家评审、患者评审、医院工作人员的自我评价以及综合治愈率)建立评价因素集和评语集,确定被评价因素的权重比和构造模糊判断矩阵,通过模糊理论将权重矩阵和判断矩阵合成综合评价矢量值,并对矢量值进行结果分析,将综合评价结果转换为相应实体对象入数据库中。

5   系统实现(System implementation)

5.1   技术栈支持

该门诊信息服务系统采用SpringBoot+Dubbo+Redis+RabbitMQ方式搭建系统架构。

Dubbo是一款高性能、轻量级的开源Java RPC框架它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。该框架不仅实现了高性能、高可用性,而且使用方便,扩展性极佳[3]。

Spring Boot是Java领域知名的微服务框架,微服务的目的在于化解整体架构服务的复杂性,以简单快速的方式实现各个服务的部署和变更。而SpringBoot提供了形式多样的库,支持JPA、RESTFul、Docker等技术,能够让配置、部署和监控变得简单方便[4]。

Rabbit MQ基于Erlang语言编写,用于在分布式系统中存储转发异步消息,将彼此独立的计算机连接形成松耦合的系统,Rabbit MQ在易用性扩展性、高可用性等方面表现不俗[5]。

Redis是一款基于内存的、可持久化的非关系型Key-Value存储系统,它支持多种数据类型,并支持原子性操作。Redis与其他Cache相比,拥有更多的数据结构并支持更丰富的数据操作[6]。

5.2   数据访问实现

数据层MyBatis框架提供的注解标注实现访问即通过编写mapper文件与标注@Mapper的Dao层接口一一对应,实现对象关系映射。

5.3   业务逻辑层实现

本系统从前端返回的数据类型均为application/json格式,采用类注解@RestController的形式接收返回的数据,通过@RequestMapping的匹配请求地址,查询数据采用GET方式,@GetMapping请求数据,以及POST方式@Post Mapping提交数据,并采用DELETE方式@DeleteMapping删除数据,以及PUT方式@PutMapping修改数据,同时采用@RequestParam和@PathVariable提供参数据。

5.4   页面实现

系统采用ElementUI+VUE.js的前端架构来实现页面编写,VUE负责与后台数据交互和前端页面数据的动态渲染,ElementUI负责静态页面的编写。

6   结论(Conclusion)

本文描述了有关微服务架构的理念和优点,并且基于微服务架构体系开发了大中型医院的门诊信息服务系统介绍了各模块的设计以及实现方法,在实际业务中微服务的架构体系为门诊信息服务系统后续功能的扩充,建立更加完善的医疗服务体系提供了良好的技术支撑。此系统的应用极大优化了患者就医的流程,使得就医更加方便、快捷,减少了医疗资源的浪费。

参考文献(References)

[1] Balalaie A,Heydarnoori A,Jamshidi P.Microservices Architecture Enables DevOps:Migration to a Cloud-Native Architecture[J].IEEE Software,2016,33(3):42-52.

[2] Steinhubl Steven R,Topol Eric J.Digital medicine,on its way to being just plain medicine[J].NPJ digital medicine,2018(1):1-5.

[3] 陈晓栋.基于Dubbo分布式框架的信用卡无卡大额分期系统设计[J].信息与电脑(理論版),2017(07):132-135.

[4] 温晓丽,苏浩伟,陈欢,等.基于SpringBoot微服务架构的城市一卡通手机充值支撑系统研究[J].电子产品世界,2017,24(10): 59-62.

[5] 鱼朝伟,詹舒波.基于Rabbit MQ的异步全双工消息线的实现[J].软件,2016,37(2):139-146.

[6] 曾超宇,李金香.Redis在高速缓存系统中的应用[J].微型机与应用,2013,32(12):11-13.

猜你喜欢
微服务
数字文化馆建设中的“微服务”
基于微服务架构的日志系统
微服务架构及相应云平台解析
基于供给侧改革理论的图书馆社交网络微服务研究
微信公众平台在医院图书馆的应用现状调查
基于微信企业号的校园移动服务
微服务视角下高职图书馆数字资源使用分析
从单一模式系统架构往微服务架构迁移转化技术研究
微媒体时代高校图书馆阅读推广微服务探析