4.6 KiB
A Multi-Feature Environment Example
English | 简体中文
I. Deployment Structure
![multi-feature environment structure](/msb-public/spring-cloud-tencent/media/tag/1.14.0-2022.0.5.RC1/spring-cloud-tencent-examples/polaris-router-featureenv-example/imgs/structs.png)
As shown in the figure above, there are three environments.
baseline
environment, includingFrontService
,MiddleService
,BackendService
feature1
environment, includingMiddleService
,BackendService
feature2
environment, includingFrontService
,BackendService
And at the entrance, deploy the gateway
service.
Three request links.
baseline
environment link,Gateway
->FrontService
(baseline) ->MiddleService
(baseline) ->BackendService
( baseline)feature1
environment link,Gateway
->FrontService
(baseline) ->MiddleService
(feature1) ->BackendService
( feature1)feature2
environment link,Gateway
->FrontService
(feature2) ->MiddleService
(baseline) ->BackendService
( feature2)
II. Running
Without any code changes, just start all the applications under base
, feature1
, feature2
, featureenv-gateway
directly.
By default, the applications point to the official Polaris experience environment, and you can directly view the service registration data at the experience site after a successful launch.
- Console address: http://119.91.66.223:80/
- Account: polaris
- Password: polaris
III. Testing
Mode 1: Client Request With featureenv
Label
baseline
environment link
curl http://127.0.0.1:9999/featureenv-front-example/router/rest
Response results (base indicates baseline environment)
featureenv-front-example[base] -> featureenv-middle-example[base] -> featureenv-backend-example[base]
feature1
environment link
Specify the feature environment via the X-Polaris-Metadata-Transitive-featureenv
request header.
curl -H'X-Polaris-Metadata-Transitive-featureenv:feature1' http://127.0.0.1:9999/featureenv-front-example/router/rest
Response results
featureenv-front-example[base] -> featureenv-middle-example[feature1] -> featureenv-backend-example[feature1]
feature2
environment link
Specify the feature environment via the X-Polaris-Metadata-Transitive-featureenv
request header.
curl -H'X-Polaris-Metadata-Transitive-featureenv:feature2' http://127.0.0.1:9999/featureenv-front-example/router/rest
Response results
featureenv-front-example[feature2] -> featureenv-middle-example[base] -> featureenv-backend-example[feature2]
Mode 2: Gateway traffic staining
Simulate a real-world scenario, assuming that the client request has a uid request parameter and expects:
uid=1000
requests hit thefeature1
environmentuid=2000
requests hit thefeature2
environment- requests with other uid hit the
baseline
environment
Configure coloring rules
Polaris Configuration Address: http://119.91.66.223:80/#/filegroup-detail?group=featureenv-gateway&namespace=default
Modify the rule/staining.json
configuration file and fill in the following rule:
{
"rules": [
{
"conditions": [
{
"key": "${http.query.uid}",
"values": [
"1000"
],
"operation": "EQUALS"
}
],
"labels": [
{
"key": "featureenv",
"value": "feature1"
}
]
},
{
"conditions": [
{
"key": "${http.query.uid}",
"values": [
"2000"
],
"operation": "EQUALS"
}
],
"labels": [
{
"key": "featureenv",
"value": "feature2"
}
]
}
]
}
Just fill out and publish the configuration.
baseline
Environment Link
curl http://127.0.0.1:9999/featureenv-front-example/router/rest?uid=3000
Response results (base indicates baseline environment)
featureenv-front-example[base] -> featureenv-middle-example[base] -> featureenv-backend-example[base]
feature1
Environment Link
Specify the feature environment via the X-Polaris-Metadata-Transitive-featureenv
request header.
curl http://127.0.0.1:9999/featureenv-front-example/router/rest?uid=1000
Response results
featureenv-front-example[base] -> featureenv-middle-example[feature1] -> featureenv-backend-example[feature1]
feature2
Environment Link
Specify the feature environment via the X-Polaris-Metadata-Transitive-featureenv
request header.
curl http://127.0.0.1:9999/featureenv-front-example/router/rest?uid=2000
Response results
featureenv-front-example[feature2] -> featureenv-middle-example[base] -> featureenv-backend-example[feature2]