医疗信息系统私有云建设方案探讨
2012-10-15刘芳管新袁飞杨继奎
刘芳,管新,袁飞,杨继奎
南通市通州区人民医院 信息科,江苏 南通 226300
随着公众对自己健康越来越关注,人们希望医疗机构能够提供更加优质的服务,健康信息服务是医疗服务的重要组成部分,大众希望得到高效、快捷、安全的健康信息服务,同时能方便地获取全面的个性化健康信息,例如个人健康档案信息、个人电子病历信息。这对当前的医疗信息系统提出了更高的要求,甚至可以说是挑战。
医疗信息系统本身也积累了海量数据。如何利用好现有的数据为大众提供更好的信息服务,也是一项艰巨的任务。
近年来IT业兴起的云计算模式为应对这样的挑战提供了一个很好的解决方案。
1 云计算兴起的背景
1.1 谷歌、亚马逊等大型网站对于海量数据存储和高计算性能研发成就了云计算
对于用户来说,远端的数据存储和软件服务可以看作是云端,用户不用关心数据和服务从哪里来,就像享受随用随到的电力和水力服务一样享受着来自云端的软件服务和各种各样的数据。云计算的关键是建立好数据中心和计算中心[1]。
海量数据存储可以理解为数据中心,高性能计算可以理解为计算中心,数据中心和计算中心并不是割裂的,而是合二为一的。实现方法主要是将多台计算机通过高速网络连接起来,提供近乎无限的数据存储、计算能力和完美的可靠性。
数据中心最关键的是管理软件,通过管理软件来管理好加入数据中心的每一台计算机,管理好计算任务和数据存储的负载均衡。
据微软网站的介绍,微软云计算中心每月都要加入上千台服务器来提高服务能力以满足不断增长的用户需要。微软云计算中心为全世界的数十亿用户永不间断地提供着HotMail、SkyDrive、Office365 等在线应用服务。
医疗机构的健康信息中心同样面对着海量数据存储和高性能计算能力的扩展需求。健康信息中心也应该横向扩展,即通过增加计算节点来扩展计算能力。当中心感到在业务高峰计算能力不足,要通过加入低成本计算机或者启动虚拟机加入服务器集群来提高计算能力[2]。
1.2 软件即服务
大型医院集团化管理对医疗软件的部署也提出了新要求,小型医疗机构加盟集团后,最好不需要重新部署信息系统,而是通过互联网免安装下载和使用信息系统的各模块。信息中心只要在后端服务器进行配置后,就能使新加盟的医疗机构融入到集团整个信息系统中,不再像过去通过购买盒装软件,省去软件购买、安装、升级等繁杂手续。
普通大众也希望通过互联网享受到信息中心的各种服务,要求软件终端本身就基于Web。用户的终端也不仅限于PC,越来越多的智能手机和平板电脑也拥有了类似PC的计算能力,并且在不远的未来,智能手机和平板电脑的数量将远远多于现有的PC数量。未来公众很可能通过智能手机终端软件去查询自己的电子病历和健康档案信息,或者通过智能手机做一些互动的健康咨询类似需求,医疗机构提供海量健康信息数据存储和计算中心,并通过电信网络和互联网为广大公众提供健康信息服务。
这些需求总结起来就是软件即服务,要求医疗信息系统要提供适应更多终端的客户端。
1.3 大中型医院的私有云建设和应用
健康信息属于个人信息,对于安全性要求很高,因此不能把健康信息存储到公共的云端,医疗机构必须建设自己的云计算中心,即私有云[3]。
私有云的另一个特点是云计算的特征,提供海量数据存储能力和强大的计算能力,并且提供方便快捷的软件服务。这个特点也可以使医院管理集团共享IT资源[4]。
建设私有云计算的核心在于建设和管理服务器集群[5-6]。
(1)要做到服务器集群的横向扩展。即通过增加计算机或虚拟机来近乎线性地提高计算能力和数据存储能力。
(2)新增加计算机或虚拟机时,不需要修改软件,只需要做服务器集群的配置操作。
(3)多个服务集群之间可以互相作为备份,提高整个系统的可靠性和安全性。
(4)服务器集群中应该有负载均衡管理功能,将业务高峰时的工作负担均分到各个服务器中,提高整个系统的性能。
(5)监控软件来监控服务器集群中各个节点的运行状态。
私有云不但能为本医疗机构信息系统和客户服务,还能作为一个重要的基础设施为其他医疗机构服务。例如,一个医院管理集团围绕着一个或若干个大型骨干医院以及其他加盟医院具有紧密合作关系,在医院管理集团内不但可以共享优质的医疗资源,也可以共享IT基础设施。一个医院管理集团可以集中优势资源建立一个高质量的私有云,集团内部的小医院不必再重复建设信息系统,可以直接使用集团私有云提供的各种信息服务和数据服务。小医院不仅大大降低自己的运营成本,而且获得和大型医院一样高质量高水平的信息服务。整个集团也可以做到信息的集中管理,大大降低运营成本。
1.4 私有云的安全问题
私有云的安全性也是一个焦点问题。
(1)确保基础平台的安全性,基础平台包括操作系统、数据库、Web服务器、网络中间件等[7]。① 服务器OS应采用Linux或者 Windows Server 2008 R2等安全性好的系统,并及时更新安全补丁。② 在操作系统上实施严格的安全策略。③ 数据库应采用 Oracle、DB2或者SQLServer2008等安全性好的DB,并规划好用户、角色和数据的存取设置。数据库服务器必须有热备。④ 数据库数据和文档化的非结构化半结构化数据必须冗余存储[8]。⑤ 安装和打开网络防火墙,关闭不用的DNS域名、IP和端口。⑥ 安装网络杀毒软件并及时更新。
(2)应用软件本身应该具备严密、完备的安全性。① 充分利用操作系统和数据库所提供的安全性功能,划分不同账户、不同角色,各自能够访问的数据。② 应用软件本身应该提供账户、角色和功能的使用权限设置。③ 应用软件应提供完备的Log记录功能,对于敏感操作和敏感数据的存取要做到留痕。④ 系统账户信息、用户账户信息等核心数据应该加密存储。
(3)规划好内网和外网(可以访问互联网)的网络拓扑结构,保证内网的安全。① 确保内网和外网物理隔离,确保内网数据不能被外网访问。② 外网需要访问内网数据的时候,必须通过代理服务器访问,不能直接把内网服务器暴露出来。③ 外网的访问请求和数据传输必须加密。应该为每位外网用户提供软数字证书或硬数字证书,以便对传输数据进行加密,对其身份进行认证。
2 私有云的实现方案探讨
下面结合医院的实际情况讨论一个私有云建设具体实施方案。现有的HIS数据库一般采用单台服务器模式,如果需要扩展计算能力必须要纵向扩展,所谓纵向扩展就是增加单台服务器的硬件配置,例如增加内存、增加CPU核心的数量等,纵向扩展的优点是软件不需要修改,但是扩展成本很高,而且扩展能力十分有限,单台机器上的硬盘IO和网络IO是一个绕不开的瓶颈。
所以想要无限地并且接近线性扩展系统的数据处理能力,服务器必须做到横向扩展,即通过增加廉价的计算机节点来扩展系统的数据处理能力,数据处理任务分发给不同的服务器,这就要求软件要做大的改造[9-10]。
2.1 通过增加计算机,即横向扩展来提高整个系统数据处理能力
现阶段的HIS仍然建立在数据库基础上。数据的存储一般都放在数据库里。医院的业务高峰时也是数据库服务器访问量的高峰,单个数据库的IO吞吐量往往成为整个系统的处理瓶颈,要突破这个瓶颈,应该建立数据库服务器集群,计算任务分发给群内的计算机,并且对集群进行完善的管理。
数据应该通过网络广播和复制功能分发到不同的数据库服务器上,数据必须冗余保存到多个数据库服务器[11]。服务器通过管理模块有机组成一个完整的数据存储和提供数据访问的服务单元,我们称之为数据库服务器集群[12]。
2.2 利用数据库的数据复制功能建立数据库服务器集群
数据库服务器集群的关键是对内可以做到横向扩展,即通过增加机器来提供数据存储能力和提高数据吞吐量,对外作为一个整体提供数据访问服务。
在集群内应使用数据复制功能,将数据通过一定的策略广播到不同的数据库实例中。目前HIS采用SQLServer作为数据库平台有很多,可以利用SQLServer数据库本身提供的事务数据复制功能,在服务器之间复制数据[13]。
集群管理模块要有一个数据存取的路由算法对SQL语句进行分析并转发到不同的服务器上存取数据[14]。
以下方案参考了某超大型电子商务网站的数据库配置方案,该方案完全能高效处理每天增加1G数据的数据量,足以应对目前国内任何一家大型医院的要求。
2.3 面向医院信息私有云的数据库服务器集群建设方案
2.3.1 方案综述
该方案的软件部分主要有以下几个组成部分:见图1
图1 数据库服务器集群建设方案的软件组成
(1 )各种客户终端:PC、平板电脑、智能手机。
(2)WebServices 应用服务器,例如基于IIS的WebServices服务器。
(3)数据库集群管理模块,该管理模块内置了负载均衡模块。
(4)数据库服务器集群,集群内根据服务器的功能角色还可以分为:① 原始数据存储服务器;② 热点数据处理服务器;③ 历史数据处理服务器。
客户端的服务请求通过HTTP WebServices提交给Application Server 后,由Application Server 转发给数据库集群管理模块(Database Cluster Management Module,DCMM),DCMM会对客户请求的数据进行分析,并将其分为三类:
(1)原始数据的存储。 原始数据单独存储,是要保证最好的原始数据处理性能。
(2)热点数据处理和查询。所谓热点数据就是近期常用的数据,它不是原始数据,而是原始数据的计算结果。
(3)历史数据查询和分析。所谓历史数据是属于以前并且不常用的数据。
如果配置了负载均衡功能的话,DCMM还需要调用负载均衡模块来确定最终客户请求要发送给哪台服务器。
2.3.2 数据库服务器功能角色分类介绍
数据库集群内包含了三类不同功能的服务器节点:
(1)原始数据存储服务器对HIS来说,原始数据是:挂号、处方、医嘱、电子病历、明细账目等信息。
该服务器接收来自DCMM的insert update 等SQL语句以及存储过程,接收原始数据并保存,为了提升性能,它不做任何计算。
原始数据保存后再通过高速网络通道复制分发给热点数据处理服务器。
当单台服务器IO处理成为瓶颈时,可以用相同功能的服务器组成集群,DCMM 相应地要增加负载均衡计算和路由功能。由负载均衡模块来选择相对轻负载的服务器,提高整个系统的性能。
若存在多台原始数据存储服务器时,单台服务器所保存的数据也应该广播给其他原始数据存储服务器。
(2)热点数据处理服务器它主要是订阅和接收原始数据,并进行计算和缓存快照处理。例如,当接收到住院病人的医嘱数据后,计算住院病人的账户。
它接收来自DCMM的数据查询请求并返回相应的数据。
当单台服务器成为瓶颈时,要增加服务器并组成集群,同样的,DCMM要相应增加负载均衡计算和路由功能。
若存在多台热点数据处理服务器时,单台服务器所处理的数据也应该广播给其他热点数据处理服务器。
随着时间的流逝,当热点数据渐渐变成乏人问津的数据后,它通过复制功能将数据复制给历史数据处理服务器。
(3)历史数据查询和分析服务器专门用来作为对于相应速度要求不高的历史数据查询和分析服务器。
例如,出院3个月以上的病人数据可以转储到历史数据服务器里。一年前的部门报表也可以转储到历史数据服务器里等。
还可以采用SQLServer的Analysis Services 数据仓库服务器来构建数据仓库存储和查询功能。
2.4 负载均衡的实现方法
当集群内出现了多台相同功能的服务器时,就需要做负载均衡的计算将任务较为均衡地分发给单台服务器。
下面讨论一个简单的负载均衡逻辑。
(1)负载均衡模块应随时记录所有可用的服务器并记住它们的网络位置,服务器可以通过向负载均衡模块发送心跳消息来报告自己的位置。当负载均衡模块在一定时间段内未能收到某台服务器的心跳消息时,应将其从服务器列表中删除。
(2)负载均衡模块应随时记录每台服务器的业务负载值。当负载均衡模块分发任务给某台服务器时,应该相应增加该服务器的业务负载值。当负载均衡模块收到服务器处理完任务的通知后,应该相应减少该服务器的业务负载值[15]。任务本身可以带权重值,这样使得业务负载计算得更加准确。
(3)负载均衡模块收到任务请求后,应该遍历每一台服务器并检查其负载值,从中选择一个业务负载最小的服务器执行任务。
(4)负载均衡模块本身应具备较强的健壮性,例如可以增加崩溃后自动重启功能等,保证该模块7×24 h不间断运行。
通过负载均衡模块就可以做到服务器节点的横向扩展。
3 对私有云计算发展的展望
私有云总是以数据处理为中心,现阶段主要以提高数据处理能力和存储能力为主,建设具有横向扩展能力的数据库服务器集群,并且不断提高自动化管理能力,降低管理成本,同时注意加强数据的安全性和系统的可靠性。
近年来,随着云计算规模不断扩大,为了解决对海量数据进行高效处理的迫切需求,Hadoop以及一批开源的NoSQL数据库系统异军突起。
Hadoop 是一个能够对大量数据进行分布式处理的软件框架。它是以一种可靠、高效、可伸缩的方式进行处理的。Hadoop 有许多元素构成。其最底部是 Hadoop Distributed File System(HDFS),它存储 Hadoop 集群中所有存储节点上的文件。HDFS(对于本文)的上一层是 MapReduce 引擎。MapReduce 主要是对具有键值对数据特征的数据建立键值对映射关系并简化映射关系,MapReduce能够并行计算,充分利用集群内的CPU节点计算能力。MapReduce 对于网页关键字索引、日志分析、结构化数据分析都非常有用[16]。
NoSQL即非关系型数据库,云计算要求数据处理系统在海量数据存储条件下还需要高性能的读写,关系型数据库已经无法满足这样的需求了。例如,在拥有上亿条记录甚至数十亿条记录的数据表里进行SQL查询,其性能之差是无法忍受的,传统关系型数据库是用分表分区的方法来解决大数据表的查询读写问题,但是还是会出现针对整个数据表并且跨分区的统计查询。
NoSQL就是为了解决这些问题而孕育产生的。
NoSQL的设计目标就是最大限度利用系统IO和系统内存,高性能处理海量数据。
NoSQL一般不支持事务处理,这极大提高了数据写入的性能。
NoSQL不支持多表连接查询,查询只针对单表,极大提高了读取速度。
NoSQL一般都原生支持数据存储节点的横向扩展。例如MongoDB的Auto Sharding功能会将数据分割、分片存储到不同的机器上,并且这一过程在服务器内部自动完成,客户端感觉不到这个过程[17]。
NoSQL充分利用内存做缓存,从而实现了超高性能的数据读写。例如Redis,它会把所有的数据全部加载到内存里。
目前,国内应用比较广泛的NoSQL产品有:MongoDB、Redis,还有谷歌的HBase。
NoSQL的数据存储主要分为两种,第一种是Key-Value键值对,例如 Redis、Memcached等系统;第二种是面向文档的数据库,如MongoDB。
以MongoDB为例,保存的数据为json格式[18],数据的增删改很方便,但是无法做数据集合之间的关联查询,所以在MongoDB中建表的话,要建立很多冗余字段,这对于HIS系统有些不方便,因为HIS系统中的数据有大量的关联特性。
目前在医疗行业,用NoSQL的还比较少,主要是因为主流成熟系统都是建立在关系数据库之上,其次,医疗信息系统比较复杂,数据结构关联性比较高,目前NoSQL提供的数据结构存储过于简单。NoSQL本身也需要进一步成熟和完善。
我们有理由相信,随着NoSQL的不断发展成熟,NoSQL凭借自身优良特性一定会应用到医疗信息系统私有云中。
4 结束语
本文对云计算兴起的背景进行了简单介绍,提出了大型医院或医院管理集团应建设自己的私有云计算中心。
结合现有HIS的实际情况,医院私有云建设的核心应该是改造现有的信息系统,尤其是后台数据库系统,使数据库服务器能做到横向扩展,即增加较廉价的服务器节点以不断提高整个系统的数据处理能力和数据存储能力。
本方案首先对数据库功能角色进行分类,不同角色的数据库服务器通过数据复制功能广播和分发数据,原始数据服务器将原始数据复制给热点数据服务器,热点数据服务器复制给历史数据服务器。
方案中需要开发一个数据库集群管理模块DCMM来对数据库服务器集群进行管理,DCMM对客户端数据请求分类后,分发给不同角色的数据库服务器,如果相同角色的服务器有多台,还需要做负载均衡来分担工作负载。
最后,本文对私有云的发展做了展望,NoSQL今后很可能会在医院私有云中得到广泛地应用。
本文方案所介绍的私有云实现方法,足以应对国内目前任何大型医院的数据存储和数据处理需求。
[1] 吴朱华.云计算核心技术剖析[M].北京:人民邮电出版社,2011.
[2] 尚可.私有云:不需新购硬件[J].软件和信息服务,2011,(12):76-77.
[3] 网界.公有云VS私有云到底谁更安全?[J].中国数字电视,2011,(12):70-71.
[4] 雷万云.云计算:企业信息化建设策略与实践[M].北京:清华大学出版社,2010.
[5] 姚青岭.区域医疗云计算服务中心模型[J].中国医疗设备,2011,(12):49-51.
[6] 刘娟.简述三种私有数据库云模型[J].信息安全与技术,2011,(12):50-51..
[7] Tim Mather, Subra Kumaraswamy, Shahed Latif. Cloud security and privacy: an enterprise perspective on risks and compliance中文版[M].刘戈舟,杨泽明,刘宝旭,译.北京:机械工业出版社,2011.
[8] 李知杰,赵健飞.云计算数据中心网络安全的实现原理[J].软件导刊,2011,(12):35-36.
[9] 尹雪蓉,尹今扬.云计算模式的医疗信息管理平台构想[J].中国医疗设备,2012(6):74-76,129.
[10] 曾劭清.私有云是企业架构的改变[J].中国信息化,2011,(21):66-67.
[11] 周游,刘鹏,杨盛祥,等.基于私有云的数据冗余技术研究[J].电脑知识与技术:学术交流,2011,(1):16-19.
[12] 刘字.企业私有云平台构建技术研究[J].计算机时代,2011,(6):37-41.
[13] Brian Knight.Professional Microsoft SQL Server 2008 Administration中文版[M].腾灵灵,付勇,译.北京:清华大学出版社,2010.
[14] 杨志豪,赵太银,姚兴苗,等.一种适应数据与计算密集型任务的私有云系统实现研究[J].计算机应用研究,2011,28(2):621-624.
[15] 李琦,朱庆华,华彦玲,等.私有云环境下的资源竞价机制研究[J].情报杂志,2011,(4):10-12.
[16] 孙福权,张达伟,程勖,等.基于Hadoop企业私有云存储平台的构建[J].辽宁工程技术大学学报:自然科学版,2011,30(6):13-16.
[17] Kristina Chodorow, Michael Dirolf. MongoDB: the definitive guide中文版[M].程显峰,译.北京:人民邮电出版社,2011.
[18] 杨磊.基于NoSQL数据库的结构化存储设计与应用[J].科技风,2011,(18):99-100.