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-featureenv-e...
lepdou 7699ed16f5
add config refresh type switch & catch exception for traffic staining (#469)
2 years ago
..
base add config refresh type switch & catch exception for traffic staining (#469) 2 years ago
feature1 add feature-env examples (#450) 2 years ago
feature2 add feature-env examples (#450) 2 years ago
featureenv-gateway add feature-env examples (#450) 2 years ago
imgs add feature-env examples (#450) 2 years ago
README-zh.md [Docs] Add featureenv example readme(en) file (main). (#460) 2 years ago
README.md [Docs] Add featureenv example readme(en) file (main). (#460) 2 years ago
pom.xml add feature-env examples (#450) 2 years ago

README.md

A Multi-Feature Environment Example

English | 简体中文

I. Deployment Structure

multi-feature environment structure

As shown in the figure above, there are three environments.

  1. baseline environment, including FrontService, MiddleService, BackendService
  2. feature1 environment, including MiddleService, BackendService
  3. feature2 environment, including FrontService, BackendService

And at the entrance, deploy the gateway service.

Three request links.

  1. baseline environment link, Gateway -> FrontService(baseline) -> MiddleService(baseline) -> BackendService(baseline)
  2. feature1 environment link, Gateway -> FrontService(baseline) -> MiddleService(feature1) -> BackendService(feature1)
  3. 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.

III. Testing

Mode 1: Client Request With featureenv Label

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]

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]

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:

  1. uid=1000 requests hit the feature1 environment
  2. uid=2000 requests hit the feature2 environment
  3. requests with other uid hit the baseline environment

Configure coloring rules

Polaris Configuration Addresshttp://14.116.241.63:8080/#/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":"EQUAL"
                }
            ],
            "labels":[
                {
                    "key":"featureenv",
                    "value":"feature1"
                }
            ]
        },
        {
            "conditions":[
                {
                    "key":"${http.query.uid}",
                    "values":["2000"],
                    "operation":"EQUAL"
                }
            ],
            "labels":[
                {
                    "key":"featureenv",
                    "value":"feature2"
                }
            ]
        }
    ]
}

Just fill out and publish the configuration.

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]

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]

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]