高可用 應用

2022-03-14 00:46:07 字數 3892 閱讀 8011

核心知識點:

2.應用的無狀態:應用伺服器不儲存上下文資訊,只進行業務邏輯處理。

3.負載均衡:將資料和流量分攤到乙個集群上,提高負載均衡的能力,失效轉移

4.**的高可用主要是基於應用的無狀態,但是總是有狀態

5.session管理機制和優缺點

a.session複製:浪費服務和系統資源,適合小型架構;

b.session繫結:不符合高可用的需求

c.利用cookie記錄session:受制於cookie大小,影響效能,但是簡單易用、可用性高、支援線性伸縮

d.session集群:可用性高、伸縮性好,適用於中大型架構

應用層主要處理**應用的業務邏輯,因此有時也稱作業務邏輯層,應用的乙個顯著特點是應用的無狀態性

所謂無狀態的應用是指應用伺服器不儲存業務的上下文資訊,而僅根據每次請求提交的資料進行相應的業務邏輯處理

多個服務例項(伺服器)之間完全對等,請求提交到任意伺服器,處理的結果都是完全一樣的。

1.通過負載均衡進行無狀態服務的失效轉移

不儲存狀態的應用給高可用的架構帶來了巨大便利,既然伺服器不儲存請求的狀態,

那麼所有的伺服器完全對等,當任意一台或多台伺服器宕機,請求提交給集群中其它任意一台可用機器處理,

這樣對終端使用者而言,請求總是能夠成功的,整個系統依然可用。

對於應用伺服器集群,實現這種伺服器可用狀態實時監測、自動轉移失效人物的機制是負載均衡

負載均衡,顧名思義,主要使用在業務量和資料量較高的情況下,當單臺伺服器不足其承載所有的負載壓力時,

通過負載均衡手段,將資料和流量分攤到乙個集群組成的多台伺服器上,以提高整體的負載均衡的能力。

目前,不管開源免費的負載均衡軟體合適昂貴的負載均衡硬體,都提供失效轉移功能。

在**應用中,當集群中的服務是無狀態對等時,負載均衡可以起到事實上高可用的作用。

當web伺服器集群中的伺服器都可用時,負載均衡伺服器會把使用者傳送的訪問請求分發到任意一台伺服器上進行處理,

而當伺服器10.0.0.1宕機時,負載均衡伺服器通過心跳檢測機制發現該伺服器失去響應,

就會把他從伺服器列表中刪除,而將請求傳送到其他伺服器上,這些伺服器是完全一樣的,

請求在任意一台伺服器上處理都不會影響最終的結果。

由於負載均衡的應用層實際上起到了系統高可用的作用,因此即使某個應用訪問量非常少,

只有一台伺服器提供服務就綽綽有餘,但如果需要儲存該服務高可用,

也必須至少部署兩台伺服器,使用負載均衡技術構建乙個小型的集群。

2.應用伺服器集群的session管理

應用伺服器的高可用架構設計主要基於服務無狀態這一特性,但是事實上,業務總是有狀態的,

在交易類的電子商務**,需要有購物車記錄使用者的購買資訊,使用者每次請求都是向購物車中增加商品;

在社交類的**上中,需要記錄使用者的當前狀態登陸、最新發布的訊息及好友狀態,使用者每次重新整理頁面都需要更新這些資訊。

web應用中將這些多次請求修改使用的上下文物件稱為會話(session),

單機情況下,session可由部署在伺服器上的web容器(如jboss)管理。

在使用負載均衡的集群環境中,由於負載均衡伺服器可能會將請求分發到集群任何一台應用伺服器上,

所以保證每次請求依然能夠獲取正確的session比單機時要複雜的多。

集群環境下,session管理主要有以下幾種手段。

(1)session複製

session複製時早期企業應用系統使用較多的一種伺服器集群session管理機制。

應用伺服器開啟web容器的session複製功能,在集群中的幾台伺服器之間同步session物件,

使得每台伺服器上都儲存有所有使用者的session資訊,這樣任意一台機器宕機都不會導致session資料丟失,

而伺服器使用session時,也只需要在本機上獲取即可。

這種方案雖然簡單,從本機讀取session資訊也很快速,但是只能使用在集群規模比較小的情況下。

當集群規模較大時,集群伺服器間需要大量的通訊進行session複製,占用服務和網路的大量資源,系統不堪負擔。

而且由於所有使用者的session資訊在每台伺服器上都有備份,在大量使用者訪問的情況下,甚至會出現伺服器記憶體不夠session使用的情況。

(2)session繫結

也可以根據cookie資訊將同乙個使用者的請求總是分發到同一臺伺服器上,當然這是負載均衡伺服器必須工作在http協議層。

這樣在整個會話期間,請求都在同一臺伺服器上處理,即session繫結在某台特定的伺服器上,

保證session總是在這台伺服器上獲取。這種方法又被稱作會話粘滯

但是session繫結的方案顯然不符合我們對系統高可用的需求,因為一旦某台伺服器宕機,

那麼該機器上的session也就不復存在了,使用者請求切換到其它機器後因為沒有session而無法完成業務處理。

(3)利用cookie記錄session

早期的企業應用系統適用c/s(客戶端/伺服器)架構,一種管理session的方式是將session記錄在客戶端,

每次請求服務的時候,將session放在請求中發給伺服器,伺服器處理完請求之後再將修改過的session響應給客戶端。

**沒有客戶端,但是可以利用瀏覽器支援的cookie記錄session。

利用cookie記錄session也有一些缺點,比如受cookie大小限制,能記錄的資訊有限

每次請求響應都要傳輸cookie,影響效能;如果使用者關閉cookie,訪問就會不正常。

但是由於cookie的簡單易用,可用性高,支援應用伺服器的線性伸縮,

而大部分應用伺服器要記錄的session資訊又比較小,因此事實上許多**都或多或少地使用cookie記錄session。

(4)session伺服器

那麼有沒有可用性高、伸縮性好、效能也不錯,對資訊大小又沒有限制地伺服器集群session管理方案呢?

答案就是session伺服器。利用獨立部署的session伺服器(集群)統一管理session,

應用伺服器每次讀寫session時,都訪問session伺服器。

這種解決方案事實上是將應用伺服器的狀態分離,分為無狀態的應用伺服器和有狀態的session伺服器,

然後針對這兩種伺服器的不同特性分別設計其架構。

對於有狀態的session伺服器,一種比較簡單的方法是利用分布式快取、資料庫等,

在這些產品的基礎上進行包裝,使其符合session的儲存和訪問要求。

如果業務場景對session管理有比較高的要求,比如利用session伺服器整合單點登陸(sso)、使用者服務等功能

則需要開發專門的session伺服器管理平台。

Keepalived高可用應用

一 軟體安裝配置 1.軟體安裝 yum install y keepalived2.服務配置 root lb01 cat etc keepalived keepalived.conf configuration file for keepalived global defs notification...

用heartbeat實現應用高可用

一 準備 1.機器 test03 10.0.0.232 test04 10.0.0.233 主 二 工具安裝 1.安裝heartbeat heartbeat 管理虛擬ip的高可用和服務 安裝步驟 apt get install drbd8 utils heartbeat y 啟動heartbeat服...

高併發 高可用

高併發 提高系統併發能力的方法主要有兩種 前者垂直擴充套件可以通過提公升單機硬體效能,或者提公升單機架構效能,來提高併發性,但單機效能總是有極限的,網際網路分布式架構設計高併發終極解決方案還是後者 水平擴充套件。網際網路分層架構中,各層次水平擴充套件的實踐又有所不同 1 反向 層可以通過 dns輪詢...