SpringCloud Gateway動態路由

2020-12-09 計算機java編程

概述

線上項目發布一般有以下幾種方案:

停機發布藍綠部署滾動部署灰度發布停機發布 這種發布一般在夜裡或者進行大版本升級的時候發布,因為需要停機,所以現在大家都在研究 Devops 方案。

藍綠部署需要準備兩個相同的環境。一個環境新版本,一個環境舊版本,通過負載均衡進行切換與回滾,目的是為了減少服務停止時間。

滾動部署就是在升級過程中,並不一下子啟動所有新版本,是先啟動一臺新版本,再停止一臺老版本,然後再啟動一臺新版本,再停止一臺老版本,直到升級完成。基於 k8s 的升級方案默認就是滾動部署。

灰度發布也叫金絲雀發布,灰度發布中,常常按照用戶設置路由權重,例如 90%的用戶維持使用老版本,10%的用戶嘗鮮新版本。不同版本應用共存,經常與 A/B 測試一起使用,用於測試選擇多種方案。

上邊介紹的幾種發布方案,主要是引出我們接下來介紹的 spring-cloud-gateway 動態路由,我們可以基於動態路由、負載均衡和策略加載去實現灰度發布。當然現在有很多開源的框架可以實現灰度發布,這裡只是研究學習。

動態路由

spring-cloud-gateway 默認將路由加載在內存中。具體可以參見 InMemoryRouteDefinitionRepository 類的實現。

這裡我們基於 Redis 實現動態路由。基礎項目見 spring-cloud-gateway 簡介

1. 將 actuator 的端點暴露出來

2. redis 配置

3. 將原內存路由持久化到 redis

4. 重寫動態路由服務

5. 對外暴露接口

測試

測試前刪除我們配置的靜態路由,因為靜態路由和 redis 動態路由同時存在時取併集。

1.訪問 ocalhost:2000/actuator/gateway/routes , 可以看到只有默認路由。

這個時候訪問 192.168.124.5:2000/idc-provider1/provider1/1 根據結果可以推測能正確路由到 provider1, 測試結果一致。

2.創建 provider1路由,將路徑設置為 /p1/**,測試是否生效。

POST請求 localhost:2000/gateway/add

查看 redis 存儲,或者請求

localhost:2000/actuator/gateway/routes

, 都可以看到配置成功。

訪問

curl localhost:2000/p1/provider1/1

結果輸出 2001,與期望一致。

由此可見動態路由已經生效。

結語

本文到此結束。感興趣的小夥伴後續可以通過加載配置文件,基於權重進行灰度。

相關焦點

  • springcloud實踐二:gateway網關詳解
    網關配合註冊中心也可以很好的實現微服務的動態擴容,只需要在網關將請求路由轉發到註冊中心的微服務上即可,由註冊中心進行負載均衡處理。Spring Cloud Gateway旨在提供一種簡單而有效的方法來路由到api,並為它們提供額外功能,例如:安全性、監控和彈性控制。
  • Spring Cloud Gateway實現Token校驗
    GatewayFilter Factories路由過濾器允許以某種方式修改輸入的HTTP請求或輸出的HTTP響應。路由過濾器適用於特定路由。Spring Cloud Gateway包括許多內置的GatewayFilter工廠。3.1.1.
  • 使用redis在SpringCloud getway中進行速率限制
    <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId>
  • 5w 字 | 172 圖 | 超級賽亞級 Spring Cloud 實戰
    添加網關路由規則passjava-gateway項目中application.yml文件配置路由規則,並重啟passjava-gateway服務spring:  cloud:    gateway:      routes:        - id: route_portal
  • 阿里巴巴SpringCloud開源教程、文檔合集,趕緊收藏
    cloud config將配置存儲在資料庫中Spring Cloud Sleuth 之Greenwich版本全攻略Spring Boot Admin 2.1.0 全攻略阿里分布式事務框架GTS開源了!Eureka)(Finchley版本)史上最簡單的SpringCloud教程 | 第二篇: 服務消費者(rest+ribbon)(Finchley版本)史上最簡單的SpringCloud教程 | 第三篇: 服務消費者(Feign)(Finchley版本)史上最簡單的SpringCloud教程 | 第四篇:斷路器(Hystrix)(Finchley版本)史上最簡單的SpringCloud教程 | 第五篇: 路由網關
  • Spring Boot Admin 2.2.4 發布,兼容最新版本 Spring Boot
    spring boot admin 2.2.4 版本發布,本版本為 bug 修復版本 主要兼容 spring boot 2.3.x。
  • Spring Cloud 中 Zuul 網關到底有何牛逼之處?竟然這麼多人在用!
    動態路由:動態的將請求路由到不同的後端集群中。減少客戶端與服務端的耦合:服務可以獨立發展,通過網關層來做映射。-- spring cloud Eureka Client 啟動器 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency><
  • 2021-Java後端工程師面試指南-(SpringBoot+SpringCloud)
    服務發現和註冊中心Spring Cloud 核心組件:Feign 服務與服務直接的調用Spring Cloud 核心組件:Ribbon 負載均衡Spring Cloud 核心組件:Hystrix 熔斷 降級Spring Cloud 核心組件:Zuul SpringCloudGateway 服務網關聊聊Eureka吧首先什麼是Eureka首先,eureka在springcloud
  • SpringCloud常見面試題(2020最新版)
    Spring Cloud OpenFeign基於Ribbon和Hystrix的聲明式服務調用組件,可以動態創建基於Spring MVC註解的接口實現用於服務調用,在Spring Cloud 2.0中已經取代Feign成為了一等公民。
  • Spring Cloud-Hystrix 斷路器
    org.springframework.cloud.netflix.eureka.EnableEurekaClient;import org.springframework.cloud.netflix.feign.EnableFeignClients;import org.springframework.context.annotation.Bean;import org.springframework.web.client.RestTemplate
  • 基於Spring Boot和Spring Cloud實現微服務架構
    Spring Boot:旨在簡化創建產品級的 Spring 應用和服務,簡化了配置文件,使用嵌入式web伺服器,含有諸多開箱即用微服務功能,可以和spring cloud聯合部署。Spring XD:是一種運行時環境(伺服器軟體,非開發框架),組合spring技術,如spring batch、spring boot、spring data,採集大數據並處理。
  • 從零搭建 Spring Cloud 服務(超詳細)
    SpringCloud官網:https://spring.io/projects/spring-cloud(個人建議是用谷歌瀏覽器訪問官網打開中文翻譯粗略把官網讀一遍)把 Spring 全家桶相關的文章整理成了 PDF,關注微信公眾號 Java後端,回復 666 下載這個技術棧手冊。
  • springcloud五大組件
    首先我們來看springcloud是什麼?它是微服務架構集大成者,基於springboot構建,可以將一系列優秀組件進行完美整合。對熟悉的程式設計師來說,上手不麻煩,對新手來說,就需要了解springcloud架構再去學習。
  • 基於Spring Boot和Spring Cloud實現微服務架構學習
    Spring Boot:旨在簡化創建產品級的 Spring 應用和服務,簡化了配置文件,使用嵌入式web伺服器,含有諸多開箱即用微服務功能,可以和spring cloud聯合部署。Spring Framework:即通常所說的spring 框架,是一個開源的Java/Java EE全功能棧應用程式框架,其它spring項目如spring boot也依賴於此框架。
  • 基於 Spring Boot 和 Spring Cloud 實現微服務架構
    Spring Boot:旨在簡化創建產品級的 Spring 應用和服務,簡化了配置文件,使用嵌入式web伺服器,含有諸多開箱即用微服務功能,可以和spring cloud聯合部署。Spring XD:是一種運行時環境(伺服器軟體,非開發框架),組合spring技術,如spring batch、spring boot、spring data,採集大數據並處理。
  • 擁抱Kubernetes,再見了Spring Cloud
    boot 1.3(2016年12月):升級到spring4.2,新的spring-boot-devtools,緩存技術的自動配置(ehcache,hazelcast,redis,guava和infinispan)以及完全可執行的jar支持 Spring boot 1.4(2017年1月):升級到spring 4.3,couchbase/neo4j支持,啟動失敗分析和RestTemplateBuilder
  • 實現微服務架構最流行Style,Spring Boot+Spring Cloud
    Spring Boot:旨在簡化創建產品級的 Spring 應用和服務,簡化了配置文件,使用嵌入式web伺服器,含有諸多開箱即用微服務功能,可以和spring cloud聯合部署。Spring Framework:即通常所說的spring 框架,是一個開源的Java/Java EE全功能棧應用程式框架,其它spring項目如spring boot也依賴於此框架。
  • 基於Spring Boot+Cloud構建微雲架構
    Spring Boot:旨在簡化創建產品級的 Spring 應用和服務,簡化了配置文件,使用嵌入式web伺服器,含有諸多開箱即用微服務功能,可以和spring cloud聯合部署。Spring XD:是一種運行時環境(伺服器軟體,非開發框架),組合spring技術,如spring batch、spring boot、spring data,採集大數據並處理。
  • 安全的Spring Cloud配置
    我的GitHub存儲庫sample-spring-cloud-security在分支secure_config中提供了示例應用程式原始碼:https : //github.com/piomin/sample-spring-cloud-security/tree/secure_config。
  • 詳解SpringCloud中RabbitMQ消息隊列原理及配置,一篇就夠!
    rabbitmq已經被spring-boot做了整合訪問實現。spring cloud也對springboot做了整合邏輯。所以rabbitmq的依賴可以在spring cloud中直接使用。mq.config.exchange=log.direct# 路由鍵, 是定義某一個路由鍵。info級別日誌使用的queue的路由鍵。mq.config.queue.info.routing.key=log.info.routing.key# 路由鍵,error級別日誌使用的queue的路由鍵。