姚安琪,王晓梅,朱华东,熊丽娟,惠朴真,王宇,陈艺飞
(1.皖南医学院,安徽 芜湖 241000;2.皖南医学院第一附属医院,安徽 芜湖 241000)
当前医疗行业的信息系统,其架构主要有C/S(客户机/服务器)及B/S(浏览器/服务器)两类,有相当多的医院信息系统(HIS)选择C/S 架构[1,2]。C/S 架构优点是系统响应快、用户体验好、能充分利用客户机资源(如打印机、数据缓存)等[3]。然而C/S 架构需在客户端部署应用程序,因HIS 需求变化频繁,客户端数量大且分散,这些都给C/S 架构的系统升级和修复Bug 带来了不小的挑战[4]。以前常用的应用系统更新方式为医院信息中心技术人员拿着U盘跑现场更新应用程序,这种方式繁琐且工作量巨大,已经慢慢被淘汰,取而代之的是管理员将应用程序文件放在共享文件夹中,通过网络手动下载更新,这种方法仍然减轻不了医院信息中心技术人员的工作量。因此,为了提高工作效率,寻求更加快捷的C/S 架构软件更新的方式方法已迫在眉睫[5-7]。
软件自动更新的实现实质上是在服务器和客户机之间进行通信和传递数据[8]。本系统设计成服务器端、客户端和目标应用程序版本自检嵌入三个模块,实现服务器与客户端之间的信息交流和数据传递。服务器端模块主要功能是维护各应用系统客户端文件,每个应用系统维护正式版和测试版两个版本,客户端文件分允许修改和不允许修改两类。此外,服务器端功能还包括对应用程序初次安装申请的审批。应用程序版本自检嵌入模块主要功能是监测本应用系统客户端文件完整性,包括文件是否存在、文件大小、文件修改时间等。一旦发现客户端应用程序文件丢失、被非法修改或服务器端有新版本发布,将启动客户端自动更新进程,从而确保客户端应用程序文件和版本始终与服务器端保持同步。客户端模块主要功能包括应用程序初次安装申请和对客户端文件进行新版本下载更新。
数据库概念模型如图1 所示。
图1 数据库概念模型
用户登录到目标应用系统时,系统读取该用户是否为目标应用系统测试版用户,如为测试版用户,应用程序版本自检模块将比较客户端应用程序文件与服务器端该应用程序测试版文件,如不存在该测试版本,则比较服务器端该应用程序正式版文件。如该用户不是测试版用户,应用程序版本自检模块将比较客户端应用程序文件与服务器端该应用程序正式版文件。比较内容包括文件名、文件大小、文件修改时间,如发现客户端某个文件不存在(被非法删除),或不允许修改的文件大小、文件修改时间与服务器端不一致,则调用客户端自动更新进程,完成目标文件下载更新。服务器端文件上传时,选择版本类型、更新类型、是否强制更新等信息,如图2 所示。
图2 文件上传界面
常见的文件存储方式有文件存储和数据库存储两种[9]。前者由于下载文件时客户端通过文件url发起下载请求,无法对文件下载权限进行拦截,导致文件安全性得不到保障,此外该存储方式文件易被误删、误改和病毒感染。后者将文件以二进制方式存储于数据库中,可方便实现文件访问权限管理,文件也不易被误删、误改和病毒感染,文件下载性能比文件存储方式好,其缺点是会增加数据库负担,但因文件下载频率不会很高,对数据库整体性能影响不是很大。结合以上两种存储方式的利弊,最终采用数据库存储方案。同时结合应用服务器缓存技术,尽量减少对数据库服务器的压力。即当客户端请求下载文件时,在应用服务器中会缓存一份与数据库版本一致的应用程序文件,而当其它客户端进行相同文件下载时,直接从应用服务器缓存读取文件。
当客户端进行文件下载时,需要先获取对应文件的下载信息,再进行文件下载。在获取文件下载信息时,程序会预先判断应用服务器中的缓存文件是否与数据库中的文件一致,如果应用服务器中的文件与数据库中的文件不一致,系统先尝试获取存放应用程序文件的文件夹的锁权限,以避免多个进程对同一份应用程序文件更新的时候造成并发问题。只有在获取到文件锁权限之后,再进行应用服务器中文件的同步,最后释放文件夹的锁权限,并返回文件信息到客户端。
客户端在下载完需要更新的应用程序文件后,对于需要更新的文件,将下载的文件覆盖旧版本文件。对于新增的下载文件,则添加到对应位置,同时删除旧版多余的文件,最后由更新程序打开目标应用程序。更新界面如图3 所示。
图3 更新界面
(1)二进制方式存储。应用程序文件上传后以二进制方式存储于数据库中[10],不会被误删、误改和病毒感染,不仅安全性和可靠性高,而且性能比FTP 方式好。
(2)自我修复、更新功能。如发现客户端自动更新系统部分或全部文件丢失、被非法修改或有更新版本,将首先实现客户端自动更新系统自我修复和自动更新,然后再更新目标应用程序。
(3)限制安装功能。目标应用系统可设定为“限制安装”,目标应用系统在终端初次安装时,客户端必须正确输入用户名和密码后完成登录,选择目标应用系统,并选择申请科室、输入电脑位置和联系电话,完成安装申请,经管理员审批通过后,才能进行目标应用系统自动安装。
(4)应用程序文件监测功能。实现对目标应用程序文件内容实时监测,一旦发现文件丢失或被非法修改,系统将立即启动自动更新进程。
(5)应用程序版本监测功能。实现对目标应用程序版本实时监测,一旦发现应用程序有更新版本,系统将立即启动自动更新进程。
(6)支持同时存在测试版和正式版两个版本。管理员可授权少数用户为目标应用系统测试用户,将待更新的目标应用系统先上传测试版,只有目标应用系统的少数测试用户可自动下载该应用测试版。试用后如果发现异常,影响范围小。试用后如果没有异常,管理员再将测试版本改为正式版本,提高系统可用性、安全性和可靠性。
(7)支持强制更新。当应用程序自动更新系统发现目标应用服务器端有更新版本时,将自动启动更新进程,此时管理员就可以对目标应用程序版本设定为强制更新或非强制更新,如设定为强制更新,则强制正在使用目标应用程序的用户立即更新目标应用系统,如设定为非强制更新,则允许正在使用目标应用程序的用户延后更新目标应用系统。
C/S 架构医院信息系统自动更新系统弥补了C/S架构需要手动更新应用程序的不足,确保客户端应用程序文件始终与服务器端保持同步,防止应用程序文件被非法修改。该系统投入使用后不仅很大程度上减少医院信息中心技术人员的工作量,而且目标应用程序使用申请和审批功能,规范目标应用程序的安装和使用。此外,系统提供的测试版应用程序功能,使新版目标应用程序先在小范围内试用,无误后再扩大应用范围,提高了应用系统的可靠性和可用性。