Nepxion/Discovery灰度發佈組件的使用教程(一)、灰度組件的配置及灰度路由的使用

知道軍哥的灰度發佈路由組件好長時間了,但是由於項目需要和緊急度一直都沒有深入的去了解和使用,最近因爲新項目上線,涉及到一些灰度發佈灰度路由的需求,因此決定開始研究一下。

軍哥(任浩軍)實際不但開發了灰度發佈組件,還開發出來很多其他的實用組件,在這打個廣告,算是表達了對軍哥架構思路的佩服之情。

Discovery從Spring Cloud 很早版本的時候就開始支持了,後來到了Spring Cloud G版本纔開始使用,現在是使用的Discovery5.0.0,還沒有正式發佈,按軍哥的意思是等待Spring Cloud Alibaba發佈最新版本,阿里巴巴Nacos也是剛剛發佈了1.0.0版本。所以提前編譯打包了5.0.0的代碼到私有倉庫,直接引包來使用了,寫這篇文章的時候軍哥還沒有正式在Maven倉庫提交5.0.0的版本鏡像呢

軍哥的文檔寫的還算是比較詳細的,按着文檔操作說明來做,應該能夠成功應用,但是在使用的過程中,還是有些使用不明白的地方,和需要理解的地方,在這裏講解一下也算做個記錄。

首先如何引入依賴,灰度組件中有好多模塊,分別是作用在不同地方的依賴,起到不同的作用。

從功能上劃分,分爲註冊中心客戶端(discovery-plugin-starter-*),配置中心客戶端(discovery-plugin-config-center-starter-*),用戶自定義和編程灰度路由策略(服務客戶端,網關客戶端)(discovery-plugin-strategy-starter-*),控制檯(discovery-console-starter-*)依賴幾大塊。

從註冊中心細分,又分爲 eureka(discovery-plugin-starter-eureka),consul(discovery-plugin-starter-consul),Zookeeper(discovery-plugin-starter-zookeeper),nacos(discovery-plugin-starter-nacos),

從配置中心細分,又分爲Apollo(discovery-plugin-config-center-starter-apollo),nacos(discovery-plugin-config-center-starter-nacos),redis(discovery-plugin-config-center-starter-redis),(如果需要持久化,這部分必不可少)

控制檯的細分,又分爲eureka (discovery-console)eureka有一點不同沒有特意封裝,直接使用discovery-console即可, Apollo(discovery-console-starter-apollo), nacos(discovery-console-starter-nacos), redis(discovery-console-starter-redis)

管理中心實現,Spring Boot Admin (discovery-plugin-admin-center)

圖形化灰度發佈等桌面程序 (discovery-console-desktop)

 

如果你是微服務客戶端,使用eureka作爲註冊中心來使用的,那麼微服務的pom依賴需要按需引入

<!-- 灰度註冊中心 -->
        <dependency>
            <groupId>com.nepxion</groupId>
            <artifactId>discovery-plugin-starter-eureka</artifactId>
        </dependency>

<!-- 灰度路由微服務客戶端 -->
        <dependency>
            <groupId>com.nepxion</groupId>
            <artifactId>discovery-plugin-strategy-starter-service</artifactId>
        </dependency>

如果你是微服務客戶端,使用nacos作爲註冊中心,配置中心來使用的,那麼微服務的pom依賴需要按需引入

        <!-- 灰度註冊中心 -->
        <dependency>
            <groupId>com.nepxion</groupId>
            <artifactId>discovery-plugin-starter-nacos</artifactId>  
        </dependency>

        <!-- 灰度配置中心 -->
        <dependency>
            <groupId>com.nepxion</groupId>
            <artifactId>discovery-plugin-config-center-starter-nacos</artifactId>
        </dependency>

        <!-- 灰度路由微服務客戶端 -->
        <dependency>
            <groupId>com.nepxion</groupId>
            <artifactId>discovery-plugin-strategy-starter-service</artifactId>
        </dependency>

如果你是微服務的網關,以Spring Cloud Gateway爲例,你需要引入除了上面註冊中心配置中心的引入不變,

discovery-plugin-starter-eureka、discovery-plugin-starter-nacos、discovery-plugin-config-center-starter-nacos正常引入依賴

如果是基於Gateway則還需要引入

        <!-- 灰度路由微服務網關 -->
        <dependency>
            <groupId>com.nepxion</groupId>
            <artifactId>discovery-plugin-strategy-starter-gateway</artifactId>
        </dependency>

如果是基於Zuul則還需要引入

        <!-- 灰度路由微服務網關 -->
        <dependency>
            <groupId>com.nepxion</groupId>
            <artifactId>discovery-plugin-strategy-starter-zuul</artifactId>
        </dependency>

如果用到了Hystrix,則灰度Hystrix做線程模式的服務隔離必須引入的插件

        <dependency>
            <groupId>com.nepxion</groupId>
            <artifactId>discovery-plugin-strategy-starter-hystrix</artifactId>
        </dependency>

上面就是普通微服務,還有網關的配置引入依賴就這些即可了。

做灰度發佈路由,還需要一個動態配置功能,那麼這就需要建立一個控制檯後臺服務,你需要自己新建一個控制檯的後端服務,如果是基於eureka來使用的,則控制檯要引入

        <!-- 灰度發佈對接控制檯 -->
        <dependency>
            <groupId>com.nepxion</groupId>
            <artifactId>discovery-console</artifactId>
        </dependency>

組件沒有特意爲eureka再包裝一層,封裝類似於discovery-console-starter-eureka的東西,而是直接使用的discovery-console即可

如果是基於nacos的需要引入

        <!-- 灰度發佈對接控制檯 -->
        <!-- <dependency>
            <groupId>com.nepxion</groupId>
            <artifactId>discovery-console-starter-nacos</artifactId>
        </dependency> -->

上面這個是控制檯後臺服務的引入方式,這樣啓動後就會啓動一個控制檯後臺服務他會和註冊中心相互註冊實現服務的讀取管理

還有一個桌面端的使用類似前端需要連接控制檯後臺來實現配置功能,這個需要運行 discovery-console-desktop這個服務裏的ConsoleLauncher,然後通過控制檯後端服務的URL + 端口號連接到控制檯服務上即可,這裏需要輸入一個帳號密碼這個需要時先在控制檯後臺服務裏配置一個properties文件,用戶名=密碼的形式即可,

以上這些配置完成後,依賴部分就可以說搞定了,如果要實現灰度路由還要在對應這些服務的yml或者properties文件中配置一些必要的屬性。

例如要標識微服務的版本,用於網關在灰度路由時選擇路由的路徑,以同一個服務的不同實例爲例

A微服務1.0實例

# Eureka config for discovery
eureka.instance.metadataMap.group=example-service-group
eureka.instance.metadataMap.version=1.0
eureka.instance.metadataMap.region=dev

A微服務1.1實例

# Eureka config for discovery
eureka.instance.metadataMap.group=example-service-group
eureka.instance.metadataMap.version=1.1
eureka.instance.metadataMap.region=dev

通過meta信息來標識服務自身的身份,以便路由時通過對應版本過濾掉規則外的服務只保留符合規則的服務進行負載均衡調用。

下面啓用 discovery-console-desktop 控制檯桌面程序 並連接 控制檯服務,控制檯服務作爲普通微服務註冊到註冊中心,並通過註冊中心獲取服務列表以便在控制檯桌面程序顯示,在控制檯桌面程序中選中網關服務執行更新灰度規則,實際是rest調用網關服務的/config/update-*方法, 選擇的服務的/config/update-sync同步,選擇的服務的/config/update-async異步,執行POST請求傳遞規則xml數據,discovery-plugin-admin-center 模塊的src/main/java/com/nepxion/discovery/plugin/admincenter/endpoint/ConfigEndpoint.java類中的updateSync 會執行調用方法,並調用discovery-plugin-framework模塊下的onRuleUpdated方法調用setDynamicRule完成規則的緩存,利用Caffeine(高性能java緩存庫)完成規則的緩存存儲RuleCache ,這樣灰度的路由規則就會存儲在網關的緩存當中,以便在調用網關的時候從緩存當中取出路由規則使用。 這就是基於版本的灰度路由使用的基本流程了, 下一次講一下灰度策略的使用

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章