1. 程式人生 > >閒談高可用與負載均衡

閒談高可用與負載均衡

閒談高可用和負載均衡

    高可用叢集和負載均衡叢集想必大家或多或少都聽說過,但是很多人往往把這兩個搞混在一起,不加區分地使用這兩個概念。雖然說很多負載均衡的裝置有著高可用的特性,或者高可用的機器使用著負載均衡的方式分發流量,事實上,高可用和負載均衡是兩個完全不同的概念,兩者關注的地方是不同的,而且很多在很多場景下兩者的需求是衝突的。

  那,什麼是高可用和負載均衡呢?兩個概念各自關注的地方又是什麼?

  高可用性:顧名思義,儘可能採取措施減少系統服務中斷時間,進而提高業務程式持續對外提供服務的能力。

  負載均衡:將高併發的請求資料分發到不同的叢集結點,儘量平衡系統所有資源的壓力,從而提升整個叢集對於請求的處理能力。

    以上的內容非常科學地定義了高可用性和負載均衡,但是對於很多人他沒接觸過這兩個概念一時還不好理解怎麼辦,那就用一個我們工作中通俗的例子來跟大家聊下高可用和負載均衡。

      工作崗位有產品人員,程式設計師和運維人員之分,一般一個產品人員會帶著一群程式設計師開發一個產品,一個開發人員背後又有著系統運維,網路運維,業務運維,平臺運維的支援。這個時候,產品人員就相當於負載均衡中的分發器,程式設計師相當於負載均衡叢集的結點,產品人員作為分發器將各種收集來的使用者請求轉發給不同的程式設計師,當然分發給不同程式設計師處理的事務可能相同也可能不相同。假如說不考慮產品人員擔心程式設計師的可用性,那一般情況下,一項需求是不會交給兩個人去做的,每個程式設計師做的都是不相同的事務。同樣,每個開發人員也相當一個分發器,一個應用需要上線需要做的事情非常多,包含系統,網路和應用環境以及一些與業務相關的配置,這個時候也是一個非常典型的負載均衡模型,一個開發人員提一個需求單,然後處於不同角色的運維人員然後處理自己相關的事情。當一件比較複雜或者一大堆比較繁瑣的事情需要處理的時候,如果由某個單一的系統來處理,需要的時間以及相應的資源可能比較多,使用負載均衡叢集將不同的請求分發到不同的結點,從而提高整個叢集對於事務的處理能力,負載均衡叢集相對於單個結點有著更高的效能。

  那什麼時候我們會考慮高可用性呢?同樣是產品人員和程式設計師,產品人員發現某個程式設計師請假了,那麼他就有可能要求開發團隊的領導給他再安排一個人繼續處理相同的事務,從而保證產品如期開發完成。當叢集中某一個結點無法提供預期的服務的時候就使用另一個結點替換當前結點來進行服務。

 再通俗點講就是,

  美國的總統和副總統更像高可用叢集,只有等到總統掛了副總統才派得上用場,這叫高可用;像我朝各個正職和副職(比如正校長和副校長,正校長可能姓付,副校長也可能姓鄭)的關係,更像負載均衡的關係,各個正副職往往各司其職,沒有說哪兩個人乾的事情是一模一樣的,或者某個人平時不幹事就等正職那位夥計掛掉然後順利成章就接手正職的職責和權利的。

負載均衡一般不關注叢集中各節點對於請求的處理能力,很多時候會根據節點處理能力的不同而使用不同的分發策略,比如輪詢,最小連線,最快響應等。高可用比較關注叢集中結點處理請求能力的對等性,因為一單主節點出現問題備用節點需要承受主節點所有的請求壓力,一旦處理能力較弱有可能無法正常提供服務,從而失去高可用的作用。

高可用性叢集中的節點一般是一主一備,或者一主多備,通過備份提高整個系統可用性。負載均衡叢集一般是多主,每個節點都會分擔部分流量。

為什麼很多人會把高可用和負載均混淆起來,因為大家一般瞭解的都是某個軟體或者裝置,往往這些裝置會同時應用負載均衡和高可用。比較典型的F5和HAProxy中,F5作為一個負載均衡裝置對後端節點有著健康監測功能,而且當有多個節點的時候是不影響到整個服務的可用性的。假如沒有這個健康監測功能,一個叢集下放1個節點和多個節點在可用性方面是沒有區別的。同時HAProxy作為被大多數人認為的高可用軟體,其實根本就不是什麼高可用叢集軟體,其對於使用者請求有著分發處理的功能,同時有著反向代理功能,事實上Haproxy 是一個負載均衡器(The Reliable, High Performance TCP/HTTP Load Balancer,可靠的高效能TCP/HTTP負載均衡器),真正的高可用是有一個叫keepalived 軟體來實現的。由於資料庫資料要保證資料的一致性,一般都是單寫,所以無法實現資料庫服務的負載均衡,這也是目前碰到的一個難題,當然瞭如果資料庫是隻讀的,還是可以實現負載均衡的。

負載均衡叢集中,更多的關注可擴充套件性和效能,比較關注叢集節點處理能力;高可用叢集,更多的關注可用性,比較關注自動偵測,自動切換,自動恢復。

在高可用性叢集內,每種服務的使用者資料只有一份,在任一時刻只有一個節點能讀寫這份資料。

在負載均衡叢集內,對於資料一般不會只有一份,往往基本上都是有差異的。

高可用性叢集對一種服務而言不具有負載均衡功能,它可以提高整個系統的可靠性,但不能增加系統的負載能力。負載均衡叢集的各節點間通常沒有共用的儲存介質,使用者資料被複製成多份,存放於每一個提供該項服務的節點上。

對於同一種服務,是不能同時獲得高可用性與負載均衡能力的,大家看看資料庫服務就很清楚了。