現代的企業級或網際網路系統往往需要進行流量規劃,達成透明多級分流。流量從使用者端發出到伺服器端處理這個過程裡,流經的與功能無關的技術部件有(達成「透明分流」這個目標所採用的工具與手段):使用者端快取、域名伺服器、傳輸鏈路、內容分發網路、負載均衡器、伺服器端快取。透明分流帶來的價值:高可用架構、高並行。
本文主要介紹流量規劃中的網路請求過程過程及:
第一部分:對一次網路請求的過程作簡要介紹,然後介紹自己目前瞭解到的前端網路元件搭配方式、後端網路元件搭配方式
第二部分:介紹LB負載系統 、vip與rip 的對映關係
第三部分:介紹內網域名解析及公網域名解析
通用請求過程及請求過程名詞解釋來源於: https://cf.jd.com/pages/viewpage.action?pageId=766717554
rip: 真實ip,指虛擬機器器或容器ip
vip: 虛擬ip,不可跨機房,online申請,負載、自動探活等功能,分公網vip與內網vip
內網: 專指機房內部,嚴格的防火牆策略,內網之間無防火牆,可申請內網vip 提供負載均衡供應用間互訪;內網≠辦公網
辦公網: 辦公區個人電腦網路,通過反向代理存取內網機房應用
公網: 網際網路使用者網路,通過DNS + 公網vip 存取內網機房應用
備註(自己理解 ,有可能理解不正確):
公網vip 即公網虛擬ip,虛擬不是說公網上找不到這個ip,虛擬是相對於伺服器ip(rip)來說的,vip不直接承擔業務邏輯
公網VIP在公網真實存在、內網vip在公司內網真實存在
參照連結: http://jdthelp.jdos.jd.com/help/bestpractice/multi-web-demo.html
外網存取需滿足如下圖架構:VIP後面掛 jen-nginx 來代理前端的主應用,jen代理後面掛靜態應用1~N
測試環境:多個前端專案可能存在下列架構方式: 域名 -> VIP -> JEN代理(根據不同域名存取不同資料夾下的檔案)-> 靜態應用
後端應用從呼叫方式來說分為兩種 (http呼叫 JSF呼叫)
前端應用 ---(協定http或者https)---後端前置應用 --(協定 jsf私有協定)----JSF微服務應用
後端前置應用 -----jsf微服務應用,之間的負載由消費者來決定,所以一般無須關注這兩者之間的負載。
方式1備註:
VIP下可以直接掛載伺服器,這裡Nginx不是必須的,除非你需要 nginx 提供的功能(除了負載)。
如果你僅僅是用nginx來做負載,那麼請去除nginx元件,沒有必要加一這個元件,集團的vip的LB已經包含負載功能,不要加重系統的複雜性。
vip提供的LB:
vip提供的LB下是直接掛機器IP,其中多個ip之間沒有分組的概念,並且沒有探活機制。
每次上線需要摘掉負載下的機器,上線完成後,再把機器掛上去
行雲部署-高階功能-負載均衡 ( 容器k8s層面的負載 ) 優點:
有機器分組的概念: 按照機房或者 機房+機房叢集的維度分組後,每個分組申請自己的負載均衡。
具有探活機制: 設定健康探活路徑,針對負載進行探活。每次上線無須摘掉負載下的機器。
其實吧,vip本身就是個ip,沒有多少真正的價值。vip可以理解為是集團LB負載均衡的入口ip,而LB負載均衡才是真正的分流元件。
vip 是系統自動分配複用的(vip資源珍貴,系統分配的vip有可能複用),LB負載均衡有兩種分流規則:
1. 分流規則的實現方式
分流規則兩種實現方式,預設規則、專用規則。
預設規則:面向域名,流量接入到後端叢集。此為模板,可選擇應用範圍。
專用規則:面向VIP,可為某VIP獨立指定後端叢集。 其中專用規則優先順序高。
預設規則、專用規則兩者關係:
共同點 | 不同點 |
---|---|
預設規則面向域名的一個埠有且只有一條分流規則 專用規則面向VIP的一個埠有且只有一條分流規則 | 預設規則必須存在; 專用規則優先順序高; 專用規則無設定時,繼承預設規則指向的後端 |
備註: 系統分配的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。
備註:(猜測 不確定):專用規則中的vip可能不是複用的。
備註:一個VIP 也可以用多個埠,比如HTTP 是80和443,TCP是2000-2014
一對一:一個機房,一個vip 對應一個rip
一對多:一個機房,一個vip 對應多個rip
多對多: 多個機房,每個機房的vip對應 其機房下的多個rip
vip(機房入口)是機房維度的,當然如果說vip出問題了,一般情況下就是機房出問題了,這個出現的機率會比較小。
vip是機房維度的,但是vip下掛哪些機器 是由研發人員決定的,因此vip下的機器是有可能跨機房的。但是研發人員應該 根據機房檢視( 機器的機房所在地 )來對應此所在地的機房入口( vip ),應儘可能遵守 這個規定。
1. 儘可能縮小問題影響的範圍: 如果你VIP下的機器跨機房,如果Vip出問題,導致多個機房的機器都無法接收流量
2. 儘可能匹配斷網演練的目標: 機房斷網演練,估計VIP 也不會讓流量進入到下一層,如果你vip下掛載跨機房的rip,直接讓 機房的斷網演練,變成了 跨機房演練(因為多個機房的機器不會接收到流量)
內網域名解析時: vip是根據 機房入口(目前有 廊坊vip 馬駒橋vip 印尼vip) 走的。
每個檢視必須解析。 廊坊檢視—>廊坊VIP,馬駒橋檢視—>馬駒橋VIP,其他的檢視—>選擇馬駒橋或者廊坊VIP(必須指向線上可用VIP)
為優化機房記憶體取,優先選擇本機房VIP。
考慮到舊的機房已下架或者正在下架,舊機房優先選擇廊坊、馬駒橋VIP,國外應用優先選擇國外的VIP。
pop入口 在計算機網路中,pop表示入網點(pop),pop位於網路企業的邊緣外側,是存取企業網路內部的進入點,外界提供的服務通過pop進入,這些服務包括Internet接入,廣域連線以及電話服務(PSTN)。
pop入口 :新應用上線時應該申請入網點(pop)處的vip。
域名解析:
不需要VIP: 直接填寫自己的公網IP
需要VIP:
請提前申請POP入口的VIP
解析前請線下繫結host測試VIP業務可用性
按照運營商對應的POP入口VIP進行解析
簡單的請求過程最實用,實用的請求過程最簡單。
用簡單實用的搭配方式滿足流量分發,不要隨意搭配,增加系統的複雜性。
作者:京東保險 張江濤
來源:京東雲開發者