人
已閱讀
已閱讀
負載均衡在APP開發(fā)中的運用
來源:lexintech.com ?? ?? 發(fā)布時間:2019-05-17
在APP開發(fā)項目中,服務(wù)器架構(gòu)是關(guān)系到整個系統(tǒng)的性能的關(guān)鍵因素。無論是自己買的服務(wù)器,還是用云服務(wù)器,負載均衡都是提高系統(tǒng)性能的主要方式。
如果你是早期的云計算服務(wù)提供商,你可以使用一個單獨的客戶 web 服務(wù)器,為它分配一個 IP 地址,并配置一個 DNS(域名系統(tǒng))記錄來將它與一個易讀的名字關(guān)聯(lián)起來,之后通過 BGP(邊界網(wǎng)關(guān)協(xié)議)來傳播 IP 地址,這是種在網(wǎng)絡(luò)間交換路由信息的標(biāo)準(zhǔn)方式。
在冗余的網(wǎng)絡(luò)路徑上分發(fā)流量,在不可用的基礎(chǔ)設(shè)施周圍進行路由來提高可用性(會導(dǎo)致不對稱路由等現(xiàn)象),這些從本質(zhì)上講并不是負載均衡。
如果你是早期的云計算服務(wù)提供商,你可以使用一個單獨的客戶 web 服務(wù)器,為它分配一個 IP 地址,并配置一個 DNS(域名系統(tǒng))記錄來將它與一個易讀的名字關(guān)聯(lián)起來,之后通過 BGP(邊界網(wǎng)關(guān)協(xié)議)來傳播 IP 地址,這是種在網(wǎng)絡(luò)間交換路由信息的標(biāo)準(zhǔn)方式。
在冗余的網(wǎng)絡(luò)路徑上分發(fā)流量,在不可用的基礎(chǔ)設(shè)施周圍進行路由來提高可用性(會導(dǎo)致不對稱路由等現(xiàn)象),這些從本質(zhì)上講并不是負載均衡。
隨著客戶服務(wù)流量的增長,業(yè)務(wù)方希望獲得更高的可用性。你添加了另一個具有公網(wǎng) IP 地址的 web 服務(wù)器,并更新了 DNS 記錄來將用戶引導(dǎo)到這兩個 web 服務(wù)器(希望稍微公平一些)。直到某一個 web 服務(wù)器意外宕機前,這種方法都是可行的。假設(shè)你快速檢測到故障,可以通過更新 DNS 配置(手動方式或使用軟件)來停止引用損壞的服務(wù)器。
遺憾的是,由于 DNS 記錄是有緩存的,這些緩存記錄可能會在客戶端或者 DNS 層次結(jié)構(gòu)中的其他名稱服務(wù)器中,在它們過期之前,大約有 50% 的請求仍然可能失敗。DNS 記錄的 TTL(time to live,生存時間)通常為幾分鐘或更長,因此這會對系統(tǒng)的可用性造成重大影響。
更糟糕的是一些客戶端完全忽略了 TTL,所以一些請求將在一段時間內(nèi)被定向到已經(jīng)宕機的 web 服務(wù)器上。設(shè)置非常短的 DNS TTL 也不是什么好主意;這意味著 DNS 服務(wù)的負載增加,延遲增加,因為客戶端不得不更加頻繁地執(zhí)行 DNS 查找。如果你的 DNS 服務(wù)不可用,那么使用更短的 TTL 訪問服務(wù)將更快地降級,因為緩存服務(wù) IP 地址的客戶端更少。
遺憾的是,由于 DNS 記錄是有緩存的,這些緩存記錄可能會在客戶端或者 DNS 層次結(jié)構(gòu)中的其他名稱服務(wù)器中,在它們過期之前,大約有 50% 的請求仍然可能失敗。DNS 記錄的 TTL(time to live,生存時間)通常為幾分鐘或更長,因此這會對系統(tǒng)的可用性造成重大影響。
更糟糕的是一些客戶端完全忽略了 TTL,所以一些請求將在一段時間內(nèi)被定向到已經(jīng)宕機的 web 服務(wù)器上。設(shè)置非常短的 DNS TTL 也不是什么好主意;這意味著 DNS 服務(wù)的負載增加,延遲增加,因為客戶端不得不更加頻繁地執(zhí)行 DNS 查找。如果你的 DNS 服務(wù)不可用,那么使用更短的 TTL 訪問服務(wù)將更快地降級,因為緩存服務(wù) IP 地址的客戶端更少。
為了解決這個問題,你可以添加一對冗余的 4 層(Layer 4)網(wǎng)絡(luò)均衡器,并在相同的虛擬 IP(VIP)地址提供服務(wù)。它們可以是硬件設(shè)備,或者像 HAProxy 這樣的軟件均衡器。這意味著 DNS 記錄僅僅指向虛擬 IP 而不再做負載均衡。
4 層均衡器將來自因特網(wǎng)的流量均衡地引導(dǎo)至后端服務(wù)器。這通常是基于每個 IP 包的 5 元組的哈希(一個數(shù)學(xué)函數(shù))完成的:源 IP 地址和目標(biāo) IP 地址,以及端口加上協(xié)議(如 TCP 或 UDP)。這種方式快速、高效(并且仍然維持了 TCP 的基本屬性),并且不需要均衡器維護每個連接的狀態(tài)。
4 層均衡器可以進行健康檢查,并僅僅向那些通過檢查的 web 服務(wù)器發(fā)送流量。與 DNS 均衡不同的是,如果一個 web 服務(wù)器崩潰,將流量重定向到另一個 web 服務(wù)器上的延遲很小,盡管現(xiàn)有連接將被重置。
4 層均衡器可以做加權(quán)平均,處理不同容量的后端,它為運維人員提供了強大的能力和靈活性,同時在計算能力方面相對便宜。
4 層均衡器可以進行健康檢查,并僅僅向那些通過檢查的 web 服務(wù)器發(fā)送流量。與 DNS 均衡不同的是,如果一個 web 服務(wù)器崩潰,將流量重定向到另一個 web 服務(wù)器上的延遲很小,盡管現(xiàn)有連接將被重置。
4 層均衡器可以做加權(quán)平均,處理不同容量的后端,它為運維人員提供了強大的能力和靈活性,同時在計算能力方面相對便宜。