## A Multi-Feature Environment Example English | [简体中文](./README-zh.md) ## 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. - 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: 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 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: ````json { "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] ````