一次網路請求中的流量分發過程 | 京東雲技術團隊

2023-06-02 12:00:44

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. 總結

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

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

作者:京東保險 張江濤

來源:京東雲開發者