分布式计算背景:
单台计算机的功能仍然十分有限。
升级到更强的服务器的费用常常远远高于购买多台档次稍低的机器。
解决方案:
利用联网的计算机协同工作,共同完成复杂的工作成为相对成本较低的选择,而且可以完成单台计算机所无法完成的任务。
存在问题:
网络本质上并不可靠,特别是远程通信。
分布式系统还带来了并发和同步的问题。
基于实例的协作
所有的实例都处理自己范围内的数据,这些对象实例的地位是相同的,当一个对象实例必须要处理不属于它自己范围的数据时,它必须和数据归宿的对象实例通信,请求另外一个对象实例进行处理。
请求对象实例可以启动对象、调用远程对象的方法,以及停止运行远程实例。
基于实例的协作适用于比较小范围内网络情况良好的环境中,这种环境常常被称为近连接。这种情况下对对象的生存周期管理所带来不寻常的网络流量是可以容忍的。
基于实例的协作常常使用被称为“代理”的方法。
基于服务的协作
只提供远程对象的接口,用户可以调用这些方法,却无法远程创建和销毁远程对象实例。
基于服务的协作适用于跨平台的网络,网络响应较慢的情况,这种环境常称为远连接。这时,简化交互性更为重要,而频繁的网络交换数据会带来难以容忍的延时。
基于服务的协作往往采用分层次的结构,高层次的应用依赖于低层次的对象,而低层次对象实例的实现细节则没有必要暴露给高层次对象。