基本的網路知識我們都講完了,還記得最初舉的那個“雙十一”下單的例子嗎?這一節開始,我們詳細地講解這個程序,用這個程序串起我們講過的網路協議,
我把這個程序分為十個階段,從云平臺中搭建一個電商開始,到 BGP 路由廣播,再到 DNS 域名決議,從客戶看商品圖片,到最終下單的整個程序,每一步我都會詳細講解,這節我們先來看前三個階段,
1. 部署一個高可用高并發的電商平臺
首先,咱們要有個電商平臺,假設我們已經有了一個特別大的電商平臺,這個平臺應該部署在哪里呢?假設我們用公有云,一般公有云會有多個位置,比如在華東、華北、華南都有,畢竟咱們的電商是要服務全國的,當然到處都要部署了,我們把主站點放在華東,

為了每個點都能“雨露均沾”,也為了高可用性,往往需要有多個機房,形成多個可用區(Available Zone),由于咱們的應用是分布在兩個可用區的,所以假如任何一個可用區掛了,都不會受影響,
我們來回想資料中心那一節,每個可用區里有一片一片的機柜,每個機柜上有一排一排的服務器,每個機柜都有一個接入交換機,有一個匯聚交換機將多個機柜連在一起,
這些服務器里面部署的都是計算節點,每臺上面都有 Open vSwitch 創建的虛擬交換機,將來在這臺機器上創建的虛擬機,都會連到 Open vSwitch 上,

接下來,你在云計算的界面上創建一個 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. 大聲告訴全世界,可以到我這里買東西
當電商應用搭建完畢之后,接下來需要將如何訪問到這個電商網站廣播給全網,
剛才那張圖畫的是一個可用區的情況,對于多個可用區的情況,我們可以隱去計算節點的情況,將外網訪問區域放大,

外網 IP 是放在虛擬網關的外網網口上的,這個 IP 如何讓全世界知道呢?當然是通過 BGP 路由協議了,
每個可用區都有自己的匯聚交換機,如果機器數目比較多,可以直接用核心交換機,每個 Region 也有自己的核心交換區域,
在核心交換外面是安全設備,然后就是邊界路由器,邊界路由器會和多個運營商連接,從而每個運營商都能夠訪問到這個網站,邊界路由器可以通過 BGP 協議,將自己資料中心里面的外網 IP 向外廣播,也就是告訴全世界,如果要訪問這些外網 IP,都來我這里,
每個運營商也有很多的路由器、很多的點,于是就可以將如何到達這些 IP 地址的路由資訊,廣播到全國乃至全世界,
3. 打開手機來上網,域名決議得地址
這個時候,不但你的這個網站的 IP 地址全世界都知道了,你打的廣告可能大家也都看到了,于是有客戶下載 App 來買東西了,

客戶的手機開機以后,在附近尋找基站 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 地址,接下來應該做什么呢?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/211568.html
標籤:其他
