ICE中间件学习笔记 基础理论篇
1、“最多一次”语义
idempotent操作,如:x=1,执行多次对结果无影响,反之如:x++,执行多次对结果有影响。Ice的内在机制保证了在第一次确定失败时才会进行重试,将操作标记为idempotent,将使Ice runtime更积极的进行错误恢复。
2、同步方法调用
缺省情况下,客户端将使用同步方式进行远程过程调用,期间客户端线程被挂起,并在调用结束时恢复。
4、异步方法调用
Ice支持异步的方法调用(AMI),客户端除了传递通常的参数外,还需传递一个回调对象,当操作完成时,Ice runtime会调用回调对象的方法。
注意:服务器的servant并不能区分客户端是同步调用还是异步调用。
5、异步方法分派(AMD)
是AMI的服务器等价物,缺省方式是同步分派,服务器run time向上调用服务器应用代码,当操作在执行时,一个执行线程会被“束缚”在服务器中,直到操作完成才会释放。如果调用的客户端数量众多,服务器将无法承受。
而异步方法分派,则是runtime仅给应用代码一个通知,应用并不会立即处理该操作,当操作的结果可用时,应用发起API调用,告诉Ice runtime最后返回客户端。
注意:客户端并不能区分服务器执行的是同步还是异步分派。
6、单向方法调用
具有“尽力”语义,客户端runtime会把调用交给本地传输机制,实际的调用由操作系统异步发送。单向调用是不可靠的,由参数错误、对象不存在等引起的问题并不会反馈到客户端。
对服务器而言无法区分是单向调用还是双向调用。只有当目标对象提供了面向流的传输机制时(TCP/IP或SSL)才能使用单向调用。
注意:即使单向操作是在面向流的机制中发送的,也没有办法保证服务器的调用次序是预想中的,因为服务器是异步调用,线程间的调度是无序的。
7、成批的单向调用
当客户端发起数量众多的单向调用时,带给服务器的开销是巨大的,runtime将为每一个调用在用户模式/内核模式中切换。成批单向调用允许客户端累积一定数量的单向调用后,调用API通知runtime进行发送,从而形成一个通信包发送给服务器,同时服务器可保证是按调用顺序依次执行。
8、数据报调用
与第6条类似,包括不可靠特性和无序特性,特别的,数据包采用UDP而单向调用采用TCP/IP。带来的问题是丢包的可能性,适用于LAN网及对及时性要求比可靠性高的intel网。
9、成批的数据报调用
通过缓冲机制,客户端在累积了一定量时调用API刷出,需注意的是包大小尽量比网络PDU限制小,否则会产生UDP分包而加大丢包概率,同时可能出现部分丢包的情况,成批数据报调用在服务器端将顺序执行。
10、ICE自有服务(好像有些老,随进度更新吧)
IcePack(定位服务):随需启动服务器,部署描述符,简单的对象查找服务
IceBox(简单应用服务):协调应用组件启动或停止,应用服务器可作为动态库而不是进程部署。
IceStorm(发布-订阅服务):降低客户端与服务端的耦合,大量订阅的场景中很有用(如证券报价应用),同时可作为联盟应用,多个服务器实例运行在不同机器上,实现负载均衡。
IcePatch(软件补丁服务):客户端连接后请求获得特定应用的更新,服务器以压缩形式下发,节省带宽。
Glacier(防火墙服务):客户端-服务端双方向公钥加密。
Freeze(对象持久服务):内建的对象持久服务,采用高性能数据库BerkeleyDB实现存储。
IceGrid(网格):实现服务集群。