代理者系统结构模式可以用来构建带有隔离组件的分布式系统,该软件通过远程服务调用进行交互。代理者组件负责协调通信,诸如消息转发,以及传回结果和异常。

我所知的一个应用代理者模式的架构是SOA。

1. 例子

分布式的城市信息系统。

2. 语境

系统由独立的、相互协作的、分布式的、异构的组件构成。

3. 问题

构建一个复杂的软件系统,它是由独立的和互操作的组件构成,而不是一个整体的应用程序,从而使系统具有可维护性,可变更性和灵活性。通过将系统分割为多个组件,系统变得可分布和可扩展。可以参考SCA(服务组件架构)。

  1. 对客户隐藏服务提供者信息:比如他的地址,开发语言等。
  2. 组件在运行期可替换,移动,更改,而对客户无影响。
  3. 能够通过远程调用服务。

4. 解决方案

通过引入代理者组件来隔离客户端和服务提供端,对客户隐藏服务端的细节。服务器向代理者注册自己的服务,客户端通过向代理者发送请求调用服务,代理者根据服务请求决定服务提供者,并且将请求路由到服务提供者。最后返回结果给客户端。

5. 结构

分为:客户机,服务器,代理者,客户端代理和服务端代理,网桥。

  1. 服务器是服务的提供者,它们可能使用不同的技术构建,也就是它们可能是异构的。它们启动后向代理者注册服务。
  2. 客户机调用服务,向代理者发送请求。考虑一种情况,服务器也可能是客户端,这出现在它需要调用其他的服务端情况下。
  3. 代理者:接收服务器的服务注册,接收客户端的服务请求,并路由的指定的服务器。
  4. 客户端代理和服务代理:是他们的一个小的模块,用来隐藏代理。它可以由代理者提供。
  5. 网桥:连接多个代理者。以构成更复杂的系统。

这种结构和SOA非常相像。SOA中的代理其实就是服务总线。

6. 动态特性

7. 实现

  1. 定义一个对象模型。
  2. 确定使用哪种方法公开服务。
  3. 指定代理者组件提供给客户端和服务端的API。
  4. 用代理对象对客户端和服务器隐藏细节。
  5. 开发IDL编译器。其实可以使用webservice。

8. 已解决的例子

9. 变体

  1. 直接通信代理者系统:代理者将通信通道开放给客户端。
  2. 消息传送代理者系统:举个简单的例子,客户端发送一个服务请求,这个请求是一个消息,代理收到消息后,根据消息的类型转发至不同的服务器。服务器在具体解析这个请求。
  3. 交易器系统:客户机的请求被唯一的转发至目标服务器。
  4. 适配器代理者系统:应对异构的服务器,分别提供代理者的适配器,以对服务器隐藏代理者的接口,实现灵活性。
  5. 会叫代理系统:反应式模型是事件驱动的,一旦事件到来,代理主将调用已注册的方法来对事件作出反应。

10. 已知应用

11. 效果

优点:

  1. 对客户端隐藏服务器的信息:位置,接口格式等。
  2. 服务组件的可变性和可扩展性。
  3. 代理者系统的可移植性。
  4. 不同代理者之间的互操作性。
  5. 可重用性。

缺点:

  1. 效率受限
  2. 容错性差。

转载于:https://www.cnblogs.com/chgaowei/archive/2011/05/28/2060547.html

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐