Pattern-Oriented Software Architecture v1巨详细读书笔记 9

客户端如何在不知道服务器所处位置的情况下,仅知道其名字就能访问到服务器?这就是本章描述的Client-Dispatcher-Server模式想解决的问题。服务提供者的位置应该对于客户端来讲是透明的,但如果这种透明性直接由服务器来提供,则服务器是不可能在运行时被替换的,而客户端自己更不可能提供位置透明性,因此引入了中间层Dispatcher来屏蔽server的位置。此模式在各种分布式组件中应用广泛,如:RMI,CORBA等等。
本段笔记是《Pattern-Oriented Software Architecture vol.1 A system of patterns》原书[page 323-327]的山寨翻译:),包括了Client-Dispatcher-Server模式的前半部分,包括,例子、环境(上下文,context)、问题、解决方案、结构和动态(Dynamic)小节。

-------------------------------------------------


[page 323]
[Client-Dispatcher-Server]
Client-Dispatcher-Server设计模式在client和server之间引入了一个中间层:Dispatcher组件,通过名字服务提供位置透明性,隐藏client和server间的通信连接建立的细节。

[例子]
假设我们正在开发一个获取科学新信息的软件系统ACHILLES,信息的提供者可以位于本地网络中,也可以是分布在世界各地。为了访问某个信息提供者,必须指定此提供者的位置以及需要它执行的服务。当信息提供者接受到从client发来的请求,它会运行适当的服务并把client索取的信息返回给它。
[图]

[上下文]
集成了一群分布式server的软件系统,这些server可以位于本地,也可以分布在整个网络。
[page 324]
[问题]
当软件系统使用分布在整个网络中的server时,系统必须为他们之间的通信提供方法。(??)在大多数情况下,组件间的连接必须在通信发生之前建立起来,这意味着组件依赖于可用的通信设施,然而,组件的核心功能应该同通信机制的细节分开。client不必关心server的位置,这就允许你动态地变换server的位置,并提供在网络或server失效时的恢复能力。
我们不得不平衡以下的条件:
  - 组件能使用位置独立的服务提供者提供的服务。
  - 服务消费者的功能核心实现代码应该从它同服务提供者建立连接的代码中分离。

[解决方案]
在client和server之间加入dispatcher组件作为中介层。dispacher实现了命名服务(naming service),允许client通过名字而不是物理地址来引用server,实现了位置透明。此外,dispatcher负责在client和server之间建立通信通道。
将server添加到为其他组件提供服务的应用程序中,每个server都用名字唯一标识,且都通过Dispatcher与client连接。
client依赖dispatcher定位特定的server,且通过dispatcher建立和server的通信链接,对比传统的Client-server模型,client和server的角色都能动态地改变。
[结构]
client的任务是执行特定领域的任务,为了执行处理任务,client会访问server提供的业务。在发送请求到server之前,client会向dispatcher申请一个通信通道,client会用这个通道和server通信。

server为client提供一组业务,它将它的名字和地址注册(或被注册)到dispatcher中。server组件可以位于client所在的的机器,也可以位于网络中可达的任意机器。
[page 325]
[图]
dispatcher提供建立client和server间通信通道的功能。为了建立通道,dispatcher通过server组件的名字映射到此server组件的物理位置,使用可用通信机制建立连接。连接建立后,将通信句柄返回给client,如果dispatcher不能建立到指定server的通信连接,它会将错误信息通知给客户。
为了提供命名服务,dispatcher实现了注册和定位server的功能。

[page 326]
client,server和dispatcher之间的静态关系如下图所示:
[图]

[动态]
Client-Dispatcher-Server模式的典型场景包括以下阶段:
  - server将他自己注册到dispatcher组件中。
  - 之后的某个时间,client向disaptcher请求到达特定server的通信通道。
  - dispatcher在它的注册表中查找client指定名字的server。
  - dispatcher建立一条通往server的通信连接,如果连接建立成功,则把此通信通道返回给client,否则,给client返回一个错误。
  - client采用此通信通道直接向server发送请求。
  - 在识别出输入的请求后,server执行相应的服务。
  - 当服务执行完毕,server将结果发回给client。

[page 327]
[图]


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值