IP anycast + BGP 網絡技術


據說有好多大公司都應用了anycast技術,包括Microsoft,Cloudflare,LinkedIn以及其他企業都在全球范圍內使用了Anycast技術;阿里的dns服務也是使用了anycast技術

科普科普,什么是Anycast技術?

在IP地址的世界里,大家熟知的IP地址類型大致有如下幾種:

Unicast IP

單播IP,IP地址和主機是一一對應關系。
如下圖,紅色為數據包發送端,而綠色節點為數據包接收端。
當數據包發送給某一個特定IP地址時,全局下僅有一個數據包接收主機。此為Unicast。

Multicast IP

組播IP,組播IP擁有特定的IP地址段,當數據包發送給此組播IP地址后,組內成員都能收到此數據包的一份拷貝。
如下圖,紅色為數據包發送端,而綠色節點為數據包接收端。
當數據包發送給某一個特定組播IP地址時,同時存在多個數據包接收端。

Broadcast IP

廣播IP,任意Unicast單播網段中最后一個IP地址。數據包發送給此地址會擴散給全廣播域的成員。
如下圖,紅色為數據包發送端,而綠色節點為數據包接收端。
當數據包發送給廣播IP地址時,所有成員均為數據包接收端。

Anycast IP

而Anycast IP,則是集Multicast和Unicast特性於一身的特殊IP地址類型;Anycast中文稱為任意播。
Anycast類似於Multicast,同一種類型的數據流同時存在多個接收者。
Anycast又有着Unicast的唯一性。每一個單獨的IP會話都能夠找到唯一的源主機和目標主機。

  1. 以DNS請求為例,假設全國人民同一時間發送1百萬個DNS請求,他們都是發送給1.1.1.1的Anycast DNS服務器地址。
  2. 所有數據包都送達給了分布在全國各地的DNS服務器。處於各地的DNS服務器分別接收到了一定數量的DNS請求,並作出回復。這體現了Multicast的特性。
  3. 某一個特定的DNS請求數據包,一定是發送給了某一台DNS主機,而不是同時有多台DNS主機接收到了此數據包,此為Unicast特性。

如下圖,紅色為數據包發送端,而綠色節點為數據包接收端。
在Anycast 環境下,總的來說,同時存在多個有效的數據包接收端,但是就某一個特定IP(1.1.1.2)數據包而言,僅有一個接收端主機(即圖中箭頭所指向的主機)收到了此數據包。

Anycasting最初是在RFC1546中提出並定義的,根據RFC1546的說明,IPv4的任播地址不同於IPv4的單播地址,它建議從IPv4的地址空間分配出一塊獨立的地址空間作為任播地址空間。RFC1546定義的這種任播沒有在IPv4網絡中得到廣泛使用,但是它的最初語義在IPv4得到廣泛使用: 在IP網絡上,通過一個Anycast地址標識一組提供特定服務的主機,同時服務訪問方並不關心提供服務的具體是哪一台主機(比如DNS或者鏡像服務),訪問該地址的報文可以被IP網絡路由到這一組目標中的任何一台主機上,它提供的是一種無狀態的、盡力而為的服務。
在實際應用中,Anycast采用將一個單播地址分配到處於Internet中多個不同物理位置的主機上,發送到這個主機的報文被網絡路由到路由協議度量的“最近”的目標主機上。


參考文章:https://blog.csdn.net/mudawei1/article/details/101547570
精品文章《DNS多點部署IP Anycast+BGP實戰分析》:https://www.linuxidc.com/Linux/2014-08/105816.htm


利與弊

Anycast技術具有以下優勢:

  1. 不同客戶端將訪問不同目的主機,此過程對客戶端透明,從而實現了目的主機的負載均衡;
  2. 當任意目的主機接入的網絡出現故障,導致該目的主機不可達時,客戶端請求可以在無人為干預的情況下自動被路由到目前可達的最近目的主機,在一定程度上為目標主機提供了冗余性;
  3. 當目的主機受到DoS攻擊而無法到達時,由於網絡不可到達,客戶端請求也將路由到其他目的主機上,而在DDoS攻擊時,由於Anycast的負載均衡效應,避免了單台目的主機承受所有攻擊流量,因此在一定程度上為目的主機提高了安全性;
  4. 因為Anycast利用路由度量到“最近”的目的主機,提高了客戶端響應速度。

Anycast技術也存在一定的局限性:

使用Anycast中的共享單播地址不能作為客戶端發起請求,因為請求的響應不一定能返回到發起的Anycast單播地址。因此,目前Anycast僅適合一些特定的上層協議,從目前的實際應用來看, Anycast最廣泛的應用是DNS的部署的cdn加速。



應用舉例:基於IP Anycast+BGP的DNS部署

背景:

假設部署三個DNS服務器站點,地點分別在北京、上海、廣州,且服務於全國的DNS解析。

常規方案:

  1. 為了實現三個DNS服務器負載均衡,通常會考慮到使用硬件負載均衡設備,例如常見的F5負載均衡設備等。
  2. 方案缺陷:網絡流量瓶頸:所有的流量都需要先通過負載均衡設備,而硬件設備本身的吞吐量決定了整個網絡環境的吞吐量。
  3. 高昂的硬件成本:為了實現全國的流量負載均衡,需要極大吞吐量的硬件設備,從而大大提高了部署成本。

anyCast方案:

方案優點:

通過AnyCast技術,無需要借助任何第三方負載均衡器,就可以輕松達到負載均衡的效果,同時還提供了冗余和高可靠性。

方案實施:

  1. 通過配置三個DNS站點的服務器IP為相同IP,例如1.1.1.1/32。然后通過各個站點的BGP對互聯網宣告1.1.1.0/24的網段。
  2. 以上步驟完成以后,互聯網路由表針對1.1.1.1/24會有三個不同的出口路由器,分別是北京,上海,廣州。
  3. 假設現有用戶都使用1.1.1.1作為DNS服務器,依據就近原則,若用戶地域為東北,則會優先采用北京DNS服務器進行解析。
  4. 同理,貴陽的寬帶路由器通過查看BGP路由,發現1.1.1.1出口最優路由是在廣州,那么貴陽用戶的DNS數據包將被發送給廣州的DNS服務器。而江南一帶的則是上海DNS服務器負責提供解析服務。

故障容災:

  1. 若三台DNS服務器中某一台出現故障,如廣東DNS服務宕機,BGP協議會立即停止通告此1.1.1.0/24的網段,Internet路由表將會只有北京和上海的DNS可供選擇。
  2. 此時原廣東DNS服務的用戶將再次根據“就近原則”選擇其他DNS服務器,例如上海DNS,從而達到業務的平滑遷移和服務的高可用性。

總結結論:

  1. 全國用戶最終會根據距離DNS服務器的遠近來判斷使用哪個DNS服務器做域名解析;
  2. 從DNS角度來說,正因為不同的地理位置用戶會根據就近路由判斷,從而選擇不同的DNS服務器,最終會使三台DNS服務器達到負載均衡的效果;
  3. 若其中某一個節點出現故障以后,業務會立即自動遷移到其他可用的節點上,從而避免網路服務故障。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM