概述
为了达到在分布式系统下不同模块/节点之间的通信,本次将设计一个分布式总线作为沟通渠道。
分布式总线:分布式总线是一种在分布式系统中用于数据传输和通信的方式,通过将多个节点连接到一条或多条总线上,实现节点之间的数据交换和通信。与集中式系统不同,分布式总线设计强调系统的去中心化和扩展性,适合处理大规模、复杂的任务。
分布式总线的优势:
-
去中心化:分布式总线设计没有单一的控制点,节点之间是平等的,任何一个节点的故障都不会导致整个系统崩溃
-
可扩展性:系统可以根据需求增加或减少节点,扩展性强,适合大规模系统
-
鲁棒性:由于没有单点故障,分布式系统具有更高的容错能力
-
灵活性:节点可以在总线上动态加入或退出,系统的配置和管理更加灵活
实现基础
原则
-
通用性
-
高内聚、低耦合
-
拆分原则
-
分布式事务原则
-
高可用原则
技术选型
-
CORBA
-
Redis
-
C++
注意事项
-
消息传递机制
-
扩展性和负载均衡
-
安全性
-
存储和持久化
整体设计
CORBA是一种分布式对象计算的中间件,可实现不同平台、不同语言、不同系统之间的互操作性,基于CORBA的优点所以本次设计将基于CORBA进行实现开发。
层次分析
-
支撑层:基于CORBA的分布式计算技术,利用CORBA对象请求代理(ORB)、CORBA通知服务、名字服务、事件服务、生命周期服务、关系服务和事务服务等CORBA核心服务构建消息总线的底层支持服务
-
集成层:在支撑层基础上,利用异步CORBA通知事件消息,构建不同类型的服务组件、应用系统以及其他服务器之间的一种集成机制,从而达到服务共享和信息交换的目的
-
服务层:在集成总线上集成一些服务实现,这些服务的绑定接口是通过标准的IDL进行描述的,可以通过不同语言进行实现服务逻辑。
-
应用层:通过适配器集成到总线上的遗留应用系统、外部应用服务以及其他系统等
体系结构
频道服务器
频道服务器是构成消息集成总线的核心组成部分,提供对总线的侦听和各种管理注册功能。以频道为基本消息管理单元,在频道服务器中部署消息集成服务组件来提供特定的集成服务功能。
一个频道可以有一个或一组传输通道组成,包括缓冲池和频道处理等服务,一个频道表示一种信息提供渠道。而传输通道是CORBA通知服务中的通道。
一个频道服务器可以提供若干个频道服务,消息生产者可以向一个频道服务器申请一个频道服务,然后通过该频道发布消息。消费者可以向一个频道服务器申请一个频道服务,然后通过这个频道获取消息。
频道服务器对消息服务的注册以及部署管理,消息传输通道的创建、配置和分配管理,消息传输管理,生命周期管理和扩展的集成服务等。总线上可以存在多个频道服务器,而同一个频道服务器可以创建多个频道服务。
消息传输总线
利用CORBA通知服务构建消息和消息传输总线,CORBA通知服务提供传输消息的通道,通过传输通道可以传送CORBA事件消息,并且根据传输的消息对象的相关属性进行发送和接收过滤,来增加消息传输的灵活性,且有较好的传输性能。
消息集成服务组件
消息集成服务组件是一种直接连接到消息集成总线上的专门提供一些伺服功能的CORBA组件,运行于频道服务器中,通过频道服务器的组件部署工具进行部署,通过频道服务器中组件生命周期管理服务进行统一管理。频道服务器提供一套集成服务组件开发和管理框架,且可以根据特定的业务需求开发其他各种消息集成服务组件。
整体架构
总线整体框架
整体总线数据运行流程如下:
-
用户对数据进行配置后,发送到总线上
-
模块监听到信息后,将信息写入接收缓冲区中,并移动写指针
-
模块从写入缓冲区读取到数据后,移动读指针,并对数据进行处理
-
将处理完的数据放入Redis数据库中进行缓存,以及放入发送缓冲区中,移动写指针
-
模块收到总线发来的发送信号后,将发送缓冲区中的数据发送到总线,移动读指针
总线实现
创建数据发送接口(IDL)
CORBA为数据的发送接口提供了IDL方式,用户可以通过IDL实现要发送的数据以及接口
#ifndef DataStruct_idl
#define DataStruct_idl
enum grade
{
First,
Second,
Third
}
struct Student
{
string s_name;
grade s_grades;
boolen s_gender;
long s_age;
long long s_Id;
long s_birthday[3];
}
interface i_corba_RTServer{
void push_0(in Student data_);
void pull_0(out Student dock_);
}