摘? 要:分布式架構在互聯網企業中已得到廣泛應用,各平臺間的數據如何同步是應用中需解決的關鍵問題,結合“面向對象編程(高級)”課程內容,對通用數據同步軟件進行了分析與設計。該設計主要包含待同步記錄掃描、數據通知、數據接收、狀態查詢以及相應的數據庫操作、參數配置、日志記錄等功能,可實現數據的安全高效同步,以便匯總統計分析,支撐業務發展,具有較高實用價值。
關鍵詞:分布式平臺;數據同步;安全高效
中圖分類號:TP311.5? ? ? 文獻標識碼:A 文章編號: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? 引? 言
分布式系統架構是指由多臺計算機和通信軟件通過計算機網絡連接組成的結構,是建立在網絡之上的軟件系統,具有高度的內聚性和透明性。在該系統中一臺服務器的系統崩潰不會影響到其他的服務器,且容易部署上線新功能,由于有多臺計算機的計算能力,該系統比其他系統的處理速度更快,正因為分布式系統的的這些優點,使其在互聯網企業中得到了廣泛的應用。但是由于其分布式的特性,也使得各個平臺的數據無法與其他平臺共享,不便于統計分析,易產生業務上的風險,因此需要一個數據同步軟件來將各個平臺上的數據匯總到一個總平臺,總平臺的數據更新也可以及時更新到各個分平臺,從而達到數據共享的目的。
作者通過對數據同步軟件的分析與設計,使學生加深對“面向對象編程(高級)”課程相關知識點的理解與掌握,增強軟件架構設計能力。
1? 系統需求分析
根據實際需求,將提供更新數據的系統稱為更新系統,將接收數據并更新自身數據的系統稱為被更新系統,同步軟件需要在兩個系統上都進行部署。軟件主要由掃描模塊、通知模塊、接收通知模塊、接收查詢模塊、數據庫操作模塊、配置模塊、日志模塊七個模塊組成。掃描模塊根據配置文件的配置信息掃描更新系統上指定表是否有符合時間要求的記錄更新,或插入并生成對應通知隊列表記錄等待通知;通知模塊根據通知隊列表記錄及配置信息,向被更新系統上的接收模塊發送同步數據,并對相應通知隊列記錄進行處理;接收通知模塊用于接收更新系統發送的同步數據,并在IP白名單檢查、表白名單檢測、簽名校驗等多重校驗通過后更新至數據庫保存;接收查詢模塊用于查詢通知隊列記錄同步狀態,以及掃描模塊是否運行正常;數據庫操作模塊負責數據庫相關增刪改查操作,實現及數據庫性能優化處理;配置模塊負責配置文件信息的讀取及修改操作;日志模塊主要負責記錄通知,及接收模塊中關鍵點的日志信息,便于在出現問題后及時查找并解決問題。
2? 系統詳細設計
2.1? 系統功能結構設計
軟件主要由7個功能模塊組成,功能結構圖如圖1所示,下文將從流程圖及類圖的角度對各個模塊進行闡述說明。
(1)掃描模塊。掃描模塊是一個定時執行程序,按照設定的時間定時啟動、執行,然后退出,該模塊部署在更新系統上。掃描模塊根據設定的規則掃描出指定表中符合條件的記錄,并生成對應的通知隊列記錄,以便由通知模塊完成數據的同步。分布式平臺涉及的業務往往具有多變性,短時間內某條記錄的狀態可能發生多次改變,為了避免由這種短時間內記錄多次變化,造成同一條記錄多次被同步的現象,對掃描進行了條件限制,即只有表中當前最新的記錄更新時間戳與配置文件中記錄的上次掃描時間戳間的差值大于指定間隔時間時才進行處理,否則不做任何操作,如此可在一定程度上降低資源消耗,提升性能。若需獲取表中當前最新的記錄更新時間戳,只需要將上次掃描時間戳作為查詢條件進行搜索,并將結果按更新時間降序排序即可,結果集中的第一條記錄中就有所需時間戳。當符合條件的記錄都生成對應的通知隊列記錄后,需要將配置文件中的上次掃描時間戳更新為本次掃描中記錄的最新更新記錄時間,以避免記錄的重復同步。模塊功能流程圖如圖2所示。
(2)通知模塊。通知模塊是個生產者—消費者模式程序,部署在更新系統上。生產者程序負責從通知隊列表中根據已通知次數及下次通知時間條件篩選出符合要求的記錄并分配給消費者程序處理,該模式下的生產者只有一個,其每次生產的最大記錄數可以通過配置文件配置,消費者可以有多個,其數目也可配置,以此提高并發處理效率,但是出于對系統的安全及穩定性考慮,最大數目一般不超過1 000。模塊可配置同步指定表中的所有字段或某些字段信息,但是若某字段設計為非空字段時則必須同步,考慮到實際環境下被更新系統中待同步的目標表的名稱和當前被掃描表的名稱可能不一致,對應字段也可能不一致,因此被掃描表中需同步字段、待同步目標表的名稱以及目標表待同步的字段都應可以通過配置文件進行設置,以便接收端能正常更新。由于通知隊列表中只會保存帶同步記錄的主鍵信息,因此還需要利用此主鍵信息去原始表中掃描需要同步的字段及其對應數值信息,并以鍵值對的形式拼接到字符串中,每次同步的記錄數較多,各個記錄之間以分號隔斷,以便接收模塊拆分解析。根據配置的地址發送數據,再根據返回的響應報文對通知隊列記錄進行處理。考慮到實際更新系統的記錄數據量大且增速快,為保證數據同步的時效性,在HTTP通信交互實現上采用完成端口異步IO模型實現,該模型是Windows平臺下效率最高的網絡通信模型,本模塊采用該網絡模型能最大限度地提升同步效率,避免產生性能瓶頸。模塊功能流程圖如圖3所示。
(3)接收通知模塊。接收通知模塊是一個HTTP請求服務端程序,用于接收并處理各個HTTP請求發送端發送的報文,此模塊部署在待更新系統上。為了處理高并發的HTTP請求,本模塊同樣采用完成端口來實現報文的交互處理。除了效率問題,安全問題也是本模塊需要重點考慮的因素。因此,接收通知模塊在啟動時就將IP白名單、同步表白名單、簽名秘鑰等校驗用信息讀取到內存,在收到同步數據后首先對來源IP進行白名單校驗,再對待同步的表名進行白名單校驗,然后根據接口協議進行簽名校驗,通過后再對數據串進行防SQL注入處理,無問題后最后將接收數據拼接成SQL語句進行數據庫操作,否則不做任何處理,無論是否成功都需按照接口協議返回相應響應數據。接收通知模塊功能流程圖如圖4所示。
(5)接收查詢模塊。接收查詢模塊也是一個服務端程序,負責監聽網絡端口,接收查詢請求并返回結果數據。查詢返回的數據有兩種,一種是通知隊列表中未通知和通知失敗的記錄條數,此類數據用于監控通知模塊是否工作正常,當上述兩類記錄達到一定數目時,就應進行檢查,及時發現并解決問題。其中未通知記錄的定義是:狀態為未通知且通知次數等于0,請求時間大于1分鐘的記錄;通知失敗記錄的定義是:通知次數大于等于6的記錄。另一種返回的數據是掃描模塊配置文件中的上次掃描時間戳,通過該時間戳是否正常更新來判斷掃描模塊是否假死。接收查詢模塊功能流程圖如圖5所示。
(6)數據庫操作模塊。數據庫操作模塊實現與MySQL數據庫連接、增刪改查功能以及高并發情況下性能優化處理,相關類主要有兩個,如圖6所示,一個是CDataBase類,其中封裝了MySQL數據庫的基本API函數,實現基本的數據庫增刪改查等操作功能。另一個為CDBConncetPool類,該類繼承自CDataBase類,并在其基類基礎上增加了數據庫連接池的功能,即在程序啟動時就將數據庫連接對象都創建好,并保存到隊列中,直到程序退出再釋放,避免頻繁的進行數據庫連接及釋放操作,降低在高并發的數據庫操作時造成性能瓶頸的風險,此類技術在實際工作中應用廣泛。
(7)配置及日志模塊。配置模塊主要負責各功能模塊配置文件信息的讀取與更新,避免將系統參數都固定在代碼中,造成代碼頻繁修改的問題,其類圖如圖7所示,定義了幾個主要的配置文件操作函數。
日志模塊用于在關鍵操作的節點進行日志的記錄,比如網絡請求的發送與接收處、數據庫的相關操作處等,便于分析和解決問題,對后臺程序以及業務功能模塊異常時的問題排查及解決有重要作用。日志的級別可配置,分為危險、錯誤、信息、調試等級別,可根據需要靈活調用,日志信息的記錄時間可以精確到毫秒,以便于精確查找問題發生的時間點,其類圖如圖8所示。
2.2? 系統數據庫設計
軟件主要功能是同步已有表的數據,未涉及其他業務,因此設計的表只有通知隊列記錄表,用于管理指定表的待同步記錄,主要字段有待同步記錄的主鍵信息、已通知次數、下次通知時間等。
3? 結? 論
本文分析了分布式平臺數據同步軟件的需求,并對軟件設計進行了詳細描述。若實現后投入使用,可幫助企業解決分布式架構下各個平臺之間的數據同步問題,高效安全地完成數據匯總,以便統計分析,為企業決策制定提供依據。本案例應用在了“面向對象編程高級”專業課程中,通過講解數據同步軟件的分析和設計過程,促進學生對知識點的掌握與理解,提高實踐動手能力。
參考文獻:
[1] 吳潔明,方英蘭.軟件工程實例教程 [M].北京:清華大學出版社,2010.
[2] 王英英.MySQL 8從入門到精通 [M].北京:清華大學出版社,2019.
[3] 王琦.電子辦稅服務系統中數據同步軟件的設計與實現 [D].南京:南京理工大學,2011.
[4] 羅智華.新時期計算機通信軟件架構設計與分析 [J].數字通信世界,2015(10):25.
[5] 史陽,楊坤德,楊益新,等.水聲數據采集與分析軟件的設計與實現 [J].電聲技術,2012,36(9):49-51+78.
作者簡介:謝劍(1987.06—),男,漢族,湖南長沙人,專任教師,初級職稱,碩士,研究方向:計算機應用,圖像處理。