代理者系统结构模式可以用来构建带有隔离组件的分布式系统,该软件通过远程服务调用进行交互。代理者组件负责协调通信,诸如消息转发,以及传回结果和异常。
我所知的一个应用代理者模式的架构是SOA。
1. 例子
分布式的城市信息系统。
2. 语境
系统由独立的、相互协作的、分布式的、异构的组件构成。
3. 问题
构建一个复杂的软件系统,它是由独立的和互操作的组件构成,而不是一个整体的应用程序,从而使系统具有可维护性,可变更性和灵活性。通过将系统分割为多个组件,系统变得可分布和可扩展。可以参考SCA(服务组件架构)。
- 对客户隐藏服务提供者信息:比如他的地址,开发语言等。
- 组件在运行期可替换,移动,更改,而对客户无影响。
- 能够通过远程调用服务。
4. 解决方案
通过引入代理者组件来隔离客户端和服务提供端,对客户隐藏服务端的细节。服务器向代理者注册自己的服务,客户端通过向代理者发送请求调用服务,代理者根据服务请求决定服务提供者,并且将请求路由到服务提供者。最后返回结果给客户端。
5. 结构
分为:客户机,服务器,代理者,客户端代理和服务端代理,网桥。
- 服务器是服务的提供者,它们可能使用不同的技术构建,也就是它们可能是异构的。它们启动后向代理者注册服务。
- 客户机调用服务,向代理者发送请求。考虑一种情况,服务器也可能是客户端,这出现在它需要调用其他的服务端情况下。
- 代理者:接收服务器的服务注册,接收客户端的服务请求,并路由的指定的服务器。
- 客户端代理和服务代理:是他们的一个小的模块,用来隐藏代理。它可以由代理者提供。
- 网桥:连接多个代理者。以构成更复杂的系统。
这种结构和SOA非常相像。SOA中的代理其实就是服务总线。
6. 动态特性
7. 实现
- 定义一个对象模型。
- 确定使用哪种方法公开服务。
- 指定代理者组件提供给客户端和服务端的API。
- 用代理对象对客户端和服务器隐藏细节。
- 开发IDL编译器。其实可以使用webservice。
8. 已解决的例子
9. 变体
- 直接通信代理者系统:代理者将通信通道开放给客户端。
- 消息传送代理者系统:举个简单的例子,客户端发送一个服务请求,这个请求是一个消息,代理收到消息后,根据消息的类型转发至不同的服务器。服务器在具体解析这个请求。
- 交易器系统:客户机的请求被唯一的转发至目标服务器。
- 适配器代理者系统:应对异构的服务器,分别提供代理者的适配器,以对服务器隐藏代理者的接口,实现灵活性。
- 会叫代理系统:反应式模型是事件驱动的,一旦事件到来,代理主将调用已注册的方法来对事件作出反应。
10. 已知应用
11. 效果
优点:
- 对客户端隐藏服务器的信息:位置,接口格式等。
- 服务组件的可变性和可扩展性。
- 代理者系统的可移植性。
- 不同代理者之间的互操作性。
- 可重用性。
缺点:
- 效率受限
- 容错性差。
所有评论(0)