王紅愛,祝紅光,賈新茹
(中國鐵道科學研究院電子計算技術研究所,100081)
鐵路客票發送和預定系統(簡稱客票系統)自1996年應用以來,已經建成了鐵道部、地區中心、車站三級分布式結構。系統擁有以市場需求為導向的客票銷售體系,滿足旅客的不同需求。本系統每日與海量數據進行交互,這些數據是客票系統發展的基礎,從應用的角度來說,分為基礎數據和業務數據。基礎數據一般包括站名字典、線路字典、票價基礎價率等相對穩定的數據,由鐵道部全表復制到各中心和各車站,而業務數據一般包括存根、席位、財收等動態數據,根據統計的要求由車站級或中心級向上級單位逐級傳輸。基礎數據的一致性要求非常強,需要嚴格一致,關鍵數據的丟失會影響售票業務的正常進行。而業務數據的丟失會造成鐵路局、鐵道部報表的統計數據不完整,對分析運營結果和制定運營策略產生不利影響。云計算的Paxos算法可以解決分布式系統中的一致性問題。本文分析了客票系統的數據架構,介紹了目前客票系統保證數據一致性的技術,建立了基于Paxos算法的數據一致性模型,可以有效解決客票系統數據的一致性和完整性問題。
Paxos算法[1~2]是由Leslie Lamport最先提出的一種基于消息傳遞(Messages Passing)的一致性算法。用來解決一個分布式系統如何就某個值(決議)達成一致的問題。
一個典型的場景是,在一個分布式數據庫系統中,如果各節點的初始狀態一致,每個節點都執行相同的操作序列,那么他們最后能得到一個一致的狀態。在該算法中規定了3種角色(proposers,acceptors,和 learners)和2個階段(accept和learn)。其中proposers 提出決議,acceptors批準決議,learners獲取并使用已經通過的決議。在這種情況下,滿足以下3個條件[3]就可以保證數據的一致性:
(1)決議只有在被 proposers 提出以后才能批準。
(2)每次只批準一個決議。
(3)只有決議確定被批準后learners才能獲取這個決議。
圖1為Paxos算法的模型簡圖。

圖1 Paxos算法的模型簡圖
Paxos算法實現時proposer向acceptors組發起請求告知需批準的編號n,獲取acceptors多數派最新一次批準的最大編號m,如果此次提案編號n大于m,則acceptors根據收到的請求承諾不再批復編號小于n的提案,在收到該提案時即批準該請求,此時learner才能獲取該提案。
數據復制(replication)和傳輸管理(DBCS)是客票分布式數據系統的2種技術手段。客票系統利用Sybase的復制服務器將數據從主站點復制到其他站點,通過在主點建立數據復制定義,在復制點建立復制約定,自動地把對主點數據的操作通過復制機制作用到復制點數據上。數據傳輸管理主要完成分布式數據庫之間數據的相互透明傳送,從而在分布式數據庫之間實現數據的一致性和完整性,屬于松散一致性的數據耦合機制。
客票系統利用的復制服務器來完成復制功能。復制數據會在整個系統中有多份數據影像,分為緊密一致性和松散一致性兩種方式,緊密一致性需要相關的復制節點都做好了提交準備才去提交,而松散一致性對于事物的執行主點和復制點總是會有延遲。數據復制具有以下優點:
(1)高可用性
如果有一個節點出錯,其他節點可以接管它的工作,不會使整個系統停止工作。
(2)提高系統的擴展能力
通過把負載分布到多個節點上,或者增加節點來提高系統的擴展能力。
(3)高性能
復制服務器提供一種機制,復制系統是獨立的,不會給各節點服務器造成負擔。同時客戶端可以訪問就近的節點,提高了用戶訪問速度。
客票系統擁有自主開發的傳輸中間件(DBCS),主要根據用戶定制,從源節點數據庫按照一定的規則導出數據,傳輸到目的節點服務器,再按照導入定義將文件導入到相應的數據庫中,完成日常數據在各節點之間的傳送。包括原始業務數據向上級節點傳輸,同級節點之間的傳輸,消息類數據向下級節點傳輸等場景。

圖2 客票系統客戶端與服務器端的結構圖
如圖2,以售票為例,當客戶端要完成售票業務,需要分別向車站、鐵路局、鐵道部各級不同數據庫發出指令,由于網絡等原因,如果各服務器基礎數據或者業務類數據不一致,可能會造成業務停滯,或者產生錯誤的結果,比如改點調令沒有復制到車站,會造成票面開車時間不正確,導致旅客漏乘列車。為了使全路客票發售系統能夠正常運營,數據的一致性尤顯重要。在分布式系統中Paxos算法最大的用途就是保持多個節點數據的一致性。
客票系統是一個龐大的信息系統,根據業務的不同,有些需要采用分布式提交,提交意味著所有的操作均已完成。放棄意味著存在無法順利完成的操作,需要放棄,那些已執行的操作也將撤銷,系統回滾到本次提交之前的狀態,即必須保證提交的原子性,這是保證數據一致性的重要前提。
數據一致性模型從根本上來說是對任務和數據存儲之間的控制。正常情況下,執行讀操作時,它期待該操作返回的是該數據在其最后一次寫操作之后的結果。為了保證業務正常、正確地進行,需使所有服務器端的基礎數據最終一致。對于基礎數據,由鐵道部向下級服務器逐級復制;對于業務數據,由車站向上級服務器逐級傳輸。本文基于Paxos算法提出了加強數據一致性的方案。
圖3為基于Paxos算法的數據一致性模型,處理流程如下:
(1)基礎數據按照由上向下的復制機制,業務數據按照由下向上或同級間的傳輸機制。
(2)業務維護時,會在同步控制器存儲本次更新的記錄(編碼n,更新值newvalue),其中value值可以是表名加索引值,也可以是在業務維護時的校驗值等。
(3)鐵道部、鐵路局、車站各級數據庫服務器作為節點集,通過Paxos算法推選出主節點。
(4)同步控制器(客戶端或工作流進程)將本次更新的記錄(編碼n,更新值newvalue)向主節點發起更新申請。
(5)主節點比較最新一次更新的記錄(編碼m,更新值value),以下情況的更新是成功的:
value = newvalue,且m value < > newvalue (6)如果更新成功,說明新數據在某些節點不一致,發送消息給管理端,啟動快照機制或者重新復制等手段保證最終數據的一致性。 圖3 基于paxos算法的數據一致性模型 鐵路客票系統的業務在不斷擴展,為給旅客提供方便快捷的服務,客票系統對業務連續性提出了更高要求,因此數據的一致性和完整性尤顯重要。在云計算飛速發展的今天,其中的關鍵技術也被各個行業吸納,本文首先對其中的Paxos算法進行了研究,建立了基于Paxos算法的數據一致性模型,該模型可以解決鐵路客票系統中數據的一致性和完整性問題,進一步提高客票系統的業務質量。 [1] LAMPORT, L. Paxos made simple[J] . ACM SIGACT News 32, 4 (2001): 18-25. [2] LAMPORT, L. The part-time parliament[J] . ACM TOCS 16, 2 (1998): 133-169. [3] 趙黎斌. 面向云存儲的分布式文件系統關鍵技術研究[D] .西安:西安電子科技大學, 2011.
5 結束語