任务描述:
一、 标题
负荷分担的可靠性系统仿真
二、 题目
在无线通信系统中,无论是运营商或者设备商对系统的可靠性、可用性都极其关注。请设计一套考虑负荷分担的可靠性仿真系统。如图1所示,总控节点(System Controller Node)负责用户接入,通过一定的分配规则分配相应的负荷节点(Payload Node)为其服务,总控节点本身不涉及用户具体的服务。负荷节点(Payload Node)负责用户具体的服务,各个负荷节点完成功能一致。
三、初赛阶段要求
编程语言:C语言
开发及运行环境:Windows操作系统、VC6.0
本题用Windows可执行文件模拟进程,进程间采用Socket通信。各个进程的具体要求如下:
SysCtrlNode进程:
1.支持3个PlNode的接入
2.处理用户的接入。即分配并通知PlNode节点为用户服务,采用均衡分配
3.处理用户的释放。即通知所分配的PlNode释放用户
PlNode进程:
1.处理用户的接入。即记录用户信息,并自动显示新接入的用户标识和当前的用户数
2.处理用户的释放。即删除用户信息,并自动显示释放的用户标识和当前的用户数
测试进程:
1.提供以下几个API接口
a)VOID ConnectReq(A)
向SysCtrlNode进程发消息通知用户A建立
b) VOID ReleaseReq(A)
向SysCtrlNode进程发消息通知用户A释放
c) int GetPnodeByUser(A)
返回用户A的PlNode标识。无效值为-1
d) unsigned int GetUserNumByPnode(B)
返回PlNode B进程当前处理的用户数
2.需要提供典型的测试用例代码并测试通过,测试用例格式参考以下:
用例1
ConnectReq (A);
PnodeId = GetPnodeByUser(A);
assert(PnodeId != -1);
n = GetUserNumByPnode (PnodeId);
assert(n == 1);
ReleaseReq(A)
n = GetUserNumByPnode (PnodeId);
assert(n == 0);
均衡分配规则:各个PlNode当前处理的用户数尽量平均分布。下面以接入4个用户为例:
系统开始接入4个用户后(假定中间无用户释放),该4个用户在各个PlNode的分布场景,如表1所示,其所列出的场景1、2 、3满足要求,场景4、5则不满足要求。
表1无用户释放的情况
如果用户释放,各个PlNode的分布场景发生变化。在本例中,假定PlNode2上的一个用户释放,当前系统总用户数变成3,此时各个PlNode的用户分布情况如表2所示,场景1、2、3满足需求。
表2 有用户释放的分布情况
四、初赛阶段说明
在初赛阶段需要提交下列材料:
1.设计、测试说明文档
2.可编译执行的源代码(内含测试用例代码)
3.可执行程序
如有缺失将直接影响评分。
五、复赛阶段要求
在初赛已完成的系统上实现以下需求,构造测试用例并且能够测试通过
1.支持PlNode热插拔,最多支持5个
a)新插入PlNode能为新接入的用户服务,之前接入的用户维持现状
b)PlNode拔出,系统保证为之前接入的用户继续服务
2.SysCtrlNode在系统中扮演了重要的角色,如果它发生瘫痪(如重启)将导致系统不可用,请设计方法实现解决该问题。即,假使SysCtrlNode重启,对于已接入的用户服务没有影响,通过测试用例进程仍能正常释放已接入的用户,也能正常接入新用户
注意:复赛的测试用例需要构造PlNode为0~5的不同情况。
如:
PlNode为1时,
用例1
。。
用例2
。。
PlNode为N时,
用例1
。。。
用例2
。。。
六、复赛阶段说明
在复赛阶段需要提交下列材料:
1.设计、测试说明文档
2.可编译执行的源代码(内含测试用例代码)
3.可执行程序
如有缺失将直接影响评分
七、审核标准及评价细则
满分100分。不遵守题目要求的结果,将直接淘汰。
1.程序基本功能(60分)
a)满足功能
b)测试用例完备
2.代码质量(30分)
a)代码复杂度
b)代码可读性
c)代码注释
3.文档质量(10分)
a)设计文档
b)用户文档