1. 程式人生 > >一種高可用性、高效能、高實時性的伺服器架構設計

一種高可用性、高效能、高實時性的伺服器架構設計

【主要從期貨市場的需求獲取靈感】

一、需求
(一)、高可用性
1、持續執行無間斷
2、單點故障不影響
3、執行期間可監控
4、故障可跟蹤排查
5、失敗恢復無間隔


(二)、高效能
6、負載均衡高並行


(三)、高實時性
7、請求響應低時延
8、變化可主動通知

二、關鍵點分析
1、網路故障的處理
   (1)、網路線路故障
   (2)、網路傳輸失敗
   (3)、網路應用阻塞
   (4)、網路應用異常

2、應用故障的處理
   (1)、應用系統崩潰
   (2)、應用邏輯處理失敗
   (3)、應用資源分配失敗
   (4)、應用請求排程拒絕

3、負載均衡和多點傳輸
   (1)、請求的多點分配
   (2)、報文緩衝失敗重路由
   (3)、負載均衡和事務的可延續性

4、實體標識
   (1)、標識的全域性唯一性
   (2)、實體的可定位性
   (3)、實體名字、實體標識、實體位置

三、一些構想
1、構建一個虛擬網路,這個網路基於TCP/UDP傳輸層之上,保證在這個網路中傳輸的資料是完全、可靠、快速的。
2、在這個網路中網路的所有實體都有一個唯一的名字,這個名字可以是固定的,也可以是動態,但是作為提供服務的實體必須有固定的名字
3、實體標識是由某個管理器統一分配的,在實體在網路的存續期間是固定的,可以在管理器負責的範圍內必須是唯一的,但不要求全域性唯一
4、實體位置可以是動態的,只要實體的接入點知道就可以了。他必須由實體標識繫結

5、任何一個實體,他的資料來源可以是多個的,相當於安裝了多個網絡卡。
6、多個實體之間可以互相繫結,支援名字的重新繫結。當某個實體發生故障,可以由這一組中的任意一個實體繫結發生失敗的那個實體的名字,來模擬原實體處理後續的報文。

7、在這個虛擬網路中,建立一個負載均衡器,每個均衡器負責排程若干個實體,均衡器負責分配所有的請求,返回的結果可以通過均衡器轉發,也直接由這些實體輸入到虛擬網路中。

8、多個均衡器可以連線到同一個負載實體,均衡器和負載實體的通訊協議由他們之間規定,和虛擬網路中各個實體的通訊協議可以不同。

9、保證每個實體可以從多個網路路徑接入虛擬網路,避免單個網路路徑故障,導致服務無法繼續。
10、在虛擬網路,所有的實體具有唯一的標識,這個標識可以為網路直接識別和路由。實體名字不為虛擬網路識別,但可以轉化為實體標識。

11、虛擬網路建立的是一個數據傳輸通道,負載均衡器和實體名字動態繫結是網路高可用性和高效能的一個策略。

12、當虛擬網路建立之後,可以在這個網路上建立服務管理器平臺。服務管理器平臺只提供服務的執行環境,他本身不直接實現業務邏輯,每個業務邏輯可以獨立實現,或者共存於同一個服務管理器平臺上。
13、業務邏輯不是虛擬網路上的實體,所以他沒有虛擬網路上實體名字,但他也是同樣是有名字,不過需要通過網路實體來先定位,然後通過網路實體來再定位服務名字。
14、如果是服務管理器平臺通過均衡器連線入虛擬網路中,那麼均衡器充當的是閘道器的作用,他將目標位置修改為某個服務管理器,就可以將包轉發到正確的伺服器上。
15、事務性是這個伺服器必須處理的問題,如果記錄和儲存某個請求的上下文關係呢?顯然,在一般情況,由執行具體業務邏輯的服務來記錄是最好的選擇,但一旦通過均衡性來連線網路,就必須保證後續的請求到達同一個業務邏輯的服務。

16、對於服務管理器平臺來說,當他通過均衡器連線虛擬網路或者直接連線虛擬網路時,如何採用相同的策略保證事務性呢是必須考慮的問題。顯然,服務管理器平臺本身負責需要負責事務狀態性的維護,但是均衡器也必須對狀態性進行維護,否則他無法保證正確傳送事務後續報文到到指定的服務。

17、由於處於負載均衡和高可用性的考慮,必須允許服務之間可以互相接管。當一個服務被其他服務接管時,那麼這個服務原來操作的資訊同樣也可以被其他服務使用,於是必須允許資訊在服務之間進行轉移。

18、實體名字可以採用URI協議,通用資源標識,格式為PROTOCOL://SERVER_PATH/SERVER_NAME,預設情況下,PROTOCOL為FILE。檔案、套接字等,都可以通過這個標識來識別。名字的解析和定位可以通過專門的元件來負責。

19、服務和服務之間的通訊同樣可以通過URI來定位。由於虛擬網路只能識別識別符號,所以名字到識別符號之間的轉換同樣是必須的。

20、事務的可靠性可以通過儲存、重發、重新路由。但是這種可靠性是否需要由路由器來完成,還是直接由傳送端或者接收端負責呢,這個問題需要斟酌。如果由路由器完成可靠性,那麼當報文到達接收端的時候,可能已經超出傳送端可接受的程度,那麼對傳送端來說,如果認為他已經失敗了,而重發了新的請求,那麼已經傳輸到接收端的報文應該如何處理呢。

21、當一個事務報文到達服務管理器時,可以認為這個報文已經傳輸完畢,這個報文允許停留在管理器裡,由排程系統分配給具體服務實體。管理器在排程報文時,必須注意報文可能存在的合併規則。

22、當一個報文的處理環境要求上下文支援時,允許從服務管理器提取上下文環境。這個上下文應該可以支援特定使用者的,或者說應該是會話級的,甚至是更小粒度的事務級的。

23、對服務實體來說,最好是單程序的,可以避免服務實體之間的互相影響,也便於服務管理器對他們的操作。當然,將服務實體以共享庫的方式嵌入到管理器中,作為一個子模組也是允許的。參考WINDOWS的MMC和LINUX的XINETD這樣的管理方式,APACHE以及JABBERD都是將模組執行在主程序中,這樣的方式也是可以的。每個方式都有利弊,需要使用輔助的手段趨利避害,增加可用性。

24、如果是單程序的,那麼可以啟動另外一個程序來STANDBY,當主程序失敗時,那麼STANDBY程序馬上接管。這種方式必須處理程序的資料可以共享,以及哪些資料需要共享。因為當STANDBY程序成為主程序時,必須儘量少初始化環境而儘量多地使用原來主程序的資料。

25、如果是多程序的,那麼高可用性同樣也可以借鑑STANDBY方式,但重新啟動失敗程序也是可以考慮,只要在可接受時間內完成。正在處理時的事務必須能夠取消,重新開始,或者從失敗點繼續完成。關於事務進展的粒度和狀況就必須是可跟蹤而且是可記錄的。

26、不同負載體之間的均衡可能存在某些會話或者事務在負載體之間進行轉移,允許部分資料或者全部資料在負載體之間進行交換是必須考慮的問題。
    
27、狀態的可監控性,錯誤的可跟蹤性是保證系統高可用性的一個重要措施。增加系統介面,保證服務實體可以對自己的正確性、完整性、一致性進行監控。

28、當某個條件被觸發時,必須主動通知需要知道這些事件的實體,這樣可以提高實體反應的實體性。

29、實時觸發的事件以及對這個事件的反應時間差必須很短,反應時間差是實時性的一個重要標識。事件驅動以及如何處理低速過程或者是長等待過程和高速過程之間的矛盾是必須注意的。這個可以借鑑WINDOWS的完成埠方式或者是LINUX的EPOLL模型。先註冊需要關注的事件,當這些事件出現的時候,管理器將這些完成的事件及其附加資訊返回給請求者。服務實體或者管理器將資源請求過程轉交給其他程序、執行緒,然後繼續處理。只能當資源被滿足後,才處理特定的事務。

30、自動升級也是建議被支援的,這對系統的維護至關重要。不過同樣需要注意的是,自動升級後,在不同版本之間的相容性。必須允許存在不同的版本協同執行。升級失敗和可在失敗點繼續也是需要考慮的問題。即使升級失敗了,保持原系統依然可用是必須保證的。

31、虛擬網路、服務管理器、服務實體的升級必須有不同考慮,虛擬網路本身升級的話是能否通過自身傳輸是需要重要考慮的。通過應用層傳輸升級檔案,然後自動重新啟動,這個過程有點象作業系統的自動重啟。在虛擬網路重新啟動的時候最好能夠被無縫接管,當虛擬網路啟動完成後,向其他實體宣告自身。

32、服務管理器、服務實體的升級是在應用級別的系統。這些系統的升級和虛擬網路稍微簡單一點。如果將自動升級視為一個服務,那麼服務管理器也面臨和虛擬網路同樣的問題,不過這些採取和虛擬網路一樣的策略。由上層應用傳輸資料,然後執行本層系統一個指令來完成自動升級這個過程。

33、虛擬網路主要負責定址和報文傳輸的過程,這個過程可以基於不同的傳輸層協議,如TCP、UDP、IPX等。所以虛擬網路中傳輸的報文可以是獨立的,報文的邊界最好參考UDP那樣,直接由網路層保證。TCP的資料流在很多方面有不少限制,多數情況下,應用的報文應該是有邊界的。將現在網路的功能模組可以部分移植到虛擬網路上,虛擬網路的功能模組實際有部分可以借鑑現實網路的功能模組。

34、XML的擴充套件性和靈活性是很有優勢的,但是的解析速度在高實時性的要求下有很有缺陷。在系統內部可以使用類XML,但是處理速度更加迅速的格式,我們可以通過介面將我們內部的格式輸出為XML格式,並且將外部的XML格式轉化為內部自己的格式。

35、一個類XML格式,型別1+長度+型別2,可以標定一個標籤。如果型別2是個資料型別,那麼後繼的緩衝區是型別1標籤攜帶的資料。我們可以將型別預先定義幾個公共型別,同時必須提供擴充套件介面供其他需求使用。由於XML的字元必須符合一定的規範,所以需要考慮雙向轉化的問題。

36、必須提供輔助工具,將原來的、基於傳統網路協議的應用連線到虛擬網路中,這樣可以無縫連線和轉化。比如HTTP、FTP等應用。

四、模組設計
1、系統級介面,主要實現類作業系統的功能,可以在這個層次實現跨平臺功能。
2、資源管理器,將所有的資源訪問按統一格式處理,類似於LINUX的檔案系統,提供一個簡單的訪問介面。
3、資源標識分析器,按統一格式對資源進行歸類,可以將資源使用一定格式的字串進行標識。對這個字串可以反向解讀出他的實際含義,並呼叫相應的處理機制。
4、虛擬網路路由以及報文傳輸。
5、程序間的互相守護,互相檢測,進行主副備份。
6、負載均衡器和多路由接收器
7、事件管理器,允許註冊監聽器。
8、連續區間的多段可連續增長和回收。
9、編碼和解碼演算法,主要考慮演算法時間複雜度和加密強度