You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
spring-cloud-tencent/spring-cloud-tencent-examples/polaris-router-grayrelease-.../README-zh.md

7.6 KiB

Spring Cloud Polaris Gray Release Example

English | 简体中文

项目说明

本项目演示如何使用 Spring Cloud Tencent 的路由和标签透传功能 完成 Spring Cloud 应用的全链路灰度。

示例架构

本示例请求都通过最上层网关进行分发分发的目的地主要涉及3个环境

  • 灰度环境1只针对uid=1的请求放开环境标识为env=green绿色环境
  • 灰度环境2只针对uid=2的请求放开环境标识为env=purple紫色环境
  • 基线环境稳定的业务版本针对其他请求放开环境标识为env=blue蓝色环境

如何接入

启动网关服务

  1. 添加环境变量

    • 北极星服务端地址polaris_address=grpc://127.0.0.1:8091
    • 可观测性PushGateway地址prometheus_address=127.0.0.1:9091
  2. 启动router-grayrelease-gateway应用

    • IDE直接启动找到主类 GrayReleaseGatewayApplication,执行 main 方法启动应用。
    • 打包编译后启动:首先执行 mvn clean package 将工程编译打包,然后执行 java -jar router-grayrelease-gateway-${verion}.jar启动应用。
  3. 添加路由规则

    通过往北极星接口发送以下数据为网关服务添加路由规则路由规则可以针对用户ID进行环境的分发。

    POST /naming/v1/routings
    
    [{
    	"service": "gray-release-gateway",
    	"namespace": "default",
    	"outbounds": [
       {
    	    "sources": [
         {
    		   "service": "gray-release-gateway",
    		   "namespace": "default",
    		   "metadata": {
    			  "${http.header.uid}": {
    				 "type": "EXACT",
    			     "value": "2"
    			  }
    		   }
    	    }],
    	    "destinations": [
         {
    		   "service": "*",
    		   "namespace": "*",
    		   "metadata": {
    			  "env": {
    			    "type": "EXACT",
    			    "value": "purple"
    			  }
    		   },
    		   "priority": 0,
    		   "weight": 100,
    		   "isolate": false
    	    }]
    	  },
    	  {
    		"sources": [
         {
    		   "service": "gray-release-gateway",
    		   "namespace": "default",
    		   "metadata": {
    			 "${http.header.uid}": {
    				"type": "EXACT",
    				"value": "1"
    		     }
    		   }
    		}],
    		"destinations": [
         {
    			"service": "*",
    			"namespace": "*",
    			"metadata": {
    				"env": {
    					"type": "EXACT",
    					"value": "green"
    				}
    			},
    			"priority": 0,
    			"weight": 100,
    			"isolate": false
    		}]
    	  },
    	  {
    		"sources": [
         {
    			"service": "gray-release-gateway",
    			"namespace": "default",
    			"metadata": {
    				"*": {
    					"type": "EXACT",
    					"value": "*"
    				}
    			}
    		}],
    		"destinations": [
         {
    			"service": "*",
    			"namespace": "*",
    			"metadata": {
    				"env": {
    					"type": "EXACT",
    					"value": "blue"
    				}
    			},
    			"priority": 0,
    			"weight": 100,
    			"isolate": false
    		}]
    	  }
    	]
    }]
    

    路由规则也可以通过北极星控制台进行定义,最终控制台效果如下:

启动Front服务

启动基线环境(蓝色)

  1. 添加环境变量

    • 北极星服务端地址polaris_address=grpc://127.0.0.1:8091
    • 可观测性PushGateway地址prometheus_address=127.0.0.1:9091
    • 环境标识SCT_METADATA_CONTENT_env=blue
    • 透传环境标识SCT_METADATA_CONTENT_TRANSITIVE=env
  2. 启动router-grayrelease-frontend应用

    • IDE直接启动找到主类 GrayReleaseFrontApplication,执行 main 方法启动应用。
    • 打包编译后启动:首先执行 mvn clean package 将工程编译打包,然后执行 java -jar router-grayrelease-frontend-${verion}.jar启动应用。

启动灰度环境1绿色

  1. 添加环境变量

    • 北极星服务端地址polaris_address=grpc://127.0.0.1:8091
    • 可观测性PushGateway地址prometheus_address=127.0.0.1:9091
    • 环境标识SCT_METADATA_CONTENT_env=green
    • 透传环境标识SCT_METADATA_CONTENT_TRANSITIVE=env
  2. 启动router-grayrelease-frontend应用与前面一致

    如果遇到端口冲突,可以通过-Dserver.port来指定端口

启动灰度环境2紫色

  1. 添加环境变量

    • 北极星服务端地址polaris_address=grpc://127.0.0.1:8091
    • 可观测性PushGateway地址prometheus_address=127.0.0.1:9091
    • 环境标识SCT_METADATA_CONTENT_env=purple
    • 透传环境标识SCT_METADATA_CONTENT_TRANSITIVE=env
  2. 启动router-grayrelease-frontend应用与前面一致

启动后效果

在北极星控制台可以看到gray-release-front服务下有3个节点每个节点有不同的环境标识。

启动middle服务

启动基线环境(蓝色)

  1. 添加环境变量

    • 北极星服务端地址polaris_address=grpc://127.0.0.1:8091
    • 可观测性PushGateway地址prometheus_address=127.0.0.1:9091
    • 环境标识SCT_METADATA_CONTENT_env=blue
    • 透传环境标识SCT_METADATA_CONTENT_TRANSITIVE=env
  2. 启动router-grayrelease-middle应用

    • IDE直接启动找到主类 GrayReleaseMiddleApplication,执行 main 方法启动应用。
    • 打包编译后启动:首先执行 mvn clean package 将工程编译打包,然后执行 java -jar router-grayrelease-middle-${verion}.jar启动应用。

启动灰度环境2紫色

  1. 添加环境变量

    • 北极星服务端地址polaris_address=grpc://127.0.0.1:8091
    • 可观测性PushGateway地址prometheus_address=127.0.0.1:9091
    • 环境标识SCT_METADATA_CONTENT_env=purple
    • 透传环境标识SCT_METADATA_CONTENT_TRANSITIVE=env
  2. 启动router-grayrelease-middle应用与前面一致

启动back服务

启动基线环境(蓝色)

  1. 添加环境变量

    • 北极星服务端地址polaris_address=grpc://127.0.0.1:8091
    • 可观测性PushGateway地址prometheus_address=127.0.0.1:9091
    • 环境标识SCT_METADATA_CONTENT_env=blue
    • 透传环境标识SCT_METADATA_CONTENT_TRANSITIVE=env
  2. 启动router-grayrelease-backend应用

    • IDE直接启动找到主类 GrayReleaseBackendApplication,执行 main 方法启动应用。
    • 打包编译后启动:首先执行 mvn clean package 将工程编译打包,然后执行 java -jar router-grayrelease-backend-${verion}.jar启动应用。

启动灰度环境1绿色

  1. 添加环境变量

    • 北极星服务端地址polaris_address=grpc://127.0.0.1:8091
    • 可观测性PushGateway地址prometheus_address=127.0.0.1:9091
    • 环境标识SCT_METADATA_CONTENT_env=green
    • 透传环境标识SCT_METADATA_CONTENT_TRANSITIVE=env
  2. 启动router-grayrelease-backend应用与前面一致

测试

基线环境路由

curl -H'uid:0' 127.0.0.1:59100/router/gray/route_rule

获取结果

gray-release-gateway -> gray-release-front[blue] -> gray-release-middle[blue] -> gray-release-back[blue]

灰度环境1绿色路由

curl -H'uid:1' 127.0.0.1:59100/router/gray/route_rule

获取结果

gray-release-gateway -> gray-release-front[green] -> gray-release-middle[blue] -> gray-release-back[green]

灰度环境2紫色路由

curl -H'uid:2' 127.0.0.1:59100/router/gray/route_rule

获取结果

gray-release-gateway -> gray-release-front[purple] -> gray-release-middle[purple] -> gray-release-back[blue]