Service isolation Design
Target
- Support forwarding the service according to the routing label by parsing the label of the request
- Tag Registration and Modification of Support Services
2. Design
2.1 Technical Architecture
The overall technical architecture mainly modifies the point. The RestFul request needs to carry label parameter information such as routing label, and then the corresponding label will be parsed when the Gateway forwards to complete the route forwarding of the interface. The whole is shown in the figure below 
- If there are multiple corresponding services marked with the same roteLabel, it will be forwarded randomly
- If the corresponding routeLabel does not have a corresponding service, the interface fails directly
2.2 Business Architecture
This feature is mainly to complete the Restful tenant isolation and forwarding function. The modules designed by the function point are as follows:
[Input] The input is the restful request requesting Gatway, and only the request with the roure label to be used in the parameter will be processed. [Processing process] The Gateway will determine whether the request has a corresponding RouteLabel, and if it exists, it will be forwarded based on the RouteLabel. The call sequence diagram is as follows:
4. DDL:
add route label for entrance
echo "spring.eureka.instance.metadata-map.route=et1" >> $LINKIS_CONF_DIR/linkis-cg-entrance.properties
sh $LINKIS_HOME/sbin/linkis-damemon.sh restart cg-entrance
Use route label
url:/api/v1/entrance/submit
{
"executionContent": {"code": "echo 1", "runType": "shell"},
"params": {"variable": {}, "configuration": {}},
"source": {"scriptPath": "ip"},
"labels": {
"engineType": "shell-1",
"userCreator": "peacewong-IDE",
"route": "et1"
}
}
will be routed to a fixed service:
{
"method": "/api/entrance/submit",
"message": "OK",
"data": {
"taskID": 45158,
"execID": "exec_id018030linkis-cg-entrancelocalhost:9205IDE_peacewong_shell_0"
}
}
or linkis-cli:
Use non-existing label
submit task:
url:/api/v1/entrance/submit
{
"params": {"variable": {}, "configuration": {}},
"source": {"scriptPath": "ip"},
"labels": {
"engineType": "shell-1",
"userCreator": "peacewong-IDE",
"route": "et1"
}
}
"method": "/api/rest_j/v1/entrance/submit",
"status": 1,
"message": "GatewayErrorException: errCode: 11011 ,desc: Cannot route to the corresponding service, URL: /api/rest_j/v1/entrance/submit RouteLabel: [{\"stringValue\":\"et2\",\" labelKey\":\"route\",\"feature\":null,\"modifiable\":true,\"featureKey\":\"feature\",\"empty\":false}] ,ip: localhost ,port: 9101 ,serviceKind: linkis-mg-gateway",
"data": {
"data": "{\r\n \"executionContent\": {\"code\": \"echo 1\", \"runType\": \"shell\"},\r\n \"params \": {\"variable\": {}, \"configuration\": {}},\r\n \"source\": {\"scriptPath\": \"ip\"},\r\ n \"labels\": {\r\n \"engineType\": \"shell-1\",\r\n \"userCreator\": \"peacewong-IDE\",\r\n \" route\": \"et2\"\r\n }\r\n}"
}
}
submit task:
url:/api/v1/entrance/submit
{
"executionContent": {"code": "echo 1", "runType": "shell"},
"params": {"variable": {}, "configuration": {}},
"source": {"scriptPath": "ip"},
"labels": {
"engineType": "shell-1",
"userCreator": "peacewong-IDE"
}
6. Non-functional design:
6.1 Security
No security issues are involved, restful requires login authentication
6.2 Performance
It has little impact on Gateway forwarding performance, and caches the corresponding label and instance data
6.3 Capacity
not involving