如何使用SpringCloud進行灰度發佈

灰度發佈是指在黑與白之間,能夠平滑過渡的一種發佈方式。在其上可以進行A/B testing,即讓一部分用戶繼續用產品特性A,一部分用戶開始用產品特性B,如果用戶對B沒有什麼反對意見,那麼逐步擴大範圍,把所有用戶都遷移到B上面來。灰度發佈可以保證整體系統的穩定,在初始灰度的時候就可以發現、調整問題,以保證其影響度。

在開發或者測試的時候,或者線上發佈,線上服務多版本控制的時候,需要對服務提供權重路由,最常見的使用就是,一個服務有兩個版本,舊版本V1,新版本v2。在線上灰度的時候,需要通過網關動態實時推送,路由權重信息。比如95%的流量走服務v1版本,5%的流量走服務v2版本。

圖片描述

如何使用SpringCloud進行灰度發佈呢?將分一下四步:

第一,設置網關權重路由設置

Spring Cloud Gateway中提供了org.springframework.cloud.gateway.handler.predicate.WeightRoutePredicateFactory去實現根據分組設置權重進行路由,因此使用起來相對比較簡單,有興趣的可以debug閱讀源碼。

我們通過在Spring Cloud Gateway中會配置不同的權重信息到不同URL上,Spring Cloud Gateway會根據我們配置的路由權重信息,將請求分發到不同的源服務組,權重信息如ch4/ch4-gateway中的application.yml所示,主要配置信息如下。

spring:

cloud:

gateway:

  discovery:      

    locator:     

      enabled: true

  routes: 

  - id: order-service1

    uri: lb://order/order/create1

    order: 8000

    predicates:

    - Path=/order/create

    filters:

    - StripPrefix=1

    - Weight=order-service, 95

  - id: order-service2

    uri: lb://order/create2

    order: 8000

    predicates:

    - Path=/order/create

    filters:

    - StripPrefix=1

    - Weight=order-service, 5


Weight=order-service1, 95,Weight=service1, 5就是路由的權重信息。

第二、源服務配置

源服務在本案例中爲order模塊源服務,主要提提供Gateway Server權重路由對應的後端源服務。因爲比較簡單因此不做詳細說明,主要代碼如下所示。

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

@RestController

public class OrderController {

@RequestMapping("/create1")

public String orderCreateV1() {

  //此處寫業務邏輯代碼

 return "success";

}

@RequestMapping( "/ceate2")

public String v2() {

 //此處寫業務邏輯代碼

 return “success”;

}

}

第三、進行測試

分別啓動gateway,order進行訪問:http://localhost:5001/order/create 測試,發現會根據所設權重進行路由。

第四,使用zookeeper config實現動態權重路由

到第三步完成以後,現在可以通過修改配置的如何根據現有的服務在線動態更新權重呢?使用zookeeper作爲spring cloud的註冊和配置中心,gateway模塊和order模塊配置監控配置的變化,如果想做動態灰度發佈,增加後臺在線配置管理界面,並在線修改gateway的配置,實現動態的灰度發佈,而不用每次修改都要重新啓動gateway。

spring:

cloud:

zookeeper:

  enabled: true  

  connect-string: localhost:2181

  config:

    root: /config

    enabled: true

    watcher:

      enabled: true  


第五,使用zkui進行配置修改

使用ZKUI來可視化管理Zookeeper,登錄ZKUI->import 選擇對應文件導入即可。ZKUI安裝使用請自行百度。

以上就是我使用spring cloud進行灰度發佈的過程記錄。

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