分布式计算编程项目一
并发向量计算服务及性能测试
项目初步目标
准备:
安装jdk,安装maven,为maven设置阿里仓库,用maven编译helloworld版的JAVA程序。
初步目标:
(1)设计支持多客户端并发访问的向量计算服务器程序。(支持向量点乘、向量叉乘运算)
(2)利用JMeter测试你的服务器程序并发性能(平均响应时间和TPS指标)
设计报告
1.编写目的
完成对支持多客户端并发访问的向量计算服务器程序(支持向量点乘、向量叉乘运算)的设计。
2.实现功能
1.程序中服务器支持多客户端并发访问;
2.设计了一个可交互的可视化界面;
3.客户端连接成功后有提示功能;
4.输入向量后支持点乘与叉乘运算;
5.输入值异常时会进行阻断;
6.只输入单个向量后会进行等待,直到输入正确向量;
7.客户端点击”退出“后迅速与服务器断开,完成退出。
3.程序系统的结构
在main文件夹里的java文件夹里新建chapter05
里面的TCPClient是客户端(一直不用改),TCPThreadServer是服务器端(点击后一直运行不用管),VectorOperations是服务器会调用的向量计算类,TCPClientThreadServer是可交互界面。
相关知识具体见:
4.可以改进的地方
我为了后面的性能测试,把服务器对客户端返回的错误提示都去掉了,这部分后面还可以加上。
比如:
- 叉乘时,用户输入的两个向量不都是三维向量,可以提示“请输入两个三维向量”;
- 叉乘时,用户输入两向量相同,可以提示“这样计算无意义(因为值永远为0)”
- 点乘时,用户输入两向量长度不相等,可以提示“请输入长度相等的向量”
- 计算过程中,用户未输入完整向量即点击“发送”,返回“请重新输入向量”
测试报告
1.输入项与输出项
必要输入项:
1.端口号(这里设置为7777);
2.选择点乘或叉乘;
3.如果选择点乘,必须保证输入的两向量长度相等,如果选择叉乘,必须保证输入的两向量均为三维。
输出项:
1.开始连接成功提示“对话已连接”;
2.中间会输出客户端发给服务器的操作要求,如“dot;向量1;向量2”或"cross;向量1;向量2";
3.用户输入正确格式的向量后输出计算结果,点乘返回值,叉乘返回向量;
4.后面对话结束提示“对话已关闭!”
2.性能
我电脑是8核16逻辑处理器的,同时处理500个线程请求,会输出:
TCP达到每秒503.5,平均响应时间0ms。详见
3.代码的改进过程
原来版本的输出是这样的:
1.通过仔细研究程序,我发现了一个”if else“的进入条件不当导致服务器每次返回的计算结果会多重复一次,于是对它进行了修改;
2.开始设置的是服务器连接成功后先输出”欢迎使用本服务“,但是后面在做性能测试时这句话的存在导致JMeter无法收到正确返回的计算结果,我就把它修改为客户端表示”连接成功“,这样不管是在界面上运行还是性能测试都没有问题了。