APP下载

面向服务的软件架构及其在医用超导系统中的应用

2015-04-02田宏宇

软件导刊 2015年2期

摘要:介绍了基于面向服务的软件架构及其主要优点,同时研究了其在医用超导监控系统中的具体应用。重点阐述了如何使用面向服务的软件架构使软件从功能上实现解耦,从而提高软件的可重用性、可伸缩性、可靠性,并设计了具体方案。

关键词关键词:SOA;面向服务;软件架构;医用超导系统

DOIDOI:10.11907/rjdk.143763

中图分类号:TP319

文献标识码:A文章编号文章编号:16727800(2015)002011403

作者简介作者简介:田宏宇(1979-),男,江苏泰州人,硕士,江苏美时医疗技术有限公司工程师,研究方向为通用软件。

0引言

近年来,软件规模在不断扩大,其复杂程度也在不断增加。同时,随着业务规模的快速变化,对软件的适应性和可扩展性提出了更高的要求。这些需求体现在软件架构上就是要求各模块之间充分解耦,使模块之间的关联度更小。同时,要求模块更加内聚,使每个模块都能担任更专一的职责。

结构化编程使得程序结构更加清晰,流程更易于理解。面向对象编程方法通过封装代码与数据来管理软件复杂度,以真实世界的对象进行建模。随着软件模块数量的不断增长,人们需要在更大的范围内加强内聚性,提高软件的复用度,由此出现了基于组件的开发。组件内的模块通过相互协作,对外提供更丰富且通用的功能,而组件之间是高内聚、松耦合的。基于组件的开发更关注子系统的边界和子系统间的通讯设计。

近年来,随着大数据时代的到来,人们需要通过全样本的形式分析海量数据,对多节点、分布式、异构的系统需求迫切。这就对软件系统的可靠性提出了更高的要求,因而需要重新审视软件的系统架构。

1面向服务的软件架构

1.1面向服务架构

面向服务架构(Service-Oriented Architecture,SOA)是构造分布式计算应用程序的方法,是将软件设计成一组可互操作的服务的一套原则或方法论,将应用程序功能作为服务发送给最终用户或者其它服务。它采用开放标准,与软件资源进行交互并采用标准的表示方式。

SOA将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口采用中立的方式进行定义,它应该独立于实现服务的硬件平台、操作系统和编程语言,这使得构建在这种系统中的服务可以一种统一和通用的方式进行交互[1]。

1.2SOA实现原则

在SOA中,服务通常通过3个元素来定义:①服务实现:服务的实现由实际代码、应用程序接口或包含(将通过此服务公开的)功能的其它技术资产组成;②服务接口:服务接口为服务的用户提供一种基于标准的方法,用于根据它所提供的契约来访问其功能;③服务契约:服务契约指定服务的目的、功能、约束和使用。契约细节的例子包括安全性需求、响应速度、吞吐量和可用性。

1.3WCF——Dot Net中的SOA框架

Windows通信开发平台(Windows Communication Foundation——WCF)是由微软开发的一系列支持数据通信的应用程序框架,是.NET框架的一部分,从.NET Framework3.0 开始引入。它整合了.NET2.0及之前版本的.NET Remoting、Web Service以及Socket机制,并融合有Http和Ftp的相关技术,是Windows平台上开发分布式应用的最佳实践方式。

WCF可简单归结为4个部分[2]:①网络服务协议,即用什么网络协议开放客户端接入;②业务服务协议,即声明服务提供哪些业务;③数据类型声明,即对客户端与服务器端通信的数据部分进行一致化;④传输安全性定义。

通信双方的沟通方式,由合约规定;通信双方所遵循的通信方法,由协议绑定;通信期间的安全性,由双方约定的安全性层次规定。

WCF的三大核心概念如下:

(1)契约(Contract)。WCF 的基本概念是以契约(Contract) 来定义双方沟通的协议,合约必须以接口的方式来体现,而实际的服务代码必须由这些合约接口派生并实现。合约分成了4种:①数据契约(Data Contract),订定双方沟通时的数据格式;②服务契约(Service Contract),订定服务的定义;③操作契约(Operation Contract),订定服务提供的方法;③消息契约(Message Contract),订定在通信期间改写消息内容的规范。

(2)协议绑定 (Binding)。由于WCF支持HTTP、TCP、Named Pipe、MSMQ、PeerToPeer TCP 等协议,而HTTP 又分为基本 HTTP 支持(BasicHttpBinding)以及 WSHTTP 支持(WsHttpBinding),因而TCP亦支持 NetTcpBinding、NetPeerTcpBinding等通信方式。因此,双方必须统一通信协议,并且在编码及格式上保持一致。

WCF 的服务可以挂载于 Console Application、Windows Application、IIS (ASP. NET) Application、Windows Service以及Windows Activation Services中,但大多都会挂在 Windows Service上。

(3)安全性层次。WCF支持传输层次安全性以及消息层次安全性两种:①传输层次安全性:在数据传输时期加密,例如SSL;②消息层次安全性:在数据处理时就加密,例如使用数字签名、散列或是使用密钥加密法等。

WCF具有如下优势[3]:①统一性。WCF是对于ASMX、.Net Remoting、Enterprise Service、WSE、MSMQ等技术的整合。给开发人员一个统一的开发接口,将同样的业务逻辑通过不同的通讯协议绑定来发布,实现了高度的代码重用;②互操作性。由于WCF最基本的通信机制之一是SOAP(Simple Object Access Protocol 简易对象访问协议),这就保证了异构系统之间的互操作性;③安全与可信赖。WSSecurity、WSTrust和WSSecureConversation均被添加到SOAP消息中,以用于用户认证、数据完整性验证、数据隐私等多种安全因素;④兼容性。WCF充分考虑到了与旧有系统的兼容性。安装WCF并不会影响原有的技术如ASMX和.Net Remoting。

2SOA在医用超导系统中的应用

我国高端医疗器械领域一直为大型跨国公司所垄断。随着近年来国家的一系列政策扶持,国内一些公司正在加紧研发自己的高端医疗器械,尤其是超导型磁共振成像仪吸引着众多企业的关注。

超导磁体是一种电磁铁,它由超导导线构成,能产生巨大的磁场。由于超导导线在4K的低温下没有电阻,因此维持磁场并不会消耗能量。通常将超导导线浸泡在液氦中以产生4K左右的低温。

制造超导磁体的一大技术难点就是如何确保液氦在磁体中不发生泄漏和蒸发。因为一旦液氦泄漏,就无法保证超导导线所需要的4K低温,从而无法维持磁场,这一现象称为“失超”。为了达到氦气零泄漏这一理想目标,一方便要加强超导磁体的密闭性制造工艺,另一方面也要严格对其进行监控。

我国的氦气十分贫乏,只占全球探明资源总量的0.2%,主要依赖进口。而氮气比氦气便宜得多,但是液氮的最低温度只能达到62K左右,达不到4K要求。因此往往采用先用液氮将温度降到62K,然后再用液氦将其降温到4K这种折衷方法,节约了成本。

需要对整个超导系统中的液氮、液氦的温度、液位等多点多指标进行系统监测,并对压缩机、场强等相应设备提供反馈以增加整体系统的可靠性,而且在整个超导磁体的生命期(典型值为10年)内不能出错。

综合以上考虑,将整个超导软件监控系统规划为3项主要服务:①Coordinator——核心服务,负责将底层接收到的数据转换为格式化的有意义的数据,同时负责将数据记录到数据库中;②Display——显示服务,负责将Core服务提供的数据渲染成更加直观的图形界面,以及在系统出错时进行适当的报警。同时在Coordinator服务状态出错时重启服务;③Monitor——状态监控服务,负责监控整个软件系统的健康状态以及整个超导系统的健康状态。

为了提高服务契约的可重用性,将基础服务接口作为其它服务接口的父接口:

(1)基础服务接口IServiceBase:

[ServiceContract]

public interface IServiceBase {

[OperationContract(IsInitiating = true, IsTerminating = false)]

WCFServiceStatus GetServiceStatus();

[OperationContract(IsInitiating = true, IsTerminating = false)]

void Stop();

[OperationContract(IsInitiating = true, IsTerminating = false)]

void Start();

}

IServiceBase接口为所有服务接口的父接口,增加了查询服务状态以及开始、停止服务的契约。

(2)带回调的基础服务接口ICallbackServiceBase:

[ServiceContract]

public interface ICallbackServiceBase : IServiceBase {

[OperationContract(IsInitiating = true, IsTerminating = false)]

void Register();

[OperationContract(IsInitiating = true, IsTerminating = false)]

void Unregister();

}

ICallbackServiceBase进一步扩展了IServiceBase,提供了注册与反注册功能。如果想要在服务状态或数据有更新时得到通知,就需要在服务处用Register注册。

(3)核心服务接口ICoordinator:

[ServiceContract(SessionMode = SessionMode.Required,

CallbackContract = typeof(ICoordinatorCallback))]

public interface ICoordinator: ICallbackServiceBase {

[OperationContract(IsInitiating = true, IsTerminating = false)]

bool QueryDeviceUsability(string deviceName);

[OperationContract(IsInitiating = true, IsTerminating = false)]

void ReadValue(string deviceName);

[OperationContract(IsInitiating = true, IsTerminating = false)]

void ReadChannelValue(string deviceName, int ch);

}

Coordinator服务实现了ICoordinator接口,提供了读数据、持久化、通知等核心服务。

(4)服务状态监控IStatusMonitor

[ServiceContract(SessionMode = SessionMode.Required,

CallbackContract=typeof(IStatusMonitorCallback))]

public interface IStatusMonitor: ICallbackServiceBase {

[OperationContract(IsInitiating = true, IsTerminating = false)]

ICollection GetLastMMUStatus();

[OperationContract(IsInitiating = true, IsTerminating = false)]

void Repair(string title);

}

StatusMonitor 实现了IStatusMonitor接口,以便在整个系统状态出现更改时作出正确的响应。