gslb(global server load balance)技術的一點理解

gslb(global server load balance)技術的一點理解

前言

對於比較大的互聯網公司來說,用戶可能遍及海內外,此時,爲了提升用戶體驗,公司一般會在離用戶較近的地方建立機房,來服務這部分用戶的請求。

比如微信主要是服務國內,在國內就會在很多城市有大量機房服務國內用戶,另外,由於在北美、歐洲都有用戶使用,所以,在歐洲和北美也會有對應的機房。

此時,作爲服務提供方,自然是希望用戶可以就近訪問,廣東用戶就訪問深圳機房,北美用戶就訪問北美機房。

這個要怎麼做到呢,比如大家同時訪問www.qq.com,如何保證就近訪問呢?

這就是gslb(global server load balance)的舞臺。

gslb的實現方案之dns

dns方案,應該也是最主流的一種方案,我們可以先思考下,訪問www.qq.com時,會做什麼事情呢?首先要拿到域名背後的ip,這裏就會進行dns遞歸查詢。

  • 用戶的dns請求,首先進入本地的dns服務器,比如我這邊是深圳電信寬帶,理論上就進入深圳電信的dns服務器,這個我們叫做localDns
  • localDns會去查詢root dns服務器,root dns服務器只維護了頂級域名的dns服務器地址,因此會返回 .com這個頂級域名對應的dns服務器(記作tld,即top level domain頂級域名服務器)
  • localDns接下來,向.com頂級域名服務器發起請求,其會返回能解析qq.com域名的dns服務器(叫做權威服務器)
  • localDns接下來,向qq.com域名的dns服務器發起請求,其會解析www這個主機對應的ip,並返回
  • localDns拿到www.qq.com的ip後,返回給用戶。

不看字也可以直接看圖。

image-20220703200630957

但是,有一點大家要記得,自始至終,都是localDns在幫我們跑東跑西,相當於是我們的代理,在這個過程中,root、tld dns服務器、權威服務器,都是隻和localDns打交道,完全不知道我們用戶的存在,因此,有一點很重要,root、tld dns服務器、權威服務器只知道localDns的ip,而不知道我們用戶的ip。

現在我們知道了,最終是負責qq.com服務器的dns server來幫我們解析背後的ip,問題來了,這個dns server能很好地幫我們進行就近接入嗎,答案是,不一定,這邊一般是給www.qq.com配置多條A記錄,即多個機房的ip,如深圳機房ip、北美機房ip,這個dns服務器不是很智能,它是輪詢地返回ip,那很有可能,北美用戶卻拿到了國內機房ip,那還怎麼玩呢,卡爆了。

問題就是,這個dns服務器不是很智能,不能滿足我們的個性化需求,怎麼辦呢,解決的辦法是有的,大家可以看下圖。

image-20220703203122812

這邊可以給www.qq.com配置ns記錄,讓它指向另外一個dns服務,而這個dns服務,我們可以自己實現一個,無非就是寫個後臺服務,開個端口,接收dns請求,正確實現dns協議即可,gslb就是這麼一個自定義的dns服務。

NS 代表“域名服務器”,域名服務器記錄指示哪個 DNS 服務器對該具有權威性(即,哪個服務器包含實際 DNS 記錄)。基本上,NS 記錄告訴互聯網可從哪裏找到域的 IP 地址。一個域通常會有多個 NS 記錄,這些記錄可指示該域的主要和輔助域名服務器。倘若沒有正確配置的 NS 記錄,用戶將無法加載網站或應用程序。

下面是一個 NS 記錄示例:

example.com record type: value: TTL
@ NS ns1.exampleserver.com 21600

在引入了gslb之後,dns解析,就變成了這樣的過程。

  • localDns前面的步驟都差不多,不同點在於,其向qq.com域名的dns服務器發起請求後,qq.com域名解析www.qq.com,發現www.qq.com配置了ns記錄,此時,就會返回ns記錄中的value給localDns,而這個value,就是指向騰訊自己的gslb服務
  • localDns向騰訊的gslb服務發起請求,注意,我們前面說過,此時這個udp dns查詢,客戶端ip是localDns的ip,gslb服務器也只是會拿到localDns的ip,比如,以我爲例,gslb拿不到我的ip,只能拿到深圳電信的ip。
  • gslb收到請求後,理論上可以拿到的數據包括:該請求來自於哪個國家,該請求的ip所屬的運營商,該請求的ip所屬的省份城市,如中國-深圳-電信,此時,gslb可以選擇返回深圳機房的ip給localDns,而不是北美機房的ip,這樣就做到了就近接入

gslb實現

這塊我看了下騰訊這邊,應該是06年就搞出這東西了,不知道具體實現,只說是參考開源框架改的,不過我猜測,可能是根據bind這個開源dns解析器來改的,畢竟現在主流的dns服務,主要就是bind、dnsmasq,我這兩天爲了實踐這個gslb,還自己搭了個bind(不過最終發現解析不到自己的bind服務上,看了域名解析商的說明,貌似是不能ns記錄指向我這種私自搭建的dns服務)

一般大廠肯定都是有自己的gslb實現了,我在攜程的技術文裏也看到相關的gslb技術的說明。

那假設我們要是在一個小廠,沒有自研能力,又當如何呢?

其實,dns解析商還是有提供高級能力的,是我low了,這個很簡單,只要鈔能力,就可以解決。

以我現在使用的dnspod這家解析商來說,默認其是支持幾種路線的,比如電信、移動,可以配置不同的指向ip。

image-20220703205516324

image-20220703205548217

我理解下,大廠呢,應該是有這個研發能力,不願意花這個冤枉錢,畢竟,公司小的時候,租着便宜,大了之後,域名一多,比起自研,就未必便宜了;而且自研的話,還可以和業務深度結合,搞點花活出來。

總結

大家也可以分享下自己的看法,gslb實現這部分,都是我瞎吹的,不過dns解析商這種,提供的也算是gslb的一種實現吧

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