栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > 学术 > 人文期刊 > 科技视界

一种分布式架构下的实时消息同步机制的设计与实现

一种分布式架构下的实时消息同步机制的设计与实现

陈鑫

【摘 要】由于笔者工作中经常面临如何快速、准确的实现多终端之间基于Client/Server架构下实施消息同步的问题。于是,通过引用数据库中的Service Broker技术和WCF消息框架,开发并实现了一套分布式架构下的实时消息同步中间件。本文以此为契机,介绍了这种分布式架构下的实时消息同步机制的设计与实现方法。本文先对这种消息同步机制的架构进行了介绍,给出了其实现框架,进而介绍了如何在此框架下有效的构建消息传递的机制,并对其性能進行了分析。本套解决方案已经成功应用在空中交通管制专业中,实现了面向空中交通管制的消息实施传递,并对其他行业有轻量级实时消息传递需求的应用有一定参考作用。

【关键词】消息实时同步;空中交通管制

中图分类号: TP277 文献标识码: A 文章编号: 2095-2457(2018)08-0234-002

Design and implementation of a real-time message synchronization mechanism under a distributed architecture

CHEN Xin

(China Civil Aviation Air Traffic Management Bureau, Guangzhou, Guangdong 510000, China)

【Abstract】Since my work is often faced with how to quickly and accurately implement the problem of implementing message synchronization between multiple terminals based on Client/Server architecture. Therefore, a set of real-time message synchronization middleware under a distributed architecture is developed and implemented by referring to the Service Broker technology and WCF message framework in the database. This article takes this opportunity to introduce the design and implementation of a real-time message synchronization mechanism under this distributed architecture.

This paper first introduces the architecture of this message synchronization mechanism, gives its implementation framework, and then introduces how to build a message delivery mechanism effectively under this framework and analyzes its performance. This set of solutions has been successfully applied in the air traffic control professional, realized the implementation of message transmission for air traffic control, and has certain reference effect on the application of lightweight real-time messaging needs in other industries.

【Key words】Real-time synchronization of messages; Air traffic control

如何让数据库中不断变化的航班数据无延时的送给管制员一直是困扰开发人员的一个课题。在以往的系统中,大部分采用的技术是定时的查询数据库,获得数据库中变化的数据或者获取整个数据库中最新的快照,然后通过处理之后再前台展现出来。这样的方法就存在数据更新不及时,并发访问时突发数据量大,容易发生数据库死锁等问题。不仅在用户感受上,也在系统稳定性上处于不利状态。如果在管制员对航班进行管制的时候,能获得实时的航班数据将大大提高管制的效率和安全性,不仅如此,这样的方式也避免了高频率的整表轮询,隔离了数据库和前台应用程序,从技术上大大提高了系统的稳定性。随着微软.NET 3.x开发平台和SQL SERVER 2005的推出,将数据实时传送给管制员从技术上走向了可能。中南空管局通信网络中心在近期的塔台自动化项目中,就采用了这样的刷新方案。

整个数据实时刷新解决方案的架构包括了三组程序:数据库激发层(Messages Activate Layer),消息处理服务器(Messages Process Server),客户端消息处理核心(Messages Process Client Core)。其中,数据库激发层主要用来捕获数据库发生的变化,并且把变化信息存储进一个可靠的安全队列中。消息处理服务器以将监听到的数据库发生的变化进行解析,重构,并且发送给客户端。客户端消息处理核心用来保证和服务端的连接,同时将接收到的数据缓存和传送给前台程序。

SQL SERVER 2005在SQL SERVER 2005中引入了Service Broker的概念。Service Broker 为 SQL Server 提供队列和可靠的消息传递。利用触发器和Service Broker的消息队列我们可以构建一个消息激发层(Messages Activate Layer),利用这个消息激发层我们可以将数据库中某个表的变化组织成XML格式的消息,并放入Service Broker提供的消息队列中。其结构简图如上:

在Service Broker提供的消息队列中,提供给用户一个安全的消息队列,所谓安全就是当数据库访问程序没有显式取走数据之前或者消息在失效之前,消息将会安全的被保存在消息队列中。

值得一提的是,在触发器封装消息时必须必须和消息拆箱拥有相同的类型,从ServiceBroker设计书中看出在Service Broker中必须按照以下要求预先定义好进入消息队列的数据类型和输出队列的消息类型,在消息入队和出队时都必须遵循以下定义:

CREATE MESSAGE TYPE message_type_name

[ AUTHORIZATION owner_name ]

[ VALIDATION = { NONE

| EMPTY

| WELL_FORMED_XML

|VALID_XML WITH SCHEMA COLLECTION

schema_collection_name

} ]

[ ; ]

消息类型的定义就是要让消息收发的双方都遵循同样一种数据类型对消息进行处理,以避免类型混乱导致无法正确输出消息的情况。

在将数据库变化存入队列后就可以通过一个分布式的程序集来对消息进行解析和分发。这个消息传递模块对于Service Broker来说是一个客户端,他用阻塞监听的方式等待消息队列中的消息,一旦消息队列中存在消息,则监听线程将会获得这条消息。其核心是利用了T-SQL中的RECEIVE语句。

[ WAITFOR ( ]

RECEIVE [ TOP ( n ) ]

[ ,...n ]

FROM

[ INTO table_variable ]

[ WHERe { conversation_handle = conversation_handle

| conversation_group_id = conversation_group_id } ]

[ ) ] [ , TIMEOUT timeout ]

[ ; ]

当消息处理服务器收到消息后将会对消息正文中类型化的XML的数据进行解包和分拆,然后发送已经在消息处理服务器上注册的客户端。

客户端程序通过消息处理服务器的负载均衡控制模块获得连接端口之后就可以通过WCF的订阅发布模式连接到消息处理服务器提供的tcp.net契约上,这个契约将会在消息处理服务器和消息处理客户端之间建立一个安全的通信通道,并且通过这个通道,客户端可以直接使用一个在消息处理服务器上定义的事件,通过这个事件,消息将会以.NET中的高级类型(例如DataTable)将数据发送给客户端。

通过这样的一个方案,数据库产生的变化就可以避免以轮询的方式传递到客户端,而是通过阻塞监听——委托事件的方式实施传递给前台,消息流转的时间资源开销将被大大降低。从压力测试的结果来看,一个消息处理服务器对应一个消息处理客户端的情况下,每分钟消息传递的最大值是2400条。在多个客户端的情况下,处理效率会略减。

【参考文献】

[1]虞益诚.SQL Server 2005数据库应用技术(第二版). 中国铁道出版社.

[2]趙丽辉,岳淑玲.JOY MUNDY.SQL Server 2005数据库技术与应用.机械工业出版社.

[3]Klaus Aschenbrenner. Pro SQL Server 2005 Service Broker. APress.

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/xueshu/275454.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号