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 的約定
- vip(機房入口)是機房次元的,當然如果說 vip 出問題了,一般情況下就是機房出問題了,這個出現的幾率會比較小。
- vip 是機房次元的,但是 vip 下挂哪些機器 是由研發人員決定的,是以 vip 下的機器是有可能跨機房的。但是研發人員應該 根據機房視圖( 機器的機房所在地 )來對應此所在地的機房入口( vip ),應盡可能遵守 這個規定。
4.2 為什麼要遵守這個約定呢?
1. 盡可能縮小問題影響的範圍: 如果你 VIP 下的機器跨機房,如果 Vip 出問題,導緻多個機房的機器都無法接收流量
2. 盡可能比對斷網演練的目标: 機房斷網演練,估計 VIP 也不會讓流量進入到下一層,如果你 vip 下挂載跨機房的 rip,直接讓 機房的斷網演練,變成了 跨機房演練(因為多個機房的機器不會接收到流量)
5. 内網域名解析(機房視圖與機房入口說明)
- 内網域名解析時: vip 是根據 機房入口(目前有 廊坊 vip 馬駒橋 vip 印尼 vip) 走的。
- 每個視圖必須解析。 廊坊視圖 —> 廊坊 VIP,馬駒橋視圖 —> 馬駒橋 VIP,其他的視圖 —> 選擇馬駒橋或者廊坊 VIP(必須指向線上可用 VIP)
- 為優化機房内通路,優先選擇本機房 VIP。
- 考慮到舊的機房已下架或者正在下架,舊機房優先選擇廊坊、馬駒橋 VIP,國外應用優先選擇國外的 VIP。
6. 公網域名解析
pop 入口 在計算機網絡中,pop 表示入網點(pop),pop 位于網絡企業的邊緣外側,是通路企業網絡内部的進入點,外界提供的服務通過 pop 進入,這些服務包括 Internet 接入,廣域連接配接以及電話服務(PSTN)。
pop 入口 :新應用上線時應該申請入網點(pop)處的 vip。
域名解析:
不需要 VIP: 直接填寫自己的公網 IP
需要 VIP:
- 請提前申請 POP 入口的 VIP
- 解析前請線下綁定 host 測試 VIP 業務可用性
- 按照營運商對應的 POP 入口 VIP 進行解析
7. 總結
簡單的請求過程最實用,實用的請求過程最簡單。
用簡單實用的搭配方式滿足流量分發,不要随意搭配,增加系統的複雜性。
作者:京東保險 張江濤
來源:京東雲開發者