张正欣
(北京工业大学 北京 100024)
随着云计算[1]的迅速发展,现代的软件构成方式出现了很大变化,应用软件作为一个概念,已经早已不是指单机运行的庞大程序包了。相反的,由云计算提供的,以SOA[2]组件为基础构成的应用软件越来越多出现在各个应用领域。在电子医疗领域,面向普通用户,兼容以往不同的医疗数据,全国联网的医疗信息系统也成为了可能。
作为一个需要24小时不间断运转,在线用户可能在不同时间段出现巨大变化的信息系统而言,挑战也是非常大的。要想实现这样的公用系统,一个关键问题需要克服:那就是现有的系统服务器处理能力往往有限,网络上传带宽也非常有限,而系统访问量很不均衡,往往在一个短时间段内,系统访问可能会有爆发式增长,而在其他时间段则利用率较低。短时间大访问量是难于应对的,传统系统需要为应付此一段时间的访问量,装备巨大处理能力的计算机系统,申请大的网络带宽,但是在大量的时间里,这些硬软件资源都没有充分使用。资源就是成本,最终都会计入用户的账单,那大型服务系统应该如何设计,实现起来才能最大限度的便宜、可靠,让大量的用户用的起。
首先分析面临的第一个问题,面向服务系统的优势在于可以自由部署服务组件,作为一个单独运作的单元,服务组件与系统的联系仅限于其通讯接口所规定的数据和操作内容。基于这样的特性,一方面,让我们可以通过将服务组件寄宿到外部提供的服务器上运转,使用外部服务器的运行资源和网络资源,但在逻辑上归属于内部系统。这样实现减少系统网络资源和运行资源占用的目的,在服务器和网络带宽都有限的条件下,大型系统可以通过这样的方法方便的延伸处理能力。另一方面,对于系统的经济性而言,在没有外部大量访问的情况下,使用本地资源可以非常经济的为客户提供服务,但在短时间的大访问量面前,可以用租用的方式,将服务组件,放置到外部云计算系统上运行,租用外部运算资源和网络带宽,由此本地计算机的处理能力仅限于提供大多数情况,本地的网路带宽限于支持对外部可能部署的服务组件进行通讯的容量。这样可以合理的,大量的节约固定资产投资。从而,整个系统也就是一个普通用户用户用户得起的面向公众的信息系统了。
医疗信息服务系统的软件构架方式如图1所示,整个软件架构分为服三个主要层次,分别是核心服务层,基础服务层,以及应用程序层。服务层次从下向上,服务的粒度逐渐增大。下层是上层业务、应用实现的基础。
图1 医疗信息服务系统组成图Fig.1 Healthcare information service system organization
服务管理器的设计见图2,因为系统分别使用WCF实现业务服务,WPF实现界面服务,所有基础组件的基本运行环境是IIS7[3]服务器。系统需要知道的服务信息包括:服务的运行客户端IP地址或可解析的URL地址,在该地址上运行的端口号;服务的操作以及数据接口;服务的绑定方式;以上信息是服务在运行间的动态信息,除此以外,系统需要以文件的形式保存现有的服务,并记录文件存储地址,这是服务的静态信息。
服务静态信息[4]保证服务管理器可以方便的管理不同版本的服务,实现服务的可持续演进能力。单个服务保存多个不同版本,以适应运行测试等不同要求。服务由于与服务运行环境关联不大,使得整体系统具有高度可靠性,并能随着应用服务器的升级、更新实现自身的升级。不同服务没有共用数据区,使得服务数据独立性好,出现运行问题不会影响整体系统的运作。
动态信息在服务运行时需要动态维护。同时,系统的服务器分为内部和外部两部分,外部扩展服务器除对系统提交动态服务组件运行信息外,自身需要的信息包括:云服务提供商地址,用户名,密码,以及用于支付花费的信息等。
服务的运行机制[5]是服务管理器管理维护服务的基础原则,是整体服务系统实现动态扩张、收缩的基本运行规则。医疗信息服务系统的服务管理运行机制包括:
1)内部服务器处理器占用不高时,在系统添加新服务时,添加到内部服务器上。
2)在整体系统服务增加超过终止数量,内部服务器处理器占用达到一定程度时(如75%),开始启动外部扩张服务器实例,并将服务文件传输到外部服务器,打开服务。
3)当系统整体新增服务相对终止的服务较少,系统处在回缩状态时,如一外部服务器占用资源降低到一定程度(如25%),不将新服务添加到该服务器,并将其上服务在其他服务器预先运作加载,再逐次改变这些服务注册于UDDI的参数,将服务逐渐转出。待服务器上没有系统服务时,关闭该服务器。
图2 服务管理器类图Fig.2 Service management class diagram
详细设计中,服务管理系统的主要部分分为服务管理端(Service Manager)、服务运行代理(Service Agent)、以及服务文件信息、服务运行信息四部分。
服务代理端是实现了支持内部服务器 (Inside Server)和外部服务器(Outside Server)的标准接口,功能包括加载、停止服务,读取服务器上运行的服务列表,读取服务器上可以分配的端口号,外部服务器的管理功能还包括:外部云计算服务提供者信息,服务的访问基地址,用户名,密码,云计算的付账信息等,并可查询运行服务器的费用列表。函数包括为使用对方的计算资源付账操作。
服务文件信息,是当服务组件以文件的形式保存的时候,需要保存的信息,包括服务文件的编号,文件名,创建者(所有者),是否属于公用组件,保存密码,保存文件的位置。系统通过服务文件管理模块查找,并将服务文件加载到运行的服务器中。
服务运行信息,是服务发布并运行后,系统需要记录的信息,包括服务的编号,加载的服务器编号,服务组件运行的动态编号。利用服务编号,可以比对得到服务的接口等信息。
系统本身通过服务管理组件可以批量寄宿服务,可以适用于业务流程中大量的服务寄宿操作。
服务寄宿完成后,服务管理器将服务的信息公布到UDDI上,让使用者可以查找需要的服务。
在前一部分基础上,如何实现动态扩展,如何计算系统的合适容量就成了核心问题。
要解决此问题,首先需要测试系统服务组件的使用参数,包括运行时间,网络占用带宽等。同时,根据服务组件的特性,决定哪些组件优先向外扩张比较合理。那么,我们需要将整个应用程序的大致框架进行一个梳理,选出那些在同最终用户交互上,较为占用同通讯资源。处理器时间,但同时和系统间数据通讯量不大的,较为独立的程序部分,应该予以优先独立出去,放在租用的平台上运转,以提高系统效率。如图3是应用程序的智能客户端基本模型,包括界面组件、通讯代理组件两部分组成。
图3 医疗服务智能客户端Fig.3 Healthcare service wisdom client
医疗服务的智能客户端[5]由页首、页尾、导航框以及内容窗口组成,结合通讯代理端而成。内容窗口需要提供一般用户应用操作,这样的操作基本分为两类,单向操作和双向操作。单向操作,可以用于用户到服务器数据段,执行输入数据服务;双向操作,包括双向视频操作和双向文字操作,提供对使用交互服务的两个典型用户视频对话、文字对话的服务。这样的操作数据连接量会很大,但又不必一定需要放到系统中进行,占用系统网络带宽的。界面的其他操作,包括导航框、页头、页尾也较少需要与系统的数据连接。
在系统的数据部分,是需要连接到服务器端的,包括数据的建立、修改、保存等操作都需要数据库的连接。
通过分析,我们可以看到,此系统的数据交互,双向交互服务大多可以不放在系统内寄宿,可以优先转而放在网络中云计算平台上,较为节省系统资源;GUI服务组件,如页头、页尾、导航框由于与系统通讯数据量有限,且计算量不大,可以在系统内部负载达到一定程度时转移到外部服务器上运行;单向文字服务,以及数据服务牵涉与系统较多的交互操作,在系统资源许可的条件下,应较多保留在系统内部运行。
这样,医疗信息系统完成了在不影响使用体验的前提下,利用网络上的云计算资源,实现了系统的动态扩张,保证了在短时间,大访问量的条件下,系统依然有效、经济。经一段时间的运行试验,此实现方案能够比较有效的保证系统可扩展、可配置目标的达成。
[1]Armbrust M,Fox A,Griffith R,et al.A view of cloud computing[J].Communications of the ACM,2010,53(4):50-58.
[2]Erl T.Soa:principles of service design[M].Upper Saddle River:Prentice Hall,2008.
[3]Kaufman A.Frequency and transient responses of electromagnetic fieldscreated by currentsin confined conductors[J].Geophysics,1978,43(5):1002-1010.
[4]Erl T.Soa:principles of service design[M].Upper Saddle River:Prentice Hall,2008.
[5]Newcomer E,Lomow G.Understanding SOA with web services(independent technology guides) [M]. Addison-Wesley Professional,2004.
[6]邵一川,申德荣,赵宏伟,等.基于Ajax技术的智能客户端流引擎[J].计算机工程,2009,35(12):275-278.
SHAO Yi-chuan,SHENG De-rong,ZHAO Hong-wei,et al.Ajax-based wisdom client workflow engine[J].Computer Engineering,2009,35(12):275-278.