天天看點

一次網絡請求中的流量分發過程

作者:京東雲開發者

1. 摘要

現代的企業級或網際網路系統往往需要進行流量規劃,達成透明多級分流。流量從用戶端發出到服務端處理這個過程裡,流經的與功能無關的技術部件有(達成 “透明分流” 這個目标所采用的工具與手段):用戶端緩存、域名伺服器、傳輸鍊路、内容分發網絡、負載均衡器、服務端緩存。透明分流帶來的價值:高可用架構、高并發。

本文主要介紹流量規劃中的網絡請求過程過程及:

第一部分:對一次網絡請求的過程作簡要介紹,然後介紹自己目前了解到的前端網絡元件搭配方式、後端網絡元件搭配方式

第二部分:介紹 LB 負載系統 、vip 與 rip 的映射關系

第三部分:介紹内網域名解析及公網域名解析

2. 網絡請求過程

通用請求過程及請求過程名詞解釋來源于: https://cf.jd.com/pages/viewpage.action?pageId=766717554

2.1 通用請求過程

一次網絡請求中的流量分發過程

2.2 請求過程名詞解釋

rip: 真實 ip,指虛拟機或容器 ip

vip: 虛拟 ip,不可跨機房,online 申請,負載、自動探活等功能,分公網 vip 與内網 vip

内網: 專指機房内部,嚴格的防火牆政策,内網之間無防火牆,可申請内網 vip 提供負載均衡供應用間互訪;内網≠辦公網

辦公網: 辦公區個人電腦網絡,通過反向代理通路内網機房應用

公網: 網際網路使用者網絡,通過 DNS + 公網 vip 通路内網機房應用

備注(自己了解 ,有可能了解不正确):

公網 vip 即公網虛拟 ip,虛拟不是說公網上找不到這個 ip,虛拟是相對于伺服器 ip(rip)來說的,vip 不直接承擔業務邏輯

公網 VIP 在公網真實存在、内網 vip 在公司内網真實存在

2.3 前端網絡元件搭配方式

引用連結: http://jdthelp.jdos.jd.com/help/bestpractice/multi-web-demo.html

外網通路需滿足如下圖架構:VIP 後面挂 jen-nginx 來代理前端的主應用,jen 代理後面挂靜态應用 1~N

一次網絡請求中的流量分發過程

測試環境:多個前端項目可能存在下列架構方式: 域名 -> VIP -> JEN 代理(根據不同域名通路不同檔案夾下的檔案)-> 靜态應用

一次網絡請求中的流量分發過程

2.4 後端網絡元件搭配方式

後端應用從調用方式來說分為兩種 (http 調用 JSF 調用)

前端應用 ---(協定 http 或者 https)--- 後端前置應用 --(協定 jsf 私有協定)----JSF 微服務應用

後端前置應用 -----jsf 微服務應用,之間的負載由消費者來決定,是以一般無須關注這兩者之間的負載。

方式 1: vip 下的負載(LB 負載系統) + Nginx

一次網絡請求中的流量分發過程

方式 1 備注:

VIP 下可以直接挂載伺服器,這裡 Nginx 不是必須的,除非你需要 nginx 提供的功能(除了負載)。

如果你僅僅是用 nginx 來做負載,那麼請去除 nginx 元件,沒有必要加一這個元件,集團的 vip 的 LB 已經包含負載功能,不要加重系統的複雜性。

方式 2:容器 K8S 層面的負載

vip 提供的 LB:

vip 提供的 LB 下是直接挂機器 IP,其中多個 ip 之間沒有分組的概念,并且沒有探活機制。

每次上線需要摘掉負載下的機器,上線完成後,再把機器挂上去

行雲部署 - 進階功能 - 負載均衡 ( 容器 k8s 層面的負載 ) 優點:

有機器分組的概念: 按照機房或者 機房 + 機房叢集的次元分組後,每個分組申請自己的負載均衡。

具有探活機制: 設定健康探活路徑,針對負載進行探活。每次上線無須摘掉負載下的機器。

一次網絡請求中的流量分發過程

3. LB 負載系統簡介

其實吧,vip 本身就是個 ip,沒有多少真正的價值。vip 可以了解為是集團 LB 負載均衡的入口 ip,而 LB 負載均衡才是真正的分流元件。

vip 是系統自動配置設定複用的(vip 資源珍貴,系統配置設定的 vip 有可能複用),LB 負載均衡有兩種分流規則:

1. 分流規則的實作方式

分流規則兩種實作方式,預設規則、專用規則。

預設規則:面向域名,流量接入到後端叢集。此為模闆,可選擇應用範圍。

專用規則:面向 VIP,可為某 VIP 獨立指定後端叢集。 其中專用規則優先級高。

預設規則、專用規則兩者關系:

共同點 不同點
預設規則面向域名的一個端口有且隻有一條分流規則 專用規則面向 VIP 的一個端口有且隻有一條分流規則 預設規則必須存在; 專用規則優先級高; 專用規則無設定時,繼承預設規則指向的後端

3.1 預設規則:預設分流規則:域名 + 端口 + 叢集,分流規則唯一性

備注: 系統配置設定的 vip 有可能複用

在預設規則中, 假設系統配置設定的 vip 都是 111.111.111

域名 A (www.a.jdcom)+ 域名的一個端口 port (80) 通過配置的 vip (111.111.111) 将請求轉發到 後端叢集 A。

域名 B (www.b.jd.com) + 域名的一個端口 port (443) 通過配置的 vip (111.111.111) 将請求轉發到 後端叢集 B。

3.2 專用規則:面向 vip 的一個端口有且隻有 1 條分流規則

備注:(猜測 不确定):專用規則中的 vip 可能不是複用的。

一次網絡請求中的流量分發過程

備注:一個 VIP 也可以用多個端口,比如 HTTP 是 80 和 443,TCP 是 2000-2014

4. vip 和 rip 的映射關系 (重要 非常重要)

一對一:一個機房,一個 vip 對應一個 rip

一對多:一個機房,一個 vip 對應多個 rip

多對多: 多個機房,每個機房的 vip 對應 其機房下的多個 rip

4.1 vip 下挂載 rip 的約定

  1. vip(機房入口)是機房次元的,當然如果說 vip 出問題了,一般情況下就是機房出問題了,這個出現的幾率會比較小。
  2. vip 是機房次元的,但是 vip 下挂哪些機器 是由研發人員決定的,是以 vip 下的機器是有可能跨機房的。但是研發人員應該 根據機房視圖( 機器的機房所在地 )來對應此所在地的機房入口( vip ),應盡可能遵守 這個規定。

4.2 為什麼要遵守這個約定呢?

1. 盡可能縮小問題影響的範圍: 如果你 VIP 下的機器跨機房,如果 Vip 出問題,導緻多個機房的機器都無法接收流量

2. 盡可能比對斷網演練的目标: 機房斷網演練,估計 VIP 也不會讓流量進入到下一層,如果你 vip 下挂載跨機房的 rip,直接讓 機房的斷網演練,變成了 跨機房演練(因為多個機房的機器不會接收到流量)

5. 内網域名解析(機房視圖與機房入口說明)

  1. 内網域名解析時: vip 是根據 機房入口(目前有 廊坊 vip 馬駒橋 vip 印尼 vip) 走的。
  2. 每個視圖必須解析。 廊坊視圖 —> 廊坊 VIP,馬駒橋視圖 —> 馬駒橋 VIP,其他的視圖 —> 選擇馬駒橋或者廊坊 VIP(必須指向線上可用 VIP)
  3. 為優化機房内通路,優先選擇本機房 VIP。
  4. 考慮到舊的機房已下架或者正在下架,舊機房優先選擇廊坊、馬駒橋 VIP,國外應用優先選擇國外的 VIP。

6. 公網域名解析

pop 入口 在計算機網絡中,pop 表示入網點(pop),pop 位于網絡企業的邊緣外側,是通路企業網絡内部的進入點,外界提供的服務通過 pop 進入,這些服務包括 Internet 接入,廣域連接配接以及電話服務(PSTN)。

pop 入口 :新應用上線時應該申請入網點(pop)處的 vip。

域名解析:

不需要 VIP: 直接填寫自己的公網 IP

需要 VIP:

  1. 請提前申請 POP 入口的 VIP
  2. 解析前請線下綁定 host 測試 VIP 業務可用性
  3. 按照營運商對應的 POP 入口 VIP 進行解析

7. 總結

簡單的請求過程最實用,實用的請求過程最簡單。

用簡單實用的搭配方式滿足流量分發,不要随意搭配,增加系統的複雜性。

作者:京東保險 張江濤

來源:京東雲開發者