1.路由
路由是指網絡設備(如路由器、交換機、或軟件)根據一張路徑表(路由表),為數據包選擇一條從源地址到目標地址的傳輸路徑的過程。它就像快遞配送系統,查看地址并決策下一步往哪里送”,該過程就是"路由"
1.1 核心職責與功能
1. 請求映射與分發 (The Map & Dispatcher)
這是路由最根本、最核心的職責。
- 是什么:根據預先定義的規則,將一個輸入的請求(無論是IP數據包還是HTTP請求)精確地映射并分發到對應的目標或處理單元上。
- 怎么做:
-
- 網絡層:查看IP包頭的目標IP地址,查詢路由表,決定從哪個物理接口轉發出去。
- 應用層/API網關:查看HTTP請求的URL路徑和方法(GET/POST等),將其分發給相應的控制器(Controller)函數或微服務。
- 前端:根據瀏覽器地址欄的URL路徑,決定渲染哪個視圖(View)或組件(Component)。
- 類比:公司的總機接線員,根據你要找的部門名稱,把你的電話轉接到對應的分機上。
2. 路徑選擇與優化 (The Pathfinder)
在網絡層路由中,這一功能至關重要。
- 是什么:為數據包選擇一條從源到目的地的最佳路徑。
- 怎么做:
-
- 路由協議(如OSPF、BGP)會動態地學習網絡拓撲結構,計算不同路徑的“成本”(基于跳數、帶寬、延遲等因素)。
- 維護一張路由表,其中包含到達各個網絡的最佳路徑(下一跳)。
- 在出現網絡故障或擁堵時,能夠自動選擇備用路徑,確保網絡韌性。
- 類比:地圖導航軟件(如高德、Google Maps),為你規劃出最快、最短或最經濟的路線,并在遇到堵車時重新規劃。
3. 隔離與安全 (The Security Guard)
路由提供了最初的、基于路徑的隔離和安全檢查點。
- 是什么:通過路由規則,實現流量的邏輯隔離和初步安全過濾。
- 怎么做:
-
- 網絡ACL:在路由器上設置訪問控制列表,例如“拒絕所有從A網段發往B網段的流量”。
- API網關:可以將管理接口(如
/actuator
)的路由與對外API的路由隔離開,并對不同路由實施不同的認證策略。 - VLAN間路由:在不同虛擬局域網(VLAN)之間進行路由,既實現了通信,又保持了廣播域的隔離。
- 類比:小區的大門保安,只允許業主進入相應的單元樓(路由到正確目的地),而將閑雜人等拒之門外(丟棄非法請求)。
4. 抽象與解耦 (The Translator)
在現代軟件開發中,路由提供了強大的抽象能力。
- 是什么:將對內部實現的依賴轉變為對穩定接口(URL路徑)的依賴。
- 怎么做:
-
- 后端:用戶只需要記住
/users
這個端點就能獲取用戶信息,而無需知道背后是哪個服務器、哪個函數在處理。即使后臺服務重構、更換編程語言,只要端點不變,客戶端就無需修改。 - 前端:URL路徑
/about
對應“關于我們”頁面,無論這個頁面背后的組件代碼如何變化,這個鏈接始終有效。 - API網關:可以將內部復雜的微服務結構(如
user-service:8080
,order-service:8081
)抽象成統一的、對外友好的API路徑(如/api/v1/users
,/api/v1/orders
)。
- 后端:用戶只需要記住
- 類比:餐廳的菜單。顧客只需點“宮保雞丁”(URL路徑),而不用關心它是哪個廚師(后端服務)、在哪個廚房(服務器)做的。
5. 負載均衡 (The Traffic Cop)
通常與路由緊密結合的功能,尤其是在網關和現代網絡設備中。
- 是什么:將到達同一目的地的流量,分攤到多個相同的處理單元上。
- 怎么做:
-
- API網關:定義一條路由規則
path: /user/**
,指向后端3個用戶微服務實例。網關會將請求以輪詢、隨機等策略分發到這些實例上,避免單個實例過載。 - 網絡層:ECMP(等價多路徑路由)可以將去往同一目標的流量,通過多條不同的網絡鏈路同時傳輸。
- API網關:定義一條路由規則
- 類比:銀行開放多個窗口辦理同類業務,大堂經理將顧客引導到人最少的窗口。
6. 流量控制與治理 (The Flow Regulator)
這是路由在微服務架構中的高級功能。
- 是什么:基于路由對特定類型的流量實施策略。
- 怎么做:
-
- 灰度發布/金絲雀發布:將帶有特定Header(如
version: canary
)的請求路由到新版本的服務,而其他請求依然路由到舊版本服務。 - 限流與熔斷:對匹配特定路由(如
/api/expensive-operation
)的請求進行速率限制。如果該路由對應的服務不可用,則快速熔斷,返回錯誤,避免雪崩效應。 - A/B測試:將一部分用戶流量路由到A版本UI,另一部分路由到B版本UI。
- 灰度發布/金絲雀發布:將帶有特定Header(如
2.配置路由
創建并編寫application-route.yml路由配置文件
補充application.yml文件(包含route):
為gateway模塊下的pom文件添加負載均衡依賴
為service-order模塊下的OrderController類添@RequestMapping("/api/order")注解
3.測試路由
通過訪問我們之前寫過的readDb接口來測試路由是否配置成功
啟動GatewayMainAppincation和任意一個Order微服務
瀏覽器訪問localhost/api/order/readDb,瀏覽器和idea控制太輸出以下信息,說明路由配置成功
4.總結
路由的核心職責是作為一個智能的決策點,通過一套規則系統,高效、可靠、安全地將請求指引到其正確的目的地,并在此過程中賦予系統靈活性、可擴展性和可維護性。
核心職責 | 網絡設備 (路由器) | 后端/API網關 | 前端框架 (React Router等) |
請求映射與分發 | 根據目標IP查表轉發 | 根據URL路徑分發到服務/控制器 | 根據URL渲染對應組件 |
路徑選擇與優化 | 核心功能,動態選擇最佳路徑 | 不常用 | 不涉及 |
隔離與安全 | 通過ACL過濾網絡流量 | 認證、授權、CORS、IP黑白名單 | 路由守衛(攔截未登錄訪問) |
抽象與解耦 | 隱藏內部網絡結構 | 隱藏微服務架構,提供統一API | 將URL與組件解耦 |
負載均衡 | 支持(如ECMP) | 核心功能,分發到服務實例 | 不涉及 |
流量控制與治理 | 策略路由(Policy-Based Routing) | 核心功能,限流、熔斷、灰度發布 | 不涉及 |