基于Web服务EAMS的性能及安全研究
2012-07-25冉崇善郭贵礼
冉崇善,郭贵礼
(陕西科技大学 电气与信息工程学院,陕西 西安710021)
0 引 言
目前大部分企业的EAMS是采用面向组件的设计方法实现的,组件内部通信大多依赖调用系统应用程序接口(API)实现,组件间处于一种紧耦合状态,系统后期维护及功能扩充困难重重[1]。采用Web服务构建企业EAMS可以使企业最大限度的利用现有信息系统,更易于集成和管理,更快的响应和部署,更能重用和减少成本,更易于用户使用。
基于Web服务的系统在大数据量交互情况下有实时性能差,系统资源利用率低,网络延迟大等固有缺陷。同时由于Web服务通信采用的SOAP协议只是一个轻量级简单的通信协议,对数据的安全性没有做任何处理,Web服务通信数据的安全得不到有效的保障。因此,在基于Web服务的EAMS中如何有效保障实时交互性能和数据通信安全等关键问题亟待解决。本文采用基于.NET框架的RemotingFormat将Web服务传递的数据集序列化为Binary格式,并对序列化后的字节数组进行压缩传输,解决了Web服务的实时性交互问题。通过扩展SOAP消息头,对数据及SOAP消息本身进行签名、加密以及添加SAML控制令牌等操作有效保障了Web服务通信的端到端的消息级安全[2-7]。
1 Web服务
Web服务的目的是将信息和服务在Internet上实现提供和访问,实现跨平台的互操作性。在Web服务中,主要有4个关键技术:XML、SOAP、WSDL、UDDI[8]。
Web服务的体系架构如图1所示,服务提供者开发Web服务并定义服务描述,使用Publish操作将服务描述发布到服务注册中心;服务请求者使用Find操作在本地或服务注册中心检索服务描述;根据服务描述Bind服务提供者调用所需的服务[9-12]。
图1 Web服务体系架构
2 基于Web服务的EAMS
基于Web服务的EAMS将业务流程逻辑从具体实现的程序代码中分离出来 (以业务和服务的方式区分开,业务决定做什么,服务决定怎么做),将具体的功能封装为不同粒度的服务,根据业务流程逻辑对不同的服务进行调用。此外,Web服务的标准接口使企业对遗留系统的集成更加简单,将遗留系统封装成具有标准接口的Web服务,就可以即时地集成到 EAMS中来[13-15]。
基于Web服务的开发技术已经将传统的软件开发三层架构抛弃,取而代之的是新的三层架构即应用层、服务层以及数据源 (DB)。用户和表现层属于应用层,可以是Web页面、WinForm窗体或者移动客户端也可以是外部或接口用户等。业务逻辑层BLL和数据访问层DAL被封装在服务层Services中,并以标准接口的形式发布。所有的服务都可以采用不同语言,不同平台进行开发,内部的业务处理逻辑可以使用面向对象的编程方法实现,系统在这一层次上实现跨平台的无缝通信以及遗留系统的快速集成。数据源可以是常用关系型数据库也可以是平台无关的XML文件或者其它存储有数据信息的源文件。系统安全、权限管理、用户管理、系统日志、统计以及备份等系统功能则贯穿整个EAMS的所有层次。基于Web服务的企业EAMS基本框架如图2所示。
图2 基于Web服务的企业EAMS基本框架
3 关键问题
3.1 Web服务的实时性交互
Web服务的实时性交互问题一直困扰着众多服务使用者,使用Web服务构建的系统实时交互性能往往较差。这是因为Web服务采用基于XML消息的信息传输机制。目前,大部分XML的实现都使用纯文本的格式,导致数据复杂性和数据量增大。当通过Web服务传递较大数据量时,信息的交互和调用会产生延迟,导致系统在实时性交互以及系统性能等方面存在不足。
在基于Web服务的EAMS中,使用.NET 2.0提供的RemotingFormat将数据集序列化为SerializationFormat.Binary格式,并对序列化后的字节数组进行压缩,从而解决Web服务的实时性交互问题。
在Web服务端,.NET 2.0将数据集序列化为Binary数据序列并返回压缩后的字节数组。主要涉及两个操作:首先将DataSet数据序列化为SerializationFormat.Binary格式字节数组,然后要对序列化后的字节数组进行压缩并返回压缩后的字节数组。
将DataSet数据序列化为SerializationFormat.Binary格式字节数组的主要代码如下:
MemoryStream memStream=new MemoryStream ();
IFormatter brFormatter=new BinaryFormatter ();
dsOriginal.RemotingFormat = SerializationFormat.Binary;//为远程处理期间使用的DataSet设置序列化格式为Binary
brFormatter.Serialize (memStream,dsOriginal);//将dsOriginal对象序列化为提供的流memStream
binaryDataResult= memStream.ToArray ();//将流内容写入字节数组binaryDataResult
字节数组的压缩操作主要代码如下:
MemoryStream ms=new MemoryStream ();//定义一个内存流实例
Stream ZipStream=null;//声明一个空字节流
ZipStream=new GZipStream (ms,CompressionMode.Compress,true);//使用指定的内存流 ms和压缩模式CompressionMode实例化一个GZipStream类压缩流
ZipStream.Write(buffer,0,buffer.Length);//向当前的压缩流写入字节序列buffer
ZipStream.Close();//关闭流
ms.Position=0;
byte[]compress_buffer=new byte [ms.Length];//实例化一个指定长度的字节序列
ms.Read (compress_buffer,0,int.Parse (ms.Length.ToString ()));//从 ms中读取字节块并写入compress_buffer中
在客户端或服务调用端调用该服务时,对数据进行与服务器端相反的处理即首先要对得到的字节流进行解压,之后再反序列化为DataSet数据集,然后再在客户程序中进行绑定等操作。
除上述方式之外,减少使用较长元素名和属性名以及使用存储过程操作数据库也能在一定程度上提高系统交互性能。
3.2 Web服务的消息安全
在基于Web服务的开发中,Web服务通信安全是一个很重要的问题。由于Web服务是基于Internet的,传递的是SOAP消息,在消息安全性方面没有提供有效保障,因此SOAP消息的安全性传输是基于Web服务的系统开发中亟待解决的关键问题。
如图3所示,在EAMS中,通过扩展SOAP消息头,对消息进行签名、加密以及添加控制令牌等方式来实现Web服务通信的端到端的消息级安全。
图3 SOAP消息安全处理机制
发送端SOAP消息安全处理流程:
(1)创建SOAP消息,用对称密钥加密SOAP中的Web服务信息,用接收端公钥加密该对称密钥,并将其加到SOAP消息的<Header>中。
(2)登录SAML服务器获取断言,并将取得的SAML Token原封不动的添加到SOAP消息的<Header>中作为安全令牌。
(3)在SOAP消息的<Header>中加入时间戳、发送者、接收者等,可对其进行扩展,加入更多的安全属性。
(4)利用自己的私钥对SOAP消息进行签名,保证信息的完整性。
(5)将自己的认证证书加到SOAP消息中发送给接收方。
接收端SOAP消息处理流程:
(1)接收到SOAP消息后,定位消息中的认证证书,向XKMS服务器验证证书的有效性。
(2)从XKMS服务器中获取发送端公钥信息,验证SOAP消息的有效性。
(3)检查安全属性,判断该消息是否被重放,是否被篡改,是否为相应的发送者和接受者。
(4)从SOAP<Header>中提取Token进行处理,提取SAML的认证证书,向XKMS服务器验证证书的有效性;获取SAML公钥信息,验证Token签名判断是否由信任的SAML签发;使用自己的密钥解密出Token信息,采用SAML中提供的主体确定方法判断Token所断言的主体是否就是消息的发送方。
(5)用自己的私钥解密出加密用的对称密钥,进而解密出SOAP消息中的XACML格式的请求或者响应。
在消息处理过程中,发送端先对消息进行加密,再对消息进行签名,接收端会先验证签名,再进行解密操作,从而提高接收端的处理效率。当签名验证失败后,接收端直接返回错误信息,不必再进行复杂的解密操作。
经过安全处理后携带Web服务请求或响应信息的SOAP消息实例。
<?xml version="1.0"encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope"xmlns:saml=”…”
xmlns:xacml=”…”xmlns:ds=”…”xmlns:wsse=”…”xmlns:xenc=”…”>
<soap:Header>
<wsse:Security>
<!—SAML Token-->
<saml:Assertion>
<!--由SAML签名并且用接收端公钥加密的身份验证断言信息-->
.......
</saml:Assertion>
<!--加密-->
<xenc:ReferenceList>
<xenc:Refernce URI=”# EncryptedData”>
</xenc:ReferenceList>
<!--数字签名-->
<ds:Signature>
…..
<ds:Reference URI=”#Body”>
…..
</ds:Signature>
<!--其它安全属性-->
<wsu:Timestamp wsu:Id=”tst”>
<wsu:Created>2011-05-15T10:09:43:00Z</wsu:Created>
</wsu:Timestamp>
……
</wsse:Security>
</soap:Header>
<soap:Body>
<xenc:EncryptedData>
<!--密文的Web服务请求或响应数据-->
………
</xenc:EncryptedData>
</soap:Body
</soap:Envelope>
4 实时性能测试及分析
为了验证上述数据传输方式在Web服务实时数据交互中的有效性。本文分别对1000条数据 (131129Byte)、10000 条 数 据 (1309130Byte)、100000 条 数 据(14629132Byte)、500000 条 数 据 (68139152Byte)、1000000条数据 (135320569Byte)5种情况的4种传输方案进行数据的传输性能测试。其中传输方案1表示返回Data-Set序列化后的字节数组,文中以传输方案1的耗时和数据量作为基准点,传输方案2表示返回DataSetSurrogate序列化后的字节数组,传输方案3表示返回DataSetSurrogate序列化并压缩后的字节数组,传输方案4表示返回.NET 2.0序列化并压缩后的字节数组即本系统采用的传输方案。
由于条件限制,只在本地计算机上进行了性能测试,所以数据的网络传输时间基本可以忽略不计。测试结果见表1和表2。
从表1中可以看出,随着传输数据量的增大,4种方案传输耗时也都随着增长。但是方案2和方案3在数据量较大时传输耗时百分比急剧增长,说明在大数据量传输时,只序列化未压缩的方案2的数据传输时间急剧增长,而方案3中对数据的压缩处理耗时急剧增长,两种方案都不符合系统的实时性要求。而方案4随着数据量的增大,传输耗时也随之增加,但是当数据量很大时,传输耗时又开始保持稳定甚至减少。说明方案4采用的压缩算法更合理,在数据量急剧增长时,对数据的压缩处理耗时能够保持在一个较稳定范围。在传输50万条数据时,方案2的耗时比方案3和方案4少,主要原因是由于本地计算机处理性能差,在对数据进行压缩和解压操作时耗费了大量时间。
表1 不同数据量在4种方案下传输的耗时百分比/%
表2 不同数据量在4种方案下传输的压缩百分比/%
从表2中可以看出,方案3对数据的压缩性能要与方案4不相上下,但是方案3牺牲了压缩处理时间来换取压缩百分比上的微弱优势,不符合系统的实时性要求。而方案4在数据压缩耗时和压缩百分比之间获得了很好的平衡。方案4即本系统采用的数据传输方案是最优的,不管是在数据量较小时还是数据量很大时,该方案都有一个较为理想的耗时百分比和压缩百分比。
上述分析结果是在本地计算机上进行测试的,忽略了数据在网络上传输的时间。然而在一般情况下,大量数据在网络上的传输时间在占数据传输过程的主要部分,因此如果在真实的Internet网络上进行传输性能测试,方案4的效果将会更加明显。
通过以上分析表明,本系统采用的数据传输方案4,在实际应用中能够节省数据传输时间30%以上,减少网络上传输的数据量90%以上。不管是在高性能网络中还是在性能较差的网络中都能有较好的实时性能,为Web服务在实时性要求比较高的系统中的应用提供了一个较好的解决方案。
5 结束语
基于Web服务的EAMS克服了面向组件设计的内部耦合度高,难以维护和扩充等缺点,实现了一种高复用、易集成管理、快速响应部署、松耦合、跨平台无缝通信的资产管理模式。本文重点探讨了Web服务在构建EAMS中的实时交互性能和服务通信安全两大关键问题,并提出了合理的解决方案。测试结果表明,系统的实时交互性能和服务通信安全得到了有效保障。
在基于Web服务的系统建设中,除了实时交互性能和服务安全之外,服务粒度的划分、服务的组合编排等都是需要重点研究的对象,在之后的研究中将对其进行更加深入的探究。
[1]WU Rongwei.Research and implementation of power enterprise integration EAM system based on SOA [D].Shanghai:Fudan University,2009:18 (in Chinese). [吴荣炜.基于SOA的电网企业集成EAM系统的设计与实现 [D].上海:复旦大学,2009:18.]
[2]Juhan Kim,Soohyung Kim,Kiyoung Moon.Design of integration security system using XML security [C].World Academy of Science Engineering and Technology,2005:136-140.
[3]MENG Wei,ZHANG Jing,LI Junhuai,et al.Research and implementation of a web services security model[J].Computer Engineering and Application,2006,42 (26):134-136 (in Chinese).[孟伟,张璟,李军怀,等.Web服务安全模型研究与实现[J].计算机工程与应用,2006,42 (26):134-136.]
[4]CHENG Zhan,XIE Li.Web services security mechanism and security technology [J].Computer Application and Software,2008,25(10):16-18 (in Chinese).[程瞻,谢立.Web服务安全机制和安全技术 [J].计算机应用与软件,2008,25 (10):16-18.]
[5]LIU Zhidu,JIA Songhao,ZHAN Shihua.Research and application of SOAP security [J].Computer Engineering,2008,34 (5):142-144 (in Chinese). [刘志都,贾松浩,詹仕华.SOAP协议安全性的研究与应用 [J].计算机工程,2008,34(5):142-144.]
[6]HAN Tao,GUO Heqing.Research and implementation of a web services secure model[J].Computer Engineering,2006,32 (10):130-134(in Chinese).[韩涛,郭荷清.Web服务安全模型的研究与实现 [J].计算机工程,2006,32 (10):130-134.]
[7]IBM.Introduction to security assertion markup language(SAML)and SAML support in IBM web sphere application server version 7.0Fix Pack 7 [S].IBM WebSphere Web Services Security Development Software Group,2009.
[8]TU Xiaoyun.Design and implementation of data exchanging based on web service [D].Beijing:Beijing University of Chemical Technology,2007:6-15 (in Chinese).[屠晓云.基于 Web Service的数据交换设计与实现 [D].北京:北京化工大学,2007:6-15.]
[9]XIE Hui,QIU Jinlun,SUN Fei.Research and design of Web Service with concurrency technology [J].Computer Engineering and Design,2008,29 (21):5483-5486 (in Chinese). [谢辉,邱锦伦,孙斐.基于并发技术的 Web Service的设计与研究 [J].计算机工程与设计,2008,29 (21):5483-5486.]
[10]CHEN Liguo,WANG Yanping.Research of service oriented architecture[J].Computer Knowledge and Technology,2009,5 (3):549-551 (in Chinese).[陈利国,王艳萍.面向服务体系架构的研究 [J].电脑知识与技术,2009,5 (3):549-551.]
[11] WANG Yuanfan.Research on SOA of web services center[J].Journal of Ningde Teachers College,2010,22 (1):6-8(in Chinese). [王远帆.以 Web服务为中心的SOA研究[J].宁德师专学报,2010,22 (1):6-8.]
[12]LV Hong-wei.Discussion of the web service technology in the SOA [J].Network and Communication,2010,22 (4):75-78 (in Chinese).[吕宏伟.SOA体系结构中的 Web Service技术 [J].电脑编程技巧与维护,2010,22 (4):75-78.]
[13]RAN Chongshan,WANG Rui.Design and research of middlewarebased power industry asset management system [J].Computer Technology and Development,2008,18 (2):194-196 (in Chinese).[冉崇善,王瑞.电力企业EAM中间件系统的研究与设计 [J].计算机技术与发展,2008,18 (2):194-196.]
[14]TANG Li. Design and development of enterprise asset management system [J].Power System Engineering,2009,25 (5):59-62 (in Chinese).[唐丽.电力企业资产管理系统(EAM)设计及开发 [J].电站系统工程,2009,25 (5):59-62.]
[15]YANG Lin,HE Xixu,WU Gaofeng,et al.Research and design of EAM system based on workflow technology [J].Micro-Computer Information,2009,25 (7-3):6-8 (in Chinese). [杨林,赫熙煦,吴高峰,等.基于工作流技术的EAM系统的研究与设计 [J].微计算机信息,2009,25 (7-3):6-8.]