摘? 要:分布式架構(gòu)在互聯(lián)網(wǎng)企業(yè)中已得到廣泛應(yīng)用,各平臺(tái)間的數(shù)據(jù)如何同步是應(yīng)用中需解決的關(guān)鍵問(wèn)題,結(jié)合“面向?qū)ο缶幊蹋ǜ呒?jí))”課程內(nèi)容,對(duì)通用數(shù)據(jù)同步軟件進(jìn)行了分析與設(shè)計(jì)。該設(shè)計(jì)主要包含待同步記錄掃描、數(shù)據(jù)通知、數(shù)據(jù)接收、狀態(tài)查詢(xún)以及相應(yīng)的數(shù)據(jù)庫(kù)操作、參數(shù)配置、日志記錄等功能,可實(shí)現(xiàn)數(shù)據(jù)的安全高效同步,以便匯總統(tǒng)計(jì)分析,支撐業(yè)務(wù)發(fā)展,具有較高實(shí)用價(jià)值。
關(guān)鍵詞:分布式平臺(tái);數(shù)據(jù)同步;安全高效
中圖分類(lèi)號(hào):TP311.5? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2096-4706(2021)01-0018-04
Analysis and Design of Data Synchronization Software on Distributed Platform
XIE Jian
(Hunan College of Information,Changsha? 410200,China)
Abstract:Distributed architecture has been widely used in internet enterprises. How to synchronize data among various platforms is the key issue that needs to be solved in application. Combined with the course content of the “Object-Oriented Programming(Advanced Level)”,general data synchronization software is analyzed and designed. The design mainly includes the following functions,such as scanning of records to be synchronized,data notification,data receiving,status inquiry,and corresponding database operations,parameter configuration,log records,etc.,which can achieve safe and efficient synchronization of data,so as to make summarization and statistical analysis,support business development,it has higher practical value.
Keywords:distributed platform;data synchronization;safe and efficient
0? 引? 言
分布式系統(tǒng)架構(gòu)是指由多臺(tái)計(jì)算機(jī)和通信軟件通過(guò)計(jì)算機(jī)網(wǎng)絡(luò)連接組成的結(jié)構(gòu),是建立在網(wǎng)絡(luò)之上的軟件系統(tǒng),具有高度的內(nèi)聚性和透明性。在該系統(tǒng)中一臺(tái)服務(wù)器的系統(tǒng)崩潰不會(huì)影響到其他的服務(wù)器,且容易部署上線新功能,由于有多臺(tái)計(jì)算機(jī)的計(jì)算能力,該系統(tǒng)比其他系統(tǒng)的處理速度更快,正因?yàn)榉植际较到y(tǒng)的的這些優(yōu)點(diǎn),使其在互聯(lián)網(wǎng)企業(yè)中得到了廣泛的應(yīng)用。但是由于其分布式的特性,也使得各個(gè)平臺(tái)的數(shù)據(jù)無(wú)法與其他平臺(tái)共享,不便于統(tǒng)計(jì)分析,易產(chǎn)生業(yè)務(wù)上的風(fēng)險(xiǎn),因此需要一個(gè)數(shù)據(jù)同步軟件來(lái)將各個(gè)平臺(tái)上的數(shù)據(jù)匯總到一個(gè)總平臺(tái),總平臺(tái)的數(shù)據(jù)更新也可以及時(shí)更新到各個(gè)分平臺(tái),從而達(dá)到數(shù)據(jù)共享的目的。
作者通過(guò)對(duì)數(shù)據(jù)同步軟件的分析與設(shè)計(jì),使學(xué)生加深對(duì)“面向?qū)ο缶幊蹋ǜ呒?jí))”課程相關(guān)知識(shí)點(diǎn)的理解與掌握,增強(qiáng)軟件架構(gòu)設(shè)計(jì)能力。
1? 系統(tǒng)需求分析
根據(jù)實(shí)際需求,將提供更新數(shù)據(jù)的系統(tǒng)稱(chēng)為更新系統(tǒng),將接收數(shù)據(jù)并更新自身數(shù)據(jù)的系統(tǒng)稱(chēng)為被更新系統(tǒng),同步軟件需要在兩個(gè)系統(tǒng)上都進(jìn)行部署。軟件主要由掃描模塊、通知模塊、接收通知模塊、接收查詢(xún)模塊、數(shù)據(jù)庫(kù)操作模塊、配置模塊、日志模塊七個(gè)模塊組成。掃描模塊根據(jù)配置文件的配置信息掃描更新系統(tǒng)上指定表是否有符合時(shí)間要求的記錄更新,或插入并生成對(duì)應(yīng)通知隊(duì)列表記錄等待通知;通知模塊根據(jù)通知隊(duì)列表記錄及配置信息,向被更新系統(tǒng)上的接收模塊發(fā)送同步數(shù)據(jù),并對(duì)相應(yīng)通知隊(duì)列記錄進(jìn)行處理;接收通知模塊用于接收更新系統(tǒng)發(fā)送的同步數(shù)據(jù),并在IP白名單檢查、表白名單檢測(cè)、簽名校驗(yàn)等多重校驗(yàn)通過(guò)后更新至數(shù)據(jù)庫(kù)保存;接收查詢(xún)模塊用于查詢(xún)通知隊(duì)列記錄同步狀態(tài),以及掃描模塊是否運(yùn)行正常;數(shù)據(jù)庫(kù)操作模塊負(fù)責(zé)數(shù)據(jù)庫(kù)相關(guān)增刪改查操作,實(shí)現(xiàn)及數(shù)據(jù)庫(kù)性能優(yōu)化處理;配置模塊負(fù)責(zé)配置文件信息的讀取及修改操作;日志模塊主要負(fù)責(zé)記錄通知,及接收模塊中關(guān)鍵點(diǎn)的日志信息,便于在出現(xiàn)問(wèn)題后及時(shí)查找并解決問(wèn)題。
2? 系統(tǒng)詳細(xì)設(shè)計(jì)
2.1? 系統(tǒng)功能結(jié)構(gòu)設(shè)計(jì)
軟件主要由7個(gè)功能模塊組成,功能結(jié)構(gòu)圖如圖1所示,下文將從流程圖及類(lèi)圖的角度對(duì)各個(gè)模塊進(jìn)行闡述說(shuō)明。
(1)掃描模塊。掃描模塊是一個(gè)定時(shí)執(zhí)行程序,按照設(shè)定的時(shí)間定時(shí)啟動(dòng)、執(zhí)行,然后退出,該模塊部署在更新系統(tǒng)上。掃描模塊根據(jù)設(shè)定的規(guī)則掃描出指定表中符合條件的記錄,并生成對(duì)應(yīng)的通知隊(duì)列記錄,以便由通知模塊完成數(shù)據(jù)的同步。分布式平臺(tái)涉及的業(yè)務(wù)往往具有多變性,短時(shí)間內(nèi)某條記錄的狀態(tài)可能發(fā)生多次改變,為了避免由這種短時(shí)間內(nèi)記錄多次變化,造成同一條記錄多次被同步的現(xiàn)象,對(duì)掃描進(jìn)行了條件限制,即只有表中當(dāng)前最新的記錄更新時(shí)間戳與配置文件中記錄的上次掃描時(shí)間戳間的差值大于指定間隔時(shí)間時(shí)才進(jìn)行處理,否則不做任何操作,如此可在一定程度上降低資源消耗,提升性能。若需獲取表中當(dāng)前最新的記錄更新時(shí)間戳,只需要將上次掃描時(shí)間戳作為查詢(xún)條件進(jìn)行搜索,并將結(jié)果按更新時(shí)間降序排序即可,結(jié)果集中的第一條記錄中就有所需時(shí)間戳。當(dāng)符合條件的記錄都生成對(duì)應(yīng)的通知隊(duì)列記錄后,需要將配置文件中的上次掃描時(shí)間戳更新為本次掃描中記錄的最新更新記錄時(shí)間,以避免記錄的重復(fù)同步。模塊功能流程圖如圖2所示。
(2)通知模塊。通知模塊是個(gè)生產(chǎn)者—消費(fèi)者模式程序,部署在更新系統(tǒng)上。生產(chǎn)者程序負(fù)責(zé)從通知隊(duì)列表中根據(jù)已通知次數(shù)及下次通知時(shí)間條件篩選出符合要求的記錄并分配給消費(fèi)者程序處理,該模式下的生產(chǎn)者只有一個(gè),其每次生產(chǎn)的最大記錄數(shù)可以通過(guò)配置文件配置,消費(fèi)者可以有多個(gè),其數(shù)目也可配置,以此提高并發(fā)處理效率,但是出于對(duì)系統(tǒng)的安全及穩(wěn)定性考慮,最大數(shù)目一般不超過(guò)1 000。模塊可配置同步指定表中的所有字段或某些字段信息,但是若某字段設(shè)計(jì)為非空字段時(shí)則必須同步,考慮到實(shí)際環(huán)境下被更新系統(tǒng)中待同步的目標(biāo)表的名稱(chēng)和當(dāng)前被掃描表的名稱(chēng)可能不一致,對(duì)應(yīng)字段也可能不一致,因此被掃描表中需同步字段、待同步目標(biāo)表的名稱(chēng)以及目標(biāo)表待同步的字段都應(yīng)可以通過(guò)配置文件進(jìn)行設(shè)置,以便接收端能正常更新。由于通知隊(duì)列表中只會(huì)保存帶同步記錄的主鍵信息,因此還需要利用此主鍵信息去原始表中掃描需要同步的字段及其對(duì)應(yīng)數(shù)值信息,并以鍵值對(duì)的形式拼接到字符串中,每次同步的記錄數(shù)較多,各個(gè)記錄之間以分號(hào)隔斷,以便接收模塊拆分解析。根據(jù)配置的地址發(fā)送數(shù)據(jù),再根據(jù)返回的響應(yīng)報(bào)文對(duì)通知隊(duì)列記錄進(jìn)行處理。考慮到實(shí)際更新系統(tǒng)的記錄數(shù)據(jù)量大且增速快,為保證數(shù)據(jù)同步的時(shí)效性,在HTTP通信交互實(shí)現(xiàn)上采用完成端口異步IO模型實(shí)現(xiàn),該模型是Windows平臺(tái)下效率最高的網(wǎng)絡(luò)通信模型,本模塊采用該網(wǎng)絡(luò)模型能最大限度地提升同步效率,避免產(chǎn)生性能瓶頸。模塊功能流程圖如圖3所示。
(3)接收通知模塊。接收通知模塊是一個(gè)HTTP請(qǐng)求服務(wù)端程序,用于接收并處理各個(gè)HTTP請(qǐng)求發(fā)送端發(fā)送的報(bào)文,此模塊部署在待更新系統(tǒng)上。為了處理高并發(fā)的HTTP請(qǐng)求,本模塊同樣采用完成端口來(lái)實(shí)現(xiàn)報(bào)文的交互處理。除了效率問(wèn)題,安全問(wèn)題也是本模塊需要重點(diǎn)考慮的因素。因此,接收通知模塊在啟動(dòng)時(shí)就將IP白名單、同步表白名單、簽名秘鑰等校驗(yàn)用信息讀取到內(nèi)存,在收到同步數(shù)據(jù)后首先對(duì)來(lái)源IP進(jìn)行白名單校驗(yàn),再對(duì)待同步的表名進(jìn)行白名單校驗(yàn),然后根據(jù)接口協(xié)議進(jìn)行簽名校驗(yàn),通過(guò)后再對(duì)數(shù)據(jù)串進(jìn)行防SQL注入處理,無(wú)問(wèn)題后最后將接收數(shù)據(jù)拼接成SQL語(yǔ)句進(jìn)行數(shù)據(jù)庫(kù)操作,否則不做任何處理,無(wú)論是否成功都需按照接口協(xié)議返回相應(yīng)響應(yīng)數(shù)據(jù)。接收通知模塊功能流程圖如圖4所示。
(5)接收查詢(xún)模塊。接收查詢(xún)模塊也是一個(gè)服務(wù)端程序,負(fù)責(zé)監(jiān)聽(tīng)網(wǎng)絡(luò)端口,接收查詢(xún)請(qǐng)求并返回結(jié)果數(shù)據(jù)。查詢(xún)返回的數(shù)據(jù)有兩種,一種是通知隊(duì)列表中未通知和通知失敗的記錄條數(shù),此類(lèi)數(shù)據(jù)用于監(jiān)控通知模塊是否工作正常,當(dāng)上述兩類(lèi)記錄達(dá)到一定數(shù)目時(shí),就應(yīng)進(jìn)行檢查,及時(shí)發(fā)現(xiàn)并解決問(wèn)題。其中未通知記錄的定義是:狀態(tài)為未通知且通知次數(shù)等于0,請(qǐng)求時(shí)間大于1分鐘的記錄;通知失敗記錄的定義是:通知次數(shù)大于等于6的記錄。另一種返回的數(shù)據(jù)是掃描模塊配置文件中的上次掃描時(shí)間戳,通過(guò)該時(shí)間戳是否正常更新來(lái)判斷掃描模塊是否假死。接收查詢(xún)模塊功能流程圖如圖5所示。
(6)數(shù)據(jù)庫(kù)操作模塊。數(shù)據(jù)庫(kù)操作模塊實(shí)現(xiàn)與MySQL數(shù)據(jù)庫(kù)連接、增刪改查功能以及高并發(fā)情況下性能優(yōu)化處理,相關(guān)類(lèi)主要有兩個(gè),如圖6所示,一個(gè)是CDataBase類(lèi),其中封裝了MySQL數(shù)據(jù)庫(kù)的基本API函數(shù),實(shí)現(xiàn)基本的數(shù)據(jù)庫(kù)增刪改查等操作功能。另一個(gè)為CDBConncetPool類(lèi),該類(lèi)繼承自CDataBase類(lèi),并在其基類(lèi)基礎(chǔ)上增加了數(shù)據(jù)庫(kù)連接池的功能,即在程序啟動(dòng)時(shí)就將數(shù)據(jù)庫(kù)連接對(duì)象都創(chuàng)建好,并保存到隊(duì)列中,直到程序退出再釋放,避免頻繁的進(jìn)行數(shù)據(jù)庫(kù)連接及釋放操作,降低在高并發(fā)的數(shù)據(jù)庫(kù)操作時(shí)造成性能瓶頸的風(fēng)險(xiǎn),此類(lèi)技術(shù)在實(shí)際工作中應(yīng)用廣泛。
(7)配置及日志模塊。配置模塊主要負(fù)責(zé)各功能模塊配置文件信息的讀取與更新,避免將系統(tǒng)參數(shù)都固定在代碼中,造成代碼頻繁修改的問(wèn)題,其類(lèi)圖如圖7所示,定義了幾個(gè)主要的配置文件操作函數(shù)。
日志模塊用于在關(guān)鍵操作的節(jié)點(diǎn)進(jìn)行日志的記錄,比如網(wǎng)絡(luò)請(qǐng)求的發(fā)送與接收處、數(shù)據(jù)庫(kù)的相關(guān)操作處等,便于分析和解決問(wèn)題,對(duì)后臺(tái)程序以及業(yè)務(wù)功能模塊異常時(shí)的問(wèn)題排查及解決有重要作用。日志的級(jí)別可配置,分為危險(xiǎn)、錯(cuò)誤、信息、調(diào)試等級(jí)別,可根據(jù)需要靈活調(diào)用,日志信息的記錄時(shí)間可以精確到毫秒,以便于精確查找問(wèn)題發(fā)生的時(shí)間點(diǎn),其類(lèi)圖如圖8所示。
2.2? 系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)
軟件主要功能是同步已有表的數(shù)據(jù),未涉及其他業(yè)務(wù),因此設(shè)計(jì)的表只有通知隊(duì)列記錄表,用于管理指定表的待同步記錄,主要字段有待同步記錄的主鍵信息、已通知次數(shù)、下次通知時(shí)間等。
3? 結(jié)? 論
本文分析了分布式平臺(tái)數(shù)據(jù)同步軟件的需求,并對(duì)軟件設(shè)計(jì)進(jìn)行了詳細(xì)描述。若實(shí)現(xiàn)后投入使用,可幫助企業(yè)解決分布式架構(gòu)下各個(gè)平臺(tái)之間的數(shù)據(jù)同步問(wèn)題,高效安全地完成數(shù)據(jù)匯總,以便統(tǒng)計(jì)分析,為企業(yè)決策制定提供依據(jù)。本案例應(yīng)用在了“面向?qū)ο缶幊谈呒?jí)”專(zhuān)業(yè)課程中,通過(guò)講解數(shù)據(jù)同步軟件的分析和設(shè)計(jì)過(guò)程,促進(jìn)學(xué)生對(duì)知識(shí)點(diǎn)的掌握與理解,提高實(shí)踐動(dòng)手能力。
參考文獻(xiàn):
[1] 吳潔明,方英蘭.軟件工程實(shí)例教程 [M].北京:清華大學(xué)出版社,2010.
[2] 王英英.MySQL 8從入門(mén)到精通 [M].北京:清華大學(xué)出版社,2019.
[3] 王琦.電子辦稅服務(wù)系統(tǒng)中數(shù)據(jù)同步軟件的設(shè)計(jì)與實(shí)現(xiàn) [D].南京:南京理工大學(xué),2011.
[4] 羅智華.新時(shí)期計(jì)算機(jī)通信軟件架構(gòu)設(shè)計(jì)與分析 [J].數(shù)字通信世界,2015(10):25.
[5] 史陽(yáng),楊坤德,楊益新,等.水聲數(shù)據(jù)采集與分析軟件的設(shè)計(jì)與實(shí)現(xiàn) [J].電聲技術(shù),2012,36(9):49-51+78.
作者簡(jiǎn)介:謝劍(1987.06—),男,漢族,湖南長(zhǎng)沙人,專(zhuān)任教師,初級(jí)職稱(chēng),碩士,研究方向:計(jì)算機(jī)應(yīng)用,圖像處理。