介绍:
ICE(Internet Communication Engine),由ZeroC公司开发的一个中间件,是在CORBA的基础上进行演进而来,采用接口定义生成客户端和服务器端成根的方法来实现RPC通信,目前支持的语言有C++, Java, PHP, Ruby,.NET和Python,License方式有GPL和商业License两种,如果是在同一公司内部使用,不会分发给用户,因此可以免费使用(不知道理解是否正确?GPL)
性能比较:
开发一个简单的测试程序,如下:
String hello(string word);
上面两个函数主要来测试各个不同实现下的性能,以及实现麻烦程度:
鉴于目前流行的框架,提供了HTTP,Hesssion和ICE三种不同实现,以及性能对比测试:
调用者的线程数分别从1个,2个,4个,8个,16个,32个和64个进行性能比较
硬件配置:
10.2.226.7和10.2.226.9,2CPU(双核),相当于4核,内存 4G ,网卡100Mbs
使用10.2.226.7作为服务器,10.2.226.9作为客户端
Hello函数实现如下:
String hello(string word){
Return word;
}
调用次数固定为1000000次,结果如下:
使用ICE(版本 3.2.1 )方式,服务器端使用C++开发,客户端使用C++:
./clienticeperftest.exe -h 10.2.226.7 -n 1000000 -t Y
线程数 | Hello(40字节) Cost ms/server load (client=java) | Hello(320字节) Cost ms/server load | getUserInfo cost ms/server load | |||
1 | 289528 | 0.1 | 387403 | 0.1 |
|
|
2 | 141580 | 0.2 | 199543 | 0.1 |
|
|
4 | 77050 | 0.4 | 106616 | 0.2 |
|
|
8 | 43986 | 0.8 | 58410 | 0.8 |
|
|
16 | 26605(55586) | 2 | 36965* | 1.6 |
|
|
32 | 29003(57336) | 1.4 | 36917* | 1.7 |
|
|
64 | 37184 | 1.2 | 36921* | 2 |
|
|
(*)到线程变成16个以上时,网络流量已经达到了100Mbs,就是说已经达到了网络带宽的极限
使用Hessian 开发,JBoss服务器,客户端使用Java开发,启用KeepAlive功能:
16个线程情况下,消耗时间为123490ms,但调用方的Load达到了惊人的12,服务器Load还好为2左右
使用Hessian测试结果表明:比C++ ICE慢5.5倍,Client Load提高10倍,不过性能也还可以,可以达到8000/秒的操作次数。