高可用架構的6大常規方案

什麼是高可用架構

在介紹高可用架構的方案之前,先說一下什麼是高可用架構,高可用架構應具備但不限於以下特徵:

  1. 主從切換

    很好理解,當其中一臺機器的服務宕機後,對於服務調用者來說,能夠迅速的切換到其他可用服務,從服務升級爲主服務,這種切換速度應當控制在秒級別(幾秒鐘)。

    當宕機的服務恢復之後,自動變爲從服務,主從服務角色切換。主從切換一定是要付出代價的,所以當主服務恢復之後,也就不再替換現有的主服務。

  2. 負載均衡

    當服務的請求量比較高的時候,一臺服務不能滿足需求,這時候需要多臺機器提供同樣的服務,將所有請求分發到不同機器上。

    高可用架構中應該具有豐富的負載均衡策略和易調節負載的方式。

    甚至可以自動化智能調節,例如由於機器性能的原因,響應時間可能不一樣,這時候可以向性能差的機器少一點分發量,保證各個機器響應時間的均衡。

  3. 易橫向擴展

    當用戶量越來越多,已有服務不能承載更多的用戶的時候,便需要對服務進行擴展,擴展的方式最好是不觸動原有服務,對於服務的調用者是透明的。

業務中接觸到的6種高可用方案

LVS+Keepalive

LVS的全稱是linux visural server,即虛擬的linux機器,這個名稱再恰當不過了。該方案的實現大概是這樣的。

高可用架構的6大常規方案

在多臺linux機器上安裝IPVS和keepalive,IPVS實際上是一個虛擬的linux服務,具有linux機器的部分功能,各個機器上分別啓動一個Linux虛擬服務(虛擬機),這些linux虛擬服務(虛擬機)設置爲同一個IP(稱之爲虛IP),這樣在一個內網中就只能有一個linux虛擬服務能夠搶佔到這個虛擬IP。所有的請求都指向這一個虛IP,假如搶佔到虛IP的機器掛了,這時候其他linux虛擬服務就會有其中一個搶佔到虛IP,對於服務調用者來說,仍然可以訪問到服務。keepalive的作用就是用來檢測linux虛擬服務是否正常的。頭條插入代碼實在不方便,需要詳細的配置方案的可以私信我。


NIGNX

nginx本是一個反向代理服務器,但由於豐富的負載均衡策略,常常被用於客戶端可真實的服務器之間,作爲負載均衡的實現。

高可用架構的6大常規方案

說一下什麼是反向代理和正向代理:

正向代理:被代理的是客戶端,比如通過XX代理訪問國外的某些網站,實際上客戶端沒有權限訪問國外的網站,客戶端請求XX代理服務器,XX代理服務器訪問國外網站,將國外網站返回的內容傳給真正的用戶。用戶對於服務器是隱藏的,服務器並不知道真實的用戶。

反向代理:被代理的是服務器,也就是客戶端訪問了一個所謂的服務器,服務器會將請求轉發給後臺真實的服務器,真實的服務器做出響應,通過代理服務器將結果返給客戶端。服務器對於用戶來說是隱藏的,用戶不知道真實的服務器是哪個。

關於正向代理和反向代理,聽起來比較繞,仔細理解,體會也不難明白到底是什麼意思。

用nginx做實現服務的高可用,nginx本身可能成爲單點,遇見的兩種解決方案,一種是公司搭建自己的DNS,將請求解析到不同的NGINX,另一隻是配合keepalive實現服務的存活檢測。

zookpeer

想必接觸過分佈式服務的應該對zookeeper都有所瞭解,最起碼也聽說過吧!zookeeper本身實現了高可用,zookeeper本身的高可用及原理在這兒不詳細介紹,這裏只介紹如果通過zookeeper管理服務。

zookeeper本身可以存儲數據,服務啓動之後可以向zookeeper註冊,調用者可以到zookeeper上發現服務。提供服務的一直保持與zookeeper的通信,通過心跳證明服務的可用性。當服務掛掉之後,對應註冊的接點會消失,這時候調用者就不能找到已經失效的服務。

關於zookeeper實現服務高可用,以後會詳細介紹。

高可用架構的6大常規方案


由客戶端實現的高可用方案

以memcache 爲例,客戶端同時與好幾個服務保持連接,按照一定的規則去調用服務,當服務掛掉之後,重新調整規則。當然,如果服務器不做主從備份的話,可能會造成部分數據丟失。感興趣的可以關注以後發的關於對memache的詳細介紹的文章。

服務之間通信實現高可用

這種經典的案例就是redis了,各個redis之間保持通信,當主服務掛掉之後從服務就會升爲主服務。對於客戶端來說幾乎是透明的。

通過中間件實現高可用

這裏暫時不詳細介紹,說一下我瞭解的幾個中間價:mycat 實現mysql高可用的中間價。

早期版本redis不支持集羣,那時候redis的高可用也是基於中間件來做的。


總結

文章對常見的高可用方案做了簡單的介紹,由於高可用涉及內容較多,短短一篇文章不能很詳細的介紹,比如:前兩種高可用方案只適用於無狀態服務,如何將有狀態服務變爲無狀態服務將會在後面的微服務相關的文章中介紹!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章