分布式计算的程序设计,请各位帮忙看看

一个分布式计算程序的设计,请大家帮忙看看有没有什么意见和建议。

基本需求和设想

正在为一家公司做一个项目,其中有一些电力网络的计算任务。电力网络的计算经常是几百乘几百的矩整相乘,并且这里还牵涉到一些外部程序的调用、IO开销,造成计算速度特别慢。

该公司员工办公使用一个windows局域网,约有几百台终端。考虑到需要进行的计算种类较多,但是这些计算都可以拆分成小的任务,各任务之间可以平行进行,于是提出这样的方案:由服务器初始一个计算任务,将任务拆分成多个小任务,传输到客户终端上进行计算,计算结果传回服务器,合并后完成计算。这样计算时间应该可以减少到满意程度。

服务器环境是windows2000 server,客户机大部分是windows xp,部分是windows 2000 pro。

客户端界面设计

下面是客户端程序的设计:客户端程序是一个windows service程序,但是也有自己的界面,以便终端使用者进行查看和控制。客户端程序的名称是:DComputer(Distribution Computer)



程序的界面样式仿造Msn Messenger,按动“关闭”按钮后也象Messenger一样缩小到系统托盘的右下角(不好意思,不能聊天)。通过窗口的显示,用户可以知道自己的终端与服务器的连接状态,如果用户需要保留自己的资源,也可以拒绝执行服务器发来的计算任务,将自己的状态设置为“拒绝”。

树视图显示系统中所有的计算终端(IP地址+状态)。

客户端的程序设计

我做出了下面这样的程序框架:


下面解释一下

黄色的部分:提供客户与服务器的连接功能。IConnection提供Send和Post两种向服务器发送消息的方式,Send是同步的,发出去后立刻等待回复,Post是异步的,发出去就不要回答了。CConnection是IConnection的实现,使用CSocket实现网络连接。IConnection向外界提供两个事件:ConnectionBreak和DataArrival,分别表示连接中断和数据到达,抛出DataArrival事件的时候同时抛出消息的内容(字符串形式)。

绿色的部分:程序的主要业务逻辑部分。IDComputer.Name和IDComputer.IP属性分别记录终端的名称和IP地址,IDComputer接口提供了一些方法供用户界面进行调用(这里没有写全,我还没想具体),用户界面可以调用GetOtherComputer方法得到系统中别的终端的信息,调用State属性设置终端的状态。IDComputer定义了StateChanged事件,用户界面可以捕捉这个事件得知连接状态。

ComputerState类表示计算终端的状态,定义了连接中、计算中、断开、拒绝四种状态。

CDComputer是IDComputer接口的具体实现,除了实现IDComputer定义的功能外,还要捕捉IConnection的ConnectionBreak和DataArrival事件,做出正确的反应。这里还要实现连接中断后的恢复策略。

蓝色的部分:进行分布式数据计算任务的部分,实现各种计算任务。ITask是进行计算的接口,客户通过CTaskFactory得到具体的执行者。计算任务是通过一个格式字符串下达的,通过字符串前面几个字符的就能知道需要进行的计算类型。各个类型的计算任务在CTask的子类中实现,各个子类重载Run方法,然后读文件、计算、格式化计算结果、或者调用不同的外部程序、等等。CTask的子类在计算过程中可以依次抛出TaskStart、TaskProcess和TaskFinish事件,通知外界计算的状态。

红色的部分:程序的界面,处理用户的输入和数据的表示。

动态运行情况

程序的运行情况主要介绍两个过程:1、用户设置终端的状态;2、执行分布式计算任务

用户设置终端状态的过程:


说明:用户在主画面上操作,主画面设置IDComputer的State属性,CDComputer调用IConnection向服务器发送相应的消息,报告自己的状态。处理完毕。

执行分布式计算任务的过程:


说明:CDComputer捕获到IConnection的DataArrival事件,通过判断事件参数,得知这是一个分布式计算请求。于是通过CTaskFactory得到计算任务的执行者,调用这个执行者的Run方法,得到执行结果。调用IConnection的Post方法将执行结果发送到服务器。执行完毕。(在执行的过程中,捕捉ITask的事件。)

这就是客户端的设计,请大家查看有没有不妥,就要交给程序员进行编码了,计算任务的细节还没有清楚,又是一个边设计、边施工、边修改的工作。

服务器的程序正在设计中,等做好了也拿出来给大家看看。希望大家赐教。

posted on 2005-03-11 01:02  小陆  阅读(2975)  评论(8编辑  收藏  举报