分布式模式之Broker模式

问题来源:

创建一个游戏系统,其将运行在互联网的环境中。客户端通过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提供的服务和name service非常相像(如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)。简单对象交互如图:

应用场景二:

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

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

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

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

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

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

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

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

简单对象交互如图:

应用场景三:

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

l Broker A将请求转发给Bridge A,Bridge A将请求进行必要的格式化,传送给Bridge B。

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

简单对象交互如图:

部署示意图:


总结:

u 优点:

1. 服务的位置透明性。

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

3. Broker之间可交互。

4. 可重用性。

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

u 缺点:

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

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

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

时间: 2024-10-29 15:14:12

分布式模式之Broker模式的相关文章

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

问题来源: 创建一个游戏系统,其将运行在互联网的环境中.客户端通过WWW服务或特定的客户端软件连接到游戏服务器,随着流量的增加,系统不断的膨胀,最终后台数据.业务逻辑被分布式的部署.然而相比中心化的系统,复杂度被无可避免的增大了,该如何降低各个组件之间的耦合度. 挑战: 需要保证可伸缩性.可维护性.可更新性,需要将服务划分为各个相对独立的组件,组件被分布式的部署,它们之间通过进程间通信方式实现交互.服务的增加.删除.改变都应该被支持.理想情况,以开发者的角度看,集中化的系统和分布式的系统在中心逻

Broker 模式

Broker 模式采用 broker 模式对分布式计算进行简单模拟.系统在一个进程内模拟分布式环境,因此不涉及网络编程和进程间通信,Broker 通过本地函数调用的方式实现 request 和 response的转发.采用 broker 模式对分布式计算进行简单的模拟,要求如下:设计四个 server,一个 server 接收两个整数,求和并返回结果,一个 server 接收两个整数,求差并返回结果,一个 server 接收两个整数,求积并返回结果,一个 server 接收两个整数,求商并返回结

简介Intel MIC上的分布式开发以及Offload模式下的各种限制

最近要在MIC机群上做分布式开发,发现有两种模式可以用: 1) offload模式:该模式和GPGPU编程思想类似,把并行度高的代码转移到local的MIC处理器上执行,其它代码仍然在CPU上执行.MIC只负责本地计算,分布式通信必须在CPU上执行. 2)symmetric模式:编译出在MIC和CPU上执行的两份二进制代码.该模式逻辑上允许MIC进行分布式通信,虽然物理上消息还是从CPU走的.这种模式编程最大的难点是load balancing问题. 通过几天探索,发现了offload模式下的各

理解Windows内核模式与用户模式

 1.基础 运行 Windows 的计算机中的处理器有两个不同模式:"用户模式"和"内核模式".根据处理器上运行的代码的类型,处理器在两个模式之间切换.应用程序在用户模式下运行,核心操作系统组件在内核模式下运行.多个驱动程序在内核模式下运行,但某些驱动程序在用户模式下运行. 当启动用户模式的应用程序时,Windows 会为该应用程序创建"进程".进程为应用程序提供专用的"虚拟地址空间"和专用的"句柄表格"

Oracle Dedicated server 和 Shared server(专用模式 和 共享模式) 说明(转)

一.  官网说明 在DBCA 建库的时候,有提示让我们选择连接类型,这里有两种类型:专用服务器模式和共享服务器模式.默认使用专用模式.如下图: Oracle 官方文档对这两种文档的说明如下: About Dedicated andShared Server Processes http://download.oracle.com/docs/cd/B28359_01/server.111/b28310/manproc001.htm OracleDatabase creates server pro

大数据架构和模式(四)——了解用于大数据解决方案的原子模式和复合模式

摘要:本文中介绍的模式有助于定义大数据解决方案的参数.本文将介绍最常见的和经常发生的大数据问题以及它们的解决方案.原子模式描述了使用.处理.访问和存储大数据的典型方法.复合模式由原子模式组成,并根据大数据解决方案的范围进行分类.由于每个复合模式都有若干个维度,所以每个模式都有许多变化.复合模式使得业务和技术用户可以应用一个结构化方法为大数据问题建立范围,并定义高级的解决方案. 简介 本系列的 第 3 部分 介绍了大数据解决方案的逻辑层.这些层定义了各种组件,并对它们进行分类,这些组件必须处理某个

大数据架构和模式(四)了解用于大数据解决方案的原子模式和复合模式

本文收藏于:http://kb.cnblogs.com/page/510982/ 作者: Divakar等  来源: DeveloperWorks  发布时间: 2015-01-29 18:21   推荐: 0   原文链接   [收藏] 摘要:本文中介绍的模式有助于定义大数据解决方案的参数.本文将介绍最常见的和经常发生的大数据问题以及它们的解决方案.原子模式描述了使用.处理.访问和存储大数据的典型方法.复合模式由原子模式组成,并根据大数据解决方案的范围进行分类.由于每个复合模式都有若干个维度,

Hadoop运行模式:本地模式、伪分布模式、完全分布模式

1.本地模式:默认模式 - 不对配置文件进行修改. - 使用本地文件系统,而不是分布式文件系统. - Hadoop不会启动NameNode.DataNode.ResourceManager.NodeManager等守护进程,Map()和Reduce()任务作为同一个进程的不同部分来执行的. - 用于对MapReduce程序的逻辑进行调试,确保程序的正确. 2.伪分布模式:等同于完全分布式,只有一个节点 - 分为在HDFS上执行和在YARN上执行 - Hadoop启动NameNode.DataNo

Spark 在yarn上运行模式详解:cluster模式和client模式

1.    官方文档 http://spark.apache.org/docs/latest/running-on-yarn.html 2.    配置安装 2.1.安装hadoop:需要安装HDFS模块和YARN模块,HDFS必须安装,spark运行时要把jar包存放到HDFS上. 2.2.安装Spark:解压Spark安装程序到一台服务器上,修改spark-env.sh配置文件,spark程序将作为YARN的客户端用于提交任务 export JAVA_HOME=/usr/local/jdk1