码迷,mamicode.com
首页 > 其他好文 > 详细

服务调用效率比较

时间:2016-07-09 19:11:52      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:

在一些较大规模的软件项目上,如果对用户体验要求较高,那就有必要对服务调用效率作个比较。

关于服务调用,无外乎有两种:本地调用(项目内)和远程调用(项目间)。

本地调用,在其他因素相同的情况下,由于不需要对外通信,其效率肯定最高。但问题是,随着业务的发展,当一台服务器无法满足时,我们必须远程调用。

远程通讯可能有很多,现比较一下,local,rabbitmq RPC ,WebAPI的效率。

环境是:本地电脑,满足硬件环境一致的要求;

 分别启动 rabbitmq,WebAPI,使用同一算法,以保证所有的业务逻辑一致。为了最大限度的提高WebAPI的效率,不使用任何第三方框架。

如: 只实现Servlet接口

@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
String val = servletRequest.getParameter("num");
int fibVal = 0;
try {
fibVal = fib(Integer.valueOf(val));

} catch (Exception ex) {

}
servletResponse.setContentType("text/html");
servletResponse.setCharacterEncoding("utf-8");
PrintWriter writer = servletResponse.getWriter();
writer.println(fibVal);
writer.flush();
writer.close();

}

请求端如下:
public static void main(String[] args) throws Exception {
String message = readStrFromConsole();
long start = System.currentTimeMillis();
int localVAl = fib(Integer.valueOf(message));
System.out.println("local:first:" + (System.currentTimeMillis() - start));
System.out.println(message + "‘s Fibo is " + localVAl);
start = System.currentTimeMillis();
RPCClient fiboRpc = new RPCClient();
String response = fiboRpc.call(message);
fiboRpc.close();
System.out.println("RPC:Second:" + (System.currentTimeMillis() - start));
System.out.println(message + "‘s Fibo is " + response);
start = System.currentTimeMillis();
String http_response = RemoteRequest.Get("http://localhost:8080/TestWeb/test?num=" + message);
System.out.println("HTTP:Second:" + (System.currentTimeMillis() - start));

System.out.println(message + "‘s Fibo is " + http_response);
}
计算fib(41)的值,测试结果如下:

Connected to the target VM, address: ‘127.0.0.1:55175‘, transport: ‘socket‘
41
local:first:1017
41‘s Fibo is 165580141
RPC:Second:1207
41‘s Fibo is 165580141
Disconnected from the target VM, address: ‘127.0.0.1:55175‘, transport: ‘socket‘
HTTP:Third:2106
41‘s Fibo is 165580141

第二次运行:

41
local:first:1017
41‘s Fibo is 165580141
RPC:Second:1227
41‘s Fibo is 165580141
HTTP:Third:1963
41‘s Fibo is 165580141

第三次:

41
local:first:1022
41‘s Fibo is 165580141
RPC:Second:1193
41‘s Fibo is 165580141
Disconnected from the target VM, address: ‘127.0.0.1:55203‘, transport: ‘socket‘
HTTP:Third:1969
41‘s Fibo is 165580141

。。。

经过更多次的调用,你会发现:

local , 在1000ms 左右;

rabbitmq RPC ,在 1200ms 左右;

WebAPI,在 2000ms 左右。

由此来看,在远程调用中,rabbitmq RPC的效率要比WebAPI高很多。

但有一点限制,rabbitmq RPC 只能用于同一网段,不过对于跨网段的还是可以解决的。

 

服务调用效率比较

标签:

原文地址:http://www.cnblogs.com/itdev/p/5656274.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!