摘要:介紹了在分布事務監控器OnceTX中采用的服務器/集群管理器/應用域管理器的三層集群結構,并給出了兩級負載平衡策略和自適應的域間拓撲結構管理算法#65377;它們已在OnceTX中實現,并達到了預期的目的#65377;
關鍵詞:集群;事務監控器;兩級負載平衡;拓撲結構管理
中圖分類號:TP393.09文獻標志碼:A
文章編號:1001-3695(2007)04-0201-03
在分布式系統中,利用集群技術可以提高系統性能#65380;可用性以及可伸縮性[1]#65377;分布事務監控器通常也采用集群方式進行構造[2]#65377;OnceTX是中國科學院軟件所自主開發的符合X/Open DTP模型的分布事務監控器#65377;OnceTX 1.0采用了兩層集群結構(應用服務器/集群服務器),集群服務器之間形成平面網狀結構,是一種全連接的對等關系#65377;但隨著大企業之間#65380;總公司的各個子公司之間的合作變得越來越緊密,企業計算中對于跨不同組織#65380;跨不同地域的事務服務的協作需求在逐步增長,跨地域#65380;跨部門部署事務監控器的情況將會越來越普遍#65377;在這樣的場景中,OnceTX 1.0的全對等集群結構顯得不再適用#65377;大型應用常需要根據服務類型#65380;所屬區域或者所屬組織的不同,將應用劃分為若干邏輯上獨立的應用域#65377;除了在域內使用事務服務外,在應用域之間也可以實現跨域的事務#65377;OnceTX 2.0采用了基于服務器/集群管理器/應用域管理器(ContainerClusterServerDomainServer)的三層樹狀集群結構,從而為上述問題提供了解決方案#65377;
1三層樹狀集群結構
對于大規模的事務型應用系統,特別是跨地域#65380;跨組織的大型事務型應用,如果不劃分應用域,那么可以直接采用OnceTX 1.0#65377;但采用OnceTX 1.0會帶來一些缺陷:
(1)為了維護集群所構成的全連接的網狀拓撲結構,集群中的各個節點都要保留著相同的全局信息,即使某個節點從來就不需要使用某個服務,它也必須保存該服務的信息,這樣的信息保存方式會導致大量信息的冗余,同時也會給服務訪問和控制的安全性帶來隱患#65377;
(2)為了保持各個節點上信息的一致性,需要進行大量的廣播通信,從而帶來很大的網絡開銷#65377; (3)在應用開發和部署上會帶來一些不必要的限制#65377;例如OnceTX 1.0中,事務服務的名字必須全局唯一,以便系統在所有集群服務器上對該服務的請求進行負載平衡#65377;但對跨地域#65380;跨組織的大型應用,在每個集群服務器上部署相同的服務往往是不現實的,如果這個服務涉及訪問的數據庫僅在某個節點上存在的話,這樣,事務服務名字的唯一性就變成了一種約束,而不能帶來好處#65377;
對于大規模的事務型應用系統,在根據服務類型或者是所屬區域#65380;組織的不同,將整個應用劃分成幾個應用域后,可以在每個應用域中部署三層樹狀集群結構的OnceTX 2.0#65377;
OnceTX 2.0的三層集群結構是指服務器/集群管理器/應用域管理器這三層#65377;
應用域管理器層是三層結構的最上層#65377;每個應用域有且只有一個應用域管理器,域管理器之間形成一個全連接的網狀拓撲結構#65377;應用域管理器維護應用域內的多個集群之間的拓撲結構,所有集群間的信息交互必須通過應用域管理器來完成;應用域管理器還維護各個應用域間的拓撲結構,并完成域間的消息轉發,從而實現跨域的服務調用#65377;服務名僅要求在域內唯一,所以不同域的同名服務將視為不同的服務#65377;
集群管理器層是三層結構的中間層#65377;一個應用域可以部署多個集群管理器,但每個集群管理器僅隸屬于一個應用域#65377;集群管理器保存本集群提供的所有服務的信息,并管理本集群內部署的所有服務器的運行#65377;集群管理器還負責及時將本集群的服務更新信息發給域管理器以維持域管理器服務信息的正確性#65377;同時客戶通過集群管理器接入整個集群系統,集群管理器負責維護與客戶之間的連接,將客戶的應用服務請求轉發到相應的服務器進行處理,并將服務結果返回給客戶#65377;
服務器層是三層結構的最底層#65377;整個集群系統提供的所有應用服務都部署在服務器上,服務器是真正執行服務請求的節點#65377;服務器接收來自于集群管理器的服務請求,完成服務后,將服務結果返回給集群管理器#65377;
這樣三層集群結構構成了兩級集群#65377;其中,不同域的應用域管理器形成了一個松耦合的集群,該集群用于支持跨地域跨組織的服務相互訪問,從而支持地理可伸縮性和管理可伸縮性;而一個域內的所有集群管理器形成緊耦合的集群,該集群負責域內服務負載的分派和平衡,從而在域內提高規模可伸縮性,并支持系統獲得高性能和高可用性#65377;
圖1給出了OnceTX 2.0的一個典型的部署#65377;其中,域管理器(Domain Server)#65380;集群管理器(Cluster Server)#65380;服務器(Container)和客戶分別部署在單獨的機器上#65377;
采用三層樹狀集群結構為大規模的事務應用的部署帶來了很多的好處:
(1)支持更加復雜的網絡部署#65377;引入了應用域的概念后,各個不同企業的分布式應用可以方便地進行協同合作,可以很快地實現各個企業之間的交易邏輯和合作#65377;而同時各個企業內部的部署是獨立的,某一個企業內部集群結構的變動并不會影響現有的各個企業應用域之間協作的正常運行#65377;
(2)有效減少通信量和信息冗余#65377;采用樹狀的拓撲結構,信息可分級存儲,不同級別的節點上保留的信息是不同的,只保留它們這一級需要知道的信息,從而減少了信息的冗余;同時,在節點之間更新信息時也只需要點對點通信,減少了為了保持信息的一致性而帶來的網絡開銷#65377;
(3)易于實現安全控制#65377;采用分級信息機制,這樣很容易將安全級別的概念與信息級別的概念映射起來,從而支持分級安全控制#65377;在信息分級機制下,可以劃分更適合應用的安全控制粒度,并在不同級別的節點上可以采用不同安全控制策略,使得企業可以為自己的分布式應用靈活地定制安全訪問控制策略#65377;
(4)便于管理#65377;采用樹狀拓撲結構后,管理信息也采用分級存放的機制,不同級別節點上的管理模塊所完成的管理功能和維持的管理信息是不同的,實現了整個分布式應用的分區管理#65377;
2兩級負載平衡策略
在OnceTX從兩層集群結構(應用服務器/集群服務器)擴展為三層樹狀集群結構(服務器/集群管理器/應用域管理器)后,負載平衡策略也要進行相關的擴充#65377;
在部署OnceTX 1.0的應用場景中,用戶通過集群服務器接入系統#65377;當集群服務器接收到客戶的服務請求時,會根據集群內部各個應用服務器的負載情況,選取一個負載較小的應用服務器來提供服務#65377;而在部署OnceTX 2.0的應用場景中,用戶仍是通過集群管理器接入系統的#65377;當集群管理器發現所接收到的應用服務請求不能由本集群完成時,就應該將應用服務請求經由域管理器轉發到其他提供該應用服務的集群管理器#65377;如果有多個集群管理器提供相同種類的應用服務,就需要在集群服務器間實現負載平衡#65377;在三層樹狀集群結構中,還需要在應用域管理器一級實現集群間負載平衡#65377;為此,筆者提出了一種新的負載平衡策略即兩級負載平衡策略:在應用域管理器一級,提供域內集群間的負載平衡服務;在集群管理器一級,提供集群內服務器間的負載平衡服務#65377;
三層樹狀集群結構的兩級負載平衡的過程如下:
(1)客戶從某一個集群管理器接入集群系統后,發出服務請求#65377;
(2)集群管理器接收到該服務請求后,首先判斷該項服務是否由本集群提供#65377;若本集群內提供該項服務,則根據集群管理器一級的負載平衡策略,將服務請求轉發到負載最輕的服務器進行處理;若本集群內不提供該項服務,集群管理器就將該服務請求轉發到本應用域的應用域管理器#65377;
(3)應用域管理器首先判斷該項服務是否由本應用域提供#65377;若本應用域內提供該項服務,則根據應用域管理器一級的負載平衡策略,將服務請求轉發到負載最輕的集群管理器進行處理#65377;若本應用域內不提供該項服務,域管理器就將該服務請求轉發到相應的提供該應用服務的應用域#65377;
兩級負載平衡的算法如下:
(1) 在服務器(Container)節點
(2)在集群管理器(Cluster Server)節點
(3)在域管理器(Domain Server)節點
3自適應的域間拓撲管理算法
為了向用戶提供最大程度的易用性[5],OnceTX 2.0致力于加強拓撲管理的自適應特性,最大程度地減少用戶的手工干預,提供透明的拓撲配置功能#65377;
在OnceTX 2.0中,應用域之間的拓撲結構是一種全連接的網狀結構#65377;每個應用域管理器運行在下面這兩種運行模式之一:主管理器模式(Master)和從管理器模式(Slaver)[4,5]#65377;
當應用域管理器運行在主管理器模式時,它負責對整個域間拓撲結構的變化(新的應用域的啟動#65380;已存在的應用域退出#65380;應用域管理器崩潰等)作出響應,并通知其他應用域管理器#65377;整個域間拓撲結構中只能有一個應用域管理器運行在主管理器模式#65377;
當應用域管理器運行在從管理器模式時,它與主管理器同步整個域間拓撲結構信息,并在本機維護一個完整的域間拓撲結構,以便在主管理器不能正常工作時選舉出一個從管理器接替原主管理器的工作#65377;
(1)拓撲結構的自適應配置#65377;隨著集群部署規模的擴大,常常會在已有集群系統的基礎上加入新的應用域#65377;當新的應用域啟動時,域管理器將自動監測整個域間的拓撲結構,自動更新現有的域間拓撲結構,進行自適應的配置#65377;
當一個新的應用域啟動時,域服務器自動進行域間拓撲結構配置的具體步驟包括:
①一個應用域管理器啟動;②根據配置文件中的信息,向可能存在的主管理器發送Lookup消息;③等待主管理器的應答,若在規定時間內收到Echo消息的應答,則轉④,若超時收到,則轉⑦;
④發送Register消息向主管理器注冊本機;
⑤從主管理器獲得域間的當前拓撲結構;
⑥向其他域管理器發送消息,交換必要的信息,并轉⑨;
⑦若本應用域管理器是第一個啟動的應用域管理器,將自身設置為主管理器;
⑧監聽以后啟動的應用域管理器發送的Lookup請求;
⑨完成整個應用域的啟動#65377;
(2)主管理器選舉算法#65377;當主管理器出現故障時,其他從管理器將根據本機維護的域間拓撲結構信息選舉具有最大ID的應用域管理器作為新的主管理器#65377;
OnceTX 2.0中,應用域管理器的全局ID是一個64位整數,它由服務器的IP地址#65380;服務端口#65380;啟動時間#65380;硬件平臺和操作系統等信息生成,具有全局唯一性,因此上述算法能保證多個應用域管理器均能得出唯一的相同結果#65377;如果選出的具有最大ID的主管理器剛好是本機,則該應用域管理器就將運行模式切換為主管理器模式#65377;
(3)主管理器的動態合并#65377;在域間拓撲結構設計中,有且僅有一個應用域管理器運行在主管理器模式#65377;但在某些情況下,會出現整個集群系統中同時存在兩個或多個主管理器的情況,這可能是由于網絡連接中斷后的再恢復#65380;域管理器的超時設置值相差較大以及用戶進行了錯誤的手工參數配置等原因引起的#65377;
若出現了多個主管理器,那么每個主管理器都把本機當做唯一的主管理器,并主動向其他從管理器發布域間拓撲結構變化的信息和管理命令#65377;在很多情況下,多個主管理器的存在會引起域間拓撲結構的混亂和潛在的錯誤,因此需要合并多個主管理器#65377;由于很多具體應用要求應用域管理器不能停機,不能通過靜態地重新配置集群服務參數并重啟應用域管理器來進行主管理器的合并,只能對主管理器進行動態合并#65377;
筆者考慮最基本的兩個主管理器的動態合并#65377;如果需要動態合并更多數量的主管理器,只需要不斷進行兩個主管理器的合并即可#65377;
兩個主管理器的動態合并包括以下兩個主要步驟:
步驟一——發現#65377;主管理器在正常工作情況下,將定期在網絡中廣播,表明自己的主管理器身份,同時監聽網絡中的同類型消息#65377;當某個主管理器收到一個不是自身發出的消息時,表明它收到了另一個主管理器發出的廣播消息,這意味著整個系統中存在兩個主管理器#65377;于是,它將該情況通知另一個主管理器#65377;
步驟二——合并#65377;在兩個主管理器都知道對方的存在后,將進行它們的動態合并:
①兩個主管理器根據主管理器選舉算法,選舉其中一個為合并后的主管理器,另一個主管理器則要切換自身的運行模式;
②兩個主管理器交換各自維護的拓撲結構信息,并與已有的信息合并,以得到合并后的集群系統的拓撲結構信息;
③兩個主管理器將合并后的集群系統的拓撲結構信息通知各自原來的從管理器,一部分從管理器需要修改自身的主管理器的設置;
④需要進行運行模式切換的主管理器將本機的運行模式變為從管理器#65377;
4結束語
為了適應大規模事務型應用系統的需要,分布事務監控器通常也使用集群方式進行構造,以提高整個系統的性能#65380;可用性以及可伸縮性#65377;本文介紹了在分布事務監控器OnceTX中采用的服務器/集群管理器/應用域管理器的三層集群結構,并給出了兩級負載平衡策略和自適應的域間拓撲結構管理算法#65377;這些方法已經在分布式事務監控器OnceTX中得到實現,并取得了良好的效果#65377;
本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。