1. 程式人生 > >用雙十一的故事串起碎片的網路協議(上)

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

作者:劉超

在經濟學領域,有個倫納德·裡德(Leonard E. Read)創作的《鉛筆的故事》。這個故事通過一個鉛筆的誕生過程,來講述複雜的經濟學理論。這裡,我也用一個下單的過程,看看網際網路世界的執行過程中,都使用了哪些網路協議。

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

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

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

20180918094147ffe9e157-eccb-40ef-a761-9d4699f135f9.jpg

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

我們來回想資料中心那一節《資料中心:我是開發商,自己拿地蓋別墅》,每個可用區裡有一片一片的機櫃,每個機櫃上有一排一排的伺服器,每個機櫃都有一個接入交換機,有一個匯聚交換機將多個機櫃連在一起。

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

20180918094204e0f58c4e-42d2-4e5a-9f4c-8d2434f97a87.jpg

接下來,你在雲端計算的介面上建立一個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隧道里面,轉發到虛擬機器上,從而實現外網和虛擬機器網路之間的互通。參見《雲中網路的隔離GRE、VXLAN:雖然住一個小區,也要保護隱私》

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

在華北、華東、華南同樣也部署了一整套,每個地區都建立了VPC,這就需要有一種機制將VPC連線到一起。雲平臺一般會提供硬體的VPC互連的方式,當然也可以使用軟體互連的方式,也就是使用VPN閘道器,通過IPSec VPN將不同地區的不同VPC通過VPN連線起來。參見《VPN:朝中有人好做官》

對於不同地區和不同運營商的使用者,我們希望他能夠就近訪問到網站,而且當一個點出了故障之後,我們希望能夠在不同的地區之間切換,這就需要有智慧DNS,這個也是雲平臺提供的。參見《DNS協議:網路世界的地址簿》

對於一些靜態資源,可以保持在物件儲存裡面,通過CDN下發到邊緣節點,這樣客戶端就能儘快加載出來。參見《CDN:你去小賣部取過快遞麼?》

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

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

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

20180918094327db6d40b8-37e1-422a-b6eb-643a0bb392fa.jpg

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

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

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

每個運營商也有很多的路由器、很多的點,於是就可以將如何到達這些IP地址的路由資訊,廣播到全國乃至全世界。參見《路由協議:西出閘道器無故人,敢問路在何方》

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

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

20180918094345830374ed-9961-4fcb-9caa-42d91426bcf8.jpg

客戶的手機開機以後,在附近尋找基站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地址。

對於HTTPDNS服務,可以參考《HTTPDNS:網路世界的地址簿也會指錯路》。看,經過了如此複雜的過程,咱們的萬里長征還沒邁出第一步,剛剛得到IP地址,包還沒發呢?話說手機APP拿到了公網IP地址,接下來應該做什麼呢?

本文來自網易雲社群 ,經作者劉超授權釋出

網易雲免費體驗館,0成本體驗20+款雲產品!

更多網易研發、產品、運營經驗分享請訪問網易雲社群