分布式模式之Broker模式(转)

摘要:
服务端注册自己到Broker,通过暴露接口的方式允许客户端接入服务。通过使用Broker模式,应用可以通过发送消息访问远程的服务。如果请求来自其他的Broker,本地的Broker需要转发请求并最终将结果或异常回应给相应的远程Broker。Broker主要完成Client和Server之间的握手。lBroker查询可使用的Server,将请求转发给Server。lBroker将相应消息转发给正确的Client_Proxy,Client受到响应继续其他逻辑。lBrokerA将请求转发给BridgeA,BridgeA将请求进行必要的格式化,传送给BridgeB。

问题来源:

创建一个游戏系统,其将运行在互联网的环境中。客户端通过WWW服务或特定的客户端软件连接到游戏服务器,随着流量的增加,系统不断的膨胀,最终后台数据、业务逻辑被分布式的部署。然而相比中心化的系统,复杂度被无可避免的增大了,该如何降低各个组件之间的耦合度。

挑战:

需要保证可伸缩性、可维护性、可更新性,需要将服务划分为各个相对独立的组件,组件被分布式的部署,它们之间通过进程间通信方式实现交互。服务的增加、删除、改变都应该被支持。理想情况,以开发者的角度看,集中化的系统和分布式的系统在中心逻辑上没有什么不同。为实现这个目标:

l可以远程的访问服务,而对于访问者,服务的位置应该是透明的。

l提供服务的组件可以增加、删除、改变,而且这些在运行期同样应该被支持。

l访问服务的客户端不应该关心服务的实现细节。

解决方案:

引入一个Broker组件,解耦客户端和服务端。服务端注册自己到Broker,通过暴露接口的方式允许客户端接入服务。客户端是通过Broker发送请求的,Broker转发请求道服务端,并将请求的结果或异常回发给客户端。通过使用Broker模式,应用可以通过发送消息访问远程的服务。

这一架构模式允许动态的改变、添加、删除服务端,从客户端的角度,这些都是透明的。

结构:

Broker模式定义了6中类:Client,Server,Client_Proxy,Server_Proxy,Broker,Bridge。

Server

l责任:处理特定领域的问题,实现服务的细节,注册自己到Broker,处理请求并返回结果或异常。

l协作类:Server_Proxy,Broker

Client:

Client是需要访问远程服务的应用程序,为此,Client发送请求到Broker,并从Broker上接收响应或异常。Client和Server只是逻辑上相关而已,实际上Client并不知道Server的确切位置。

l责任:1.实现用户端功能,2.发送请求到Broker,3.接收相应和异常。

l协作类:Broker,Client_Proxy

Broker:

Broker可以被看成消息转发器。Broker也负责一些控制和管理操作。它能够定位服务端的位置,若发生异常,能够将异常捕获传给Client。Broker需要提供注册服务的接口给Server。如果请求来自其他的Broker,本地的Broker需要转发请求并最终将结果或异常回应给相应的远程Broker。Broker提供的服务和nameservice非常相像(如DNS、LDAP)。

l责任:1.注册服务。2.提供服务API。3.转发消息。4.容错处理。5.与其他Broker的交互。6。定位服务。

l协作类:Client_Proxy,Server_Proxy,Bridge

Client_Proxy:

连系Client和Broker,这一层保证了通讯的透明性,使Client调用远程服务就像调用本地的服务一样。

l责任:1.封装特定的系统调用。2.封装通讯的参数、控制信息等。

l协作类:Client,Broker。

Server_Proxy:

Server_proxy是与Client_Proxy相对应的,它接受请求,解包消息,解析出参数并调用服务的实现接口。

l责任:1.封装特定的系统调用。2.封装通讯的参数、控制信息等。3.调用server的服务接口。

l协作类:Server,Broker。

Bridge:

Bridge用来连接各个Broker,一般这个组件是可选的。当系统是发杂的网络组成时,有可能需要这一角色。

l责任:1.封装特定的网络特性。2.传递Broker之间的通讯。

l协作类:Broker。

应用场景一:

直接通讯方式。Client和Server相互理解他们之间的通讯协议。Broker主要完成Client和Server之间的握手。之后所有的消息、异常都是由Client与Server直接交互。(想象DNS)。简单对象交互如图:

分布式模式之Broker模式(转)第1张

应用场景二:

lBroker启动,完成自身的初始化,之后进入事件循环,等待消息到来。

lServer启动,首先执行自身的初始化,然后注册自己到Broker。

lBroker接收Server的注册请求,将其加入到可使用服务的列表,并回应Ack给Server。

lServer接收Ack,进入事件监听循环,等待消息到来。

lClient调用远程服务对象的方法,Client_Proxy封装消息请其发送给Broker。

lBroker查询可使用的Server,将请求转发给Server。

lServer_Proxy解析消息,分离出参数和控制信息,并调用特定的Server实现接口。Server处理完的结果通过Server_proxy封装成消息转发到Server。

lBroker将相应消息转发给正确的Client_Proxy,Client受到响应继续其他逻辑。

简单对象交互如图:

分布式模式之Broker模式(转)第2张

应用场景三:

lBrokerA接收到请求,交由Server处理,但是发现该Server位于其他的网络节点。

lBrokerA将请求转发给Bridge A,BridgeA将请求进行必要的格式化,传送给BridgeB。

lBridgeB将请求进行必要的格式化,转化成BrokerB可以理解的格式,并转发给BrokerB。BrokerB执行场景二中的过程,处理的结果按如上逆序返回。

简单对象交互如图:

分布式模式之Broker模式(转)第3张

部署示意图:

分布式模式之Broker模式(转)第4张

总结: u优点:

1.服务的位置透明性。

2.组件的可变性及扩展性。由于Server是注册到Broker上的,所以Server可以动态的增加、删除、改变。

3.Broker之间可交互。

4.可重用性。

5.由于组件的耦合度较小,调试和测试的工作也是可控的。

u缺点:

1.效率;增加了一层Broker的消息转发,效率有所降低。

2.容错能力必须要特别考虑。

3.调试和测试的工作加大。

转至:http://blog.chinaunix.net/uid-23093301-id-90459.html

免责声明:文章转载自《分布式模式之Broker模式(转)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇正则表达式(Rust)nginx和fpm的进程数配置和502,504错误下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ElasticStack分布式引擎技术栈(ELK)介绍

   刚入职不久,就在公司跟前辈导师了解到Elastic技术栈,让我着手准备负责部门ELK-Stack(云计算)的相关工作,于是开始整理学习与总结。 由于本人所在的是某大型央企银行的信息科技部门,与各大数据库交往比较密切,故本人对Elastic十分感兴趣。 一、简介 Elastic-Stack早期也称为ELK,现统一叫ELK stack。这一套技术栈解决...

SQL server 2012 各个版本比较

有关不同版本的 SQL Server 2012 所支持的功能的详细信息。 功能名称 Enterprise 商业智能 Standard Web Express with Advanced Services Express with Tools Express 单个实例使用的最大计算能力(SQL Server 数据库引擎)1 操作系统最大值 限制为...

Gearman分布式任务处理系统(一)基本介绍

Gearman介绍 Gearman是一个用来把工作委派给其他机器、分布式的调用更适合做某项工作的机器、并发的做某项工作在多个调用间做负载均衡、或用来在调用其它语言的函数的系统。 通常,多语言多系统之间的集成是个大问题,一般来说,人们多半会采用 WebService 的方式来处理此类集成问题,但不管采用何种风格的WebService,如 RPC 风格,或者...

Web Service实现分布式服务的基本原理

简单的说, 就是客户端根据WSDL 生成 SOAP 的请求消息, 通过 HTTP 传输方式(也可以是其它传输方式, 如 FTP 或STMP 等,目前 HTTP 传输方式已经成为 J2EE Web Service 的标准)传给对方, 服务方实现服务请求, Web Service(Web服务)将结果以 SOAP 的消息格式返回给客户端。 如果人工去创建和解析基...

《Akka应用模式:分布式应用程序设计实践指南》读书笔记6

一致性和可扩展性 一致性是系统内比较复杂的属性,它会随着系统的变化而变化。简单来说,一致性就是数据保持一致,在分布式系统中,可以理解为多个节点中数据的值是一致的。一旦系统具有并行性(分布式只是并行的一种表现),保持一致性就变得困难了,毕竟需要协调全局状态。 事务和一致性 一致性意义上的事务是指单一的原子操作。也就意味着一系列操作要么全成功,要么全不成功,不...

架构师技能体系

一、构成架构师的技能体系二、阅读源码,分析源码知识点总汇这张图详细介绍了源码中所用到的经典设计思想及常用设计模式,先打好内功基础,了解大牛是如何写代码的,从而吸收大牛的代码功力。 结合Spring5和MyBatis源码,带你理解作者框架思维,帮助大家寻找分析源码的切入点,在思想上来一次巨大的升华。 这个任务感觉是“成为一个高级Java开发工程师”,即对常用...