

摘 要 車站售票程序自動升級是將P2P技術的文件共享系統理念應用于自動升級程序,對車站售票程序的升級文件進行下載和管理。其本質是P2P文件管理系統,借鑒和綜合了Napster和BitTorrent的優點。經過理論分析和試驗驗證, 該自動升級程序對升級文件進行下載和管理的功能實現,證明我們改進P2P技術方案的文件下載調度算法是合理的和高效率的。該P2P文件下載管理調度算法既保證了P2P網絡結構化,也保證了在程序升級過程的中后期,在中心節點(服務器)節點斷開的情況下也能實現某一臺售票主機對中心節點的接管,保證整個P2P網絡的所有主機售票程序升級完成。
關鍵詞 結構化網絡;P2P網絡;調度算法;MD5;數據完整性;socket網絡編程
背景
現在鐵路車站售票系統是在鐵路局域網絡中采用C/S技術架構模式,車站售票系統客戶端程序需要頻繁地進行升級維護。當車站售票程序的功能增加或改變以及票價調整時,就需要對車站售票程序的相應文件進行替換或者增加,即車站售票程序升級。每次升級需要下載的文件數量有幾個或幾十個不等,下載的文件總共可達幾百KB至一百多M不等,每個文件幾乎都在1k至15M之間。
為減少車站信息技術人員的工作量和減少人工在程序升級中的操作失誤,我們開發自動升級程序來實現車站售票程序的自動升級。為保證車站售票程序自動升級過程中確保文件傳輸的效率和對網絡帶寬等資源的合理利用,以及防止單點故障對程序升級造成影響,決定將對等網絡(Peer to Peer網絡,即P2P網絡)技術應用于自動升級程序。
1updatefiles.xml和fcopysgetIp.xml文件
(1)在中心節點主機上進行升級文件包解壓,解壓過程中生成updatefiles.xml文件。updatefiles.xml文件包含該升級程序的版本號、中心節點Ip(服務器Ip)、提醒程序升級的通知內容、解壓后的升級文件名稱、文件路徑,升級完成標志等等信息。updatefiles.xml文件格式及內容如下:
在中心節點(服務器端)給售票主機節點推送升級信息時,將fcopysgetIp.xml發送給售票主機。根據fcopysgetIp.xml,售票主機就知道P2P網絡中哪些主機節點擁有該文件的副本,就能夠通過調度算法從中心節點或主機節點中選擇一臺主機下載文件。
文件下載完之后,將下載文件的售票主機節點(Ip)添加到本機的fcopysgetIp.xml中;將下載文件的售票主機節點(Ip)添加到中心節點的fcopysgetIp.xml中;如果是從另一臺主機節點下載文件(不是從中心節點主機下載文件),將下載文件的售票主機節點(Ip)添加到被請求訪問的主機節點的fcopysgetIp.xml中。這樣就能保證每臺主機能及時更新整個網絡售票主機的下載文件的備份情況[1]。
2自動升級程序的P2P網絡架構
自動升級程序基于Java socket來構建P2P網絡,采用TCP協議(一種可靠的傳輸協議)。升級程序使用Java socket編程,java在java.net包中提供了兩個類:ServerSocket和Socket,分別對應網絡連接的服務端、客戶端。當然服務端和客戶端在P2P網絡中是相對概念,申請文件下載的主機為客戶端,提供文件下載的主機為服務器端。ServerSocket和Socket是兩個Java已經封裝好的類,其構造方法為: ServerSocket(int port);Socket(InetAddress address, int port)。
借鑒Napster軟件的結構化網絡的優點,在P2P網絡中設置中心節點。中心節點類似于C/S模式架構的索引服務器角色,首先為P2P網絡提供文件的索引服務器的功能,同時也提供文件下載服務,其優點是實現網絡結構化,擴展性好,P2P網絡的主機節點的加入和離開都很簡單,便于管理。自動升級程序采用結構化P2P網絡是為了防止純粹的非結構化對等網絡的廣播造成的消息泛洪而導致網絡效率低下。
在售票程序自動升級初期,中心節點在P2P網絡中推送升級信息時,會將updatefiles.xml文件發送給每一個售票節點主機。自動升級程序構建的結構化分布式對等網絡將網絡中文件的資源索引存儲在fcopysgetIp.xml中。當一個車站售票節點主機在P2P網絡中搜索相應的資源時,從中心節點獲取fcopysgetIp.xml文件即可。以這樣的方式,fcopysgetIp.xml文件將從中心節點備份到網絡中的每一臺車站售票主機。從updatefiles.xml獲取需要下載的文件名和從fcopysgetIp.xml搜索并通過算法隨機獲取擁有該文件副本的主機ip,這樣就可以與對應ip節點主機連接并下載文件。
自動升級程序也借鑒了BitTorrent軟件優點。在健壯性方面,在文件下載在中后期,文件下載服務分散在各個節點之間,用fcopysgetIp.xml代替分布式哈希表實現文件主機索引的功能,防止單點故障,即使中心節點斷開也能保證整個網絡的文件下載,容錯性好。中心節點失效時,P2P網絡中的一臺主機會接管中心節點的功能,并自動調整網絡拓撲,保持其他節點的連通性。同時不再像BitTorrent一樣對文件分片傳輸,而是自動升級程序將單個文件作為一個單元進行傳輸,并對傳輸文件和文件的MD5散列值一起傳輸至客戶端,然后進行文件的完整性校驗。
對等網絡(P2P)減少了C/S模型中對服務器的資源訪問壓力,資源分布存儲在多個主機節點上,起到了整個網絡負載均衡的作用。
自動升級程序基于P2P網絡完成升級文件下載的同時,該網絡需要一個中心節點(服務器)保證網絡的結構化。P2P網絡的中心節點既是提供文件下載的節點,也是一個文件下載的索引服務器。中心節點在這里面所起的作用不僅是傳輸文件,更是查找文件的location[2]。
3自動升級程序文件下載的基本過程
自動升級程序基于P2P網絡的文件下載基本過程描述如下:
(1)在程序升級初期,售票程序的升級文件只能從中心節點(服務器端S)下載升級文件,流程如下:
①將升級文件包解壓到服務器端(對等網絡的中心節點),并同時生成兩個XML文件updatefiles.xml和fcopysgetIp.xml文件。
②服務器端向車站客戶端推送需要升級的信息。
③車站客戶端收到程序升級提醒,售票員退出售票程序,點擊“確定升級”確認可以升級。
④服務器端首先將updatefiles.xml發送給車站客戶端。
⑤車站客戶端從服務器端獲取updatefiles.xml和fcopysgetIp.xml文件,覆蓋本機磁盤上的updatefiles.xml和fcopysgetIp.xml文件。
⑥車站客戶端按照updatefiles.xml中記錄的文件名依次向服務器端請求下載文件。
⑦車站客戶端下載完成某個文件后,在updatefiles.xml中修改該文件名對應的該條記錄的下載完成標志,并在fcopysgetIp.xml中該文件名對應的該條記錄中添加車站客戶端IP。
⑧車站客戶端下載完成某個文件后,向服務器端發送一條文件下載完成信息,在服務器端的fcopysgetIp.xml中該文件名對應的記錄中添加車站客戶端IP。
(2)在程序升級的中后期,售票程序的升級的所有文件copies在中心節點(服務器端)和一部分車站售票主機節點上。假設有m臺車站售票主機已有升級文件xxx.dll,文件下載流程如下:
①假設車站客戶端主機C1需要下載xxx.dll文件,C1向服務器S請求獲取fcopysgetIp.xml文件,并從fcopysgetIp.xml中讀取擁有xxx.dll文件copy的m個車站客售票主機Ip。
②C1通過調度算法選擇從S或者從m臺客戶端主機中的某一臺主機(假設為客戶端主機C2)下載xxx.dll文件。
③如果XX.dll文件下載成功,C1在自己本機的文件updatefiles.xml中修改XX.dll對應的該條記錄的下載完成標志。同時,C1、S、C2在自己本機的文件fcopysgetIp.xml中該文件名對應的記錄中添加C1的IP。
④如果XX.dll文件下載不成功,C1從fcopysgetIp.xml中通過調度算法選擇另一臺主機再次下載XX.dll文件,重復該步驟直至該文件下載完成。
⑤按照updatefiles.xml中記錄的文件名,依次下載文件,重復以上步驟,直至升級文件全部下載完成[3]。
4結構化P2P網絡下載文件調度算法及實現
自動升級程序結構化P2P網絡下載文件調度算法非常簡單和易于實現。步驟如下:
(1)上傳升級包至服務器端(中心節點),升級包解壓到指定路徑下,并生成updatefiles.xml文件和fcopysgetIp.xml文件。updatefiles.xml記錄了所有升級包文件的文件名和路徑信息。
(2)中心節點將updatefiles.xml和fcopysgetIp.xml傳送給售票主機節點。
(3)售票主機節點按照updatefiles.xml的記錄依次從該P2P網絡申請訪問下載文件。對應表格如下:
對表格中m+1個主機進行隨機排序后,向第一個主機申請xxx.vsd文件下載。如果下載成功,然后將新獲取xxx.vsd文件副本的主機IP添加到本地主機、中心節點主機和提供下載文件副本的主機的fcopysgetIp.xml中并修改xxx.vsd文件的對應下載標志,重復以上第三步驟。如果下載不成功將第一個主機放在臨時排序表最后位置,向第二個主機申請文件下載。同理,依次申請下載xxx.vsd文件,直至xxx.vsd文件下載完成。
該算法實際上實現了隨機申請網絡資源的碰撞回退功能,起到了網絡負載均衡的作用。該算法也明顯去掉了中心節點的數據訪問壓力,在此結構化P2P網絡中,中心節點的文件訪問壓力只相當于C/S模式文件訪問壓力的1/m+1。在整個網絡文件下載的中后期隨著m值的增加,中心服務器的文件下載壓力會越來越小,文件下載速度也會越來越快。
(5)在文件下載中后期,如果中心節點出現故障,只要其中一個車站售票節點主機擁有所有下載文件的全備份,該節點主機將接管中心服務器的功能,并向申請文件下載的售票節點提供fcopysgetIp.xml,保證整個結構化P2P網絡中所有升級文件的順利下載。
5MD5進行文件完整性校驗
為保證文件傳輸過程中的完整性,對下載的文件進行MD5散列值的完整性校驗。假設,請求文件主機為A,提供文件下載主機為B。
(1)在主機B傳輸文件xxx.vsd前,利用MD5算法對xxx.vsd文件編碼,生成128位的哈希值。
(2)主機B將文件xxx.vsd和128位的哈希值一起傳送給主機A。
(3)主機A收到信息后,利用MD5算法對收到的xxx.vsd文件編碼,生成128位的哈希值。再將生成128位的哈希值與從主機B接收到的128位的哈希值進行對比,如果相等,證明文件xxx.vsd完整;如果不相等,證明文件xxx.vsd已損壞。從而實現文件完整性校驗。
6結束語
基于結構化P2P網絡技術的改進方案,提供了一種簡單新穎的結構化P2P網絡結構化方式,在局域網中完全能夠實現既定功能,還易于編碼實現。通過理論分析和實驗驗證,改進后的結構化P2P網絡技術方案是合理可行的。
參考文獻
[1] 牛冬.區塊鏈底層設計Java實戰[M].北京:電子工業出版社,2019: 20-96.
[2] 蔡康,唐宏,丁圣勇,等.P2P對等網絡原理與應用[M].北京:科學出版社,2011:188-198.
[3] 孫立鐫,楊首昂.基于P2P結構的協同設計系統的構架研究[J].計算機應用研究,2009,26(5):1803-1805.
作者簡介
鄧洪波(1980-),男,四川仁壽縣人;學歷:本科,工程師,現就職單位:中國鐵道科學研究院集團有限公司,研究方向:軟件開發。