卜小明
(中國電信股份有限公司 北京 100034)
全網運營要求電信運營商在其整個經營地域為廣大用戶提供統一、標準的服務。為了實現這個目標,在業務支撐系統省集中的基礎上,中國電信已實現全國兩級計費系統的網絡化部署,即在中國電信集團總部建設全國級計費系統,并與各省的計費系統互聯以支撐全網運營。
由于全國計費結算中心系統對全網漫游計費運營起著重要的協調和引導作用,一旦發生災難,會直接導致全國性范圍的業務阻斷、數據丟失、收入損失。考慮到數據安全性和業務連續性要求,中國電信全國計費結算中心在北京和上海設立了異地遠程容災雙中心[1,2],采用應用級容災方案以適應雙中心間網絡相對低速、低帶寬的現狀[3]。目前,全國級計費及容災系統的5個相互關聯的業務子系統都使用應用級容災方案,采用整體切換的策略。
應用級容災屬于最高等級的容災技術[4],理論上有著最優的RPO和RTO(零數據丟失,恢復時間在分鐘級),但全國計費結算中心的切換時間(即由主中心停止運行到容災中心接管業務的時間)長期在小時級徘徊,基本上等同于數據級容災的容災指標,應用級容災的優勢無法充分體現。因此,如何提高雙中心容災切換的速度,實現預期的業務連續性指標,成為擺在中國電信全國計費結算中心面前的迫切問題。
中國電信全國計費結算中心在北京和上海建立了全國級計費及容災系統雙節點,按照功能劃分業務子系統,5個相互關聯的業務子系統都采用了應用級容災方案。雙中心容災切換的復雜性來自以下多個方面。
基本切換場景有以下4種。
· 雙切雙:主、備中心都正常的情況下進行切換演練,將雙中心主備角色互換或切換容災模式 (同步/跟隨:同步模式下雙中心都完成處理后才進行下一步,跟隨模式下主中心完成處理后就繼續進行下一步,而不等待備中心)。
·雙切單:單中心硬件發生故障、計劃停機或主備中心間網絡中斷,由另一中心(主或備)接管業務獨立運行,包括 “雙切單”及“雙切單換主備”。
·單點切跟隨:故障修復后,要以備中心角色、跟隨模式啟動系統,同時把單點運行的主中心切換為雙點運行模式,使備中心開始追趕主中心,也就是處理其故障期間發生的業務。
·跟隨切同步:備中心追趕主中心,使得主、備中心數據基本一致后,要把主、備中心同時切換為同步模式,以恢復到正常的雙中心同步運行狀態。原因很明顯,同步模式顯然比跟隨模式具有更好的RTO指標。
基于應用級容災的基本原理,業務子系統的主、備系統同時處理業務的前提是,主、備系統均收到其上游業務子系統(X系統的輸入數據由Y系統提供,則稱Y為X的上游系統,X為Y的下游系統)主、備系統的下發數據。因此,各業務子系統的容災模式均受限于其上游系統的容災運行模式:上游系統處于單點或跟隨模式時,下游系統不能是同步模式,否則就會阻塞下游系統主中心的業務處理(主中心系統會一直等待備中心系統處理完成,但備中心業務子系統因為拿不到輸入數據,不可能完成相應的業務處理),而必須切換到跟隨模式。
在中國電信全國計費結算中心,智能交換平臺(下面簡稱“系統A”)負責其他4個業務子系統的文件上傳和下發,系統A的上傳模塊(A-上傳)是其他業務子系統的上游系統,而其下發模塊(A-下發)是其他業務子系統的下游系統。其他業務子系統B、C、D、E的上下游關系為:B和C都是E的上游系統,D與B、C、E間沒有數據輸入輸出關系。
容災切換操作是在不同主機、不同應用平臺、不同業務子系統上的一系列操作的集合。有些操作可以并發執行,有些則有嚴格的先后關系;有些是在局域網內部,有些則需要跨相對低速、高時延的主備中心互聯網絡;業務子系統可能處于正常狀態,也可能已經不正?;蛴捎诰W絡中斷而不可訪問;有些時候業務子系統瞬時較空閑、響應命令很快,有些時候業務子系統可能正忙、響應命令較慢。
以上所有差異,都可能導致操作命令執行失敗或超時。在發生異常的情況下,容災切換必須能夠自適應,即基于當前雙中心整體狀態選擇切換到可能的最優運行狀態。4個主要切換場景均涉及多個步驟,容災切換過程中可能出現的狀態組合和路徑數量太多,程序邏輯很難覆蓋全部場景,這是用傳統開發方法所不能解決的問題,也是容災切換自動控制的技術關鍵點所在。
針對這些問題,對Petri機制理論在全國計費結算中心應用級容災切換應用的適用性進行了深入分析。
Petri機制的概念最早是1962年德國學者Carl Adam Petri在其博士論文中提出來的。經過幾十年的發展,Petri機制已經發展出了包括著色Petri機制、時間Petri機制、隨機Petri機制等在內的多種高級Petri機制,并且逐漸被應用于多個領域的建模、分析和控制[5~7]。其中,荷蘭學者Vander Aalst在Petri機制的基礎上定義了 Workflow net(簡稱 WF-net),提出了 5種基本的分支/匯聚類型[8],如圖1所示。
其中,需要特別說明的是顯式異或分支和隱式異或分支的區別,這兩種分支是經典Petri機制所不能表達的。對于顯式異或分支,后續哪個變遷得以執行取決于前一個變遷的執行結果;而對于隱式異或分支,前一個變遷完成后,可以自主選擇任一個后續變遷執行。在容災切換的過程中,執行某個操作后可能出現多種可能的結果,此時需要使用顯式異或分支;在切換演練過程中,完成一個步驟后,可以選擇不同的后續步驟,此時需要使用隱式異或分支。

圖1 Petri網5種分支/匯聚類型
針對WF-net的分析和校驗,參考文獻[9]定義了被稱為健壯性(soundness)的性質。健壯性的非形式化定義是:一個WF-net模型在滿足以下3個條件時,被稱為是健壯的。
· 從初始狀態(只在代表開始的庫所(place)中有一個令牌(token))開始,在任何情況下,模型都可以運行到結束狀態(代表結束的庫所中有一個令牌)。
·模型運行到結合狀態時,除代表結束的庫所外,其他所有庫所都為空。
·模型中任何變遷都有被點火的機會。
[9]的研究證明,一個WF-net網N是健壯的,等價于在網N上增加一個從結束庫所到開始庫所變遷后形成的網同時是安全的、弱活的和一級活的。
可見,使用基于WF-net算法的Petri機制中間件對容災控制模型進行健壯性校驗并通過后,就可以保證在任何情況下都不會出現切換執行到某個步驟而無法繼續執行的情況,并且最終必然可以回到初始的正常狀態。也就是說,通過校驗的Petri控制模型能夠覆蓋所有可能的容災切換場景。
Petri網在容災切換控制方面的適用性分析見表1。

表1 Petri網對容災切換的適用性分析
中國電信全國計費中心的容災切換控制如圖2所示,其分兩級進行控制,分別為中心一級的計費網管控制和業務系統一級的容災平臺控制。兩級控制均通過將對應的Petri網模型運行于Petri網中間件上實現。切換過程中,Petri網中間件實時識別系統狀態,更新Petri網模型中庫所的令牌分布,并發出切換操作指令(變遷點火)。
Petri網分兩級的目的有兩個:一是控制Petri模型的復雜度,Petri網模型的復雜度與其中庫所數量呈指數級正相關,如果采用一級Petri網模型,模型將變得非常難以理解,也很難對其性質進行分析;二是各個業務系統均采用了相似的容災仲裁平臺,其控制邏輯基本相同,即這部分的模型可以復用。
通過將系統雙中心系統狀態、操作指令、指令執行結果有機地組織在Web界面中[12],向系統操作人員提供圖形化的容災切換面板,如圖3所示。對于普通的系統操作人員來說,無需理解Petri網模型中所包含的復雜控制邏輯。

圖2 中國電信全國計費中心容災切換控制系統架構

圖3 圖形化的容災切換面板
容災切換控制的基礎和核心是Petri網中間件,由建模工具、運算引擎、調用遠程主機命令集的客戶端、前臺操作界面、監控界面和管理員界面組成。
Petri建模工具在提供圖形化建模功能的基礎上,還提供多種Petri網性質自動分析和校驗的能力,可幫助模型設計人員檢查Petri網模型的正確性。Petri網中間件提供一套完整的Web Service集成接口,包括Petri模型的啟停、執行變遷點火、讀可點火變遷列表、讀庫所狀態、讀指定變遷狀態、讀變遷日志、讀遠程調用的業務系統命令集返回的日志等。Petri網中間件使用Java開發,可運行于各種平臺,計算資源占用少,對主機性能、數據庫空間要求很低。
基于Petri網中間件的開發過程是:調研業務系統的狀態和變遷;建立Petri網模型;接口開發和整體聯測。與傳統開發不同的是,基于Petri網中間件的開發過程沒有復雜的代碼編寫工作,業務邏輯均體現在圖形化的Petri網模型中,充分體現了Petri網作為圖形工具的優勢。
4.3.1 一級Petri網模型
一級Petri網模型實現兩類容災切換控制邏輯:采取整體切換的策略,即所有系統一起切換主備中心;系統間存在狀態控制關系,當某個上游業務系統以單點或跟隨模式運行時,其下游業務系統也必須切換到跟隨模式。生產中可能的狀態見表2,可定義出單個業務系統的庫所。某個庫所中擁有令牌時,則表示這個業務系統處于相應的狀態。顯然某個時間下只能有一個庫所擁有令牌。

表2 生產中可能的狀態
進一步分析合理狀態組合,即允許從哪個狀態遷移到另一狀態,即可畫出單個業務系統的Petri模型,如圖4所示,可以對此模型構造其可達圖,如圖5所示,并據此對模型的安全性、弱活性和一級活等性質進行分析,以檢查模型構建的正確性。

圖4 單個業務系統的Petri模型

圖5 單個業務系統的可達圖
通過分析各業務系統間狀態的控制關系,把代表各個業務系統的模型連接起來,構建出如圖6所示的計費網管層面Petri網模型并執行性質分析和正確性校驗??缦到y的有向弧代表了只有在某個系統處于特定狀態時,另一個系統才能執行某個切換指令。
4.3.2 二級Petri網模型
二級Petri網層面實現單個業務系統的容災切換控制邏輯,表現在以下幾個方面。
·雙邊啟動時(無論是同步還是跟隨模式),先啟動備系統,再啟動主系統;先啟動容災仲裁平臺,再啟動業務系統。關閉則正好相反,先關閉主系統,等待備系統處理完同步消息隊列中等待的任務后 (idx清倉),再關閉備系統。

圖6 計費網管層面的Petri網模型
·如果主系統發生故障(offline),主備切換完成后,自動啟動到單點,不用等待網管切換面板或容災平臺控制臺的指令;如果備系統發生故障(offline),也自動切換到單點,切換成單點后,向網管系統主動匯報,由計費網管層面的Petri網調度下游系統切跟隨。
·容災模式切換:業務系統在online或maintenance狀態時,容災仲裁平臺的同步/跟隨狀態可互相切換。當業務系統發生故障時,自動從同步狀態切到跟隨狀態。
·主備切換:maintenance狀態下可任意切換主備;北京業務系統offline/上海業務系統maintenance時,可從北京主切換為上海主;上海業務系統offline/北京業務系統maintenance時,可從上海主切換為北京主。
·同步消息隊列狀態:maintenance狀態下只能是隊列為空;同步模式下從隊列為空→不為空→接近清空(即隊列中消息數量≤1);跟隨模式下從隊列為空→不為空圮接近清空,單點模式下從隊列為空→不為空。
基于以上業務系統級的容災切換控制邏輯,設計各個業務系統和容災仲裁平臺的狀態,也就是Petri網模型中庫所的設計。
其中,業務應用系統的狀態有3種:online、maintenance、offline。online是正常運行態;maintenance是主備切換態,具有應用容災邏輯的進程都退出,而處于架構層的進程仍在運行中,如共享內存管理進程、網管監控進程等;offline是業務系統整體關閉或發生故障的狀態,所有進程均停止運行。容災仲裁平臺的狀態包括運行狀態(online/offline)、主備狀態(主系統/備系統)、仲裁模式(同步/跟隨)、單雙邊狀態(單邊/雙邊)。
idx清倉狀態代表了從主中心向備中心發送的同步消息隊列中消息的數量:已清倉表示主備業務處理是完全一致的,具備立即換主備的條件,此時備系統從時間和業務上都可以無縫接替主系統;接近清倉表示備系統比主系統最多相差1筆交易,若要執行主備切換,需等待備系統繼續完成這1筆交易;未清倉只會出現在跟隨和單點的情況下,表示備系統比主系統落后多于1筆交易。
兩級Petri網模型的關聯體現在:計費網管層面Petri網模型中業務系統庫所和這個業務系統二級Petri網模型的狀態(即業務系統、容災平臺和同步消息隊列的狀態組合)間的對應關系見表3。
對于代表單個業務系統容災切換控制邏輯的二級Petri網,基于以上的狀態分析可以設計出相應的庫所,結合一級Petri網的狀態切換要求,可以設計出需要支持的切換指令(即變遷)。模型設計完成后,同樣通過Petri網性質分析,對模型的正確性進行自動化的校驗,即滿足安全性、弱活性、一級活。

表3 兩級Petri網模型間的對應關系
上述兩級經典Petri網模型設計完成后,轉換為Petri中間件所要求的WF-net網,并在Petri中間件的建模工具中執行健壯性校驗,即可導入Petri計算引擎以執行容災切換邏輯控制。
4.3.3 應用效果
基于Petri網中間件的容災切換控制系統上線之前,在計費系統應用級容災切換演練中,5個業務系統分別由各自建設廠商的運維人員操作,操作團隊超過10人。由電信運維人員按照實現擬定的操作指令表逐一通知各廠商人員執行操作,并人工協調各系統間的控制關系。雙切雙和雙切單的切換時間均超過2 h,單切雙的恢復過程過于復雜,不得不采用人工恢復數據庫的方式完成。
基于Petri網中間件的容災切換控制系統上線后,中國電信于2010年11月組織了切換演練。實現由一位電信運維人員在容災切換面板上操控正常換主備、模擬故障、故障恢復等多個切換場景。整體雙切雙演練的總體切換時間已達到電信行業內最短的26 min,其中包括業務應用進程啟停所需的20 min,雙切單換主備在30 min左右完成,單切雙恢復到跟隨、跟隨恢復到同步,扣除備系統追趕的時間,操作過程分別在10 min左右。
通過比較,可以看到基于Petri網的容災切換控制有效實現了自動化,使得容災切換從需要眾多廠商參與的復雜工作,轉變為電信運維人員的一種日常操作。在降低系統運維工作量的同時,實現了應用級容災的預期指標,顯著提高了中國電信全國計費中心的業務連續性,達到國內電信行業領先水平。
中國電信全國計費結算中心應用級容災的難點來自于3個方面:存在多個應用系統,且相互間存在復雜的數據交互關系;需要實現多個容災場景,不同場景切換步驟不同;每個切換步驟都可能出現異常,容災切換需要能夠實現自適應并切換到最優運行狀態。
首次將Petri網理論和Petri中間件引入到中國電信行業的信息化建設中,充分利用Petri網基于實時狀態進行控制的特點,解決了應用級容災場景眾多、切換步驟復雜、容易出現異常等問題。
系統架構方面,應用級容災切換控制系統采用計費中心和業務系統兩級架構,采用兩級Petri中間件控制,在有效表現復雜的雙中心切換控制邏輯的同時,降低了單個模型的復雜程度,并可實現在多個業務系統間的復用。對Petri網模型進行自動化的分析和校驗后,可以確保容災切換控制系統中控制邏輯的正確性,由于控制邏輯非常復雜,通過人工方式檢查和測試保證這一點是基本沒有可行性的。
應用級容災切換控制系統上線后,極大地提高了容災切換的自動化程度,將原來超過2 h的容災切換時間壓縮到幾十分鐘,業務連續性指標達到國內電信行業領先水平。
基于實時狀態的系統并發控制是各行業應用的普遍要求。對電信行業信息化來說,其應用范圍也絕對不僅僅限于容災切換。為了充分發揮其應用價值,一方面需要研究在其他領域應用Petri網的可行性,如數據一致性、錯單回收等;另一方面需要擴展Petri網的應用范圍,從全國計費結算中心向中國電信各省公司進行推廣。
參考文獻
1 King R P,Halim N,Garcia Moina H,et al.Management of remote backup copy for disaster recovery.ACM Transactions on Database Systems,1991,16(2):338~368
2 Choy M H,Leong H V,Wong M H.Disasterrecovery techniques for database system.Communication of the ACM,2000,43(11):272~280
3 孫潔等.一種基于Internet的異地容災系統的設計和實現.計算機應用研究,2007,24(7):171~179
4 容災備份標準之國際Share78標準.http://storage.chinabyte.com/372/9080372.shtml,2009
5 林闖.計算機網絡和計算機系統的性能評價(第1版).北京:清華大學出版社,2001
6 林闖.隨機Petri網和系統性能評價(第2版).北京:清華大學出版社,2005
7 袁崇義.Petri原理和應用(第1版).北京:電子工業出版社,2005
8 Vander Aalst W M P.The application of petri nets to workflow management.The Journal of Circuits Systems and Computers,1998,8(1):21~66
9 Vander Aalst W M P.Verification of workflow nets.Application and Theory of Petri Nets 1997,1997(1248):407~426
10 Vander Aalst W M P.Putting Petri nets to work in industry.Computers in Industry,1994,25(1):45~54
11 Fehling R.A concept of hierarchical Petri nets with building blocks.In:The 12th International Conference on Application and Theory of Petri Nets,1991
12 賈釗等.一種基于Web管理的異地容災系統.計算機應用研究,2009,26(4):1389~1397