本文由DNS出發,分別介紹了任播、自治系統及負載均衡和容災等相關網路知識。
上篇文章回顧:模擬網路狀態的利器TC
//前言//
我在初中的時候遇到過一個問題:家裡的聯通寬頻沒有下發DNS地址,導致不能上網,年幼的我掏出了我的小米8(笑),帥氣地開啟搜尋引擎,鍵入:DNS沒了怎麼辦
看來現在這個問題也很火啊
第一個頁面就是114DNS,專屬於SRE的嗅覺告訴我,這就是我要的答案,將DNS設定上之後,很快就重新登上了網,高呼著CF,啟動!我又投入到突突突的戰場去了。
顯然,當時的我沒有意識到究竟是什麼有趣的技術在支撐著我以近乎都會網路的速度訪問這個公共DNS,又是什麼有趣的技術處理掉了全國成百上千萬人的DNS請求。
//任播//
答案其實是任播。
任播是我們當前使用的網路所支援的一種特殊的報文傳輸路由方式,它還有幾個小兄弟,分別是單播、組播、廣播:
單播是網路中的點對點通訊,也是我們最常用到的路由形式,比如我在瀏覽器裡輸入192.168.1.1,系統會建立一條到192.168.1.1:80的點對點通訊連結,然後我從這個埠的webserver上獲取到了一個網頁:
單播
組播和廣播是點對多點的路由形式,舉個例子,ARP協議就是一個廣播的例子,某臺機器需要尋找內網裡192.168.1.1的機器時,他會向當前區域網中所有地址廣播:who is 192.168.1.1?這個操作就是一次區域網內廣播的過程:
廣播
多播
那麼任播是什麼呢?
任播就是指一個傳送節點對應多個接收節點,與廣播/組播不同的是,同一時間點,任播有且僅有一個節點與之進行單獨通訊,而廣播/組播的所有接收節點都會收到傳送節點傳送的相同的資訊
任播
而DNS,就是一個任播技術的大本營。
眾所周知,DNS根伺服器僅有13臺,正是由任播技術的存在,才使得DNS根伺服器能夠無限擴容,在全球各地都有它們的身影,事實上,每一個根伺服器都有很多的映象,這些映象伺服器使用任播技術,如圖所示,全球各地的這些映象節點組成了龐大的任播網路,當一個美國西海岸的客戶端訪問根伺服器時,它會被直接路由到離他最近的舊金山映象,他很快獲取到了自己的查詢結果,此時一個日本的客戶端也開始請求查詢,它的請求會被分配到東京的映象進行處理,他也很快獲取到了自己的查詢結果。而在日本客戶端和美國客戶端看來,它們可能訪問的是同一個IP,返回查詢的速度非常之快,感覺伺服器就開在自己家門口。
Root DNS Server分佈
//自治系統//
自治系統就是一個獨立的、內部自治的、有一些對外連結的網路實體,維基百科上的定義是這樣的:
自治系統是指在一個(有時是多個)實體管轄下的所有IP網路和路由器的全體,它們對網際網路執行共同的路由策略。
我覺得這個定義不好,沒有突出一個“自治”的概念。自治主要體現在網路內部的各種通訊行為均不可被外部所感知,一個自治系統只會暴漏出自己的出口入口,與其他自治系統間的通訊採用且僅採用BGP協議進行溝通。
如上圖所示,每一個自治系統如同一個孤島,這些孤島有的規模龐大,有的沒有私有出口,只能購買上游運營商的出口,但是不管怎樣,它們都有一些共同的特點,它們擁有自己的地址段,它們擁有自己的AS號,它們對外遮蔽網路內部通訊,這些獨立的孤島通過BGP協議和網線,加上有人出人場,沒人出錢場買來的互聯埠,組成了一個龐大複雜的網路體系。(實際網際網路AS的管理中包含AS號的概念,擁有自己的私有IP段和“互聯”出口,經過審批和交錢後可以獲取到自己的一個AS號,然後就可以對外發布自己的IP段了,HE公司有很多好用的網路工具,可以用來研究各家運營商/公司的AS系統,強烈推薦)
為什麼要講自治系統呢?因為他是當前網路中最常見的構建任播網路的方式。
在當前業界的應用中,我們看到的任播網路大多數都是通過多出口宣告的方式實現的,簡單來講就是在自治系統的邊界,向與其構成peering的所有網路中通告自己自治系統中某些地址段的路由資訊,那麼根據路由選路規則,流量會從開銷最小(開銷最小不一定延遲最低,是指路由向量最小,具體選路規則可自行搜尋)的peering介面進入自治系統,自治系統內部對流量進行恰當排程後傳送給某個內部節點進行處理,處理結果原路返回,通過這樣的方式,我們就構建了一張同IP多線路、多點接入、多最終結點的任播網路。舉個例子,我們的老朋友谷歌就在其接入點中大量使用了任播技術,流量從全球任意一個谷歌pop點進入,可直接在谷歌AS中經由谷歌私有全球交換網路路由到其任意一個資料中心,這也是谷歌聲稱自己可以承受“多資料中心級災難”的信心來源。比起利用智慧DNS解析進行多出口的流量排程,任播技術可以保證故障時間儘可能短,不必等待DNS生效,也不必擔心因地址庫問題導致的分配錯誤。使用任播技術不僅能夠提供多點接入,還有很重要的一點是它可以用來——
//負載均衡和容災//
利用等值路由策略,使同一叢集下機器擁有相同的路由權重,流量進入AS內部後,會根據路由規則選擇最佳的叢集,等值路由保證流量會均等地分配到每一個節點,這樣每一個節點都可以處理到自己最適合的流量,當叢集負載增加時,可以通過調整路由權重的方式對流量進行即時排程,必要情況下可以在自己AS內跨區域甚至跨洲進行流量調整(谷歌就這麼幹過,谷歌資料中心間互聯頻寬均大於1Pbps,可以輕鬆遷移洲級的流量),而且,當某叢集當機,路由不可達會觸發重新選路,流量會自動轉移到其他可用節點,這就是任播和AS內部流量排程的魅力。
參考
1. Hawkinson J, Bates T. Guidelines for creation, selection, and registration of an Autonomous System (AS)” rfc1930[J]. BBN Planet/MCI, March, 1996: 10.
2. Abley J, Lindqvist K. Operation of anycast services[R]. 2006.
3. Ren G, Tune E, Moseley T, et al. Google-wide profiling: A continuous profiling infrastructure for data centers[J]. IEEE micro, 2010, 30(4): 65-79.
4. Autonomous system (Internet)[EB/OL]. En.wikipedia.org, 2018. (2018)[2018 -09 -14]. https://en.wikipedia.org/wiki/Autonomous_system_(Internet).
本文首發於公眾號“小米運維”,點選檢視原文