这几天分析一个我接手的系统,是一个典型的分布式系统。其中有特色的技术就是采用了webservice,
webservice从字面上分解就是web
service----一个提供web服务的系统,可以通过web方式访问这些服务。
而从现实中,webservice可以说是一套标准:分布式,跨平台,跨语言等;
标准实现采用SOAP协议,SOAP
协议是基于流行的XML表达的,具有一个套封envlope,
envlope里包含一个必须的body和一个可选的head;
就是在这个body里,我们声明了访问的方法、方法的参数或返回值。
webservice实现,
C++系统上采用开源的gSoap,而java采用apache的Axis。这两个框架都提供工具来
生成C++代码或Java代码,不管是gSoap或者Axis,他们生成的最终代码,客户端只需要调用简单的对象就
可以访问服务器,而服务器生成一样的接口,开发者实现这些接口就行,中间的通讯过程全部由框架解决了。
其实这种技术架构并不新颖,早期的CORBA和DCOM,
后来java的RMI,
这些基本上都是RPC技术,大同
小异而已。而它们的背后设计模式,可以说就是23种模式之一的代理模式Proxy。简言之就是,一个客户不想
或者不能直接引用一个对象(接口),而代理对象(接口)可以在客户端和目标对象之间起到中介作用。
按目的划分代理模式有8种:
1、远程代理:为位于不同的地址空间的对象提供一个局域代表对象
2、虚拟代理:根据需要创建一个资源消耗较大的对象,使得此对象只在需要时才会被真正创建
3、Copy-on-Write代理:把复制拖延到只有在客户需要时才真正采取行动
4、保护代理:控制对象的访问,提供使用权限检查
5、Cache代理:为某个目标操作的结果提供临时的存储空间,以便多客户共享
6、防火墙代理:保护目标,防止恶意用户
7、同步化代理:能同时访问对象而没有冲突
8、智能引用代理:提供一些额外操作,如访问次数统计
显然RPC方式属于第1种远程代理模式。
可以看出,在面对一种技术时,我们从它的定义、实现、引入目的、类似相关技术、背后理论基础来
细细分析,就比较容易掌握了。