移动网络适用的数据增量同步策略研究与实现
2015-07-25刘捷庞冬梅
刘捷,庞冬梅
0 引言
反假货币宣传系统是一套用于宣传货币防伪知识、提高公众反假货币水平和能力的金融设备,通过人机互动,以图文和动画视频相结合的表现形式进行信息的展示。
传统的反假货币宣传系统只包括工作站,工作站上大多采用Flash等技术进行软件开发,向公众宣传反假货币法律法规和货币防伪知识。软件中的页面与数据紧耦合,且所有信息均在出厂时初始化到工作站中,一般放置于各银行的营业厅内供公众自由使用。工作人员只能在设备现场手动更新,是一种离线式触摸终端。新一代的反假货币宣传系统结合了数据库和移动网络,分为工作站和服务器两个部分。工作站和服务器均利用数据库有序管理各种数据,实现了数据与展示页面的分离,为数据的灵活修改提供了可能;同时利用移动网络进行服务器和工作站之间数据的实时同步,使服务器上的最新数据能够尽快地同步到设备上,既能及时展示最新信息,避免过时的内容误导公众,又能减少工作人员现场作业的成本,是一种在线式触摸终端。
本文分析了新一代的反假货币宣传系统在实际场景中采用移动网络进行数据同步时的特点,针对性地提出了一种基于版本号进行管理的增量数据同步策略,并在dotNET平台上利用WCF技术进行了实现。经过测试,该策略达到了最初的设计目标,并已在实际生产中使用。
1 数据同步中需要解决的问题
新一代的反假货币宣传系统中的工作站放置于各银行的营业网点内,服务器放置于数据中心。各银行的有线网均为银行内部网络,因此,工作站只能通过配备无线网卡,经由电信运营商提供的VPN网络,与服务器进行连接。系统结构图如图1所示:
图1 系统结构图
图1系统中的数据包括文本、图片、音频和视频,其中文本存储在数据库,图片、音频和视频存储等资源文件在文件系统,在进行数据同步时,需要将关联的资源整体传输,否则会导致所传输的信息不完整而无法展示。
采用移动网络进行通信给我们的数据同步策略带来了两个挑战:
(1)在移动网络中,信号强度容易受到干扰,导致连接速度的不稳定,在一些信号较差的位置,甚至会出现大量超时丢包,出现网络时断时续的情况。基于此,我们的策略中应提供断点续传的功能,最大限度保证传输的完整性。
(2)电信运营商大多采用按流量计费的方式,出于日常维护费用方面的考虑,我们的策略中应尽量减少数据包的大小。数据库记录可以转化为SQL语句,经过压缩之后减少体积;资源文件本身难以进一步压缩,而且并不一定需要每次都进行传输。基于此,管理员应能够自由指定是否更新资源文件,从而避免相同资源文件的重复传输。
在实际应用中,工作站能够主动发起数据更新从而实现定时同步,服务器也能够主动发起对某些指定工作站的数据更新从而实现最新数据的及时推送。为此,我们在工作站和服务器两部分设计了不同的服务供对方调用。
2 SOA及WCF介绍
面向服务的体系结构(SOA,Service-Oriented Architec-ture)是一个组件模型,它将应用程序的不同功能单元(也称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以使用一种统一和通用的方式进行交互
Windows 通信开发平台(WCF, Windows Communi-cation Foundation)是微软为构建面向服务的应用提供的分布式通信编程框架,是.NET Framework 3.5的重要组成部分。使用该框架,开发人员可以构建跨平台、安全、可靠且支持事务处理的企业级互联应用解决方案。WCF是微软分布式应用程序开发的集大成者,它整合了Net平台下所有的和分布式系统有关的技术,例如.Net Remoting、ASMX、WSE和MSMQ。
以通信范围而论,WCF可以跨进程、跨机器、跨子网、企业网乃至于 Internet;以宿主程序而论,WCF可以以ASP.NET、EXE、WPF、Windows Forms、NT Service、COM+作为宿主。WCF可以支持的协议包括TCP、HTTP、跨进程以及自定义,安全模式则包括SAML、Kerberos、X509、用户/密码、自定义等多种标准与模式。
WCF支持大量的Web Service标准,这些标准包括XML、XSD、SOAP、Xpath、WSDL等标准和规范,所以对于现有的标准,开发人员能够方便地进行移植。同时WCF可以使用Attribute属性进行WCF应用程序配置,提高了WCF应用的灵活性。WCF遵循客户端/服务器模式(C/S)在应用程序之间进行通信,客户端程序能够通过服务器提供的EndPoint端直接访问服务。在WCF框架下,开发基于SOA的分布式系统变得容易了,微软将所有与此相关的技术要素都包含在内,掌握了WCF,就相当于掌握了叩开SOA大门的钥匙。
3 数据增量同步策略的设计与实现
3.1 版本定义
进行增量更新的关键在于,如何标注服务器数据和工作站数据的当前状态,从而进一步得知每次同步时所需传输的数据。在此,我们引入一个版本的概念,所谓版本是指某一时刻服务器所存储的已确定的所有数据的集合。每一个增量更新包代表了以上一版本数据为基础,经过一系列修改之后形成下一版本数据,在这之间的数据变化,从而每个版本数据都可以看作是以前所有版本数据的叠加和最新修改之和,即版本n+1=版本k+新数据。
工作站所维护的版本号和服务器所维护的版本号分别代表了其所存储数据的当前状态,工作站在进行数据更新时,只需逐个下载增量更新包进行更新,就可以确保最终与服务器的数据达到一致。
数据库作为系统存储数据的核心,保存了所有的文本以及对资源文件的引用,因此我们为数据库中的每个表增加3个字段——“数据版本号”、“操作方式”和“同步更新标志”,以此记录文本对应的版本信息,并间接记录资源文件对应的版本信息。通过“数据版本号”,可以很容易地确定每个版本所包含的记录(数据版本号小于等于指定版本号的记录即为该版本中包含的记录);通过“操作方式”,可以确定在更新时所对应的SQL语句;“同步更新标志”则表示在数据的变化过程中,资源文件是否有变化,是否需要传输至工作站。因为工作站在展示货币防伪信息时,先读取数据库记录,再由记录上的内容确定资源文件,所以我们只需要标注记录所在版本,即可间接标注资源文件的版本。
3.2 管理员变动数据
管理员对数据的变动可分为3种:新增、修改、删除。系统通过对记录的数据版本号、操作方式、同步更新标志进行不同标注,作为后续处理的基础,如表1所示:
表1 对数据的标注
(1)管理员新增数据时,数据库中将新增相应的记录,文件系统中将新增相应的资源文件。此时数据库记录中的数据版本号为空,操作方式为A,同步更新标志为Y。
(2)管理员修改数据时,数据库将保存修改后的数据,资源文件可能改变亦可能不改变(取决于管理员是否引入新的资源)。此时数据库记录中的数据版本号为空,操作方式为M,同步更新标志为Y或N。
(3)管理员删除数据时,如果记录为纳入版本,即数据版本号为空时,从数据库直接删除此记录即可,无需与工作站同步;如果记录已纳入版本,即数据版本号不为空时,数据库并不立即清除数据和资源,而是将数据库记录中的数据版本号置空,操作方式置D,同步更新标志不变。
3.3 生成新的版本
在管理员完成一系列操作之后,即可生成新的版本。在生成新版本时,服务器遍历每一张数据表,取出其中数据版本号为空的记录,然后根据每条记录中操作方式的不同,进行不同的操作。之后,系统将把保存了所有 SQL语句的文本文件、待打包列表中的指定的资源文件、待删除列表统一打包为一个压缩文件,并保存到系统的增量更新目录下。
生成新版本的算法如下:
①查询已有版本,生成新的12位版本号。
②对数据库中每一张表,做以下③至④操作:
对表中每一行数据版本号为空的记录,根据操作方式的不同,做以下④中操作:
④-①操作方式为 A,则生成完整的插入语句并保存到SQL文件,将资源文件链接放入待打包列表。
④-②操作方式为 M,则生成完整的修改语句并保存到SQL文件,若同步更新标志为Y,则将资源文件链接放入待打包列表。
④-③操作方式为D,则生成删除语句并保存到SQL文件,将资源文件链接放入待删除列表,同时删除数据库中记录以及相应的资源文件。
⑤将SQL文件、待打包列表中的指定的资源文件、待删除列表打包为压缩文件,形成增量更新包,并标注版本号。
3.4 增量更新流程
在新的版本生成之后,即可对工作站进行更新。工作站主动更新的过程可视作工作站从服务器下载,服务器主动推送的过程可以视作服务器发送更新信号、工作站主动更新两部分,从而将整个更新流程的核心转化为统一的工作站主动下载,简化了系统所需的服务。
另外,由于系统采用电信运营商基于移动网络所提供的VPN网络,工作站每次上网前需要进行拨号以建立与移动网络的连接,而每次重新拨号后所得到的IP都不一样,服务器主动推送时,又需要知道指定工作站的IP,所以我们额外设计了一系列服务,实现在服务器上维护在线工作站 IP信息的功能。工作站和服务器所提供的服务如表2、表3所示:
表2 工作站所提供的服务
表3 服务器所提供的服务
工作站主动更新数据时,先通过CheckVersion服务,得到服务器上的版本信息,然后将两端的版本号进行比对,从而判断出是否有新的数据需要同步。在确定数据需要同步后,工作站通过Download服务,逐个下载增量更新包,并在本地解压、更新,同时在日志中记录更新过程。在完成所有更新操作之后,工作站通过UpdateVersion回送本地的版本信息,以便在服务器确认更新操作的执行情况。
服务器主动推送数据时,则由服务器通过Notify服务,通知到工作站,然后由工作站完成以上一系列操作,直至更新成功或失败。
增量更新的序列图如图2所示:
图2 增量更新序列图
4 总结
本文分析了实际场景中采用移动网络进行数据同步时的特点,针对性地提出了一种基于版本号进行管理的增量数据同步策略,并在dotNET平台上利用WCF技术进行了实现。经过测试,该策略达到了最初的设计目标,并已在反假币宣传系统的实际生产中使用。策略的设计并不针对特定的业务,因此本文所述的策略可应用于其它基于移动网络进行增量数据同步的业务系统之中。
[1] 常抓不懈 持之以恒 努力开创反假货币工作新局面——国务院反假货币工作联系会议第五次会议在北京召开[J].金融会计,2013(01):84.
[2] 毛新生.SOA 原理·方法·实践[M].北京: 电子工业出版社,2007:3-4.
[3] Juval Lowy(著).张逸,徐宁(译). WCF 编程(第 2 版)[M].北京:机械工业出版社,2009.
[4] Roger Jennings(著). 孟兆炜(译).ADO.NET 3.5高级编程——应用LINQ & Entity Framework[M]. 北京:清华大学出版社,2010.
[5] 刘黎志,吴云韬.应用WCF分布式框架实现移动数据同步[J].计算机应用, 2011(12):3281-3284.
[6] 王文琴, 费贤举, 鞠时光. 基于数据复制技术实现移动数据同步[J]. 计算机应用, 2006, 26(7) : 1676-1678.
[7] 杨志和,胡虚怀.移动环境下的数据同步模型研究[J].计算机工程与应用,2007, 43(13):191-193.