基于WCF与P2P的分布式大规模考试平台实例研究

时间:2022-09-07 01:54:43

基于WCF与P2P的分布式大规模考试平台实例研究

摘要:利用WCF框架技术可以快速构建面向服务的分布式应用系统,提高系统的可扩展性和稳定性,实现考试题型的灵活扩展,而P2P技术以节点平等为核心,以高效的方式向需要资源的节点分发内容,解决大规模考试过程中大批量数据传输而导致服务器过载的问题。该文在分析WCF和P2P应用开发技术的基础上,介绍了利用WCF和P2P技术的大规模考试平台架构的实现原理。

关键词:WCF;P2P;服务;分布式;考试

中图分类号:TP311文献标识码:A文章编号:1009-3044(2011)07-1566-03

The Large Scale Distributed Examination Platform Based on WCF and P2P

LIANG Wu, ZHENG De-qing

(Department of Information Technology of Guangdong Institute of Public Administration, Guangzhou 510053, China)

Abstract: With the WCF framework, we can construct the distributed system based on service easily, and with the P2P technology, we can deal with the problem of the transmission of large amounts of examination data in the large-scale examination. In this paper, we will discuss the large-scale examination platform based on WCF and P2P.

Key words: WCF; P2P; service; distributed; examination

1 概述

所谓大规模考试是指在同一时段内有大量考生参与的考试,通常指全省性或全国性的考试,例如目前各省区的计算机水平考试、全国计算机水平考试和全国英语四、六级或A、B级考试等。在这些大规模考试中,由于考生人数众多,由此带来的服务分配及客户端与服务器之间的大批量数据传输问题是考试平台设计时所面临的主要问题。另外,由于这些考试的考试科目多、涉及面广,平台的可扩展性及稳健性也是不容忽视的问题,尤其当这些平台被应用在智能学习领域时。在现代智能学习平台中,通常会集成一套考试平台作为学生学习过程自检的支撑性平台,以方便学生随时检测对所学知识的掌握情况,并为学习的改进提供科学的指引,这就要求考试平台对学习的科目具有较好的可扩展性,例如题型的扩展等,以适应不同的学习环境的要求。笔者在开发“全国英语应用能力A、B级考试平台3”时便遇到这些问题。

面向服务的分布式计算技术(目前在.Net平台下主要指WCF框架技术)以服务为基础构建松散耦合的系统。其基本思路是把系统划分成一个个功能相对独立的服务并向外开放,供使用者调用。这些服务可以部署在同一台机器上,也可部署在不同地理位置的机器上,在一定程度上解决服务器过载问题。同时,这些服务相当于一个个插件,只要遵循一定的规范,可对服务进行更换或扩展,解决了系统的扩展性问题。但在处理大批量数据传输问题上,面向服务的分布式计算技术并不适宜,尤其在众多调用者同时需要传输数据的场合下,例如在考试登录时,服务器端需传输试题素材(视频、图像、声音或Word文档等文件)到客户端,此时极有可能出现因同时访问的客户端过多而导致的服务器过载的问题。相反,P2P技术在大批量数据传输应用中有其独特的优势,笔者通过对WCF和P2P技术的深入研讨并应用在“全国英语应用能力A、B级考试平台”上,成功解决了大规模考试平台所遇到的数据传输及题型扩展、服务分配等问题。

2 WCF框架技术简介

Windows Communication Foundation(简称WCF)是基于Windows平台下开发和部署服务的软件开发包(Software Development Kit,SDK),是服务的运行时环境(Runtime Environment),使开发者能够将CLR类型公开为服务,又能够以CLR类型的方式使用服务。WCF是微软对一系列产业标准定义的实现,包括服务交互、类型转换、封送(Marshaling)以及各种协议的管理。同时WCF还为开发者提供了大多数应用程序都需要的基础功能模块,包括托管(Hosting)、服务实例管理(Service Instance Management)、异步调用、可靠性、事务管理、离线队列调用(Disconnected Queued Call)以及安全性等。

在WCF体系结构中,主要包括服务、地址、契约、宿主、绑定、终节点等内容。服务(Services)是公开的一组功能的集合,是从函数到对象、从对象到组件、从组件到服务的软件开发思想发展的变迁,在实际开发中常常用接口来表示。地址包含服务的位置与传输协议,是服务的唯一标识。目前,WCF支持HTTP/HTTPS、TCP、IPC、Peer network、MSMQ和Service bus等多种传输协议。在WCF中,所有的服务都以契约形式向外开放,描述服务的功能内容。契约主要包括服务契约、数据契约、错误契约和消息契约等,其中,服务契约用于描述客户端可用的服务操作,数据契约则描述了可传输的数据类型,错误契约描述了服务可能抛出的各种错误以及服务处理错误和传递错误到客户端的方式,而消息契约允许服务直接与消息交互。所有WCF服务必须托管在某个windows宿主进程中,目前可用的托管方式包括IIS托管、Windows Activation Service (简称WAS)托管或进程内托管,各种托管各有优缺点,可根据需要选择。绑定是服务通信方式的集合,包括基本绑定(由BasicHttpBinding类提供)、TCP绑定(由NetTcpBinding类提供)、IPC绑定(由NetNamedPipeBinding类提供)、Web服务绑定(由WSHttpBinding类提供)和MSMQ绑定(由NetMsmqBinding类提供),封装了诸如传输协议、消息编码、通信模式、可靠性、安全性、事务传播以及互操作性等相关特性。而地址、契约和绑定的组合便构成了终节点[1]。

在C#中,可以通过以下步骤定义和使用WCF服务:

1) 定义需公开的服务接口(注意要引入System.ServiceModel命名空间)

[ServiceContract]

interface IMyContract

{ [OperationContract]

string MyMethod(string text);

//没应用契约的成员

string MyOtherMethod(string text); }

与普通的接口定义不同,WCF要求接口必须使用[ServiceContract]属性标识(当然,该属性也可直接应用于类的定义)。应用了该属性后并不表明接口中所有的方法都可公开,只有那些应用了[OperationContract]属性标识的方法才可以公开,如上例中的MyMethod可被客户端调用,但MyOtherMethod却不允许客户端调用。

2) 实现服务

class MyService : IMyContract

{ public string MyMethod(string text)

{ return "Hello " + text; }

public string MyOtherMethod(string text)

{ return "Cannot call this method over WCF"; } }

服务的实现与传统的接口实现方式相似,只需从相应的接口派生实现类并编写相应方法的代码即可。

3) 创建服务配置文件

不同的托管方式,WCF服务需要不同的配置文件,例如IIS托管使用Web.Config文件,如果是进程内自托管,则使用app.config配置文件。这些文件可以手工编写,也可以使用Visual Studio开发工具自动生成,具体内容可参阅MSDN文档。

4) 生成客户端配置和代码文件

可以使用svcutil命令创建使用该服务的客户端配置和代码文件,例如命令“svcutil /language:c# /out: MyService.cs/config:app.config localhost:8000/MyService”将会生成一个MyService.cs客户端代码文件和app.config客户端配置文件。命令的具体使用方法可参阅MSDN文档。

5) 创建客户端程序

只要把步骤4生成的客户端代码和配置文件复制到相应的客户端项目中,就可以像普通类一样使用WCF服务,例如对于上例中的MyService服务,可以用以下的方式使用:

MyService mServer=new MyService();

mServer. MyMethod("abc");

从客户端发出的对MyMethod方法的调用,会被WCF框架转换成对远程服务的调用(底层使用SOAP协议通信),而这一切对于使用者来说是透明的,就像调用本地过程一样。

在上例中,只要用户遵照IMyContract接口的规范,即可根据需要实现不同版本(功能)的服务,如MyService1、MyService2、MyService3等,在这些服务中实现各自功能相异的MyMethod方法,并根据不同的应用环境要求更换这些服务。尽管所用的服务改变了、功能也可能变更了,但这并不影响使用这些服务的程序,因而服务开发技术在确保主程序稳定性的前提下提供了灵活扩展系统功能的方式,能较好地解决考试科目和题型扩展问题。

3 P2P原理应用简介

P2P(Peer- to- peer)是一种对等的网络结构,网络中所有节点均具有双重角色:既接受别人的服务,也为别人提供服务,形成一个庞大的资源共享网络系统。由此可见,P2P网络系统已经淡化传统意义中的服务器角色,因而即使系统中某些节点出现故障也不会像传统服务器出现故障那样对网络产生巨大的影响,确保了网络的稳定性。在P2P网络中,通常按一定的组织结构对网络系统中的节点进行管理,例如DHT(分布式哈希表)、树形和网状结构等[2],同时以一定的方式把资源所在的位置(节点)告知其他节点,以便能知道对方,由此形成了不同类型的应用模式,目前,主要有两种:混合P2P和纯P2P,如图1所示[3]。前者保留了传统意义上的服务器,不过该服务器不会参与实际的数据下载,只负责对加入网络的节点进行管理,目的是提供有效的数据搜索服务。后者没有服务器,节点间通过广播方式完成数据搜索。

一旦获取资源所在位置的信息后,节点便向对方发起连接请求,以完成实际的资源传输。所传输的资源在传输前通常被分割成多个块,每个块有相应的标识及校验,节点在下载完所有的块后再重组成原来的数据,这与TCP/IP协议中对传输数据的拆包、重组等方式相似。在传输过程中,节点可以只从某一个节点传输资源块,也可以同时从多个节点传输资源块,解决了传统C/S模式中过分依赖服务器的问题,适合于大批量数据传输要求的应用领域,如文件下载、视频直播、VoIP、即时通讯、在线游戏、分布式海量存储等。

由于节点间要相互连接以传输数据,在IPv4的时代(大量应用了私网IP),P2P应用首要解决的问题是网外的节点如何发起与网内只具私网IP的节点的连接请求,即常说的如何“穿透NAT”的问题。目前的穿透方法有多种,但应用主要集中在UDP协议上。WCF也提供了P2P应用开发的支持,并提供了独特的“穿透NAT”的方法。

在WCF中,默认的NAT处理是由Teredo来完成的。Teredo是一种通过网络地址转换器 (NAT) 发送 IPv4 封装的 IPv6 数据包的 IPv6 转换技术,简单来说,就是以NAT设备的公网IPv4地址为基础,给每一个连接在网络上的节点自动分配一个IPv6地址,解决私网地址主机的通信问题。目前,该机制支持的操作系统包括Windows XP SP2、Windows XP Professional x64 Edition、Windows Server 2003 Service Pack 1、Windows Vista、Windows 7、Windows Server 2008/R2等。而如何发现资源,WCF则使用了Peer Name Resolution Protocol (简称PNRP)。有了地址转换和资源发现协议,利用WCF开发P2P应用就变得非常简单,只要在配置服务时把绑定设置为NetPeerTcpBinding即可,具体应用可参阅相关的MSDN文档。

4 应用实例分析

由以上2、3节分析可知,WCF服务开发技术为分布式应用的服务开发提供了支持,在一定程度上解决了传统应用中出现的因功能过于集中导致的服务器过载的问题,同时也解决了考试系统的科目和题型扩展问题,而P2P技术则解决了大规模考试过程中的数据传输问题,笔者以此为基础,设计了如图2所示的基于WCF与P2P的分布式大规模考试平台架构。

在该架构中,主要由考试服务器端、客户端和题库管理端(图中称为节点)组成,各部份的主要功能如下:

1) 考试客户端节点

考试客户端由传统的WEB浏览器和P2P服务组成。前者基于Web2.0标准,提供一个试题显示及作答的Web操作环境;后者完成与P2P资源的发现、下载等相关的数据处理,可被封装成运行于浏览器中的插件或独立运行于后台的服务,并通过消息机制与浏览器通讯。

2) 考试服务节点

考试服务节点是该平台的核心,主要完成P2P服务处理、考试登录认证、评分和考试过程控制等与考试相关的功能。P2P服务基于WCF,主要以消息的方式向考试客户端节点提供资源解释服务,以便客户端能快速找到所需的资源。所有考试客户端节点在考试登录时必须同时向服务器端中的P2P服务注册,以便服务器端的P2P服务知道该客户端节点的存在并为其分配所需的资源,如IPv6地址、客户端标识等。在P2P网络中的消息与“邻居接力”的方式进行传输,即消息首先被传送到发送消息节点的“邻居”节点,再由该“邻居”节点交给其所在的其他“邻居”,逐级下传,直到整个网络都能接收到。因此,网络中的每个节点只须保存有限个“邻居”节点信息即可把消息传遍整个网络。

各种题型均以WCF服务形式封装和运行,例如听力题服务,封装了听力试题的处理逻辑,主要包括试题参数处理、评分处理等,供考试服务节点和题库管理节点调用。而这些服务可以部署在与考试服务节点相同的机器上,也可根据需要部署在不同的机器上,形成一个分布式计算的系统架构。

认证服务主要负责考生登录认证,利用题型服务节点生成考生的试题并传送到考生的客户端。评分服务则在考生提交试卷时利用题型服务节点完成试题的自动评分。而控制服务则负责考试过程的考生状态管理,如谁登录了、谁离线了、谁交卷了等,当然也可根据需要提供远程监控服务。

3) 题库管理节点

利用各类试题开放的服务接口,把试题的参数保存到题库中。

5 结束语

以服务为基础的WCF开发框架简化了分布式应用的开发,进一步提高了系统的可扩展性和稳定性,而P2P技术为大批量数据的传输创造了条件,解决了大规模考试中因过分依赖中心服务器而导致的各种问题。目前,笔者已把该技术应用在“全国英语应用能力A、B级考试平台”中,实现了基于WCF与P2P的大规模考试平台。实践表明,面向服务的分布式应用为系统的扩展预留了大量的空间,同时各节点间存在P2P通信通道,彼此可共享数据、提供服务,大大减轻了服务器的负担,使因访问量问题引发的服务器故障大幅度减少,取得了较好的效果。

参考文献:

[1] L?iwy J.Programming WCF Services[M].3rd ed.O'Reilly Media,Inc,2010.

[2] Hwang Sun-Myung.P2P Protocol Analysis and Blocking Algorithm[EB/OL]./content/x9dc5ppkvhx1edl3/.

[3] 金海,廖小飞.P2P 技术原理及应用[J].中兴通讯技术,2007,13(6).

上一篇:基于无线传感器网络的通讯组件和测试平台的设... 下一篇:语音通讯业务在企业的实现及效率