消息队列在分布式系统数据中的应用与分析

2012-04-29 12:56李志刚刘竹旺
商场现代化 2012年30期
关键词:数据

李志刚 刘竹旺

[摘 要]队列的主要目的是提供路由并保证消息的传递,如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它。消息队列使应用程序的集成和在不可靠但节省费用的网络上开发可靠的应用程序变得更加容易。本文主要探讨消息队列在分布式系统数据中的应用与分析。

[关键词]消息队列 分布式系统 数据

消息队列是一种进程间通讯机制,本文对单机消息队列进行了有效的扩展,使其分布在网络上作为一种基础中间件平台为分布式计算提供服务。随着各种计算机标准的出现和技术的进步,中间件技术作为软件行业崛起的一个崭新分支,正在全球范围内迅猛发展,缺少一个开放的标准是消息中间件不能被大量使用的重要障碍。中间件技术的广泛运用是在最近10年。消息中间件是中间件范畴中发展最快的中间件类型之一。

一、消息队列方法的基本设计

消息队列是操作系统的进程之间用于通信的一种机制,两个或多个进程间通过访问共同的消息队列完成消息的交换。将消息队列的概念扩展到位于分布式环境下不同站点上应用程序间的通信,由消息队列机制实现网络上的可靠消息传送,其中涉及的消息队列有消息接收队列、更新发送表、消息发送管理器和消息接收管理器。

当应用程序在处理数据库修改或更新事务时,修改更新了本地服务器的数据库中所保存的数据,同时应用程序将更新信息和更新所执行的SQL(StructuredQueryLanguage)语句以消息的形式写入到更新发送表,更新发送表的内容和本次本地服务器数据库更新的内容一致。根据服务器软件的设定,当服务器发起与其他服务器的数据一致操作时,触发消息发送管理器将更新发送表的内容封装成Message消息发送给其他服务器。对本地而言,若无异常,消息将送到目的地址所指示的远端站点的消息接收队列中。同时接送端,一个后台消息接收管理器一直监视着消息接收队列。当检测到有消息到达时,开始读取消息,并根据读到的消息内容恢复成相应的SQL语句,根据SQL语句对本地数据库执行所描述的更新事务。如果更新成功,则处理结束,并返回“更新成功”,否则返回“更新失败”。此时发送端的消息发送管理器一直监视接收队列,根据收到的消息类型进行相应的操作,若各服务器更新成功,则将该更新发送表内容删除,若失败,则周期性地重发该消息。

二、分布式消息队列操作

分布式消息队列的写操作就是向一个已有的消息队列中发送数据的过程。写消息之前,用户进程应获得其消息队列描述符msqid的值,然后由msgsnd_d()系统调用将数据写入由msqid值指定的消息队列。具体过程如下:用户进程调用msgsnd_d()时,系统调用msgsnd_d()首先向本地的守护进程发送“写数据”的请求信息,在请求信息中包含msgsnd_d()调用的参数msqid、msgflg和msgp,然后等待守护进程返回应答信息,收到应答信息后把结果返回给用户进程,若是错误信息,还要设置相应的错误信号errno。守护进程收到“写数据”的请求后也派生出一个子进程处理。从请求信息中分离出参数msqid、msgflg和要写入的信息,然后在key值表中查找msqid,若不存在则将错误信息返回给用户进程,若存在则返回其key值表中的key值及所在节点的IP值,然后守护进程根据得到的IP来判断消息队列在本地还是在异地。若在本地则调用msgsnd()向本地消息队列中写入数据并将结果返回给用户进程;若在异地则根据IP向相应的节点发送包括key、msgflg和要写入信息的“写数据”请求,在收到应答信息后将结果返回给用户进程。

三、消息队列在分布式系统数据中的应用

分布式数据库系统中的每个网络节点上,在数据一致性功能模块下,都由5个功能模块构成:发送更新消息,接收更新消息,消息发送管理,消息接收管理和更新消息处理。

1.发送更新消息

发送更新消息的功能是向整个网络所有的服务器发送更新消息数据,由此使其他所有的服务器根据该消息的内容实现与本服务器间的数据一致。发送更新消息通过接收本地服务器所执行的SQL语句中对服务器中数据做出了修改的语句,接收数据修改信息,并将接收的数据修改信息封装成消息的格式,存储在更新发送表中,在收到发送命令后,发送给其他服务器,实现各服务器与本服务器的数据同步。

当发送更新消息收到数据库执行SQL发来的数据修改信息时,先将数据修改信息封装成消息中的数据信息格式。消息发送命令被触发后,在消息发送管理器的控制下,将消息以组播的形式发送给其他所有在线服务的业务服务器,实现正常情况下的多服务器间的数据同步。

2.接收更新消息

接收更新消息的功能是实现接收所有数据同步信息(业务层发来的业务数据、其他服务器发来的数据同步消息),并根据收到消息的类型对数据进行相应处理。当收到的数据是业务服务器发送来的业务数据时,对数据加以解析后将解析的数据存储到相应的缓存区域。当接收到的数据是其他服务器发来的数据同步信息时,对同步数据加以解析,解析消息中的数据信息部分,获取一次业务的所有数据操作并对本服务器数据库中的数据执行相应的SQL语句,进行相应的操作,从而实现本服务器与消息发送端服务器之间的数据同步。从而实现了在正常运转情况下的数据同步操作。

3.消息发送管理

每个服务器在执行对数据库中的数据进行修改操作的SQL语句后,消息发送管理模块对更新发布表执行插入操作,添加一条与该条SQL语句相应的消息。服务器触发进行数据一致过程后,要求与其他服务器进行数据一致,服务器发送数据一致命令给消息发送管理模块,消息发送管理模块被触发后将消息信息发送表的内容取出封装成用于传送消息,并根据当前服务器的拓扑信息将消息发送给其他服务器。当消息发送管理器模块接收到消息收管理模块发来的重新发送请求时,将消息信息发送表中的数据重新发送给数据同步出错的服务器。

4.更新消息处理

服务器的接收更新消息模块收到新消息后,消息接收管理模块要求接收更新消息模块将该消息交给更新消息处理模块。更新消息处理模块接收到消息后,按照消息编码过程的反过程解析消息。将消息中的数据信息解析为相应的SQL语句,并根据这一SQL语句对服务器的数据进行更新。如果更新成功则向发送方返回数据更新成功并将本次更新的数据写入数据交换表,否则返回发送失败。

参考文献:

[1]黄姝娟,杜承烈,尤涛.中间件技术实时性能的比较[J].计算机工程,2009,35(11):32-37.

[2]徐高潮,胡亮,鞠九宾.分布式计算系统[M].北京:高等教育出版社,2004:23-36.

[3]勒敏,刘建辉.分布式数据库系统数据一致性维护方法[J].科技广场,2008 (3):31-33.

猜你喜欢
数据
论数据权的划分标准和分类
以未来决定现在
医院统计报表数据在医院管理服务中的常见问题研究
竞技分析及其发展趋势研究
高校信息化管理的应用探究
公路工程试验检测存在的问题及措施
一种借助数据处理构建的智能食堂管理系统
数据化艺术的生成探究
浅谈计量自动化系统实现预购电管理应用