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) | 核心功能,限流、熔断、灰度发布 | 不涉及 |