Spring Cloud Gateway 生產級實踐:高可用 API 網關架構與流量治理解析

API 網關的核心價值

在分布式微服務架構中,API 網關作為系統流量的唯一入口,承擔著路由分發、安全防護、流量治理三大核心職責。Spring Cloud Gateway 基于響應式編程模型與 Netty 高性能網絡框架,提供靈活的路由規則、動態過濾器鏈和深度集成的安全方案。

典型場景

API 網關的基本請求流轉如下:

graph LRClient -->|請求| GatewayGateway -->|路由| ServiceAGateway -->|路由| ServiceBGateway -->|路由| ServiceC

一、Spring Cloud Gateway 架構與核心機制

1.1 核心架構

Spring Cloud Gateway 采用Reactor 響應式模型,通過如下核心組件構建請求處理鏈路:

? Route(路由):定義請求轉發的規則。

? Predicate(斷言):用于匹配請求條件,如路徑、方法等。

? Filter(過濾器):在請求處理前后執行操作,如鑒權、日志記錄等。

請求處理流程如下:

// 簡化的請求處理流程
public Mono<Void> handle(ServerWebExchange exchange) {// 1. 路由匹配return routePredicateHandlerMapping.getHandler(exchange)  // 2. 執行過濾器鏈.flatMap(handler -> handler.handle(exchange))         // 3. 異常處理.doOnError(e -> log.error("處理異常", e));             }

1.2 Spring Cloud 組件協作

Spring Cloud Gateway 與Eureka 和 LoadBalancer的協作流程如下:

在這里插入圖片描述

工作流程

1.Client 發送請求(例如/api/users/1)。

2.Gateway 通過 Eureka 查詢 user-service 可用實例。

3.Eureka 返回可用實例列表。

4.Gateway 選擇合適的實例(負載均衡)。

5.Gateway 將請求轉發到選定的服務實例。

6.Service 處理請求并返回結果給 Gateway。

7.Gateway 將響應返回給 Client。

關鍵機制解析

? 服務發現集成:

Gateway 集成 Eureka 客戶端,自動從注冊中心拉取服務實例列表。

通過discovery.locator.enabled=true自動生成服務路由規則。

? 負載均衡機制:

Gateway 默認集成Spring Cloud LoadBalancer(原 Ribbon),支持輪詢、權重等策略。

使用 Eureka 作為注冊中心時,網關自動獲取服務實例并進行負載均衡。

1.3 Spring Cloud Gateway 配置示例

完整配置

在gateway-service的application.yml中配置如下:

server:port: 9000  # 網關服務的端口spring:application:name: gateway-service  # 網關服務的名稱cloud:gateway:routes:- id: user-service  # 路由的名稱uri: lb://user-service  # 從 Eureka 發現 user-servicepredicates:- Path=/user/**  # 僅轉發 /user/** 的請求filters:- StripPrefix=1  # 去掉 /user 前綴后再轉發eureka:  # 網關服務注冊到 Eurekaclient:service-url:defaultZone: http://localhost:8761/eureka/  # Eureka 注冊中心地址instance:prefer-ip-address: true  # 讓網關使用 IP 注冊

配置解析

1.Eureka 注冊

? gateway-service將自己的信息注冊到 Eureka,方便其他微服務訪問。

2.lb://user-service 機制

? 讓網關從Eureka 動態發現user-service的地址,而無需手動指定 IP。

? lb://代表負載均衡(Load Balancer),會自動選擇一個可用實例并根據負載均衡策略在多個實例之間分配流量。

3.路由規則

? Path=/user/**:匹配/user/開頭的所有請求,并轉發給user-service。

4.過濾器

? StripPrefix=1:去掉請求路徑中的/user前綴,使user-service僅接收純路徑請求。

二、API 網關的四大職責

API 網關在微服務架構中的主要職責包括:

1.動態路由:

? 基于URL、請求參數、請求頭等動態轉發流量。

2.流量管理:

? 提供限流、熔斷、負載均衡等能力,保障系統穩定性。

3.安全控制:

? 集成身份認證與權限管理,確保 API 訪問安全。

4.日志與監控:

? 記錄請求信息,支持服務監控與分析。

如下將分別講解各個職責的工作機制:

三、動態路由:靈活性與生產級實現

Spring Cloud Gateway 允許使用配置文件或代碼來定義路由規則,從而提供靈活的請求轉發能力。

1. 配置文件定義路由

在gateway-service項目結構中,application.yml作為 Spring Cloud Gateway 的核心配置文件,存放在以下位置:

gateway-service/├── src/main/resources/│   ├── application.yml  <-- ? 這里就是 Spring Cloud Gateway 的配置文件

在application.yml中,可對請求路由進行配置。分為靜態路由配置和動態路由配置。

2. 靜態路由 vs. 動態路由

靜態路由適用于穩定、不頻繁變更的場景,而動態路由更適合需要靈活調整或集中管理的微服務架構。
在這里插入圖片描述

3.1 靜態路由配置

Spring Cloud Gateway 支持YAML 配置和Java 代碼兩種方式定義靜態路由。

1. YAML 配置方式

示例:

spring:cloud:gateway:routes:- id: user-service  # 路由 ID,方便管理uri: http://localhost:8081  # 目標服務地址predicates:- Path=/user/**  # 匹配 /user/** 的請求filters:- StripPrefix=1  # 去除 /user 前綴

解析:

? id:路由名稱,便于管理,如id: user-service代表“用戶服務”路由。

? uri:請求最終轉發的目標地址,如http://localhost:8081。

? predicates:定義請求匹配規則,如Path=/user/**表示匹配所有以/user/開頭的請求。

? filters:對請求進行處理,如StripPrefix=1去掉/user前綴,使/user/list變為/list,簡化目標服務路徑。

示例訪問效果:

# 訪問 http://localhost:8080/user/list
# 實際會被轉發到 http://localhost:8081/list

2. Java 代碼方式

在應用的配置類中定義路由規則:

@Configuration
public class GatewayConfig {@Beanpublic RouteLocator customRouteLocator(RouteLocatorBuilder builder) {return builder.routes()// 匹配路徑 /user/** 的請求.route("user-service", r -> r.path("/user/**")// 去掉路徑前綴 /user.filters(f -> f.stripPrefix(1))// 將請求轉發到 http://localhost:8081.uri("http://localhost:8081")).build();}

解析:

? 定義 RouteLocator Bean(@Bean注解的方法會被 Spring 容器管理)。

? 使用 RouteLocatorBuilder 配置路由規則,與 YAML 配置方式等效。

3. 靜態路由的特點

? 適用于較固定的服務地址,比如內部服務間調用。

? 配置簡單,但如果微服務地址變化,需要手動修改并重啟網關。

? 不適用于大規模微服務,管理和維護成本較高,擴展性差。

3.2 動態路由配置

Spring Cloud Gateway 支持三種動態路由實現方式:
在這里插入圖片描述

方式1:基于服務發現的動態路由(自動生效,無需手動刷新)

實現原理

Spring Cloud Gateway集成 Eureka,當啟用服務發現功能后,網關會自動為注冊到 Eureka 的服務生成默認路由,并同步服務實例變化。

配置示例

spring:cloud:gateway:discovery:locator:enabled: true        # 核心開關:啟用服務發現自動路由lower-case-service-id: true  # 自動將服務名轉為小寫(兼容Eureka默認命名規則)

行為特征

? 自動生成路由:每個服務都會生成lb://service-id/規則,例如user-service變為/user-service/

? 動態更新:當服務實例上下線時,網關自動更新,無需手動操作。

? 優先級控制:自動路由的優先級低于手動配置的路由。

驗證方式

# 訪問自動生成的路由(假設 user-service 已注冊到 Eureka)
curl http://gateway:port/user-service/api/users/1# 關閉 user-service 實例后再次訪問,網關自動屏蔽不可用節點

方式2:基于配置中心的動態路由(需手動刷新)

實現原理

使用Spring Cloud Config等配置中心管理路由,修改配置后需手動調用刷新接口。

配置示例(Config Server + Git)

# config-repo/gateway-routes.yml
routes:- id: order-serviceuri: lb://order-service  # 負載均衡標識predicates:- Path=/api/orders/**filters:- StripPrefix=1

刷新流程

1.修改配置中心的路由規則

2.調用刷新接口

curl -X POST http://gateway:port/actuator/refresh

3.網關重新加載配置,立即生效

方式3:基于數據庫的動態路由(需主動觸發刷新)

實現原理

? 將路由規則持久化到數據庫。

? 通過自定義RouteDefinitionRepository實現動態加載,適用于生產環境。

數據庫表設計

CREATE TABLE gateway_routes (id VARCHAR(32) PRIMARY KEY COMMENT '路由ID',uri VARCHAR(255) NOT NULL COMMENT '目標服務URI',predicates TEXT NOT NULL COMMENT '斷言規則(JSON格式)',filters TEXT COMMENT '過濾器鏈(JSON格式)',`order` INT DEFAULT 0 COMMENT '路由優先級'
);

核心代碼

自定義路由倉庫

@Component
public class DatabaseRouteRepository implements RouteDefinitionRepository {@Autowiredprivate RouteDao routeDao;  // 數據訪問層(MyBatis/JPA)// 從數據庫加載路由規則@Overridepublic Flux<RouteDefinition> getRouteDefinitions() {return Flux.fromIterable(routeDao.findAllActiveRoutes()).map(this::parseRouteDefinition);}// 轉換實體為路由定義private RouteDefinition parseRouteDefinition(RouteEntity entity) {RouteDefinition definition = new RouteDefinition();definition.setId(entity.getId());definition.setUri(URI.create(entity.getUri()));definition.setPredicates(parsePredicates(entity.getPredicates()));definition.setFilters(parseFilters(entity.getFilters()));definition.setOrder(entity.getOrder());return definition;}
}

觸發路由刷新

@RestController
@RequestMapping("/gateway")
public class RouteRefreshController {@Autowiredprivate GatewayRoutesRefresher refresher;// 手動觸發路由刷新@PostMapping("/refresh")public String refreshRoutes() {refresher.refreshRoutes();return "路由刷新成功";}
}

動態更新流程

1.修改數據庫中的路由規則

2.調用刷新接口

curl -X POST http://gateway:port/gateway/refresh

3.網關重新加載規則,立即生效

3.3 三種動態路由方案對比
在這里插入圖片描述

3.4 混合模式

混合模式思路:

? 自動路由處理常規服務

? 手動配置處理特殊路由

配置示例

spring:cloud:gateway:discovery:locator:enabled: true        # 啟用服務發現自動路由lower-case-service-id: trueroutes:# 手動配置的靜態路由(特殊需求)- id: special-routeuri: lb://special-service  # 目標服務predicates:- Path=/api/special/**    # 匹配路徑filters:- StripPrefix=1           # 去除路徑前綴

代碼示例:

@Configuration
public class GatewayConfig {@Beanpublic RouteLocator customRouteLocator(RouteLocatorBuilder builder) {return builder.routes()// 靜態路由 - 手動配置特殊需求.route("special-route", r -> r.path("/api/special/**")  // 匹配 /api/special/** 的請求.filters(f -> f.stripPrefix(1))  // 去除路徑前綴.uri("lb://special-service"))  // 目標服務(負載均衡).build();}
}

3.5 最佳實踐建議

不同規模的系統可以采用不同的路由策略:

1.小型應用

? 直接啟用服務發現自動路由(spring.cloud.gateway.discovery.locator.enabled=true),無需額外配置,開箱即用。

2.中等規模

? 使用配置中心(如 Spring Cloud Config/Nacos)管理路由規則。

? 結合/actuator/refresh實現動態更新,提高靈活性。

3.生產級系統

? 采用數據庫管理路由,實現更細粒度的控制。

? 結合緩存(如 Redis)減少數據庫查詢,提高性能。

? 配合事件驅動機制(如 Spring Cloud Bus),實現全網關集群的自動同步。

四、流量控制:過濾器與熔斷策略

Spring Cloud Gateway 通過全局過濾器和局部過濾器進行請求攔截和流量管理。

? 全局過濾器(GlobalFilter):作用于所有請求,必須實現GlobalFilter接口。

? 局部過濾器(GatewayFilter):僅作用于指定路由,需要實現GatewayFilter并結合GatewayFilterFactory使用。

全局過濾器vs局部過濾器
在這里插入圖片描述

4.1 全局限流示例

自定義全局限流過濾器(基于 Redis 實現令牌桶算法)

防止惡意請求過載服務。

@Component
public class RateLimitFilter implements GlobalFilter, Ordered {private final RedisTemplate<String, Integer> redisTemplate;// 通過構造函數注入 RedisTemplate,用于存儲和管理請求計數public RateLimitFilter(RedisTemplate<String, Integer> redisTemplate) {this.redisTemplate = redisTemplate;}@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {// 獲取客戶端 IP 作為限流的 keyString key = "rate_limit:" + exchange.getRequest().getRemoteAddress();// 從 Redis 獲取當前請求次數Integer current = redisTemplate.opsForValue().get(key);// 如果當前請求次數小于 5,則允許請求通過,并增加計數if (current == null || current < 5) {redisTemplate.opsForValue().increment(key, 1);return chain.filter(exchange);}// 超過限制,返回 429 Too Many Requestsexchange.getResponse().setStatusCode(HttpStatus.TOO_MANY_REQUESTS);return exchange.getResponse().setComplete();}@Overridepublic int getOrder() {return -1; // 過濾器優先級,值越小優先級越高}
}

解析

1.實現 GlobalFilter 接口

? filter()方法控制請求流量,每個 IP最多 5 次請求,超過限制后網關直接拒絕請求,不再調用后端服務。

2.實現 Ordered 接口

? getOrder()方法用于控制過濾器的執行順序,值越小,優先級越高。

? -1代表比默認過濾器(優先級通常為 0)更早執行。

全局過濾器的自動生效

無需在 application.yml 配置,Spring Boot會自動掃描 @Component 修飾的 GlobalFilter 并生效。所有通過網關的請求都會經過這個全局過濾器!

4.2 局部限流示例

自定義局部限流過濾器(基于 Redis 的 IP 限流)

@Component
public class RateLimitGatewayFilterFactory extends AbstractGatewayFilterFactory<RateLimitGatewayFilterFactory.Config> {private final RedisTemplate<String, Integer> redisTemplate;public RateLimitGatewayFilterFactory(RedisTemplate<String, Integer> redisTemplate) {super(Config.class);this.redisTemplate = redisTemplate;}@Overridepublic GatewayFilter apply(Config config) {return (exchange, chain) -> {String key = "rate_limit:" + exchange.getRequest().getRemoteAddress();Integer current = redisTemplate.opsForValue().get(key);// 允許每個 IP 每分鐘最多請求 5 次if (current == null || current < 5) {redisTemplate.opsForValue().increment(key, 1);return chain.filter(exchange);}// 超過限制,返回 429exchange.getResponse().setStatusCode(HttpStatus.TOO_MANY_REQUESTS);return exchange.getResponse().setComplete();};}// 過濾器的配置類public static class Config {}
}

局部過濾器的應用

在application.yml中配置,指定RateLimitGatewayFilterFactory過濾器:

spring:cloud:gateway:routes:- id: user-serviceuri: lb://user-servicepredicates:- Path=/user/**filters:- StripPrefix=1- name: RateLimitGatewayFilterFactory  # 添加自定義限流過濾器

代碼解析

1.繼承 AbstractGatewayFilterFactory

? 讓 Spring Cloud Gateway 識別該類作為局部過濾器。

? apply(Config config)方法返回GatewayFilter實例,定義具體的過濾邏輯。

2.使用 Redis 存儲請求計數

? key = rate_limit:客戶端IP,存儲該 IP 的請求次數。

? 每個 IP每分鐘最多允許 5 次請求,超出后返回429 Too Many Requests。

3.如何生效?

? 局部過濾器必須在 application.yml 指定,不會影響所有請求。

? 僅作用于匹配 /user/** 的路由請求。

4.3 熔斷降級集成(Resilience4j)

spring:cloud:gateway:routes:- id: order-serviceuri: lb://order-servicefilters:- name: CircuitBreakerargs:name: orderServiceBreakerfallbackUri: forward:/fallback/order

五、安全策略:OAuth2 與 JWT 深度集成

5.1 認證與授權機制

JWT 認證全局過濾器 (JwtAuthFilter)

該類實現了 Spring Cloud Gateway 的全局過濾器 (GlobalFilter),用于在網關層進行 JWT 認證,攔截未授權請求。

@Component
public class JwtAuthFilter implements GlobalFilter, Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {// 從請求頭中獲取 Authorization 頭部的 JWTString token = exchange.getRequest().getHeaders().getFirst("Authorization");// 如果 Token 為空或無效,則返回 401 Unauthorizedif (token == null || !validateToken(token)) {exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);return exchange.getResponse().setComplete(); // 直接終止請求}// 認證通過,繼續執行下一個過濾器return chain.filter(exchange);}/*** 校驗 JWT Token(這里只是示例,實際應解析 JWT 并驗證有效性)*/private boolean validateToken(String token) {// 解析 JWT 并驗證簽名、過期時間等(此處省略具體邏輯)return true;}@Overridepublic int getOrder() {return -10; // 過濾器優先級,值越小優先級越高}
}

解析

? filter() 方法

? 獲取請求頭中的AuthorizationToken。

? 無效→ 直接返回401 Unauthorized,請求被攔截。

? 有效→ 繼續執行后續過濾器,轉發請求到下游服務。

? validateToken() 方法

? 解析并驗證 JWT(需解碼 JWT 并檢查簽名、過期時間等)。

? 返回true代表 Token 有效。

? getOrder() 方法

? -10代表優先級較高(早于默認過濾器執行)。

? 確保在網關早期攔截無效請求,避免將未授權請求轉發到微服務。

適用場景:

? API 認證(保護微服務,避免未經授權的訪問)。

? 網關級別 JWT 校驗(減少后端微服務的安全負擔)。

? 微服務安全加固(結合 OAuth2 或 Keycloak 進行更強的安全控制)。

5.2 結合 OAuth2 進行認證

Spring Cloud Gateway 也可以與 OAuth2 結合,實現更復雜的認證授權。

如下是Spring Cloud Gateway + OAuth2認證的完整示例,包含配置文件、代碼和請求示例,確保網關具備如下功能:

1.攔截請求并校驗 JWT 令牌(OAuth2 資源服務器模式)

2.作為 OAuth2 客戶端訪問受保護資源(可選,網關調用下游服務)

3.微服務解析 JWT,確保安全性

步驟 1:依賴引入

在gateway-server的pom.xml中添加必要的依賴:<dependencies><!-- Spring Cloud Gateway --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><!-- Spring Security OAuth2 資源服務器 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-oauth2-resource-server</artifactId></dependency><!-- Spring Security OAuth2 客戶端(如果 Gateway 需要訪問受保護 API) --><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-oauth2-client</artifactId></dependency><!-- Spring Boot Actuator (可選,用于刷新配置) --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>
</dependencies>

步驟 2:配置 gateway-server

在application.yml配置OAuth2 資源服務器和OAuth2 客戶端(如果 Gateway 需要訪問受保護資源)。

server:port: 9000  # 設置網關服務的端口為 9000spring:cloud:gateway:discovery:locator:enabled: true  # 啟用服務發現自動路由,網關可以動態地從 Eureka 中發現服務lower-case-service-id: true  # 將服務 ID 轉為小寫,避免大小寫問題routes:- id: user-service  # 路由名稱為 user-serviceuri: lb://user-service  # 使用負載均衡的方式從 Eureka 服務注冊中心發現 user-service 的實例predicates:- Path=/user/**  # 路由匹配所有以 /user/ 開頭的請求filters:- StripPrefix=1  # 去掉路徑中的 /user 前綴,轉發給目標服務(user-service)security:oauth2:resourceserver:jwt:issuer-uri: https://auth-server.com  # OAuth2 認證服務器的地址,用于驗證 JWTjwk-set-uri: https://auth-server.com/oauth2/jwks  # 獲取 JWT 公鑰的 URI,用于驗證 JWT 簽名client:  # 配置 OAuth2 客戶端registration:my-client:  # 定義一個名為 my-client 的客戶端provider: my-auth-server  # 指定 OAuth2 認證服務器的提供者(在下面的 provider 中定義)client-id: gateway-service  # 客戶端 ID,通常是在認證服務器上注冊的服務名稱client-secret: secret  # 客戶端密鑰,用于身份驗證authorization-grant-type: client_credentials  # 使用客戶端憑證授權類型(client_credentials),適用于無用戶交互的應用場景scope: read,write  # 定義客戶端的權限范圍,允許的操作權限(如 read 和 write)provider:my-auth-server:  # 配置 OAuth2 認證服務器信息issuer-uri: https://auth-server.com  # 認證服務器的地址,JWT 的發行者 URI

解析:

? issuer-uri:用于校驗 JWT 是否由可信 OAuth2 服務器簽發。

? jwk-set-uri:JWT 公鑰端點,供網關校驗令牌。

? 如果網關自身需要 OAuth2 令牌訪問受保護 API,則需要配置client-id。

步驟 3:啟用 OAuth2 認證

創建SecurityConfig,讓 Gateway 校驗 JWT 并進行訪問控制。

@Configuration
public class SecurityConfig {@Beanpublic SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {return http.authorizeHttpRequests(auth -> auth.requestMatchers("/public/**").permitAll()  // 允許訪問 /public 開頭的接口.anyRequest().authenticated()  // 其他請求需要認證).oauth2ResourceServer(oauth2 -> oauth2.jwt()) // 啟用 JWT 校驗.build();}
}

解析:

? 允許/public/**接口直接訪問,其他接口需要 JWT 認證。

? oauth2ResourceServer().jwt()讓網關解析 JWT。

步驟 4:自定義 JWT 過濾器(可選,攔截無效 Token)

創建JwtAuthFilter進行更細粒度的控制:

@Component
public class JwtAuthFilter implements GlobalFilter, Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {String token = exchange.getRequest().getHeaders().getFirst(HttpHeaders.AUTHORIZATION);if (token == null || !validateToken(token)) {exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);return exchange.getResponse().setComplete();}return chain.filter(exchange);}private boolean validateToken(String token) {// 解析 JWT 并驗證(這里省略解析邏輯)return true;}@Overridepublic int getOrder() {return -10;}
}

解析:

? 如果Authorization頭為空或 Token 無效,則返回401 Unauthorized。

? 放行有效請求,繼續執行 Gateway 路由。

步驟 5:受保護微服務 (user-service)

在user-service配置 JWT 校驗,確保網關轉發的請求也是安全的:

spring:security:oauth2:resourceserver:jwt:issuer-uri: https://auth-server.com

解析:

? user-service也會校驗 JWT,避免繞過網關直接訪問服務。

步驟 6:測試 OAuth2 認證

(1) 獲取 OAuth2 令牌

curl -X POST https://auth-server.com/oauth/token \-d "client_id=gateway-service" \-d "client_secret=secret" \-d "grant_type=client_credentials"

返回:

{"access_token": "eyJhbGciOiJIUzI1...","token_type": "bearer","expires_in": 3600
}

(2)帶 Token 訪問 Gateway

curl -H “Authorization: Bearer eyJhbGciOiJIUzI1…” http://localhost:9000/user/info
解析:

? Token 有效:網關轉發請求到user-service并返回數據。

? Token 無效:返回401 Unauthorized。

六、生產級最佳實踐

6.1 性能調優指標
在這里插入圖片描述

開啟 Actuator 監控

Spring Cloud Gateway 可集成Spring Boot Actuator,提供實時監控能力。

management:endpoints:web:exposure:include: gateway, health, metrics

訪問http://localhost:8080/actuator/gateway/routes可查看當前所有路由。

結合 Prometheus + Grafana 監控請求情況

? Prometheus:收集 Gateway 請求數據。

? Grafana:可視化請求成功率、響應時間等關鍵指標。

6.2 高可用架構設計

graph TDA[客戶端] --> B[Gateway集群]B --> C[Eureka注冊中心]B --> D[Redis限流緩存]B --> E[Prometheus監控]C --> F[微服務實例]

七、總結

7.1 核心重點

? API 網關提供統一入口:簡化調用,具備流量管控、安全防護、動態路由等功能。

? Eureka 與 Gateway 集成:實現服務發現與自動負載均衡,簡化微服務交互。

? 靜態與動態路由:根據業務場景靈活選擇路由方式,適配不同需求。

? 安全策略與過濾器:在流量控制、身份驗證、限流等方面提供了強大的支持,確保微服務的高效與安全。

? 生產級優化:結合配置中心、數據庫動態路由提升靈活性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/72511.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/72511.shtml
英文地址,請注明出處:http://en.pswp.cn/web/72511.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在Pycharm配置conda虛擬環境的Python解釋器

〇、前言 今天在配置python解釋器時遇到了這樣的問題 經過一下午自行摸索、上網搜尋后&#xff0c;終于找到的解決的方案&#xff0c;遂將該方法簡要的記錄下來&#xff0c;以備后用&#xff0c;并希望能幫助到有同樣問題或需求的朋友:) 我所使用的軟件的版本如下&#xff0c;假…

寬帶(Broadband)

寬帶&#xff08;Broadband&#xff09; 是一種高速互聯網接入技術&#xff0c;能夠同時傳輸多種類型的數據&#xff08;如語音、視頻、文本等&#xff09;。與傳統的窄帶&#xff08;如撥號上網&#xff09;相比&#xff0c;寬帶提供了更高的數據傳輸速率和更穩定的連接&#…

集成學習(上):Bagging集成方法

一、什么是集成學習&#xff1f; 在機器學習的世界里&#xff0c;沒有哪個模型是完美無缺的。就像古希臘神話中的"盲人摸象"&#xff0c;單個模型往往只能捕捉到數據特征的某個側面。但當我們把多個模型的智慧集合起來&#xff0c;就能像拼圖一樣還原出完整的真相&a…

VLLM:虛擬大型語言模型(Virtual Large Language Model)

VLLM&#xff1a;虛擬大型語言模型&#xff08;Virtual Large Language Model&#xff09; VLLM指的是一種基于云計算的大型語言模型的虛擬實現。它通常是指那些由多個服務器組成的分布式計算環境中的復雜機器學習模型&#xff0c;這些模型能夠處理和理解大量的文本數據。VLLM的…

Springboot+Vue登錄、注冊功能(含驗證碼)(后端!)

我們首先寫一個接口&#xff0c;叫login&#xff01;然后對傳入一個user&#xff0c;因為我們前端肯定是要傳過來一個user&#xff0c;然后我們后端返回一個user&#xff0c;因為我們要根據這個去校驗&#xff01;我們還引入了一個hutool的一個東西&#xff0c;在pom文件里面引…

馮 ? 諾依曼體系結構

馮 ? 諾依曼體系結構 一、馮 ? 諾依曼體系結構推導階段 1&#xff1a;初始計算機體系結構&#xff08;僅輸入、運算、輸出&#xff09;階段 2&#xff1a;加入控制功能&#xff0c;初步形成 CPU 概念階段 3&#xff1a;性能瓶頸與引入內存階段 4&#xff1a;最終馮諾依曼體系…

Python print() 打印多個變量時,可變對象和不可變對象的區別

先來看這段代碼&#xff1a; tmp [] print(tmp, tmp.append(1), tmp)輸出&#xff1a; [1] None [1]并不是一些人認為的 [] None [1] 這是因為列表是可變對象&#xff0c;print()打印前會先計算出所有結果&#xff0c;最后再打印出來&#xff0c;中間在列表中添加了1&#…

【數學 線性代數】差分約束

前言 C算法與數據結構 本博文代碼打包下載 什么是差分約束 x系列是變量&#xff0c;y系列是常量&#xff0c;差分系統由若干如下不等式組成。 x1-x2 < y1 x2-x3 < y2 ? \cdots ? 可能有負環的最短路 個人習慣&#xff1a;如果存在a指向b的邊&#xff0c;則a是b的…

AutoGen :使用 Swarm 構建自治型多智能體團隊

??????本人承接各類AI相關應用開發項目(包括但不限于大模型微調、RAG、AI智能體、NLP、機器學習算法、運籌優化算法、數據分析EDA等) !!!?????? 有意愿請私信!!!AutoGen 的 AgentChat 模塊提供了一種強大的方法來構建多智能體協作系統。 在之前的文章中,我們探討了…

2025人工智能“落地生花”:這六大領域正掀起顛覆性革命

——從醫療到養老&#xff0c;一場“AI”的全民狂歡正在上演 2025年的春天&#xff0c;全球科技界的熱搜被一個中國AI大模型“霸榜”——DeepSeek。從春晚的機器人熱舞到政務系統的“數字員工上崗”&#xff0c;從醫療診斷到工業煉鋼&#xff0c;這場始于春節的技術海嘯&#…

第27周JavaSpringboot git初識

Git 課程筆記 一、Git 的介紹 1. Git 的誕生背景 Git 是 Linux 內核的作者 Linus Torvalds 為了更好地管理 Linux 內核開發而創建的版本控制系統。在 Linux 內核開發初期&#xff0c;由于開發者眾多&#xff0c;協作成本很高&#xff0c;后來使用了 BitKeeper 工具來輔助協作…

藍耘智算|從靜態到動態:探索Maas平臺海螺AI圖片生成視頻功能的強大能力

文章目錄 &#x1f44f;一、技術介紹&#x1f44f;二、平臺注冊&#x1f44f;三、功能體驗&#x1f44f;四、總結 隨著人工智能技術的快速發展&#xff0c;視頻處理和生成技術已經成為了眾多行業關注的熱點。最近&#xff0c;我有機會體驗了藍耘智算平臺的Maas平海螺AI視頻產品…

解決從deepseek接口獲取的流式響應輸出到前端都是undefined的問題

你的前端 EventSource 代碼遇到了 undefined 連續輸出 的問題&#xff0c;通常是因為&#xff1a; AI 返回的內容被拆成了單個字符&#xff0c;導致前端 JSON.parse(event.data).content 獲取到的是單個字符&#xff0c;而 undefined 可能是因為某些數據塊沒有 content 字段。…

VLLM專題(二十七)—使用 Kubernetes

在Kubernetes上部署vLLM是一種可擴展且高效的方式來服務機器學習模型。本指南將引導您使用原生Kubernetes部署vLLM。 此外,您還可以使用以下任意一種方式將vLLM部署到Kubernetes: HelmInftyAI/llmazKServekubernetes-sigs/lwsmeta-llama/llama-stacksubstratusai/kubeaivllm…

前綴和 之 哈希表 之 和 的奇偶與倍數

文章目錄 930.和相同的二元子數組523.連續的子數組和 求解連續子數組的和的問題&#xff0c;常常會使用到這個前綴和的思路&#xff0c;當然當數組存在單調性的時候&#xff0c;可以考慮使用不定長滑動窗口&#xff0c;在這里解釋一下&#xff0c;何為數組的和存在這個單調性&a…

Docker Compose 和 Kubernetes(K8s)對比

Docker Compose 和 Kubernetes&#xff08;K8s&#xff09;在某些方面有相似的功能&#xff0c;但它們的 核心用途和適用場景不同。以下是它們的主要區別和聯系&#xff1a; 1. Docker Compose 和 Kubernetes 的區別 對比項Docker ComposeKubernetes&#xff08;K8s&#xff0…

晶藝代理,100V3.5A高耐壓LA1823完全替換MP9487--啟燁科技有限公司

晶藝品牌LA1823是異步降壓轉換器&#xff0c;COT控制&#xff0c;PFM工作模式, 150KHz/ 250KHz/ 450KHz &#xff0c;開關頻率可調節&#xff0c;輸入電壓4.5~100V&#xff0c;2A平均電流&#xff0c;峰值電流3.5A&#xff0c;采用ESOP8封裝。 晶藝LA1823的特性&#xff1a; 4.…

PLC控制柜在技術創新驅動中功能演進 尤勁恩科技

在智能制造體系中&#xff0c;PLC控制柜不僅承擔著傳統設備控制的基礎功能&#xff0c;更通過工業以太網、PROFIBUS等現場總線技術&#xff0c;構建起分布式控制系統&#xff08;DCS&#xff09;。這種拓撲結構使生產線具備實時數據采集、遠程監控和智能決策能力&#xff0c;顯…

【JavaEE】Spring Boot 日志

目錄 一、日志概述二、使用日志2.1 打印日志2.2 日志框架2.2.1 門面 / 外觀 模式 2.3 日志級別2.3.1 六大分類2.3.2 使用 2.4 日志級別配置2.5 日志的持久化2.6 日志文件分割2.7 日志文件格式2.8 Slf4j 簡單打印日志 一、日志概述 ?志主要是為了發現問題, 分析問題, 定位問題…

代碼隨想錄算法訓練營第34天 | 62.不同路徑 63. 不同路徑 II 整數拆分 不同的二叉搜索樹 (跳過)

62.不同路徑 62. 不同路徑 - 力扣&#xff08;LeetCode&#xff09; 本題大家掌握動態規劃的方法就可以。 數論方法 有點非主流&#xff0c;很難想到。 代碼隨想錄 視頻講解&#xff1a;動態規劃中如何初始化很重要&#xff01;| LeetCode&#xff1a;62.不同路徑_嗶哩嗶哩_b…