方案-> |
Midas |
DCOM |
COM+ |
ASTA |
RemoteObject |
.NET |
提供者 |
Borland |
微软 |
微软 |
|
|
微软 |
核心技术 |
COM |
COM |
COM |
ASTA自己的,类同Midas, 但不依赖于COM |
RemObjects自己的WebService技术, 不依赖于COM |
WebService |
开发工具 |
Delphi7 |
Delphi7 |
Delphi7 |
Delphi7 |
Delphi7 |
Visual Studio/Delphi8,9 |
与现有开发模式兼容程度 |
★★★★★ |
★★★★ |
★★★★ |
★★ (很不同的开发模式) |
★★★★ (支持Delphi的Prvider/ClientDataSet) |
★ |
部署容易程度 |
★★★ |
★★ |
★ |
★★★★ (集成server、不需要类似socket server、midas.dll的东西) |
★★★★★ (集成server、不需要类似socket server、midas.dll的东西) |
★ |
可伸缩性 |
★★★★ |
★★★★ |
★★★★★★ |
★★★★ |
★★★★★ (支持自带服务器,或者使用Apache/IIS等容器) |
★★★★ |
性能(效率) |
★★★ |
★★★★ |
★★★★ |
★★★★★ (二进制传输,支持压缩) |
★★★★ (二进制传输,支持压缩) |
★★ (文本的XML消息传输) |
消息传输格式 |
二进制COM消息 |
二进制COM消息 |
二进制COM消息 |
二进制流 |
二进制流或文本的XML SOAP消息 |
XML SOAP消息 |
源程序 |
不全 |
无 |
无 |
有 |
有 |
无 |
购买价格 |
$0 |
$0 |
$0 |
$299 - $7,500 |
EUR 299 |
$0 |
与.NET集成 |
不可以 |
可以 |
可以 |
不可以 |
可以 (直接基于webservice并提供.NET客户端开发包,并可以使用二进制消息格式) |
可以 |
中间件跨平台 |
有可能 |
不可能 |
不可能 |
有可能 |
可以 (支持Kylix开发,支持Apache做容器) |
可能吧 |
总体评价 |
★★★ |
★★ |
★ |
★★★★ |
★★★★★ |
★★ |
速度与效率测试:
测试项目 * |
|
|
|
|
|
所花时间 |
传输字节数 |
Midas (Socket Connection) |
26,047 |
366,000 |
2,359 |
1047,000 |
Midas (DCOM Connection) |
812 |
933 |
2,047 |
1047,000 |
ADO直连数据库 (两层) |
|
|
297 |
1046,000 |
|
|
|
|
|
Asta 3 压缩 |
|
|
1,578 |
1100,000 |
|
|
|
|
|
RemoteObject2 HTTP 二进制 压缩 |
8,641 |
791,000 |
2,515 |
1048,000 |
RemoteObject2 HTTP 二进制 不压缩 |
7,765 |
783,000 |
2,391 |
1049,000 |
RemoteObject2 HTTP SOAP |
11,687 |
1935,000 |
3,110 |
1052,000 |
RemoteObject2 TCP 二进制 压缩 |
8,406 |
512,000 |
2,422 |
1049,000 |
RemoteObject2 TCP 二进制 不压缩 |
6,547 |
504,000 |
2,484 |
1563,000 |
RemoteObject2 TCP SOAP |
11,281 |
1673,000 |
|
|
|
|
|
|
|
RemoteObject3 HTTP 二进制 压缩 |
11,625 |
504,000 |
|
|
RemoteObject3 HTTP 二进制 不压缩 |
10,593 |
501,000 |
|
|
RemoteObject3 HTTP SOAP |
15,640 |
1108,000 |
|
|
RemoteObject3 TCP 二进制 压缩 |
11,172 |
512,000 |
|
|
RemoteObject3 TCP 二进制 不压缩 |
10,203 |
504,000 |
|
|
RemoteObject3 TCP SOAP |
15,547 |
1712,000 |
|
|
|
|
|
|
|
结果分析:
- 两层的效率当然是最高的;这样选择三层方案时就可以在伸缩性和性能之间做权衡,选择最优方案
- DCOM针对本机运算可能做过优化,太快了,传输的字节数也太少了
- Socket Connection的效率实在不敢恭维,比RemoteObject使用SOAP传输还低
- RemoteObject使用二进制传输的效率大概是使用SOAP的2-3倍
- RemoteObject使用二进制传输基本能达到甚至超过Socket Server的性能
- RemoteObject的压缩好像没什么用
- Asta性能比RemoteObject和Midas都高,但这个结果是设置了ADOQuery的CacheSize=1000时取得的,其它的测试都没有专门设置该属性
* 以上测试涉及文件都在附件中的测试包中;都是连接的本机(localhost);空白的是没有做测试的
* 传输字节数测量都是用的CommView 4.1 IP包检测捕获软件,监测“Loopback”(127.0.0.1)设备;CommView软件安装见测试包的tools目录;字节数包括实际传输的数据和IP握手信息等,如果大于10K,则只保留到千位,可能每次测量会有一点点区别。
* 测试所花时间时CommView停止捕获IP包,测试3次左右,取中间值
* 测试计算1000次1+1=2: 中间都是实现类似以下方法: function Sum(a, b: Integer): Integer; begin Result := a + b; end;
其中RemoteObject 2、3的测试程序直接用的它自带的MegaDemo例子,执行文件分别见测试包中的“1+1=2\RemObjects SDK 2”和“1+1=2\RemObjects SDK 3”目录,后者是试用版,运行前需要先允许Delphi(不知道还有没有其它限制),测试时都是设置的使用Indy;Midas和DCOM的测试是自己写的程序,源程序和执行文件测试包中的“midas”目录。 
|