用雙十一的故事串起碎片的網絡協議(上)

文章選自《趣談網絡協議》

我是極客時間《趣談網絡協議》的作者劉超,今天通過“雙十一”下單的過程給大家詳細講解其中用到的網絡協議知識,內容共上、中、下三個部分,本篇文章講解三個部分中的上,其他內容可點擊這裏查看

我把這個雙十一下單的過程分爲十個階段,從雲平臺中搭建一個電商開始,到BGP路由廣播,再到DNS域名解析,從客戶看商品圖片,到最終下單,每一步我都會詳細講解。這節我們先來看整個過程中的前三個階段。

1.部署一個高可用高併發的電商平臺

首先,咱們要有個電商平臺。假設我們已經有了一個特別大的電商平臺,這個平臺應該部署在哪裏呢?假設我們用公有云,一般公有云會有多個位置,比如在華東、華北、華南都有。畢竟咱們的電商是要服務全國的,當然到處都要部署了。我們把主站點放在華東。

image

爲了每個點都能“雨露均沾”,也爲了高可用性,往往需要有多個機房,形成多個可用區(Available Zone)。由於咱們的應用是分佈在兩個可用區的,所以假如任何一個可用區掛了,都不會受影響。

我們來回想數據中心那一節,每個可用區裏有一片一片的機櫃,每個機櫃上有一排一排的服務器,每個機櫃都有一個接入交換機,有一個匯聚交換機將多個機櫃連在一起。

這些服務器裏面部署的都是計算節點,每臺上面都有Open vSwitch創建的虛擬交換機,將來在這臺機器上創建的虛擬機,都會連到Open vSwitch上。

image

接下來,你在雲計算的界面上創建一個VPC(Virtual Private Cloud,虛擬私有網絡),指定一個IP段,這樣以後你部署的所有應用都會在這個虛擬網絡裏,使用你分配的這個IP段。爲了不同的VPC相互隔離,每個VPC都會被分配一個VXLAN的ID。儘管不同用戶的虛擬機有可能在同一個物理機上,但是不同的VPC二層壓根兒是不通的。

由於有兩個可用區,在這個VPC裏面,要爲每一個可用區分配一個Subnet,也就是在大的網段裏分配兩個小的網段。當兩個可用區裏面網段不同的時候,就可以配置路由策略,訪問另外一個可用區,走某一條路由了。

接下來,應該創建數據庫持久化層。大部分雲平臺都會提供PaaS服務,也就是說,不需要你自己搭建數據庫,而是採用直接提供數據庫的服務,並且單機房的主備切換都是默認做好的,數據庫也是部署在虛擬機裏面的,只不過從界面上,你看不到數據庫所在的虛擬機而已。

雲平臺會給每個Subnet的數據庫實例分配一個域名。創建數據庫實例的時候,需要你指定可用區和Subnet,這樣創建出來的數據庫實例可以通過這個Subnet的私網IP進行訪問。

爲了分庫分表實現高併發的讀寫,在創建的多個數據庫實例之上,會創建一個分佈式數據庫的實例,也需要指定可用區和Subnet,還會爲分佈式數據庫分配一個私網IP和域名。

對於數據庫這種高可用性比較高的,需要進行跨機房高可用,因而兩個可用區都要部署一套,但是隻有一個是主,另外一個是備,雲平臺往往會提供數據庫同步工具,將應用寫入主的數據同步給備數據庫集羣。

接下來是創建緩存集羣。雲平臺也會提供PaaS服務,也需要每個可用區和Subnet創建一套,緩存的數據在內存中,由於讀寫性能要求高,一般不要求跨可用區讀寫。

再往上層就是部署咱們自己寫的程序了。基礎服務層、組合服務層、Controller層,以及Nginx層、API網關等等,這些都是部署在虛擬機裏面的。它們之間通過RPC相互調用,需要到註冊中心進行註冊。

它們之間的網絡通信是虛擬機和虛擬機之間的。如果是同一臺物理機,則那臺物理機上的OVS就能轉發過去;如果是不同的物理機,這臺物理機的OVS和另一臺物理機的OVS中間有一個VXLAN的隧道,將請求轉發過去。

再往外就是負載均衡了,負載均衡也是雲平臺提供的PaaS服務,也是屬於某個VPC的,部署在虛擬機裏面的,但是負載均衡有個外網的IP,這個外網的IP地址就是在網關節點的外網網口上的。在網關節點上,會有NAT規則,將外網IP地址轉換爲VPC裏面的私網IP地址,通過這些私網IP地址訪問到虛擬機上的負載均衡節點,然後通過負載均衡節點轉發到API網關的節點。

網關節點的外網網口是帶公網IP地址的,裏面有一個虛擬網關轉發模塊,還會有一個OVS,將私網IP地址放到VXLAN隧道里面,轉發到虛擬機上,從而實現外網和虛擬機網絡之間的互通。

不同的可用區之間,通過核心交換機連在一起,核心交換機之外是邊界路由器。

在華北、華東、華南同樣也部署了一整套,每個地區都創建了VPC,這就需要有一種機制將VPC連接到一起。雲平臺一般會提供硬件的VPC互連的方式,當然也可以使用軟件互連的方式,也就是使用VPN網關,通過IPSec VPN將不同地區的不同VPC通過VPN連接起來。

對於不同地區和不同運營商的用戶,我們希望他能夠就近訪問到網站,而且當一個點出了故障之後,我們希望能夠在不同的地區之間切換,這就需要有智能DNS,這個也是雲平臺提供的。

對於一些靜態資源,可以保持在對象存儲裏面,通過CDN下發到邊緣節點,這樣客戶端就能儘快加載出來。

2.大聲告訴全世界,可以到我這裏買東西

當電商應用搭建完畢之後,接下來需要將如何訪問到這個電商網站廣播給全網。

剛纔那張圖畫的是一個可用區的情況,對於多個可用區的情況,我們可以隱去計算節點的情況,將外網訪問區域放大。

image

外網IP是放在虛擬網關的外網網口上的,這個IP如何讓全世界知道呢?當然是通過BGP路由協議了。

每個可用區都有自己的匯聚交換機,如果機器數目比較多,可以直接用核心交換機,每個Region也有自己的核心交換區域。

在覈心交換外面是安全設備,然後就是邊界路由器。邊界路由器會和多個運營商連接,從而每個運營商都能夠訪問到這個網站。邊界路由器可以通過BGP協議,將自己數據中心裏面的外網IP向外廣播,也就是告訴全世界,如果要訪問這些外網IP,都來我這裏。

每個運營商也有很多的路由器、很多的點,於是就可以將如何到達這些IP地址的路由信息,廣播到全國乃至全世界。

戳我試讀《趣談網絡協議》

3.打開手機來上網,域名解析得地址

這個時候,不但你的這個網站的IP地址全世界都知道了,你打的廣告可能大家也都看到了,於是有客戶下載App來買東西了。

image

客戶的手機開機以後,在附近尋找基站eNodeB,發送請求,申請上網。基站將請求發給MME,MME對手機進行認證和鑑權,還會請求HSS看有沒有錢,看看是在哪裏上網。

當MME通過了手機的認證之後,開始建立隧道,建設的數據通路分兩段路,其實是兩個隧道。一段是從eNodeB到SGW,第二段是從SGW到PGW,在PGW之外,就是互聯網。

PGW會爲手機分配一個IP地址,手機上網都是帶着這個IP地址的。

當在手機上面打開一個App的時候,首先要做的事情就是解析這個網站的域名。

在手機運營商所在的互聯網區域裏,有一個本地的DNS,手機會向這個DNS請求解析DNS。當這個DNS本地有緩存,則直接返回;如果沒有緩存,本地DNS才需要遞歸地從根DNS服務器,查到.com的頂級域名服務器,最終查到權威DNS服務器。

如果你使用雲平臺的時候,配置了智能DNS和全局負載均衡,在權威DNS服務中,一般是通過配置CNAME的方式,我們可以起一個別名,例如 vip.yourcomany.com ,然後告訴本地DNS服務器,讓它請求GSLB解析這個域名,GSLB就可以在解析這個域名的過程中,通過自己的策略實現負載均衡。

GSLB通過查看請求它的本地DNS服務器所在的運營商和地址,就知道用戶所在的運營商和地址,然後將距離用戶位置比較近的Region裏面,將三個負載均衡SLB的公網IP地址,返回給本地DNS服務器。本地DNS解析器將結果緩存後,返回給客戶端。

對於手機APP來說,可以繞過剛纔的傳統DNS解析機制,直接只要HTTPDNS服務,通過直接調用HTTPDNS服務器,得到這三個SLB的公網IP地址。

看,經過了如此複雜的過程,咱們的萬里長征還沒邁出第一步,剛剛得到IP地址,包還沒發呢?
話說手機APP拿到了公網IP地址,接下來的內容將在後面的文章中更新,歡迎你來訂閱我的專欄。

戳我試讀或訂閱《趣談網絡協議》,歡迎你來給我留言和討論。

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