全局流量管理通過DNS實現應用服務的就近訪問接入、多地址負載均攤,同時根據健康檢查進行DNS Failover,實現應用服務的同城多活故障隔離和異地容災。
—— 阿里雲官網有關GTM服務的介紹
“雙活”的概念曾經紅極一時,伴隨雙活的是一整套的IT基礎架構,包括虛擬化軟件、雙活存儲、……還有為“兩個”雙活數據中心提供負載均衡能力的GSLB全局負載均衡系統。
後來,阿里提出了“三地五中心”,與之配套的就變成了互聯網中間件、雲原生數據庫系列服務、……當然還有為“五個”多活數據中心分配流量的GTM全局流量管理服務。
GTM 和GSLB服務一樣都是基於智能DNS,也就是通過對DNS請求的動態調度來實現跨站點的負載均和故障切換。
具體的工作過程如下:
- 可以把業務系統的域名解析以CNAME的方式託管到GTM的智能DNS。
- 當用戶發起對站點的訪問請求時,需要先通過DNS的解析過程來獲取站點的IP地址,而這時具體解析到哪一個IP就由GTM根據所有數據中心的“健康檢查”結果來確定。
- 當所有數據中心均“健康”時可以用“輪詢”的方式對所有的站點進行負載均衡,從而實現“多活”。
- 當某個站點被判定為“非健康”狀態時,將不會再將該站點的IP地址返回給客戶端,從而實現故障切換。
CNAME 是一種DNS的記錄類型,另一種常用的DNS記錄類型是A記錄,A記錄下的域名對應的是一個具體的IP地址,而CNAME記錄下的域名對應的是另外一個域名,從而將域名的解析結果“託管”了出去。
GTM有幾個關鍵概念:
- 地址池、一組提供相同服務的地址列表,可以有多個地址池,根據訪問策略的不同,可以從不同的地址池中返回地址給客戶端。
- 訪問策略、可以有多個訪問策略,但有且僅有一個全局訪問策略,可以根據地理位置、訪問延時來選擇不同的地址池。在訪問策略中地址池要被加入到主地址池或者備地址池中。
- 主地址池集合、默認情況下所有請求都從主地址池集合的地址池中分配地址。
- 備地址池集合、為可選配置,當主地址池中的所有地址均無法通過健康檢查時,從備地址池分配地址。
- 健康檢查、對所有需要進行檢查的地址池中的地址進行健康檢查,健康檢查可以使用ping、tcp、http/https等方法。健康檢查的配置以地址池為單位進行設置。
這些概念理解起來還是有些抽象,讓我們結合一個應用場景來理解,請看架構圖:
- 有3個地址池,分別是位於北京的地址池甲、位於上海的地址池乙、位於成都的地址池丙。
- 創建一條全局訪問策略,訪問策略被設置為最小延遲,地址池甲和地址池乙被分配到主地址池,地址池丙被分配到備地址池。
- 為地址池甲和地址池乙開啟了健康檢查,因此當北京或上海的某個可用區發生故障時,對GTM的請求將不會再返回這些無法訪問的ECS的IP地址。
- 地址池丙不開啟健康檢查,因此不會對成都地域的ECS進行健康檢查。
- 默認情況下所有的請求都會從地址池甲和乙中選擇地址返回給客戶端,只有當地址池甲和乙中所有的ECS均無法通過健康檢查時,才會從地址池丙中挑選IP返回給客戶端。
上述訪問策略實現了一個主備架構,缺點是成都地域的資源只能用於災備,要想實現“多活”可以再新建一條只針對四川省用戶的訪問策略,這回將地址池丙加入主地址池,地址池甲和乙加入備地址池。額外的,為了能夠探測成都地域服務器的可用性情況要開啟地址池丙的健康檢查設置。
這就是GTM全局流量管理服務。