日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

配置灰度發布

MSE注冊配置中心支持灰度發布,即在配置正式發布前先進行小部分的發布驗證,降低配置推送的風險。本文介紹如何在MSE上為Nacos實例配置灰度發布。

前提條件

說明
  • 僅MSE Nacos開發版和專業版支持灰度發布功能。

  • 客戶端Nacos Client建議使用2.x版本。

背景信息

在使用配置中心對集群配置進行集中管理時,如果對某個配置進行了修改,一般情況下新的配置將會覆蓋舊的配置,同時會全量地推送到集群中。這種情況下,由于是全量推送,一旦配置出錯,可能會導致整個集群都無法運行,風險極大。

因此,在需要對配置進行編輯時,推薦先進行灰度發布,讓集群中一部分機器先收到新版本的配置內容,預先進行功能的驗證,如果驗證通過,再逐步擴大灰度,直至全量正式發布,降低配置變更風險。

當前MSE Nacos支持兩種灰度發布的方式:基于IP地址的灰度以及基于標簽灰度的方式。

基于IP地址灰度

Beta發布是指在修改配置之后,首先在指定的一小部分的機器(一般是流量比較低、或者影響較小的機器)上進行Beta配置推送,其他機器依舊使用原本的配置。然后對這一部分集群進行驗證測試,運行一段時間后,確定這一部分集群運行沒有問題。配置穩定之后,再正式發布進行全量推送。如果配置在驗證測試階段未通過,則可以停止灰度發布,恢復到原本的配置。Beta發布的整個過程如下圖所示:

Beta發布流程

這種通過在小部分機器上驗證待發布的配置的方式,可以大大降低配置推送的風險,減少因配置出錯導致的故障。

創建Beta配置

  1. 登錄MSE注冊配置中心管理控制臺,并在頂部菜單欄選擇地域。

  2. 在左側導航欄,選擇注冊配置中心 > 實例列表

  3. 實例列表頁面,單擊目標實例名稱。

  4. 在左側導航欄,選擇配置管理 > 配置列表

  5. 在目標配置的操作列單擊編輯。在編輯配置面板,打開Beta發布開關。

    Beta發布

  6. 單擊IP地址輸入框,在IP地址列表中選擇待灰度推送的IP地址。

    您也可以選擇手動輸入IP地址,手動輸入支持IP地址補全。

    說明

    IP地址指訂閱了該配置的機器IP,多個IP用英文逗號(,)分隔。

  7. 修改完配置后,單擊發布。在配置內容對比對話框中確認歷史版本當前配置,然后單擊發布

查看Beta配置

  1. 登錄MSE注冊配置中心管理控制臺,并在頂部菜單欄選擇地域。

  2. 在左側導航欄,選擇注冊配置中心 > 實例列表

  3. 實例列表頁面,單擊目標實例名稱。

  4. 在左側導航欄,選擇配置管理 > 配置列表

  5. 在正在Beta發布的目標配置的操作列單擊編輯

  6. 編輯配置面板,單擊BETA頁簽,查看BETA發布信息。

    BETA

其他操作

  • 停止Beta發布:在編輯配置BETA頁簽中,單擊停止灰度,即可取消Beta發布。

  • 發布正式:在編輯配置BETA頁簽中,單擊發布正式,在彈出的配置內容對比對話框中確認配置信息,單擊發布正式,Beta發布將改為正式發布。

基于IP地址的灰度存在以下問題:

  • 在Nacos1.x版本的客戶端中,因為經過了一層SLB的中轉,服務端無法精準獲取客戶端的IP地址。

  • 基于K8s的架構,節點的重建可能會導致機器的IP地址變化,導致基于IP的灰度版本失效。

基于應用標簽灰度

在MSE Nacos 2.2.3.3及以上版本中,支持基于應用標簽灰度的方式進行灰度發布,您可以在客戶端對應用節點進行標簽設置。

重要
  • MSE Nacos版本在2.2.3.3及以上支持應用標簽灰度,您需要升級引擎版本至2.2.3.3及以上。

  • 開源Nacos-Client版本在2.3.2及以上支持自定義應用標簽灰度,您需要升級客戶端版本至2.3.2及以上。

  • 通過環境變量注入標簽的能力,需升級Nacos-Client至2.4.2及以上。

客戶端設置應用標簽

您可以通過以下方式設置應用的標簽,應用標簽為key-value格式。可以通過properties,JVM參數,環境變量三種方式指定。相同key的情況下,默認優先級:properties > JVM參數 > env環境變量,nacos.config.gray.label是Nacos內置的默認配置灰度標簽。

//1.properties形式傳入
Properties properties = new Properties();
properties.put(PropertyKeyConst.SERVER_ADDR, "your endpoint");
properties.put("project.name", "your app name");
properties.put("nacos.config.gray.label","yourgrayname");


//2.JVM參數設置
設置啟動參數-Dnacos.config.gray.label=yourgrayname

//3.env環境變量指定
設置環境變量 nacos_config_gray_label=yourgrayname

 String dataId = "gray_test_dataid";
 String group = "test-group";
        
 configService.addListener(dataId, group, new Listener() {
        @Override
        public Executor getExecutor() {
            return null;
        }
            
        @Override
        public void receiveConfigInfo(String configInfo) {
            System.out.println("receiveConfig:" + configInfo);
        }
 });

服務端發布標簽灰度

  • 查看監聽者標簽

    客戶端完成應用標簽注入后,可以通過服務端查看配置的監聽者列表,查看每個監聽者攜帶的標簽。

    image.png

  • 發布灰度標簽配置

    單擊編輯配置,選擇基于標簽灰度發布,然后選擇應用節點當前存在的標簽鍵值對,可以看到選擇的鍵值對所匹配到的節點數。image.png

發布灰度標簽版本后,在監聽查詢可以看到當前客戶端所匹配的配置版本。在配置詳情可以看到當前灰度版本的詳情。

在進行第一批灰度觀察后,可以通過擴大編輯標簽的值范圍來逐步擴大灰度,直到進行全量發布,單擊全量發布后,將停止對應的灰度版本。如果在灰度過程中發現業務異常,可以單擊停止灰度進行一鍵自動回滾。

相關問題

應用標簽設置的進階用法

除了設置單個標簽nacos.config.gray.label之外,Nacos還支持設置多個標簽以及自定義標簽Collector SPI的形式來設置標簽,支持更加靈活自定義標簽獲取邏輯。

  • 設置多值標簽。

    Nacos支持在應用標簽中注入多個標簽鍵值對。可以在properties和JVM參數中指定nacos.app.conn.labels參數(格式示例:nacos.app.conn.labels="k1=v1,k2=v2,k3=v3"),或者在環境變量中指定nacos_app_conn_labels參數。

    //1.properties形式傳入
    Properties properties = new Properties();
    properties.put(PropertyKeyConst.SERVER_ADDR, "your endpoint");
    properties.put("project.name", "your app name");
    properties.put("nacos.app.conn.labels","app=demo,site=hangzhou-c,otherkey=othervaue");
    
    //2.JVM參數設置
    設置啟動參數-Dnacos.app.conn.labels="app=demo,site=hangzhou-c,otherkey=othervaue"
    
    //3.env環境變量指定
    設置環境變量 nacos_app_conn_labels="app=demo,site=hangzhou-c,otherkey=othervaue"
    
    NacosConfigService configService = new NacosConfigService(properties);
    
    String dataId = "gray_test_dataid";
    String group = "test-group";
            
    configService.addListener(dataId, group, new Listener() {
            @Override
            public Executor getExecutor() {
                return null;
            }
                
            @Override
            public void receiveConfigInfo(String configInfo) {
                System.out.println("receiveConfig:" + configInfo);
            }
    });
    
  • 自定義應用標簽SPI

    Nacos-Client定義了自定義應用標簽的SPI,可以通過實現com.alibaba.nacos.common.labels.LabelsCollector接口,并將具體實現類發布為service的方式實現自定義的應用標簽SPI。

    package your.demo.test;
    
    import com.alibaba.nacos.common.labels.LabelsCollector;
    
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Properties;
    
    /**
     * TestLabelsCollector.
     *
     * @author yourname
     */
    public class TestLabelsCollector implements LabelsCollector {
        
        @Override
        public String getName() {
            return "testlables";
        }
        
        @Override
        public Map<String, String> collectLabels(Properties properties) {
            Map<String, String> labels = new HashMap<>();
            labels.put("test", "implements your lables logic");
            return labels;
        }
    
      
        @Override
        public int getOrder() {
            return 1;
        }
    }

應用標簽規劃

在規劃應用節點的標簽時,推薦根據業務影響范圍的大小維度進行標簽規劃,以逐步灰度并降低變更風險。以下是常見的最佳實踐:

  • 將應用名作為標簽。先對部分非關鍵鏈路上的應用進行灰度,觀察確認無異常之后再擴大灰度至核心鏈路的應用。

  • 業務側可以通過流量入口側對系統上下游的機器進行流量隔離。例如,針對公司內部用戶確定一批灰度機器,可以為這部分機器設置單獨的灰度標簽,以達到內部用戶灰度的效果。

應用標簽的格式

標簽鍵值key-value允許使用的字符包括英文字母大小寫、數字、下劃線“_”、橫杠“-”和點“.”。如果傳入其他格式的標簽將被忽略處理。如果通過參數nacos.app.conn.labels指定多個鍵值對時,格式必須遵循 "k1=v1,k2=v2,k3=v3" 格式。如果傳入"k1=v1,k2",那么k2參數將會被忽略,最終解析成k1=v1