前言:想要寫出一篇引人入勝的文章?我們特意為您整理了移動(dòng)網(wǎng)絡(luò)適用數(shù)據(jù)增量同步實(shí)踐范文,希望能給你帶來靈感和參考,敬請(qǐng)閱讀。
反假貨幣宣傳系統(tǒng)是一套用于宣傳貨幣防偽知識(shí)、提高公眾反假貨幣水平和能力的金融設(shè)備,通過人機(jī)互動(dòng),以圖文和動(dòng)畫視頻相結(jié)合的表現(xiàn)形式進(jìn)行信息的展示。傳統(tǒng)的反假貨幣宣傳系統(tǒng)只包括工作站,工作站上大多采用Flash等技術(shù)進(jìn)行軟件開發(fā),向公眾宣傳反假貨幣法律法規(guī)和貨幣防偽知識(shí)。軟件中的頁(yè)面與數(shù)據(jù)緊耦合,且所有信息均在出廠時(shí)初始化到工作站中,一般放置于各銀行的營(yíng)業(yè)廳內(nèi)供公眾自由使用。工作人員只能在設(shè)備現(xiàn)場(chǎng)手動(dòng)更新,是一種離線式觸摸終端。新一代的反假貨幣宣傳系統(tǒng)結(jié)合了數(shù)據(jù)庫(kù)和移動(dòng)網(wǎng)絡(luò),分為工作站和服務(wù)器兩個(gè)部分。工作站和服務(wù)器均利用數(shù)據(jù)庫(kù)有序管理各種數(shù)據(jù),實(shí)現(xiàn)了數(shù)據(jù)與展示頁(yè)面的分離,為數(shù)據(jù)的靈活修改提供了可能;同時(shí)利用移動(dòng)網(wǎng)絡(luò)進(jìn)行服務(wù)器和工作站之間數(shù)據(jù)的實(shí)時(shí)同步,使服務(wù)器上的最新數(shù)據(jù)能夠盡快地同步到設(shè)備上,既能及時(shí)展示最新信息,避免過時(shí)的內(nèi)容誤導(dǎo)公眾,又能減少工作人員現(xiàn)場(chǎng)作業(yè)的成本,是一種在線式觸摸終端。本文分析了新一代的反假貨幣宣傳系統(tǒng)在實(shí)際場(chǎng)景中采用移動(dòng)網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)同步時(shí)的特點(diǎn),針對(duì)性地提出了一種基于版本號(hào)進(jìn)行管理的增量數(shù)據(jù)同步策略,并在dotNET平臺(tái)上利用WCF技術(shù)進(jìn)行了實(shí)現(xiàn)。經(jīng)過測(cè)試,該策略達(dá)到了最初的設(shè)計(jì)目標(biāo),并已在實(shí)際生產(chǎn)中使用。
1數(shù)據(jù)同步中需要解決的問題
新一代的反假貨幣宣傳系統(tǒng)中的工作站放置于各銀行的營(yíng)業(yè)網(wǎng)點(diǎn)內(nèi),服務(wù)器放置于數(shù)據(jù)中心。各銀行的有線網(wǎng)均為銀行內(nèi)部網(wǎng)絡(luò),因此,工作站只能通過配備無線網(wǎng)卡,經(jīng)由電信運(yùn)營(yíng)商提供的VPN網(wǎng)絡(luò),與服務(wù)器進(jìn)行連接。采用移動(dòng)網(wǎng)絡(luò)進(jìn)行通信給我們的數(shù)據(jù)同步策略帶來了兩個(gè)挑戰(zhàn):(1)在移動(dòng)網(wǎng)絡(luò)中,信號(hào)強(qiáng)度容易受到干擾,導(dǎo)致連接速度的不穩(wěn)定,在一些信號(hào)較差的位置,甚至?xí)霈F(xiàn)大量超時(shí)丟包,出現(xiàn)網(wǎng)絡(luò)時(shí)斷時(shí)續(xù)的情況?;诖?,我們的策略中應(yīng)提供斷點(diǎn)續(xù)傳的功能,最大限度保證傳輸?shù)耐暾?。?)電信運(yùn)營(yíng)商大多采用按流量計(jì)費(fèi)的方式,出于日常維護(hù)費(fèi)用方面的考慮,我們的策略中應(yīng)盡量減少數(shù)據(jù)包的大小。數(shù)據(jù)庫(kù)記錄可以轉(zhuǎn)化為SQL語(yǔ)句,經(jīng)過壓縮之后減少體積;資源文件本身難以進(jìn)一步壓縮,而且并不一定需要每次都進(jìn)行傳輸?;诖耍芾韱T應(yīng)能夠自由指定是否更新資源文件,從而避免相同資源文件的重復(fù)傳輸。在實(shí)際應(yīng)用中,工作站能夠主動(dòng)發(fā)起數(shù)據(jù)更新從而實(shí)現(xiàn)定時(shí)同步,服務(wù)器也能夠主動(dòng)發(fā)起對(duì)某些指定工作站的數(shù)據(jù)更新從而實(shí)現(xiàn)最新數(shù)據(jù)的及時(shí)推送。為此,我們?cè)诠ぷ髡竞头?wù)器兩部分設(shè)計(jì)了不同的服務(wù)供對(duì)方調(diào)用。
2SOA及WCF介紹
面向服務(wù)的體系結(jié)構(gòu)(SOA,Service-OrientedArchitec-ture)是一個(gè)組件模型,它將應(yīng)用程序的不同功能單元(也稱為服務(wù))通過這些服務(wù)之間定義良好的接口和契約聯(lián)系起來。接口是采用中立的方式進(jìn)行定義的,它應(yīng)該獨(dú)立于實(shí)現(xiàn)服務(wù)的硬件平臺(tái)、操作系統(tǒng)和編程語(yǔ)言。這使得構(gòu)建在各種各樣的系統(tǒng)中的服務(wù)可以使用一種統(tǒng)一和通用的方式進(jìn)行交互Windows通信開發(fā)平臺(tái)(WCF,WindowsCommuni-cationFoundation)是微軟為構(gòu)建面向服務(wù)的應(yīng)用提供的分布式通信編程框架,是.NETFramework3.5的重要組成部分。使用該框架,開發(fā)人員可以構(gòu)建跨平臺(tái)、安全、可靠且支持事務(wù)處理的企業(yè)級(jí)互聯(lián)應(yīng)用解決方案。WCF是微軟分布式應(yīng)用程序開發(fā)的集大成者,它整合了Net平臺(tái)下所有的和分布式系統(tǒng)有關(guān)的技術(shù),例如.NetRemoting、ASMX、WSE和MSMQ。以通信范圍而論,WCF可以跨進(jìn)程、跨機(jī)器、跨子網(wǎng)、企業(yè)網(wǎng)乃至于Internet;以宿主程序而論,WCF可以以ASP.NET、EXE、WPF、WindowsForms、NTService、COM+作為宿主。WCF可以支持的協(xié)議包括TCP、HTTP、跨進(jìn)程以及自定義,安全模式則包括SAML、Kerberos、X509、用戶/密碼、自定義等多種標(biāo)準(zhǔn)與模式。WCF支持大量的WebService標(biāo)準(zhǔn),這些標(biāo)準(zhǔn)包括XML、XSD、SOAP、Xpath、WSDL等標(biāo)準(zhǔn)和規(guī)范,所以對(duì)于現(xiàn)有的標(biāo)準(zhǔn),開發(fā)人員能夠方便地進(jìn)行移植。同時(shí)WCF可以使用Attribute屬性進(jìn)行WCF應(yīng)用程序配置,提高了WCF應(yīng)用的靈活性。WCF遵循客戶端/服務(wù)器模式(C/S)在應(yīng)用程序之間進(jìn)行通信,客戶端程序能夠通過服務(wù)器提供的EndPoint端直接訪問服務(wù)。在WCF框架下,開發(fā)基于SOA的分布式系統(tǒng)變得容易了,微軟將所有與此相關(guān)的技術(shù)要素都包含在內(nèi),掌握了WCF,就相當(dāng)于掌握了叩開SOA大門的鑰匙。
3數(shù)據(jù)增量同步策略的設(shè)計(jì)與實(shí)現(xiàn)
3.1版本定義
進(jìn)行增量更新的關(guān)鍵在于,如何標(biāo)注服務(wù)器數(shù)據(jù)和工作站數(shù)據(jù)的當(dāng)前狀態(tài),從而進(jìn)一步得知每次同步時(shí)所需傳輸?shù)臄?shù)據(jù)。在此,我們引入一個(gè)版本的概念,所謂版本是指某一時(shí)刻服務(wù)器所存儲(chǔ)的已確定的所有數(shù)據(jù)的集合。每一個(gè)增量更新包代表了以上一版本數(shù)據(jù)為基礎(chǔ),經(jīng)過一系列修改之后形成下一版本數(shù)據(jù),在這之間的數(shù)據(jù)變化,從而每個(gè)版本數(shù)據(jù)都可以看作是以前所有版本數(shù)據(jù)的疊加和最新修改之和,即版本版本新數(shù)據(jù)。工作站所維護(hù)的版本號(hào)和服務(wù)器所維護(hù)的版本號(hào)分別代表了其所存儲(chǔ)數(shù)據(jù)的當(dāng)前狀態(tài),工作站在進(jìn)行數(shù)據(jù)更新時(shí),只需逐個(gè)下載增量更新包進(jìn)行更新,就可以確保最終與服務(wù)器的數(shù)據(jù)達(dá)到一致。數(shù)據(jù)庫(kù)作為系統(tǒng)存儲(chǔ)數(shù)據(jù)的核心,保存了所有的文本以及對(duì)資源文件的引用,因此我們?yōu)閿?shù)據(jù)庫(kù)中的每個(gè)表增加3個(gè)字段——“數(shù)據(jù)版本號(hào)”、“操作方式”和“同步更新標(biāo)志”,以此記錄文本對(duì)應(yīng)的版本信息,并間接記錄資源文件對(duì)應(yīng)的版本信息。通過“數(shù)據(jù)版本號(hào)”,可以很容易地確定每個(gè)版本所包含的記錄(數(shù)據(jù)版本號(hào)小于等于指定版本號(hào)的記錄即為該版本中包含的記錄);通過“操作方式”,可以確定在更新時(shí)所對(duì)應(yīng)的SQL語(yǔ)句;“同步更新標(biāo)志”則表示在數(shù)據(jù)的變化過程中,資源文件是否有變化,是否需要傳輸至工作站。因?yàn)楣ぷ髡驹谡故矩泿欧纻涡畔r(shí),先讀取數(shù)據(jù)庫(kù)記錄,再由記錄上的內(nèi)容確定資源文件,所以我們只需要標(biāo)注記錄所在版本,即可間接標(biāo)注資源文件的版本。
3.2管理員變動(dòng)數(shù)據(jù)
管理員對(duì)數(shù)據(jù)的變動(dòng)可分為3種:新增、修改、刪除。系統(tǒng)通過對(duì)記錄的數(shù)據(jù)版本號(hào)、操作方式、同步更新標(biāo)志進(jìn)行不同標(biāo)注,作為后續(xù)處理的基礎(chǔ)。(1)管理員新增數(shù)據(jù)時(shí),數(shù)據(jù)庫(kù)中將新增相應(yīng)的記錄,文件系統(tǒng)中將新增相應(yīng)的資源文件。此時(shí)數(shù)據(jù)庫(kù)記錄中的數(shù)據(jù)版本號(hào)為空,操作方式為A,同步更新標(biāo)志為Y。(2)管理員修改數(shù)據(jù)時(shí),數(shù)據(jù)庫(kù)將保存修改后的數(shù)據(jù),資源文件可能改變亦可能不改變(取決于管理員是否引入新的資源)。此時(shí)數(shù)據(jù)庫(kù)記錄中的數(shù)據(jù)版本號(hào)為空,操作方式為M,同步更新標(biāo)志為Y或N。(3)管理員刪除數(shù)據(jù)時(shí),如果記錄為納入版本,即數(shù)據(jù)版本號(hào)為空時(shí),從數(shù)據(jù)庫(kù)直接刪除此記錄即可,無需與工作站同步;如果記錄已納入版本,即數(shù)據(jù)版本號(hào)不為空時(shí),數(shù)據(jù)庫(kù)并不立即清除數(shù)據(jù)和資源,而是將數(shù)據(jù)庫(kù)記錄中的數(shù)據(jù)版本號(hào)置空,操作方式置D,同步更新標(biāo)志不變。
3.3生成新的版本
在管理員完成一系列操作之后,即可生成新的版本。在生成新版本時(shí),服務(wù)器遍歷每一張數(shù)據(jù)表,取出其中數(shù)據(jù)版本號(hào)為空的記錄,然后根據(jù)每條記錄中操作方式的不同,進(jìn)行不同的操作。之后,系統(tǒng)將把保存了所有SQL語(yǔ)句的文本文件、待打包列表中的指定的資源文件、待刪除列表統(tǒng)一打包為一個(gè)壓縮文件,并保存到系統(tǒng)的增量更新目錄下。生成新版本的算法如下:○1查詢已有版本,生成新的12位版本號(hào)?!?對(duì)數(shù)據(jù)庫(kù)中每一張表,做以下○3至○4操作:對(duì)表中每一行數(shù)據(jù)版本號(hào)為空的記錄,根據(jù)操作方式的不同,做以下○4中操作:○4-○1操作方式為A,則生成完整的插入語(yǔ)句并保存到SQL文件,將資源文件鏈接放入待打包列表?!?-○2操作方式為M,則生成完整的修改語(yǔ)句并保存到SQL文件,若同步更新標(biāo)志為Y,則將資源文件鏈接放入待打包列表?!?-○3操作方式為D,則生成刪除語(yǔ)句并保存到SQL文件,將資源文件鏈接放入待刪除列表,同時(shí)刪除數(shù)據(jù)庫(kù)中記錄以及相應(yīng)的資源文件?!?將SQL文件、待打包列表中的指定的資源文件、待刪除列表打包為壓縮文件,形成增量更新包,并標(biāo)注版本號(hào)。
3.4增量更新流程
在新的版本生成之后,即可對(duì)工作站進(jìn)行更新。工作站主動(dòng)更新的過程可視作工作站從服務(wù)器下載,服務(wù)器主動(dòng)推送的過程可以視作服務(wù)器發(fā)送更新信號(hào)、工作站主動(dòng)更新兩部分,從而將整個(gè)更新流程的核心轉(zhuǎn)化為統(tǒng)一的工作站主動(dòng)下載,簡(jiǎn)化了系統(tǒng)所需的服務(wù)。另外,由于系統(tǒng)采用電信運(yùn)營(yíng)商基于移動(dòng)網(wǎng)絡(luò)所提供的VPN網(wǎng)絡(luò),工作站每次上網(wǎng)前需要進(jìn)行撥號(hào)以建立與移動(dòng)網(wǎng)絡(luò)的連接,而每次重新?lián)芴?hào)后所得到的IP都不一樣,服務(wù)器主動(dòng)推送時(shí),又需要知道指定工作站的IP,所以我們額外設(shè)計(jì)了一系列服務(wù),實(shí)現(xiàn)在服務(wù)器上維護(hù)在線工作站IP信息的功能。工作站主動(dòng)更新數(shù)據(jù)時(shí),先通過CheckVersion服務(wù),得到服務(wù)器上的版本信息,然后將兩端的版本號(hào)進(jìn)行比對(duì),從而判斷出是否有新的數(shù)據(jù)需要同步。在確定數(shù)據(jù)需要同步后,工作站通過Download服務(wù),逐個(gè)下載增量更新包,并在本地解壓、更新,同時(shí)在日志中記錄更新過程。在完成所有更新操作之后,工作站通過UpdateVersion回送本地的版本信息,以便在服務(wù)器確認(rèn)更新操作的執(zhí)行情況。服務(wù)器主動(dòng)推送數(shù)據(jù)時(shí),則由服務(wù)器通過Notify服務(wù),通知到工作站,然后由工作站完成以上一系列操作,直至更新成功或失敗。
4總結(jié)
本文分析了實(shí)際場(chǎng)景中采用移動(dòng)網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)同步時(shí)的特點(diǎn),針對(duì)性地提出了一種基于版本號(hào)進(jìn)行管理的增量數(shù)據(jù)同步策略,并在dotNET平臺(tái)上利用WCF技術(shù)進(jìn)行了實(shí)現(xiàn)。經(jīng)過測(cè)試,該策略達(dá)到了最初的設(shè)計(jì)目標(biāo),并已在反假幣宣傳系統(tǒng)的實(shí)際生產(chǎn)中使用。策略的設(shè)計(jì)并不針對(duì)特定的業(yè)務(wù),因此本文所述的策略可應(yīng)用于其它基于移動(dòng)網(wǎng)絡(luò)進(jìn)行增量數(shù)據(jù)同步的業(yè)務(wù)系統(tǒng)之中。
作者:劉捷 龐冬梅 單位:華南理工大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院