服務調用效率比較

在一些較大規模的軟件項目上,若是對用戶體驗要求較高,那就有必要對服務調用效率做個比較。html

關於服務調用,無外乎有兩種:本地調用(項目內)和遠程調用(項目間)。算法

本地調用,在其餘因素相同的狀況下,因爲不須要對外通訊,其效率確定最高。但問題是,隨着業務的發展,當一臺服務器沒法知足時,咱們必須遠程調用。服務器

遠程通信可能有不少,現比較一下,local,rabbitmq RPC ,WebAPI的效率。框架

環境是:本地電腦,知足硬件環境一致的要求;socket

 分別啓動 rabbitmq,WebAPI,使用同一算法,以保證全部的業務邏輯一致。爲了最大限度的提升WebAPI的效率,不使用任何第三方框架。ide

如: 只實現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 165580141htm

第二次運行:接口

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

第三次:

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 只能用於同一網段,不過對於跨網段的仍是能夠解決的。

相關文章
相關標籤/搜索