You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dolphinscheduler.apache.org by gi...@apache.org on 2022/03/09 15:14:41 UTC

[dolphinscheduler-website] branch asf-site updated: Automated deployment: a6d730a24d4f2b573ef12cf4e399097e88df3154

This is an automated email from the ASF dual-hosted git repository.

github-bot pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler-website.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new 52ec98e  Automated deployment: a6d730a24d4f2b573ef12cf4e399097e88df3154
52ec98e is described below

commit 52ec98e4cd553fe476cb6c5fcb6a5cfebe03acf7
Author: github-actions[bot] <gi...@users.noreply.github.com>
AuthorDate: Wed Mar 9 15:14:16 2022 +0000

    Automated deployment: a6d730a24d4f2b573ef12cf4e399097e88df3154
---
 en-us/blog/Apache-DolphinScheduler-2.0.1.html      |  227 ++
 en-us/blog/Apache-DolphinScheduler-2.0.1.json      |   10 +
 en-us/blog/Apache_dolphinScheduler_2.0.2.html      |  122 +
 en-us/blog/Apache_dolphinScheduler_2.0.2.json      |   10 +
 en-us/blog/Apache_dolphinScheduler_2.0.3.html      |  119 +
 en-us/blog/Apache_dolphinScheduler_2.0.3.json      |   10 +
 .../blog/Awarded_most_popular_project_in_2021.html |   85 +
 .../blog/Awarded_most_popular_project_in_2021.json |   10 +
 en-us/blog/Board_of_Directors_Report.html          |  126 +
 en-us/blog/Board_of_Directors_Report.json          |   10 +
 en-us/blog/DAG.html                                |  209 ++
 en-us/blog/DAG.json                                |    6 +
 en-us/blog/DS-2.0-alpha-release.html               |  119 +
 en-us/blog/DS-2.0-alpha-release.json               |    6 +
 en-us/blog/DS_run_in_windows.html                  |  153 +
 en-us/blog/DS_run_in_windows.json                  |    6 +
 ...DolphinScheduler-Vulnerability-Explanation.html |   61 +
 ...DolphinScheduler-Vulnerability-Explanation.json |    6 +
 ...nScheduler_Kubernetes_Technology_in_action.html |  434 +++
 ...nScheduler_Kubernetes_Technology_in_action.json |   10 +
 en-us/blog/Eavy_Info.html                          |   91 +
 en-us/blog/Eavy_Info.json                          |   10 +
 en-us/blog/FAQ.html                                |   48 +
 en-us/blog/FAQ.json                                |    6 +
 .../Introducing-Apache-DolphinScheduler-1.3.9.html |   83 +
 .../Introducing-Apache-DolphinScheduler-1.3.9.json |    6 +
 en-us/blog/Json_Split.html                         |  126 +
 en-us/blog/Json_Split.json                         |    6 +
 en-us/blog/Lizhi-case-study.html                   |  133 +
 en-us/blog/Lizhi-case-study.json                   |    6 +
 en-us/blog/Meetup_2022_02_26.html                  |   75 +
 en-us/blog/Meetup_2022_02_26.json                  |   10 +
 en-us/blog/Twos.html                               |   56 +
 en-us/blog/Twos.json                               |   10 +
 en-us/blog/YouZan-case-study.html                  |  328 ++
 en-us/blog/YouZan-case-study.json                  |    6 +
 en-us/blog/architecture-design.html                |  316 ++
 en-us/blog/architecture-design.json                |   10 +
 en-us/blog/meetup_2019_10_26.html                  |   52 +
 en-us/blog/meetup_2019_10_26.json                  |    6 +
 en-us/blog/meetup_2019_12_08.html                  |   63 +
 en-us/blog/meetup_2019_12_08.json                  |    6 +
 en-us/community/DSIP.html                          |  107 +
 en-us/community/DSIP.json                          |    6 +
 en-us/community/development/DS-License.html        |   67 +
 en-us/community/development/DS-License.json        |    6 +
 .../community/development/become-a-committer.html  |   44 +
 .../community/development/become-a-committer.json  |    6 +
 en-us/community/development/code-conduct.html      |  137 +
 en-us/community/development/code-conduct.json      |    6 +
 en-us/community/development/commit-message.html    |  103 +
 en-us/community/development/commit-message.json    |    6 +
 en-us/community/development/contribute.html        |   71 +
 en-us/community/development/contribute.json        |    6 +
 en-us/community/development/document.html          |  103 +
 en-us/community/development/document.json          |    6 +
 en-us/community/development/issue.html             |  158 +
 en-us/community/development/issue.json             |    6 +
 en-us/community/development/microbench.html        |  121 +
 en-us/community/development/microbench.json        |    6 +
 en-us/community/development/pull-request.html      |  122 +
 en-us/community/development/pull-request.json      |    6 +
 en-us/community/development/submit-code.html       |  112 +
 en-us/community/development/submit-code.json       |    6 +
 en-us/community/development/subscribe.html         |   66 +
 en-us/community/development/subscribe.json         |    6 +
 en-us/community/development/unit-test.html         |  128 +
 en-us/community/development/unit-test.json         |    6 +
 en-us/community/join/e2e-guide.html                |   63 +
 en-us/community/join/e2e-guide.json                |    6 +
 en-us/community/join/review.html                   |  262 ++
 en-us/community/join/review.json                   |    6 +
 en-us/community/release-post.html                  |   84 +
 en-us/community/release-post.json                  |    6 +
 en-us/community/release-prepare.html               |   72 +
 en-us/community/release-prepare.json               |    6 +
 en-us/community/release.html                       |  383 +++
 en-us/community/release.json                       |    6 +
 en-us/community/security.html                      |   42 +
 en-us/community/security.json                      |    6 +
 en-us/community/team.html                          |  270 ++
 en-us/community/team.json                          |    6 +
 en-us/development/api-standard.html                |  124 +
 en-us/development/api-standard.json                |    6 +
 en-us/development/architecture-design.html         |  314 ++
 en-us/development/architecture-design.json         |    6 +
 .../backend/mechanism/global-parameter.html        |   84 +
 .../backend/mechanism/global-parameter.json        |    6 +
 en-us/development/backend/mechanism/overview.html  |   44 +
 en-us/development/backend/mechanism/overview.json  |    6 +
 .../development/backend/mechanism/task/switch.html |   46 +
 .../development/backend/mechanism/task/switch.json |    6 +
 en-us/development/backend/spi/alert.html           |   97 +
 en-us/development/backend/spi/alert.json           |    6 +
 en-us/development/backend/spi/datasource.html      |   57 +
 en-us/development/backend/spi/datasource.json      |    6 +
 en-us/development/backend/spi/registry.html        |   56 +
 en-us/development/backend/spi/registry.json        |    6 +
 en-us/development/backend/spi/task.html            |   46 +
 en-us/development/backend/spi/task.json            |    6 +
 .../development/development-environment-setup.html |  173 +
 .../development/development-environment-setup.json |    6 +
 en-us/development/e2e-test.html                    |  186 ++
 en-us/development/e2e-test.json                    |    6 +
 en-us/development/frontend-development.html        |  538 ++++
 en-us/development/frontend-development.json        |    6 +
 en-us/development/have-questions.html              |   97 +
 en-us/development/have-questions.json              |    6 +
 en-us/docs/1.2.0/user_doc/backend-deployment.html  |  268 ++
 en-us/docs/1.2.0/user_doc/backend-deployment.json  |    6 +
 en-us/docs/1.2.0/user_doc/cluster-deployment.html  |  491 +++
 en-us/docs/1.2.0/user_doc/cluster-deployment.json  |    6 +
 en-us/docs/1.2.0/user_doc/frontend-deployment.html |  135 +
 en-us/docs/1.2.0/user_doc/frontend-deployment.json |    6 +
 .../docs/1.2.0/user_doc/hardware-environment.html  |  143 +
 .../docs/1.2.0/user_doc/hardware-environment.json  |    6 +
 en-us/docs/1.2.0/user_doc/metadata-1.2.html        |  670 ++++
 en-us/docs/1.2.0/user_doc/metadata-1.2.json        |    6 +
 en-us/docs/1.2.0/user_doc/quick-start.html         |  112 +
 en-us/docs/1.2.0/user_doc/quick-start.json         |    6 +
 .../docs/1.2.0/user_doc/standalone-deployment.html |  450 +++
 .../docs/1.2.0/user_doc/standalone-deployment.json |    6 +
 en-us/docs/1.2.0/user_doc/system-manual.html       |  785 +++++
 en-us/docs/1.2.0/user_doc/system-manual.json       |    6 +
 en-us/docs/1.2.0/user_doc/upgrade.html             |   76 +
 en-us/docs/1.2.0/user_doc/upgrade.json             |    6 +
 en-us/docs/1.2.1/user_doc/architecture-design.html |  315 ++
 en-us/docs/1.2.1/user_doc/architecture-design.json |    6 +
 en-us/docs/1.2.1/user_doc/backend-deployment.html  |  268 ++
 en-us/docs/1.2.1/user_doc/backend-deployment.json  |    6 +
 en-us/docs/1.2.1/user_doc/frontend-deployment.html |  136 +
 en-us/docs/1.2.1/user_doc/frontend-deployment.json |    6 +
 .../docs/1.2.1/user_doc/hardware-environment.html  |  143 +
 .../docs/1.2.1/user_doc/hardware-environment.json  |    6 +
 en-us/docs/1.2.1/user_doc/metadata-1.2.html        |  670 ++++
 en-us/docs/1.2.1/user_doc/metadata-1.2.json        |    6 +
 en-us/docs/1.2.1/user_doc/plugin-development.html  |   92 +
 en-us/docs/1.2.1/user_doc/plugin-development.json  |    6 +
 en-us/docs/1.2.1/user_doc/quick-start.html         |  112 +
 en-us/docs/1.2.1/user_doc/quick-start.json         |    6 +
 en-us/docs/1.2.1/user_doc/system-manual.html       |  783 +++++
 en-us/docs/1.2.1/user_doc/system-manual.json       |    6 +
 en-us/docs/1.2.1/user_doc/upgrade.html             |   76 +
 en-us/docs/1.2.1/user_doc/upgrade.json             |    6 +
 en-us/docs/1.3.1/user_doc/architecture-design.html |  363 +++
 en-us/docs/1.3.1/user_doc/architecture-design.json |    6 +
 en-us/docs/1.3.1/user_doc/cluster-deployment.html  |  412 +++
 en-us/docs/1.3.1/user_doc/cluster-deployment.json  |    6 +
 en-us/docs/1.3.1/user_doc/configuration-file.html  | 1010 ++++++
 en-us/docs/1.3.1/user_doc/configuration-file.json  |    6 +
 .../docs/1.3.1/user_doc/hardware-environment.html  |  138 +
 .../docs/1.3.1/user_doc/hardware-environment.json  |    6 +
 en-us/docs/1.3.1/user_doc/metadata-1.3.html        |  754 +++++
 en-us/docs/1.3.1/user_doc/metadata-1.3.json        |    6 +
 en-us/docs/1.3.1/user_doc/quick-start.html         |  112 +
 en-us/docs/1.3.1/user_doc/quick-start.json         |    6 +
 .../docs/1.3.1/user_doc/standalone-deployment.html |  406 +++
 .../docs/1.3.1/user_doc/standalone-deployment.json |    6 +
 en-us/docs/1.3.1/user_doc/system-manual.html       |  986 ++++++
 en-us/docs/1.3.1/user_doc/system-manual.json       |    6 +
 en-us/docs/1.3.1/user_doc/task-structure.html      | 3293 ++++++++++++++++++++
 en-us/docs/1.3.1/user_doc/task-structure.json      |    6 +
 en-us/docs/1.3.1/user_doc/upgrade.html             |  133 +
 en-us/docs/1.3.1/user_doc/upgrade.json             |    6 +
 en-us/docs/1.3.2/user_doc/architecture-design.html |  363 +++
 en-us/docs/1.3.2/user_doc/architecture-design.json |    6 +
 en-us/docs/1.3.2/user_doc/cluster-deployment.html  |  411 +++
 en-us/docs/1.3.2/user_doc/cluster-deployment.json  |    6 +
 en-us/docs/1.3.2/user_doc/configuration-file.html  | 1010 ++++++
 en-us/docs/1.3.2/user_doc/configuration-file.json  |    6 +
 en-us/docs/1.3.2/user_doc/expansion-reduction.html |  260 ++
 en-us/docs/1.3.2/user_doc/expansion-reduction.json |    6 +
 .../docs/1.3.2/user_doc/hardware-environment.html  |  138 +
 .../docs/1.3.2/user_doc/hardware-environment.json  |    6 +
 en-us/docs/1.3.2/user_doc/metadata-1.3.html        |  666 ++++
 en-us/docs/1.3.2/user_doc/metadata-1.3.json        |    6 +
 en-us/docs/1.3.2/user_doc/quick-start.html         |  112 +
 en-us/docs/1.3.2/user_doc/quick-start.json         |    6 +
 .../docs/1.3.2/user_doc/standalone-deployment.html |  355 +++
 .../docs/1.3.2/user_doc/standalone-deployment.json |    6 +
 en-us/docs/1.3.2/user_doc/system-manual.html       | 1016 ++++++
 en-us/docs/1.3.2/user_doc/system-manual.json       |    6 +
 en-us/docs/1.3.2/user_doc/task-structure.html      | 3293 ++++++++++++++++++++
 en-us/docs/1.3.2/user_doc/task-structure.json      |    6 +
 en-us/docs/1.3.2/user_doc/upgrade.html             |  137 +
 en-us/docs/1.3.2/user_doc/upgrade.json             |    6 +
 en-us/docs/1.3.3/user_doc/architecture-design.html |  363 +++
 en-us/docs/1.3.3/user_doc/architecture-design.json |    6 +
 en-us/docs/1.3.3/user_doc/cluster-deployment.html  |  412 +++
 en-us/docs/1.3.3/user_doc/cluster-deployment.json  |    6 +
 en-us/docs/1.3.3/user_doc/configuration-file.html  | 1010 ++++++
 en-us/docs/1.3.3/user_doc/configuration-file.json  |    6 +
 en-us/docs/1.3.3/user_doc/expansion-reduction.html |  260 ++
 en-us/docs/1.3.3/user_doc/expansion-reduction.json |    6 +
 .../docs/1.3.3/user_doc/hardware-environment.html  |  138 +
 .../docs/1.3.3/user_doc/hardware-environment.json  |    6 +
 en-us/docs/1.3.3/user_doc/metadata-1.3.html        |  666 ++++
 en-us/docs/1.3.3/user_doc/metadata-1.3.json        |    6 +
 en-us/docs/1.3.3/user_doc/quick-start.html         |  112 +
 en-us/docs/1.3.3/user_doc/quick-start.json         |    6 +
 .../docs/1.3.3/user_doc/standalone-deployment.html |  355 +++
 .../docs/1.3.3/user_doc/standalone-deployment.json |    6 +
 en-us/docs/1.3.3/user_doc/system-manual.html       | 1040 +++++++
 en-us/docs/1.3.3/user_doc/system-manual.json       |    6 +
 en-us/docs/1.3.3/user_doc/task-structure.html      | 3293 ++++++++++++++++++++
 en-us/docs/1.3.3/user_doc/task-structure.json      |    6 +
 en-us/docs/1.3.3/user_doc/upgrade.html             |  137 +
 en-us/docs/1.3.3/user_doc/upgrade.json             |    6 +
 en-us/docs/1.3.4/user_doc/architecture-design.html |  363 +++
 en-us/docs/1.3.4/user_doc/architecture-design.json |    6 +
 en-us/docs/1.3.4/user_doc/cluster-deployment.html  |  412 +++
 en-us/docs/1.3.4/user_doc/cluster-deployment.json  |    6 +
 en-us/docs/1.3.4/user_doc/configuration-file.html  | 1012 ++++++
 en-us/docs/1.3.4/user_doc/configuration-file.json  |    6 +
 en-us/docs/1.3.4/user_doc/docker-deployment.html   |  145 +
 en-us/docs/1.3.4/user_doc/docker-deployment.json   |    6 +
 en-us/docs/1.3.4/user_doc/expansion-reduction.html |  260 ++
 en-us/docs/1.3.4/user_doc/expansion-reduction.json |    6 +
 .../docs/1.3.4/user_doc/hardware-environment.html  |  138 +
 .../docs/1.3.4/user_doc/hardware-environment.json  |    6 +
 en-us/docs/1.3.4/user_doc/load-balance.html        |   73 +
 en-us/docs/1.3.4/user_doc/load-balance.json        |    6 +
 en-us/docs/1.3.4/user_doc/metadata-1.3.html        |  666 ++++
 en-us/docs/1.3.4/user_doc/metadata-1.3.json        |    6 +
 en-us/docs/1.3.4/user_doc/quick-start.html         |  112 +
 en-us/docs/1.3.4/user_doc/quick-start.json         |    6 +
 .../docs/1.3.4/user_doc/standalone-deployment.html |  355 +++
 .../docs/1.3.4/user_doc/standalone-deployment.json |    6 +
 en-us/docs/1.3.4/user_doc/system-manual.html       | 1041 +++++++
 en-us/docs/1.3.4/user_doc/system-manual.json       |    6 +
 en-us/docs/1.3.4/user_doc/task-structure.html      | 3292 +++++++++++++++++++
 en-us/docs/1.3.4/user_doc/task-structure.json      |    6 +
 en-us/docs/1.3.4/user_doc/upgrade.html             |  137 +
 en-us/docs/1.3.4/user_doc/upgrade.json             |    6 +
 en-us/docs/1.3.5/user_doc/architecture-design.html |  363 +++
 en-us/docs/1.3.5/user_doc/architecture-design.json |    6 +
 en-us/docs/1.3.5/user_doc/cluster-deployment.html  |  412 +++
 en-us/docs/1.3.5/user_doc/cluster-deployment.json  |    6 +
 en-us/docs/1.3.5/user_doc/configuration-file.html  | 1012 ++++++
 en-us/docs/1.3.5/user_doc/configuration-file.json  |    6 +
 en-us/docs/1.3.5/user_doc/docker-deployment.html   |  352 +++
 en-us/docs/1.3.5/user_doc/docker-deployment.json   |    6 +
 en-us/docs/1.3.5/user_doc/expansion-reduction.html |  260 ++
 en-us/docs/1.3.5/user_doc/expansion-reduction.json |    6 +
 .../docs/1.3.5/user_doc/hardware-environment.html  |  138 +
 .../docs/1.3.5/user_doc/hardware-environment.json  |    6 +
 .../docs/1.3.5/user_doc/kubernetes-deployment.html |  197 ++
 .../docs/1.3.5/user_doc/kubernetes-deployment.json |    6 +
 en-us/docs/1.3.5/user_doc/load-balance.html        |   73 +
 en-us/docs/1.3.5/user_doc/load-balance.json        |    6 +
 en-us/docs/1.3.5/user_doc/metadata-1.3.html        |  666 ++++
 en-us/docs/1.3.5/user_doc/metadata-1.3.json        |    6 +
 en-us/docs/1.3.5/user_doc/open-api.html            |   79 +
 en-us/docs/1.3.5/user_doc/open-api.json            |    6 +
 en-us/docs/1.3.5/user_doc/quick-start.html         |  112 +
 en-us/docs/1.3.5/user_doc/quick-start.json         |    6 +
 .../docs/1.3.5/user_doc/standalone-deployment.html |  355 +++
 .../docs/1.3.5/user_doc/standalone-deployment.json |    6 +
 en-us/docs/1.3.5/user_doc/system-manual.html       | 1069 +++++++
 en-us/docs/1.3.5/user_doc/system-manual.json       |    6 +
 en-us/docs/1.3.5/user_doc/task-structure.html      | 3292 +++++++++++++++++++
 en-us/docs/1.3.5/user_doc/task-structure.json      |    6 +
 en-us/docs/1.3.5/user_doc/upgrade.html             |  137 +
 en-us/docs/1.3.5/user_doc/upgrade.json             |    6 +
 en-us/docs/1.3.6/user_doc/ambari-integration.html  |  179 ++
 en-us/docs/1.3.6/user_doc/ambari-integration.json  |    6 +
 en-us/docs/1.3.6/user_doc/architecture-design.html |  363 +++
 en-us/docs/1.3.6/user_doc/architecture-design.json |    6 +
 en-us/docs/1.3.6/user_doc/cluster-deployment.html  |  412 +++
 en-us/docs/1.3.6/user_doc/cluster-deployment.json  |    6 +
 en-us/docs/1.3.6/user_doc/configuration-file.html  | 1012 ++++++
 en-us/docs/1.3.6/user_doc/configuration-file.json  |    6 +
 en-us/docs/1.3.6/user_doc/docker-deployment.html   |  914 ++++++
 en-us/docs/1.3.6/user_doc/docker-deployment.json   |    6 +
 en-us/docs/1.3.6/user_doc/expansion-reduction.html |  260 ++
 en-us/docs/1.3.6/user_doc/expansion-reduction.json |    6 +
 en-us/docs/1.3.6/user_doc/flink-call.html          |  136 +
 en-us/docs/1.3.6/user_doc/flink-call.json          |    6 +
 .../docs/1.3.6/user_doc/hardware-environment.html  |  138 +
 .../docs/1.3.6/user_doc/hardware-environment.json  |    6 +
 .../docs/1.3.6/user_doc/kubernetes-deployment.html | 1760 +++++++++++
 .../docs/1.3.6/user_doc/kubernetes-deployment.json |    6 +
 en-us/docs/1.3.6/user_doc/load-balance.html        |   73 +
 en-us/docs/1.3.6/user_doc/load-balance.json        |    6 +
 en-us/docs/1.3.6/user_doc/metadata-1.3.html        |  666 ++++
 en-us/docs/1.3.6/user_doc/metadata-1.3.json        |    6 +
 en-us/docs/1.3.6/user_doc/open-api.html            |   99 +
 en-us/docs/1.3.6/user_doc/open-api.json            |    6 +
 en-us/docs/1.3.6/user_doc/quick-start.html         |  112 +
 en-us/docs/1.3.6/user_doc/quick-start.json         |    6 +
 .../user_doc/skywalking-agent-deployment.html      |   86 +
 .../user_doc/skywalking-agent-deployment.json      |    6 +
 .../docs/1.3.6/user_doc/standalone-deployment.html |  358 +++
 .../docs/1.3.6/user_doc/standalone-deployment.json |    6 +
 en-us/docs/1.3.6/user_doc/system-manual.html       | 1049 +++++++
 en-us/docs/1.3.6/user_doc/system-manual.json       |    6 +
 en-us/docs/1.3.6/user_doc/task-structure.html      | 3292 +++++++++++++++++++
 en-us/docs/1.3.6/user_doc/task-structure.json      |    6 +
 en-us/docs/1.3.6/user_doc/upgrade.html             |  137 +
 en-us/docs/1.3.6/user_doc/upgrade.json             |    6 +
 en-us/docs/1.3.8/user_doc/ambari-integration.html  |  177 ++
 en-us/docs/1.3.8/user_doc/ambari-integration.json  |    6 +
 en-us/docs/1.3.8/user_doc/architecture-design.html |  355 +++
 en-us/docs/1.3.8/user_doc/architecture-design.json |    6 +
 en-us/docs/1.3.8/user_doc/cluster-deployment.html  |  412 +++
 en-us/docs/1.3.8/user_doc/cluster-deployment.json  |    6 +
 en-us/docs/1.3.8/user_doc/configuration-file.html  | 1012 ++++++
 en-us/docs/1.3.8/user_doc/configuration-file.json  |    6 +
 en-us/docs/1.3.8/user_doc/docker-deployment.html   |  924 ++++++
 en-us/docs/1.3.8/user_doc/docker-deployment.json   |    6 +
 en-us/docs/1.3.8/user_doc/expansion-reduction.html |  261 ++
 en-us/docs/1.3.8/user_doc/expansion-reduction.json |    6 +
 en-us/docs/1.3.8/user_doc/flink-call.html          |  136 +
 en-us/docs/1.3.8/user_doc/flink-call.json          |    6 +
 .../docs/1.3.8/user_doc/hardware-environment.html  |  138 +
 .../docs/1.3.8/user_doc/hardware-environment.json  |    6 +
 .../docs/1.3.8/user_doc/kubernetes-deployment.html | 1760 +++++++++++
 .../docs/1.3.8/user_doc/kubernetes-deployment.json |    6 +
 en-us/docs/1.3.8/user_doc/load-balance.html        |   73 +
 en-us/docs/1.3.8/user_doc/load-balance.json        |    6 +
 en-us/docs/1.3.8/user_doc/metadata-1.3.html        |  666 ++++
 en-us/docs/1.3.8/user_doc/metadata-1.3.json        |    6 +
 en-us/docs/1.3.8/user_doc/open-api.html            |   99 +
 en-us/docs/1.3.8/user_doc/open-api.json            |    6 +
 .../1.3.8/user_doc/parameters-introduction.html    |  112 +
 .../1.3.8/user_doc/parameters-introduction.json    |    6 +
 en-us/docs/1.3.8/user_doc/quick-start.html         |  112 +
 en-us/docs/1.3.8/user_doc/quick-start.json         |    6 +
 .../user_doc/skywalking-agent-deployment.html      |   86 +
 .../user_doc/skywalking-agent-deployment.json      |    6 +
 .../docs/1.3.8/user_doc/standalone-deployment.html |  358 +++
 .../docs/1.3.8/user_doc/standalone-deployment.json |    6 +
 en-us/docs/1.3.8/user_doc/system-manual.html       | 1055 +++++++
 en-us/docs/1.3.8/user_doc/system-manual.json       |    6 +
 en-us/docs/1.3.8/user_doc/task-structure.html      | 3292 +++++++++++++++++++
 en-us/docs/1.3.8/user_doc/task-structure.json      |    6 +
 en-us/docs/1.3.8/user_doc/upgrade.html             |  137 +
 en-us/docs/1.3.8/user_doc/upgrade.json             |    6 +
 en-us/docs/1.3.9/user_doc/ambari-integration.html  |  177 ++
 en-us/docs/1.3.9/user_doc/ambari-integration.json  |    6 +
 en-us/docs/1.3.9/user_doc/architecture-design.html |  355 +++
 en-us/docs/1.3.9/user_doc/architecture-design.json |    6 +
 en-us/docs/1.3.9/user_doc/cluster-deployment.html  |  412 +++
 en-us/docs/1.3.9/user_doc/cluster-deployment.json  |    6 +
 en-us/docs/1.3.9/user_doc/configuration-file.html  | 1012 ++++++
 en-us/docs/1.3.9/user_doc/configuration-file.json  |    6 +
 en-us/docs/1.3.9/user_doc/docker-deployment.html   |  924 ++++++
 en-us/docs/1.3.9/user_doc/docker-deployment.json   |    6 +
 en-us/docs/1.3.9/user_doc/expansion-reduction.html |  260 ++
 en-us/docs/1.3.9/user_doc/expansion-reduction.json |    6 +
 en-us/docs/1.3.9/user_doc/flink-call.html          |  136 +
 en-us/docs/1.3.9/user_doc/flink-call.json          |    6 +
 .../docs/1.3.9/user_doc/hardware-environment.html  |  138 +
 .../docs/1.3.9/user_doc/hardware-environment.json  |    6 +
 .../docs/1.3.9/user_doc/kubernetes-deployment.html | 1760 +++++++++++
 .../docs/1.3.9/user_doc/kubernetes-deployment.json |    6 +
 en-us/docs/1.3.9/user_doc/load-balance.html        |   73 +
 en-us/docs/1.3.9/user_doc/load-balance.json        |    6 +
 en-us/docs/1.3.9/user_doc/metadata-1.3.html        |  666 ++++
 en-us/docs/1.3.9/user_doc/metadata-1.3.json        |    6 +
 en-us/docs/1.3.9/user_doc/open-api.html            |   99 +
 en-us/docs/1.3.9/user_doc/open-api.json            |    6 +
 .../1.3.9/user_doc/parameters-introduction.html    |  112 +
 .../1.3.9/user_doc/parameters-introduction.json    |    6 +
 en-us/docs/1.3.9/user_doc/quick-start.html         |  112 +
 en-us/docs/1.3.9/user_doc/quick-start.json         |    6 +
 .../user_doc/skywalking-agent-deployment.html      |   86 +
 .../user_doc/skywalking-agent-deployment.json      |    6 +
 .../docs/1.3.9/user_doc/standalone-deployment.html |  358 +++
 .../docs/1.3.9/user_doc/standalone-deployment.json |    6 +
 en-us/docs/1.3.9/user_doc/standalone-server.html   |   71 +
 en-us/docs/1.3.9/user_doc/standalone-server.json   |    6 +
 en-us/docs/1.3.9/user_doc/system-manual.html       | 1025 ++++++
 en-us/docs/1.3.9/user_doc/system-manual.json       |    6 +
 en-us/docs/1.3.9/user_doc/task-structure.html      | 3292 +++++++++++++++++++
 en-us/docs/1.3.9/user_doc/task-structure.json      |    6 +
 en-us/docs/1.3.9/user_doc/upgrade.html             |  137 +
 en-us/docs/1.3.9/user_doc/upgrade.json             |    6 +
 .../About_DolphinScheduler.html                    |   55 +
 .../About_DolphinScheduler.json                    |    6 +
 .../2.0.0/user_doc/architecture/configuration.html | 1017 ++++++
 .../2.0.0/user_doc/architecture/configuration.json |    6 +
 en-us/docs/2.0.0/user_doc/architecture/design.html |  382 +++
 en-us/docs/2.0.0/user_doc/architecture/design.json |    6 +
 .../2.0.0/user_doc/architecture/designplus.html    |  107 +
 .../2.0.0/user_doc/architecture/designplus.json    |    6 +
 .../2.0.0/user_doc/architecture/load-balance.html  |   73 +
 .../2.0.0/user_doc/architecture/load-balance.json  |    6 +
 .../docs/2.0.0/user_doc/architecture/metadata.html |  666 ++++
 .../docs/2.0.0/user_doc/architecture/metadata.json |    6 +
 .../user_doc/architecture/task-structure.html      | 3292 +++++++++++++++++++
 .../user_doc/architecture/task-structure.json      |    6 +
 .../guide/alert/alert_plugin_user_guide.html       |   45 +
 .../guide/alert/alert_plugin_user_guide.json       |    6 +
 .../user_doc/guide/alert/enterprise-wechat.html    |   64 +
 .../user_doc/guide/alert/enterprise-wechat.json    |    6 +
 .../docs/2.0.0/user_doc/guide/datasource/hive.html |   62 +
 .../docs/2.0.0/user_doc/guide/datasource/hive.json |    6 +
 .../user_doc/guide/datasource/introduction.html    |   44 +
 .../user_doc/guide/datasource/introduction.json    |    6 +
 .../2.0.0/user_doc/guide/datasource/mysql.html     |   53 +
 .../2.0.0/user_doc/guide/datasource/mysql.json     |    6 +
 .../user_doc/guide/datasource/postgresql.html      |   53 +
 .../user_doc/guide/datasource/postgresql.json      |    6 +
 .../2.0.0/user_doc/guide/datasource/spark.html     |   53 +
 .../2.0.0/user_doc/guide/datasource/spark.json     |    6 +
 .../2.0.0/user_doc/guide/expansion-reduction.html  |  261 ++
 .../2.0.0/user_doc/guide/expansion-reduction.json  |    6 +
 en-us/docs/2.0.0/user_doc/guide/flink-call.html    |  136 +
 en-us/docs/2.0.0/user_doc/guide/flink-call.json    |    6 +
 en-us/docs/2.0.0/user_doc/guide/homepage.html      |   42 +
 en-us/docs/2.0.0/user_doc/guide/homepage.json      |    6 +
 .../2.0.0/user_doc/guide/installation/cluster.html |   61 +
 .../2.0.0/user_doc/guide/installation/cluster.json |    6 +
 .../2.0.0/user_doc/guide/installation/docker.html  |  924 ++++++
 .../2.0.0/user_doc/guide/installation/docker.json  |    6 +
 .../user_doc/guide/installation/hardware.html      |  138 +
 .../user_doc/guide/installation/hardware.json      |    6 +
 .../user_doc/guide/installation/kubernetes.html    | 1762 +++++++++++
 .../user_doc/guide/installation/kubernetes.json    |    6 +
 .../guide/installation/pseudo-cluster.html         |  211 ++
 .../guide/installation/pseudo-cluster.json         |    6 +
 .../user_doc/guide/installation/standalone.html    |   66 +
 .../user_doc/guide/installation/standalone.json    |    6 +
 en-us/docs/2.0.0/user_doc/guide/introduction.html  |   40 +
 en-us/docs/2.0.0/user_doc/guide/introduction.json  |    6 +
 en-us/docs/2.0.0/user_doc/guide/monitor.html       |   81 +
 en-us/docs/2.0.0/user_doc/guide/monitor.json       |    6 +
 .../guide/observability/skywalking-agent.html      |   86 +
 .../guide/observability/skywalking-agent.json      |    6 +
 en-us/docs/2.0.0/user_doc/guide/open-api.html      |   99 +
 en-us/docs/2.0.0/user_doc/guide/open-api.json      |    6 +
 .../2.0.0/user_doc/guide/parameter/built-in.html   |   88 +
 .../2.0.0/user_doc/guide/parameter/built-in.json   |    6 +
 .../2.0.0/user_doc/guide/parameter/context.html    |   73 +
 .../2.0.0/user_doc/guide/parameter/context.json    |    6 +
 .../2.0.0/user_doc/guide/parameter/global.html     |   50 +
 .../2.0.0/user_doc/guide/parameter/global.json     |    6 +
 .../docs/2.0.0/user_doc/guide/parameter/local.html |   50 +
 .../docs/2.0.0/user_doc/guide/parameter/local.json |    6 +
 .../2.0.0/user_doc/guide/parameter/priority.html   |   64 +
 .../2.0.0/user_doc/guide/parameter/priority.json   |    6 +
 .../2.0.0/user_doc/guide/project/project-list.html |   66 +
 .../2.0.0/user_doc/guide/project/project-list.json |    6 +
 .../user_doc/guide/project/task-instance.html      |   53 +
 .../user_doc/guide/project/task-instance.json      |    6 +
 .../guide/project/workflow-definition.html         |  165 +
 .../guide/project/workflow-definition.json         |    6 +
 .../user_doc/guide/project/workflow-instance.html  |   98 +
 .../user_doc/guide/project/workflow-instance.json  |    6 +
 en-us/docs/2.0.0/user_doc/guide/quick-start.html   |  118 +
 en-us/docs/2.0.0/user_doc/guide/quick-start.json   |    6 +
 en-us/docs/2.0.0/user_doc/guide/resource.html      |  167 +
 en-us/docs/2.0.0/user_doc/guide/resource.json      |    6 +
 en-us/docs/2.0.0/user_doc/guide/security.html      |  223 ++
 en-us/docs/2.0.0/user_doc/guide/security.json      |    6 +
 .../docs/2.0.0/user_doc/guide/task/conditions.html |   73 +
 .../docs/2.0.0/user_doc/guide/task/conditions.json |    6 +
 en-us/docs/2.0.0/user_doc/guide/task/datax.html    |   74 +
 en-us/docs/2.0.0/user_doc/guide/task/datax.json    |    6 +
 .../docs/2.0.0/user_doc/guide/task/dependent.html  |   65 +
 .../docs/2.0.0/user_doc/guide/task/dependent.json  |    6 +
 en-us/docs/2.0.0/user_doc/guide/task/flink.html    |   60 +
 en-us/docs/2.0.0/user_doc/guide/task/flink.json    |    6 +
 en-us/docs/2.0.0/user_doc/guide/task/http.html     |   61 +
 en-us/docs/2.0.0/user_doc/guide/task/http.json     |    6 +
 .../docs/2.0.0/user_doc/guide/task/map-reduce.html |   71 +
 .../docs/2.0.0/user_doc/guide/task/map-reduce.json |    6 +
 en-us/docs/2.0.0/user_doc/guide/task/pigeon.html   |   54 +
 en-us/docs/2.0.0/user_doc/guide/task/pigeon.json   |    6 +
 en-us/docs/2.0.0/user_doc/guide/task/python.html   |   55 +
 en-us/docs/2.0.0/user_doc/guide/task/python.json   |    6 +
 en-us/docs/2.0.0/user_doc/guide/task/shell.html    |   74 +
 en-us/docs/2.0.0/user_doc/guide/task/shell.json    |    6 +
 en-us/docs/2.0.0/user_doc/guide/task/spark.html    |   61 +
 en-us/docs/2.0.0/user_doc/guide/task/spark.json    |    6 +
 en-us/docs/2.0.0/user_doc/guide/task/sql.html      |   68 +
 en-us/docs/2.0.0/user_doc/guide/task/sql.json      |    6 +
 .../user_doc/guide/task/stored-procedure.html      |   53 +
 .../user_doc/guide/task/stored-procedure.json      |    6 +
 .../2.0.0/user_doc/guide/task/sub-process.html     |   55 +
 .../2.0.0/user_doc/guide/task/sub-process.json     |    6 +
 en-us/docs/2.0.0/user_doc/guide/task/switch.html   |   70 +
 en-us/docs/2.0.0/user_doc/guide/task/switch.json   |    6 +
 en-us/docs/2.0.0/user_doc/guide/upgrade.html       |  107 +
 en-us/docs/2.0.0/user_doc/guide/upgrade.json       |    6 +
 .../About_DolphinScheduler.html                    |   55 +
 .../About_DolphinScheduler.json                    |    6 +
 .../2.0.1/user_doc/architecture/configuration.html | 1017 ++++++
 .../2.0.1/user_doc/architecture/configuration.json |    6 +
 en-us/docs/2.0.1/user_doc/architecture/design.html |  382 +++
 en-us/docs/2.0.1/user_doc/architecture/design.json |    6 +
 .../2.0.1/user_doc/architecture/designplus.html    |  107 +
 .../2.0.1/user_doc/architecture/designplus.json    |    6 +
 .../2.0.1/user_doc/architecture/load-balance.html  |   73 +
 .../2.0.1/user_doc/architecture/load-balance.json  |    6 +
 .../docs/2.0.1/user_doc/architecture/metadata.html |  666 ++++
 .../docs/2.0.1/user_doc/architecture/metadata.json |    6 +
 .../user_doc/architecture/task-structure.html      | 3292 +++++++++++++++++++
 .../user_doc/architecture/task-structure.json      |    6 +
 .../guide/alert/alert_plugin_user_guide.html       |   45 +
 .../guide/alert/alert_plugin_user_guide.json       |    6 +
 .../user_doc/guide/alert/enterprise-wechat.html    |   64 +
 .../user_doc/guide/alert/enterprise-wechat.json    |    6 +
 .../docs/2.0.1/user_doc/guide/datasource/hive.html |   71 +
 .../docs/2.0.1/user_doc/guide/datasource/hive.json |    6 +
 .../user_doc/guide/datasource/introduction.html    |   44 +
 .../user_doc/guide/datasource/introduction.json    |    6 +
 .../2.0.1/user_doc/guide/datasource/mysql.html     |   53 +
 .../2.0.1/user_doc/guide/datasource/mysql.json     |    6 +
 .../user_doc/guide/datasource/postgresql.html      |   53 +
 .../user_doc/guide/datasource/postgresql.json      |    6 +
 .../2.0.1/user_doc/guide/datasource/spark.html     |   53 +
 .../2.0.1/user_doc/guide/datasource/spark.json     |    6 +
 .../2.0.1/user_doc/guide/expansion-reduction.html  |  261 ++
 .../2.0.1/user_doc/guide/expansion-reduction.json  |    6 +
 en-us/docs/2.0.1/user_doc/guide/flink-call.html    |  136 +
 en-us/docs/2.0.1/user_doc/guide/flink-call.json    |    6 +
 en-us/docs/2.0.1/user_doc/guide/homepage.html      |   42 +
 en-us/docs/2.0.1/user_doc/guide/homepage.json      |    6 +
 .../2.0.1/user_doc/guide/installation/cluster.html |   61 +
 .../2.0.1/user_doc/guide/installation/cluster.json |    6 +
 .../2.0.1/user_doc/guide/installation/docker.html  |  924 ++++++
 .../2.0.1/user_doc/guide/installation/docker.json  |    6 +
 .../user_doc/guide/installation/hardware.html      |  138 +
 .../user_doc/guide/installation/hardware.json      |    6 +
 .../user_doc/guide/installation/kubernetes.html    | 1762 +++++++++++
 .../user_doc/guide/installation/kubernetes.json    |    6 +
 .../guide/installation/pseudo-cluster.html         |  211 ++
 .../guide/installation/pseudo-cluster.json         |    6 +
 .../user_doc/guide/installation/standalone.html    |   66 +
 .../user_doc/guide/installation/standalone.json    |    6 +
 en-us/docs/2.0.1/user_doc/guide/introduction.html  |   40 +
 en-us/docs/2.0.1/user_doc/guide/introduction.json  |    6 +
 en-us/docs/2.0.1/user_doc/guide/monitor.html       |   81 +
 en-us/docs/2.0.1/user_doc/guide/monitor.json       |    6 +
 .../guide/observability/skywalking-agent.html      |   86 +
 .../guide/observability/skywalking-agent.json      |    6 +
 en-us/docs/2.0.1/user_doc/guide/open-api.html      |   99 +
 en-us/docs/2.0.1/user_doc/guide/open-api.json      |    6 +
 .../2.0.1/user_doc/guide/parameter/built-in.html   |   88 +
 .../2.0.1/user_doc/guide/parameter/built-in.json   |    6 +
 .../2.0.1/user_doc/guide/parameter/context.html    |   73 +
 .../2.0.1/user_doc/guide/parameter/context.json    |    6 +
 .../2.0.1/user_doc/guide/parameter/global.html     |   50 +
 .../2.0.1/user_doc/guide/parameter/global.json     |    6 +
 .../docs/2.0.1/user_doc/guide/parameter/local.html |   50 +
 .../docs/2.0.1/user_doc/guide/parameter/local.json |    6 +
 .../2.0.1/user_doc/guide/parameter/priority.html   |   64 +
 .../2.0.1/user_doc/guide/parameter/priority.json   |    6 +
 .../2.0.1/user_doc/guide/project/project-list.html |   66 +
 .../2.0.1/user_doc/guide/project/project-list.json |    6 +
 .../user_doc/guide/project/task-instance.html      |   53 +
 .../user_doc/guide/project/task-instance.json      |    6 +
 .../guide/project/workflow-definition.html         |  165 +
 .../guide/project/workflow-definition.json         |    6 +
 .../user_doc/guide/project/workflow-instance.html  |   98 +
 .../user_doc/guide/project/workflow-instance.json  |    6 +
 en-us/docs/2.0.1/user_doc/guide/quick-start.html   |  118 +
 en-us/docs/2.0.1/user_doc/guide/quick-start.json   |    6 +
 en-us/docs/2.0.1/user_doc/guide/resource.html      |  167 +
 en-us/docs/2.0.1/user_doc/guide/resource.json      |    6 +
 en-us/docs/2.0.1/user_doc/guide/security.html      |  223 ++
 en-us/docs/2.0.1/user_doc/guide/security.json      |    6 +
 .../docs/2.0.1/user_doc/guide/task/conditions.html |   73 +
 .../docs/2.0.1/user_doc/guide/task/conditions.json |    6 +
 en-us/docs/2.0.1/user_doc/guide/task/datax.html    |   74 +
 en-us/docs/2.0.1/user_doc/guide/task/datax.json    |    6 +
 .../docs/2.0.1/user_doc/guide/task/dependent.html  |   65 +
 .../docs/2.0.1/user_doc/guide/task/dependent.json  |    6 +
 en-us/docs/2.0.1/user_doc/guide/task/flink.html    |   60 +
 en-us/docs/2.0.1/user_doc/guide/task/flink.json    |    6 +
 en-us/docs/2.0.1/user_doc/guide/task/http.html     |   61 +
 en-us/docs/2.0.1/user_doc/guide/task/http.json     |    6 +
 .../docs/2.0.1/user_doc/guide/task/map-reduce.html |   71 +
 .../docs/2.0.1/user_doc/guide/task/map-reduce.json |    6 +
 en-us/docs/2.0.1/user_doc/guide/task/pigeon.html   |   54 +
 en-us/docs/2.0.1/user_doc/guide/task/pigeon.json   |    6 +
 en-us/docs/2.0.1/user_doc/guide/task/python.html   |   55 +
 en-us/docs/2.0.1/user_doc/guide/task/python.json   |    6 +
 en-us/docs/2.0.1/user_doc/guide/task/shell.html    |   74 +
 en-us/docs/2.0.1/user_doc/guide/task/shell.json    |    6 +
 en-us/docs/2.0.1/user_doc/guide/task/spark.html    |   61 +
 en-us/docs/2.0.1/user_doc/guide/task/spark.json    |    6 +
 en-us/docs/2.0.1/user_doc/guide/task/sql.html      |   68 +
 en-us/docs/2.0.1/user_doc/guide/task/sql.json      |    6 +
 .../user_doc/guide/task/stored-procedure.html      |   53 +
 .../user_doc/guide/task/stored-procedure.json      |    6 +
 .../2.0.1/user_doc/guide/task/sub-process.html     |   55 +
 .../2.0.1/user_doc/guide/task/sub-process.json     |    6 +
 en-us/docs/2.0.1/user_doc/guide/task/switch.html   |   70 +
 en-us/docs/2.0.1/user_doc/guide/task/switch.json   |    6 +
 en-us/docs/2.0.1/user_doc/guide/upgrade.html       |  108 +
 en-us/docs/2.0.1/user_doc/guide/upgrade.json       |    6 +
 .../About_DolphinScheduler.html                    |   55 +
 .../About_DolphinScheduler.json                    |    6 +
 .../2.0.2/user_doc/architecture/configuration.html | 1017 ++++++
 .../2.0.2/user_doc/architecture/configuration.json |    6 +
 en-us/docs/2.0.2/user_doc/architecture/design.html |  382 +++
 en-us/docs/2.0.2/user_doc/architecture/design.json |    6 +
 .../2.0.2/user_doc/architecture/designplus.html    |  107 +
 .../2.0.2/user_doc/architecture/designplus.json    |    6 +
 .../2.0.2/user_doc/architecture/load-balance.html  |   73 +
 .../2.0.2/user_doc/architecture/load-balance.json  |    6 +
 .../docs/2.0.2/user_doc/architecture/metadata.html |  666 ++++
 .../docs/2.0.2/user_doc/architecture/metadata.json |    6 +
 .../user_doc/architecture/task-structure.html      | 3292 +++++++++++++++++++
 .../user_doc/architecture/task-structure.json      |    6 +
 .../guide/alert/alert_plugin_user_guide.html       |   45 +
 .../guide/alert/alert_plugin_user_guide.json       |    6 +
 .../user_doc/guide/alert/enterprise-wechat.html    |   45 +
 .../user_doc/guide/alert/enterprise-wechat.json    |    6 +
 .../docs/2.0.2/user_doc/guide/datasource/hive.html |   71 +
 .../docs/2.0.2/user_doc/guide/datasource/hive.json |    6 +
 .../user_doc/guide/datasource/introduction.html    |   44 +
 .../user_doc/guide/datasource/introduction.json    |    6 +
 .../2.0.2/user_doc/guide/datasource/mysql.html     |   53 +
 .../2.0.2/user_doc/guide/datasource/mysql.json     |    6 +
 .../user_doc/guide/datasource/postgresql.html      |   53 +
 .../user_doc/guide/datasource/postgresql.json      |    6 +
 .../2.0.2/user_doc/guide/datasource/spark.html     |   53 +
 .../2.0.2/user_doc/guide/datasource/spark.json     |    6 +
 .../2.0.2/user_doc/guide/expansion-reduction.html  |  261 ++
 .../2.0.2/user_doc/guide/expansion-reduction.json  |    6 +
 en-us/docs/2.0.2/user_doc/guide/flink-call.html    |  136 +
 en-us/docs/2.0.2/user_doc/guide/flink-call.json    |    6 +
 en-us/docs/2.0.2/user_doc/guide/homepage.html      |   42 +
 en-us/docs/2.0.2/user_doc/guide/homepage.json      |    6 +
 .../2.0.2/user_doc/guide/installation/cluster.html |   62 +
 .../2.0.2/user_doc/guide/installation/cluster.json |    6 +
 .../2.0.2/user_doc/guide/installation/docker.html  |  933 ++++++
 .../2.0.2/user_doc/guide/installation/docker.json  |    6 +
 .../user_doc/guide/installation/hardware.html      |  138 +
 .../user_doc/guide/installation/hardware.json      |    6 +
 .../user_doc/guide/installation/kubernetes.html    | 1762 +++++++++++
 .../user_doc/guide/installation/kubernetes.json    |    6 +
 .../guide/installation/pseudo-cluster.html         |  198 ++
 .../guide/installation/pseudo-cluster.json         |    6 +
 .../user_doc/guide/installation/standalone.html    |   66 +
 .../user_doc/guide/installation/standalone.json    |    6 +
 en-us/docs/2.0.2/user_doc/guide/introduction.html  |   40 +
 en-us/docs/2.0.2/user_doc/guide/introduction.json  |    6 +
 en-us/docs/2.0.2/user_doc/guide/monitor.html       |   81 +
 en-us/docs/2.0.2/user_doc/guide/monitor.json       |    6 +
 .../guide/observability/skywalking-agent.html      |   86 +
 .../guide/observability/skywalking-agent.json      |    6 +
 en-us/docs/2.0.2/user_doc/guide/open-api.html      |   99 +
 en-us/docs/2.0.2/user_doc/guide/open-api.json      |    6 +
 .../2.0.2/user_doc/guide/parameter/built-in.html   |   88 +
 .../2.0.2/user_doc/guide/parameter/built-in.json   |    6 +
 .../2.0.2/user_doc/guide/parameter/context.html    |   73 +
 .../2.0.2/user_doc/guide/parameter/context.json    |    6 +
 .../2.0.2/user_doc/guide/parameter/global.html     |   50 +
 .../2.0.2/user_doc/guide/parameter/global.json     |    6 +
 .../docs/2.0.2/user_doc/guide/parameter/local.html |   50 +
 .../docs/2.0.2/user_doc/guide/parameter/local.json |    6 +
 .../2.0.2/user_doc/guide/parameter/priority.html   |   64 +
 .../2.0.2/user_doc/guide/parameter/priority.json   |    6 +
 .../2.0.2/user_doc/guide/project/project-list.html |   66 +
 .../2.0.2/user_doc/guide/project/project-list.json |    6 +
 .../user_doc/guide/project/task-instance.html      |   53 +
 .../user_doc/guide/project/task-instance.json      |    6 +
 .../guide/project/workflow-definition.html         |  165 +
 .../guide/project/workflow-definition.json         |    6 +
 .../user_doc/guide/project/workflow-instance.html  |   98 +
 .../user_doc/guide/project/workflow-instance.json  |    6 +
 en-us/docs/2.0.2/user_doc/guide/quick-start.html   |  118 +
 en-us/docs/2.0.2/user_doc/guide/quick-start.json   |    6 +
 en-us/docs/2.0.2/user_doc/guide/resource.html      |  167 +
 en-us/docs/2.0.2/user_doc/guide/resource.json      |    6 +
 en-us/docs/2.0.2/user_doc/guide/security.html      |  223 ++
 en-us/docs/2.0.2/user_doc/guide/security.json      |    6 +
 .../docs/2.0.2/user_doc/guide/task/conditions.html |   73 +
 .../docs/2.0.2/user_doc/guide/task/conditions.json |    6 +
 en-us/docs/2.0.2/user_doc/guide/task/datax.html    |   74 +
 en-us/docs/2.0.2/user_doc/guide/task/datax.json    |    6 +
 .../docs/2.0.2/user_doc/guide/task/dependent.html  |   65 +
 .../docs/2.0.2/user_doc/guide/task/dependent.json  |    6 +
 en-us/docs/2.0.2/user_doc/guide/task/flink.html    |   60 +
 en-us/docs/2.0.2/user_doc/guide/task/flink.json    |    6 +
 en-us/docs/2.0.2/user_doc/guide/task/http.html     |   61 +
 en-us/docs/2.0.2/user_doc/guide/task/http.json     |    6 +
 .../docs/2.0.2/user_doc/guide/task/map-reduce.html |   71 +
 .../docs/2.0.2/user_doc/guide/task/map-reduce.json |    6 +
 en-us/docs/2.0.2/user_doc/guide/task/pigeon.html   |   54 +
 en-us/docs/2.0.2/user_doc/guide/task/pigeon.json   |    6 +
 en-us/docs/2.0.2/user_doc/guide/task/python.html   |   55 +
 en-us/docs/2.0.2/user_doc/guide/task/python.json   |    6 +
 en-us/docs/2.0.2/user_doc/guide/task/shell.html    |   74 +
 en-us/docs/2.0.2/user_doc/guide/task/shell.json    |    6 +
 en-us/docs/2.0.2/user_doc/guide/task/spark.html    |   61 +
 en-us/docs/2.0.2/user_doc/guide/task/spark.json    |    6 +
 en-us/docs/2.0.2/user_doc/guide/task/sql.html      |   68 +
 en-us/docs/2.0.2/user_doc/guide/task/sql.json      |    6 +
 .../user_doc/guide/task/stored-procedure.html      |   53 +
 .../user_doc/guide/task/stored-procedure.json      |    6 +
 .../2.0.2/user_doc/guide/task/sub-process.html     |   55 +
 .../2.0.2/user_doc/guide/task/sub-process.json     |    6 +
 en-us/docs/2.0.2/user_doc/guide/task/switch.html   |   70 +
 en-us/docs/2.0.2/user_doc/guide/task/switch.json   |    6 +
 en-us/docs/2.0.2/user_doc/guide/upgrade.html       |  108 +
 en-us/docs/2.0.2/user_doc/guide/upgrade.json       |    6 +
 .../About_DolphinScheduler.html                    |   56 +
 .../About_DolphinScheduler.json                    |    6 +
 en-us/docs/2.0.3/user_doc/architecture/cache.html  |   64 +
 en-us/docs/2.0.3/user_doc/architecture/cache.json  |    6 +
 .../2.0.3/user_doc/architecture/configuration.html | 1015 ++++++
 .../2.0.3/user_doc/architecture/configuration.json |    6 +
 en-us/docs/2.0.3/user_doc/architecture/design.html |  385 +++
 en-us/docs/2.0.3/user_doc/architecture/design.json |    6 +
 .../2.0.3/user_doc/architecture/designplus.html    |  107 +
 .../2.0.3/user_doc/architecture/designplus.json    |    6 +
 .../2.0.3/user_doc/architecture/load-balance.html  |   73 +
 .../2.0.3/user_doc/architecture/load-balance.json  |    6 +
 .../docs/2.0.3/user_doc/architecture/metadata.html |  666 ++++
 .../docs/2.0.3/user_doc/architecture/metadata.json |    6 +
 .../user_doc/architecture/task-structure.html      | 3293 ++++++++++++++++++++
 .../user_doc/architecture/task-structure.json      |    6 +
 .../guide/alert/alert_plugin_user_guide.html       |   46 +
 .../guide/alert/alert_plugin_user_guide.json       |    6 +
 .../user_doc/guide/alert/enterprise-wechat.html    |   46 +
 .../user_doc/guide/alert/enterprise-wechat.json    |    6 +
 .../docs/2.0.3/user_doc/guide/datasource/hive.html |   76 +
 .../docs/2.0.3/user_doc/guide/datasource/hive.json |    6 +
 .../user_doc/guide/datasource/introduction.html    |   44 +
 .../user_doc/guide/datasource/introduction.json    |    6 +
 .../2.0.3/user_doc/guide/datasource/mysql.html     |   53 +
 .../2.0.3/user_doc/guide/datasource/mysql.json     |    6 +
 .../user_doc/guide/datasource/postgresql.html      |   53 +
 .../user_doc/guide/datasource/postgresql.json      |    6 +
 .../2.0.3/user_doc/guide/datasource/spark.html     |   53 +
 .../2.0.3/user_doc/guide/datasource/spark.json     |    6 +
 .../2.0.3/user_doc/guide/expansion-reduction.html  |  261 ++
 .../2.0.3/user_doc/guide/expansion-reduction.json  |    6 +
 en-us/docs/2.0.3/user_doc/guide/flink-call.html    |  136 +
 en-us/docs/2.0.3/user_doc/guide/flink-call.json    |    6 +
 en-us/docs/2.0.3/user_doc/guide/homepage.html      |   42 +
 en-us/docs/2.0.3/user_doc/guide/homepage.json      |    6 +
 .../2.0.3/user_doc/guide/installation/cluster.html |   64 +
 .../2.0.3/user_doc/guide/installation/cluster.json |    6 +
 .../2.0.3/user_doc/guide/installation/docker.html  |  933 ++++++
 .../2.0.3/user_doc/guide/installation/docker.json  |    6 +
 .../user_doc/guide/installation/hardware.html      |  138 +
 .../user_doc/guide/installation/hardware.json      |    6 +
 .../user_doc/guide/installation/kubernetes.html    | 1762 +++++++++++
 .../user_doc/guide/installation/kubernetes.json    |    6 +
 .../guide/installation/pseudo-cluster.html         |  198 ++
 .../guide/installation/pseudo-cluster.json         |    6 +
 .../user_doc/guide/installation/standalone.html    |   66 +
 .../user_doc/guide/installation/standalone.json    |    6 +
 en-us/docs/2.0.3/user_doc/guide/introduction.html  |   40 +
 en-us/docs/2.0.3/user_doc/guide/introduction.json  |    6 +
 en-us/docs/2.0.3/user_doc/guide/monitor.html       |   81 +
 en-us/docs/2.0.3/user_doc/guide/monitor.json       |    6 +
 .../guide/observability/skywalking-agent.html      |   86 +
 .../guide/observability/skywalking-agent.json      |    6 +
 en-us/docs/2.0.3/user_doc/guide/open-api.html      |   99 +
 en-us/docs/2.0.3/user_doc/guide/open-api.json      |    6 +
 .../2.0.3/user_doc/guide/parameter/built-in.html   |   88 +
 .../2.0.3/user_doc/guide/parameter/built-in.json   |    6 +
 .../2.0.3/user_doc/guide/parameter/context.html    |   73 +
 .../2.0.3/user_doc/guide/parameter/context.json    |    6 +
 .../2.0.3/user_doc/guide/parameter/global.html     |   50 +
 .../2.0.3/user_doc/guide/parameter/global.json     |    6 +
 .../docs/2.0.3/user_doc/guide/parameter/local.html |   50 +
 .../docs/2.0.3/user_doc/guide/parameter/local.json |    6 +
 .../2.0.3/user_doc/guide/parameter/priority.html   |   64 +
 .../2.0.3/user_doc/guide/parameter/priority.json   |    6 +
 .../2.0.3/user_doc/guide/project/project-list.html |   66 +
 .../2.0.3/user_doc/guide/project/project-list.json |    6 +
 .../user_doc/guide/project/task-instance.html      |   53 +
 .../user_doc/guide/project/task-instance.json      |    6 +
 .../guide/project/workflow-definition.html         |  165 +
 .../guide/project/workflow-definition.json         |    6 +
 .../user_doc/guide/project/workflow-instance.html  |   98 +
 .../user_doc/guide/project/workflow-instance.json  |    6 +
 en-us/docs/2.0.3/user_doc/guide/quick-start.html   |  118 +
 en-us/docs/2.0.3/user_doc/guide/quick-start.json   |    6 +
 en-us/docs/2.0.3/user_doc/guide/resource.html      |  167 +
 en-us/docs/2.0.3/user_doc/guide/resource.json      |    6 +
 en-us/docs/2.0.3/user_doc/guide/security.html      |  223 ++
 en-us/docs/2.0.3/user_doc/guide/security.json      |    6 +
 .../docs/2.0.3/user_doc/guide/task/conditions.html |   73 +
 .../docs/2.0.3/user_doc/guide/task/conditions.json |    6 +
 en-us/docs/2.0.3/user_doc/guide/task/datax.html    |   74 +
 en-us/docs/2.0.3/user_doc/guide/task/datax.json    |    6 +
 .../docs/2.0.3/user_doc/guide/task/dependent.html  |   65 +
 .../docs/2.0.3/user_doc/guide/task/dependent.json  |    6 +
 en-us/docs/2.0.3/user_doc/guide/task/flink.html    |   89 +
 en-us/docs/2.0.3/user_doc/guide/task/flink.json    |    6 +
 en-us/docs/2.0.3/user_doc/guide/task/http.html     |   61 +
 en-us/docs/2.0.3/user_doc/guide/task/http.json     |    6 +
 .../docs/2.0.3/user_doc/guide/task/map-reduce.html |   95 +
 .../docs/2.0.3/user_doc/guide/task/map-reduce.json |    6 +
 en-us/docs/2.0.3/user_doc/guide/task/pigeon.html   |   54 +
 en-us/docs/2.0.3/user_doc/guide/task/pigeon.json   |    6 +
 en-us/docs/2.0.3/user_doc/guide/task/python.html   |   55 +
 en-us/docs/2.0.3/user_doc/guide/task/python.json   |    6 +
 en-us/docs/2.0.3/user_doc/guide/task/shell.html    |   74 +
 en-us/docs/2.0.3/user_doc/guide/task/shell.json    |    6 +
 en-us/docs/2.0.3/user_doc/guide/task/spark.html    |   86 +
 en-us/docs/2.0.3/user_doc/guide/task/spark.json    |    6 +
 en-us/docs/2.0.3/user_doc/guide/task/sql.html      |   68 +
 en-us/docs/2.0.3/user_doc/guide/task/sql.json      |    6 +
 .../user_doc/guide/task/stored-procedure.html      |   53 +
 .../user_doc/guide/task/stored-procedure.json      |    6 +
 .../2.0.3/user_doc/guide/task/sub-process.html     |   55 +
 .../2.0.3/user_doc/guide/task/sub-process.json     |    6 +
 en-us/docs/2.0.3/user_doc/guide/task/switch.html   |   70 +
 en-us/docs/2.0.3/user_doc/guide/task/switch.json   |    6 +
 en-us/docs/2.0.3/user_doc/guide/upgrade.html       |  108 +
 en-us/docs/2.0.3/user_doc/guide/upgrade.json       |    6 +
 .../About_DolphinScheduler.html                    |   56 +
 .../About_DolphinScheduler.json                    |    6 +
 en-us/docs/2.0.5/user_doc/architecture/cache.html  |   64 +
 en-us/docs/2.0.5/user_doc/architecture/cache.json  |    6 +
 .../2.0.5/user_doc/architecture/configuration.html | 1017 ++++++
 .../2.0.5/user_doc/architecture/configuration.json |    6 +
 en-us/docs/2.0.5/user_doc/architecture/design.html |  382 +++
 en-us/docs/2.0.5/user_doc/architecture/design.json |    6 +
 .../2.0.5/user_doc/architecture/designplus.html    |  107 +
 .../2.0.5/user_doc/architecture/designplus.json    |    6 +
 .../2.0.5/user_doc/architecture/load-balance.html  |   73 +
 .../2.0.5/user_doc/architecture/load-balance.json  |    6 +
 .../docs/2.0.5/user_doc/architecture/metadata.html |  666 ++++
 .../docs/2.0.5/user_doc/architecture/metadata.json |    6 +
 .../user_doc/architecture/task-structure.html      | 3292 +++++++++++++++++++
 .../user_doc/architecture/task-structure.json      |    6 +
 .../guide/alert/alert_plugin_user_guide.html       |   45 +
 .../guide/alert/alert_plugin_user_guide.json       |    6 +
 .../docs/2.0.5/user_doc/guide/alert/dingtalk.html  |   83 +
 .../docs/2.0.5/user_doc/guide/alert/dingtalk.json  |    6 +
 .../user_doc/guide/alert/enterprise-wechat.html    |   45 +
 .../user_doc/guide/alert/enterprise-wechat.json    |    6 +
 .../docs/2.0.5/user_doc/guide/datasource/hive.html |   76 +
 .../docs/2.0.5/user_doc/guide/datasource/hive.json |    6 +
 .../user_doc/guide/datasource/introduction.html    |   44 +
 .../user_doc/guide/datasource/introduction.json    |    6 +
 .../2.0.5/user_doc/guide/datasource/mysql.html     |   53 +
 .../2.0.5/user_doc/guide/datasource/mysql.json     |    6 +
 .../user_doc/guide/datasource/postgresql.html      |   53 +
 .../user_doc/guide/datasource/postgresql.json      |    6 +
 .../2.0.5/user_doc/guide/datasource/spark.html     |   53 +
 .../2.0.5/user_doc/guide/datasource/spark.json     |    6 +
 .../2.0.5/user_doc/guide/expansion-reduction.html  |  261 ++
 .../2.0.5/user_doc/guide/expansion-reduction.json  |    6 +
 en-us/docs/2.0.5/user_doc/guide/flink-call.html    |  136 +
 en-us/docs/2.0.5/user_doc/guide/flink-call.json    |    6 +
 en-us/docs/2.0.5/user_doc/guide/homepage.html      |   42 +
 en-us/docs/2.0.5/user_doc/guide/homepage.json      |    6 +
 .../2.0.5/user_doc/guide/installation/cluster.html |   62 +
 .../2.0.5/user_doc/guide/installation/cluster.json |    6 +
 .../2.0.5/user_doc/guide/installation/docker.html  |  933 ++++++
 .../2.0.5/user_doc/guide/installation/docker.json  |    6 +
 .../user_doc/guide/installation/hardware.html      |  138 +
 .../user_doc/guide/installation/hardware.json      |    6 +
 .../user_doc/guide/installation/kubernetes.html    | 1762 +++++++++++
 .../user_doc/guide/installation/kubernetes.json    |    6 +
 .../guide/installation/pseudo-cluster.html         |  198 ++
 .../guide/installation/pseudo-cluster.json         |    6 +
 .../user_doc/guide/installation/standalone.html    |   66 +
 .../user_doc/guide/installation/standalone.json    |    6 +
 en-us/docs/2.0.5/user_doc/guide/introduction.html  |   40 +
 en-us/docs/2.0.5/user_doc/guide/introduction.json  |    6 +
 en-us/docs/2.0.5/user_doc/guide/monitor.html       |   81 +
 en-us/docs/2.0.5/user_doc/guide/monitor.json       |    6 +
 .../guide/observability/skywalking-agent.html      |   86 +
 .../guide/observability/skywalking-agent.json      |    6 +
 en-us/docs/2.0.5/user_doc/guide/open-api.html      |   99 +
 en-us/docs/2.0.5/user_doc/guide/open-api.json      |    6 +
 .../2.0.5/user_doc/guide/parameter/built-in.html   |   88 +
 .../2.0.5/user_doc/guide/parameter/built-in.json   |    6 +
 .../2.0.5/user_doc/guide/parameter/context.html    |   73 +
 .../2.0.5/user_doc/guide/parameter/context.json    |    6 +
 .../2.0.5/user_doc/guide/parameter/global.html     |   50 +
 .../2.0.5/user_doc/guide/parameter/global.json     |    6 +
 .../docs/2.0.5/user_doc/guide/parameter/local.html |   50 +
 .../docs/2.0.5/user_doc/guide/parameter/local.json |    6 +
 .../2.0.5/user_doc/guide/parameter/priority.html   |   64 +
 .../2.0.5/user_doc/guide/parameter/priority.json   |    6 +
 .../2.0.5/user_doc/guide/project/project-list.html |   66 +
 .../2.0.5/user_doc/guide/project/project-list.json |    6 +
 .../user_doc/guide/project/task-instance.html      |   53 +
 .../user_doc/guide/project/task-instance.json      |    6 +
 .../guide/project/workflow-definition.html         |  165 +
 .../guide/project/workflow-definition.json         |    6 +
 .../user_doc/guide/project/workflow-instance.html  |   98 +
 .../user_doc/guide/project/workflow-instance.json  |    6 +
 en-us/docs/2.0.5/user_doc/guide/quick-start.html   |  118 +
 en-us/docs/2.0.5/user_doc/guide/quick-start.json   |    6 +
 en-us/docs/2.0.5/user_doc/guide/resource.html      |  177 ++
 en-us/docs/2.0.5/user_doc/guide/resource.json      |    6 +
 en-us/docs/2.0.5/user_doc/guide/security.html      |  223 ++
 en-us/docs/2.0.5/user_doc/guide/security.json      |    6 +
 .../docs/2.0.5/user_doc/guide/task/conditions.html |   73 +
 .../docs/2.0.5/user_doc/guide/task/conditions.json |    6 +
 en-us/docs/2.0.5/user_doc/guide/task/datax.html    |   74 +
 en-us/docs/2.0.5/user_doc/guide/task/datax.json    |    6 +
 .../docs/2.0.5/user_doc/guide/task/dependent.html  |   65 +
 .../docs/2.0.5/user_doc/guide/task/dependent.json  |    6 +
 en-us/docs/2.0.5/user_doc/guide/task/flink.html    |   89 +
 en-us/docs/2.0.5/user_doc/guide/task/flink.json    |    6 +
 en-us/docs/2.0.5/user_doc/guide/task/http.html     |   61 +
 en-us/docs/2.0.5/user_doc/guide/task/http.json     |    6 +
 .../docs/2.0.5/user_doc/guide/task/map-reduce.html |   95 +
 .../docs/2.0.5/user_doc/guide/task/map-reduce.json |    6 +
 en-us/docs/2.0.5/user_doc/guide/task/pigeon.html   |   54 +
 en-us/docs/2.0.5/user_doc/guide/task/pigeon.json   |    6 +
 en-us/docs/2.0.5/user_doc/guide/task/python.html   |   55 +
 en-us/docs/2.0.5/user_doc/guide/task/python.json   |    6 +
 en-us/docs/2.0.5/user_doc/guide/task/shell.html    |   74 +
 en-us/docs/2.0.5/user_doc/guide/task/shell.json    |    6 +
 en-us/docs/2.0.5/user_doc/guide/task/spark.html    |   86 +
 en-us/docs/2.0.5/user_doc/guide/task/spark.json    |    6 +
 en-us/docs/2.0.5/user_doc/guide/task/sql.html      |   68 +
 en-us/docs/2.0.5/user_doc/guide/task/sql.json      |    6 +
 .../user_doc/guide/task/stored-procedure.html      |   53 +
 .../user_doc/guide/task/stored-procedure.json      |    6 +
 .../2.0.5/user_doc/guide/task/sub-process.html     |   55 +
 .../2.0.5/user_doc/guide/task/sub-process.json     |    6 +
 en-us/docs/2.0.5/user_doc/guide/task/switch.html   |   70 +
 en-us/docs/2.0.5/user_doc/guide/task/switch.json   |    6 +
 en-us/docs/2.0.5/user_doc/guide/upgrade.html       |  108 +
 en-us/docs/2.0.5/user_doc/guide/upgrade.json       |    6 +
 .../About_DolphinScheduler.html                    |   56 +
 .../About_DolphinScheduler.json                    |    6 +
 en-us/docs/dev/user_doc/architecture/cache.html    |   64 +
 en-us/docs/dev/user_doc/architecture/cache.json    |    6 +
 .../dev/user_doc/architecture/configuration.html   | 1012 ++++++
 .../dev/user_doc/architecture/configuration.json   |    6 +
 en-us/docs/dev/user_doc/architecture/design.html   |  352 +++
 en-us/docs/dev/user_doc/architecture/design.json   |    6 +
 .../dev/user_doc/architecture/load-balance.html    |   81 +
 .../dev/user_doc/architecture/load-balance.json    |    6 +
 en-us/docs/dev/user_doc/architecture/metadata.html |  748 +++++
 en-us/docs/dev/user_doc/architecture/metadata.json |    6 +
 .../dev/user_doc/architecture/task-structure.html  | 3292 +++++++++++++++++++
 .../dev/user_doc/architecture/task-structure.json  |    6 +
 .../guide/alert/alert_plugin_user_guide.html       |   46 +
 .../guide/alert/alert_plugin_user_guide.json       |    6 +
 en-us/docs/dev/user_doc/guide/alert/dingtalk.html  |   84 +
 en-us/docs/dev/user_doc/guide/alert/dingtalk.json  |    6 +
 .../guide/alert/enterprise-webexteams.html         |   77 +
 .../guide/alert/enterprise-webexteams.json         |    6 +
 .../user_doc/guide/alert/enterprise-wechat.html    |   46 +
 .../user_doc/guide/alert/enterprise-wechat.json    |    6 +
 en-us/docs/dev/user_doc/guide/alert/telegram.html  |   96 +
 en-us/docs/dev/user_doc/guide/alert/telegram.json  |    6 +
 en-us/docs/dev/user_doc/guide/datasource/hive.html |   76 +
 en-us/docs/dev/user_doc/guide/datasource/hive.json |    6 +
 .../user_doc/guide/datasource/introduction.html    |   44 +
 .../user_doc/guide/datasource/introduction.json    |    6 +
 .../docs/dev/user_doc/guide/datasource/mysql.html  |   53 +
 .../docs/dev/user_doc/guide/datasource/mysql.json  |    6 +
 .../dev/user_doc/guide/datasource/postgresql.html  |   53 +
 .../dev/user_doc/guide/datasource/postgresql.json  |    6 +
 .../docs/dev/user_doc/guide/datasource/spark.html  |   53 +
 .../docs/dev/user_doc/guide/datasource/spark.json  |    6 +
 .../dev/user_doc/guide/expansion-reduction.html    |  253 ++
 .../dev/user_doc/guide/expansion-reduction.json    |    6 +
 en-us/docs/dev/user_doc/guide/flink-call.html      |  135 +
 en-us/docs/dev/user_doc/guide/flink-call.json      |    6 +
 en-us/docs/dev/user_doc/guide/homepage.html        |   42 +
 en-us/docs/dev/user_doc/guide/homepage.json        |    6 +
 .../dev/user_doc/guide/installation/cluster.html   |   63 +
 .../dev/user_doc/guide/installation/cluster.json   |    6 +
 .../dev/user_doc/guide/installation/docker.html    |  920 ++++++
 .../dev/user_doc/guide/installation/docker.json    |    6 +
 .../dev/user_doc/guide/installation/hardware.html  |  138 +
 .../dev/user_doc/guide/installation/hardware.json  |    6 +
 .../user_doc/guide/installation/kubernetes.html    | 1757 +++++++++++
 .../user_doc/guide/installation/kubernetes.json    |    6 +
 .../guide/installation/pseudo-cluster.html         |  206 ++
 .../guide/installation/pseudo-cluster.json         |    6 +
 .../guide/installation/skywalking-agent.html       |   86 +
 .../guide/installation/skywalking-agent.json       |    6 +
 .../user_doc/guide/installation/standalone.html    |   66 +
 .../user_doc/guide/installation/standalone.json    |    6 +
 en-us/docs/dev/user_doc/guide/introduction.html    |   40 +
 en-us/docs/dev/user_doc/guide/introduction.json    |    6 +
 en-us/docs/dev/user_doc/guide/monitor.html         |   81 +
 en-us/docs/dev/user_doc/guide/monitor.json         |    6 +
 en-us/docs/dev/user_doc/guide/open-api.html        |   99 +
 en-us/docs/dev/user_doc/guide/open-api.json        |    6 +
 .../dev/user_doc/guide/parameter/built-in.html     |   87 +
 .../dev/user_doc/guide/parameter/built-in.json     |    6 +
 .../docs/dev/user_doc/guide/parameter/context.html |   73 +
 .../docs/dev/user_doc/guide/parameter/context.json |    6 +
 .../docs/dev/user_doc/guide/parameter/global.html  |   50 +
 .../docs/dev/user_doc/guide/parameter/global.json  |    6 +
 en-us/docs/dev/user_doc/guide/parameter/local.html |   50 +
 en-us/docs/dev/user_doc/guide/parameter/local.json |    6 +
 .../dev/user_doc/guide/parameter/priority.html     |   64 +
 .../dev/user_doc/guide/parameter/priority.json     |    6 +
 .../dev/user_doc/guide/project/project-list.html   |   66 +
 .../dev/user_doc/guide/project/project-list.json   |    6 +
 .../dev/user_doc/guide/project/task-instance.html  |   53 +
 .../dev/user_doc/guide/project/task-instance.json  |    6 +
 .../guide/project/workflow-definition.html         |  165 +
 .../guide/project/workflow-definition.json         |    6 +
 .../user_doc/guide/project/workflow-instance.html  |   98 +
 .../user_doc/guide/project/workflow-instance.json  |    6 +
 en-us/docs/dev/user_doc/guide/quick-start.html     |  116 +
 en-us/docs/dev/user_doc/guide/quick-start.json     |    6 +
 en-us/docs/dev/user_doc/guide/resource.html        |  217 ++
 en-us/docs/dev/user_doc/guide/resource.json        |    6 +
 en-us/docs/dev/user_doc/guide/security.html        |  223 ++
 en-us/docs/dev/user_doc/guide/security.json        |    6 +
 en-us/docs/dev/user_doc/guide/task/conditions.html |   73 +
 en-us/docs/dev/user_doc/guide/task/conditions.json |    6 +
 en-us/docs/dev/user_doc/guide/task/datax.html      |   74 +
 en-us/docs/dev/user_doc/guide/task/datax.json      |    6 +
 en-us/docs/dev/user_doc/guide/task/dependent.html  |   65 +
 en-us/docs/dev/user_doc/guide/task/dependent.json  |    6 +
 en-us/docs/dev/user_doc/guide/task/emr.html        |   92 +
 en-us/docs/dev/user_doc/guide/task/emr.json        |    6 +
 en-us/docs/dev/user_doc/guide/task/flink.html      |   89 +
 en-us/docs/dev/user_doc/guide/task/flink.json      |    6 +
 en-us/docs/dev/user_doc/guide/task/http.html       |   61 +
 en-us/docs/dev/user_doc/guide/task/http.json       |    6 +
 en-us/docs/dev/user_doc/guide/task/map-reduce.html |   95 +
 en-us/docs/dev/user_doc/guide/task/map-reduce.json |    6 +
 en-us/docs/dev/user_doc/guide/task/pigeon.html     |   54 +
 en-us/docs/dev/user_doc/guide/task/pigeon.json     |    6 +
 en-us/docs/dev/user_doc/guide/task/python.html     |   55 +
 en-us/docs/dev/user_doc/guide/task/python.json     |    6 +
 en-us/docs/dev/user_doc/guide/task/shell.html      |   74 +
 en-us/docs/dev/user_doc/guide/task/shell.json      |    6 +
 en-us/docs/dev/user_doc/guide/task/spark.html      |   86 +
 en-us/docs/dev/user_doc/guide/task/spark.json      |    6 +
 en-us/docs/dev/user_doc/guide/task/sql.html        |   68 +
 en-us/docs/dev/user_doc/guide/task/sql.json        |    6 +
 .../dev/user_doc/guide/task/stored-procedure.html  |   53 +
 .../dev/user_doc/guide/task/stored-procedure.json  |    6 +
 .../docs/dev/user_doc/guide/task/sub-process.html  |   55 +
 .../docs/dev/user_doc/guide/task/sub-process.json  |    6 +
 en-us/docs/dev/user_doc/guide/task/switch.html     |   70 +
 en-us/docs/dev/user_doc/guide/task/switch.json     |    6 +
 en-us/docs/dev/user_doc/guide/upgrade.html         |  141 +
 en-us/docs/dev/user_doc/guide/upgrade.json         |    6 +
 .../About_DolphinScheduler.html                    |   56 +
 .../About_DolphinScheduler.json                    |    6 +
 en-us/docs/latest/user_doc/architecture/cache.html |   64 +
 en-us/docs/latest/user_doc/architecture/cache.json |    6 +
 .../user_doc/architecture/configuration.html       | 1017 ++++++
 .../user_doc/architecture/configuration.json       |    6 +
 .../docs/latest/user_doc/architecture/design.html  |  382 +++
 .../docs/latest/user_doc/architecture/design.json  |    6 +
 .../latest/user_doc/architecture/designplus.html   |  107 +
 .../latest/user_doc/architecture/designplus.json   |    6 +
 .../latest/user_doc/architecture/load-balance.html |   73 +
 .../latest/user_doc/architecture/load-balance.json |    6 +
 .../latest/user_doc/architecture/metadata.html     |  666 ++++
 .../latest/user_doc/architecture/metadata.json     |    6 +
 .../user_doc/architecture/task-structure.html      | 3292 +++++++++++++++++++
 .../user_doc/architecture/task-structure.json      |    6 +
 .../guide/alert/alert_plugin_user_guide.html       |   45 +
 .../guide/alert/alert_plugin_user_guide.json       |    6 +
 .../docs/latest/user_doc/guide/alert/dingtalk.html |   83 +
 .../docs/latest/user_doc/guide/alert/dingtalk.json |    6 +
 .../user_doc/guide/alert/enterprise-wechat.html    |   45 +
 .../user_doc/guide/alert/enterprise-wechat.json    |    6 +
 .../latest/user_doc/guide/datasource/hive.html     |   76 +
 .../latest/user_doc/guide/datasource/hive.json     |    6 +
 .../user_doc/guide/datasource/introduction.html    |   44 +
 .../user_doc/guide/datasource/introduction.json    |    6 +
 .../latest/user_doc/guide/datasource/mysql.html    |   53 +
 .../latest/user_doc/guide/datasource/mysql.json    |    6 +
 .../user_doc/guide/datasource/postgresql.html      |   53 +
 .../user_doc/guide/datasource/postgresql.json      |    6 +
 .../latest/user_doc/guide/datasource/spark.html    |   53 +
 .../latest/user_doc/guide/datasource/spark.json    |    6 +
 .../latest/user_doc/guide/expansion-reduction.html |  261 ++
 .../latest/user_doc/guide/expansion-reduction.json |    6 +
 en-us/docs/latest/user_doc/guide/flink-call.html   |  136 +
 en-us/docs/latest/user_doc/guide/flink-call.json   |    6 +
 en-us/docs/latest/user_doc/guide/homepage.html     |   42 +
 en-us/docs/latest/user_doc/guide/homepage.json     |    6 +
 .../user_doc/guide/installation/cluster.html       |   62 +
 .../user_doc/guide/installation/cluster.json       |    6 +
 .../latest/user_doc/guide/installation/docker.html |  933 ++++++
 .../latest/user_doc/guide/installation/docker.json |    6 +
 .../user_doc/guide/installation/hardware.html      |  138 +
 .../user_doc/guide/installation/hardware.json      |    6 +
 .../user_doc/guide/installation/kubernetes.html    | 1762 +++++++++++
 .../user_doc/guide/installation/kubernetes.json    |    6 +
 .../guide/installation/pseudo-cluster.html         |  198 ++
 .../guide/installation/pseudo-cluster.json         |    6 +
 .../user_doc/guide/installation/standalone.html    |   66 +
 .../user_doc/guide/installation/standalone.json    |    6 +
 en-us/docs/latest/user_doc/guide/introduction.html |   40 +
 en-us/docs/latest/user_doc/guide/introduction.json |    6 +
 en-us/docs/latest/user_doc/guide/monitor.html      |   81 +
 en-us/docs/latest/user_doc/guide/monitor.json      |    6 +
 .../guide/observability/skywalking-agent.html      |   86 +
 .../guide/observability/skywalking-agent.json      |    6 +
 en-us/docs/latest/user_doc/guide/open-api.html     |   99 +
 en-us/docs/latest/user_doc/guide/open-api.json     |    6 +
 .../latest/user_doc/guide/parameter/built-in.html  |   88 +
 .../latest/user_doc/guide/parameter/built-in.json  |    6 +
 .../latest/user_doc/guide/parameter/context.html   |   73 +
 .../latest/user_doc/guide/parameter/context.json   |    6 +
 .../latest/user_doc/guide/parameter/global.html    |   50 +
 .../latest/user_doc/guide/parameter/global.json    |    6 +
 .../latest/user_doc/guide/parameter/local.html     |   50 +
 .../latest/user_doc/guide/parameter/local.json     |    6 +
 .../latest/user_doc/guide/parameter/priority.html  |   64 +
 .../latest/user_doc/guide/parameter/priority.json  |    6 +
 .../user_doc/guide/project/project-list.html       |   66 +
 .../user_doc/guide/project/project-list.json       |    6 +
 .../user_doc/guide/project/task-instance.html      |   53 +
 .../user_doc/guide/project/task-instance.json      |    6 +
 .../guide/project/workflow-definition.html         |  165 +
 .../guide/project/workflow-definition.json         |    6 +
 .../user_doc/guide/project/workflow-instance.html  |   98 +
 .../user_doc/guide/project/workflow-instance.json  |    6 +
 en-us/docs/latest/user_doc/guide/quick-start.html  |  118 +
 en-us/docs/latest/user_doc/guide/quick-start.json  |    6 +
 en-us/docs/latest/user_doc/guide/resource.html     |  177 ++
 en-us/docs/latest/user_doc/guide/resource.json     |    6 +
 en-us/docs/latest/user_doc/guide/security.html     |  223 ++
 en-us/docs/latest/user_doc/guide/security.json     |    6 +
 .../latest/user_doc/guide/task/conditions.html     |   73 +
 .../latest/user_doc/guide/task/conditions.json     |    6 +
 en-us/docs/latest/user_doc/guide/task/datax.html   |   74 +
 en-us/docs/latest/user_doc/guide/task/datax.json   |    6 +
 .../docs/latest/user_doc/guide/task/dependent.html |   65 +
 .../docs/latest/user_doc/guide/task/dependent.json |    6 +
 en-us/docs/latest/user_doc/guide/task/flink.html   |   89 +
 en-us/docs/latest/user_doc/guide/task/flink.json   |    6 +
 en-us/docs/latest/user_doc/guide/task/http.html    |   61 +
 en-us/docs/latest/user_doc/guide/task/http.json    |    6 +
 .../latest/user_doc/guide/task/map-reduce.html     |   95 +
 .../latest/user_doc/guide/task/map-reduce.json     |    6 +
 en-us/docs/latest/user_doc/guide/task/pigeon.html  |   54 +
 en-us/docs/latest/user_doc/guide/task/pigeon.json  |    6 +
 en-us/docs/latest/user_doc/guide/task/python.html  |   55 +
 en-us/docs/latest/user_doc/guide/task/python.json  |    6 +
 en-us/docs/latest/user_doc/guide/task/shell.html   |   74 +
 en-us/docs/latest/user_doc/guide/task/shell.json   |    6 +
 en-us/docs/latest/user_doc/guide/task/spark.html   |   86 +
 en-us/docs/latest/user_doc/guide/task/spark.json   |    6 +
 en-us/docs/latest/user_doc/guide/task/sql.html     |   68 +
 en-us/docs/latest/user_doc/guide/task/sql.json     |    6 +
 .../user_doc/guide/task/stored-procedure.html      |   53 +
 .../user_doc/guide/task/stored-procedure.json      |    6 +
 .../latest/user_doc/guide/task/sub-process.html    |   55 +
 .../latest/user_doc/guide/task/sub-process.json    |    6 +
 en-us/docs/latest/user_doc/guide/task/switch.html  |   70 +
 en-us/docs/latest/user_doc/guide/task/switch.json  |    6 +
 en-us/docs/latest/user_doc/guide/upgrade.html      |  108 +
 en-us/docs/latest/user_doc/guide/upgrade.json      |    6 +
 en-us/docs/release/faq.html                        |  538 ++++
 en-us/docs/release/faq.json                        |    6 +
 en-us/docs/release/history-versions.html           |   74 +
 en-us/docs/release/history-versions.json           |    6 +
 en-us/download/download.html                       |  265 ++
 en-us/download/download.json                       |    6 +
 en-us/download/download_ppt.html                   |  126 +
 en-us/download/download_ppt.json                   |    6 +
 zh-cn/blog/Apache-DolphinScheduler-2.0.1.html      |  207 ++
 zh-cn/blog/Apache-DolphinScheduler-2.0.1.json      |    6 +
 zh-cn/blog/Apache_dolphinScheduler_2.0.2.html      |  122 +
 zh-cn/blog/Apache_dolphinScheduler_2.0.2.json      |    6 +
 zh-cn/blog/Apache_dolphinScheduler_2.0.3.html      |  117 +
 zh-cn/blog/Apache_dolphinScheduler_2.0.3.json      |    6 +
 .../blog/Awarded_most_popular_project_in_2021.html |   83 +
 .../blog/Awarded_most_popular_project_in_2021.json |    6 +
 zh-cn/blog/Board_of_Directors_Report.html          |  116 +
 zh-cn/blog/Board_of_Directors_Report.json          |    6 +
 zh-cn/blog/DAG.html                                |  221 ++
 zh-cn/blog/DAG.json                                |    6 +
 zh-cn/blog/DS-2.0-alpha-release.html               |   92 +
 zh-cn/blog/DS-2.0-alpha-release.json               |    6 +
 zh-cn/blog/DS_architecture_evolution.html          |  142 +
 zh-cn/blog/DS_architecture_evolution.json          |    6 +
 zh-cn/blog/DS_run_in_windows.html                  |  155 +
 zh-cn/blog/DS_run_in_windows.json                  |    6 +
 ...nScheduler_Kubernetes_Technology_in_action.html |  446 +++
 ...nScheduler_Kubernetes_Technology_in_action.json |    6 +
 ...3\205\345\206\265\350\257\264\346\230\216.html" |   61 +
 ...3\205\345\206\265\350\257\264\346\230\216.json" |    6 +
 zh-cn/blog/Eavy_Info.html                          |  110 +
 zh-cn/blog/Eavy_Info.json                          |    6 +
 zh-cn/blog/Lizhi-case-study.html                   |  111 +
 zh-cn/blog/Lizhi-case-study.json                   |    6 +
 zh-cn/blog/Meetup_2022_02_26.html                  |   89 +
 zh-cn/blog/Meetup_2022_02_26.json                  |    6 +
 zh-cn/blog/Twos.html                               |   66 +
 zh-cn/blog/Twos.json                               |    6 +
 zh-cn/blog/YouZan-case-study.html                  |  177 ++
 zh-cn/blog/YouZan-case-study.json                  |    6 +
 zh-cn/blog/about_blocking_task.html                |  155 +
 zh-cn/blog/about_blocking_task.json                |    6 +
 zh-cn/blog/architecture-design.html                |  328 ++
 zh-cn/blog/architecture-design.json                |    6 +
 zh-cn/blog/cicd_workflow.html                      |  267 ++
 zh-cn/blog/cicd_workflow.json                      |    6 +
 zh-cn/blog/dolphinscheduler_json.html              | 1052 +++++++
 zh-cn/blog/dolphinscheduler_json.json              |    6 +
 zh-cn/blog/ipalfish_tech_platform.html             |  234 ++
 zh-cn/blog/ipalfish_tech_platform.json             |    6 +
 zh-cn/blog/json_split.html                         |  132 +
 zh-cn/blog/json_split.json                         |    6 +
 zh-cn/blog/live_online_2020_05_26.html             |   59 +
 zh-cn/blog/live_online_2020_05_26.json             |    6 +
 zh-cn/blog/meetup_2019_10_26.html                  |   52 +
 zh-cn/blog/meetup_2019_10_26.json                  |    6 +
 zh-cn/blog/meetup_2019_12_08.html                  |   63 +
 zh-cn/blog/meetup_2019_12_08.json                  |    6 +
 zh-cn/blog/new_committer_wenjun.html               |   59 +
 zh-cn/blog/new_committer_wenjun.json               |    6 +
 zh-cn/blog/ut-guideline.html                       |  420 +++
 zh-cn/blog/ut-guideline.json                       |    6 +
 zh-cn/blog/ut-template.html                        |  445 +++
 zh-cn/blog/ut-template.json                        |    6 +
 zh-cn/community/DSIP.html                          |  101 +
 zh-cn/community/DSIP.json                          |    6 +
 zh-cn/community/development/DS-License.html        |  126 +
 zh-cn/community/development/DS-License.json        |    6 +
 .../community/development/become-a-committer.html  |   45 +
 .../community/development/become-a-committer.json  |    6 +
 zh-cn/community/development/code-conduct.html      |  137 +
 zh-cn/community/development/code-conduct.json      |    6 +
 zh-cn/community/development/commit-message.html    |  102 +
 zh-cn/community/development/commit-message.json    |    6 +
 zh-cn/community/development/contribute.html        |   71 +
 zh-cn/community/development/contribute.json        |    6 +
 zh-cn/community/development/document.html          |  103 +
 zh-cn/community/development/document.json          |    6 +
 zh-cn/community/development/issue.html             |  233 ++
 zh-cn/community/development/issue.json             |    6 +
 zh-cn/community/development/microbench.html        |  121 +
 zh-cn/community/development/microbench.json        |    6 +
 zh-cn/community/development/pull-request.html      |  118 +
 zh-cn/community/development/pull-request.json      |    6 +
 zh-cn/community/development/submit-code.html       |  122 +
 zh-cn/community/development/submit-code.json       |    6 +
 zh-cn/community/development/subscribe.html         |   67 +
 zh-cn/community/development/subscribe.json         |    6 +
 zh-cn/community/development/unit-test.html         |  120 +
 zh-cn/community/development/unit-test.json         |    6 +
 zh-cn/community/join/e2e-guide.html                |   63 +
 zh-cn/community/join/e2e-guide.json                |    6 +
 zh-cn/community/join/review.html                   |  250 ++
 zh-cn/community/join/review.json                   |    6 +
 zh-cn/community/release-post.html                  |   84 +
 zh-cn/community/release-post.json                  |    6 +
 zh-cn/community/release-prepare.html               |   72 +
 zh-cn/community/release-prepare.json               |    6 +
 zh-cn/community/release.html                       |  393 +++
 zh-cn/community/release.json                       |    6 +
 zh-cn/community/security.html                      |   42 +
 zh-cn/community/security.json                      |    6 +
 zh-cn/community/team.html                          |  271 ++
 zh-cn/community/team.json                          |    6 +
 zh-cn/development/api-standard.html                |  123 +
 zh-cn/development/api-standard.json                |    6 +
 zh-cn/development/architecture-design.html         |  322 ++
 zh-cn/development/architecture-design.json         |    6 +
 .../backend/mechanism/global-parameter.html        |   83 +
 .../backend/mechanism/global-parameter.json        |    6 +
 zh-cn/development/backend/mechanism/overview.html  |   44 +
 zh-cn/development/backend/mechanism/overview.json  |    6 +
 .../development/backend/mechanism/task/switch.html |   46 +
 .../development/backend/mechanism/task/switch.json |    6 +
 zh-cn/development/backend/spi/alert.html           |   93 +
 zh-cn/development/backend/spi/alert.json           |    6 +
 zh-cn/development/backend/spi/datasource.html      |   53 +
 zh-cn/development/backend/spi/datasource.json      |    6 +
 zh-cn/development/backend/spi/registry.html        |   56 +
 zh-cn/development/backend/spi/registry.json        |    6 +
 zh-cn/development/backend/spi/task.html            |   46 +
 zh-cn/development/backend/spi/task.json            |    6 +
 .../development/development-environment-setup.html |  168 +
 .../development/development-environment-setup.json |    6 +
 zh-cn/development/e2e-test.html                    |  186 ++
 zh-cn/development/e2e-test.json                    |    6 +
 zh-cn/development/frontend-development.html        |  538 ++++
 zh-cn/development/frontend-development.json        |    6 +
 zh-cn/development/have-questions.html              |   98 +
 zh-cn/development/have-questions.json              |    6 +
 zh-cn/docs/1.2.0/user_doc/backend-deployment.html  |  269 ++
 zh-cn/docs/1.2.0/user_doc/backend-deployment.json  |    6 +
 zh-cn/docs/1.2.0/user_doc/cluster-deployment.html  |  495 +++
 zh-cn/docs/1.2.0/user_doc/cluster-deployment.json  |    6 +
 zh-cn/docs/1.2.0/user_doc/deployparam.html         |  459 +++
 zh-cn/docs/1.2.0/user_doc/deployparam.json         |    6 +
 zh-cn/docs/1.2.0/user_doc/frontend-deployment.html |  135 +
 zh-cn/docs/1.2.0/user_doc/frontend-deployment.json |    6 +
 .../docs/1.2.0/user_doc/hardware-environment.html  |  143 +
 .../docs/1.2.0/user_doc/hardware-environment.json  |    6 +
 .../1.2.0/user_doc/masterserver-code-analysis.html |  394 +++
 .../1.2.0/user_doc/masterserver-code-analysis.json |    6 +
 zh-cn/docs/1.2.0/user_doc/metadata-1.2.html        |  748 +++++
 zh-cn/docs/1.2.0/user_doc/metadata-1.2.json        |    6 +
 zh-cn/docs/1.2.0/user_doc/quick-start.html         |  108 +
 zh-cn/docs/1.2.0/user_doc/quick-start.json         |    6 +
 .../docs/1.2.0/user_doc/standalone-deployment.html |  452 +++
 .../docs/1.2.0/user_doc/standalone-deployment.json |    6 +
 zh-cn/docs/1.2.0/user_doc/system-manual.html       |  989 ++++++
 zh-cn/docs/1.2.0/user_doc/system-manual.json       |    6 +
 zh-cn/docs/1.2.0/user_doc/upgrade.html             |   76 +
 zh-cn/docs/1.2.0/user_doc/upgrade.json             |    6 +
 zh-cn/docs/1.2.1/user_doc/architecture-design.html |  327 ++
 zh-cn/docs/1.2.1/user_doc/architecture-design.json |    6 +
 zh-cn/docs/1.2.1/user_doc/backend-deployment.html  |  269 ++
 zh-cn/docs/1.2.1/user_doc/backend-deployment.json  |    6 +
 zh-cn/docs/1.2.1/user_doc/cluster-deployment.html  |  385 +++
 zh-cn/docs/1.2.1/user_doc/cluster-deployment.json  |    6 +
 zh-cn/docs/1.2.1/user_doc/deployparam.html         |  323 ++
 zh-cn/docs/1.2.1/user_doc/deployparam.json         |    6 +
 zh-cn/docs/1.2.1/user_doc/frontend-deployment.html |  135 +
 zh-cn/docs/1.2.1/user_doc/frontend-deployment.json |    6 +
 .../docs/1.2.1/user_doc/hardware-environment.html  |  143 +
 .../docs/1.2.1/user_doc/hardware-environment.json  |    6 +
 zh-cn/docs/1.2.1/user_doc/metadata-1.2.html        |  748 +++++
 zh-cn/docs/1.2.1/user_doc/metadata-1.2.json        |    6 +
 zh-cn/docs/1.2.1/user_doc/microbench.html          |  121 +
 zh-cn/docs/1.2.1/user_doc/microbench.json          |    6 +
 zh-cn/docs/1.2.1/user_doc/plugin-development.html  |   92 +
 zh-cn/docs/1.2.1/user_doc/plugin-development.json  |    6 +
 zh-cn/docs/1.2.1/user_doc/quick-start.html         |  108 +
 zh-cn/docs/1.2.1/user_doc/quick-start.json         |    6 +
 .../docs/1.2.1/user_doc/standalone-deployment.html |  452 +++
 .../docs/1.2.1/user_doc/standalone-deployment.json |    6 +
 zh-cn/docs/1.2.1/user_doc/system-manual.html       |  989 ++++++
 zh-cn/docs/1.2.1/user_doc/system-manual.json       |    6 +
 zh-cn/docs/1.2.1/user_doc/upgrade.html             |   76 +
 zh-cn/docs/1.2.1/user_doc/upgrade.json             |    6 +
 zh-cn/docs/1.3.1/user_doc/architecture-design.html |  364 +++
 zh-cn/docs/1.3.1/user_doc/architecture-design.json |    6 +
 zh-cn/docs/1.3.1/user_doc/cluster-deployment.html  |  454 +++
 zh-cn/docs/1.3.1/user_doc/cluster-deployment.json  |    6 +
 zh-cn/docs/1.3.1/user_doc/configuration-file.html  | 1010 ++++++
 zh-cn/docs/1.3.1/user_doc/configuration-file.json  |    6 +
 .../docs/1.3.1/user_doc/hardware-environment.html  |  138 +
 .../docs/1.3.1/user_doc/hardware-environment.json  |    6 +
 zh-cn/docs/1.3.1/user_doc/metadata-1.3.html        |  754 +++++
 zh-cn/docs/1.3.1/user_doc/metadata-1.3.json        |    6 +
 zh-cn/docs/1.3.1/user_doc/quick-start.html         |  107 +
 zh-cn/docs/1.3.1/user_doc/quick-start.json         |    6 +
 .../docs/1.3.1/user_doc/standalone-deployment.html |  345 ++
 .../docs/1.3.1/user_doc/standalone-deployment.json |    6 +
 zh-cn/docs/1.3.1/user_doc/system-manual.html       |  995 ++++++
 zh-cn/docs/1.3.1/user_doc/system-manual.json       |    6 +
 zh-cn/docs/1.3.1/user_doc/task-structure.html      | 3293 ++++++++++++++++++++
 zh-cn/docs/1.3.1/user_doc/task-structure.json      |    6 +
 zh-cn/docs/1.3.1/user_doc/upgrade.html             |  133 +
 zh-cn/docs/1.3.1/user_doc/upgrade.json             |    6 +
 zh-cn/docs/1.3.2/user_doc/architecture-design.html |  364 +++
 zh-cn/docs/1.3.2/user_doc/architecture-design.json |    6 +
 zh-cn/docs/1.3.2/user_doc/cluster-deployment.html  |  454 +++
 zh-cn/docs/1.3.2/user_doc/cluster-deployment.json  |    6 +
 zh-cn/docs/1.3.2/user_doc/configuration-file.html  | 1010 ++++++
 zh-cn/docs/1.3.2/user_doc/configuration-file.json  |    6 +
 zh-cn/docs/1.3.2/user_doc/expansion-reduction.html |  276 ++
 zh-cn/docs/1.3.2/user_doc/expansion-reduction.json |    6 +
 .../docs/1.3.2/user_doc/hardware-environment.html  |  138 +
 .../docs/1.3.2/user_doc/hardware-environment.json  |    6 +
 zh-cn/docs/1.3.2/user_doc/metadata-1.3.html        |  754 +++++
 zh-cn/docs/1.3.2/user_doc/metadata-1.3.json        |    6 +
 zh-cn/docs/1.3.2/user_doc/quick-start.html         |  107 +
 zh-cn/docs/1.3.2/user_doc/quick-start.json         |    6 +
 .../docs/1.3.2/user_doc/standalone-deployment.html |  345 ++
 .../docs/1.3.2/user_doc/standalone-deployment.json |    6 +
 zh-cn/docs/1.3.2/user_doc/system-manual.html       | 1003 ++++++
 zh-cn/docs/1.3.2/user_doc/system-manual.json       |    6 +
 zh-cn/docs/1.3.2/user_doc/task-structure.html      | 3293 ++++++++++++++++++++
 zh-cn/docs/1.3.2/user_doc/task-structure.json      |    6 +
 zh-cn/docs/1.3.2/user_doc/upgrade.html             |  137 +
 zh-cn/docs/1.3.2/user_doc/upgrade.json             |    6 +
 zh-cn/docs/1.3.3/user_doc/architecture-design.html |  364 +++
 zh-cn/docs/1.3.3/user_doc/architecture-design.json |    6 +
 zh-cn/docs/1.3.3/user_doc/cluster-deployment.html  |  462 +++
 zh-cn/docs/1.3.3/user_doc/cluster-deployment.json  |    6 +
 zh-cn/docs/1.3.3/user_doc/configuration-file.html  | 1010 ++++++
 zh-cn/docs/1.3.3/user_doc/configuration-file.json  |    6 +
 zh-cn/docs/1.3.3/user_doc/expansion-reduction.html |  263 ++
 zh-cn/docs/1.3.3/user_doc/expansion-reduction.json |    6 +
 .../docs/1.3.3/user_doc/hardware-environment.html  |  138 +
 .../docs/1.3.3/user_doc/hardware-environment.json  |    6 +
 zh-cn/docs/1.3.3/user_doc/metadata-1.3.html        |  754 +++++
 zh-cn/docs/1.3.3/user_doc/metadata-1.3.json        |    6 +
 zh-cn/docs/1.3.3/user_doc/quick-start.html         |  108 +
 zh-cn/docs/1.3.3/user_doc/quick-start.json         |    6 +
 .../docs/1.3.3/user_doc/standalone-deployment.html |  357 +++
 .../docs/1.3.3/user_doc/standalone-deployment.json |    6 +
 zh-cn/docs/1.3.3/user_doc/system-manual.html       | 1009 ++++++
 zh-cn/docs/1.3.3/user_doc/system-manual.json       |    6 +
 zh-cn/docs/1.3.3/user_doc/task-structure.html      | 3293 ++++++++++++++++++++
 zh-cn/docs/1.3.3/user_doc/task-structure.json      |    6 +
 zh-cn/docs/1.3.3/user_doc/upgrade.html             |  137 +
 zh-cn/docs/1.3.3/user_doc/upgrade.json             |    6 +
 zh-cn/docs/1.3.4/user_doc/architecture-design.html |  364 +++
 zh-cn/docs/1.3.4/user_doc/architecture-design.json |    6 +
 zh-cn/docs/1.3.4/user_doc/cluster-deployment.html  |  462 +++
 zh-cn/docs/1.3.4/user_doc/cluster-deployment.json  |    6 +
 zh-cn/docs/1.3.4/user_doc/configuration-file.html  | 1010 ++++++
 zh-cn/docs/1.3.4/user_doc/configuration-file.json  |    6 +
 zh-cn/docs/1.3.4/user_doc/docker-deployment.html   |  145 +
 zh-cn/docs/1.3.4/user_doc/docker-deployment.json   |    6 +
 zh-cn/docs/1.3.4/user_doc/expansion-reduction.html |  263 ++
 zh-cn/docs/1.3.4/user_doc/expansion-reduction.json |    6 +
 .../docs/1.3.4/user_doc/hardware-environment.html  |  138 +
 .../docs/1.3.4/user_doc/hardware-environment.json  |    6 +
 zh-cn/docs/1.3.4/user_doc/load-balance.html        |   73 +
 zh-cn/docs/1.3.4/user_doc/load-balance.json        |    6 +
 zh-cn/docs/1.3.4/user_doc/metadata-1.3.html        |  754 +++++
 zh-cn/docs/1.3.4/user_doc/metadata-1.3.json        |    6 +
 zh-cn/docs/1.3.4/user_doc/quick-start.html         |  108 +
 zh-cn/docs/1.3.4/user_doc/quick-start.json         |    6 +
 .../docs/1.3.4/user_doc/standalone-deployment.html |  345 ++
 .../docs/1.3.4/user_doc/standalone-deployment.json |    6 +
 zh-cn/docs/1.3.4/user_doc/system-manual.html       | 1004 ++++++
 zh-cn/docs/1.3.4/user_doc/system-manual.json       |    6 +
 zh-cn/docs/1.3.4/user_doc/task-structure.html      | 3292 +++++++++++++++++++
 zh-cn/docs/1.3.4/user_doc/task-structure.json      |    6 +
 zh-cn/docs/1.3.4/user_doc/upgrade.html             |  137 +
 zh-cn/docs/1.3.4/user_doc/upgrade.json             |    6 +
 zh-cn/docs/1.3.5/user_doc/architecture-design.html |  364 +++
 zh-cn/docs/1.3.5/user_doc/architecture-design.json |    6 +
 zh-cn/docs/1.3.5/user_doc/cluster-deployment.html  |  462 +++
 zh-cn/docs/1.3.5/user_doc/cluster-deployment.json  |    6 +
 zh-cn/docs/1.3.5/user_doc/configuration-file.html  | 1010 ++++++
 zh-cn/docs/1.3.5/user_doc/configuration-file.json  |    6 +
 zh-cn/docs/1.3.5/user_doc/docker-deployment.html   |  352 +++
 zh-cn/docs/1.3.5/user_doc/docker-deployment.json   |    6 +
 zh-cn/docs/1.3.5/user_doc/expansion-reduction.html |  263 ++
 zh-cn/docs/1.3.5/user_doc/expansion-reduction.json |    6 +
 .../docs/1.3.5/user_doc/hardware-environment.html  |  138 +
 .../docs/1.3.5/user_doc/hardware-environment.json  |    6 +
 .../docs/1.3.5/user_doc/kubernetes-deployment.html |  197 ++
 .../docs/1.3.5/user_doc/kubernetes-deployment.json |    6 +
 zh-cn/docs/1.3.5/user_doc/load-balance.html        |   73 +
 zh-cn/docs/1.3.5/user_doc/load-balance.json        |    6 +
 zh-cn/docs/1.3.5/user_doc/metadata-1.3.html        |  754 +++++
 zh-cn/docs/1.3.5/user_doc/metadata-1.3.json        |    6 +
 zh-cn/docs/1.3.5/user_doc/open-api.html            |   82 +
 zh-cn/docs/1.3.5/user_doc/open-api.json            |    6 +
 zh-cn/docs/1.3.5/user_doc/quick-start.html         |  109 +
 zh-cn/docs/1.3.5/user_doc/quick-start.json         |    6 +
 .../docs/1.3.5/user_doc/standalone-deployment.html |  345 ++
 .../docs/1.3.5/user_doc/standalone-deployment.json |    6 +
 zh-cn/docs/1.3.5/user_doc/system-manual.html       | 1008 ++++++
 zh-cn/docs/1.3.5/user_doc/system-manual.json       |    6 +
 zh-cn/docs/1.3.5/user_doc/task-structure.html      | 3292 +++++++++++++++++++
 zh-cn/docs/1.3.5/user_doc/task-structure.json      |    6 +
 zh-cn/docs/1.3.5/user_doc/upgrade.html             |  137 +
 zh-cn/docs/1.3.5/user_doc/upgrade.json             |    6 +
 zh-cn/docs/1.3.6/user_doc/architecture-design.html |  364 +++
 zh-cn/docs/1.3.6/user_doc/architecture-design.json |    6 +
 zh-cn/docs/1.3.6/user_doc/cluster-deployment.html  |  458 +++
 zh-cn/docs/1.3.6/user_doc/cluster-deployment.json  |    6 +
 zh-cn/docs/1.3.6/user_doc/configuration-file.html  | 1010 ++++++
 zh-cn/docs/1.3.6/user_doc/configuration-file.json  |    6 +
 zh-cn/docs/1.3.6/user_doc/docker-deployment.html   |  914 ++++++
 zh-cn/docs/1.3.6/user_doc/docker-deployment.json   |    6 +
 zh-cn/docs/1.3.6/user_doc/expansion-reduction.html |  263 ++
 zh-cn/docs/1.3.6/user_doc/expansion-reduction.json |    6 +
 zh-cn/docs/1.3.6/user_doc/flink-call.html          |  135 +
 zh-cn/docs/1.3.6/user_doc/flink-call.json          |    6 +
 .../docs/1.3.6/user_doc/hardware-environment.html  |  138 +
 .../docs/1.3.6/user_doc/hardware-environment.json  |    6 +
 .../docs/1.3.6/user_doc/kubernetes-deployment.html | 1760 +++++++++++
 .../docs/1.3.6/user_doc/kubernetes-deployment.json |    6 +
 zh-cn/docs/1.3.6/user_doc/load-balance.html        |   73 +
 zh-cn/docs/1.3.6/user_doc/load-balance.json        |    6 +
 zh-cn/docs/1.3.6/user_doc/metadata-1.3.html        |  754 +++++
 zh-cn/docs/1.3.6/user_doc/metadata-1.3.json        |    6 +
 zh-cn/docs/1.3.6/user_doc/open-api.html            |  102 +
 zh-cn/docs/1.3.6/user_doc/open-api.json            |    6 +
 zh-cn/docs/1.3.6/user_doc/quick-start.html         |  114 +
 zh-cn/docs/1.3.6/user_doc/quick-start.json         |    6 +
 .../user_doc/skywalking-agent-deployment.html      |   86 +
 .../user_doc/skywalking-agent-deployment.json      |    6 +
 .../docs/1.3.6/user_doc/standalone-deployment.html |  340 ++
 .../docs/1.3.6/user_doc/standalone-deployment.json |    6 +
 zh-cn/docs/1.3.6/user_doc/system-manual.html       | 1004 ++++++
 zh-cn/docs/1.3.6/user_doc/system-manual.json       |    6 +
 zh-cn/docs/1.3.6/user_doc/task-structure.html      | 3292 +++++++++++++++++++
 zh-cn/docs/1.3.6/user_doc/task-structure.json      |    6 +
 zh-cn/docs/1.3.6/user_doc/upgrade.html             |  137 +
 zh-cn/docs/1.3.6/user_doc/upgrade.json             |    6 +
 zh-cn/docs/1.3.8/user_doc/architecture-design.html |  364 +++
 zh-cn/docs/1.3.8/user_doc/architecture-design.json |    6 +
 zh-cn/docs/1.3.8/user_doc/cluster-deployment.html  |  458 +++
 zh-cn/docs/1.3.8/user_doc/cluster-deployment.json  |    6 +
 zh-cn/docs/1.3.8/user_doc/configuration-file.html  | 1010 ++++++
 zh-cn/docs/1.3.8/user_doc/configuration-file.json  |    6 +
 zh-cn/docs/1.3.8/user_doc/docker-deployment.html   |  924 ++++++
 zh-cn/docs/1.3.8/user_doc/docker-deployment.json   |    6 +
 zh-cn/docs/1.3.8/user_doc/expansion-reduction.html |  264 ++
 zh-cn/docs/1.3.8/user_doc/expansion-reduction.json |    6 +
 zh-cn/docs/1.3.8/user_doc/flink-call.html          |  135 +
 zh-cn/docs/1.3.8/user_doc/flink-call.json          |    6 +
 .../docs/1.3.8/user_doc/hardware-environment.html  |  138 +
 .../docs/1.3.8/user_doc/hardware-environment.json  |    6 +
 .../docs/1.3.8/user_doc/kubernetes-deployment.html | 1760 +++++++++++
 .../docs/1.3.8/user_doc/kubernetes-deployment.json |    6 +
 zh-cn/docs/1.3.8/user_doc/load-balance.html        |   73 +
 zh-cn/docs/1.3.8/user_doc/load-balance.json        |    6 +
 zh-cn/docs/1.3.8/user_doc/metadata-1.3.html        |  754 +++++
 zh-cn/docs/1.3.8/user_doc/metadata-1.3.json        |    6 +
 zh-cn/docs/1.3.8/user_doc/open-api.html            |  102 +
 zh-cn/docs/1.3.8/user_doc/open-api.json            |    6 +
 .../1.3.8/user_doc/parameters-introduction.html    |  114 +
 .../1.3.8/user_doc/parameters-introduction.json    |    6 +
 zh-cn/docs/1.3.8/user_doc/quick-start.html         |  114 +
 zh-cn/docs/1.3.8/user_doc/quick-start.json         |    6 +
 .../user_doc/skywalking-agent-deployment.html      |   86 +
 .../user_doc/skywalking-agent-deployment.json      |    6 +
 .../docs/1.3.8/user_doc/standalone-deployment.html |  340 ++
 .../docs/1.3.8/user_doc/standalone-deployment.json |    6 +
 zh-cn/docs/1.3.8/user_doc/system-manual.html       | 1010 ++++++
 zh-cn/docs/1.3.8/user_doc/system-manual.json       |    6 +
 zh-cn/docs/1.3.8/user_doc/task-structure.html      | 3292 +++++++++++++++++++
 zh-cn/docs/1.3.8/user_doc/task-structure.json      |    6 +
 zh-cn/docs/1.3.8/user_doc/upgrade.html             |  137 +
 zh-cn/docs/1.3.8/user_doc/upgrade.json             |    6 +
 zh-cn/docs/1.3.9/user_doc/architecture-design.html |  364 +++
 zh-cn/docs/1.3.9/user_doc/architecture-design.json |    6 +
 zh-cn/docs/1.3.9/user_doc/cluster-deployment.html  |  458 +++
 zh-cn/docs/1.3.9/user_doc/cluster-deployment.json  |    6 +
 zh-cn/docs/1.3.9/user_doc/configuration-file.html  | 1010 ++++++
 zh-cn/docs/1.3.9/user_doc/configuration-file.json  |    6 +
 zh-cn/docs/1.3.9/user_doc/docker-deployment.html   |  924 ++++++
 zh-cn/docs/1.3.9/user_doc/docker-deployment.json   |    6 +
 zh-cn/docs/1.3.9/user_doc/expansion-reduction.html |  263 ++
 zh-cn/docs/1.3.9/user_doc/expansion-reduction.json |    6 +
 zh-cn/docs/1.3.9/user_doc/flink-call.html          |  135 +
 zh-cn/docs/1.3.9/user_doc/flink-call.json          |    6 +
 .../docs/1.3.9/user_doc/hardware-environment.html  |  138 +
 .../docs/1.3.9/user_doc/hardware-environment.json  |    6 +
 .../docs/1.3.9/user_doc/kubernetes-deployment.html | 1760 +++++++++++
 .../docs/1.3.9/user_doc/kubernetes-deployment.json |    6 +
 zh-cn/docs/1.3.9/user_doc/load-balance.html        |   73 +
 zh-cn/docs/1.3.9/user_doc/load-balance.json        |    6 +
 zh-cn/docs/1.3.9/user_doc/metadata-1.3.html        |  754 +++++
 zh-cn/docs/1.3.9/user_doc/metadata-1.3.json        |    6 +
 zh-cn/docs/1.3.9/user_doc/open-api.html            |  102 +
 zh-cn/docs/1.3.9/user_doc/open-api.json            |    6 +
 .../1.3.9/user_doc/parameters-introduction.html    |  114 +
 .../1.3.9/user_doc/parameters-introduction.json    |    6 +
 zh-cn/docs/1.3.9/user_doc/quick-start.html         |  114 +
 zh-cn/docs/1.3.9/user_doc/quick-start.json         |    6 +
 .../user_doc/skywalking-agent-deployment.html      |   86 +
 .../user_doc/skywalking-agent-deployment.json      |    6 +
 .../docs/1.3.9/user_doc/standalone-deployment.html |  342 ++
 .../docs/1.3.9/user_doc/standalone-deployment.json |    6 +
 zh-cn/docs/1.3.9/user_doc/standalone-server.html   |   71 +
 zh-cn/docs/1.3.9/user_doc/standalone-server.json   |    6 +
 zh-cn/docs/1.3.9/user_doc/system-manual.html       | 1004 ++++++
 zh-cn/docs/1.3.9/user_doc/system-manual.json       |    6 +
 zh-cn/docs/1.3.9/user_doc/task-structure.html      | 3292 +++++++++++++++++++
 zh-cn/docs/1.3.9/user_doc/task-structure.json      |    6 +
 zh-cn/docs/1.3.9/user_doc/upgrade.html             |  137 +
 zh-cn/docs/1.3.9/user_doc/upgrade.json             |    6 +
 .../About_DolphinScheduler.html                    |   48 +
 .../About_DolphinScheduler.json                    |    6 +
 .../2.0.0/user_doc/architecture/configuration.html | 1015 ++++++
 .../2.0.0/user_doc/architecture/configuration.json |    6 +
 zh-cn/docs/2.0.0/user_doc/architecture/design.html |  302 ++
 zh-cn/docs/2.0.0/user_doc/architecture/design.json |    6 +
 .../2.0.0/user_doc/architecture/designplus.html    |   88 +
 .../2.0.0/user_doc/architecture/designplus.json    |    6 +
 .../2.0.0/user_doc/architecture/load-balance.html  |   73 +
 .../2.0.0/user_doc/architecture/load-balance.json  |    6 +
 .../docs/2.0.0/user_doc/architecture/metadata.html |  754 +++++
 .../docs/2.0.0/user_doc/architecture/metadata.json |    6 +
 .../user_doc/architecture/task-structure.html      | 3292 +++++++++++++++++++
 .../user_doc/architecture/task-structure.json      |    6 +
 .../guide/alert/alert_plugin_user_guide.html       |   45 +
 .../guide/alert/alert_plugin_user_guide.json       |    6 +
 .../user_doc/guide/alert/enterprise-wechat.html    |   64 +
 .../user_doc/guide/alert/enterprise-wechat.json    |    6 +
 .../docs/2.0.0/user_doc/guide/datasource/hive.html |   62 +
 .../docs/2.0.0/user_doc/guide/datasource/hive.json |    6 +
 .../user_doc/guide/datasource/introduction.html    |   44 +
 .../user_doc/guide/datasource/introduction.json    |    6 +
 .../2.0.0/user_doc/guide/datasource/mysql.html     |   52 +
 .../2.0.0/user_doc/guide/datasource/mysql.json     |    6 +
 .../user_doc/guide/datasource/postgresql.html      |   52 +
 .../user_doc/guide/datasource/postgresql.json      |    6 +
 .../2.0.0/user_doc/guide/datasource/spark.html     |   57 +
 .../2.0.0/user_doc/guide/datasource/spark.json     |    6 +
 .../2.0.0/user_doc/guide/expansion-reduction.html  |  263 ++
 .../2.0.0/user_doc/guide/expansion-reduction.json  |    6 +
 zh-cn/docs/2.0.0/user_doc/guide/flink-call.html    |  135 +
 zh-cn/docs/2.0.0/user_doc/guide/flink-call.json    |    6 +
 zh-cn/docs/2.0.0/user_doc/guide/homepage.html      |   42 +
 zh-cn/docs/2.0.0/user_doc/guide/homepage.json      |    6 +
 .../2.0.0/user_doc/guide/installation/cluster.html |   61 +
 .../2.0.0/user_doc/guide/installation/cluster.json |    6 +
 .../2.0.0/user_doc/guide/installation/docker.html  |  924 ++++++
 .../2.0.0/user_doc/guide/installation/docker.json  |    6 +
 .../user_doc/guide/installation/hardware.html      |  138 +
 .../user_doc/guide/installation/hardware.json      |    6 +
 .../user_doc/guide/installation/kubernetes.html    | 1758 +++++++++++
 .../user_doc/guide/installation/kubernetes.json    |    6 +
 .../guide/installation/pseudo-cluster.html         |  210 ++
 .../guide/installation/pseudo-cluster.json         |    6 +
 .../user_doc/guide/installation/standalone.html    |   66 +
 .../user_doc/guide/installation/standalone.json    |    6 +
 zh-cn/docs/2.0.0/user_doc/guide/introduction.html  |   40 +
 zh-cn/docs/2.0.0/user_doc/guide/introduction.json  |    6 +
 zh-cn/docs/2.0.0/user_doc/guide/monitor.html       |   81 +
 zh-cn/docs/2.0.0/user_doc/guide/monitor.json       |    6 +
 .../guide/observability/skywalking-agent.html      |   86 +
 .../guide/observability/skywalking-agent.json      |    6 +
 zh-cn/docs/2.0.0/user_doc/guide/open-api.html      |  102 +
 zh-cn/docs/2.0.0/user_doc/guide/open-api.json      |    6 +
 .../2.0.0/user_doc/guide/parameter/built-in.html   |   92 +
 .../2.0.0/user_doc/guide/parameter/built-in.json   |    6 +
 .../2.0.0/user_doc/guide/parameter/context.html    |   75 +
 .../2.0.0/user_doc/guide/parameter/context.json    |    6 +
 .../2.0.0/user_doc/guide/parameter/global.html     |   50 +
 .../2.0.0/user_doc/guide/parameter/global.json     |    6 +
 .../docs/2.0.0/user_doc/guide/parameter/local.html |   50 +
 .../docs/2.0.0/user_doc/guide/parameter/local.json |    6 +
 .../2.0.0/user_doc/guide/parameter/priority.html   |   64 +
 .../2.0.0/user_doc/guide/parameter/priority.json   |    6 +
 .../2.0.0/user_doc/guide/project/project-list.html |   53 +
 .../2.0.0/user_doc/guide/project/project-list.json |    6 +
 .../user_doc/guide/project/task-instance.html      |   53 +
 .../user_doc/guide/project/task-instance.json      |    6 +
 .../guide/project/workflow-definition.html         |  180 ++
 .../guide/project/workflow-definition.json         |    6 +
 .../user_doc/guide/project/workflow-instance.html  |   98 +
 .../user_doc/guide/project/workflow-instance.json  |    6 +
 zh-cn/docs/2.0.0/user_doc/guide/quick-start.html   |  120 +
 zh-cn/docs/2.0.0/user_doc/guide/quick-start.json   |    6 +
 zh-cn/docs/2.0.0/user_doc/guide/resource.html      |  161 +
 zh-cn/docs/2.0.0/user_doc/guide/resource.json      |    6 +
 zh-cn/docs/2.0.0/user_doc/guide/security.html      |  222 ++
 zh-cn/docs/2.0.0/user_doc/guide/security.json      |    6 +
 .../docs/2.0.0/user_doc/guide/task/conditions.html |   73 +
 .../docs/2.0.0/user_doc/guide/task/conditions.json |    6 +
 zh-cn/docs/2.0.0/user_doc/guide/task/datax.html    |   74 +
 zh-cn/docs/2.0.0/user_doc/guide/task/datax.json    |    6 +
 .../docs/2.0.0/user_doc/guide/task/dependent.html  |   65 +
 .../docs/2.0.0/user_doc/guide/task/dependent.json  |    6 +
 zh-cn/docs/2.0.0/user_doc/guide/task/flink.html    |   60 +
 zh-cn/docs/2.0.0/user_doc/guide/task/flink.json    |    6 +
 zh-cn/docs/2.0.0/user_doc/guide/task/http.html     |   61 +
 zh-cn/docs/2.0.0/user_doc/guide/task/http.json     |    6 +
 .../docs/2.0.0/user_doc/guide/task/map-reduce.html |   71 +
 .../docs/2.0.0/user_doc/guide/task/map-reduce.json |    6 +
 zh-cn/docs/2.0.0/user_doc/guide/task/pigeon.html   |   54 +
 zh-cn/docs/2.0.0/user_doc/guide/task/pigeon.json   |    6 +
 zh-cn/docs/2.0.0/user_doc/guide/task/python.html   |   55 +
 zh-cn/docs/2.0.0/user_doc/guide/task/python.json   |    6 +
 zh-cn/docs/2.0.0/user_doc/guide/task/shell.html    |   75 +
 zh-cn/docs/2.0.0/user_doc/guide/task/shell.json    |    6 +
 zh-cn/docs/2.0.0/user_doc/guide/task/spark.html    |   61 +
 zh-cn/docs/2.0.0/user_doc/guide/task/spark.json    |    6 +
 zh-cn/docs/2.0.0/user_doc/guide/task/sql.html      |   68 +
 zh-cn/docs/2.0.0/user_doc/guide/task/sql.json      |    6 +
 .../user_doc/guide/task/stored-procedure.html      |   53 +
 .../user_doc/guide/task/stored-procedure.json      |    6 +
 .../2.0.0/user_doc/guide/task/sub-process.html     |   55 +
 .../2.0.0/user_doc/guide/task/sub-process.json     |    6 +
 zh-cn/docs/2.0.0/user_doc/guide/task/switch.html   |   70 +
 zh-cn/docs/2.0.0/user_doc/guide/task/switch.json   |    6 +
 zh-cn/docs/2.0.0/user_doc/guide/upgrade.html       |  108 +
 zh-cn/docs/2.0.0/user_doc/guide/upgrade.json       |    6 +
 .../About_DolphinScheduler.html                    |   48 +
 .../About_DolphinScheduler.json                    |    6 +
 .../2.0.1/user_doc/architecture/configuration.html | 1015 ++++++
 .../2.0.1/user_doc/architecture/configuration.json |    6 +
 zh-cn/docs/2.0.1/user_doc/architecture/design.html |  302 ++
 zh-cn/docs/2.0.1/user_doc/architecture/design.json |    6 +
 .../2.0.1/user_doc/architecture/designplus.html    |   88 +
 .../2.0.1/user_doc/architecture/designplus.json    |    6 +
 .../2.0.1/user_doc/architecture/load-balance.html  |   73 +
 .../2.0.1/user_doc/architecture/load-balance.json  |    6 +
 .../docs/2.0.1/user_doc/architecture/metadata.html |  754 +++++
 .../docs/2.0.1/user_doc/architecture/metadata.json |    6 +
 .../user_doc/architecture/task-structure.html      | 3292 +++++++++++++++++++
 .../user_doc/architecture/task-structure.json      |    6 +
 .../guide/alert/alert_plugin_user_guide.html       |   45 +
 .../guide/alert/alert_plugin_user_guide.json       |    6 +
 .../user_doc/guide/alert/enterprise-wechat.html    |   64 +
 .../user_doc/guide/alert/enterprise-wechat.json    |    6 +
 .../docs/2.0.1/user_doc/guide/datasource/hive.html |   72 +
 .../docs/2.0.1/user_doc/guide/datasource/hive.json |    6 +
 .../user_doc/guide/datasource/introduction.html    |   44 +
 .../user_doc/guide/datasource/introduction.json    |    6 +
 .../2.0.1/user_doc/guide/datasource/mysql.html     |   52 +
 .../2.0.1/user_doc/guide/datasource/mysql.json     |    6 +
 .../user_doc/guide/datasource/postgresql.html      |   52 +
 .../user_doc/guide/datasource/postgresql.json      |    6 +
 .../2.0.1/user_doc/guide/datasource/spark.html     |   57 +
 .../2.0.1/user_doc/guide/datasource/spark.json     |    6 +
 .../2.0.1/user_doc/guide/expansion-reduction.html  |  263 ++
 .../2.0.1/user_doc/guide/expansion-reduction.json  |    6 +
 zh-cn/docs/2.0.1/user_doc/guide/flink-call.html    |  135 +
 zh-cn/docs/2.0.1/user_doc/guide/flink-call.json    |    6 +
 zh-cn/docs/2.0.1/user_doc/guide/homepage.html      |   42 +
 zh-cn/docs/2.0.1/user_doc/guide/homepage.json      |    6 +
 .../2.0.1/user_doc/guide/installation/cluster.html |   61 +
 .../2.0.1/user_doc/guide/installation/cluster.json |    6 +
 .../2.0.1/user_doc/guide/installation/docker.html  |  924 ++++++
 .../2.0.1/user_doc/guide/installation/docker.json  |    6 +
 .../user_doc/guide/installation/hardware.html      |  138 +
 .../user_doc/guide/installation/hardware.json      |    6 +
 .../user_doc/guide/installation/kubernetes.html    | 1758 +++++++++++
 .../user_doc/guide/installation/kubernetes.json    |    6 +
 .../guide/installation/pseudo-cluster.html         |  210 ++
 .../guide/installation/pseudo-cluster.json         |    6 +
 .../user_doc/guide/installation/standalone.html    |   66 +
 .../user_doc/guide/installation/standalone.json    |    6 +
 zh-cn/docs/2.0.1/user_doc/guide/introduction.html  |   40 +
 zh-cn/docs/2.0.1/user_doc/guide/introduction.json  |    6 +
 zh-cn/docs/2.0.1/user_doc/guide/monitor.html       |   81 +
 zh-cn/docs/2.0.1/user_doc/guide/monitor.json       |    6 +
 .../guide/observability/skywalking-agent.html      |   86 +
 .../guide/observability/skywalking-agent.json      |    6 +
 zh-cn/docs/2.0.1/user_doc/guide/open-api.html      |  102 +
 zh-cn/docs/2.0.1/user_doc/guide/open-api.json      |    6 +
 .../2.0.1/user_doc/guide/parameter/built-in.html   |   92 +
 .../2.0.1/user_doc/guide/parameter/built-in.json   |    6 +
 .../2.0.1/user_doc/guide/parameter/context.html    |   75 +
 .../2.0.1/user_doc/guide/parameter/context.json    |    6 +
 .../2.0.1/user_doc/guide/parameter/global.html     |   50 +
 .../2.0.1/user_doc/guide/parameter/global.json     |    6 +
 .../docs/2.0.1/user_doc/guide/parameter/local.html |   50 +
 .../docs/2.0.1/user_doc/guide/parameter/local.json |    6 +
 .../2.0.1/user_doc/guide/parameter/priority.html   |   64 +
 .../2.0.1/user_doc/guide/parameter/priority.json   |    6 +
 .../2.0.1/user_doc/guide/project/project-list.html |   53 +
 .../2.0.1/user_doc/guide/project/project-list.json |    6 +
 .../user_doc/guide/project/task-instance.html      |   53 +
 .../user_doc/guide/project/task-instance.json      |    6 +
 .../guide/project/workflow-definition.html         |  180 ++
 .../guide/project/workflow-definition.json         |    6 +
 .../user_doc/guide/project/workflow-instance.html  |   98 +
 .../user_doc/guide/project/workflow-instance.json  |    6 +
 zh-cn/docs/2.0.1/user_doc/guide/quick-start.html   |  120 +
 zh-cn/docs/2.0.1/user_doc/guide/quick-start.json   |    6 +
 zh-cn/docs/2.0.1/user_doc/guide/resource.html      |  161 +
 zh-cn/docs/2.0.1/user_doc/guide/resource.json      |    6 +
 zh-cn/docs/2.0.1/user_doc/guide/security.html      |  222 ++
 zh-cn/docs/2.0.1/user_doc/guide/security.json      |    6 +
 .../docs/2.0.1/user_doc/guide/task/conditions.html |   73 +
 .../docs/2.0.1/user_doc/guide/task/conditions.json |    6 +
 zh-cn/docs/2.0.1/user_doc/guide/task/datax.html    |   74 +
 zh-cn/docs/2.0.1/user_doc/guide/task/datax.json    |    6 +
 .../docs/2.0.1/user_doc/guide/task/dependent.html  |   65 +
 .../docs/2.0.1/user_doc/guide/task/dependent.json  |    6 +
 zh-cn/docs/2.0.1/user_doc/guide/task/flink.html    |   60 +
 zh-cn/docs/2.0.1/user_doc/guide/task/flink.json    |    6 +
 zh-cn/docs/2.0.1/user_doc/guide/task/http.html     |   61 +
 zh-cn/docs/2.0.1/user_doc/guide/task/http.json     |    6 +
 .../docs/2.0.1/user_doc/guide/task/map-reduce.html |   71 +
 .../docs/2.0.1/user_doc/guide/task/map-reduce.json |    6 +
 zh-cn/docs/2.0.1/user_doc/guide/task/pigeon.html   |   54 +
 zh-cn/docs/2.0.1/user_doc/guide/task/pigeon.json   |    6 +
 zh-cn/docs/2.0.1/user_doc/guide/task/python.html   |   55 +
 zh-cn/docs/2.0.1/user_doc/guide/task/python.json   |    6 +
 zh-cn/docs/2.0.1/user_doc/guide/task/shell.html    |   75 +
 zh-cn/docs/2.0.1/user_doc/guide/task/shell.json    |    6 +
 zh-cn/docs/2.0.1/user_doc/guide/task/spark.html    |   61 +
 zh-cn/docs/2.0.1/user_doc/guide/task/spark.json    |    6 +
 zh-cn/docs/2.0.1/user_doc/guide/task/sql.html      |   68 +
 zh-cn/docs/2.0.1/user_doc/guide/task/sql.json      |    6 +
 .../user_doc/guide/task/stored-procedure.html      |   53 +
 .../user_doc/guide/task/stored-procedure.json      |    6 +
 .../2.0.1/user_doc/guide/task/sub-process.html     |   55 +
 .../2.0.1/user_doc/guide/task/sub-process.json     |    6 +
 zh-cn/docs/2.0.1/user_doc/guide/task/switch.html   |   70 +
 zh-cn/docs/2.0.1/user_doc/guide/task/switch.json   |    6 +
 zh-cn/docs/2.0.1/user_doc/guide/upgrade.html       |  107 +
 zh-cn/docs/2.0.1/user_doc/guide/upgrade.json       |    6 +
 .../About_DolphinScheduler.html                    |   48 +
 .../About_DolphinScheduler.json                    |    6 +
 .../2.0.2/user_doc/architecture/configuration.html | 1015 ++++++
 .../2.0.2/user_doc/architecture/configuration.json |    6 +
 zh-cn/docs/2.0.2/user_doc/architecture/design.html |  306 ++
 zh-cn/docs/2.0.2/user_doc/architecture/design.json |    6 +
 .../2.0.2/user_doc/architecture/designplus.html    |   88 +
 .../2.0.2/user_doc/architecture/designplus.json    |    6 +
 .../2.0.2/user_doc/architecture/load-balance.html  |   73 +
 .../2.0.2/user_doc/architecture/load-balance.json  |    6 +
 .../docs/2.0.2/user_doc/architecture/metadata.html |  754 +++++
 .../docs/2.0.2/user_doc/architecture/metadata.json |    6 +
 .../user_doc/architecture/task-structure.html      | 3292 +++++++++++++++++++
 .../user_doc/architecture/task-structure.json      |    6 +
 .../guide/alert/alert_plugin_user_guide.html       |   45 +
 .../guide/alert/alert_plugin_user_guide.json       |    6 +
 .../user_doc/guide/alert/enterprise-wechat.html    |   45 +
 .../user_doc/guide/alert/enterprise-wechat.json    |    6 +
 .../docs/2.0.2/user_doc/guide/datasource/hive.html |   72 +
 .../docs/2.0.2/user_doc/guide/datasource/hive.json |    6 +
 .../user_doc/guide/datasource/introduction.html    |   44 +
 .../user_doc/guide/datasource/introduction.json    |    6 +
 .../2.0.2/user_doc/guide/datasource/mysql.html     |   52 +
 .../2.0.2/user_doc/guide/datasource/mysql.json     |    6 +
 .../user_doc/guide/datasource/postgresql.html      |   52 +
 .../user_doc/guide/datasource/postgresql.json      |    6 +
 .../2.0.2/user_doc/guide/datasource/spark.html     |   57 +
 .../2.0.2/user_doc/guide/datasource/spark.json     |    6 +
 .../2.0.2/user_doc/guide/expansion-reduction.html  |  263 ++
 .../2.0.2/user_doc/guide/expansion-reduction.json  |    6 +
 zh-cn/docs/2.0.2/user_doc/guide/flink-call.html    |  135 +
 zh-cn/docs/2.0.2/user_doc/guide/flink-call.json    |    6 +
 zh-cn/docs/2.0.2/user_doc/guide/homepage.html      |   42 +
 zh-cn/docs/2.0.2/user_doc/guide/homepage.json      |    6 +
 .../2.0.2/user_doc/guide/installation/cluster.html |   62 +
 .../2.0.2/user_doc/guide/installation/cluster.json |    6 +
 .../2.0.2/user_doc/guide/installation/docker.html  |  933 ++++++
 .../2.0.2/user_doc/guide/installation/docker.json  |    6 +
 .../user_doc/guide/installation/hardware.html      |  138 +
 .../user_doc/guide/installation/hardware.json      |    6 +
 .../user_doc/guide/installation/kubernetes.html    | 1758 +++++++++++
 .../user_doc/guide/installation/kubernetes.json    |    6 +
 .../guide/installation/pseudo-cluster.html         |  197 ++
 .../guide/installation/pseudo-cluster.json         |    6 +
 .../user_doc/guide/installation/standalone.html    |   66 +
 .../user_doc/guide/installation/standalone.json    |    6 +
 zh-cn/docs/2.0.2/user_doc/guide/introduction.html  |   40 +
 zh-cn/docs/2.0.2/user_doc/guide/introduction.json  |    6 +
 zh-cn/docs/2.0.2/user_doc/guide/monitor.html       |   81 +
 zh-cn/docs/2.0.2/user_doc/guide/monitor.json       |    6 +
 .../guide/observability/skywalking-agent.html      |   86 +
 .../guide/observability/skywalking-agent.json      |    6 +
 zh-cn/docs/2.0.2/user_doc/guide/open-api.html      |  102 +
 zh-cn/docs/2.0.2/user_doc/guide/open-api.json      |    6 +
 .../2.0.2/user_doc/guide/parameter/built-in.html   |   93 +
 .../2.0.2/user_doc/guide/parameter/built-in.json   |    6 +
 .../2.0.2/user_doc/guide/parameter/context.html    |   75 +
 .../2.0.2/user_doc/guide/parameter/context.json    |    6 +
 .../2.0.2/user_doc/guide/parameter/global.html     |   50 +
 .../2.0.2/user_doc/guide/parameter/global.json     |    6 +
 .../docs/2.0.2/user_doc/guide/parameter/local.html |   50 +
 .../docs/2.0.2/user_doc/guide/parameter/local.json |    6 +
 .../2.0.2/user_doc/guide/parameter/priority.html   |   64 +
 .../2.0.2/user_doc/guide/parameter/priority.json   |    6 +
 .../2.0.2/user_doc/guide/project/project-list.html |   53 +
 .../2.0.2/user_doc/guide/project/project-list.json |    6 +
 .../user_doc/guide/project/task-instance.html      |   53 +
 .../user_doc/guide/project/task-instance.json      |    6 +
 .../guide/project/workflow-definition.html         |  180 ++
 .../guide/project/workflow-definition.json         |    6 +
 .../user_doc/guide/project/workflow-instance.html  |   98 +
 .../user_doc/guide/project/workflow-instance.json  |    6 +
 zh-cn/docs/2.0.2/user_doc/guide/quick-start.html   |  120 +
 zh-cn/docs/2.0.2/user_doc/guide/quick-start.json   |    6 +
 zh-cn/docs/2.0.2/user_doc/guide/resource.html      |  161 +
 zh-cn/docs/2.0.2/user_doc/guide/resource.json      |    6 +
 zh-cn/docs/2.0.2/user_doc/guide/security.html      |  222 ++
 zh-cn/docs/2.0.2/user_doc/guide/security.json      |    6 +
 .../docs/2.0.2/user_doc/guide/task/conditions.html |   73 +
 .../docs/2.0.2/user_doc/guide/task/conditions.json |    6 +
 zh-cn/docs/2.0.2/user_doc/guide/task/datax.html    |   74 +
 zh-cn/docs/2.0.2/user_doc/guide/task/datax.json    |    6 +
 .../docs/2.0.2/user_doc/guide/task/dependent.html  |   65 +
 .../docs/2.0.2/user_doc/guide/task/dependent.json  |    6 +
 zh-cn/docs/2.0.2/user_doc/guide/task/flink.html    |   60 +
 zh-cn/docs/2.0.2/user_doc/guide/task/flink.json    |    6 +
 zh-cn/docs/2.0.2/user_doc/guide/task/http.html     |   61 +
 zh-cn/docs/2.0.2/user_doc/guide/task/http.json     |    6 +
 .../docs/2.0.2/user_doc/guide/task/map-reduce.html |   71 +
 .../docs/2.0.2/user_doc/guide/task/map-reduce.json |    6 +
 zh-cn/docs/2.0.2/user_doc/guide/task/pigeon.html   |   54 +
 zh-cn/docs/2.0.2/user_doc/guide/task/pigeon.json   |    6 +
 zh-cn/docs/2.0.2/user_doc/guide/task/python.html   |   55 +
 zh-cn/docs/2.0.2/user_doc/guide/task/python.json   |    6 +
 zh-cn/docs/2.0.2/user_doc/guide/task/shell.html    |   75 +
 zh-cn/docs/2.0.2/user_doc/guide/task/shell.json    |    6 +
 zh-cn/docs/2.0.2/user_doc/guide/task/spark.html    |   61 +
 zh-cn/docs/2.0.2/user_doc/guide/task/spark.json    |    6 +
 zh-cn/docs/2.0.2/user_doc/guide/task/sql.html      |   68 +
 zh-cn/docs/2.0.2/user_doc/guide/task/sql.json      |    6 +
 .../user_doc/guide/task/stored-procedure.html      |   53 +
 .../user_doc/guide/task/stored-procedure.json      |    6 +
 .../2.0.2/user_doc/guide/task/sub-process.html     |   55 +
 .../2.0.2/user_doc/guide/task/sub-process.json     |    6 +
 zh-cn/docs/2.0.2/user_doc/guide/task/switch.html   |   70 +
 zh-cn/docs/2.0.2/user_doc/guide/task/switch.json   |    6 +
 zh-cn/docs/2.0.2/user_doc/guide/upgrade.html       |  107 +
 zh-cn/docs/2.0.2/user_doc/guide/upgrade.json       |    6 +
 .../About_DolphinScheduler.html                    |   48 +
 .../About_DolphinScheduler.json                    |    6 +
 zh-cn/docs/2.0.3/user_doc/architecture/cache.html  |   64 +
 zh-cn/docs/2.0.3/user_doc/architecture/cache.json  |    6 +
 .../2.0.3/user_doc/architecture/configuration.html | 1015 ++++++
 .../2.0.3/user_doc/architecture/configuration.json |    6 +
 zh-cn/docs/2.0.3/user_doc/architecture/design.html |  306 ++
 zh-cn/docs/2.0.3/user_doc/architecture/design.json |    6 +
 .../2.0.3/user_doc/architecture/designplus.html    |   88 +
 .../2.0.3/user_doc/architecture/designplus.json    |    6 +
 .../2.0.3/user_doc/architecture/load-balance.html  |   73 +
 .../2.0.3/user_doc/architecture/load-balance.json  |    6 +
 .../docs/2.0.3/user_doc/architecture/metadata.html |  754 +++++
 .../docs/2.0.3/user_doc/architecture/metadata.json |    6 +
 .../user_doc/architecture/task-structure.html      | 3292 +++++++++++++++++++
 .../user_doc/architecture/task-structure.json      |    6 +
 .../guide/alert/alert_plugin_user_guide.html       |   45 +
 .../guide/alert/alert_plugin_user_guide.json       |    6 +
 .../user_doc/guide/alert/enterprise-wechat.html    |   45 +
 .../user_doc/guide/alert/enterprise-wechat.json    |    6 +
 .../docs/2.0.3/user_doc/guide/datasource/hive.html |   76 +
 .../docs/2.0.3/user_doc/guide/datasource/hive.json |    6 +
 .../user_doc/guide/datasource/introduction.html    |   44 +
 .../user_doc/guide/datasource/introduction.json    |    6 +
 .../2.0.3/user_doc/guide/datasource/mysql.html     |   52 +
 .../2.0.3/user_doc/guide/datasource/mysql.json     |    6 +
 .../user_doc/guide/datasource/postgresql.html      |   52 +
 .../user_doc/guide/datasource/postgresql.json      |    6 +
 .../2.0.3/user_doc/guide/datasource/spark.html     |   57 +
 .../2.0.3/user_doc/guide/datasource/spark.json     |    6 +
 .../2.0.3/user_doc/guide/expansion-reduction.html  |  263 ++
 .../2.0.3/user_doc/guide/expansion-reduction.json  |    6 +
 zh-cn/docs/2.0.3/user_doc/guide/flink-call.html    |  135 +
 zh-cn/docs/2.0.3/user_doc/guide/flink-call.json    |    6 +
 zh-cn/docs/2.0.3/user_doc/guide/homepage.html      |   42 +
 zh-cn/docs/2.0.3/user_doc/guide/homepage.json      |    6 +
 .../2.0.3/user_doc/guide/installation/cluster.html |   62 +
 .../2.0.3/user_doc/guide/installation/cluster.json |    6 +
 .../2.0.3/user_doc/guide/installation/docker.html  |  933 ++++++
 .../2.0.3/user_doc/guide/installation/docker.json  |    6 +
 .../user_doc/guide/installation/hardware.html      |  138 +
 .../user_doc/guide/installation/hardware.json      |    6 +
 .../user_doc/guide/installation/kubernetes.html    | 1758 +++++++++++
 .../user_doc/guide/installation/kubernetes.json    |    6 +
 .../guide/installation/pseudo-cluster.html         |  197 ++
 .../guide/installation/pseudo-cluster.json         |    6 +
 .../user_doc/guide/installation/standalone.html    |   66 +
 .../user_doc/guide/installation/standalone.json    |    6 +
 zh-cn/docs/2.0.3/user_doc/guide/introduction.html  |   40 +
 zh-cn/docs/2.0.3/user_doc/guide/introduction.json  |    6 +
 zh-cn/docs/2.0.3/user_doc/guide/monitor.html       |   81 +
 zh-cn/docs/2.0.3/user_doc/guide/monitor.json       |    6 +
 .../guide/observability/skywalking-agent.html      |   86 +
 .../guide/observability/skywalking-agent.json      |    6 +
 zh-cn/docs/2.0.3/user_doc/guide/open-api.html      |  102 +
 zh-cn/docs/2.0.3/user_doc/guide/open-api.json      |    6 +
 .../2.0.3/user_doc/guide/parameter/built-in.html   |   93 +
 .../2.0.3/user_doc/guide/parameter/built-in.json   |    6 +
 .../2.0.3/user_doc/guide/parameter/context.html    |   75 +
 .../2.0.3/user_doc/guide/parameter/context.json    |    6 +
 .../2.0.3/user_doc/guide/parameter/global.html     |   50 +
 .../2.0.3/user_doc/guide/parameter/global.json     |    6 +
 .../docs/2.0.3/user_doc/guide/parameter/local.html |   50 +
 .../docs/2.0.3/user_doc/guide/parameter/local.json |    6 +
 .../2.0.3/user_doc/guide/parameter/priority.html   |   64 +
 .../2.0.3/user_doc/guide/parameter/priority.json   |    6 +
 .../2.0.3/user_doc/guide/project/project-list.html |   53 +
 .../2.0.3/user_doc/guide/project/project-list.json |    6 +
 .../user_doc/guide/project/task-instance.html      |   53 +
 .../user_doc/guide/project/task-instance.json      |    6 +
 .../guide/project/workflow-definition.html         |  180 ++
 .../guide/project/workflow-definition.json         |    6 +
 .../user_doc/guide/project/workflow-instance.html  |   98 +
 .../user_doc/guide/project/workflow-instance.json  |    6 +
 zh-cn/docs/2.0.3/user_doc/guide/quick-start.html   |  120 +
 zh-cn/docs/2.0.3/user_doc/guide/quick-start.json   |    6 +
 zh-cn/docs/2.0.3/user_doc/guide/resource.html      |  161 +
 zh-cn/docs/2.0.3/user_doc/guide/resource.json      |    6 +
 zh-cn/docs/2.0.3/user_doc/guide/security.html      |  222 ++
 zh-cn/docs/2.0.3/user_doc/guide/security.json      |    6 +
 .../docs/2.0.3/user_doc/guide/task/conditions.html |   73 +
 .../docs/2.0.3/user_doc/guide/task/conditions.json |    6 +
 zh-cn/docs/2.0.3/user_doc/guide/task/datax.html    |   74 +
 zh-cn/docs/2.0.3/user_doc/guide/task/datax.json    |    6 +
 .../docs/2.0.3/user_doc/guide/task/dependent.html  |   65 +
 .../docs/2.0.3/user_doc/guide/task/dependent.json  |    6 +
 zh-cn/docs/2.0.3/user_doc/guide/task/flink.html    |   87 +
 zh-cn/docs/2.0.3/user_doc/guide/task/flink.json    |    6 +
 zh-cn/docs/2.0.3/user_doc/guide/task/http.html     |   61 +
 zh-cn/docs/2.0.3/user_doc/guide/task/http.json     |    6 +
 .../docs/2.0.3/user_doc/guide/task/map-reduce.html |   93 +
 .../docs/2.0.3/user_doc/guide/task/map-reduce.json |    6 +
 zh-cn/docs/2.0.3/user_doc/guide/task/pigeon.html   |   54 +
 zh-cn/docs/2.0.3/user_doc/guide/task/pigeon.json   |    6 +
 zh-cn/docs/2.0.3/user_doc/guide/task/python.html   |   55 +
 zh-cn/docs/2.0.3/user_doc/guide/task/python.json   |    6 +
 zh-cn/docs/2.0.3/user_doc/guide/task/shell.html    |   75 +
 zh-cn/docs/2.0.3/user_doc/guide/task/shell.json    |    6 +
 zh-cn/docs/2.0.3/user_doc/guide/task/spark.html    |   90 +
 zh-cn/docs/2.0.3/user_doc/guide/task/spark.json    |    6 +
 zh-cn/docs/2.0.3/user_doc/guide/task/sql.html      |   68 +
 zh-cn/docs/2.0.3/user_doc/guide/task/sql.json      |    6 +
 .../user_doc/guide/task/stored-procedure.html      |   53 +
 .../user_doc/guide/task/stored-procedure.json      |    6 +
 .../2.0.3/user_doc/guide/task/sub-process.html     |   55 +
 .../2.0.3/user_doc/guide/task/sub-process.json     |    6 +
 zh-cn/docs/2.0.3/user_doc/guide/task/switch.html   |   70 +
 zh-cn/docs/2.0.3/user_doc/guide/task/switch.json   |    6 +
 zh-cn/docs/2.0.3/user_doc/guide/upgrade.html       |  107 +
 zh-cn/docs/2.0.3/user_doc/guide/upgrade.json       |    6 +
 .../About_DolphinScheduler.html                    |   48 +
 .../About_DolphinScheduler.json                    |    6 +
 zh-cn/docs/2.0.5/user_doc/architecture/cache.html  |   64 +
 zh-cn/docs/2.0.5/user_doc/architecture/cache.json  |    6 +
 .../2.0.5/user_doc/architecture/configuration.html | 1015 ++++++
 .../2.0.5/user_doc/architecture/configuration.json |    6 +
 zh-cn/docs/2.0.5/user_doc/architecture/design.html |  306 ++
 zh-cn/docs/2.0.5/user_doc/architecture/design.json |    6 +
 .../2.0.5/user_doc/architecture/designplus.html    |   88 +
 .../2.0.5/user_doc/architecture/designplus.json    |    6 +
 .../2.0.5/user_doc/architecture/load-balance.html  |   73 +
 .../2.0.5/user_doc/architecture/load-balance.json  |    6 +
 .../docs/2.0.5/user_doc/architecture/metadata.html |  754 +++++
 .../docs/2.0.5/user_doc/architecture/metadata.json |    6 +
 .../user_doc/architecture/task-structure.html      | 3292 +++++++++++++++++++
 .../user_doc/architecture/task-structure.json      |    6 +
 .../guide/alert/alert_plugin_user_guide.html       |   45 +
 .../guide/alert/alert_plugin_user_guide.json       |    6 +
 .../docs/2.0.5/user_doc/guide/alert/dingtalk.html  |   83 +
 .../docs/2.0.5/user_doc/guide/alert/dingtalk.json  |    6 +
 .../user_doc/guide/alert/enterprise-wechat.html    |   45 +
 .../user_doc/guide/alert/enterprise-wechat.json    |    6 +
 .../docs/2.0.5/user_doc/guide/datasource/hive.html |   76 +
 .../docs/2.0.5/user_doc/guide/datasource/hive.json |    6 +
 .../user_doc/guide/datasource/introduction.html    |   44 +
 .../user_doc/guide/datasource/introduction.json    |    6 +
 .../2.0.5/user_doc/guide/datasource/mysql.html     |   52 +
 .../2.0.5/user_doc/guide/datasource/mysql.json     |    6 +
 .../user_doc/guide/datasource/postgresql.html      |   52 +
 .../user_doc/guide/datasource/postgresql.json      |    6 +
 .../2.0.5/user_doc/guide/datasource/spark.html     |   57 +
 .../2.0.5/user_doc/guide/datasource/spark.json     |    6 +
 .../2.0.5/user_doc/guide/expansion-reduction.html  |  263 ++
 .../2.0.5/user_doc/guide/expansion-reduction.json  |    6 +
 zh-cn/docs/2.0.5/user_doc/guide/flink-call.html    |  135 +
 zh-cn/docs/2.0.5/user_doc/guide/flink-call.json    |    6 +
 zh-cn/docs/2.0.5/user_doc/guide/homepage.html      |   42 +
 zh-cn/docs/2.0.5/user_doc/guide/homepage.json      |    6 +
 .../2.0.5/user_doc/guide/installation/cluster.html |   62 +
 .../2.0.5/user_doc/guide/installation/cluster.json |    6 +
 .../2.0.5/user_doc/guide/installation/docker.html  |  933 ++++++
 .../2.0.5/user_doc/guide/installation/docker.json  |    6 +
 .../user_doc/guide/installation/hardware.html      |  138 +
 .../user_doc/guide/installation/hardware.json      |    6 +
 .../user_doc/guide/installation/kubernetes.html    | 1758 +++++++++++
 .../user_doc/guide/installation/kubernetes.json    |    6 +
 .../guide/installation/pseudo-cluster.html         |  197 ++
 .../guide/installation/pseudo-cluster.json         |    6 +
 .../user_doc/guide/installation/standalone.html    |   66 +
 .../user_doc/guide/installation/standalone.json    |    6 +
 zh-cn/docs/2.0.5/user_doc/guide/introduction.html  |   40 +
 zh-cn/docs/2.0.5/user_doc/guide/introduction.json  |    6 +
 zh-cn/docs/2.0.5/user_doc/guide/monitor.html       |   81 +
 zh-cn/docs/2.0.5/user_doc/guide/monitor.json       |    6 +
 .../guide/observability/skywalking-agent.html      |   86 +
 .../guide/observability/skywalking-agent.json      |    6 +
 zh-cn/docs/2.0.5/user_doc/guide/open-api.html      |  102 +
 zh-cn/docs/2.0.5/user_doc/guide/open-api.json      |    6 +
 .../2.0.5/user_doc/guide/parameter/built-in.html   |   93 +
 .../2.0.5/user_doc/guide/parameter/built-in.json   |    6 +
 .../2.0.5/user_doc/guide/parameter/context.html    |   75 +
 .../2.0.5/user_doc/guide/parameter/context.json    |    6 +
 .../2.0.5/user_doc/guide/parameter/global.html     |   50 +
 .../2.0.5/user_doc/guide/parameter/global.json     |    6 +
 .../docs/2.0.5/user_doc/guide/parameter/local.html |   50 +
 .../docs/2.0.5/user_doc/guide/parameter/local.json |    6 +
 .../2.0.5/user_doc/guide/parameter/priority.html   |   64 +
 .../2.0.5/user_doc/guide/parameter/priority.json   |    6 +
 .../2.0.5/user_doc/guide/project/project-list.html |   53 +
 .../2.0.5/user_doc/guide/project/project-list.json |    6 +
 .../user_doc/guide/project/task-instance.html      |   53 +
 .../user_doc/guide/project/task-instance.json      |    6 +
 .../guide/project/workflow-definition.html         |  180 ++
 .../guide/project/workflow-definition.json         |    6 +
 .../user_doc/guide/project/workflow-instance.html  |   98 +
 .../user_doc/guide/project/workflow-instance.json  |    6 +
 zh-cn/docs/2.0.5/user_doc/guide/quick-start.html   |  120 +
 zh-cn/docs/2.0.5/user_doc/guide/quick-start.json   |    6 +
 zh-cn/docs/2.0.5/user_doc/guide/resource.html      |  172 +
 zh-cn/docs/2.0.5/user_doc/guide/resource.json      |    6 +
 zh-cn/docs/2.0.5/user_doc/guide/security.html      |  222 ++
 zh-cn/docs/2.0.5/user_doc/guide/security.json      |    6 +
 .../docs/2.0.5/user_doc/guide/task/conditions.html |   73 +
 .../docs/2.0.5/user_doc/guide/task/conditions.json |    6 +
 zh-cn/docs/2.0.5/user_doc/guide/task/datax.html    |   74 +
 zh-cn/docs/2.0.5/user_doc/guide/task/datax.json    |    6 +
 .../docs/2.0.5/user_doc/guide/task/dependent.html  |   65 +
 .../docs/2.0.5/user_doc/guide/task/dependent.json  |    6 +
 zh-cn/docs/2.0.5/user_doc/guide/task/flink.html    |   87 +
 zh-cn/docs/2.0.5/user_doc/guide/task/flink.json    |    6 +
 zh-cn/docs/2.0.5/user_doc/guide/task/http.html     |   61 +
 zh-cn/docs/2.0.5/user_doc/guide/task/http.json     |    6 +
 .../docs/2.0.5/user_doc/guide/task/map-reduce.html |   93 +
 .../docs/2.0.5/user_doc/guide/task/map-reduce.json |    6 +
 zh-cn/docs/2.0.5/user_doc/guide/task/pigeon.html   |   54 +
 zh-cn/docs/2.0.5/user_doc/guide/task/pigeon.json   |    6 +
 zh-cn/docs/2.0.5/user_doc/guide/task/python.html   |   55 +
 zh-cn/docs/2.0.5/user_doc/guide/task/python.json   |    6 +
 zh-cn/docs/2.0.5/user_doc/guide/task/shell.html    |   75 +
 zh-cn/docs/2.0.5/user_doc/guide/task/shell.json    |    6 +
 zh-cn/docs/2.0.5/user_doc/guide/task/spark.html    |   90 +
 zh-cn/docs/2.0.5/user_doc/guide/task/spark.json    |    6 +
 zh-cn/docs/2.0.5/user_doc/guide/task/sql.html      |   68 +
 zh-cn/docs/2.0.5/user_doc/guide/task/sql.json      |    6 +
 .../user_doc/guide/task/stored-procedure.html      |   53 +
 .../user_doc/guide/task/stored-procedure.json      |    6 +
 .../2.0.5/user_doc/guide/task/sub-process.html     |   55 +
 .../2.0.5/user_doc/guide/task/sub-process.json     |    6 +
 zh-cn/docs/2.0.5/user_doc/guide/task/switch.html   |   70 +
 zh-cn/docs/2.0.5/user_doc/guide/task/switch.json   |    6 +
 zh-cn/docs/2.0.5/user_doc/guide/upgrade.html       |  107 +
 zh-cn/docs/2.0.5/user_doc/guide/upgrade.json       |    6 +
 .../About_DolphinScheduler.html                    |   48 +
 .../About_DolphinScheduler.json                    |    6 +
 zh-cn/docs/dev/user_doc/architecture/cache.html    |   64 +
 zh-cn/docs/dev/user_doc/architecture/cache.json    |    6 +
 .../dev/user_doc/architecture/configuration.html   | 1010 ++++++
 .../dev/user_doc/architecture/configuration.json   |    6 +
 zh-cn/docs/dev/user_doc/architecture/design.html   |  363 +++
 zh-cn/docs/dev/user_doc/architecture/design.json   |    6 +
 .../dev/user_doc/architecture/load-balance.html    |   73 +
 .../dev/user_doc/architecture/load-balance.json    |    6 +
 zh-cn/docs/dev/user_doc/architecture/metadata.html |  754 +++++
 zh-cn/docs/dev/user_doc/architecture/metadata.json |    6 +
 .../dev/user_doc/architecture/task-structure.html  | 3292 +++++++++++++++++++
 .../dev/user_doc/architecture/task-structure.json  |    6 +
 .../guide/alert/alert_plugin_user_guide.html       |   45 +
 .../guide/alert/alert_plugin_user_guide.json       |    6 +
 zh-cn/docs/dev/user_doc/guide/alert/dingtalk.html  |   83 +
 zh-cn/docs/dev/user_doc/guide/alert/dingtalk.json  |    6 +
 .../guide/alert/enterprise-webexteams.html         |   76 +
 .../guide/alert/enterprise-webexteams.json         |    6 +
 .../user_doc/guide/alert/enterprise-wechat.html    |   45 +
 .../user_doc/guide/alert/enterprise-wechat.json    |    6 +
 zh-cn/docs/dev/user_doc/guide/alert/telegram.html  |   93 +
 zh-cn/docs/dev/user_doc/guide/alert/telegram.json  |    6 +
 zh-cn/docs/dev/user_doc/guide/datasource/hive.html |   76 +
 zh-cn/docs/dev/user_doc/guide/datasource/hive.json |    6 +
 .../user_doc/guide/datasource/introduction.html    |   44 +
 .../user_doc/guide/datasource/introduction.json    |    6 +
 .../docs/dev/user_doc/guide/datasource/mysql.html  |   53 +
 .../docs/dev/user_doc/guide/datasource/mysql.json  |    6 +
 .../dev/user_doc/guide/datasource/postgresql.html  |   53 +
 .../dev/user_doc/guide/datasource/postgresql.json  |    6 +
 .../docs/dev/user_doc/guide/datasource/spark.html  |   57 +
 .../docs/dev/user_doc/guide/datasource/spark.json  |    6 +
 .../dev/user_doc/guide/expansion-reduction.html    |  256 ++
 .../dev/user_doc/guide/expansion-reduction.json    |    6 +
 zh-cn/docs/dev/user_doc/guide/flink-call.html      |  135 +
 zh-cn/docs/dev/user_doc/guide/flink-call.json      |    6 +
 zh-cn/docs/dev/user_doc/guide/homepage.html        |   42 +
 zh-cn/docs/dev/user_doc/guide/homepage.json        |    6 +
 .../dev/user_doc/guide/installation/cluster.html   |   61 +
 .../dev/user_doc/guide/installation/cluster.json   |    6 +
 .../dev/user_doc/guide/installation/docker.html    |  920 ++++++
 .../dev/user_doc/guide/installation/docker.json    |    6 +
 .../dev/user_doc/guide/installation/hardware.html  |  138 +
 .../dev/user_doc/guide/installation/hardware.json  |    6 +
 .../user_doc/guide/installation/kubernetes.html    | 1757 +++++++++++
 .../user_doc/guide/installation/kubernetes.json    |    6 +
 .../guide/installation/pseudo-cluster.html         |  205 ++
 .../guide/installation/pseudo-cluster.json         |    6 +
 .../guide/installation/skywalking-agent.html       |   86 +
 .../guide/installation/skywalking-agent.json       |    6 +
 .../user_doc/guide/installation/standalone.html    |   66 +
 .../user_doc/guide/installation/standalone.json    |    6 +
 zh-cn/docs/dev/user_doc/guide/introduction.html    |   40 +
 zh-cn/docs/dev/user_doc/guide/introduction.json    |    6 +
 zh-cn/docs/dev/user_doc/guide/monitor.html         |   81 +
 zh-cn/docs/dev/user_doc/guide/monitor.json         |    6 +
 zh-cn/docs/dev/user_doc/guide/open-api.html        |  102 +
 zh-cn/docs/dev/user_doc/guide/open-api.json        |    6 +
 .../dev/user_doc/guide/parameter/built-in.html     |   92 +
 .../dev/user_doc/guide/parameter/built-in.json     |    6 +
 .../docs/dev/user_doc/guide/parameter/context.html |   75 +
 .../docs/dev/user_doc/guide/parameter/context.json |    6 +
 .../docs/dev/user_doc/guide/parameter/global.html  |   50 +
 .../docs/dev/user_doc/guide/parameter/global.json  |    6 +
 zh-cn/docs/dev/user_doc/guide/parameter/local.html |   50 +
 zh-cn/docs/dev/user_doc/guide/parameter/local.json |    6 +
 .../dev/user_doc/guide/parameter/priority.html     |   64 +
 .../dev/user_doc/guide/parameter/priority.json     |    6 +
 .../dev/user_doc/guide/project/project-list.html   |   53 +
 .../dev/user_doc/guide/project/project-list.json   |    6 +
 .../dev/user_doc/guide/project/task-instance.html  |   53 +
 .../dev/user_doc/guide/project/task-instance.json  |    6 +
 .../guide/project/workflow-definition.html         |  180 ++
 .../guide/project/workflow-definition.json         |    6 +
 .../user_doc/guide/project/workflow-instance.html  |   98 +
 .../user_doc/guide/project/workflow-instance.json  |    6 +
 zh-cn/docs/dev/user_doc/guide/quick-start.html     |  120 +
 zh-cn/docs/dev/user_doc/guide/quick-start.json     |    6 +
 zh-cn/docs/dev/user_doc/guide/resource.html        |  214 ++
 zh-cn/docs/dev/user_doc/guide/resource.json        |    6 +
 zh-cn/docs/dev/user_doc/guide/security.html        |  222 ++
 zh-cn/docs/dev/user_doc/guide/security.json        |    6 +
 zh-cn/docs/dev/user_doc/guide/task/conditions.html |   73 +
 zh-cn/docs/dev/user_doc/guide/task/conditions.json |    6 +
 zh-cn/docs/dev/user_doc/guide/task/datax.html      |   74 +
 zh-cn/docs/dev/user_doc/guide/task/datax.json      |    6 +
 zh-cn/docs/dev/user_doc/guide/task/dependent.html  |   65 +
 zh-cn/docs/dev/user_doc/guide/task/dependent.json  |    6 +
 zh-cn/docs/dev/user_doc/guide/task/emr.html        |   92 +
 zh-cn/docs/dev/user_doc/guide/task/emr.json        |    6 +
 zh-cn/docs/dev/user_doc/guide/task/flink.html      |   87 +
 zh-cn/docs/dev/user_doc/guide/task/flink.json      |    6 +
 zh-cn/docs/dev/user_doc/guide/task/http.html       |   61 +
 zh-cn/docs/dev/user_doc/guide/task/http.json       |    6 +
 zh-cn/docs/dev/user_doc/guide/task/map-reduce.html |   93 +
 zh-cn/docs/dev/user_doc/guide/task/map-reduce.json |    6 +
 zh-cn/docs/dev/user_doc/guide/task/pigeon.html     |   54 +
 zh-cn/docs/dev/user_doc/guide/task/pigeon.json     |    6 +
 zh-cn/docs/dev/user_doc/guide/task/python.html     |   55 +
 zh-cn/docs/dev/user_doc/guide/task/python.json     |    6 +
 zh-cn/docs/dev/user_doc/guide/task/shell.html      |   75 +
 zh-cn/docs/dev/user_doc/guide/task/shell.json      |    6 +
 zh-cn/docs/dev/user_doc/guide/task/spark.html      |   90 +
 zh-cn/docs/dev/user_doc/guide/task/spark.json      |    6 +
 zh-cn/docs/dev/user_doc/guide/task/sql.html        |   68 +
 zh-cn/docs/dev/user_doc/guide/task/sql.json        |    6 +
 .../dev/user_doc/guide/task/stored-procedure.html  |   53 +
 .../dev/user_doc/guide/task/stored-procedure.json  |    6 +
 .../docs/dev/user_doc/guide/task/sub-process.html  |   55 +
 .../docs/dev/user_doc/guide/task/sub-process.json  |    6 +
 zh-cn/docs/dev/user_doc/guide/task/switch.html     |   70 +
 zh-cn/docs/dev/user_doc/guide/task/switch.json     |    6 +
 zh-cn/docs/dev/user_doc/guide/upgrade.html         |  137 +
 zh-cn/docs/dev/user_doc/guide/upgrade.json         |    6 +
 .../About_DolphinScheduler.html                    |   48 +
 .../About_DolphinScheduler.json                    |    6 +
 zh-cn/docs/latest/user_doc/architecture/cache.html |   64 +
 zh-cn/docs/latest/user_doc/architecture/cache.json |    6 +
 .../user_doc/architecture/configuration.html       | 1015 ++++++
 .../user_doc/architecture/configuration.json       |    6 +
 .../docs/latest/user_doc/architecture/design.html  |  306 ++
 .../docs/latest/user_doc/architecture/design.json  |    6 +
 .../latest/user_doc/architecture/designplus.html   |   88 +
 .../latest/user_doc/architecture/designplus.json   |    6 +
 .../latest/user_doc/architecture/load-balance.html |   73 +
 .../latest/user_doc/architecture/load-balance.json |    6 +
 .../latest/user_doc/architecture/metadata.html     |  754 +++++
 .../latest/user_doc/architecture/metadata.json     |    6 +
 .../user_doc/architecture/task-structure.html      | 3292 +++++++++++++++++++
 .../user_doc/architecture/task-structure.json      |    6 +
 .../guide/alert/alert_plugin_user_guide.html       |   45 +
 .../guide/alert/alert_plugin_user_guide.json       |    6 +
 .../docs/latest/user_doc/guide/alert/dingtalk.html |   83 +
 .../docs/latest/user_doc/guide/alert/dingtalk.json |    6 +
 .../user_doc/guide/alert/enterprise-wechat.html    |   45 +
 .../user_doc/guide/alert/enterprise-wechat.json    |    6 +
 .../latest/user_doc/guide/datasource/hive.html     |   76 +
 .../latest/user_doc/guide/datasource/hive.json     |    6 +
 .../user_doc/guide/datasource/introduction.html    |   44 +
 .../user_doc/guide/datasource/introduction.json    |    6 +
 .../latest/user_doc/guide/datasource/mysql.html    |   52 +
 .../latest/user_doc/guide/datasource/mysql.json    |    6 +
 .../user_doc/guide/datasource/postgresql.html      |   52 +
 .../user_doc/guide/datasource/postgresql.json      |    6 +
 .../latest/user_doc/guide/datasource/spark.html    |   57 +
 .../latest/user_doc/guide/datasource/spark.json    |    6 +
 .../latest/user_doc/guide/expansion-reduction.html |  263 ++
 .../latest/user_doc/guide/expansion-reduction.json |    6 +
 zh-cn/docs/latest/user_doc/guide/flink-call.html   |  135 +
 zh-cn/docs/latest/user_doc/guide/flink-call.json   |    6 +
 zh-cn/docs/latest/user_doc/guide/homepage.html     |   42 +
 zh-cn/docs/latest/user_doc/guide/homepage.json     |    6 +
 .../user_doc/guide/installation/cluster.html       |   62 +
 .../user_doc/guide/installation/cluster.json       |    6 +
 .../latest/user_doc/guide/installation/docker.html |  933 ++++++
 .../latest/user_doc/guide/installation/docker.json |    6 +
 .../user_doc/guide/installation/hardware.html      |  138 +
 .../user_doc/guide/installation/hardware.json      |    6 +
 .../user_doc/guide/installation/kubernetes.html    | 1758 +++++++++++
 .../user_doc/guide/installation/kubernetes.json    |    6 +
 .../guide/installation/pseudo-cluster.html         |  197 ++
 .../guide/installation/pseudo-cluster.json         |    6 +
 .../user_doc/guide/installation/standalone.html    |   66 +
 .../user_doc/guide/installation/standalone.json    |    6 +
 zh-cn/docs/latest/user_doc/guide/introduction.html |   40 +
 zh-cn/docs/latest/user_doc/guide/introduction.json |    6 +
 zh-cn/docs/latest/user_doc/guide/monitor.html      |   81 +
 zh-cn/docs/latest/user_doc/guide/monitor.json      |    6 +
 .../guide/observability/skywalking-agent.html      |   86 +
 .../guide/observability/skywalking-agent.json      |    6 +
 zh-cn/docs/latest/user_doc/guide/open-api.html     |  102 +
 zh-cn/docs/latest/user_doc/guide/open-api.json     |    6 +
 .../latest/user_doc/guide/parameter/built-in.html  |   93 +
 .../latest/user_doc/guide/parameter/built-in.json  |    6 +
 .../latest/user_doc/guide/parameter/context.html   |   75 +
 .../latest/user_doc/guide/parameter/context.json   |    6 +
 .../latest/user_doc/guide/parameter/global.html    |   50 +
 .../latest/user_doc/guide/parameter/global.json    |    6 +
 .../latest/user_doc/guide/parameter/local.html     |   50 +
 .../latest/user_doc/guide/parameter/local.json     |    6 +
 .../latest/user_doc/guide/parameter/priority.html  |   64 +
 .../latest/user_doc/guide/parameter/priority.json  |    6 +
 .../user_doc/guide/project/project-list.html       |   53 +
 .../user_doc/guide/project/project-list.json       |    6 +
 .../user_doc/guide/project/task-instance.html      |   53 +
 .../user_doc/guide/project/task-instance.json      |    6 +
 .../guide/project/workflow-definition.html         |  180 ++
 .../guide/project/workflow-definition.json         |    6 +
 .../user_doc/guide/project/workflow-instance.html  |   98 +
 .../user_doc/guide/project/workflow-instance.json  |    6 +
 zh-cn/docs/latest/user_doc/guide/quick-start.html  |  120 +
 zh-cn/docs/latest/user_doc/guide/quick-start.json  |    6 +
 zh-cn/docs/latest/user_doc/guide/resource.html     |  172 +
 zh-cn/docs/latest/user_doc/guide/resource.json     |    6 +
 zh-cn/docs/latest/user_doc/guide/security.html     |  222 ++
 zh-cn/docs/latest/user_doc/guide/security.json     |    6 +
 .../latest/user_doc/guide/task/conditions.html     |   73 +
 .../latest/user_doc/guide/task/conditions.json     |    6 +
 zh-cn/docs/latest/user_doc/guide/task/datax.html   |   74 +
 zh-cn/docs/latest/user_doc/guide/task/datax.json   |    6 +
 .../docs/latest/user_doc/guide/task/dependent.html |   65 +
 .../docs/latest/user_doc/guide/task/dependent.json |    6 +
 zh-cn/docs/latest/user_doc/guide/task/flink.html   |   87 +
 zh-cn/docs/latest/user_doc/guide/task/flink.json   |    6 +
 zh-cn/docs/latest/user_doc/guide/task/http.html    |   61 +
 zh-cn/docs/latest/user_doc/guide/task/http.json    |    6 +
 .../latest/user_doc/guide/task/map-reduce.html     |   93 +
 .../latest/user_doc/guide/task/map-reduce.json     |    6 +
 zh-cn/docs/latest/user_doc/guide/task/pigeon.html  |   54 +
 zh-cn/docs/latest/user_doc/guide/task/pigeon.json  |    6 +
 zh-cn/docs/latest/user_doc/guide/task/python.html  |   55 +
 zh-cn/docs/latest/user_doc/guide/task/python.json  |    6 +
 zh-cn/docs/latest/user_doc/guide/task/shell.html   |   75 +
 zh-cn/docs/latest/user_doc/guide/task/shell.json   |    6 +
 zh-cn/docs/latest/user_doc/guide/task/spark.html   |   90 +
 zh-cn/docs/latest/user_doc/guide/task/spark.json   |    6 +
 zh-cn/docs/latest/user_doc/guide/task/sql.html     |   68 +
 zh-cn/docs/latest/user_doc/guide/task/sql.json     |    6 +
 .../user_doc/guide/task/stored-procedure.html      |   53 +
 .../user_doc/guide/task/stored-procedure.json      |    6 +
 .../latest/user_doc/guide/task/sub-process.html    |   55 +
 .../latest/user_doc/guide/task/sub-process.json    |    6 +
 zh-cn/docs/latest/user_doc/guide/task/switch.html  |   70 +
 zh-cn/docs/latest/user_doc/guide/task/switch.json  |    6 +
 zh-cn/docs/latest/user_doc/guide/upgrade.html      |  107 +
 zh-cn/docs/latest/user_doc/guide/upgrade.json      |    6 +
 zh-cn/docs/release/faq.html                        |  523 ++++
 zh-cn/docs/release/faq.json                        |    6 +
 zh-cn/docs/release/history-versions.html           |   74 +
 zh-cn/docs/release/history-versions.json           |    6 +
 zh-cn/download/download.html                       |  265 ++
 zh-cn/download/download.json                       |    6 +
 zh-cn/download/download_ppt.html                   |  126 +
 zh-cn/download/download_ppt.json                   |    6 +
 2340 files changed, 358358 insertions(+)

diff --git a/en-us/blog/Apache-DolphinScheduler-2.0.1.html b/en-us/blog/Apache-DolphinScheduler-2.0.1.html
new file mode 100644
index 0000000..cdbe80e
--- /dev/null
+++ b/en-us/blog/Apache-DolphinScheduler-2.0.1.html
@@ -0,0 +1,227 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="Apache,DolphinScheduler,scheduler,big data,ETL,airflow,hadoop,orchestration, dataops,2.0.1">
+  <meta name="description" content="Good news! Apache DolphinScheduler 2.0.1 version is officially released today!">
+  <title>Apache DolphinScheduler 2.0.1 is here, and the highly anticipated one-click upgrade and plug-in finally come!</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+  <link rel="stylesheet" href="/build/blog.md.055b3f1.css">
+</head>
+<body>
+  <div id="root"><div class="blog-detail-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light ant-m [...]
+<p>Good news! Apache DolphinScheduler 2.0.1 version is officially released today!</p>
+<p>In this version, DolphinScheduler has undergone a microkernel + plug-in architecture improvement, 70% of the code has
+been refactored, and the long-awaited plug-in function has also been emphatically optimized. In addition, there are many
+highlights in this upgrade, such as a one-click upgrade to the latest version, &quot;de-ZK&quot; in the registration center, and
+new task parameter transfer functions, etc..</p>
+<p>Download Apache DolphinScheduler 2.0.1:<a href="https://dolphinscheduler.apache.org/zh-cn/download/download.html">https://dolphinscheduler.apache.org/zh-cn/download/download.html</a></p>
+<p>The workflow execution process activities of Apache DolphinScheduler 2.0.1 are shown in the following figure:</p>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/20/master-process-2.0-en.png"/>
+</div>
+<p>Start process activity diagram</p>
+<p>Version 2.0.1 enhanced the system's processing capabilities by optimizing the kernel, thereby greatly improving
+performance. The new UI interface also greatly improved the user experience. More importantly, there are two major
+changes in version 2.0.1: plug-in and refactoring.
+<a href="https://dolphinscheduler.apache.org/en-us/docs/latest/user_doc/guide/upgrade.html">https://dolphinscheduler.apache.org/en-us/docs/latest/user_doc/guide/upgrade.html</a></p>
+<h2>01 Plug-in</h2>
+<p>Previously, some users had feedback that they hoped that Apache DolphinScheduler could be optimized for plug-inization.
+In respond, Apache DolphinScheduler 2.0.1 has optimized plug-in function, adding alarm plug-ins, registry plug-ins, and
+task plug-in management functions. With plug-in, users can meet their own functional needs more flexibly, customize
+development task components based on interfaces more simply, and seamlessly migrate user task components to a higher
+version of DolphinScheduler. DolphinScheduler is in the process of microkernel + plug-in architecture improvement. All
+core capabilities such as tasks, alarm components, data sources, resource storage, registry, etc. will be designed as
+extension points. We hope to improve the flexibility and friendliness of Apache DolphinScheduler itself through SPI. The
+related code can refer to the dolphinscheduler-spi module, and the extended interfaces of related plug-ins are also
+under this module. When users need to deploy the plug-in of related functions, it is recommended to read the code of
+this module first. Of course, it is also recommended that you read the document to save time. We have adopted an
+excellent front-end module form-create, which supports the generation of front-end UI components based on json. If
+plug-in development involves the front-end, we will use json to generate related front-end UI modules. The plug-in
+parameters are encapsulated in org.apache.dolphinscheduler.spi.params, which converts all relevant parameters into
+corresponding json. This means that you can completely draw front-end modules (mainly refers to forms) by Java.</p>
+<h3>1 Alarm plug-in</h3>
+<p>Taking the alert plug-in as an example, Apache DolphinScheduler 2.0.1 enables the loading of related plug-ins when the
+alert-server starts. Alert provides a variety of plug-in configuration methods and currently has built-in alert plug-ins
+such as Email, DingTalk, EnterpriseWeChat, and Script. When the plug-in module development work is completed, it can be
+enabled through a simple configuration.</p>
+<h3>2 Multi-registry modules</h3>
+<p>In Apache DolphinScheduler 1.X, the Zookeeper module plays a very important role , including monitoring and discovery of
+master/worker services, disconnection alarms, fault tolerance notification and so on. In version 2.0.1, we gradually &quot;
+de-ZK&quot; in the registry, weakening the role of Zookeeper, and adding plug-in management functions. In plug-in management,
+users can increase the support of registry centers such as ETCD, making Apache Dolphinscheduler more flexible and
+adaptable to more complex user needs.</p>
+<h3>3 Task module plugin</h3>
+<p>The new version also adds the task plug-in function, which enhances the isolation function of different task components.
+When a user develops a custom plug-in, he only needs to implement the plug-in interface. It mainly includes creating
+tasks (task initialization, task running, etc.) and task cancellation.</p>
+<p>If it is a Yarn task, you need to implement AbstractYarnTask. At present, developers need to use Vue to develop and
+deploy the front end of the task plug-in. In subsequent versions, we will implement the automatic drawing of front-end
+modules by Java.</p>
+<h2>02 Refactor</h2>
+<p>So far, Apache DolphinScheduler has refactored about 70% of the code and achieved a comprehensive upgrade.</p>
+<h3>1 Master core optimization</h3>
+<p>In the upgrade, we refactor the execution process of the Master, changing the previous state polling monitoring to an
+event notification mechanism, which greatly reduces the polling pressure of the database; removing the global lock,
+adding the fragmentation processing mechanism of the Master, and changing the sequence Read and write commands to
+parallel processing, which enhances the horizontal scalability of the Master; optimizes the workflow processing flow
+reduces the use of the thread pool and greatly increases the number of workflows processed by a single Master; adds the
+cache mechanism, optimizes the database connection method, and simplifies the processing process, reducing unnecessary
+time-consuming operations, etc.</p>
+<h3>2 Workflow and task decoupling</h3>
+<p>In Apache DolphinScheduler 1.x version, tasks and task relationships are saved in the workflow definition table in the
+form of large json. If a workflow is very large, (for example reaches 100 to 1000 tasks), the json will be too big to be
+parsed when in use. This process is more performance-consuming, and tasks cannot be reused; on the other hand, there is
+no good implementation solution in workflow version and task version for big json.</p>
+<p>Therefore, in the new version, we have decoupled the workflow and tasks, added a correlation chart between tasks and
+workflow, and added a log table to save the historical version of workflow definitions and task definition, which
+Improves the efficiency of workflow operation.</p>
+<p>The operation flow chart of the workflow and tasks under the API module are shown as below:</p>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/20/3.png"/>
+</div>
+<h2>03 Automatic Version Upgrade Function</h2>
+<p>Automatic version upgrade finally comes true in version 2.0.1. The users can automatically upgrade Apache
+DolphinScheduler from version 1. x to version 2.0.1 by one line usage script, and you can use the new version to run the
+previous workflow without perception:</p>
+<pre><code>sh ./script/create-dolphinscheduler.sh
+</code></pre>
+<p>For specific upgrade documentation, please refer to:</p>
+<p><a href="https://dolphinscheduler.apache.org/en-us/docs/latest/user_doc/guide/upgrade.html">https://dolphinscheduler.apache.org/en-us/docs/latest/user_doc/guide/upgrade.html</a></p>
+<p>In addition, future versions of Apache DolphinScheduler can be automatically upgraded, saving the trouble of manual
+upgrades.</p>
+<h2>04 List of New Features</h2>
+<p>Details of the new features of Apache DolphinScheduler 2.0.1 are as follows:</p>
+<h3>1 New Standalone service</h3>
+<p>StandAlone Server is a service created to allow users to quickly experience the product. The registry and database
+H2-DataBase and Zk-TestServer are built-in. After modification, you can start StandAloneServer with one key to
+debugging.</p>
+<p>If you want a quick experience, after decompressing the installation package, you only need to configure the JDK
+environment to start the Apache DolphinScheduler system with one click, thereby reducing configuration costs and
+improving R&amp;D efficiency.</p>
+<p>For detailed usage documentation, please refer to:</p>
+<p><a href="https://dolphinscheduler.apache.org/en-us/docs/latest/user_doc/guide/installation/standalone.html">https://dolphinscheduler.apache.org/en-us/docs/latest/user_doc/guide/installation/standalone.html</a></p>
+<p>Or use Docker to deploy all services with one
+click: <a href="https://dolphinscheduler.apache.org/en-us/docs/latest/user_doc/guide/installation/docker.html">https://dolphinscheduler.apache.org/en-us/docs/latest/user_doc/guide/installation/docker.html</a></p>
+<h3>2 Task parameter transfer function</h3>
+<p>Currently, the transfer between shell tasks and sql tasks is supported. Passing parameters between shell tasks:
+Set an out variable &quot;trans&quot; in the previous &quot;create_parameter&quot; task: echo'${setValue(trans=hello trans)}'</p>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/17/323f6a18d8a1d2f2d8fdcb5687c264b5.png"/>
+</div>
+Once Keyword: "${setValue(key=value)}" is detected in the task log of the current task, the system will automatically parse the variable transfer value, in the post-task, you can directly use the "trans" variable:
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/17/8be29339b73b594dc05a6b832d9330ec.png"/>
+</div>
+<p>The parameter passing of the SQL task:
+The name of the custom variable prop of the SQL task needs to be consistent with the field name, and the variable will
+select the value corresponding to the column with the same variable name in the column name in the SQL query result. The
+output of user number:</p>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/17/85bc5216c01ca958cdf11d4bd555c8a6.png"/>
+</div>
+<p>Use the variable &quot;cnt&quot; in downstream tasks:</p>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/17/4278d0b7f833b64f24fc3d6122287454.png"/>
+</div>
+<p>2.0.1 adds switch task and pigeon task components:</p>
+<ul>
+<li>switch task</li>
+</ul>
+<p>Setting the judgment condition in the switch task can realize the effect of running different conditional branches
+according to different conditional judgment results. For example, there are three tasks, the dependency is A -&gt; B
+-&gt; [C, D], where task_a is the shell task and task_b is the switch task.</p>
+<p>In task A, a global variable named id is defined through a global variable, and the declaration method
+is <code>echo'${setValue(id=1)}'</code>.</p>
+<p>Task B adds conditions and uses the global variables declared upstream to achieve conditional judgment (global variables
+that exist when the Switch is running are just fine, which means that they can be global variables that are not directly
+generated upstream). Next, we set id as 1, run task C, and others run task D.</p>
+<p>Configure task C to run when the global variable id=1. Then edit ${id} == 1 in the condition of task B, and select C for
+branch circulation. For other tasks, select D in the branch circulation.</p>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/17/636f53ddc809f028ffdfc18fd08b5828.md.jpg"/>
+</div>
+<p>-pigeon task</p>
+<p>The pigeon task is a task component that can be docked with third-party systems. It can trigger task execution, cancel
+task execution, obtain task status, and obtain task logs. The pigeon task needs to configure the API address of the
+above task operation and the corresponding interface parameters in the configuration file. Enter a target task name in
+the task component to connect to the third-party system and can operate the task of the third-party system in Apache
+DolphinScheduler.</p>
+<h3>3 Adds environmental management function</h3>
+<p>The default environment configuration is dolphinscheduler_env.sh.</p>
+<p>Configure the worker running environment online. A worker can specify multiple environments, and each environment is
+equivalent to the dolphinscheduler_env.sh file.</p>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/17/ef8b444c6dbebe397daaaa3bbadf743f.png"/>
+</div>
+<p>When creating a task, select the worker group and the corresponding environment variables. When the task is executed,
+the worker will execute the task in the corresponding execution environment.</p>
+<h2>05 Optimization item</h2>
+<h3>1 Optimize the RestApi</h3>
+<p>We have updated the new RestApi specification and re-optimized the API part by the specification, making it easier for
+users to use the API.</p>
+<h3>2 Optimize the workflow version management</h3>
+<p>We optimized the workflow version management function and increased the historical version of the workflow and tasks.</p>
+<h3>3 Optimize worker group management function</h3>
+<p>In version 2.0, the worker group management function is completed. Users can modify the group information of the worker
+through the page configuration, saving the troubåle to modify the configuration file on the server and restart the
+worker.</p>
+<p>After the optimization, each worker node will belong to its worker group, and be grouped to default by default. When the
+task is executed, the task can be assigned to the designated worker group, and finally run by the worker node in the
+group.</p>
+<p>There are two ways to modify the worker group:</p>
+<p>Open the &quot;conf/worker.properties&quot; configuration file on the worker node to be grouped, and modify the worker. groups
+parameter. The worker group to which the worker belongs can be modified during operation. If the modification is
+successful, the worker will use this newly created group, ignoring the configuration in worker. properties. Modify step
+by step: Security Center -&gt; Worker Group Management -&gt; Click'New Worker Group' -&gt; Enter'Group Name' -&gt; Select Existing
+Worker -&gt; Click'Submit'.</p>
+<p>Other optimization issues:</p>
+<p>When starting the workflow, you can modify the startup parameters; Added workflow state automatically-launching when
+saving the workflow; Optimized the results returned by the API, and speeded up the page loading speed when creating a
+workflow; Speeded ​​up the loading of workflow instance pages; Optimized the display information of the workflow
+relationship page; Optimized the import and export function, supporting cross-system import and export workflow;
+Optimized some API operations, such as adding several interface methods, task deletion check, etc.</p>
+<h2>06 Changelogs</h2>
+<p>In addition, Apache DolphinScheduler 2.0.1 also fixes some bugs, including:</p>
+<p>Fixed the problem that netty client would create multiple pipes; Fixed the problem of importing workflow definition
+errors; Fixed the problem that the task code would be obtained repeatedly; Fix the problem that the Hive data source
+connection fails when Kerberos is used; Fix the problem that the Standalone service fails to start; Fix the problem that
+the alarm group display failure; Fix the problem of abnormal file upload; Fix the problem that the Switch task fails to
+run; Fix the problem of invalid workflow timeout strategy; Fix the problem that the SQL task cannot send mail.</p>
+<h2>07 Acknowledgements</h2>
+<p>Thanks to the 289 community contributors who participated in the optimization and improvement of version 2.0.1 (in no
+particular order)!</p>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/17/2020b4f57e33734414a11149704ded92.png"/>
+</div>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/17/1825b6945d5845233b7389479ba6c074.png"/>
+</div>
+</section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png"/><im [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/blog.md.f25cabd.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/blog/Apache-DolphinScheduler-2.0.1.json b/en-us/blog/Apache-DolphinScheduler-2.0.1.json
new file mode 100644
index 0000000..cc8cc6a
--- /dev/null
+++ b/en-us/blog/Apache-DolphinScheduler-2.0.1.json
@@ -0,0 +1,10 @@
+{
+  "filename": "Apache-DolphinScheduler-2.0.1.md",
+  "__html": "<h2>Apache DolphinScheduler 2.0.1 is here, and the highly anticipated one-click upgrade and plug-in finally come!</h2>\n<p>Good news! Apache DolphinScheduler 2.0.1 version is officially released today!</p>\n<p>In this version, DolphinScheduler has undergone a microkernel + plug-in architecture improvement, 70% of the code has\nbeen refactored, and the long-awaited plug-in function has also been emphatically optimized. In addition, there are many\nhighlights in this upgrade,  [...]
+  "link": "/dist/en-us/blog/Apache-DolphinScheduler-2.0.1.html",
+  "meta": {
+    "title": "Apache DolphinScheduler 2.0.1 is here, and the highly anticipated one-click upgrade and plug-in finally come!",
+    "keywords": "Apache,DolphinScheduler,scheduler,big data,ETL,airflow,hadoop,orchestration, dataops,2.0.1",
+    "description": "Good news! Apache DolphinScheduler 2.0.1 version is officially released today!"
+  }
+}
\ No newline at end of file
diff --git a/en-us/blog/Apache_dolphinScheduler_2.0.2.html b/en-us/blog/Apache_dolphinScheduler_2.0.2.html
new file mode 100644
index 0000000..6db76e3
--- /dev/null
+++ b/en-us/blog/Apache_dolphinScheduler_2.0.2.html
@@ -0,0 +1,122 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="Apache,DolphinScheduler,scheduler,big data,ETL,airflow,hadoop,orchestration,dataops,2.0.2">
+  <meta name="description" content="In the long-awaited, WorkflowAsCode function is finally launched in version 2.0.2 as promised, bringing good news to users who need to dynamically create and update workflows in batches.">
+  <title>Apache DolphinScheduler 2.0.2  Release Announcement:WorkflowAsCode is Launched!</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+  <link rel="stylesheet" href="/build/blog.md.055b3f1.css">
+</head>
+<body>
+  <div id="root"><div class="blog-detail-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light ant-m [...]
+<div align=center>
+<img src="/img/2022-1-13/1_3XcwBeN5HkBzZ76zXDcigw.jpeg"/>
+</div>
+<p>In the long-awaited, WorkflowAsCode function is finally launched in version 2.0.2 as promised, bringing good news to users who need to dynamically create and update workflows in batches.</p>
+<p>In addition, the new version also adds the WeCom alarm group chat message push, simplifies the metadata initialization process, and fixes issues that existed in the former version, such as failure of service restart after forced termination, and the failure to add a Hive data source.</p>
+<h2>New Function</h2>
+<h3>WorkflowAsCode</h3>
+<p>First of all, in terms of new functions, version 2.0.2 released PythonGatewayServer, which is a Workflow-as-code server started in the same way as apiServer and other services.</p>
+<p>When PythonGatewayServer is enabled, all Python API requests are sent to PythonGatewayServer. Workflow-as-code lets users create workflows through the Python API, which is great news for users who need to create and update workflows dynamically and in batches. Workflows created with Workflow-as-code can be viewed in the web UI just like other workflows.</p>
+<p>The following is a Workflow-as-code test case:</p>
+<pre><code class="language-py"><span class="hljs-comment"># Define workflow properties, including name, scheduling period, start time, tenant, etc.</span>
+
+<span class="hljs-keyword">with</span> ProcessDefinition(
+    name=<span class="hljs-string">&quot;tutorial&quot;</span>,
+    schedule=<span class="hljs-string">&quot;0 0 0 * * ? *&quot;</span>,
+    start_time=<span class="hljs-string">&quot;2021-01-01&quot;</span>,
+    tenant=<span class="hljs-string">&quot;tenant_exists&quot;</span>,
+) <span class="hljs-keyword">as</span> pd:
+    <span class="hljs-comment"># Define 4 tasks, which are all shell tasks, the required parameters of shell tasks are task name, command information, here are all the shell commands of echo   </span>
+
+    task_parent = Shell(name=<span class="hljs-string">&quot;task_parent&quot;</span>, command=<span class="hljs-string">&quot;echo hello pydolphinscheduler&quot;</span>)
+    task_child_one = Shell(name=<span class="hljs-string">&quot;task_child_one&quot;</span>, command=<span class="hljs-string">&quot;echo &#x27;child one&#x27;&quot;</span>)
+    task_child_two = Shell(name=<span class="hljs-string">&quot;task_child_two&quot;</span>, command=<span class="hljs-string">&quot;echo &#x27;child two&#x27;&quot;</span>)
+    task_union = Shell(name=<span class="hljs-string">&quot;task_union&quot;</span>, command=<span class="hljs-string">&quot;echo union&quot;</span>)
+
+    <span class="hljs-comment"># Define dependencies between tasks</span>
+    <span class="hljs-comment"># Here, task_child_one and task_child_two are first declared as a task group through python&#x27;s list</span>
+    task_group = [task_child_one, task_child_two]
+    <span class="hljs-comment"># Use the set_downstream method to declare the task group task_group as the downstream of task_parent, and declare the upstream through set_upstream</span>
+    task_parent.set_downstream(task_group)
+
+    <span class="hljs-comment"># Use the bit operator &lt;&lt; to declare the task_union as the downstream of the task_group, and support declaration through the bit operator &gt;&gt;</span>
+    task_union &lt;&lt; task_group
+
+</code></pre>
+<p>When the above code runs, you can see workflow in the web UI as follows:</p>
+<pre><code class="language---&gt;">                / \
+task_parent --&gt; --&gt; task_union
+                \ /
+                  --&gt; task_child_two
+</code></pre>
+<h3>2 Wecom alarm mode supports group chat message push</h3>
+<p>In the previous version, the WeChat alarm only supported the message notification; in version 2.0.2, when the user uses the Wecom alarm, it supports pushing the group chat message in the app to the user.</p>
+<h2>02 Optimization</h2>
+<h3>1 Simplified metadata initialization process</h3>
+<p>When Apache DolphinScheduler is first installed, running <a href="http://create-dolphinscheduler.sh">create-dolphinscheduler.sh</a> requires a step  by step upgrade from the oldest version to the current version. In order to initialize the metadata process more conveniently and quickly, version 2.0.2 allows users to directly install the current version of the database script, which improves the installation speed.</p>
+<h3>2 Remove &quot;+1&quot; (days) in complement dates</h3>
+<p>Removed the &quot;+1&quot; day in the complement date to avoid user confusion when the UI date always displays +1 when the complement is added.</p>
+<h2>03 Bug Fixes</h2>
+<p>[#7661] fix logger memory leak in worker
+[#7750] Compatible with historical version data source connection information
+[#7705] Memory constraints cause errors when upgrading from 1.3.5 to 2.0.2
+[#7786] Service restart fails after a forced termination
+[#7660] Process definition version create time is wrong
+[#7607] Failed to execute PROCEDURE node
+[#7639] Add default configuration of quartz and zookeeper in common configuration items
+[#7654] In the dependency node, an error is reported when there is an option that does not belong to the current project
+[#7658] Workflow replication error
+[#7609] Workflow is always running when worker sendResult succeeds but the master does not receive error report
+[#7554] H2 in Standalone Server will automatically restart after a few minutes, resulting in abnormal data loss
+[#7434] Error reported when executing MySQL table creation statement
+[#7537] Dependent node retry delay does not work
+[#7392] Failed to add a Hive data source</p>
+<p>Download: <a href="https://dolphinscheduler.apache.org/zh-cn/download/download.html">https://dolphinscheduler.apache.org/zh-cn/download/download.html</a>
+Release Note: <a href="https://github.com/apache/dolphinscheduler/releases/tag/2.0.2">https://github.com/apache/dolphinscheduler/releases/tag/2.0.2</a></p>
+<h2>04 Thanks</h2>
+<p>As always, we would like to thank all the contributors (in no particular order) who have worked to polish Apache DolphinScheduler 2.0.2 as a better platform. It is your wisdom and efforts to make it more in line with the needs of users.</p>
+<div align=center>
+<img src="/img/2022-1-13/1_IFBxUh2I0LFWF3Jkwz1e5g.png"/>
+</div>
+<h2>The Way to Join US</h2>
+<p>There are many ways to participate and contribute to the DolphinScheduler community, including:
+Documents, translation, Q&amp;A, tests, codes, articles, keynote speeches, etc.</p>
+<p>We assume the first PR (document, code) to contribute to be simple and should be used to familiarize yourself with the submission process and community collaboration style.</p>
+<p>So the community has compiled the following list of issues suitable for novices: <a href="https://github.com/apache/dolphinscheduler/issues/5689">https://github.com/apache/dolphinscheduler/issues/5689</a>
+List of non-newbie issues: <a href="https://github.com/apache/dolphinscheduler/issues?q=is%3Aopen+is%3Aissue+label%3A%22volunteer+wanted%22">https://github.com/apache/dolphinscheduler/issues?q=is%3Aopen+is%3Aissue+label%3A&quot;volunteer+wanted&quot;</a>
+How to participate in the contribution: <a href="https://dolphinscheduler.apache.org/en-us/community/development/contribute.html">https://dolphinscheduler.apache.org/en-us/community/development/contribute.html</a></p>
+<p>Community Official Website:
+<a href="https://dolphinscheduler.apache.org/">https://dolphinscheduler.apache.org/</a>
+GitHub Code repository:
+<a href="https://github.com/apache/dolphinscheduler">https://github.com/apache/dolphinscheduler</a>
+Your Star for the project is important, don’t hesitate to lighten a Star for Apache DolphinScheduler ❤️</p>
+</section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png"/><im [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/blog.md.f25cabd.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/blog/Apache_dolphinScheduler_2.0.2.json b/en-us/blog/Apache_dolphinScheduler_2.0.2.json
new file mode 100644
index 0000000..6817e70
--- /dev/null
+++ b/en-us/blog/Apache_dolphinScheduler_2.0.2.json
@@ -0,0 +1,10 @@
+{
+  "filename": "Apache_dolphinScheduler_2.0.2.md",
+  "__html": "<h1>Apache DolphinScheduler 2.0.2  Release Announcement:WorkflowAsCode is Launched!</h1>\n<div align=center>\n<img src=\"/img/2022-1-13/1_3XcwBeN5HkBzZ76zXDcigw.jpeg\"/>\n</div>\n<p>In the long-awaited, WorkflowAsCode function is finally launched in version 2.0.2 as promised, bringing good news to users who need to dynamically create and update workflows in batches.</p>\n<p>In addition, the new version also adds the WeCom alarm group chat message push, simplifies the metadat [...]
+  "link": "/dist/en-us/blog/Apache_dolphinScheduler_2.0.2.html",
+  "meta": {
+    "title": "Apache DolphinScheduler 2.0.2  Release Announcement:WorkflowAsCode is Launched!",
+    "keywords": "Apache,DolphinScheduler,scheduler,big data,ETL,airflow,hadoop,orchestration,dataops,2.0.2",
+    "description": "In the long-awaited, WorkflowAsCode function is finally launched in version 2.0.2 as promised, bringing good news to users who need to dynamically create and update workflows in batches."
+  }
+}
\ No newline at end of file
diff --git a/en-us/blog/Apache_dolphinScheduler_2.0.3.html b/en-us/blog/Apache_dolphinScheduler_2.0.3.html
new file mode 100644
index 0000000..0be4e3c
--- /dev/null
+++ b/en-us/blog/Apache_dolphinScheduler_2.0.3.html
@@ -0,0 +1,119 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="Apache,DolphinScheduler,scheduler,big data,ETL,airflow,hadoop,orchestration,dataops,2.0.3">
+  <meta name="description" content="Today, Apache DolphinScheduler announced the official release of version 2.0.3. In this version,">
+  <title>Apache DolphinScheduler 2.0.3 Release Announcement: DingTalk alert plugin adds signature verification, and supports data sources to obtain links from multiple sessions</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+  <link rel="stylesheet" href="/build/blog.md.055b3f1.css">
+</head>
+<body>
+  <div id="root"><div class="blog-detail-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light ant-m [...]
+<div align=center>
+<img src="/img/2.0.3/2022-1-2701/1.png"/>
+</div>
+<blockquote>
+<p>Today, Apache DolphinScheduler announced the official release of version 2.0.3. In this version, DingTalk alert plugin adds signature verification and enables data sources to get links from multiple sessions. In addition, 2.0.3 also optimizes cache management, complement time, data source password display in logs, etc., and fixes several Bug.</p>
+</blockquote>
+<h2>Function Enhancement</h2>
+<h3>DingTalk alert plugin adds signature verification</h3>
+<p>2.0.3 Supports DingTalk robot alarm function through signature verification.</p>
+<div align=center>
+<img src="/img/2.0.3/2022-1-2701/2.png"/>
+</div>
+<p><strong>DingTalk parameter configuration</strong></p>
+<ul>
+<li>Webhooks</li>
+</ul>
+<p>The format is as follows: <a href="https://oapi.dingtalk.com/robot/send?access_token=XXXXXX">https://oapi.dingtalk.com/robot/send?access_token=XXXXXX</a></p>
+<ul>
+<li>Keyword</li>
+</ul>
+<p>Custom keywords for security settings</p>
+<ul>
+<li>Secret</li>
+</ul>
+<p>Signature of security settings</p>
+<p>When a custom bot sends a message, you can specify the &quot;@person list&quot; by your mobile phone number. When a person in the &quot;@people list&quot; receives the message, there will be an @message reminder. Even set to Do Not Disturb mode, there will still be notification reminders for conversations, and the prompt &quot;Someone @ you&quot; will appear on the first screen.</p>
+<ul>
+<li>@Mobiles</li>
+</ul>
+<p>The phone number of the person being @</p>
+<ul>
+<li>@UserIds</li>
+</ul>
+<p>User userid of @person</p>
+<ul>
+<li>@All</li>
+</ul>
+<p>@everyone</p>
+<p>For details, please refer to: <a href="https://open.dingtalk.com/document/robots/customize-robot-security-settings">https://open.dingtalk.com/document/robots/customize-robot-security-settings</a></p>
+<h3>Supports data source to get connection from multi sessions</h3>
+<p>Previously, we use the JdbcDataSourceProvider.createOneSessionJdbcDataSource() method to create a connection pool in hive/impala set MaximumPoolSize=1, while in scheduling tasks, if hive/impala multitasking runs at the same time, getConnection=null will occur, and the SqlTask.prepareStatementAndBind() method will throw a null pointer exception.</p>
+<p>2.0.3 is optimized to support data sources getting links from multiple sessions.</p>
+<h2>Improvements</h2>
+<h3>Introduces cache manager, reduce DB query in Master scheduling</h3>
+<p>Since numerous database read operations, such as tenant, user, processDefinition, etc., will occur during the scheduling process of the master server, it will bring enormous pressure on the DB on the one hand, and will slow down the entire core scheduling process on the other hand.</p>
+<p>Considering that this part of business data involves more reading than writing, 2.0.3 introduces a cache module, which mainly acts on the Master node to cache business data such as tenants and workflow definitions, thus reduces database query pressure, and speeds up the core scheduling process. Please check the official website documentation for details: <a href="https://dolphinscheduler.apache.org/en-us/docs/latest/user_doc/architecture/cache.html">https://dolphinscheduler.apache.org [...]
+<h3>Optimize complement task's date, the complement time interval from '[left, right)' to '[left, right]'</h3>
+<p>Previously, the complement time was &quot;left closed and right open&quot; (startDate &lt;= N &lt; endDate), which is actually not conducive to user understanding. After optimization, the deployment time interval is changed to &quot;closed left and closed right&quot;.</p>
+<p>Complement case: <a href="https://dolphinscheduler.apache.org/en-us/docs/latest/user_doc/guide/project/workflow-definition.html">https://dolphinscheduler.apache.org/en-us/docs/latest/user_doc/guide/project/workflow-definition.html</a></p>
+<h3>Encrypted data source password in the logs</h3>
+<p>The password in the data source is encrypted to enhance privacy protection.</p>
+<h2>Bug Fixes</h2>
+<ul>
+<li>zkRoot in conf/config/install_ config does not take effect</li>
+<li>Problems caused by modifying the administrator user information.</li>
+<li>Add delete workflow instance when delete process definition</li>
+<li>udf sub resource manage edit modal cant close</li>
+<li>process is always running: netty writeAndFlush without retry when failed, leads to worker response to master failed</li>
+<li>After deleting the running workflow, the master keeps brushing the error log</li>
+<li>Edit the bug of worker grouping in environment management.</li>
+<li>Dependent node ui dislocation</li>
+<li>Error in querying historical version information of workflow</li>
+<li>Solve the problem that task log output affects performance under high concurrency</li>
+<li>The global parameters of the sub_process node are not passed to the associated workflow task</li>
+<li>Query log can not show contents when task log in master on k8s</li>
+<li>Duplicate processes in the process definition list</li>
+<li>Process instance is always running: task is failure when process instance FailureStrategy.END</li>
+<li>Field ‘is_directory’ in t_ds_resources table has error type in PostgreSQL database</li>
+<li>Repair JDBC connection of Oracle</li>
+<li>When there is a forbidden node in dag, the execution flow is abnormal</li>
+<li>QuerySimpleList return wrong projectCode</li>
+</ul>
+<p><strong>Release Note:</strong> <a href="https://github.com/apache/dolphinscheduler/releases/tag/2.0.3">https://github.com/apache/dolphinscheduler/releases/tag/2.0.3</a></p>
+<p><strong>Download:</strong> <a href="https://dolphinscheduler.apache.org/en-us/download/download.html">https://dolphinscheduler.apache.org/en-us/download/download.html</a></p>
+<h2>Thanks to contributors</h2>
+<p>Thanks to the community contributors for their active contributions to this release! This is the list of Contributors, in no particular order:</p>
+<div align=center>
+<img src="/img/2.0.3/2022-1-2701/3.png"/>
+</div>
+</section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png"/><im [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/blog.md.f25cabd.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/blog/Apache_dolphinScheduler_2.0.3.json b/en-us/blog/Apache_dolphinScheduler_2.0.3.json
new file mode 100644
index 0000000..cc24a7a
--- /dev/null
+++ b/en-us/blog/Apache_dolphinScheduler_2.0.3.json
@@ -0,0 +1,10 @@
+{
+  "filename": "Apache_dolphinScheduler_2.0.3.md",
+  "__html": "<h1>Apache DolphinScheduler 2.0.3 Release Announcement: DingTalk alert plugin adds signature verification, and supports data sources to obtain links from multiple sessions</h1>\n<div align=center>\n<img src=\"/img/2.0.3/2022-1-2701/1.png\"/>\n</div>\n<blockquote>\n<p>Today, Apache DolphinScheduler announced the official release of version 2.0.3. In this version, DingTalk alert plugin adds signature verification and enables data sources to get links from multiple sessions. In [...]
+  "link": "/dist/en-us/blog/Apache_dolphinScheduler_2.0.3.html",
+  "meta": {
+    "title": "Apache DolphinScheduler 2.0.3 Release Announcement: DingTalk alert plugin adds signature verification, and supports data sources to obtain links from multiple sessions",
+    "keywords": "Apache,DolphinScheduler,scheduler,big data,ETL,airflow,hadoop,orchestration,dataops,2.0.3",
+    "description": "Today, Apache DolphinScheduler announced the official release of version 2.0.3. In this version,"
+  }
+}
\ No newline at end of file
diff --git a/en-us/blog/Awarded_most_popular_project_in_2021.html b/en-us/blog/Awarded_most_popular_project_in_2021.html
new file mode 100644
index 0000000..1de65ca
--- /dev/null
+++ b/en-us/blog/Awarded_most_popular_project_in_2021.html
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="Apache,DolphinScheduler,scheduler,big data,ETL,airflow,hadoop,orchestration,dataops,2021">
+  <meta name="description" content="Recently, the &#34;2021 OSC Best China Open Source Projects Poll」initiated by OSCHINA announced the selection results.">
+  <title>Apache DolphinScheduler Won the「2021 OSC Most Popular Projects」award, and Whaleops Open Source Technology Received the honor of「Outstanding Chinese Open Source Original Startups」!</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+  <link rel="stylesheet" href="/build/blog.md.055b3f1.css">
+</head>
+<body>
+  <div id="root"><div class="blog-detail-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light ant-m [...]
+<div align=center>
+<img src="https://s1.imgpp.com/2022/01/07/_1ca0eca926145ffc5f05f15b6b612a2b_64635.jpg"/>
+</div>
+<p>Recently, the &quot;2021 OSC Best China Open Source Projects Poll」initiated by OSCHINA announced the selection results.</p>
+<p>With the love and support of the users and the open-source community, the cloud-native distributed big data scheduler Apache DolphinScheduler was awarded the 「OSCHINA Popularity Index Top 50 Open Source Projects」and 「Most Popular Projects」in 2021. And Its commercial operating company Whaleops Open Source Technology also was awarded the &quot;Outstanding Chinese Open Source Native Startup&quot; for its outstanding open-source operation performance.</p>
+<h2>Won the Honor of「Most Popular Projects」</h2>
+<p>This year, the 「2021 OSC Best China Open Source Projects Poll&quot; set up two rounds of voting. The first round of voting selected the 「OSCHINA Popularity Index TOP 50 Open Source Projects」based on the number of votes. The second round of voting was conducted based on the TOP 50 projects in the first round, and 30 &quot;Most Popular Projects&quot; were selected.</p>
+<p>In the first round of voting, OSCHINA selected TOP 5 of 7 major categories of  projects (basic Software, Cloud-Native, Front-end, DevOps, Development Frameworks and Tools, AI &amp; Big Data, IoT &amp; 5G) based on the number of votes. Apache DolphinScheduler stood out in the &quot;cloud-native&quot; category and was on the list for its excellent cloud-native capabilities.</p>
+<p>After the fierce competition in the second round of voting, Apache DolphinScheduler won again and was rewarded the &quot;Most Popular Project&quot;.</p>
+<h2>Whaleops Open Source Technology Won the 「Outstanding Chinese Open Source Native Startups」 Award</h2>
+<p>&quot;OSC China Open Source Project Poll&quot; organized by Open Source China (OSCHINA, OSC Open Source Community) is the most authoritative and grandest open source project campaign in China. It aims to showcase the status quo of domestic open-source, explore domestic open source trends, and inspire domestic open-source talents, sequentially to promote the improvement of the domestic open source ecosystem.</p>
+<p>China's open-source software ecosystem is booming. In recent years, numerous outstanding open source software startups have emerged. They have beared original aspirations in mind to contribute to China's open-source software development, deeply cultivated in open-source to gave back to the community, and became an important force that cannot be ignored in the global open-source software ecosystem.</p>
+<p>To appreciate these open source startups for their outstanding contributions to the open-source community, and to let more developers know and understand these high-quality open-source startup teams that have set a good example for Chinese open-source entrepreneurs, OSCHINA specially set up the &quot;Excellent Chinese Open Source Native Startups&quot; award in this year’s poll.</p>
+<p>&quot;Open Source Native Startups&quot; refer to companies established based on open source projects and operate around the following business models:</p>
+<p>The team provides commercial services around self-built open source projects, or
+The team provides commercial services based on upstream open source projects</p>
+<p>OSCHINA has evaluated open-source native commercial companies in their entrepreneurial stage from the perspective of the company's related open source project communities status, the technical field development prospects of the company's related open source projects, and the company's development status. After professional evaluation, Whaleops Open Source Technology was rewaded the 「Excellent Chinese Open Source Native Startups」award.</p>
+<h2>About Apache DolphinScheduler</h2>
+<p>Apache DolphinScheduler is a top-level project incubated by the Apache Software Foundation. As a new generation of distributed big data workflow task scheduler, it is committed to &quot;solving the intricate dependencies between big data tasks and making the entire data process intuitive and visible&quot;. DolphinScheduler assembles Tasks in the form of DAG (Directed Acyclic Graph), which can monitor the running status of tasks in real-time. At the same time, it supports operations su [...]
+<p>So far, the Apache DolphinScheduler community consists of 280+ experienced code contributors and 110+ non-code contributors, including PMC or Committer from other top Apache projects. Since its creation, the Apache DolphinScheduler open source community has continued to grow, and the WeChat user base has reached 6000+ people. As of January 2022, 600+ companies and institutions have adopted Apache DolphinScheduler in their production environments.</p>
+<p>Finally, we would like to thank OSCHINA for recognizing Apache DolphinScheduler and its commercial operating company Whaleops Open Source Technology, especially to every participant that is inseparable in the community build-up.</p>
+<p>In the future, we believe the community will scale new heights with this valuable honor, as well as the joint force of every contributor!</p>
+<h2>The Way to Join US</h2>
+<p>There are many ways to participate and contribute to the DolphinScheduler community, including:
+Documents, translation, Q&amp;A, tests, codes, articles, keynote speeches, etc.</p>
+<p>We assume the first PR (document, code) to contribute to be simple and should be used to familiarize yourself with the submission process and community collaboration style.</p>
+<ul>
+<li>
+<p>So the community has compiled the following list of issues suitable for novices: <a href="https://github.com/apache/dolphinscheduler/issues/5689">https://github.com/apache/dolphinscheduler/issues/5689</a></p>
+</li>
+<li>
+<p>List of non-newbie issues: <a href="https://github.com/apache/dolphinscheduler/issues?q=is%3Aopen+is%3Aissue+label%3A%22volunteer+wanted%22">https://github.com/apache/dolphinscheduler/issues?q=is%3Aopen+is%3Aissue+label%3A&quot;volunteer+wanted&quot;</a></p>
+</li>
+<li>
+<p>How to participate in the contribution: <a href="https://dolphinscheduler.apache.org/en-us/community/development/contribute.html">https://dolphinscheduler.apache.org/en-us/community/development/contribute.html</a></p>
+</li>
+<li>
+<p>Community Official Website
+<a href="https://dolphinscheduler.apache.org/">https://dolphinscheduler.apache.org/</a></p>
+</li>
+<li>
+<p>GitHub Code repository: <a href="https://github.com/apache/dolphinscheduler">https://github.com/apache/dolphinscheduler</a></p>
+</li>
+</ul>
+<p>Your Star for the project is important, don’t hesitate to lighten a Star for <a href="https://github.com/apache/dolphinscheduler">Apache DolphinScheduler</a> ❤️</p>
+</section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png"/><im [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/blog.md.f25cabd.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/blog/Awarded_most_popular_project_in_2021.json b/en-us/blog/Awarded_most_popular_project_in_2021.json
new file mode 100644
index 0000000..e249686
--- /dev/null
+++ b/en-us/blog/Awarded_most_popular_project_in_2021.json
@@ -0,0 +1,10 @@
+{
+  "filename": "Awarded_most_popular_project_in_2021.md",
+  "__html": "<h1>Apache DolphinScheduler Won the「2021 OSC Most Popular Projects」award, and Whaleops Open Source Technology Received the honor of「Outstanding Chinese Open Source Original Startups」!</h1>\n<div align=center>\n<img src=\"https://s1.imgpp.com/2022/01/07/_1ca0eca926145ffc5f05f15b6b612a2b_64635.jpg\"/>\n</div>\n<p>Recently, the &quot;2021 OSC Best China Open Source Projects Poll」initiated by OSCHINA announced the selection results.</p>\n<p>With the love and support of the users [...]
+  "link": "/dist/en-us/blog/Awarded_most_popular_project_in_2021.html",
+  "meta": {
+    "title": "Apache DolphinScheduler Won the「2021 OSC Most Popular Projects」award, and Whaleops Open Source Technology Received the honor of「Outstanding Chinese Open Source Original Startups」!",
+    "keywords": "Apache,DolphinScheduler,scheduler,big data,ETL,airflow,hadoop,orchestration,dataops,2021",
+    "description": "Recently, the \"2021 OSC Best China Open Source Projects Poll」initiated by OSCHINA announced the selection results."
+  }
+}
\ No newline at end of file
diff --git a/en-us/blog/Board_of_Directors_Report.html b/en-us/blog/Board_of_Directors_Report.html
new file mode 100644
index 0000000..09a5bdc
--- /dev/null
+++ b/en-us/blog/Board_of_Directors_Report.html
@@ -0,0 +1,126 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="Apache,DolphinScheduler,scheduler,big data,ETL,airflow,hadoop,orchestration,dataops,Board Report">
+  <meta name="description" content="ince graduating from the Apache Incubator on March 17, 2021">
+  <title>Apache DolphinScheduler Board Report: Community Runs Well, Commit Number Grows over 123%</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+  <link rel="stylesheet" href="/build/blog.md.055b3f1.css">
+</head>
+<body>
+  <div id="root"><div class="blog-detail-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light ant-m [...]
+<div align=center>
+<img src="/img/2022-1-13/640.png"/>
+</div>
+<p>Since graduating from the Apache Incubator on March 17, 2021, Apache DolphinScheduler has grown with the community for ten months. With the joint participation of the community, Apache DolphinScheduler has grown into a mature scheduling system product that has been tested in the production environment of hundreds of enterprises after several iterations.</p>
+<p>What progress has Apache DolphinScheduler made in nearly a year? Today we're going to review the changes that have taken place in the Apache DolphinScheduler and its community with this Apache report.</p>
+<h2>Base Data:</h2>
+<p>Founded: 2021-03-17 (10 months ago)
+Chair: Lidong Dai
+Reporting schedule: January, April, July, October
+Next report date: Wed Jan 19 2022
+Community Health Score (Chi): 7.55 (Healthy)</p>
+<h2>Project Composition:</h2>
+<ul>
+<li>There are currently 39 committers and 16 PMC members in this project.</li>
+<li>The Committer-to-PMC ratio is roughly 5:2.</li>
+</ul>
+<h2>Community changes, past quarter:</h2>
+<ul>
+<li>No new PMC members. Last addition was Calvin Kirs on 2021-05-07.</li>
+<li>ShunFeng Cai was added as committer on 2021-12-18</li>
+<li>Zhenxu Ke was added as committer on 2021-12-12</li>
+<li>Wang Xingjie was added as committer on 2021-11-24</li>
+<li>Yizhi Wang was added as committer on 2021-12-15</li>
+<li>Jiajie Zhong was added as committer on 2021-12-12</li>
+</ul>
+<h2>Community Health Metrics:</h2>
+<ul>
+<li>Notable mailing list trends</li>
+<li>Commit activity</li>
+<li>GitHub PR activity</li>
+<li>GitHub issues</li>
+<li>Busiest GitHub issues/PRs</li>
+</ul>
+<h2>Notable mailing list trends:</h2>
+<p><a href="mailto:dev@dolphinscheduler.apache.org">dev@dolphinscheduler.apache.org</a> had a 64% increase in traffic in the past quarter (297 emails compared to 181):</p>
+<div align=center>
+<img src="/img/2022-1-13/640-1.png"/>
+</div>
+<h2>Commit activity:</h2>
+<ul>
+<li>972 commits in the past quarter (123% increase)</li>
+<li>88 code contributors in the past quarter (25% increase)</li>
+</ul>
+<div align=center>
+<img src="/img/2022-1-13/640-2.png"/>
+</div>
+<h2>GitHub PR activity:</h2>
+<ul>
+<li>824 PRs opened on GitHub, past quarter (89% increase)</li>
+<li>818 PRs closed on GitHub, past quarter (100% increase)</li>
+</ul>
+<div align=center>
+<img src="/img/2022-1-13/640-3.png"/>
+</div>
+<h2>GitHub issues:</h2>
+<ul>
+<li>593 issues opened on GitHub, past quarter (90% increase)</li>
+<li>608 issues closed on GitHub, past quarter (155% increase)</li>
+</ul>
+<div align=center>
+<img src="/img/2022-1-13/640-4.png"/>
+</div>
+<h2>Busiest GitHub issues/PRs:</h2>
+<ul>
+<li>dolphinscheduler/pull/6894[Improvement][Logger]Logger server integrate into worker server(15 comments)</li>
+<li>dolphinscheduler/pull/6744[Bug][SnowFlakeUtils] fix snowFlake bug(15 comments)</li>
+<li>dolphinscheduler/pull/6674[Feature][unittest] Recover UT in AlertPluginManagerTest.java [closes: #6619](15 comments)</li>
+<li>dolphinscheduler/issues/7039[Bug] [Task Plugin] hive sql execute failed(14 comments)</li>
+<li>dolphinscheduler/pull/6782[improvement] improve <a href="http://install.sh">install.sh</a> if then statement(13 comments)</li>
+<li>dolphinscheduler/issues/7485[Bug] [dolphinscheduler-datasource-api] Failed to create hive datasource using ZooKeeper way in 2.0.1(13 comments)</li>
+<li>dolphinscheduler/pull/7214[DS-7016][feat] Auto create workflow while import sql script with specific hint(12 comments)</li>
+<li>dolphinscheduler/pull/6708[FIX-#6505][Dao] upgrade the MySQL driver package for building MySQL jdbcUrl(12 comments)</li>
+<li>dolphinscheduler/pull/7515[6696/1880][UI] replace node-sass with dart-sass(12 comments)</li>
+<li>dolphinscheduler/pull/6913Use <a href="http://docker.scarf.sh">docker.scarf.sh</a> to track docker user info(12 comments)</li>
+</ul>
+<h2>The Way to Join US</h2>
+<p>There are many ways to participate and contribute to the DolphinScheduler community, including:
+Documents, translation, Q&amp;A, tests, codes, articles, keynote speeches, etc.</p>
+<p>We assume the first PR (document, code) to contribute to be simple and should be used to familiarize yourself with the submission process and community collaboration style.</p>
+<p>So the community has compiled the following list of issues suitable for novices: <a href="https://github.com/apache/dolphinscheduler/issues/5689">https://github.com/apache/dolphinscheduler/issues/5689</a>
+List of non-newbie issues: <a href="https://github.com/apache/dolphinscheduler/issues?q=is%3Aopen+is%3Aissue+label%3A%22volunteer+wanted%22">https://github.com/apache/dolphinscheduler/issues?q=is%3Aopen+is%3Aissue+label%3A&quot;volunteer+wanted&quot;</a>
+How to participate in the contribution: <a href="https://dolphinscheduler.apache.org/en-us/community/development/contribute.html">https://dolphinscheduler.apache.org/en-us/community/development/contribute.html</a>
+Community Official Website
+<a href="https://dolphinscheduler.apache.org/">https://dolphinscheduler.apache.org/</a>
+GitHub Code repository: <a href="https://github.com/apache/dolphinscheduler">https://github.com/apache/dolphinscheduler</a>
+Your Star for the project is important, don’t hesitate to lighten a Star for Apache DolphinScheduler ❤️</p>
+</section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png"/><im [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/blog.md.f25cabd.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/blog/Board_of_Directors_Report.json b/en-us/blog/Board_of_Directors_Report.json
new file mode 100644
index 0000000..a1613fb
--- /dev/null
+++ b/en-us/blog/Board_of_Directors_Report.json
@@ -0,0 +1,10 @@
+{
+  "filename": "Board_of_Directors_Report.md",
+  "__html": "<h1>Apache DolphinScheduler Board Report: Community Runs Well, Commit Number Grows over 123%</h1>\n<div align=center>\n<img src=\"/img/2022-1-13/640.png\"/>\n</div>\n<p>Since graduating from the Apache Incubator on March 17, 2021, Apache DolphinScheduler has grown with the community for ten months. With the joint participation of the community, Apache DolphinScheduler has grown into a mature scheduling system product that has been tested in the production environment of hund [...]
+  "link": "/dist/en-us/blog/Board_of_Directors_Report.html",
+  "meta": {
+    "title": "Apache DolphinScheduler Board Report: Community Runs Well, Commit Number Grows over 123%",
+    "keywords": "Apache,DolphinScheduler,scheduler,big data,ETL,airflow,hadoop,orchestration,dataops,Board Report",
+    "description": "ince graduating from the Apache Incubator on March 17, 2021"
+  }
+}
\ No newline at end of file
diff --git a/en-us/blog/DAG.html b/en-us/blog/DAG.html
new file mode 100644
index 0000000..7415d2a
--- /dev/null
+++ b/en-us/blog/DAG.html
@@ -0,0 +1,209 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="DAG">
+  <meta name="description" content="DAG">
+  <title>DAG</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+  <link rel="stylesheet" href="/build/blog.md.055b3f1.css">
+</head>
+<body>
+  <div id="root"><div class="blog-detail-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light ant-m [...]
+<h3>Reviewing the basics:</h3>
+<h4>Graph traversal:</h4>
+<p>A graph traversal is a visit to all the vertices in a graph once and only once, starting from a vertex in the graph and following some search method along the edges of the graph.</p>
+<p>Note : the tree is a special kind of graph, so tree traversal can actually be seen as a special kind of graph traversal.</p>
+<h4>There are two main algorithms for graph traversal</h4>
+<h5>Breadth First Search (BFS)</h5>
+<p>The basic idea: first visit the starting vertex v, then from v, visit each of v's unvisited adjacent vertices w1, w2 , ... ,wi, then visit all the unvisited adjacent vertices of w1, w2, ... , wi in turn; from these visited vertices, visit all their unvisited adjacent vertices until all vertices in the graph have been visited. and from these visited vertices, visit all their unvisited adjacent vertices, until all vertices in the graph have been visited. If there are still vertices in t [...]
+<h5>Depth First Search (DFS)</h5>
+<p>The basic idea: first visit a starting vertex v in the graph, then from v, visit any vertex w~1~ that is adjacent to v and has not been visited, then visit any vertex w~2~ that is adjacent to w~1~ and has not been visited ...... Repeat the above process. When it is no longer possible to go down the graph, go back to the most recently visited vertex, and if it has adjacent vertices that have not been visited, continue the search process from that point until all vertices in the graph h [...]
+<h4>Example</h4>
+<p>In the diagram below, if the breadth first search (BFS) is used, the traversal is as follows: <code>1 2 5 3 4 6 7</code>. If the depth first search (DFS) is used, the traversal is as follows <code>1 2 3 4 5 6 7</code>.</p>
+<p><img src="https://github.com/apache/dolphinscheduler-website/blob/master/img/DAG/DAG01.png?raw=true" alt="DAG01"></p>
+<h3>Topological Sorting</h3>
+<p>The definition of topological ordering on Wikipedia is :</p>
+<p>For any Directed Acyclic Graph (DAG), the topological sorting is a linear sorting of all its nodes (there may be multiple such node sorts in the same directed graph). This sorting satisfies the condition that for any two nodes U and V in the graph, if there is a directed edge pointing from U to V, then U must appear ahead of V in the topological sorting.</p>
+<p><strong>In layman's terms: Topological sorting is a linear sequence of all vertices of a directed acyclic graph (DAG), which must satisfy two conditions :</strong></p>
+<ul>
+<li>Each vertex appears and only appears once.</li>
+<li>If there is a path from vertex A to vertex B, then vertex A appears before vertex B in the sequence.</li>
+</ul>
+<p><strong>How to find out its topological sort? Here is a more commonly used method :</strong></p>
+<p>Before introducing this method, it is necessary to add the concepts of indegree and outdegree of a directed graph node.</p>
+<p>Assuming that there is no directed edge whose starting point and ending point are the same node in a directed graph, then:</p>
+<p>In-degree: Assume that there is a node V in the graph, and the in-degree is the number of edges that start from other nodes and end at V. That is, the number of all directed edges pointing to V.</p>
+<p>Out-degree: Assuming that there is a node V in the directed graph, the out-degree is the number of edges that currently have a starting point of V and point to other nodes. That is, the number of edges issued by V.</p>
+<ol>
+<li>Select a vertex with an in-degree of 0 from the DAG graph and output it.</li>
+<li>Delete the vertex and all directed edges starting with it from the graph.</li>
+<li>Repeat 1 and 2 until the current DAG graph is empty or there are no vertices of degree 0 in the current graph. The latter case indicates that a ring must exist in the directed graph.</li>
+</ol>
+<p><strong>For example, the following DAG graph :</strong></p>
+<p><img src="https://github.com/apache/dolphinscheduler-website/blob/master/img/DAG/DAG02.png?raw=true" alt="DAG02"></p>
+<table>
+<thead>
+<tr>
+<th>Node</th>
+<th>in degree</th>
+<th>out degree</th>
+<th>count of in degree</th>
+<th>count of out degree</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>Node 1</td>
+<td>0</td>
+<td>Node 2,Node 4</td>
+<td>0</td>
+<td>2</td>
+</tr>
+<tr>
+<td>Node 2</td>
+<td>Node 1</td>
+<td>Node 3,Node 4</td>
+<td>1</td>
+<td>2</td>
+</tr>
+<tr>
+<td>Node 3</td>
+<td>Node 2,Node 4</td>
+<td>Node 5</td>
+<td>2</td>
+<td>1</td>
+</tr>
+<tr>
+<td>Node 4</td>
+<td>Node 1,Node 2</td>
+<td>Node 3,Node 5</td>
+<td>2</td>
+<td>2</td>
+</tr>
+<tr>
+<td>Node 5</td>
+<td>Node 3,Node 4</td>
+<td>0</td>
+<td>2</td>
+<td>0</td>
+</tr>
+</tbody>
+</table>
+<p><strong>Its topological sorting process is:</strong></p>
+<p><img src="https://github.com/apache/dolphinscheduler-website/blob/master/img/DAG/DAG03.png?raw=true" alt="DAG03"></p>
+<p>Therefore, the result of topological sorting is: {1,2,4,3,5}.</p>
+<p>If there is no node 2 —&gt; the arrow of node 4, then it is as follows:</p>
+<p><img src="https://github.com/apache/dolphinscheduler-website/blob/master/img/DAG/DAG04.png?raw=true" alt="DAG04"></p>
+<p>We can get its topological sort as: {1,2,4,3,5} or {1,4,2,3,5}, that is, for the same DAG graph, there may be multiple topological sort results .</p>
+<p>Topological sorting is mainly used to solve the dependency problem in directed graphs.</p>
+<p>**When talking about the implementation, it is necessary to insert the following : **</p>
+<p>From this we can further derive an improved depth first search or breadth first search algorithm to accomplish topological sorting. Taking the breadth first search as an example, the only difference between this improved algorithm and the ordinary breadth first search is that we should save the degree of entry corresponding to each node and select the node with a degree of entry of 0 at each level of the traversal to start the traversal (whereas the ordinary breadth first search has n [...]
+<ol>
+<li>Initialize a Map or similar data structure to save the in-degree of each node.</li>
+<li>For the child nodes of each node in the graph, add 1 to the in-degree of its child nodes.</li>
+<li>Select any node with an in-degree of 0 to start traversal, and add this node to the output.</li>
+<li>For each node traversed, update the in-degree of its child node: subtract 1 from the in-degree of the child node.</li>
+<li>Repeat step 3 until all nodes have been traversed.</li>
+<li>If it is impossible to traverse all the nodes, it means that the current graph is not a directed acyclic graph. There is no topological sort.</li>
+</ol>
+<p><strong>The core Java code for breadth first search topological sorting is as follows :</strong></p>
+<pre><code class="language-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">TopologicalSort</span> </span>{
+  <span class="hljs-comment">/**
+   * Determine whether there is a ring and the result of topological sorting
+   *
+   * Only directed acyclic graph (DAG) has topological sorting
+   * The main methods of breadth first search:
+   *    1、Iterate over all the vertices in the graph, and put the vertices whose in-degree is 0 into the queue.
+   *    2、A vertex is polled from the queue, and the in-degree of the adjacent point of the vertex is updated (minus 1). If the in-degree of the adjacent point is reduced by 1 and then equals to 0, the adjacent point is entered into the queue.
+   *    3、Keep executing step 2 until the queue is empty.
+   * If it is impossible to traverse all the vertics, it means that the current graph is not a directed acyclic graph. There is no topological sort.
+   *
+   *
+   * <span class="hljs-doctag">@return</span> key returns the state, true if successful (no-loop), value if failed (loop), value is the result of topological sorting (could be one of these)
+   */</span>
+  <span class="hljs-keyword">private</span> Map.Entry&lt;Boolean, List&lt;Vertex&gt;&gt; topologicalSort() {
+ <span class="hljs-comment">// Node queue with an in-degree of 0</span>
+    Queue&lt;Vertex&gt; zeroIndegreeVertexQueue = <span class="hljs-keyword">new</span> LinkedList&lt;&gt;();
+    <span class="hljs-comment">// Save the results</span>
+    List&lt;Vertex&gt; topoResultList = <span class="hljs-keyword">new</span> ArrayList&lt;&gt;();
+    <span class="hljs-comment">// Save the nodes whose in-degree is not 0</span>
+    Map&lt;Vertex, Integer&gt; notZeroIndegreeVertexMap = <span class="hljs-keyword">new</span> HashMap&lt;&gt;();
+
+    <span class="hljs-comment">// Scan all nodes and queue vertices with in-degree 0</span>
+    <span class="hljs-keyword">for</span> (Map.Entry&lt;Vertex, VertexInfo&gt; vertices : verticesMap.entrySet()) {
+      Vertex vertex = vertices.getKey();
+      <span class="hljs-keyword">int</span> inDegree = getIndegree(vertex);
+
+      <span class="hljs-keyword">if</span> (inDegree == <span class="hljs-number">0</span>) {
+        zeroIndegreeVertexQueue.add(vertex);
+        topoResultList.add(vertex);
+      } <span class="hljs-keyword">else</span> {
+        notZeroIndegreeVertexMap.put(vertex, inDegree);
+      }
+    }
+    
+ <span class="hljs-comment">// After scanning, there is no node with an in-degree of 0, indicating that there is a loop, and return directly</span>
+    <span class="hljs-keyword">if</span>(zeroIndegreeVertexQueue.isEmpty()){
+      <span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> AbstractMap.SimpleEntry(<span class="hljs-keyword">false</span>, topoResultList);
+    }
+
+    <span class="hljs-comment">// Using the topology algorithm, delete the node with an in-degree of 0 and its associated edges</span>
+    <span class="hljs-keyword">while</span> (!zeroIndegreeVertexQueue.isEmpty()) {
+      Vertex v = zeroIndegreeVertexQueue.poll();
+      <span class="hljs-comment">// Get the adjacent nodes</span>
+      Set&lt;Vertex&gt; subsequentNodes = getSubsequentNodes(v);
+
+      <span class="hljs-keyword">for</span> (Vertex subsequentVertex : subsequentNodes) {
+
+        Integer degree = notZeroIndegreeVertexMap.get(subsequentVertex);
+
+        <span class="hljs-keyword">if</span>(--degree == <span class="hljs-number">0</span>){
+          topoResultList.add(subsequentVertex);
+          zeroIndegreeVertexQueue.add(subsequentVertex);
+          notZeroIndegreeVertexMap.remove(subsequentVertex);
+        }<span class="hljs-keyword">else</span>{
+          notZeroIndegreeVertexMap.put(subsequentVertex, degree);
+        }
+
+      }
+    }
+
+    <span class="hljs-comment">//notZeroIndegreeVertexMap If it is empty, it means there is no ring</span>
+    AbstractMap.SimpleEntry resultMap = <span class="hljs-keyword">new</span> AbstractMap.SimpleEntry(notZeroIndegreeVertexMap.size() == <span class="hljs-number">0</span> , topoResultList);
+    <span class="hljs-keyword">return</span> resultMap;
+
+  }
+}
+</code></pre>
+<p><em>Notice: the output result is one of the topological sorting sequences of the graph.</em></p>
+<p>Every time a vertex is taken from a set with an in-degree of 0, there is no special rule for taking out. The order of taking the vertices will result in a different topological sorting sequence (if the graph has multiple sorting sequences).</p>
+<p>Since each vertex is outputted with the edges starting from it removed. If the graph has V vertices and E edges, the time complexity of the algorithm is typically O(V+E). The final key of the algorithm as implemented here returns the state, true if it succeeds (no rings), with  rings if it fails, and value if there are no rings as the result of topological sorting (which may be one of these). Note that the output is one of the topologically sorted sequences of the graph.</p>
+</section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png"/><im [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/blog.md.f25cabd.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/blog/DAG.json b/en-us/blog/DAG.json
new file mode 100644
index 0000000..c990fc3
--- /dev/null
+++ b/en-us/blog/DAG.json
@@ -0,0 +1,6 @@
+{
+  "filename": "DAG.md",
+  "__html": "<h2>Big Data Workflow Task Scheduling - Directed Acyclic Graph (DAG) for Topological Sorting</h2>\n<h3>Reviewing the basics:</h3>\n<h4>Graph traversal:</h4>\n<p>A graph traversal is a visit to all the vertices in a graph once and only once, starting from a vertex in the graph and following some search method along the edges of the graph.</p>\n<p>Note : the tree is a special kind of graph, so tree traversal can actually be seen as a special kind of graph traversal.</p>\n<h4>T [...]
+  "link": "/dist/en-us/blog/DAG.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/blog/DS-2.0-alpha-release.html b/en-us/blog/DS-2.0-alpha-release.html
new file mode 100644
index 0000000..2c74cdc
--- /dev/null
+++ b/en-us/blog/DS-2.0-alpha-release.html
@@ -0,0 +1,119 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="DS-2.0-alpha-release">
+  <meta name="description" content="DS-2.0-alpha-release">
+  <title>DS-2.0-alpha-release</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+  <link rel="stylesheet" href="/build/blog.md.055b3f1.css">
+</head>
+<body>
+  <div id="root"><div class="blog-detail-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light ant-m [...]
+<div align='center'><img src="https://s1.imgpp.com/2021/11/16/a920be6733a3d99af38d1cdebfcbb3ff.md.png"></div>
+<p>Hello community, good news! After nearly 10 months of joint efforts by more than 100 community contributors, we are happy to announce the release of Apache DolphinScheduler 2.0 alpha. This is the first major version of DolphinScheduler since it entered Apache. It has undergone a number of key updates and optimizations, which means a milestone in the development of DolphinScheduler.
+DolphinScheduler 2.0 alpha mainly refactors the implementation of Master, greatly optimizes the metadata structure and processing flow, adds SPI plug-in capabilities, and improves performance by 20 times. At the same time, the new version has designed a brand new UI interface to bring a better user experience. In addition, 2.0 alpha has newly added and optimized some features that are eagerly demanded in the community, such as parameter transfer, version control, import and export functions.
+Note: The current alpha version does not support automatic upgrades, and we will support this feature in the next version.</p>
+<p>2.0 alpha download link: <a href="https://dolphinscheduler.apache.org/en-us/download/download.html">https://dolphinscheduler.apache.org/en-us/download/download.html</a></p>
+<h2>Optimize the Kernel and Increase Performance By 20 Times</h2>
+<p>Compared with DolphinScheduler 1.3.8, under the same hardware configuration (3 sets of 8-core 16G), 2.0 alpha throughput performance is increased by 20 times, which is mainly due to the reconstruction of the Master, the optimization of master execution process and the workflow processing process, etc. ,including:</p>
+<ul>
+<li>
+<p>Refactor the execution process of the Master, change the previous status polling monitoring to an event notification mechanism, which greatly reduces the pressure of the database polling;
+Remove the global lock, increase the fragmentation processing mechanism of the Master, change the sequential read and write commands to parallel processing, and enhance the horizontal expansion ability of the Master;</p>
+</li>
+<li>
+<p>Optimize the workflow processing process, reduce the use of thread pool, and greatly increase the number of workflows processed by a single Master;
+Increase the caching mechanism to greatly reduce the number of database operations;</p>
+</li>
+<li>
+<p>Optimize the database connection mode, which immensely reduces the time-consuming of database operation;</p>
+</li>
+<li>
+<p>Simplify the processing flow and reduce unnecessary time-consuming operations during the processing.</p>
+</li>
+</ul>
+<h2>UI Components Optimization Brings Brand New UI Interface</h2>
+<div align='center'><img src="https://s1.imgpp.com/2021/11/16/4e4024cbddbe3113f730c5e67f083c4f.md.png"></div>
+<div align='center'><img src="https://s1.imgpp.com/2021/11/16/75e002b21d827aee9aeaa3922c20c13f.md.png"></div>
+<p>UI interface comparison: 1.3.9 (top) VS. 2.0 alpha (bottom)</p>
+<blockquote></blockquote>
+<p>2.0 UI mainly optimized by:</p>
+<ul>
+<li>
+<p>Optimize the display of components: the interface is more concise, and the workflow process display is clearer;</p>
+</li>
+<li>
+<p>Highlight the key content: click the task box can display task details;</p>
+</li>
+<li>
+<p>Enhanced recognizability: The tool bar on the left is marked with names to make the tools easier to identify and easy to operate;</p>
+</li>
+<li>
+<p>Adjust the order of the components: adjust the order of the components to be more in line with user habits.</p>
+</li>
+</ul>
+<p>In addition to changes in performance and UI, DolphinScheduler has also undergone more than 20 new features and bug fixes.</p>
+<h2>List of New Features</h2>
+<ul>
+<li>Task result transfer function</li>
+<li>Added Switch task and Pigeon task components</li>
+<li>Added environmental management function</li>
+<li>Added batch import , export and batch move functions</li>
+<li>New registration center plug-in function</li>
+<li>New task plugin function</li>
+</ul>
+<h2>Optimizations</h2>
+<ul>
+<li>Optimize the alarm group function</li>
+<li>Optimize RestApi</li>
+<li>Optimize workflow version management</li>
+<li>Optimize import and export</li>
+<li>Optimize worker group management function</li>
+<li>Optimize the <a href="http://install.sh">install.sh</a> installation script to simplify the configuration process</li>
+</ul>
+<h2>Bug fix</h2>
+<ul>
+<li>[#6550]The list of environments in the DAG task pop-up window is not updated</li>
+<li>[#6506]Fix <a href="http://install.sh">install.sh</a> for DS 2.0 and add comment to install_config.conf</li>
+<li>[#6497]Shell task can not use user defined environment correctly</li>
+<li>[#6478]Missing history data in complement data mode</li>
+<li>[#6352]override the old process definition when I use the copy workflow feature</li>
+<li>[#6342]Task instance page date backfill bug</li>
+<li>[#5701]When deleting a user, the accessToken associated with the user should also be deleted</li>
+<li>[#4809]cannot get application status when kerberos authentication is enabled</li>
+<li>[#4450]Hive/Spark data sources do not support multi-tenancy when Kerberos authentication is enabled bug</li>
+</ul>
+<h2>Thanks to Contributors</h2>
+<p>The release of DolphinScheduler 2.0 alpha embodies the wisdom and strength of the community contributors. Their active participation and great enthusiasm open the DolphinScheduler 2.0 era!
+Thanks so much for the participation of 100+ contributors (GitHub ID), and we are looking forward to more and more open sourcing enthusiasts joining the DolphinScheduler community co-construction, to contribute yourself to building a more usable big data workflow scheduling platform!</p>
+<div align='center'><img src="https://s1.imgpp.com/2021/11/16/8926d45ead1f735e8cfca0e8142b315f.md.png"></div>
+<p>2.0 List of alpha contributors</p>
+</section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png"/><im [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/blog.md.f25cabd.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/blog/DS-2.0-alpha-release.json b/en-us/blog/DS-2.0-alpha-release.json
new file mode 100644
index 0000000..6c10926
--- /dev/null
+++ b/en-us/blog/DS-2.0-alpha-release.json
@@ -0,0 +1,6 @@
+{
+  "filename": "DS-2.0-alpha-release.md",
+  "__html": "<h1>Refactoring, Plug-in, Performance Improves By 20 times, Apache DolphinScheduler 2.0 alpha Release Highlights Check!</h1>\n<div align='center'><img src=\"https://s1.imgpp.com/2021/11/16/a920be6733a3d99af38d1cdebfcbb3ff.md.png\"></div>\n<p>Hello community, good news! After nearly 10 months of joint efforts by more than 100 community contributors, we are happy to announce the release of Apache DolphinScheduler 2.0 alpha. This is the first major version of DolphinScheduler s [...]
+  "link": "/dist/en-us/blog/DS-2.0-alpha-release.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/blog/DS_run_in_windows.html b/en-us/blog/DS_run_in_windows.html
new file mode 100644
index 0000000..04b5608
--- /dev/null
+++ b/en-us/blog/DS_run_in_windows.html
@@ -0,0 +1,153 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="DS_run_in_windows">
+  <meta name="description" content="DS_run_in_windows">
+  <title>DS_run_in_windows</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+  <link rel="stylesheet" href="/build/blog.md.055b3f1.css">
+</head>
+<body>
+  <div id="root"><div class="blog-detail-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light ant-m [...]
+<ol>
+<li>
+<h2>Download Source Code</h2>
+<p>Official Website: <a href="https://dolphinscheduler.apache.org/en-us/index.html">https://dolphinscheduler.apache.org/en-us/index.html</a></p>
+<p>GitHub Repository: <a href="https://github.com/apache/dolphinscheduler.git">https://github.com/apache/dolphinscheduler.git</a></p>
+<p>Here we use 1.3.6-release tag.</p>
+</li>
+<li>
+<h2>Install Zookeeper on Windows</h2>
+<ol>
+<li>
+<p>Download zookeeper <a href="https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz">https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz</a>.</p>
+</li>
+<li>
+<p>Unzip 'apache-zookeeper-3.6.3-bin.tar.gz'.</p>
+</li>
+<li>
+<p>Create 'data' and 'log' folder under zookeeper directory.</p>
+</li>
+<li>
+<p>Copy the 'zoo_sample.cfg' file in the 'conf' directory, rename it to 'zoo.cfg' and modify the data and log directory settings:</p>
+<pre><code class="language-properties"><span class="hljs-attr">dataDir</span>=<span class="hljs-string">I:\\setup\\apache-zookeeper-3.6.3-bin\\data</span>
+<span class="hljs-attr">dataLogDir</span>=<span class="hljs-string">I:\\setup\\apache-zookeeper-3.6.3-bin\\log</span>
+</code></pre>
+</li>
+<li>
+<p>Run the 'zkServer.cmd' in the bin directory, then run 'zkCli.cmd' to check the running status. Check zookeeper node information under root directory which shows success installation.</p>
+</li>
+</ol>
+</li>
+<li>
+<h2>Set-up Backend Environment</h2>
+<ol>
+<li>
+<p>Create MYSQL database for debugging, named as 'dolphinschedulerKou'.</p>
+</li>
+<li>
+<p>Import Maven project to IDEA, find 'pom.xml' under the root directory and modify the scope of 'mysql-connector-java' to compile.</p>
+</li>
+<li>
+<p>Modify the 'datasource.properties' of module 'dolphinscheduler-dao'.</p>
+<pre><code class="language-properties"><span class="hljs-comment"># mysql</span>
+<span class="hljs-meta">spring.datasource.driver-class-name</span>=<span class="hljs-string">com.mysql.jdbc.Driver</span>
+<span class="hljs-meta">spring.datasource.url</span>=<span class="hljs-string">jdbc:mysql://localhost:3306/dolphinschedulerTest?useUnicode=true&amp;characterEncoding=UTF-8</span>
+<span class="hljs-meta">spring.datasource.username</span>=<span class="hljs-string">root</span>
+<span class="hljs-meta">spring.datasource.password</span>=<span class="hljs-string">rootroot</span>
+</code></pre>
+</li>
+<li>
+<p>Refresh dao module and run the main method of 'org.apache.dolphinscheduler.dao.upgrade.shell.CreateDolphinScheduler', the method will create project needed tables and data automatically.</p>
+</li>
+<li>
+<p>Modify the 'zookeeper.properties' of module 'dolphinscheduler-service'.</p>
+<pre><code class="language-properties"><span class="hljs-meta">zookeeper.quorum</span>=<span class="hljs-string">localhost:2181</span>
+</code></pre>
+</li>
+<li>
+<p>Add standard output in the 'logback-worker.xml', 'logback-master.xml' and 'logback-api.xml'.</p>
+<pre><code class="language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">root</span> <span class="hljs-attr">level</span>=<span class="hljs-string">&quot;INFO&quot;</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">appender-ref</span> <span class="hljs-attr">ref</span>=<span class="hljs-string">&quot;STDOUT&quot;</span>/&gt;</span>  <span class="hljs-comment">&lt;!-- Add Standard Output --&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">appender-ref</span> <span class="hljs-attr">ref</span>=<span class="hljs-string">&quot;APILOGFILE&quot;</span>/&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">appender-ref</span> <span class="hljs-attr">ref</span>=<span class="hljs-string">&quot;SKYWALKING-LOG&quot;</span>/&gt;</span>
+<span class="hljs-tag">&lt;/<span class="hljs-name">root</span>&gt;</span>
+</code></pre>
+</li>
+</ol>
+</li>
+<li>
+<p>Start the MasterServer by execute the main method of 'org.apache.dolphinscheduler.server.master.MasterServer' and VM Options need to be set are:</p>
+<pre><code>-Dlogging.config=classpath:logback-master.xml -Ddruid.mysql.usePingMethod=false
+</code></pre>
+</li>
+<li>
+<p>Start the WorkerServer by execute the main method of 'org.apache.dolphinscheduler.server.worker.WorkerServer' and VM Options need to be set are:</p>
+<pre><code>-Dlogging.config=classpath:logback-worker.xml -Ddruid.mysql.usePingMethod=false
+</code></pre>
+</li>
+<li>
+<p>Start the ApiApplicationServer by execute the main method of 'org.apache.dolphinscheduler.api.ApiApplicationServer' and VM Options need to be set are:</p>
+<pre><code>-Dlogging.config=classpath:logback-api.xml -Dspring.profiles.active=api
+</code></pre>
+</li>
+<li>
+<p>If you need to use the log function, execute the main method of 'org.apache.dolphinscheduler.server.log.LoggerServer'.</p>
+</li>
+<li>
+<p>Backend swagger url: <a href="http://localhost:12345/dolphinscheduler/doc.html?language=en_us&amp;lang=en">http://localhost:12345/dolphinscheduler/doc.html?language=en_us&amp;lang=en</a>.</p>
+</li>
+<li>
+<h2>Set-up Frontend Environment</h2>
+<ol>
+<li>
+<p>Install node (no more details).</p>
+</li>
+<li>
+<p>Enter the folder 'dolphinscheduler-ui' and run.</p>
+<pre><code class="language-shell">npm install
+npm run start
+</code></pre>
+</li>
+<li>
+<p>Visit <a href="http://localhost:8888/">http://localhost:8888</a>.</p>
+</li>
+<li>
+<p>Sign in with admin account.</p>
+<blockquote>
+<p>Username: admin</p>
+<p>Password: dolphinscheduler123</p>
+</blockquote>
+</li>
+</ol>
+</li>
+</ol>
+</section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png"/><im [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/blog.md.f25cabd.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/blog/DS_run_in_windows.json b/en-us/blog/DS_run_in_windows.json
new file mode 100644
index 0000000..b252c0c
--- /dev/null
+++ b/en-us/blog/DS_run_in_windows.json
@@ -0,0 +1,6 @@
+{
+  "filename": "DS_run_in_windows.md",
+  "__html": "<h1>Set-up DolphinScheduler Development Environment and Run Source Code on Windows OS</h1>\n<ol>\n<li>\n<h2>Download Source Code</h2>\n<p>Official Website: <a href=\"https://dolphinscheduler.apache.org/en-us/index.html\">https://dolphinscheduler.apache.org/en-us/index.html</a></p>\n<p>GitHub Repository: <a href=\"https://github.com/apache/dolphinscheduler.git\">https://github.com/apache/dolphinscheduler.git</a></p>\n<p>Here we use 1.3.6-release tag.</p>\n</li>\n<li>\n<h2>Ins [...]
+  "link": "/dist/en-us/blog/DS_run_in_windows.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/blog/DolphinScheduler-Vulnerability-Explanation.html b/en-us/blog/DolphinScheduler-Vulnerability-Explanation.html
new file mode 100644
index 0000000..f23b518
--- /dev/null
+++ b/en-us/blog/DolphinScheduler-Vulnerability-Explanation.html
@@ -0,0 +1,61 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="DolphinScheduler-Vulnerability-Explanation">
+  <meta name="description" content="DolphinScheduler-Vulnerability-Explanation">
+  <title>DolphinScheduler-Vulnerability-Explanation</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+  <link rel="stylesheet" href="/build/blog.md.055b3f1.css">
+</head>
+<body>
+  <div id="root"><div class="blog-detail-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light ant-m [...]
+<p>The Apache DolphinScheduler community mailing list recently reported a vulnerability. Considering that many users have not subscribed to this mailing list, we hereby explain the situation:</p>
+<p>CVE-2021-27644</p>
+<p>Importance: Low</p>
+<p>Scope of impact: The exposed service is on the external network and the internal account is leaked. If none of the above, the user can decide whether to upgrade according to the actual demand.</p>
+<p>Affected version: &lt;1.3.6</p>
+<p>Vulnerability description:</p>
+<p>This problem is caused by a vulnerability in mysql connectorj. Logged-in users of DolphinScheduler (users who are not logged in cannot perform this operation. It is recommended that companies conduct account security specifications)  can fill in malicious parameters that cause security risks on the data source management page-Mysql data source. (Not affected if Mysql data source is not used)</p>
+<p>Repair suggestion: upgrade to version &gt;=1.3.6</p>
+<p>Special thanks to</p>
+<p>Special thanks to the reporter of the vulnerability: Jin Chen from the Ant Security FG Lab, who restored the process of the vulnerability and provided the corresponding solution. The whole process showed the skills and expertise of professional security personnel, thanks for their contributions to the security guard of open source projects.</p>
+<p>Suggest</p>
+<p>Thanks to users for choosing Apache DolphinScheduler as the big data task scheduling system in enterprises, but it must be reminded that the scheduling system belongs to the core infrastructure of big data construction, please do not expose it to the external network. In addition, security measures should be taken for the account of internal personnel in the enterprise to reduce the risk of account leakage.</p>
+<p>Contribute</p>
+<p>So far, the Apache DolphinScheduler community has nearly 200+ code contributors and 70+ non-code contributors. Among them, there are also PMC or Committer of other top Apache projects. We embrace more partners to participate in the development of the open source community, working together to build a more stable, safe and reliable big data task scheduling system, and also contributing yourself to the rise of China's open source!</p>
+<p>WebSite: <a href="https://dolphinscheduler.apache.org/">https://dolphinscheduler.apache.org/</a></p>
+<p>MailList: dev@dolphinscheduler@apache.org</p>
+<p>Twitter: @DolphinSchedule</p>
+<p>YouTube: <a href="https://www.youtube.com/channel/UCmrPmeE7dVqo8DYhSLHa0vA">https://www.youtube.com/channel/UCmrPmeE7dVqo8DYhSLHa0vA</a></p>
+<p>Slack: <a href="https://s.apache.org/dolphinscheduler-slack">https://s.apache.org/dolphinscheduler-slack</a></p>
+<p>Contributor Guide: <a href="https://dolphinscheduler.apache.org/en-us/community/index.html">https://dolphinscheduler.apache.org/en-us/community/index.html</a></p>
+<p>If you have any questions about the vulnerability, welcome to participate in the discussion and we will wholeheartedly resolve your problems.</p>
+</section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png"/><im [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/blog.md.f25cabd.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/blog/DolphinScheduler-Vulnerability-Explanation.json b/en-us/blog/DolphinScheduler-Vulnerability-Explanation.json
new file mode 100644
index 0000000..1f664d7
--- /dev/null
+++ b/en-us/blog/DolphinScheduler-Vulnerability-Explanation.json
@@ -0,0 +1,6 @@
+{
+  "filename": "DolphinScheduler-Vulnerability-Explanation.md",
+  "__html": "<p>[Security Notice] [Low:impact] DolphinScheduler Vulnerability Explanation</p>\n<p>The Apache DolphinScheduler community mailing list recently reported a vulnerability. Considering that many users have not subscribed to this mailing list, we hereby explain the situation:</p>\n<p>CVE-2021-27644</p>\n<p>Importance: Low</p>\n<p>Scope of impact: The exposed service is on the external network and the internal account is leaked. If none of the above, the user can decide whether  [...]
+  "link": "/dist/en-us/blog/DolphinScheduler-Vulnerability-Explanation.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/blog/DolphinScheduler_Kubernetes_Technology_in_action.html b/en-us/blog/DolphinScheduler_Kubernetes_Technology_in_action.html
new file mode 100644
index 0000000..c6bd014
--- /dev/null
+++ b/en-us/blog/DolphinScheduler_Kubernetes_Technology_in_action.html
@@ -0,0 +1,434 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="Apache,DolphinScheduler,scheduler,big data,ETL,airflow,hadoop,orchestration,dataops,Kubernetes">
+  <meta name="description" content="Kubernetes is a cluster system based on container technology">
+  <title>Technical Practice of Apache DolphinScheduler in Kubernetes System</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+  <link rel="stylesheet" href="/build/blog.md.055b3f1.css">
+</head>
+<body>
+  <div id="root"><div class="blog-detail-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light ant-m [...]
+<div align=center>
+<img src="/img/2022-02-24/1.jpeg"/>
+</div>
+<p>Author | Yang Dian, Data and Algorithm Platform Architect | Shenzhen Transportation Center</p>
+<p>Editor | warrior_</p>
+<blockquote>
+<p>Editor's note:</p>
+</blockquote>
+<blockquote>
+<p>Kubernetes is a cluster system based on container technology, implements container orchestration, provides microservices and buses, and involves a large number of knowledge systems.</p>
+</blockquote>
+<blockquote>
+<p>Starting from the author's actual work experience, this article shows us the use and technology sharing of DolphinScheduler in practice scenarios, hoping it can inspire those who have the same experience.</p>
+</blockquote>
+<h2>Why do we use DolphinSchedule? What value does it bring to us? And what problems did we encounter?</h2>
+<p>Apache DolphinScheduler is an excellent distributed and easily scalable visual workflow task scheduling platform.</p>
+<p>In the field I'm working in, the application of DolphinScheduler can quickly solve the top ten pain points of data development for enterprises:</p>
+<ul>
+<li>Multi-source data connection and access, most common data sources in the technical field can be accessed, and adding new data sources does not require too many changes;</li>
+<li>Diversified +specialized + massive data task management, which really revolves problems focusing on big data (Hadoop family, Flink, etc.) task scheduling, and is significantly different from traditional schedulers;</li>
+<li>Graphical task arrangement, super convenient user experience, competitive ability with commercial products, especially to most foreign open source products that cannot directly generate data tasks by dragging and dropping;</li>
+<li>Task details, rich viewing of tasks, log, and time-running axis display, which well meet developers' requirement of refined data tasks management, quickly locating slow SQL and performance bottlenecks;</li>
+<li>Support for a variety of distributed file systems, enrich users' choices for unstructured data;</li>
+<li>Native multi-tenant management to meet the data task management and isolation requirements of large organizations;</li>
+<li>Fully automatic distributed scheduling algorithm to balance all scheduling tasks;</li>
+<li>The native function of cluster monitoring, which can monitor CPU, memory, number of connections, Zookeeper status is suitable for one-stop operation and maintenance for SME;</li>
+<li>The native task alarm function, which minimizes the risk of task operation;</li>
+<li>The strong community-based operation, listening to the real voice of customers, constantly adding new functions, and continuously optimizing the customer experience.</li>
+</ul>
+<p>I also encountered many new challenges in the projects launching various types of Apache DolphinScheduler:</p>
+<ul>
+<li>How to deploy Apache DolphinScheduler with less human resources, and can a fully automatic cluster installation and deployment mode be realized?</li>
+<li>How to standardize technical component implementation specifications?</li>
+<li>Can unmanned supervision and system self-healing be achieved?</li>
+<li>How to install and update the air-gap mode under the network security control?</li>
+<li>Can it automatically expand without disturbing?</li>
+<li>How to build and integrate the monitoring system?</li>
+</ul>
+<p>To solve the above challenges, we repeatedly integrated Apache DolphinScheduler into the existing Kubernetes cloud-native system to tackle problems and make Apache DolphinScheduler technology more powerful.</p>
+<h2>Kubernetes Technical System Bring New Technical Features to Apache DolphinScheduler</h2>
+<p>After using Kubernetes to manage Apache DolphinScheduler, the overall technical solutions are quickly enriched and efficient technical features added, by which the above practical challenges  tackled quickly:</p>
+<ul>
+<li>The development environment and production environment was rapidly established in various independent deployment projects, and all can be implemented by one-key deployment and one-key upgrade;</li>
+<li>Overall supports offline installation, and the installation speed is faster;</li>
+<li>Unify the installation configuration information as much as possible to reduce the abnormal configuration of multiple projects. All configuration items can be managed through the internal git of the enterprise based on different projects;</li>
+<li>Combine with object storage technology to unify unstructured data technology;</li>
+<li>The convenient monitoring system is integrated with the existing prometheus monitoring system;</li>
+<li>Mixed-use of multiple schedulers;</li>
+<li>Fully automatic resource scheduling capability;</li>
+<li>Fast self-healing ability, automatic abnormal restart, and restart mode based on probe mode.</li>
+</ul>
+<p>The cases in this article are based on Apache DolphinScheduler version 1.3.9.</p>
+<h2>Automated and Efficient Deployment Based on Helm tools</h2>
+<p>First, let's introduce the installation method based on the Helm provided by the official website. Helm is the best way to find, share and use software to build Kubernetes, which is one of the graduate projects of cloud-native CNCF.</p>
+<div align=center>
+<img src="/img/2022-02-24/2.png"/>
+</div>
+<p>There are very detailed configuration files and cases on Apache DolphinScheduler official website and GitHub. Here I‘ll highlight some of the FAQs in the community.</p>
+<p>Official website document address
+<a href="https://dolphinscheduler.apache.org/en-us/docs/1.3.9/user_doc/kubernetes-deployment.html">https://dolphinscheduler.apache.org/en-us/docs/1.3.9/user_doc/kubernetes-deployment.html</a></p>
+<p>GitHub folder address
+<a href="https://github.com/apache/dolphinscheduler/tree/1.3.9-release/docker/kubernetes/dolphinscheduler">https://github.com/apache/dolphinscheduler/tree/1.3.9-release/docker/kubernetes/dolphinscheduler</a></p>
+<p>Modify the image in the value.yaml file for offline installation (air-gap install);</p>
+<pre><code>image:
+repository: &quot;apache/dolphinscheduler&quot;
+tag: &quot;1.3.9&quot;
+pullPolicy: &quot;IfNotPresent&quot;
+</code></pre>
+<p>Pull, tag, and push for harbors installed in the company or private warehouses of other public clouds. Here we assume that the private warehouse address is <a href="http://harbor.abc.com">harbor.abc.com</a>, the host where the image is built has been docker login <a href="http://harbor.abc.com">harbor.abc.com</a>, and the new apache project under the private warehouse has been established and authorized.</p>
+<p>execute shell commands</p>
+<pre><code>docker pull apache/dolphinscheduler:1.3.9
+dock tag apache/dolphinscheduler:1.3.9 
+harbor.abc.com/apache/dolphinscheduler:1.3.9
+docker push apache/dolphinscheduler:1.3.9
+</code></pre>
+<p>Then replace the image information in the value file. Here we recommend using the Always method to pull the image. In the production environment, try to check whether it is the latest image content every time to ensure the correctness of the software product. In addition, many coders are used to writing the tag as latest, and making the image without adding the tag information, which is very dangerous in the production environment. Because the image of the latest will be changed once  [...]
+<pre><code>image:
+repository: &quot;harbor.abc.com/apache/dolphinscheduler&quot;
+tag: &quot;1.3.9&quot;
+pullPolicy: &quot;Always&quot;
+</code></pre>
+<p>Copy the entire directory of <a href="https://github.com/apache/dolphinscheduler/tree/1.3.9-release/docker/kubernetes/dolphinscheduler">https://github.com/apache/dolphinscheduler/tree/1.3.9-release/docker/kubernetes/dolphinscheduler</a> to a host that can execute the Helm command, and then execute</p>
+<pre><code>kubectl create ns ds139
+helm install dolphinscheduler . -n ds139 following the official website instruction to install offline.
+</code></pre>
+<p>to install offline.</p>
+<ul>
+<li>To integrate DataX, MySQL, Oracle client components, first download the following components:
+<a href="https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.49/mysql-connector-java-5.1.49.jar">https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.49/mysql-connector-java-5.1.49.jar</a>
+<a href="https://repo1.maven.org/maven2/com/oracle/database/jdbc/ojdbc8/">https://repo1.maven.org/maven2/com/oracle/database/jdbc/ojdbc8/</a>
+<a href="https://github.com/alibaba/DataX/blob/master/userGuid.md">https://github.com/alibaba/DataX/blob/master/userGuid.md</a> Compile</li>
+</ul>
+<p>build and compile according to the prompt, and the file package is located in {DataX_source_code_home}/target/datax/datax/</p>
+<p>Create a new dockerfile based on the above plugin components, and the image that has been pushed to the private warehouse can be applied to the basic image.</p>
+<pre><code>FROM harbor.abc.com/apache/dolphinscheduler:1.3.9
+COPY *.jar /opt/dolphinscheduler/lib/
+RUN mkdir -p /opt/soft/datax
+COPY datax /opt/soft/datax
+</code></pre>
+<p>Save the dockerfile and execute the shell command</p>
+<pre><code>docker build -t harbor.abc.com/apache/dolphinscheduler:1.3.9-mysql-oracle-datax . #Don't forget the last point
+docker push harbor.abc.com/apache/dolphinscheduler:1.3.9-mysql-oracle-datax
+</code></pre>
+<p>Modify the value file</p>
+<pre><code>image:
+repository: &quot;harbor.abc.com/apache/dolphinscheduler&quot;
+tag: &quot;1.3.9-mysql-oracle-datax&quot;
+pullPolicy: &quot;Always&quot;
+</code></pre>
+<p>Execute helm install dolphinscheduler . -n ds139
+or helm upgrade dolphinscheduler -n ds139, or  firstly helm uninstall dolphinscheduler -n ds139, and then execute helm install dolphinscheduler . -n ds139.</p>
+<ul>
+<li>Generally, it is recommended to use an independent external PostgreSQL as the management database in the production environment, and use the independently installed Zookeeper environment (I used the Zookeeper operator  <a href="https://github.com/pravega/zookeeper-operator">https://github.com/pravega/zookeeper-operator</a> in this case, which is scheduled in the same Kubernetes cluster as Apache DolphinScheduler ). We found that after using the external database, completely deleting  [...]
+</ul>
+<pre><code>## If not exists external database, by default, Dolphinscheduler's database will use it.
+postgresql:
+enabled: false
+postgresqlUsername: &quot;root&quot;
+postgresqlPassword: &quot;root&quot;
+postgresqlDatabase: &quot;dolphinscheduler&quot;
+persistence:
+  enabled: false
+  size: &quot;20Gi&quot;
+  storageClass: &quot;-&quot;
+
+## If exists external database, and set postgresql.enable value to false.
+## external database will be used, otherwise Dolphinscheduler's database will be used.
+externalDatabase:
+type: &quot;postgresql&quot;
+driver: &quot;org.postgresql.Driver&quot;
+host: &quot;192.168.1.100&quot;
+port: &quot;5432&quot;
+username: &quot;admin&quot;
+password: &quot;password&quot;
+database: &quot;dolphinscheduler&quot;
+params: &quot;characterEncoding=utf8&quot;
+ 
+## If not exists external zookeeper, by default, Dolphinscheduler's zookeeper will use it.
+zookeeper:
+enabled: false
+fourlwCommandsWhitelist: &quot;srvr,ruok,wchs,cons&quot;
+persistence:
+  enabled: false
+  size: &quot;20Gi&quot;
+  storageClass: &quot;storage-nfs&quot;
+zookeeperRoot: &quot;/dolphinscheduler&quot;
+
+## If exists external zookeeper, and set zookeeper.enable value to false.
+## If zookeeper.enable is false, Dolphinscheduler's zookeeper will use it.
+externalZookeeper:
+zookeeperQuorum: &quot;zookeeper-0.zookeeper-headless.zookeeper.svc.cluster.local:2181,zookeeper-1.zookeeper-headless.zookeeper.svc.cluster.local:2181,zookeeper-2.zookeeper-headless.zookeeper.svc.cluster.local:2181&quot;
+zookeeperRoot: &quot;/dolphinscheduler&quot;
+</code></pre>
+<h2>How to deploy GitOps based on Argo CD</h2>
+<p>Argo CD is a declarative GitOps continuous delivery tool based on Kubernetes. GitOps is an incubation project of CNCF and a best practice tool for GitOps. For more details of GitOps, please refer to <a href="https://about.gitlab.com/topics/gitops/">https://about.gitlab.com/topics/gitops/</a></p>
+<div align=center>
+<img src="/img/2022-02-24/3.png"/>
+</div>
+<p>GitOps can bring the following advantages to the implementation of Apache DolphinScheduler.</p>
+<ul>
+<li>Graphical &amp; one-click installation of clustered software;</li>
+<li>Git records the full release process, one-click rollback;</li>
+<li>Convenient DolphinScheduler tool log viewing.</li>
+</ul>
+<p>Implementation installation steps using Argo CD:</p>
+<ul>
+<li>Download the Apache DolphinScheduler source code from GitHub, modify the value file, and refer to the content that needs to be modified in the helm installation in the previous chapter;</li>
+<li>Create a new git project in the modified source code directory, and push it to the company's internal GitLab. The directory name of the GitHub source code is docker/kubernetes/dolphinscheduler;</li>
+<li>Configure GitLab information in Argo CD, we use https mode here;</li>
+</ul>
+<div align=center>
+<img src="/img/2022-02-24/4.png"/>
+</div>
+<ul>
+<li>Argo CD Create a new deployment project and fill in the relevant information</li>
+</ul>
+<div align=center>
+<img src="/img/2022-02-24/5.png"/>
+</div>
+<div align=center>
+<img src="/img/2022-02-24/6.png"/>
+</div>
+<p>Refresh and pull the deployment information in git to complete the final deployment work. You can see that pod, configmap, secret, service, ingress and other resources are automatically pulled up, and Argo CD displays the commit information and submitter username used by git push before, which completely records all release event information. At the same time, you can also roll back to the historical version with one click.</p>
+<div align=center>
+<img src="/img/2022-02-24/7.png"/>
+</div>
+<div align=center>
+<img src="/img/2022-02-24/8.png"/>
+</div>
+<ul>
+<li>Relevant resource information can be seen through the kubectl command;</li>
+</ul>
+<pre><code>[root@tpk8s-master01 ~]# kubectl get po -n ds139
+NAME READY STATUS RESTARTS AGE
+dolphinscheduler-alert-96c74dc84-72cc9 1/1 Running 0 22m
+dolphinscheduler-api-78db664b7b-gsltq 1/1 Running 0 22m
+dolphinscheduler-master-0 1/1 Running 0 22m
+dolphinscheduler-master-1 1/1 Running 0 22m
+dolphinscheduler-master-2 1/1 Running 0 22m
+dolphinscheduler-worker-0 1/1 Running 0 22m
+dolphinscheduler-worker-1 1/1 Running 0 22m
+dolphinscheduler-worker-2 1/1 Running 0 22m
+
+[root@tpk8s-master01 ~]# kubectl get statefulset -n ds139
+NAME READY AGE
+dolphinscheduler-master 3/3 22m
+dolphinscheduler-worker 3/3 22m
+
+[root@tpk8s-master01 ~]# kubectl get cm -n ds139
+NAME DATA AGE
+dolphinscheduler-alert 15 23m
+dolphinscheduler-api 1 23m
+dolphinscheduler-common 29 23m
+dolphinscheduler-master 10 23m
+dolphinscheduler-worker 7 23m
+
+[root@tpk8s-master01 ~]# kubectl get service -n ds139
+NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
+dolphinscheduler-api ClusterIP 10.43.238.5 &lt;none&gt; 12345/TCP 23m
+dolphinscheduler-master-headless ClusterIP None &lt;none&gt; 5678/TCP 23m
+dolphinscheduler-worker-headless ClusterIP None &lt;none&gt; 1234/TCP,50051/TCP 23m
+
+[root@tpk8s-master01 ~]# kubectl get ingress -n ds139
+NAME CLASS HOSTS ADDRESS
+dolphinscheduler &lt;none&gt; ds139.abc.com
+</code></pre>
+<ul>
+<li>You can see that all pods are scattered on different hosts in the Kubernetes cluster, for example, workers 1 and 2 are on different nodes.</li>
+</ul>
+<div align=center>
+<img src="/img/2022-02-24/9.png"/>
+</div>
+<div align=center>
+<img src="/img/2022-02-24/10.png"/>
+</div>
+<p>We have configured ingress, and the company can easily use the domain name for access by configuring the pan-domain name within the company;</p>
+<div align=center>
+<img src="/img/2022-02-24/11.png"/>
+</div>
+<p>You can log in to the domain name for access:</p>
+<p>http:ds.139.abc.com/dolphinscheduler/ui/#/home</p>
+<ul>
+<li>The specific configuration can modify the content in the value file:</li>
+</ul>
+<pre><code>ingress:
+enabled: true
+host: &quot;ds139.abc.com&quot;
+path: &quot;/dolphinscheduler&quot;
+tls:
+  enabled: false
+  secretName: &quot;dolphinscheduler-tls&quot;
+
+</code></pre>
+<ul>
+<li>It is convenient to view the internal logs of each component of Apache DolphinScheduler:</li>
+</ul>
+<div align=center>
+<img src="/img/2022-02-24/13.png"/>
+</div>
+<ul>
+<li>Check the deployed system, 3 masters, 3 workers, and Zookeeper are all configured normally;</li>
+</ul>
+<div align=center>
+<img src="/img/2022-02-24/14.png"/>
+</div>
+<div align=center>
+<img src="/img/2022-02-24/15.png"/>
+</div>
+<ul>
+<li>Using Argo CD, it is very convenient to modify the number of replicas of components such as master, worker, api, alert, etc. Apache DolphinScheduler's helm configuration also reserves the setting information of CPU and memory. Here we modify the copy value in value. After modification, git push it to the company's internal GitLab.</li>
+</ul>
+<pre><code>master:
+ 
+ ## PodManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down.
+podManagementPolicy: &quot;Parallel&quot;
+ ## Replicas is the desired number of replicas of the given Template.
+replicas: &quot;5&quot;
+ 
+worker:
+ ## PodManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down.
+podManagementPolicy: &quot;Parallel&quot;
+ ## Replicas is the desired number of replicas of the given Template.
+replicas: &quot;5&quot;
+ 
+ 
+alert:
+ ## Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.
+replicas: &quot;3&quot;
+ 
+api:
+ ## Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.
+replicas: &quot;3&quot;
+</code></pre>
+<ul>
+<li>Just click sync on Argo CD to synchronize, and the corresponding pods will be added as required</li>
+</ul>
+<div align=center>
+<img src="/img/2022-02-24/17.png"/>
+</div>
+<div align=center>
+<img src="/img/2022-02-24/18.png"/>
+</div>
+<pre><code>[root@tpk8s-master01 ~]# kubectl get po -n ds139
+NAME                  READY STATUS RESTARTS AGE
+dolphinscheduler-alert-96c74dc84-72cc9 1/1  Running 0    43m
+dolphinscheduler-alert-96c74dc84-j6zdh 1/1  Running 0    2m27s
+dolphinscheduler-alert-96c74dc84-rn9wb 1/1  Running 0    2m27s
+dolphinscheduler-api-78db664b7b-6j8rj 1/1  Running 0    2m27s
+dolphinscheduler-api-78db664b7b-bsdgv 1/1  Running 0    2m27s
+dolphinscheduler-api-78db664b7b-gsltq 1/1  Running 0    43m
+dolphinscheduler-master-0       1/1  Running 0    43m
+dolphinscheduler-master-1       1/1  Running 0    43m
+dolphinscheduler-master-2       1/1  Running 0    43m
+dolphinscheduler-master-3       1/1  Running 0    2m27s
+dolphinscheduler-master-4       1/1  Running 0    2m27s
+dolphinscheduler-worker-0       1/1  Running 0    43m
+dolphinscheduler-worker-1       1/1  Running 0    43m
+dolphinscheduler-worker-2       1/1  Running 0    43m
+dolphinscheduler-worker-3       1/1  Running 0    2m27s
+dolphinscheduler-worker-4       1/1  Running 0    2m27s
+
+</code></pre>
+<h2>Apache DolphinScheduler integrates with S3 Object Storage Technology</h2>
+<p>How to configure the integration of s3 minio is one of the FAQs in the community. Here is the method of helm configuration based on Kubernetes.</p>
+<ul>
+<li>Modify the s3 part of value, it is recommended to use ip+port to point to the minio server.</li>
+</ul>
+<pre><code>common:
+ ##Configmap
+configmap:
+  DOLPHINSCHEDULER_OPTS: &quot;&quot;
+  DATA_BASEDIR_PATH: &quot;/tmp/dolphinscheduler&quot;
+  RESOURCE_STORAGE_TYPE: &quot;S3&quot;
+  RESOURCE_UPLOAD_PATH: &quot;/dolphinscheduler&quot;
+  FS_DEFAULT_FS: &quot;s3a://dfs&quot;
+  FS_S3A_ENDPOINT: &quot;http://192.168.1.100:9000&quot;
+  FS_S3A_ACCESS_KEY: &quot;admin&quot;
+  FS_S3A_SECRET_KEY: &quot;password&quot;
+</code></pre>
+<ul>
+<li>The name of the bucket that stores dolphin files in minio is dolphinscheduler. I create new folders and files for testing here. The directory of the minio is under the tenant of the upload operation.</li>
+</ul>
+<div align=center>
+<img src="/img/2022-02-24/19.png"/>
+</div>
+<h2>Apache DolphinScheduler Integrates with Kube-Prometheus Technology</h2>
+<ul>
+<li>
+<p>We use the Kube-prometheus operator technology in Kubernetes to automatically monitor the resources of each component of  Apache DolphinScheduler after deploying.</p>
+</li>
+<li>
+<p>Please pay attention to that the version of kube-prometheus needs to correspond to the major version of Kubernetes. <a href="https://github.com/prometheus-operator/kube-prometheus">https://github.com/prometheus-operator/kube-prometheus</a></p>
+</li>
+</ul>
+<div align=center>
+<img src="/img/2022-02-24/20.png"/>
+</div>
+<div align=center>
+<img src="/img/2022-02-24/21.png"/>
+</div>
+<div align=center>
+<img src="/img/2022-02-24/22.png"/>
+</div>
+<h2>Technical Integration of Apache DolphinScheduler and Service Mesh</h2>
+<ul>
+<li>Through the service mesh technology, the observability analysis of API external service calls and internal calls of Apache DolphinScheduler can be realized to optimize the Apache DolphinScheduler product services.</li>
+</ul>
+<p>We use linkerd as a service mesh product for integration, which is also one of CNCF's excellent graduate projects.</p>
+<div align=center>
+<img src="/img/2022-02-24/23.png"/>
+</div>
+<p>Just modify the annotations in the value file of the Apache  DolphinScheduler helm and redeploy, you can quickly inject the mesh proxy sidecar, as well as master, worker, API, alert and other components.</p>
+<pre><code>annotations: #{}
+   linkerd.io/inject: enabled
+</code></pre>
+<p>You can observe the quality of service communication between components, the number of requests per second, etc.</p>
+<div align=center>
+<img src="/img/2022-02-24/24.png"/>
+</div>
+<div align=center>
+<img src="/img/2022-02-24/25.png"/>
+</div>
+<h2>Prospects on Apache DolphinScheduler Based on cloud-native Technology</h2>
+<p>As a new-generation Cloud-Native big data tool, Apache DolphinScheduler is expected to integrate more excellent tools and features in the Kubernetes ecosystem in the future to meet more requirements of diversified user groups and scenarios.</p>
+<ul>
+<li>Integration with Argo-workflow, users can call Argo-workflow single job, dag job, and periodic job in Apache DolphinScheduler through api, cli, etc.;</li>
+<li>Use HPA to automatically expand and shrink workers to achieve unattended horizontal expansion;</li>
+<li>Integrate the Spark operator and Flink operator tools of Kubernetes to achieve comprehensive cloud-native;</li>
+<li>Implement multi-cloud and multi-cluster distributed job scheduling, and strengthen the architectural attributes of serverless+faas classes;</li>
+<li>Use sidecar to periodically delete worker job logs to realize carefree operation and maintenance;</li>
+</ul>
+<p>Finally, I strongly recommend you to use Slack to communicate with the Apache DolphinScheduler community, which is officially recommended!</p>
+<div align=center>
+<img src="/img/2022-02-24/26.png"/>
+</div></section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/blog.md.f25cabd.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/blog/DolphinScheduler_Kubernetes_Technology_in_action.json b/en-us/blog/DolphinScheduler_Kubernetes_Technology_in_action.json
new file mode 100644
index 0000000..4ccfc8b
--- /dev/null
+++ b/en-us/blog/DolphinScheduler_Kubernetes_Technology_in_action.json
@@ -0,0 +1,10 @@
+{
+  "filename": "DolphinScheduler_Kubernetes_Technology_in_action.md",
+  "__html": "<h1>Technical Practice of Apache DolphinScheduler in Kubernetes System</h1>\n<div align=center>\n<img src=\"/img/2022-02-24/1.jpeg\"/>\n</div>\n<p>Author | Yang Dian, Data and Algorithm Platform Architect | Shenzhen Transportation Center</p>\n<p>Editor | warrior_</p>\n<blockquote>\n<p>Editor's note:</p>\n</blockquote>\n<blockquote>\n<p>Kubernetes is a cluster system based on container technology, implements container orchestration, provides microservices and buses, and invol [...]
+  "link": "/dist/en-us/blog/DolphinScheduler_Kubernetes_Technology_in_action.html",
+  "meta": {
+    "title": "Technical Practice of Apache DolphinScheduler in Kubernetes System",
+    "keywords": "Apache,DolphinScheduler,scheduler,big data,ETL,airflow,hadoop,orchestration,dataops,Kubernetes",
+    "description": "Kubernetes is a cluster system based on container technology"
+  }
+}
\ No newline at end of file
diff --git a/en-us/blog/Eavy_Info.html b/en-us/blog/Eavy_Info.html
new file mode 100644
index 0000000..8292018
--- /dev/null
+++ b/en-us/blog/Eavy_Info.html
@@ -0,0 +1,91 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="Apache,DolphinScheduler,scheduler,big data,ETL,airflow,hadoop,orchestration, dataops,2.0.1">
+  <meta name="description" content="Based on the Apache DolphinScheduler, the cloud computing and big data provider Eavy Info">
+  <title>Eavy Info Builds Data Asset Management Platform Services Based on Apache DolphinScheduler to Construct Government Information Ecology</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+  <link rel="stylesheet" href="/build/blog.md.055b3f1.css">
+</head>
+<body>
+  <div id="root"><div class="blog-detail-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light ant-m [...]
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/29/1640759432737.png"/>
+</div>
+<p>Based on the Apache DolphinScheduler, the cloud computing and big data provider Eavy Info has been serving the business operations in the company for more than a year.</p>
+<p>Combining with the government affairs informatization ecological construction business, Shandong Eavy Info built the data service module of its self-develop Asset Data Management and Control Platform based on Apache DolphinScheduler. How do they use Apache DolphinScheduler? Sun Hao, the R&amp;D engineer of Evay Information, shared their experiences on their business practice.</p>
+<h2>R&amp;D Background</h2>
+<p>The prime operating of Eavy Info is focusing on ToG business, and data collection &amp; sharing take a large proportion of their work. However, Traditional ETL tools, such as kettle, are not simple and easy enough to get started and employed for on-site project operation and maintenance by the front-line implementers. Therefore, creating a set of data acquisition (synchronization)-data processing-data management platform is particularly important.</p>
+<p>Out of this consideration, we have developed a Data Asset Management Platform, of which the core is a data service module based on Apache DolphinSchduler (referred to as DS below).</p>
+<p>Apache DolphinScheduler is a distributed, decentralized, easy-to-expand visual DAG scheduling system that supports multiple types of tasks including Shell, Python, Spark, Flink, etc., and has good scalability. Its overall structure is shown in the figure below:</p>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/28/1.png"/>
+</div>
+<p>This is a typical master-slave architecture with strong horizontal scalability. The scheduling engine Quartz is a Java open source project of Spring Boot, it is easier to integrate and use for those familiar with Spring Boot development.</p>
+<p>As a scheduling system, DS supports the following functions:</p>
+<p>**Scheduling mode: ** The system supports timing scheduling and manual scheduling based on cron expressions. And it supports command types like workflow starting, execution starting from the current node, the fault-tolerant workflow resume, the paused process resume, execution starting from the failed node, complement, timing, rerun, pause, stop, and resume joinable threads. Among them, restoring the fault-tolerant workflow and restoring the joinable threads are two command types that [...]
+<p><strong>Timing schedule:</strong> The system uses quartz distributed scheduler and supports the visual generation of cron expressions.</p>
+<p>**Dependency: ** The system not only supports the dependency between the simple predecessor and successor nodes of the DAG but also provides task-dependent nodes to support custom task dependencies between processes.</p>
+<p><strong>Priority:</strong> Support the priority of the process instance and task instance. If the priority of the process instance and task instance is not set, the default is first-in-first-out.</p>
+<p>**Email alert: ** Support SQL task query result email sending, process instance running result email alert, and fault tolerance alert notification.</p>
+<p><strong>Failure strategy:</strong> For tasks that run in parallel, if there are tasks that fail, two failure strategy processing methods are provided. <strong>Continue</strong> refers to regardless of the status of the parallel running tasks until the end of the process failure. <strong>End</strong> means that once a failed task is found, the running parallel task will be killed at the same time, and the failed process will end.</p>
+<p><strong>Complement:</strong> Complement historical data, support interval parallel, and serial complement methods.</p>
+<p>Based on Apache DolphinScheduler, we carry out the following practices.</p>
+<h2>Building A Data Synchronization Tool Based on DS</h2>
+<p>In our business scenario, there are many types of business needs for data synchronization, but the amount of data is not particularly large and is real-time-undemanding. So at the beginning of the architecture selection, we chose the combination of Datax+Apache DolphinScheduler and implemented the transformation of the corresponding business. Now it is integrated into various projects as a service product to provide offline synchronization services.</p>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/29/1-1.png"/>
+</div>
+<p>Synchronization tasks are divided into periodic tasks and one-time tasks. After the configuration tasks of the input and output sources, the corn expression needs to be configured for periodic tasks, and then the save interface is called to send the synchronization tasks to the DS scheduling platform.</p>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/29/2-1.png"/>
+</div>
+<p>Synchronization tasks are divided into <strong>periodic tasks</strong> and <strong>one-time tasks</strong>. After the configuration tasks of the input and output sources are configured, the corn expression needs to be configured for periodic tasks, and then the <strong>save interface</strong> is called to send the synchronization tasks to the DS scheduling platform.</p>
+<p>We gave up the previous UI front-end of DS after comprehensive consideration and reused the DS back-end interfaces to carry the online procedure, start and stopping, deleting, and log viewing.</p>
+<p>The design of the entire synchronization module is aimed to reuse the diversity of input and output plugins of the Datax component and integrate with the optimization of DS to achieve an offline synchronization task. This is a component diagram of our current synchronization.</p>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/30/ffd0c839647bcce4c208ee0cf5b7622b.png"/>
+</div>
+<h2>Self Development Practices Based on DS</h2>
+<p>Anyone familiar with Datax knows that it is essentially an ETL tool, which provides a transformer module that supports Groovy syntax, and at the same time further enrich the tool classes used in the transformer in the Datax source code, such as replacing, regular matching, screening, desensitization, statistics, and other functions. That shows its property of Transform. Since the tasks are implemented with DAG diagrams in Apache DolphinScheduler, we wonder that is it possible to abstr [...]
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/30/ffd0c839647bcce4c208ee0cf5b7622b.png"/>
+</div>
+<p>Each component is regarded as a module, and the dependency between the functions of each module is dealt with the dependency of DS. The corresponding component and the component transfer data are stored at the front-end, which means the front-end performs the transfer and logical judgments between most of the components after introducing input (input component) , since each component can be seen as an output/output of Datax. Once all parameters are set, the final output is determined. [...]
+<p>PS: Because our business scenarios may involve cross-database queries (MySQL combined query of different instances), our SQL component uses Presto to implement a unified SQL layer, so that you can also use Presto to do combined retrieval even when data sources are under various IP instances (business-related).</p>
+<h2>Other Attempts</h2>
+<p>People dabble in the governance process know that a simple governance process can lead to a quality report. We write part of the government records into ES, and then use the aggregation capabilities of ES to obtain a quality report.</p>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/29/4da40632c21dbea51d2951d98ee18f1b.png"/>
+</div>
+<p>The above are some practices that we have made based on DS and middlewares like Datax, combining with businesses to meet our own needs.</p>
+<p>From EasyScheduler to the current Apache DolphinScheduler 2.0, we are more often a spectator or follower, but today we shared our practical experience to build data service modules of Data Asset Management and Control Platform based on Apache DolphinScheduler. Currently, we have served the on-site operation of multiple project departments of the company based on the Apache DolphinScheduler scheduling platform for more than a year. With the release of Apache DolphinScheduler 2.0, we ha [...]
+</section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png"/><im [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/blog.md.f25cabd.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/blog/Eavy_Info.json b/en-us/blog/Eavy_Info.json
new file mode 100644
index 0000000..155555d
--- /dev/null
+++ b/en-us/blog/Eavy_Info.json
@@ -0,0 +1,10 @@
+{
+  "filename": "Eavy_Info.md",
+  "__html": "<h1>Eavy Info Builds Data Asset Management Platform Services Based on Apache DolphinScheduler to Construct Government Information Ecology | Use Case</h1>\n<div align=center>\n<img src=\"https://s1.imgpp.com/2021/12/29/1640759432737.png\"/>\n</div>\n<p>Based on the Apache DolphinScheduler, the cloud computing and big data provider Eavy Info has been serving the business operations in the company for more than a year.</p>\n<p>Combining with the government affairs informatizati [...]
+  "link": "/dist/en-us/blog/Eavy_Info.html",
+  "meta": {
+    "title": "Eavy Info Builds Data Asset Management Platform Services Based on Apache DolphinScheduler to Construct Government Information Ecology",
+    "keywords": "Apache,DolphinScheduler,scheduler,big data,ETL,airflow,hadoop,orchestration, dataops,2.0.1",
+    "description": "Based on the Apache DolphinScheduler, the cloud computing and big data provider Eavy Info"
+  }
+}
\ No newline at end of file
diff --git a/en-us/blog/FAQ.html b/en-us/blog/FAQ.html
new file mode 100644
index 0000000..f638d77
--- /dev/null
+++ b/en-us/blog/FAQ.html
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="FAQ">
+  <meta name="description" content="FAQ">
+  <title>FAQ</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+  <link rel="stylesheet" href="/build/blog.md.055b3f1.css">
+</head>
+<body>
+  <div id="root"><div class="blog-detail-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light ant-m [...]
+<p>A: DolphinScheduler is a distributed and extensible workflow scheduler platform with a powerful DAG visual interface. It is dedicated to solving complex task dependencies in data pipelines, making multi types of tasks available out of the box</p>
+<h4>Q: Is DolphinScheduler an ETL tool?</h4>
+<p>A: Apache DolphinScheduler is an open-source visual workflow automation tool used for setting up and maintaining data pipelines.</p>
+<p>DolphinScheduler isn't an ETL tool. but it can helps you manage ETL pipelines and it also integrates some ETL tools like sqoop and datax.</p>
+<h4>Q:What is DolphinScheduler used for?</h4>
+<p>A: Apache DolphinScheduler is a workflow automation and scheduling platform that can be used to assemble and manage data pipelines. Similar systems such as oozie and Azkaban etc</p>
+<h4>Q: Who is using Apache DolphinScheduler?</h4>
+<p>A: more than 400+ companys are using DolphinScheduler as their scheduler platform, some user cases like IBM、Tencent、meituan、Lenovo、Nokia、SHEIN、Inspur、pingan、ICBC and so on</p>
+</section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png"/><im [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/blog.md.f25cabd.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/blog/FAQ.json b/en-us/blog/FAQ.json
new file mode 100644
index 0000000..9e26261
--- /dev/null
+++ b/en-us/blog/FAQ.json
@@ -0,0 +1,6 @@
+{
+  "filename": "FAQ.md",
+  "__html": "<h4>Q: What is Apache DolphinScheduler?</h4>\n<p>A: DolphinScheduler is a distributed and extensible workflow scheduler platform with a powerful DAG visual interface. It is dedicated to solving complex task dependencies in data pipelines, making multi types of tasks available out of the box</p>\n<h4>Q: Is DolphinScheduler an ETL tool?</h4>\n<p>A: Apache DolphinScheduler is an open-source visual workflow automation tool used for setting up and maintaining data pipelines.</p>\ [...]
+  "link": "/dist/en-us/blog/FAQ.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/blog/Introducing-Apache-DolphinScheduler-1.3.9.html b/en-us/blog/Introducing-Apache-DolphinScheduler-1.3.9.html
new file mode 100644
index 0000000..ec8534f
--- /dev/null
+++ b/en-us/blog/Introducing-Apache-DolphinScheduler-1.3.9.html
@@ -0,0 +1,83 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="Introducing-Apache-DolphinScheduler-1.3.9">
+  <meta name="description" content="Introducing-Apache-DolphinScheduler-1.3.9">
+  <title>Introducing-Apache-DolphinScheduler-1.3.9</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+  <link rel="stylesheet" href="/build/blog.md.055b3f1.css">
+</head>
+<body>
+  <div id="root"><div class="blog-detail-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light ant-m [...]
+<p><a href="https://imgpp.com/image/OQFd4"><img src="https://s1.imgpp.com/2021/10/25/_5fc2f5f0697d2457db591583571c1a50_25072.md.jpg" alt="_5fc2f5f0697d2457db591583571c1a50_25072.md.jpg"></a></p>
+<p>On October 22, 2021, we are excited to announce the release of Apache DolphinScheduler 1.3.9. After a month and a half,Apache DolphinScheduler 1.3.9 brings StandaloneServer to users with the joint efforts of the community. StandaloneServer is a major update of this version, which means a huge leap in ease of use, and the details will be introduced below. In addition, this upgrade also fixes two critical bugs in 1.3.8.</p>
+<h2>1.3.9 Download:<a href="https://dolphinscheduler.apache.org/en-us/download/download.html">1.3.9 Download Link</a></h2>
+<p>In 1.3.9, the main updates include:</p>
+<h2>New Features</h2>
+<p><strong>[Feature#6480] Add StandaloneServer to make development and operation easier</strong></p>
+<p>StandaloneServer is a service created to allow users to quickly experience the product. The registry and database H2-DataBase and Zk-TestServer are built-in. Users can start StandaloneServer for debugging with only one line of command.</p>
+<p>The way to start StandaloneServer with one-line command: switch to a user with sudo permission, and run the script</p>
+<pre><code class="language-plain">sh ./bin/dolphinscheduler-daemon.sh start standalone-server
+</code></pre>
+<p>It shows that 1.3.9 reduces the configuration cost through built-in components. You only need to configure the jdk environment to start the DolphinScheduler system with one click, thereby improving the efficiency of research and development. For detailed usage documents, please refer to: link to be added.</p>
+ <img src="/img/login_en.png" width="60%" />
+<p>Access the front page address, interface IP (self-modified) <a href="http://localhost:12345/dolphinscheduler">http://localhost:12345/dolphinscheduler</a>, with the default name and password:admin/dolphinscheduler123.</p>
+<p>The detailed user docs for Standalone, please refer to:<a href="https://dolphinscheduler.apache.org/en-us/docs/1.3.9/user_doc/standalone-server.html">1.3.9 standalone-server</a></p>
+<h2>Optimization and Fix</h2>
+<p><strong>☆[Fix #6337][Task] Sql limit param no default value</strong></p>
+<p>When the SqlTask ​​is executed, if the limit parameter is not set, the displayed result is empty. Based on this, the default parameters have been added in 1.3.9, and relevant instructions have been made on the log to allow users to track the problem more clearly.</p>
+<p><strong>☆[Bug#6429] [ui] sub_process node open sub_task show empty page #6429</strong></p>
+<p>The problem that the sub_task node is displayed as empty has been fixed.</p>
+<h2>Contributor</h2>
+<p>Thanks to PMC Ke Zhenxu from the SkyWalking community for his contribution to StandaloneServer, Apache DolphinScheduler will persistently optimize the function design and enhance the user experience with the participation of more contributors, so stay tuned.</p>
+<h3>1 DolphinScheduler introduction</h3>
+<p>Apache DolphinScheduler is a distributed and extensible workflow scheduler platform with powerful DAG visual interfaces, dedicated to solving complex job dependencies in the data pipeline and providing various types of jobs available out of box.</p>
+<p>DolphinScheduler assembles Tasks in the form of DAG (Directed Acyclic Graph), which can monitor the running status of tasks in real time. At the same time, it supports operations such as retry, recovery from designated nodes, suspend and Kill tasks, and focuses on the following 6 capabilities :</p>
+<img src="https://s1.imgpp.com/2021/10/25/WechatIMG89.md.jpg" width="60%" />
+<h2>2 Partial User Cases</h2>
+<p>According to incomplete statistics, as of October 2020, 600+ companies and institutions have adopted DolphinScheduler in production environments. Partial cases are shown as below (in no particular order).</p>
+<p><a href="https://imgpp.com/image/OQylI"><img src="https://s1.imgpp.com/2021/10/25/logo.md.png" alt="logo.md.png"></a></p>
+<h2>3 Participate in Contribution</h2>
+<p>With the prosperity of open source in China, the Apache DolphinScheduler community ushered in vigorous development. In order to make better and easy-to-use scheduling system, we sincerely welcome partners who love open source to join Apache DolphinScheduler Community.</p>
+<p>There are many ways to participate in and contribute to the Apache DolphinScheduler Community, including:</p>
+<ul>
+<li>Contribute to the first PR (document, code). We hope it to be simple and a try to get yourself familiar with the submission process and community collaboration.</li>
+<li>We have compiled a list of issues suitable for novices: <a href="https://github.com/apache/dolphinscheduler/issues/5689">Good First Issues</a></li>
+<li>And a list of issues for non-newbie: <a href="https://github.com/apache/dolphinscheduler/issues?q=is%3Aopen+is%3Aissue+label%3A%22volunteer+wanted%22">Volunteer Wanted</a></li>
+<li>How to participate in the contribution: <a href="https://dolphinscheduler.apache.org/en-us/community/development/contribute.html">Participate in Contributing</a></li>
+</ul>
+<p>Apache DolphinScheduler Community needs you! Even if a small piece of tile will make a big differnce.</p>
+<p>If you are interested in contributing code we created <a href="https://github.com/apache/dolphinscheduler/issues/5689">Good First Issues </a> to get you started. If you have any questions about <a href="https://github.com/apache/dolphinscheduler">code</a>, <a href="https://dolphinscheduler.apache.org/en-us/download/download.html">installation</a>, and <a href="https://dolphinscheduler.apache.org/en-us/docs/1.3.9/user_doc/quick-start.html">docs</a> please do not hesitate to reach out t [...]
+<p><strong>Community Official Website</strong></p>
+<p><a href="/">https://dolphinscheduler.apache.org/</a></p>
+<p><strong>Code Warehouse Address</strong></p>
+<p><a href="https://github.com/apache/dolphinscheduler">https://github.com/apache/dolphinscheduler</a></p>
+</section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png"/><im [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/blog.md.f25cabd.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/blog/Introducing-Apache-DolphinScheduler-1.3.9.json b/en-us/blog/Introducing-Apache-DolphinScheduler-1.3.9.json
new file mode 100644
index 0000000..162f4f6
--- /dev/null
+++ b/en-us/blog/Introducing-Apache-DolphinScheduler-1.3.9.json
@@ -0,0 +1,6 @@
+{
+  "filename": "Introducing-Apache-DolphinScheduler-1.3.9.md",
+  "__html": "<h1>Introducing Apache DolphinScheduler 1.3.9, StandaloneServer is Available!</h1>\n<p><a href=\"https://imgpp.com/image/OQFd4\"><img src=\"https://s1.imgpp.com/2021/10/25/_5fc2f5f0697d2457db591583571c1a50_25072.md.jpg\" alt=\"_5fc2f5f0697d2457db591583571c1a50_25072.md.jpg\"></a></p>\n<p>On October 22, 2021, we are excited to announce the release of Apache DolphinScheduler 1.3.9. After a month and a half,Apache DolphinScheduler 1.3.9 brings StandaloneServer to users with the [...]
+  "link": "/dist/en-us/blog/Introducing-Apache-DolphinScheduler-1.3.9.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/blog/Json_Split.html b/en-us/blog/Json_Split.html
new file mode 100644
index 0000000..8e3e065
--- /dev/null
+++ b/en-us/blog/Json_Split.html
@@ -0,0 +1,126 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="Json_Split">
+  <meta name="description" content="Json_Split">
+  <title>Json_Split</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+  <link rel="stylesheet" href="/build/blog.md.055b3f1.css">
+</head>
+<body>
+  <div id="root"><div class="blog-detail-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light ant-m [...]
+<h3>The Background</h3>
+<p>Currently DolphinScheduler saves tasks and relationships in process as big json to the process_definition_json field in the process_definiton table in the database. If a process is large, for example, with 1000 tasks, the json field becomes very large and needs to be parsed when using the json, which is very performance intensive and the tasks cannot be reused, so the community plans to start a json splitting project. Encouragingly, we have now completed most of this work, so a summar [...]
+<h3>Summarization</h3>
+<p>The json split project was started on 2021-01-12 and the main development was initially completed by 2021-04-25. The code has been merged into the dev branch. Thanks to lenboo, JinyLeeChina, simon824 and wen-hemin for coding.</p>
+<p>The main changes, as well as the contributions, are as follows:</p>
+<ul>
+<li>Code changes 12793 lines</li>
+<li>168 files modified/added</li>
+<li>145 Commits in total</li>
+<li>There were 85 PRs</li>
+</ul>
+<h3>Review of the split programme</h3>
+<p><img src="https://user-images.githubusercontent.com/42576980/117598604-b1ad8e80-b17a-11eb-9d99-d593fce7bab6.png" alt="拆分方案"></p>
+<ul>
+<li>[ ] When the api module performs a save operation</li>
+</ul>
+<ol>
+<li>The process definition is saved to process_definition (main table) and process_definition_log (log table), both tables hold the same data and the process definition version is 1</li>
+<li>The task definition table is saved to task_definition (main table) and task_definition_log (log table), also saving the same data, with task definition version 1</li>
+<li>process task relationships are stored in the process_task_relation (main table) and process_task_relation_log (log table), which holds the code and version of the process, as tasks are organised through the process and the dag is drawn in terms of the process. The current node of the dag is also known by its post_task_code and post_task_version, the predecessor dependency of this node is identified by pre_task_code and pre_task_version, if there is no dependency, the pre_task_code an [...]
+</ol>
+<ul>
+<li>[ ] When the api module performs an update operation, the process definition and task definition update the main table data directly, and the updated data is inserted into the log table. The main table is deleted and then inserted into the new relationship, and the log table is inserted directly into the new relationship.</li>
+<li>[ ] When the api module performs a delete operation, the process definition, task definition and relationship table are deleted directly from the master table, leaving the log table data unchanged.</li>
+<li>[ ] When the api module performs a switch operation, the corresponding version data in the log table is overwritten directly into the main table.</li>
+</ul>
+<h3>Json Access Solutions</h3>
+<p><img src="https://user-images.githubusercontent.com/42576980/117598643-c9851280-b17a-11eb-9a6e-c81ee083b09c.png" alt="json"></p>
+<ul>
+<li>
+<p>[ ] In the current phase of the splitting scheme, the api module controller layer remains unchanged and the incoming big json is still mapped to ProcessData objects in the service layer. insert or update operations are done in the public Service module through the ProcessService. saveProcessDefiniton() entry in the public Service module, which saves the database operations in the order of task_definition, process_task_relation, process_definition. When saving, the task is changed if i [...]
+</li>
+<li>
+<p>[ ] The data is assembled in the public Service module through the ProcessService.genTaskNodeList() entry, or assembled into a ProcessData object, which in turn generates a json to return</p>
+</li>
+<li>
+<p>[ ] The Server module (Master) also gets the TaskNodeList through the public Service module ProcessService.genTaskNodeList() to generate the dispatch dag, which puts all the information about the current task into the MasterExecThread. readyToSubmitTaskQueue queue in order to generate taskInstance, dispatch to worker</p>
+</li>
+</ul>
+<h2>Phase 2 Planning</h2>
+<h3>API / UI module transformation</h3>
+<ul>
+<li>[ ] The processDefinition interface requests a back-end replacement for processDefinitonCode via processDefinitionId</li>
+<li>[ ] Support for separate definition of task, the current task is inserted and modified through the workflow, Phase 2 needs to support separate definition</li>
+<li>[ ] Frontend and backend controller layer json splitting, Phase 1 has completed the api module service layer to dao json splitting, Phase 2 needs to complete the front-end and controller layer json splitting</li>
+</ul>
+<h3>server module retrofit</h3>
+<ul>
+<li>[ ] Replace process_definition_id with process_definition_code in t_ds_command and t_ds_error_command、t_ds_schedules</li>
+<li>[ ] Generating a taskInstance process transformation</li>
+</ul>
+<p>The current process_instance is generated from the process_definition and schedules and command tables, while the taskInstance is generated from the MasterExecThread. readyToSubmitTaskQueue queue, and the data in the queue comes from the dag object. At this point, the queue and dag hold all the information about the taskInstance, which is very memory intensive. It can be modified to the following data flow, where the readyToSubmitTaskQueue queue and dag hold the task code and version  [...]
+<p><img src="https://user-images.githubusercontent.com/42576980/117598659-d3a71100-b17a-11eb-8fe1-8725299510e6.png" alt="server"></p>
+<hr>
+<p><strong>Appendix: The snowflake algorithm</strong></p>
+<p><strong>snowflake:</strong> is an algorithm for generating distributed, drama-wide unique IDs called <strong>snowflake</strong>, which was created by Twitter and used for tweeting IDs.</p>
+<p>A Snowflake ID has 64 bits. the first 41 bits are timestamps, representing the number of milliseconds since the selected period. The next 10 bits represent the computer ID to prevent conflicts. The remaining 12 bits represent the serial number of the generated ID on each machine, which allows multiple Snowflake IDs to be created in the same millisecond. snowflakeIDs are generated based on time and can therefore be ordered by time. In addition, the generation time of an ID can be infer [...]
+<ol>
+<li>
+<p><strong>Structure of the snowflake algorithm:</strong></p>
+<p><img src="https://github.com/apache/dolphinscheduler-website/blob/master/img/JsonSplit/snowflake.png?raw=true" alt="snowflake"></p>
+<p>It is divided into 5 main parts.</p>
+<ol>
+<li>is 1 bit: 0, this is meaningless.</li>
+<li>is 41 bits: this represents the timestamp</li>
+<li>is 10 bits: the room id, 0000000000, as 0 is passed in at this point.</li>
+<li>is 12 bits: the serial number, which is the serial number of the ids generated at the same time during the millisecond on a machine in a certain room, 0000 0000 0000.</li>
+</ol>
+<p>Next we will explain the four parts:</p>
+</li>
+</ol>
+<p><strong>1 bit, which is meaningless:</strong></p>
+<p>Because the first bit in binary is a negative number if it is 1, but the ids we generate are all positive, so the first bit is always 0.</p>
+<p><strong>41 bit: This is a timestamp in milliseconds.</strong></p>
+<p>41 bit can represent as many numbers as 2^41 - 1, i.e. it can identify 2 ^ 41 - 1 milliseconds, which translates into 69 years of time.</p>
+<p><strong>10 bit: Record the work machine ID, which represents this service up to 2 ^ 10 machines, which is 1024 machines.</strong></p>
+<p>But in 10 bits 5 bits represent the machine room id and 5 bits represent the machine id, which means up to 2 ^ 5 machine rooms (32 machine rooms), each of which can represent 2 ^ 5 machines (32 machines), which can be split up as you wish, for example by taking out 4 bits to identify the service number and the other 6 bits as the machine number. This can be combined in any way you like.</p>
+<p><strong>12 bit: This is used to record the different ids generated in the same millisecond.</strong></p>
+<p>12 bit can represent the maximum integer of 2 ^ 12 - 1 = 4096, that is, can be distinguished from 4096 different IDs in the same milliseconds with the numbers of the 12 BIT representative. That is, the maximum number of IDs generated by the same machine in the same milliseconds is 4096</p>
+<p>In simple terms, if you have a service that wants to generate a globally unique id, you can send a request to a system that has deployed the SnowFlake algorithm to generate the unique id. The SnowFlake algorithm then receives the request and first generates a 64 bit long id using binary bit manipulation, the first bit of the 64 bits being meaningless.  This is followed by 41 bits of the current timestamp (in milliseconds), then 10 bits to set the machine id, and finally the last 12 bi [...]
+<p>The characteristics of SnowFlake are:</p>
+<ol>
+<li>the number of milliseconds is at the high end, the self-incrementing sequence is at the low end, and the entire ID is trended incrementally.</li>
+<li>it does not rely on third-party systems such as databases, and is deployed as a service for greater stability and performance in generating IDs.</li>
+<li>the bit can be allocated according to your business characteristics, very flexible.</li>
+</ol>
+</section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png"/><im [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/blog.md.f25cabd.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/blog/Json_Split.json b/en-us/blog/Json_Split.json
new file mode 100644
index 0000000..0db689f
--- /dev/null
+++ b/en-us/blog/Json_Split.json
@@ -0,0 +1,6 @@
+{
+  "filename": "Json_Split.md",
+  "__html": "<h2>Why did we split the big json that holds the tasks and relationships in the DolphinScheduler workflow definition?</h2>\n<h3>The Background</h3>\n<p>Currently DolphinScheduler saves tasks and relationships in process as big json to the process_definition_json field in the process_definiton table in the database. If a process is large, for example, with 1000 tasks, the json field becomes very large and needs to be parsed when using the json, which is very performance inten [...]
+  "link": "/dist/en-us/blog/Json_Split.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/blog/Lizhi-case-study.html b/en-us/blog/Lizhi-case-study.html
new file mode 100644
index 0000000..59403cc
--- /dev/null
+++ b/en-us/blog/Lizhi-case-study.html
@@ -0,0 +1,133 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="Lizhi-case-study">
+  <meta name="description" content="Lizhi-case-study">
+  <title>Lizhi-case-study</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+  <link rel="stylesheet" href="/build/blog.md.055b3f1.css">
+</head>
+<body>
+  <div id="root"><div class="blog-detail-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light ant-m [...]
+<blockquote>
+<p>Editor's word: The online audio industry is a blue ocean market in China nowadays. According to CIC data, the market size of China’s online audio industry has grown from 1.6 billion yuan in 2016 to 13.1 billion yuan in 2020, with a compound annual growth rate of 69.4%. With the popularity of the Internet of Things, audio has permeated into various terminals mobiles, vehicles, smart hardware, home equipment, and other various scenarios, sequentially to maximize the accompanying advanta [...]
+</blockquote>
+<blockquote>
+<p>In recent years, domestic audio communities have successfully been listed one after another. Among them, Lizhi was listed on NASDAQ in 2020 as the first “online audio” stock, which has more than 200 million users at present. In the information age, the audio industry also faces the generation of massive UGC data on the platform. On one hand, the users and consumers of audio content expect high-efficiency information transmission; on the other hand, the internet audio platforms hope th [...]
+</blockquote>
+<h2>Background</h2>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/11/23/radio-g360707f44_1920.md.jpg"/>
+</div>
+<p>Lizhi is a fast-growing UGC audio community company that attaches great importance to AI and data analysis technology development. AI can find the right voice for each user among the massively fragmented audios, and build it into a sustainable ecological closed loop. And data analysis can guide the company’s fast-growing business. Both of the two fields need to process massive amounts of data and require a big data scheduling system.</p>
+<p>Before the beginning of 2020, Lizhi used the Azkaban scheduling system. Although the big data scheduling SQL/shell/python scripts and other big data-related modules can complete the entire AI process, it is not easy and reusable enough. The machine learning platform is a set of systems built specifically for AI, which abstracts the AI development paradigm, i.e. data acquisition, data preprocessing, model training, model prediction, model evaluation, and model release into modules. Eac [...]
+<h2>Challenges During Machine Learning Platform Development</h2>
+<p>During the machine learning platform development, Lizhi has some clear requirements for the scheduling system:</p>
+<ol>
+<li>
+<p>It should be able to store and calculate massive data, such as screening samples, generating portraits, feature preprocessing, distributed model training, etc.;</p>
+</li>
+<li>
+<p>The DAG execution engine is required, and the processes such as data acquisition -&gt; data preprocessing -&gt; model training -&gt; model prediction -&gt; model evaluation -&gt; model release should be executed in series with DAG.</p>
+</li>
+</ol>
+<p>In the development by Azkaban, the team encountered some challenges:</p>
+<p>Challenge 1: The development model is cumbersome, which requires the user to package scripts and build DAG dependencies, and there is no implementation of DAG drag and drop;</p>
+<p>Challenge 2: The modules are not rich enough, and the scripted AI modules are not universal enough, thus the team need to develop modules repeatedly, which is unnecessary and error-prone;</p>
+<p>Challenge 3: Stand-alone deployment, the system is unstable and prone to failures. Besides, Task jams can easily cause downstream tasks to fail.</p>
+<h2>Turn to DolphinScheduler</h2>
+<p>After stepping on numerous pits in the old system, the Lizhi machine learning team, including recommendation system engineers Haibin Yu, Yanbin Lin, Huanjie Xie, and Yifei Guo, decided to adopt DolphinScheduler.</p>
+<p>Currently, 1,600+ processes and 12,000+ tasks (IDC) are running smoothly on DolphinScheduler every day.</p>
+<p>Haibin Yu said that the majority of the users of the scheduling system are recommendation algorithms engineers&gt; data analysts&gt; risk control algorithms engineers&gt; business developers (importance decreased in order). Not all of them are masters of data management operations, and DolphinScheduler perfectly meets their needs for a simple, easy-to-use, drag-and-drop scheduling system:</p>
+<ol>
+<li>
+<p>Distributed decentralized architecture and fault tolerance mechanism to ensure the high availability of the system;</p>
+</li>
+<li>
+<p>Visual DAG drag-and-drop UI, easy to use, and iterates quickly;</p>
+</li>
+<li>
+<p>It supports various modules, and can simply develop and integrate its modules;</p>
+</li>
+<li>
+<p>The community is active, hence there are no worries about the project supports;</p>
+</li>
+<li>
+<p>It is very close to the operating mode of the machine learning platform, using DAG to drag and drop UI programming.</p>
+</li>
+</ol>
+<h2>Use Case</h2>
+<p>After selecting the DolphinScheduler, the Lizhi machine learning platform carries out re-development based on it and applies the achievements to actual business scenarios, which are mainly about recommendation and risk control. Recommendation scenarios cover recommendation of voice, anchor, live broadcast, podcast, friend, etc., and risk control scenarios cover risk control in payment, advertising, and comment, etc.
+At the technical level of the platform, Lizhi optimizes the extended modules for the five paradigms of machine learning, i.e. obtaining training samples, data preprocessing, model training, model evaluation, and model release.</p>
+<p>A simple xgboost case:</p>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/11/23/1.png"/>
+</div>
+<h3>1. Obtaining training samples</h3>
+<p>At present, Lizhi does not directly select data from Hive, and joins the union, splitting the sample afterward, but directly processes the sample by shell nodes.</p>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/11/23/2.png"/>
+</div>
+<h3>2. Data preprocessing</h3>
+<p>Transformer&amp; custom preprocessing configuration file, use the same configuration for online training, and feature preprocessing is performed after the feature is obtained. It contains the itemType and its feature set to be predicted, the user’s userType and its feature set, as well as the associated and crossed itemType and its feature set. Define the transformer function for each feature preprocessing, supports custom transformer and hot update, xgboost, and tf model feature prep [...]
+<div align=center>
+<img src="https://s1.imgpp.com/2021/11/23/2.png"/>
+</div>
+<h3>3. Xgboost training</h3>
+<p>It supports w2v, xgboost, tf model training modules. The training modules are first packaged with TensorFlow or PyTorch and then packaged into DolphinScheduler modules.
+For example, in the xgboost training process, use Python to package the xgboost training script into the xgboost training node of DolphinScheduler, and show the parameters required for training on the interface. The file exported by “training set data preprocessing” is input to the training node through HDFS.</p>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/11/23/3.png"/>
+</div>
+<h3>4. Model release</h3>
+<p>The release model will send the model and preprocessing configuration files to HDFS and insert records into the model release table. The model service will automatically identify the new model, update the model, and provide online prediction services to the external.</p>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/11/23/4.png"/>
+</div>
+<p>Haibin Yu said that due to historical and technical limitations, Lizhi has not yet built a machine learning platform like Ali PAI, but the practice has proved that similar platform functions can be achieved based on DolphinScheduler.</p>
+<p>In addition, Lizhi has also carried out many re-developments based on DolphinScheduler to make the scheduling system more in line with actual business needs, such as:</p>
+<ol>
+<li>
+<p>Pop-up the window of whether to set timing when defining the workflow</p>
+</li>
+<li>
+<p>Add display pages for all workflow definitions to facilitate searching</p>
+</li>
+</ol>
+<p>a) Add the workflow definition filter and jump to the workflow instance page, and use a line chart to show the change of its running time
+b) The workflow instance continues to dive to the task instance</p>
+<ol start="3">
+<li>Enter parameters during runtime to configure the disabled task nodes</li>
+</ol>
+<h2>Machine Learning Platform based on Scheduling System May Lead the Future Trend</h2>
+<p>Deep learning is a leading trend in the future. Lizhi has developed new modules for deep learning models. The entire tf process has been completed yet, and LR and GBDT model-related modules are also in the plan. The latter two deep learning models are relatively more simple, easier to get started, faster to iterate, and can be used in generally recommended scenarios. After implementation, the Lizhi machine learning platform can be more complete.
+Lizhi believes that if the scheduling system can be improved in terms of kernel stability, drag-and-drop UI support, convenient modules' expansion, task plug-in, and task parameter transfer, building the machine learning platform based on the scheduling system may become a common practice in the industry.</p>
+</section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png"/><im [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/blog.md.f25cabd.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/blog/Lizhi-case-study.json b/en-us/blog/Lizhi-case-study.json
new file mode 100644
index 0000000..8cd13e6
--- /dev/null
+++ b/en-us/blog/Lizhi-case-study.json
@@ -0,0 +1,6 @@
+{
+  "filename": "Lizhi-case-study.md",
+  "__html": "<h1>A Formidable Combination of Lizhi Machine Learning Platform&amp; DolphinScheduler Creates New Paradigm for Data Process in the Future</h1>\n<blockquote>\n<p>Editor's word: The online audio industry is a blue ocean market in China nowadays. According to CIC data, the market size of China’s online audio industry has grown from 1.6 billion yuan in 2016 to 13.1 billion yuan in 2020, with a compound annual growth rate of 69.4%. With the popularity of the Internet of Things, a [...]
+  "link": "/dist/en-us/blog/Lizhi-case-study.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/blog/Meetup_2022_02_26.html b/en-us/blog/Meetup_2022_02_26.html
new file mode 100644
index 0000000..66cf02a
--- /dev/null
+++ b/en-us/blog/Meetup_2022_02_26.html
@@ -0,0 +1,75 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="Apache,DolphinScheduler,scheduler,big data,ETL,airflow,hadoop,orchestration,dataops,Meetup">
+  <meta name="description" content="Hello the community! After having adjusted ourselves from the pleasure of Spring Festival and re-devote to the busywork,">
+  <title># Sign Up to Apache DolphinScheduler Meetup Online | We Are Waiting For You to Join the Grand Gathering on 2.26 2022!</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+  <link rel="stylesheet" href="/build/blog.md.055b3f1.css">
+</head>
+<body>
+  <div id="root"><div class="blog-detail-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light ant-m [...]
+<div align=center>
+<img src="/img/2022-02-26/08.png"/>
+</div>
+<p>Hello the community! After having adjusted ourselves from the pleasure of Spring Festival and re-devote to the busywork, study, and life, Apache DolphinScheduler is here to wish everyone a prosperous and successful journey in the Lunar year of the Tiger.</p>
+<p>In this early spring, Apache DolphinScheduler's first Meetup in 2022 is also coming soon. I believe that the community has already been looking forward to it!</p>
+<p>In this Meetup, four guests from our user companies will share their experience when using Apache DolphinScheduler. Whether you are a user of Apache DolphinScheduler or a spectator, you can definitely learn a lot from it.</p>
+<p>We are looking forward to more friends joining us in the future, and more and more users will share practical experiences with each other.</p>
+<p>The first show of Apache DolphinScheduler in February 2022 will be broadcast on time at 14:00 pm on February 26th.</p>
+<p>You can also click <a href="https://www.slidestalk.com/m/679">https://www.slidestalk.com/m/679</a> to go directly to the live broadcast reservation interface!</p>
+<h2>1. Introduction to the Event</h2>
+<p>Topic: Apache DolphinScheduler user practice sharing</p>
+<p>Time: 2022-2-26 14:00-17:00(Beijing Time)</p>
+<p>Format: Live online</p>
+<p><a href="https://www.slidestalk.com/m/679">Click https://www.slidestalk.com/m/679</a> <strong>to register.</strong></p>
+<p><strong>Click</strong> <a href="https://asf-dolphinscheduler.slack.com/">https://asf-dolphinscheduler.slack.com/</a> <strong>to join the community on Slack</strong></p>
+<h2>2. Event Highlights</h2>
+<p>In this meetup, we invite four big data engineers from 360 Digital Technology, CISCO (China) and Tujia to share their development experiences based on Apache DolphinScheduler, which is highly representative and typical. The topics they shared with us refer to the exploration and application on the K8S cluster and the transformation of the Alert module, etc., which are of great significance to solve the difficulties you may encounter in scenario application. We hope these technical exc [...]
+<h2>3. Event Agenda</h2>
+<div align=center>
+<img src="/img/2022-02-26/Schedule.png"/>
+</div>
+<h2>4. Topic introduction</h2>
+<p>Jianmin Liu/ 360 Digital Technology/ Big Data Engineer</p>
+<p><strong>Speech Topic: Practice on Apache DolphinScheduler in 360 Digital Technology</strong></p>
+<p><strong>Speech Outline:</strong> The evolution of big data scheduling from Azkaban to DS, and the use and transformation of Apache DolphinScheduler.</p>
+<p>Qingwang Li/CISCO (China) /Big Data Engineer</p>
+<p><strong>Speech Topic: Retrofit of Apache DolphinScheduler Alert module</strong></p>
+<p><strong>Speech outline:</strong>  The exploration of switching to Apache DolphinScheduler, and modifying the Alert module of Apache DolphinScheduler for different alarm scenarios.</p>
+<p>Xuchao Zan/Tujia/Big Data Engineer</p>
+<p><strong>Speech topic: Exploration and Application on Apache DolphinScheduler</strong></p>
+<p><strong>Speech outline:</strong> Tujia introduced Apache DolphinScheduler, built Tujia data scheduling system, and completed the access of data services, including offline tables, emails, and data synchronization. The function development on the scheduling system will be introduced in detail.</p>
+<p>Qian Liu/Cisco(China)/Big Data Engineer</p>
+<p><strong>Speech Topic: Exploration and Application of Apache DolphinScheduler on K8S Cluster</strong></p>
+<p><strong>Speech outline:</strong> The exploration of switching to Apache DolphinScheduler, and submitting tasks to k8s based on DS secondary development support. Currently, tasks such as mirroring, Spark, Flink, etc. can be run on our scheduling system,  and the exploration of log monitoring and alarming will also be introduced.</p>
+<p>We will see you at 14:00 on February 26th!</p>
+</section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png"/><im [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/blog.md.f25cabd.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/blog/Meetup_2022_02_26.json b/en-us/blog/Meetup_2022_02_26.json
new file mode 100644
index 0000000..afb4d1f
--- /dev/null
+++ b/en-us/blog/Meetup_2022_02_26.json
@@ -0,0 +1,10 @@
+{
+  "filename": "Meetup_2022_02_26.md",
+  "__html": "<h1>Sign Up to Apache DolphinScheduler Meetup Online | We Are Waiting For You to Join the Grand Gathering on 2.26 2022!</h1>\n<div align=center>\n<img src=\"/img/2022-02-26/08.png\"/>\n</div>\n<p>Hello the community! After having adjusted ourselves from the pleasure of Spring Festival and re-devote to the busywork, study, and life, Apache DolphinScheduler is here to wish everyone a prosperous and successful journey in the Lunar year of the Tiger.</p>\n<p>In this early spring [...]
+  "link": "/dist/en-us/blog/Meetup_2022_02_26.html",
+  "meta": {
+    "title": "# Sign Up to Apache DolphinScheduler Meetup Online | We Are Waiting For You to Join the Grand Gathering on 2.26 2022!",
+    "keywords": "Apache,DolphinScheduler,scheduler,big data,ETL,airflow,hadoop,orchestration,dataops,Meetup",
+    "description": "Hello the community! After having adjusted ourselves from the pleasure of Spring Festival and re-devote to the busywork,"
+  }
+}
\ No newline at end of file
diff --git a/en-us/blog/Twos.html b/en-us/blog/Twos.html
new file mode 100644
index 0000000..3cc9744
--- /dev/null
+++ b/en-us/blog/Twos.html
@@ -0,0 +1,56 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="Apache,DolphinScheduler,scheduler,big data,ETL,airflow,hadoop,orchestration,dataops,TWOS">
+  <meta name="description" content="Recently, TWOS officially announced the approval of 6 full members and 3 candidate members,">
+  <title>Congratulations! Apache DolphinScheduler Has Been Approved As A TWOS Candidate Member</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+  <link rel="stylesheet" href="/build/blog.md.055b3f1.css">
+</head>
+<body>
+  <div id="root"><div class="blog-detail-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light ant-m [...]
+<div align=center>
+<img src="https://s1.imgpp.com/2022/01/10/1641804549068.png"/>
+</div>
+<p>Recently, TWOS officially announced the approval of 6 full members and 3 candidate members, Apache DolphinScheduler, a cloud-native distributed big data scheduler, was listed by TWOS.</p>
+<p>Apache DolphinScheduler is a new-generation workflow scheduling platform that is distributed and easy to expand. It is committed to &quot;solving the intricate dependencies among big data tasks and visualizing the entire data processing&quot;. Its powerful visual DAG interface greatly improves the user experience and can configure workflow without complex code.</p>
+<p>Since it was officially open-sourced in April 2019, Apache DolphinScheduler (formerly known as EasyScheduler) has undergone several architectural evolutions. So far, the relevant open-source codes have accumulated 7100+ Stars, with 280+ experienced code contributors, 110+ non-code contributors participating in the project, which includes PMCs and Committers of other Apache top-level projects. The Apache DolphinScheduler open source community continues to grow, and the WeChat user grou [...]
+<h2>TWOS</h2>
+<p>At the &quot;2021 OSCAR Open Source Industry Conference&quot;, China Academy of Telecommunication Research of MIIT (CAICT) officially established TWOS. TWOS is composed of open-source projects and open-source communities, which aims to guide the establishment of a healthy, credible, sustainable open source community, and build a communication platform providing a complete set of open source risk monitoring and ecological monitoring services.</p>
+<p>To help enterprises reduce the risk of using open source software and promote the establishment of a credible open source ecosystem, CAICT has created a credible open-source standard system, which carries authoritative evaluation on enterprise open source governance capabilities, open-source project compliance, open-source community maturity, open-source tool detection capabilities, Open- source risk management capabilities of commercial products.</p>
+<p>After being screened by TWOS evaluation criteria, Apache DolphinScheduler was approved to be a candidate member, which shows its recognition of Apache DolphinScheduler's way of open-source operation, maturity, and contribution, and encourages the community to keep active.</p>
+<p>On September 17, 2021, the first batch of members joined TWOS, including 25 full members such as openEuler, openGauss, MindSpore, openLookeng, etc., and 27 candidate members like Apache RocketMQ, Dcloud, Fluid, FastReID, etc., with a total of 52 members:</p>
+<div align=center>
+<img src="https://s1.imgpp.com/2022/01/10/1.png"/>
+</div>
+<p>Only two communities were selected for the second batch of candidate members—Apache DolphinScheduler and PolarDB, an open-source cloud-native ecological distributed database contributed by Alibaba Cloud.</p>
+<p>The Apache DolphinScheduler community is very honored to be selected as a candidate member of TWOS, which is an affirmation and incentive for the entire industry to build the community a better place. The community will make persistent efforts and strive to become a full member as soon as possible., and provide more value for China's open-source ecological construction together, with all the TWOS members!</p>
+</section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png"/><im [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/blog.md.f25cabd.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/blog/Twos.json b/en-us/blog/Twos.json
new file mode 100644
index 0000000..1a795d3
--- /dev/null
+++ b/en-us/blog/Twos.json
@@ -0,0 +1,10 @@
+{
+  "filename": "Twos.md",
+  "__html": "<h2>Congratulations! Apache DolphinScheduler Has Been Approved As A TWOS Candidate Member</h2>\n<div align=center>\n<img src=\"https://s1.imgpp.com/2022/01/10/1641804549068.png\"/>\n</div>\n<p>Recently, TWOS officially announced the approval of 6 full members and 3 candidate members, Apache DolphinScheduler, a cloud-native distributed big data scheduler, was listed by TWOS.</p>\n<p>Apache DolphinScheduler is a new-generation workflow scheduling platform that is distributed a [...]
+  "link": "/dist/en-us/blog/Twos.html",
+  "meta": {
+    "title": "Congratulations! Apache DolphinScheduler Has Been Approved As A TWOS Candidate Member",
+    "keywords": "Apache,DolphinScheduler,scheduler,big data,ETL,airflow,hadoop,orchestration,dataops,TWOS",
+    "description": "Recently, TWOS officially announced the approval of 6 full members and 3 candidate members,"
+  }
+}
\ No newline at end of file
diff --git a/en-us/blog/YouZan-case-study.html b/en-us/blog/YouZan-case-study.html
new file mode 100644
index 0000000..1e768be
--- /dev/null
+++ b/en-us/blog/YouZan-case-study.html
@@ -0,0 +1,328 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="YouZan-case-study">
+  <meta name="description" content="YouZan-case-study">
+  <title>YouZan-case-study</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+  <link rel="stylesheet" href="/build/blog.md.055b3f1.css">
+</head>
+<body>
+  <div id="root"><div class="blog-detail-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light ant-m [...]
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/16/1639383815755.png"/>
+</div>
+<p>At the recent Apache DolphinScheduler Meetup 2021, Zheqi Song, the Director of Youzan Big Data Development Platform
+shared the design scheme and production environment practice of its scheduling system migration from Airflow to Apache
+DolphinScheduler.</p>
+<p>This post-90s young man from Hangzhou, Zhejiang Province joined Youzan in September 2019, where he is engaged in the
+research and development of data development platforms, scheduling systems, and data synchronization modules. When he
+first joined, Youzan used Airflow, which is also an Apache open source project, but after research and production
+environment testing, Youzan decided to switch to DolphinScheduler.</p>
+<p>How does the Youzan big data development platform use the scheduling system? Why did Youzan decide to switch to Apache
+DolphinScheduler? The message below will uncover the truth.</p>
+<h2>Youzan Big Data Development Platform(DP)</h2>
+<p>As a retail technology SaaS service provider, Youzan is aimed to help online merchants open stores, build data products
+and digital solutions through social marketing and expand the omnichannel retail business, and provide better SaaS
+capabilities for driving merchants' digital growth.</p>
+<p>At present, Youzan has established a relatively complete digital product matrix with the support of the data center:</p>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/16/1_Jjgx5qQfjo559_oaJP-DAQ.png"/>
+</div>
+<p>Youzan has established a big data development platform (hereinafter referred to as DP platform) to support the
+increasing demand for data processing services. This is a big data offline development platform that provides users with
+the environment, tools, and data needed for the big data tasks development.</p>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/16/1_G9znZGQ1XBhJva0tjWa6Bg.png"/>
+</div>
+<p>Youzan Big Data Development Platform Architecture</p>
+<p>Youzan Big Data Development Platform is mainly composed of five modules: basic component layer, task component layer,
+scheduling layer, service layer, and monitoring layer. Among them, the service layer is mainly responsible for the job
+life cycle management, and the basic component layer and the task component layer mainly include the basic environment
+such as middleware and big data components that the big data development platform depends on. The service deployment of
+the DP platform mainly adopts the master-slave mode, and the master node supports HA. The scheduling layer is
+re-developed based on Airflow, and the monitoring layer performs comprehensive monitoring and early warning of the
+scheduling cluster.</p>
+<h3>1 Scheduling layer architecture design</h3>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/16/1_UDNCmMrZtcswj62aqNXA1g.png"/>
+</div>
+<p>Youzan Big Data Development Platform Scheduling Layer Architecture Design</p>
+<p>In 2017, our team investigated the mainstream scheduling systems, and finally adopted Airflow (1.7) as the task
+scheduling module of DP. In the design of architecture, we adopted the deployment plan of Airflow + Celery + Redis +
+MySQL based on actual business scenario demand, with Redis as the dispatch queue, and implemented distributed deployment
+of any number of workers through Celery.</p>
+<p>In the HA design of the scheduling node, it is well known that Airflow has a single point problem on the scheduled node.
+To achieve high availability of scheduling, the DP platform uses the Airflow Scheduler Failover Controller, an
+open-source component, and adds a Standby node that will periodically monitor the health of the Active node. Once the
+Active node is found to be unavailable, Standby is switched to Active to ensure the high availability of the schedule.</p>
+<h3>2 Worker nodes load balancing strategy</h3>
+<p>In addition, to use resources more effectively, the DP platform distinguishes task types based on CPU-intensive
+degree/memory-intensive degree and configures different slots for different celery queues to ensure that each machine's
+CPU/memory usage rate is maintained within a reasonable range.</p>
+<h2>Scheduling System Upgrade and Selection</h2>
+<p>Since the official launch of the Youzan Big Data Platform 1.0 in 2017, we have completed 100% of the data warehouse
+migration plan in 2018. In 2019, the daily scheduling task volume has reached 30,000+ and has grown to 60,000+ by 2021.
+the platform’s daily scheduling task volume will be reached. With the rapid increase in the number of tasks, DP's
+scheduling system also faces many challenges and problems.</p>
+<h3>1 Pain points of Airflow</h3>
+<ol>
+<li>In-depth re-development is difficult, the commercial version is separated from the community, and costs relatively
+high to upgrade ;</li>
+<li>Based on the Python technology stack, the maintenance and iteration cost higher;</li>
+<li>Performance issues:</li>
+</ol>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/16/1_U33OWzzfw2Dqn3ryCNbSvw.png"/>
+</div>
+<p>Airflow's schedule loop, as shown in the figure above, is essentially the loading and analysis of DAG and generates DAG
+round instances to perform task scheduling. Before Airflow 2.0, the DAG was scanned and parsed into the database by a
+single point. It leads to a large delay (over the scanning frequency, even to 60s-70s) for the scheduler loop to scan
+the Dag folder once the number of Dags was largely due to business growth. This seriously reduces the scheduling
+performance.</p>
+<ol start="4">
+<li>Stability issues:</li>
+</ol>
+<p>The Airflow Scheduler Failover Controller is essentially run by a master-slave mode. The standby node judges whether to
+switch by monitoring whether the active process is alive or not. If it encounters a deadlock blocking the process
+before, it will be ignored, which will lead to scheduling failure. After similar problems occurred in the production
+environment, we found the problem after troubleshooting. Although Airflow version 1.10 has fixed this problem, this
+problem will exist in the master-slave mode, and cannot be ignored in the production environment.</p>
+<p>Taking into account the above pain points, we decided to re-select the scheduling system for the DP platform.</p>
+<p>In the process of research and comparison, Apache DolphinScheduler entered our field of vision. Also to be Apache's top
+open-source scheduling component project, we have made a comprehensive comparison between the original scheduling system
+and DolphinScheduler from the perspectives of performance, deployment, functionality, stability, and availability, and
+community ecology.</p>
+<p>This is the comparative analysis result below:</p>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/16/1_Rbr05klPmQIc7WPFNeEH-w.png"/>
+</div>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/16/1_Ity1QoRL_Yu5aDVClY9AgA.png"/>
+</div>
+<p>Airflow VS DolphinScheduler</p>
+<h3>1 DolphinScheduler valuation</h3>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/16/1_o8c1Y1TFAOis3KozzJnvfA.png"/>
+</div>
+<p>As shown in the figure above, after evaluating, we found that the throughput performance of DolphinScheduler is twice
+that of the original scheduling system under the same conditions. And we have heard that the performance of
+DolphinScheduler will greatly be improved after version 2.0, this news greatly excites us.</p>
+<p>In addition, at the deployment level, the Java technology stack adopted by DolphinScheduler is conducive to the
+standardized deployment process of ops, simplifies the release process, liberates operation and maintenance manpower,
+and supports Kubernetes and Docker deployment with stronger scalability.</p>
+<p>In terms of new features, DolphinScheduler has a more flexible task-dependent configuration, to which we attach much
+importance, and the granularity of time configuration is refined to the hour, day, week, and month. In addition,
+DolphinScheduler's scheduling management interface is easier to use and supports worker group isolation. As a
+distributed scheduling, the overall scheduling capability of DolphinScheduler grows linearly with the scale of the
+cluster, and with the release of new feature task plug-ins, the task-type customization is also going to be attractive
+character.</p>
+<p>From the perspective of stability and availability, DolphinScheduler achieves high reliability and high scalability, the
+decentralized multi-Master multi-Worker design architecture supports dynamic online and offline services and has
+stronger self-fault tolerance and adjustment capabilities.</p>
+<p>And also importantly, after months of communication, we found that the DolphinScheduler community is highly active, with
+frequent technical exchanges, detailed technical documents outputs, and fast version iteration.</p>
+<p>In summary, we decided to switch to DolphinScheduler.</p>
+<h2>DolphinScheduler Migration Scheme Design</h2>
+<p>After deciding to migrate to DolphinScheduler, we sorted out the platform's requirements for the transformation of the
+new scheduling system.</p>
+<p>In conclusion, the key requirements are as below:</p>
+<ol>
+<li>Users are not aware of migration. There are 700-800 users on the platform, we hope that the user switching cost can
+be reduced;</li>
+<li>The scheduling system can be dynamically switched because the production environment requires stability above all
+else. The online grayscale test will be performed during the online period, we hope that the scheduling system can be
+dynamically switched based on the granularity of the workflow;</li>
+<li>The workflow configuration for testing and publishing needs to be isolated. Currently, we have two sets of
+configuration files for task testing and publishing that are maintained through GitHub. Online scheduling task
+configuration needs to ensure the accuracy and stability of the data, so two sets of environments are required for
+isolation.</li>
+</ol>
+<p>In response to the above three points, we have redesigned the architecture.</p>
+<h3>1 Architecture design</h3>
+<ol>
+<li>Keep the existing front-end interface and DP API;</li>
+<li>Refactoring the scheduling management interface, which was originally embedded in the Airflow interface, and will be
+rebuilt based on DolphinScheduler in the future;</li>
+<li>Task lifecycle management/scheduling management and other operations interact through the DolphinScheduler API;</li>
+<li>Use the Project mechanism to redundantly configure the workflow to achieve configuration isolation for testing and
+release.</li>
+</ol>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/16/1_eusVhW4QAJ2uO-J96bqiFg.png"/>
+</div>
+<p>Refactoring Design</p>
+<p>We entered the transformation phase after the architecture design is completed. We have transformed DolphinScheduler's
+workflow definition, task execution process, and workflow release process, and have made some key functions to
+complement it.</p>
+<ul>
+<li>Workflow definition status combing</li>
+</ul>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/16/-1.png"/>
+</div>
+<p>We first combed the definition status of the DolphinScheduler workflow. The definition and timing management of
+DolphinScheduler work will be divided into online and offline status, while the status of the two on the DP platform is
+unified, so in the task test and workflow release process, the process series from DP to DolphinScheduler needs to be
+modified accordingly.</p>
+<ul>
+<li>Task execution process transformation</li>
+</ul>
+<p>Firstly, we have changed the task test process. After switching to DolphinScheduler, all interactions are based on the
+DolphinScheduler API. When the task test is started on DP, the corresponding workflow definition configuration will be
+generated on the DolphinScheduler. After going online, the task will be run and the DolphinScheduler log will be called
+to view the results and obtain log running information in real-time.</p>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/16/-1.png"/>
+</div>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/16/-3.png"/>
+</div>
+- Workflow release process transformation
+<p>Secondly, for the workflow online process, after switching to DolphinScheduler, the main change is to synchronize the
+workflow definition configuration and timing configuration, as well as the online status.</p>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/16/1_4-ikFp_jJ44-YWJcGNioOg.png"/>
+</div>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/16/-5.png"/>
+</div>
+The original data maintenance and configuration synchronization of the workflow is managed based on the DP master, and
+only when the task is online and running will it interact with the scheduling system. Based on these two core changes,
+the DP platform can dynamically switch systems under the workflow, and greatly facilitate the subsequent online
+grayscale test.
+<h3>2 Function completion</h3>
+<p>In addition, the DP platform has also complemented some functions. The first is the adaptation of task types.</p>
+<ul>
+<li>Task type adaptation</li>
+</ul>
+<p>Currently, the task types supported by the DolphinScheduler platform mainly include data synchronization and data
+calculation tasks, such as Hive SQL tasks, DataX tasks, and Spark tasks. Because the original data information of the
+task is maintained on the DP, the docking scheme of the DP platform is to build a task configuration mapping module in
+the DP master, map the task information maintained by the DP to the task on DP, and then use the API call of
+DolphinScheduler to transfer task configuration information.</p>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/16/1_A76iOa5LKyPiu-NoopmYrA.png"/>
+</div>
+<p>Because some of the task types are already supported by DolphinScheduler, it is only necessary to customize the
+corresponding task modules of DolphinScheduler to meet the actual usage scenario needs of the DP platform. For the task
+types not supported by DolphinScheduler, such as Kylin tasks, algorithm training tasks, DataY tasks, etc., the DP
+platform also plans to complete it with the plug-in capabilities of DolphinScheduler 2.0.</p>
+<h3>3 Transformation schedule</h3>
+<p>Because SQL tasks and synchronization tasks on the DP platform account for about 80% of the total tasks, the
+transformation focuses on these task types. At present, the adaptation and transformation of Hive SQL tasks, DataX
+tasks, and script tasks adaptation have been completed.</p>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/16/1_y7HUfYyLs9NxnTzENKGSCA.png"/>
+</div>
+### 4 Function complement
+<ul>
+<li>Catchup mechanism realizes automatic replenishment</li>
+</ul>
+<p>DP also needs a core capability in the actual production environment, that is, Catchup-based automatic replenishment and
+global replenishment capabilities.</p>
+<p>The catchup mechanism will play a role when the scheduling system is abnormal or resources is insufficient, causing some
+tasks to miss the currently scheduled trigger time. When the scheduling is resumed, Catchup will automatically fill in
+the untriggered scheduling execution plan.</p>
+<p>The following three pictures show the instance of an hour-level workflow scheduling execution.</p>
+<p>In Figure 1, the workflow is called up on time at 6 o'clock and tuned up once an hour. You can see that the task is
+called up on time at 6 o'clock and the task execution is completed. The current state is also normal.</p>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/16/1_MvQGZ-FKKLMvKrlWihXHgg.png"/>
+</div>
+<p>figure 1</p>
+<p>Figure 2 shows that the scheduling system was abnormal at 8 o'clock, causing the workflow not to be activated at 7
+o'clock and 8 o'clock.</p>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/16/1_1WxLOtd1Oh2YERmtGcRb0Q.png"/>
+</div>
+figure 2
+<p>Figure 3 shows that when the scheduling is resumed at 9 o'clock, thanks to the Catchup mechanism, the scheduling system
+can automatically replenish the previously lost execution plan to realize the automatic replenishment of the scheduling.</p>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/16/126ec1039f7aa614c.png"/>
+</div>
+<p>Figure 3</p>
+<p>This mechanism is particularly effective when the amount of tasks is large. When the scheduled node is abnormal or the
+core task accumulation causes the workflow to miss the scheduled trigger time, due to the system's fault-tolerant
+mechanism can support automatic replenishment of scheduled tasks, there is no need to replenish and re-run manually.</p>
+<p>At the same time, this mechanism is also applied to DP's global complement.</p>
+<ul>
+<li>Global Complement across Dags</li>
+</ul>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/16/1_eVyyABTQCLeSGzbbuizfDA.png"/>
+</div>
+<p>DP platform cross-Dag global complement process</p>
+<p>The main use scenario of global complements in Youzan is when there is an abnormality in the output of the core upstream
+table, which results in abnormal data display in downstream businesses. In this case, the system generally needs to
+quickly rerun all task instances under the entire data link.</p>
+<p>Based on the function of Clear, the DP platform is currently able to obtain certain nodes and all downstream instances
+under the current scheduling cycle through analysis of the original data, and then to filter some instances that do not
+need to be rerun through the rule pruning strategy. After obtaining these lists, start the clear downstream clear task
+instance function, and then use Catchup to automatically fill up.</p>
+<p>This process realizes the global rerun of the upstream core through Clear, which can liberate manual operations.</p>
+<p>Because the cross-Dag global complement capability is important in a production environment, we plan to complement it in
+DolphinScheduler.</p>
+<h2>Current Status &amp; Planning &amp; Outlook</h2>
+<h3>1 DolphinScheduler migration status</h3>
+<p>The DP platform has deployed part of the DolphinScheduler service in the test environment and migrated part of the
+workflow.</p>
+<p>After docking with the DolphinScheduler API system, the DP platform uniformly uses the admin user at the user level.
+Because its user system is directly maintained on the DP master, all workflow information will be divided into the test
+environment and the formal environment.</p>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/16/1_bXwtKI2HJzQuHCMW5y3hgg.png"/>
+</div>
+<p>DolphinScheduler 2.0 workflow task node display</p>
+<p>The overall UI interaction of DolphinScheduler 2.0 looks more concise and more visualized and we plan to directly
+upgrade to version 2.0.</p>
+<h3>2 Access planning</h3>
+<p>At present, the DP platform is still in the grayscale test of DolphinScheduler migration., and is planned to perform a
+full migration of the workflow in December this year. At the same time, a phased full-scale test of performance and
+stress will be carried out in the test environment. If no problems occur, we will conduct a grayscale test of the
+production environment in January 2022, and plan to complete the full migration in March.</p>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/16/1_jv3ScivmLop7GYjKIECaiw.png"/>
+</div>
+<h3>3 Expectations for DolphinScheduler</h3>
+<p>In the future, we strongly looking forward to the plug-in tasks feature in DolphinScheduler, and have implemented
+plug-in alarm components based on DolphinScheduler 2.0, by which the Form information can be defined on the backend and
+displayed adaptively on the frontend.</p>
+<div align=center>
+<img src="https://s1.imgpp.com/2021/12/16/1_3jP2KQDtFy71ciDoUyW3eg.png"/>
+</div>
+<p>&quot;</p>
+<p>I hope that DolphinScheduler's optimization pace of plug-in feature can be faster, to better quickly adapt to our
+customized task types.</p>
+<p>——Zheqi Song, Head of Youzan Big Data Development Platform</p>
+<p>&quot;</p>
+</section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png"/><im [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/blog.md.f25cabd.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/blog/YouZan-case-study.json b/en-us/blog/YouZan-case-study.json
new file mode 100644
index 0000000..9cac47a
--- /dev/null
+++ b/en-us/blog/YouZan-case-study.json
@@ -0,0 +1,6 @@
+{
+  "filename": "YouZan-case-study.md",
+  "__html": "<h1>From Airflow to Apache DolphinScheduler, the Roadmap of Scheduling System On Youzan Big Data Development Platform</h1>\n<div align=center>\n<img src=\"https://s1.imgpp.com/2021/12/16/1639383815755.png\"/>\n</div>\n<p>At the recent Apache DolphinScheduler Meetup 2021, Zheqi Song, the Director of Youzan Big Data Development Platform\nshared the design scheme and production environment practice of its scheduling system migration from Airflow to Apache\nDolphinScheduler.</p> [...]
+  "link": "/dist/en-us/blog/YouZan-case-study.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/blog/architecture-design.html b/en-us/blog/architecture-design.html
new file mode 100644
index 0000000..b4575d0
--- /dev/null
+++ b/en-us/blog/architecture-design.html
@@ -0,0 +1,316 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="Apache,DolphinScheduler,scheduler,big data,ETL,airflow,hadoop,orchestration, dataops">
+  <meta name="description" content="Before explaining the architecture of the schedule system, let us first understand the common nouns of the schedule system.">
+  <title>Architecture Design</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+  <link rel="stylesheet" href="/build/blog.md.055b3f1.css">
+</head>
+<body>
+  <div id="root"><div class="blog-detail-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light ant-m [...]
+<p>Before explaining the architecture of the schedule system, let us first understand the common nouns of the schedule system.</p>
+<h3>1.Noun Interpretation</h3>
+<p><strong>DAG:</strong> Full name Directed Acyclic Graph,referred to as DAG。Tasks in the workflow are assembled in the form of directed acyclic graphs, which are topologically traversed from nodes with zero indegrees of ingress until there are no successor nodes. For example, the following picture:</p>
+<p align="center">
+  <img src="/img/dag_examples_cn.jpg" alt="dag"  width="60%" />
+  <p align="center">
+        <em>dag example</em>
+  </p>
+</p>
+**Process definition**: Visualization **DAG** by dragging task nodes and establishing associations of task nodes 
+<p><strong>Process instance</strong>: A process instance is an instantiation of a process definition, which can be generated by manual startup or  scheduling. The process definition runs once, a new process instance is generated</p>
+<p><strong>Task instance</strong>: A task instance is the instantiation of a specific task node when a process instance runs, which indicates the specific task execution status</p>
+<p><strong>Task type</strong>: Currently supports SHELL, SQL, SUB_PROCESS (sub-process), PROCEDURE, MR, SPARK, PYTHON, DEPENDENT (dependency), and plans to support dynamic plug-in extension, note: the sub-<strong>SUB_PROCESS</strong> is also A separate process definition that can be launched separately</p>
+<p><strong>Schedule mode</strong> :  The system supports timing schedule and manual schedule based on cron expressions. Command type support: start workflow, start execution from current node, resume fault-tolerant workflow, resume pause process, start execution from failed node, complement, timer, rerun, pause, stop, resume waiting thread. Where <strong>recovers the fault-tolerant workflow</strong> and <strong>restores the waiting thread</strong> The two command types are used by the sc [...]
+<p><strong>Timed schedule</strong>: The system uses <strong>quartz</strong> distributed scheduler and supports the generation of cron expression visualization</p>
+<p><strong>Dependency</strong>: The system does not only support <strong>DAG</strong> Simple dependencies between predecessors and successor nodes, but also provides <strong>task dependencies</strong> nodes, support for custom task dependencies between processes**</p>
+<p><strong>Priority</strong>: Supports the priority of process instances and task instances. If the process instance and task instance priority are not set, the default is first in, first out.</p>
+<p><strong>Mail Alert</strong>: Support <strong>SQL Task</strong> Query Result Email Send, Process Instance Run Result Email Alert and Fault Tolerant Alert Notification</p>
+<p><strong>Failure policy</strong>: For tasks running in parallel, if there are tasks that fail, two failure policy processing methods are provided. <strong>Continue</strong> means that the status of the task is run in parallel until the end of the process failure. <strong>End</strong> means that once a failed task is found, Kill also drops the running parallel task and the process ends.</p>
+<p><strong>Complement</strong>: Complement historical data, support ** interval parallel and serial ** two complement methods</p>
+<h3>2.System architecture</h3>
+<h4>2.1 System Architecture Diagram</h4>
+<p align="center">
+  <img src="/img/architecture.jpg" alt="System Architecture Diagram"  />
+  <p align="center">
+        <em>System Architecture Diagram</em>
+  </p>
+</p>
+<h4>2.2 Architectural description</h4>
+<ul>
+<li>
+<p><strong>MasterServer</strong></p>
+<p>MasterServer adopts the distributed non-central design concept. MasterServer is mainly responsible for DAG task split, task submission monitoring, and monitoring the health status of other MasterServer and WorkerServer.
+When the MasterServer service starts, it registers a temporary node with Zookeeper, and listens to the Zookeeper temporary node state change for fault tolerance processing.</p>
+<h5>The service mainly contains:</h5>
+<ul>
+<li>
+<p><strong>Distributed Quartz</strong> distributed scheduling component, mainly responsible for the start and stop operation of the scheduled task. When the quartz picks up the task, the master internally has a thread pool to be responsible for the subsequent operations of the task.</p>
+</li>
+<li>
+<p><strong>MasterSchedulerThread</strong> is a scan thread that periodically scans the <strong>command</strong> table in the database for different business operations based on different ** command types**</p>
+</li>
+<li>
+<p><strong>MasterExecThread</strong> is mainly responsible for DAG task segmentation, task submission monitoring, logic processing of various command types</p>
+</li>
+<li>
+<p><strong>MasterTaskExecThread</strong> is mainly responsible for task persistence</p>
+</li>
+</ul>
+</li>
+<li>
+<p><strong>WorkerServer</strong></p>
+<ul>
+<li>
+<p>WorkerServer also adopts a distributed, non-central design concept. WorkerServer is mainly responsible for task execution and providing log services. When the WorkerServer service starts, it registers the temporary node with Zookeeper and maintains the heartbeat.</p>
+<h5>This service contains:</h5>
+<ul>
+<li><strong>FetchTaskThread</strong> is mainly responsible for continuously receiving tasks from <strong>Task Queue</strong> and calling <strong>TaskScheduleThread</strong> corresponding executors according to different task types.</li>
+<li><strong>LoggerServer</strong> is an RPC service that provides functions such as log fragment viewing, refresh and download.</li>
+</ul>
+</li>
+<li>
+<p><strong>ZooKeeper</strong></p>
+<p>The ZooKeeper service, the MasterServer and the WorkerServer nodes in the system all use the ZooKeeper for cluster management and fault tolerance. In addition, the system also performs event monitoring and distributed locking based on ZooKeeper.
+We have also implemented queues based on Redis, but we hope that EasyScheduler relies on as few components as possible, so we finally removed the Redis implementation.</p>
+</li>
+<li>
+<p><strong>Task Queue</strong></p>
+<p>The task queue operation is provided. Currently, the queue is also implemented based on Zookeeper. Since there is less information stored in the queue, there is no need to worry about too much data in the queue. In fact, we have over-measured a million-level data storage queue, which has no effect on system stability and performance.</p>
+</li>
+<li>
+<p><strong>Alert</strong></p>
+<p>Provides alarm-related interfaces. The interfaces mainly include <strong>Alarms</strong>. The storage, query, and notification functions of the two types of alarm data. The notification function has two types: <strong>mail notification</strong> and <strong>SNMP (not yet implemented)</strong>.</p>
+</li>
+<li>
+<p><strong>API</strong></p>
+<p>The API interface layer is mainly responsible for processing requests from the front-end UI layer. The service provides a RESTful api to provide request services externally.
+Interfaces include workflow creation, definition, query, modification, release, offline, manual start, stop, pause, resume, start execution from this node, and more.</p>
+</li>
+<li>
+<p><strong>UI</strong></p>
+<p>The front-end page of the system provides various visual operation interfaces of the system. For details, see the <strong>[System User Manual] (System User <a href="http://Manual.md">Manual.md</a>)</strong> section.</p>
+</li>
+</ul>
+</li>
+</ul>
+<h4>2.3 Architectural Design Ideas</h4>
+<h5>I. Decentralized vs centralization</h5>
+<h6>Centralization Thought</h6>
+<p>The centralized design concept is relatively simple. The nodes in the distributed cluster are divided into two roles according to their roles:</p>
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/master_slave.png" alt="master-slave role" width="50%" />
+ </p>
+<ul>
+<li>The role of Master is mainly responsible for task distribution and supervising the health status of Slave. It can dynamically balance the task to Slave, so that the Slave node will not be &quot;busy&quot; or &quot;free&quot;.</li>
+<li>The role of the Worker is mainly responsible for the execution of the task and maintains the heartbeat with the Master so that the Master can assign tasks to the Slave.</li>
+</ul>
+<p>Problems in the design of centralized :</p>
+<ul>
+<li>Once the Master has a problem, the group has no leader and the entire cluster will crash. In order to solve this problem, most Master/Slave architecture modes adopt the design scheme of the master and backup masters, which can be hot standby or cold standby, automatic switching or manual switching, and more and more new systems are available. Automatically elects the ability to switch masters to improve system availability.</li>
+<li>Another problem is that if the Scheduler is on the Master, although it can support different tasks in one DAG running on different machines, it will generate overload of the Master. If the Scheduler is on the Slave, all tasks in a DAG can only be submitted on one machine. If there are more parallel tasks, the pressure on the Slave may be larger.</li>
+</ul>
+<h6>Decentralization</h6>
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/decentralization.png" alt="decentralized" width="50%" />
+ </p>
+<ul>
+<li>
+<p>In the decentralized design, there is usually no Master/Slave concept, all roles are the same, the status is equal, the global Internet is a typical decentralized distributed system, networked arbitrary node equipment down machine , all will only affect a small range of features.</p>
+</li>
+<li>
+<p>The core design of decentralized design is that there is no &quot;manager&quot; that is different from other nodes in the entire distributed system, so there is no single point of failure problem. However, since there is no &quot;manager&quot; node, each node needs to communicate with other nodes to get the necessary machine information, and the unreliable line of distributed system communication greatly increases the difficulty of implementing the above functions.</p>
+</li>
+<li>
+<p>In fact, truly decentralized distributed systems are rare. Instead, dynamic centralized distributed systems are constantly emerging. Under this architecture, the managers in the cluster are dynamically selected, rather than preset, and when the cluster fails, the nodes of the cluster will spontaneously hold &quot;meetings&quot; to elect new &quot;managers&quot;. Go to preside over the work. The most typical case is the Etcd implemented in ZooKeeper and Go.</p>
+</li>
+<li>
+<p>Decentralization of EasyScheduler is the registration of Master/Worker to ZooKeeper. The Master Cluster and the Worker Cluster are not centered, and the Zookeeper distributed lock is used to elect one Master or Worker as the “manager” to perform the task.</p>
+</li>
+</ul>
+<h5>二、Distributed lock practice</h5>
+<p>EasyScheduler uses ZooKeeper distributed locks to implement only one Master to execute the Scheduler at the same time, or only one Worker to perform task submission.</p>
+<ol>
+<li>The core process algorithm for obtaining distributed locks is as follows</li>
+</ol>
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/distributed_lock.png" alt="Get Distributed Lock Process" width="50%" />
+ </p>
+<ol start="2">
+<li>Scheduler thread distributed lock implementation flow chart in EasyScheduler:</li>
+</ol>
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/distributed_lock_procss.png" alt="Get Distributed Lock Process" width="50%" />
+ </p>
+<h5>Third, the thread is insufficient loop waiting problem</h5>
+<ul>
+<li>If there is no subprocess in a DAG, if the number of data in the Command is greater than the threshold set by the thread pool, the direct process waits or fails.</li>
+<li>If a large number of sub-processes are nested in a large DAG, the following figure will result in a &quot;dead&quot; state:</li>
+</ul>
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/lack_thread.png" alt="Thread is not enough to wait for loop" width="50%" />
+ </p>
+<p>In the above figure, MainFlowThread waits for SubFlowThread1 to end, SubFlowThread1 waits for SubFlowThread2 to end, SubFlowThread2 waits for SubFlowThread3 to end, and SubFlowThread3 waits for a new thread in the thread pool, then the entire DAG process cannot end, and thus the thread cannot be released. This forms the state of the child parent process loop waiting. At this point, the scheduling cluster will no longer be available unless a new Master is started to add threads to brea [...]
+<p>It seems a bit unsatisfactory to start a new Master to break the deadlock, so we proposed the following three options to reduce this risk:</p>
+<ol>
+<li>Calculate the sum of the threads of all Masters, and then calculate the number of threads required for each DAG, that is, pre-calculate before the DAG process is executed. Because it is a multi-master thread pool, the total number of threads is unlikely to be obtained in real time.</li>
+<li>Judge the single master thread pool. If the thread pool is full, let the thread fail directly.</li>
+<li>Add a Command type with insufficient resources. If the thread pool is insufficient, the main process will be suspended. This way, the thread pool has a new thread, which can make the process with insufficient resources hang up and wake up again.</li>
+</ol>
+<p>Note: The Master Scheduler thread is FIFO-enabled when it gets the Command.</p>
+<p>So we chose the third way to solve the problem of insufficient threads.</p>
+<h5>IV. Fault Tolerant Design</h5>
+<p>Fault tolerance is divided into service fault tolerance and task retry. Service fault tolerance is divided into two types: Master Fault Tolerance and Worker Fault Tolerance.</p>
+<h6>1. Downtime fault tolerance</h6>
+<p>Service fault tolerance design relies on ZooKeeper's Watcher mechanism. The implementation principle is as follows:</p>
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/fault-tolerant.png" alt="EasyScheduler Fault Tolerant Design" width="40%" />
+ </p>
+<p>The Master monitors the directories of other Masters and Workers. If the remove event is detected, the process instance is fault-tolerant or the task instance is fault-tolerant according to the specific business logic.</p>
+<ul>
+<li>Master fault tolerance flow chart:</li>
+</ul>
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/fault-tolerant_master.png" alt="Master Fault Tolerance Flowchart" width="40%" />
+ </p>
+<p>After the ZooKeeper Master is fault-tolerant, it is rescheduled by the Scheduler thread in EasyScheduler. It traverses the DAG to find the &quot;Running&quot; and &quot;Submit Successful&quot; tasks, and monitors the status of its task instance for the &quot;Running&quot; task. You need to determine whether the Task Queue already exists. If it exists, monitor the status of the task instance. If it does not exist, resubmit the task instance.</p>
+<ul>
+<li>Worker fault tolerance flow chart:</li>
+</ul>
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/fault-tolerant_worker.png" alt="Worker Fault Tolerance Flowchart" width="40%" />
+ </p>
+<p>Once the Master Scheduler thread finds the task instance as &quot;need to be fault tolerant&quot;, it takes over the task and resubmits.</p>
+<p>Note: Because the &quot;network jitter&quot; may cause the node to lose the heartbeat of ZooKeeper in a short time, the node's remove event occurs. In this case, we use the easiest way, that is, once the node has timeout connection with ZooKeeper, it will directly stop the Master or Worker service.</p>
+<h6>2. Task failure retry</h6>
+<p>Here we must first distinguish between the concept of task failure retry, process failure recovery, and process failure rerun:</p>
+<ul>
+<li>Task failure Retry is task level, which is automatically performed by the scheduling system. For example, if a shell task sets the number of retries to 3 times, then the shell task will try to run up to 3 times after failing to run.</li>
+<li>Process failure recovery is process level, is done manually, recovery can only be performed from the failed node ** or ** from the current node **</li>
+<li>Process failure rerun is also process level, is done manually, rerun is from the start node</li>
+</ul>
+<p>Next, let's talk about the topic, we divided the task nodes in the workflow into two types.</p>
+<ul>
+<li>One is a business node, which corresponds to an actual script or processing statement, such as a Shell node, an MR node, a Spark node, a dependent node, and so on.</li>
+<li>There is also a logical node, which does not do the actual script or statement processing, but the logical processing of the entire process flow, such as sub-flow sections.</li>
+</ul>
+<p>Each ** service node** can configure the number of failed retries. When the task node fails, it will automatically retry until it succeeds or exceeds the configured number of retries. <strong>Logical node</strong> does not support failed retry. But the tasks in the logical nodes support retry.</p>
+<p>If there is a task failure in the workflow that reaches the maximum number of retries, the workflow will fail to stop, and the failed workflow can be manually rerun or process resumed.</p>
+<h5>V. Task priority design</h5>
+<p>In the early scheduling design, if there is no priority design and fair scheduling design, it will encounter the situation that the task submitted first may be completed simultaneously with the task submitted subsequently, but the priority of the process or task cannot be set. We have redesigned this, and we are currently designing it as follows:</p>
+<ul>
+<li>
+<p>According to ** different process instance priority ** prioritizes ** same process instance priority ** prioritizes ** task priority within the same process ** takes precedence over ** same process ** commit order from high Go to low for task processing.</p>
+<ul>
+<li>
+<p>The specific implementation is to resolve the priority according to the json of the task instance, and then save the ** process instance priority _ process instance id_task priority _ task id** information in the ZooKeeper task queue, when obtained from the task queue, Through string comparison, you can get the task that needs to be executed first.</p>
+<ul>
+<li>
+<p>The priority of the process definition is that some processes need to be processed before other processes. This can be configured at the start of the process or at the time of scheduled start. There are 5 levels, followed by HIGHEST, HIGH, MEDIUM, LOW, and LOWEST. As shown below</p>
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/process_priority.png" alt="Process Priority Configuration" width="40%" />
+ </p>
+</li>
+<li>
+<p>The priority of the task is also divided into 5 levels, followed by HIGHEST, HIGH, MEDIUM, LOW, and LOWEST. As shown below</p>
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/task_priority.png" alt="task priority configuration" width="35%" />
+ </p>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<h5>VI. Logback and gRPC implement log access</h5>
+<ul>
+<li>Since the Web (UI) and Worker are not necessarily on the same machine, viewing the log is not as it is for querying local files. There are two options:
+<ul>
+<li>Put the logs on the ES search engine</li>
+<li>Obtain remote log information through gRPC communication</li>
+</ul>
+</li>
+<li>Considering the lightweightness of EasyScheduler as much as possible, gRPC was chosen to implement remote access log information.</li>
+</ul>
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/grpc.png" alt="grpc remote access" width="50%" />
+ </p>
+<ul>
+<li>We use a custom Logback FileAppender and Filter function to generate a log file for each task instance.</li>
+<li>The main implementation of FileAppender is as follows:</li>
+</ul>
+<pre><code class="language-java"> <span class="hljs-comment">/**
+  * task log appender
+  */</span>
+ Public <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">TaskLogAppender</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">FileAppender</span>&lt;<span class="hljs-title">ILoggingEvent</span>&gt; </span>{
+ 
+     ...
+
+    <span class="hljs-meta">@Override</span>
+    <span class="hljs-function">Protected <span class="hljs-keyword">void</span> <span class="hljs-title">append</span><span class="hljs-params">(ILoggingEvent event)</span> </span>{
+
+        If (currentlyActiveFile == <span class="hljs-keyword">null</span>){
+            currentlyActiveFile = getFile();
+        }
+        String activeFile = currentlyActiveFile;
+        <span class="hljs-comment">// thread name: taskThreadName-processDefineId_processInstanceId_taskInstanceId</span>
+        String threadName = event.getThreadName();
+        String[] threadNameArr = threadName.split(<span class="hljs-string">&quot;-&quot;</span>);
+        <span class="hljs-comment">// logId = processDefineId_processInstanceId_taskInstanceId</span>
+        String logId = threadNameArr[<span class="hljs-number">1</span>];
+        ...
+        <span class="hljs-keyword">super</span>.subAppend(event);
+    }
+}
+</code></pre>
+<p>Generate a log in the form of /process definition id/process instance id/task instance id.log</p>
+<ul>
+<li>Filter matches the thread name starting with TaskLogInfo:</li>
+<li>TaskLogFilter is implemented as follows:</li>
+</ul>
+<pre><code class="language-java"> <span class="hljs-comment">/**
+ * task log filter
+ */</span>
+Public <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">TaskLogFilter</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Filter</span>&lt;<span class="hljs-title">ILoggingEvent</span>&gt; </span>{
+
+    <span class="hljs-meta">@Override</span>
+    <span class="hljs-function">Public FilterReply <span class="hljs-title">decide</span><span class="hljs-params">(ILoggingEvent event)</span> </span>{
+        If (event.getThreadName().startsWith(<span class="hljs-string">&quot;TaskLogInfo-&quot;</span>)){
+            Return FilterReply.ACCEPT;
+        }
+        Return FilterReply.DENY;
+    }
+}
+</code></pre>
+<h3>summary</h3>
+<p>Starting from the scheduling, this paper introduces the architecture principle and implementation ideas of the big data distributed workflow scheduling system-EasyScheduler. To be continued</p>
+</section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png"/><im [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/blog.md.f25cabd.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/blog/architecture-design.json b/en-us/blog/architecture-design.json
new file mode 100644
index 0000000..59801bc
--- /dev/null
+++ b/en-us/blog/architecture-design.json
@@ -0,0 +1,10 @@
+{
+  "filename": "architecture-design.md",
+  "__html": "<h2>Architecture Design</h2>\n<p>Before explaining the architecture of the schedule system, let us first understand the common nouns of the schedule system.</p>\n<h3>1.Noun Interpretation</h3>\n<p><strong>DAG:</strong> Full name Directed Acyclic Graph,referred to as DAG。Tasks in the workflow are assembled in the form of directed acyclic graphs, which are topologically traversed from nodes with zero indegrees of ingress until there are no successor nodes. For example, the fol [...]
+  "link": "/dist/en-us/blog/architecture-design.html",
+  "meta": {
+    "title": "Architecture Design",
+    "keywords": "Apache,DolphinScheduler,scheduler,big data,ETL,airflow,hadoop,orchestration, dataops",
+    "description": "Before explaining the architecture of the schedule system, let us first understand the common nouns of the schedule system."
+  }
+}
\ No newline at end of file
diff --git a/en-us/blog/meetup_2019_10_26.html b/en-us/blog/meetup_2019_10_26.html
new file mode 100644
index 0000000..f8271f8
--- /dev/null
+++ b/en-us/blog/meetup_2019_10_26.html
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="meetup_2019_10_26">
+  <meta name="description" content="meetup_2019_10_26">
+  <title>meetup_2019_10_26</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+  <link rel="stylesheet" href="/build/blog.md.055b3f1.css">
+</head>
+<body>
+  <div id="root"><div class="blog-detail-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light ant-m [...]
+Apache Dolphin Scheduler(Incubating) Meetup has been held successfully in Shanghai 2019.10.26.</p>
+<p>Address: Shanghai Changning Yuyuan Road 1107 Chuangyi space (Hongji) 3r20</p>
+<p>The meetup was begin at 2:00 pm, and close at about 5:00 pm.</p>
+<p>The Agenda is as following:</p>
+<ul>
+<li>Introduction/overview of DolphinScheduler (William-GuoWei 14:00-14:20). <a href="https://github.com/apache/dolphinscheduler-website/tree/master/file/2019-10-26/DolphinScheduler_guowei.pptx">PPT</a></li>
+<li>DolphinScheduler internals, fairly technical: how DolphinScheduler works and so on (Zhanwei Qiao 14:20-15:00) <a href="https://github.com/apache/dolphinscheduler-website/tree/master/file/2019-10-26/DolphinScheduler_qiaozhanwei.pptx">PPT</a></li>
+<li>From open source users to PPMC --- Talking about Me and DolphinScheduler(Baoqi Wu from guandata 15:10-15:50)<a href="https://github.com/apache/dolphinscheduler-website/tree/master/file/2019-10-26/Dolphinescheduler_baoqiwu.pptx">PPT</a></li>
+<li>Application and Practice of Dolphin Scheduler in cathay-ins (Zongyao Zhang from cathay-ins 15:50-16:30)<a href="https://github.com/apache/dolphinscheduler-website/tree/master/file/2019-10-26/DolphinScheduler_zhangzongyao.pptx">PPT</a></li>
+<li>Recently released features and Roadmap (Lidong Dai 16:30-17:00) <a href="https://github.com/apache/dolphinscheduler-website/tree/master/file/2019-10-26/DolphinScheduler_dailidong.pptx">PPT</a></li>
+<li>Free discussion</li>
+</ul>
+</section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png"/><im [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/blog.md.f25cabd.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/blog/meetup_2019_10_26.json b/en-us/blog/meetup_2019_10_26.json
new file mode 100644
index 0000000..9404ac0
--- /dev/null
+++ b/en-us/blog/meetup_2019_10_26.json
@@ -0,0 +1,6 @@
+{
+  "filename": "meetup_2019_10_26.md",
+  "__html": "<p><img src=\"https://github.com/apache/dolphinscheduler-website/tree/master/img/2019-10-26-user.jpg\" alt=\"avatar\">\nApache Dolphin Scheduler(Incubating) Meetup has been held successfully in Shanghai 2019.10.26.</p>\n<p>Address: Shanghai Changning Yuyuan Road 1107 Chuangyi space (Hongji) 3r20</p>\n<p>The meetup was begin at 2:00 pm, and close at about 5:00 pm.</p>\n<p>The Agenda is as following:</p>\n<ul>\n<li>Introduction/overview of DolphinScheduler (William-GuoWei 14:0 [...]
+  "link": "/dist/en-us/blog/meetup_2019_10_26.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/blog/meetup_2019_12_08.html b/en-us/blog/meetup_2019_12_08.html
new file mode 100644
index 0000000..1b9af9c
--- /dev/null
+++ b/en-us/blog/meetup_2019_12_08.html
@@ -0,0 +1,63 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="meetup_2019_12_08">
+  <meta name="description" content="meetup_2019_12_08">
+  <title>meetup_2019_12_08</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+  <link rel="stylesheet" href="/build/blog.md.055b3f1.css">
+</head>
+<body>
+  <div id="root"><div class="blog-detail-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light ant-m [...]
+<p>Apache ShardingSphere &amp; DolphinScheduler joint Meetup</p>
+<p>Address: 7th Floor, Haizhi Venture Capital Building, No. 34 Beijing Haidian Street</p>
+<p>Meeting time: December 8, 2019 14:00 ~ 17: 30</p>
+<p><strong>Meetup description</strong></p>
+<p>Today, open source is blooming in China, and the open source trend is unstoppable. The Apache community already has more than 10 open source projects from our native China. This time, users and technology enthusiasts who joined the two Apache community projects gathered together to share open source technologies together for China's native open source contribution!</p>
+<p>Apache ShardingSphere (Incubator) is a set of open source distributed database middleware. It aims to fully and reasonably utilize the computing and storage capabilities of relational databases in distributed scenarios, and provides standardized data sharding, distributed transactions, and database governance. Functions can be applied to various diverse application scenarios such as Java isomorphism, heterogeneous languages, and cloud native.</p>
+<p>Apache DolphinScheduler (Incubator) is a distributed decentralized, easily scalable visual DAG workflow task scheduling system. Committed to solving the intricate dependencies in the data processing process, it has features such as high reliability (HA), easy expansion, support for most task scenarios, and ease of use (visual drag), and has been used by dozens of companies.</p>
+<p>The two communities are invited to use the theory and practice of partners and Committer to share experience and communicate on the spot. At the end of the event, there will be wonderful discussions on how to join the Apache community and become a Committer or PPMC. Contribute to open source together!</p>
+<p><strong>The agenda is as follows</strong></p>
+<ul>
+<li>14:00 - 14:40 The integration of DolphinScheduler and containerization (Xiaochun Liu) <a href="/file/2019-12-08/DolphinScheduler_liuxiaochun.pptx">PPT</a></li>
+<li>14:40 - 15:20 Analyzing of Sharding-Proxy principle (Yonglun Zhang <a href="/file/2019-12-08/ShardingSphere_zhangyonglun.pptx">PPT</a></li>
+<li>15:20 - 16:00 Migration and application of DolphinScheduler in Baiwang (Shuang Yang)<a href="/file/2019-12-08/DolphinScheduler_yangshuang.pptx">PPT</a></li>
+<li>16:10 - 16:40 The Architecture of ShardingSphere and Roadmap (Juan Pan)  <a href="/file/2019-12-08/ShardingSphere_panjuan.pptx">PPT</a></li>
+<li>16:40 - 17:20 Roundtable Discussion - How to join the Apache community and to be a committer</li>
+<li>Free discussion</li>
+</ul>
+<p><strong>Wonderful moment</strong></p>
+<p><img src="/img/2019-12-08/951576036704_.pic_hd.jpg" alt="avatar"></p>
+<p><img src="/img/2019-12-08/961576036709_.pic_hd.jpg" alt="avatar"></p>
+<p><img src="/img/2019-12-08/971576036713_.pic_hd.jpg" alt="avatar"></p>
+<p><img src="/img/2019-12-08/981576036714_.pic.jpg" alt="avatar"></p>
+<p><img src="/img/2019-12-08/991576036717_.pic_hd.jpg" alt="avatar"></p>
+</section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png"/><im [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/blog.md.f25cabd.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/blog/meetup_2019_12_08.json b/en-us/blog/meetup_2019_12_08.json
new file mode 100644
index 0000000..ac7dbf8
--- /dev/null
+++ b/en-us/blog/meetup_2019_12_08.json
@@ -0,0 +1,6 @@
+{
+  "filename": "meetup_2019_12_08.md",
+  "__html": "<p><img src=\"/img/2019-12-08/941576036700_.pic_hd.jpg\" alt=\"avatar\"></p>\n<p>Apache ShardingSphere &amp; DolphinScheduler joint Meetup</p>\n<p>Address: 7th Floor, Haizhi Venture Capital Building, No. 34 Beijing Haidian Street</p>\n<p>Meeting time: December 8, 2019 14:00 ~ 17: 30</p>\n<p><strong>Meetup description</strong></p>\n<p>Today, open source is blooming in China, and the open source trend is unstoppable. The Apache community already has more than 10 open source pr [...]
+  "link": "/dist/en-us/blog/meetup_2019_12_08.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/community/DSIP.html b/en-us/community/DSIP.html
new file mode 100644
index 0000000..5fb8c37
--- /dev/null
+++ b/en-us/community/DSIP.html
@@ -0,0 +1,107 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="DSIP">
+  <meta name="description" content="DSIP">
+  <title>DSIP</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+</head>
+<body>
+  <div id="root"><div class="md2html community-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light [...]
+<p>DolphinScheduler Improvement Proposal(DSIP) introduce major improvements to the Apache DolphinScheduler codebase. It is
+not for small incremental improvements, and the purpose of DSIP is to notice and inform community the finished or coming
+big feature for Apache DolphinScheduler.</p>
+<h2>What is considered as DSIP</h2>
+<ul>
+<li>Any major new feature, major improvement, introduce or remove components</li>
+<li>Any major change of public interfaces, such as API endpoints, web ui huge change</li>
+</ul>
+<p>When the change in doubt and any committer thinks it should be DSIP, it does.</p>
+<p>We use GitHub Issue and Apache mail thread to record and hold DSIP, for more detail you could go to section
+<a href="#current-dsips">current DSIPs</a> and <a href="#past-dsips">past DSIPs</a>.</p>
+<p>As a DSIP, it should:</p>
+<ul>
+<li>Have a mail thread title started with <code>[DISCUSS]</code> in <a href="mailto:dev@dolphinscheduler.apache.org">dev@dolphinscheduler.apache.org</a></li>
+<li>Have a GitHub Issue labeled with <code>DSIP</code>, and including the mail thread link in the description.</li>
+</ul>
+<h3>Current DSIPs</h3>
+<p>Current DSIPs including all DSIP still work-in-progress, you could see in <a href="https://github.com/apache/dolphinscheduler/issues?q=is%3Aissue+is%3Aopen+label%3A%22DSIP%22">current DSIPs</a></p>
+<h3>Past DSIPs</h3>
+<p>Past DSIPs including all DSIP already done or retired for some reason, you could see in <a href="https://github.com/apache/dolphinscheduler/issues?q=is%3Aissue+is%3Aclosed+label%3A%22DSIP%22+">past DSIPs</a></p>
+<h2>DSIP Process</h2>
+<h3>Create GitHub Issue</h3>
+<p>All DSIP should start with GitHub Issue</p>
+<ul>
+<li>If you pretty sure your issue is DSIP, you could click and choose &quot;DSIP&quot; in
+<a href="https://github.com/apache/dolphinscheduler/issues/new/choose">GitHub Issue</a></li>
+<li>If you not sure about your issue is DSIP or not, you could click and choose &quot;Feature request&quot; in
+<a href="https://github.com/apache/dolphinscheduler/issues/new/choose">GitHub Issue</a>. DolphinScheduler maintainer team would add label <code>DSIP</code>, mention you in the
+issue and lead you to this document when they think it should be DSIP.</li>
+</ul>
+<p>You should add special prefix <code>[DSIP-XXX]</code>, <code>XXX</code> stand for the id DSIP. It's auto increment, and you could find the next
+integer in <a href="https://github.com/apache/dolphinscheduler/issues?q=is%3Aissue+label%3A%22DSIP%22+">All DSIPs</a> issues.</p>
+<h3>Send Discuss Mail</h3>
+<p>After issue labeled with &quot;DSIP&quot;, you should send an email to <a href="mailto:dev@dolphinscheduler.apache.org">dev@dolphinscheduler.apache.org</a>.
+Describe the purpose, and the draft design about your idea.</p>
+<p>Here is the template for mail</p>
+<ul>
+<li>
+<p>Title: <code>[DISCUSS][DSIP-XXX] &lt;CHANGE-TO-YOUR-LOVELY-PROPOSAL-TITLE&gt;</code>, change <code>XXX</code> to special integer you just change in
+<a href="#create-github-issue">GitHub Issue</a>, and also change proposal title.</p>
+</li>
+<li>
+<p>Content:</p>
+<pre><code class="language-text">Hi community,
+
+&lt;CHANGE-TO-YOUR-PROPOSAL-DETAIL&gt;
+
+I already add a GitHub Issue for my proposal, which you could see in &lt;CHANGE-TO-YOUR-GITHUB-ISSUE-LINK&gt;.
+
+Looking forward any feedback for this thread.
+</code></pre>
+</li>
+</ul>
+<p>After community discuss and all of them think it worth as DSIP, you could <a href="#work-on-it-or-create-subtask-for-it">work on it</a>.
+But if community think it should not be DSIP or even this change should not be included to DolphinScheduler, maintainers
+terminate mail thread and remove label &quot;DSIP&quot; for GitHub Issue, or even close issue if it should not change.</p>
+<h3>Work On It, Or Create Subtask For It</h3>
+<p>When your proposal pass in the mail thread, you could make your hand dirty and start the work. You could submit related
+pull requests in GitHub if change should in one single commit. What's more, if proposal is too huge in single commit, you
+could create subtasks in GitHub Issue like <a href="https://github.com/apache/dolphinscheduler/issues/6407">DSIP-1</a>, and separate into multiple commit.</p>
+<h3>Close After It Done</h3>
+<p>When DSIP is finished and all related PR were merged, you should reply the mail thread you created in
+<a href="#send-discuss-mail">step two</a> to notice community the result of the DSIP. After that, this DSIP GitHub Issue would be
+closed and transfer from <a href="https://github.com/apache/dolphinscheduler/issues?q=is%3Aissue+is%3Aopen+label%3A%22DSIP%22">current DSIPs</a> to <a href="https://github.com/apache/dolphinscheduler/issues?q=is%3Aissue+is%3Aclosed+label%3A%22DSIP%22+">past DSIPs</a>, but you could still find it in <a href="https://github.com/apache/dolphinscheduler/issues?q=is%3Aissue+label%3A%22DSIP%22+">All DSIPs</a></p>
+<h2>An Example For DSIP</h2>
+<ul>
+<li><a href="https://github.com/apache/dolphinscheduler/issues/6407">[DSIP-1][Feature][Parent] Add Python API for DolphinScheduler</a>: Have multiple subtasks and Projects on it.</li>
+</ul>
+</div></section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/community.md.4b2dc90.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/community/DSIP.json b/en-us/community/DSIP.json
new file mode 100644
index 0000000..d366863
--- /dev/null
+++ b/en-us/community/DSIP.json
@@ -0,0 +1,6 @@
+{
+  "filename": "DSIP.md",
+  "__html": "<h1>DSIP</h1>\n<p>DolphinScheduler Improvement Proposal(DSIP) introduce major improvements to the Apache DolphinScheduler codebase. It is\nnot for small incremental improvements, and the purpose of DSIP is to notice and inform community the finished or coming\nbig feature for Apache DolphinScheduler.</p>\n<h2>What is considered as DSIP</h2>\n<ul>\n<li>Any major new feature, major improvement, introduce or remove components</li>\n<li>Any major change of public interfaces, suc [...]
+  "link": "/dist/en-us/community/DSIP.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/community/development/DS-License.html b/en-us/community/development/DS-License.html
new file mode 100644
index 0000000..98f34cc
--- /dev/null
+++ b/en-us/community/development/DS-License.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="DS-License">
+  <meta name="description" content="DS-License">
+  <title>DS-License</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+</head>
+<body>
+  <div id="root"><div class="md2html community-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light [...]
+<p>As we know that DolphinScheduler is an open-source undergoing project at The Apache Software Foundation (ASF), which means that you have to follow the Apache way to become the DolphinScheduler contributor. Furthermore, Apache has extremely strict rules according to the License. This passage will explain the ASF license and how to avoid License risks at the early stage when you participate in DolphinScheduler.</p>
+<p>Note: This article only applies to the Apache projects.</p>
+<h3>Licenses Could be Accepted to the Apache Project</h3>
+<p>You have to pay attention to the following open-source software protocols which Apache projects support when you intend to add a new feature to the DolphinScheduler (or other Apache projects), which functions refers to other open-source software references.</p>
+<p><a href="https://apache.org/legal/resolved.html">ASF 3RD PARTY LICENSE POLICY</a></p>
+<p>If the 3rd party software is not present at the above policy, we are sorry that your code can not pass the audit and we suggest searching for other substitute plans.</p>
+<p>Besides,  when you demand new dependencies in the project, please email us about the reason and the outcome of the influence to <a href="mailto:dev@dolphinscheduler.apache.org">dev@dolphinscheduler.apache.org</a> to discuss. Besides, you need at least 3 positive votes from the PPMC to finish the whole step.</p>
+<h3>How to Legally Use 3rd Party Open-source Software in the DolphinScheduler</h3>
+<p>Moreover, when we intend to refer a new software ( not limited to 3rd party jar, text, CSS, js, pics, icons, audios etc and modifications based on 3rd party files) to our project, we need to use them legally in addition to the permission of ASF. Refer to the following article:</p>
+<ul>
+<li><a href="https://apache.org/dev/licensing-howto.html">COMMUNITY-LED DEVELOPMENT &quot;THE APACHE WAY&quot;</a></li>
+</ul>
+<p>For example, we should contain the NOTICE file (every open-source project has NOTICE file, generally under root directory) of ZooKeeper in our project when we are using ZooKeeper. As the Apache explains, &quot;Work&quot; shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work.</p>
+<p>We are not going to dive into every 3rd party open-source license policy, you may look up them if interested.</p>
+<h3>DolphinScheduler-License Check Rules</h3>
+<p>In general, we would have our License-check scripts to our project. DolphinScheduler-License is provided by <a href="https://github.com/kezhenxu94">kezhenxu94</a> which differ a bit from other open-source projects. All in all, we are trying to make sure avoiding the license issues at the first time.</p>
+<p>We need to follow the following steps when we need to add new jars or external resources:</p>
+<ul>
+<li>Add the name and the version of the jar file in the known-dependencies.txt</li>
+<li>Add relevant maven repository address under 'dolphinscheduler-dist/release-docs/LICENSE' directory</li>
+<li>Append relevant NOTICE files under 'dolphinscheduler-dist/release-docs/NOTICE' directory and make sure they are no different to the original repository</li>
+<li>Add relevant source code protocols under 'dolphinscheduler-dist/release-docs/license/' directory and the file name should be named as license+filename.txt. Eg: license-zk.txt</li>
+</ul>
+<h3>References</h3>
+<ul>
+<li><a href="https://apache.org/dev/licensing-howto.html">COMMUNITY-LED DEVELOPMENT &quot;THE APACHE WAY&quot;</a></li>
+<li><a href="https://apache.org/legal/resolved.html">ASF 3RD PARTY LICENSE POLICY</a></li>
+</ul>
+</div></section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/community.md.4b2dc90.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/community/development/DS-License.json b/en-us/community/development/DS-License.json
new file mode 100644
index 0000000..43ce477
--- /dev/null
+++ b/en-us/community/development/DS-License.json
@@ -0,0 +1,6 @@
+{
+  "filename": "DS-License.md",
+  "__html": "<h1>License Notice</h1>\n<p>As we know that DolphinScheduler is an open-source undergoing project at The Apache Software Foundation (ASF), which means that you have to follow the Apache way to become the DolphinScheduler contributor. Furthermore, Apache has extremely strict rules according to the License. This passage will explain the ASF license and how to avoid License risks at the early stage when you participate in DolphinScheduler.</p>\n<p>Note: This article only applie [...]
+  "link": "/dist/en-us/community/development/DS-License.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/community/development/become-a-committer.html b/en-us/community/development/become-a-committer.html
new file mode 100644
index 0000000..3568586
--- /dev/null
+++ b/en-us/community/development/become-a-committer.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="become-a-committer">
+  <meta name="description" content="become-a-committer">
+  <title>become-a-committer</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+</head>
+<body>
+  <div id="root"><div class="md2html community-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light [...]
+<p>Anyone can be a contributor to an Apache project. Being a contributor simply means that you take an interest in the project and contribute in some way, ranging from asking sensible questions (which documents the project and provides feedback to developers) through to providing new features as patches.</p>
+<p>If you become a valuable contributor to the project you may well be invited to become a committer. Committer is a term used at the ASF to signify someone who is committed to a particular project. It brings with it the privilege of write access to the project repository and resources.</p>
+<p>In Dolphinscheduler community, if a committer who have earned even more merit, can be invited to be a part of the Project Management Committee (PMC).</p>
+<p>One thing that is sometimes hard to understand when you are new to the open development process used at the ASF, is that we value the community more than the code. A strong and healthy community will be respectful and be a fun and rewarding place. More importantly, a diverse and healthy community can continue to support the code over the longer term, even as individual companies come and go from the field.</p>
+<p>More details could be found <a href="https://community.apache.org/contributors/">here</a>.</p>
+</div></section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/community.md.4b2dc90.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/community/development/become-a-committer.json b/en-us/community/development/become-a-committer.json
new file mode 100644
index 0000000..d79000f
--- /dev/null
+++ b/en-us/community/development/become-a-committer.json
@@ -0,0 +1,6 @@
+{
+  "filename": "become-a-committer.md",
+  "__html": "<h1>How to Become DolphinScheduler Committer</h1>\n<p>Anyone can be a contributor to an Apache project. Being a contributor simply means that you take an interest in the project and contribute in some way, ranging from asking sensible questions (which documents the project and provides feedback to developers) through to providing new features as patches.</p>\n<p>If you become a valuable contributor to the project you may well be invited to become a committer. Committer is a  [...]
+  "link": "/dist/en-us/community/development/become-a-committer.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/community/development/code-conduct.html b/en-us/community/development/code-conduct.html
new file mode 100644
index 0000000..2739d14
--- /dev/null
+++ b/en-us/community/development/code-conduct.html
@@ -0,0 +1,137 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="code-conduct">
+  <meta name="description" content="code-conduct">
+  <title>code-conduct</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+</head>
+<body>
+  <div id="root"><div class="md2html community-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light [...]
+<p>The following Code of Conduct is based on full compliance with the <a href="https://www.apache.org/foundation/policies/conduct.html">Apache Software Foundation Code of Conduct</a>.</p>
+<h2>Development philosophy</h2>
+<ul>
+<li><strong>Consistent</strong> code style, naming, and usage are consistent.</li>
+<li><strong>Easy to read</strong> code is obvious, easy to read and understand, when debugging one knows the intent of the code.</li>
+<li><strong>Neat</strong> agree with the concepts of《Refactoring》and《Code Cleanliness》and pursue clean and elegant code.</li>
+<li><strong>Abstract</strong> hierarchy is clear and the concepts are refined and reasonable. Keep methods, classes, packages, and modules at the same level of abstraction.</li>
+<li><strong>Heart</strong> Maintain a sense of responsibility and continue to be carved in the spirit of artisans.</li>
+</ul>
+<h2>Development specifications</h2>
+<ul>
+<li>Executing <code>mvn -U clean package -Prelease</code> can compile and test through all test cases.</li>
+<li>The test coverage tool checks for no less than dev branch coverage.</li>
+<li>In the root directory, use Checkstyle to check your code for special reasons for violating validation rules. The template location is located at ds_check_style.xml.</li>
+<li>Follow the coding specifications.</li>
+</ul>
+<h2>Coding specifications</h2>
+<ul>
+<li>Use linux line breaks.</li>
+<li>Indentation (including empty lines) is consistent with the last line.</li>
+<li>An empty line is required between the class declaration and the following variable or method.</li>
+<li>There should be no meaningless empty lines.</li>
+<li>Classes, methods, and variables should be named as the name implies and abbreviations should be avoided.</li>
+<li>Return value variables are named after <code>result</code>; <code>each</code> is used in loops to name loop variables; and <code>entry</code> is used in map instead of <code>each</code>.</li>
+<li>The cached exception is called <code>e</code>; Catch the exception and do nothing, and the exception is named <code>ignored</code>.</li>
+<li>Configuration Files are named in camelCase, and file names are lowercase with uppercase initial/starting letter.</li>
+<li>Code that requires comment interpretation should be as small as possible and interpreted by method name.</li>
+<li><code>equals</code> and <code>==</code> In a conditional expression, the constant is left, the variable is on the right, and in the expression greater than less than condition, the variable is left and the constant is right.</li>
+<li>In addition to the abstract classes used for inheritance, try to design the class as <code>final</code>.</li>
+<li>Nested loops are as much a method as possible.</li>
+<li>The order in which member variables are defined and the order in which parameters are passed is consistent across classes and methods.</li>
+<li>Priority is given to the use of guard statements.</li>
+<li>Classes and methods have minimal access control.</li>
+<li>The private method used by the method should follow the method, and if there are multiple private methods, the writing private method should appear in the same order as the private method in the original method.</li>
+<li>Method entry and return values are not allowed to be <code>null</code>.</li>
+<li>The return and assignment statements of if else are preferred with the tri-objective operator.</li>
+<li>Priority is given to <code>LinkedList</code> and only use <code>ArrayList</code> if you need to get element values in the collection through the index.</li>
+<li>Collection types such as <code>ArrayList</code>,<code>HashMap</code> that may produce expansion must specify the initial size of the collection to avoid expansion.</li>
+<li>Logs and notes are always in English.</li>
+<li>Comments can only contain <code>javadoc</code>, <code>todo</code> and <code>fixme</code>.</li>
+<li>Exposed classes and methods must have javadoc, other classes and methods and methods that override the parent class do not require javadoc.</li>
+</ul>
+<h2>Unit test specifications</h2>
+<ul>
+<li>
+<p>Test code and production code are subject to the same code specifications.</p>
+</li>
+<li>
+<p>Unit tests are subject to AIR (Automatic, Independent, Repeatable) Design concept.</p>
+<ul>
+<li>Automatic: Unit tests should be fully automated, not interactive. Manual checking of output results is prohibited, <code>System.out</code>, <code>log</code>, etc. are not allowed, and must be verified with assertions.</li>
+<li>Independent: It is prohibited to call each other between unit test cases and to rely on the order of execution. Each unit test can be run independently.</li>
+<li>Repeatable: Unit tests cannot be affected by the external environment and can be repeated.</li>
+</ul>
+</li>
+<li>
+<p>Unit tests are subject to BCDE(Border, Correct, Design, Error) Design principles.</p>
+<ul>
+<li>Border (Boundary value test): The expected results are obtained by entering the boundaries of loop boundaries, special values, data order, etc.</li>
+<li>Correct (Correctness test): The expected results are obtained with the correct input.</li>
+<li>Design (Rationality Design): Design high-quality unit tests in combination with production code design.</li>
+<li>Error (Fault tolerance test): The expected results are obtained through incorrect input such as illegal data, abnormal flow, etc.</li>
+</ul>
+</li>
+<li>
+<p>If there is no special reason, the test needs to be fully covered.</p>
+</li>
+<li>
+<p>Each test case needs to be accurately asserted.</p>
+</li>
+<li>
+<p>Prepare the environment for code separation from the test code.</p>
+</li>
+<li>
+<p>Only jUnit <code>Assert</code>,hamcrest <code>CoreMatchers</code>,Mockito Correlation can use static import.</p>
+</li>
+<li>
+<p>Single-data assertions should use <code>assertTrue</code>,<code>assertFalse</code>,<code>assertNull</code> and <code>assertNotNull</code>.</p>
+</li>
+<li>
+<p>Multi-data assertions should use <code>assertThat</code>.</p>
+</li>
+<li>
+<p>Accurate assertion, try not to use <code>not</code>,<code>containsString</code> assertion.</p>
+</li>
+<li>
+<p>The true value of the test case should be named actualXXX, and the expected value should be named expectedXXX.</p>
+</li>
+<li>
+<p>Classes and Methods with <code>@Test</code> labels do not require javadoc.</p>
+</li>
+<li>
+<p>Public specifications.</p>
+<ul>
+<li>Each line is no longer than <code>200</code> in length, ensuring that each line is semantically complete for easy understanding.</li>
+</ul>
+</li>
+</ul>
+</div></section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/community.md.4b2dc90.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/community/development/code-conduct.json b/en-us/community/development/code-conduct.json
new file mode 100644
index 0000000..7462459
--- /dev/null
+++ b/en-us/community/development/code-conduct.json
@@ -0,0 +1,6 @@
+{
+  "filename": "code-conduct.md",
+  "__html": "<h1>Code of Conduct</h1>\n<p>The following Code of Conduct is based on full compliance with the <a href=\"https://www.apache.org/foundation/policies/conduct.html\">Apache Software Foundation Code of Conduct</a>.</p>\n<h2>Development philosophy</h2>\n<ul>\n<li><strong>Consistent</strong> code style, naming, and usage are consistent.</li>\n<li><strong>Easy to read</strong> code is obvious, easy to read and understand, when debugging one knows the intent of the code.</li>\n<li> [...]
+  "link": "/dist/en-us/community/development/code-conduct.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/community/development/commit-message.html b/en-us/community/development/commit-message.html
new file mode 100644
index 0000000..f8a8b8a
--- /dev/null
+++ b/en-us/community/development/commit-message.html
@@ -0,0 +1,103 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="commit-message">
+  <meta name="description" content="commit-message">
+  <title>commit-message</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+</head>
+<body>
+  <div id="root"><div class="md2html community-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light [...]
+<h3>Preface</h3>
+<p>A good commit message can help other developers (or future developers) quickly understand the context of related changes, and can also help project managers determine whether the commit is suitable for inclusion in the release. But when we checked the commit logs of many open source projects, we found an interesting problem. Some developers have very good code quality, but the commit message record is rather confusing. When other contributors or learners are viewing the code, it can’t [...]
+The purpose of the changes before and after the submission, as Peter Hutterer said:Re-establishing the context of a piece of code is wasteful. We can’t avoid it completely, so our efforts should go to reducing it as much as possible. Commit messages can do exactly that and as a result, a commit message shows whether a developer is a good collaborator. Therefore, DolphinScheduler developed the protocol in conjunction with other communities and official Apache documents.</p>
+<h3>Commit Message RIP</h3>
+<h4>1:Clearly modify the content</h4>
+<p>A commit message should clearly state what issues (bug fixes, function enhancements, etc.) the submission solves, so that other developers can better track the issues and clarify the optimization during the version iteration process.</p>
+<h4>2:Associate the corresponding Pull Request or Issue</h4>
+<p>When our changes are large, the commit message should best be associated with the relevant Issue or Pull Request on GitHub, so that our developers can quickly understand the context of the code submission through the associated information when reviewing the code. If the current commit is for an issue, then the issue can be closed in the Footer section.</p>
+<h4>3:Unified format</h4>
+<p>The formatted CommitMessage can help provide more historical information for quick browsing, and it can also generate a Change Log directly from commit.</p>
+<p>Commit message should include three parts: Header, Body and Footer. Among them, Header is required, Body and Footer can be omitted.</p>
+<h5>Header</h5>
+<p>The header part has only one line, including three fields: type (required), scope (optional), and subject (required).</p>
+<p>[DS-ISSUE number][type] subject</p>
+<p>(1) Type is used to indicate the category of commit, and only the following 7 types are allowed.</p>
+<ul>
+<li>feat:New features</li>
+<li>fix:Bug fixes</li>
+<li>docs:Documentation</li>
+<li>style: Format (does not affect changes in code operation)</li>
+<li>refactor:Refactoring (It is not a new feature or a code change to fix a bug)</li>
+<li>test:Add test</li>
+<li>chore:Changes in the build process or auxiliary tools</li>
+</ul>
+<p>If the type is feat and fix, the commit will definitely appear in the change log. Other types (docs, chore, style, refactor, test) are not recommended.</p>
+<p>(2) Scope</p>
+<p>Scope is used to indicate the scope of commit impact, such as server, remote, etc. If there is no suitable scope, you can use *.</p>
+<p>(3) subject</p>
+<p>Subject is a short description of the purpose of the commit, no more than 50 characters.</p>
+<h5>Body</h5>
+<p>The body part is a detailed description of this commit, which can be divided into multiple lines, and the line break will wrap with 72 characters to avoid automatic line wrapping affecting the appearance.</p>
+<p>Note the following points in the Body section:</p>
+<ul>
+<li>
+<p>Use the verb-object structure, note the use of present tense. For example, use change instead of changed or changes</p>
+</li>
+<li>
+<p>Don't capitalize the first letter</p>
+</li>
+<li>
+<p>The end of the sentence does not need a ‘.’ (period)</p>
+</li>
+</ul>
+<h5>Footer</h5>
+<p>Footer only works in two situations</p>
+<p>(1) Incompatible changes</p>
+<p>If the current code is not compatible with the previous version, the Footer part starts with BREAKING CHANGE, followed by a description of the change, the reason for the change, and the migration method.</p>
+<p>(2) Close Issue</p>
+<p>If the current commit is for a certain issue, you can close the issue in the Footer section, or close multiple issues at once.</p>
+<h5>For Example</h5>
+<pre><code>[DS-001][docs-en] add commit message
+
+- commit message RIP
+- build some conventions
+- help the commit messages become clean and tidy
+- help developers and release managers better track issues
+  and clarify the optimization in the version iteration
+
+This closes #001
+</code></pre>
+<h3>Reference documents</h3>
+<p><a href="https://cwiki.apache.org/confluence/display/GEODE/Commit+Message+Format">Commit message format</a></p>
+<p><a href="http://who-t.blogspot.com/2009/12/on-commit-messages.html">On commit messages-Peter Hutterer</a></p>
+<p><a href="https://mp.weixin.qq.com/s/LKM4IXAY-7dKhTzGu5-oug">RocketMQ Community Operation Conventions</a></p>
+</div></section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/community.md.4b2dc90.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/community/development/commit-message.json b/en-us/community/development/commit-message.json
new file mode 100644
index 0000000..aa7ff1b
--- /dev/null
+++ b/en-us/community/development/commit-message.json
@@ -0,0 +1,6 @@
+{
+  "filename": "commit-message.md",
+  "__html": "<h1>Commit Message Notice</h1>\n<h3>Preface</h3>\n<p>A good commit message can help other developers (or future developers) quickly understand the context of related changes, and can also help project managers determine whether the commit is suitable for inclusion in the release. But when we checked the commit logs of many open source projects, we found an interesting problem. Some developers have very good code quality, but the commit message record is rather confusing. Whe [...]
+  "link": "/dist/en-us/community/development/commit-message.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/community/development/contribute.html b/en-us/community/development/contribute.html
new file mode 100644
index 0000000..fb86b13
--- /dev/null
+++ b/en-us/community/development/contribute.html
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="contribute">
+  <meta name="description" content="contribute">
+  <title>contribute</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+</head>
+<body>
+  <div id="root"><div class="md2html community-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light [...]
+<p>First of all, thank you very much for choosing and using DolphinScheduler, and welcome to join the DolphinScheduler family!</p>
+<p>We encourage any form of participation in the community that will eventually become Committer or PPMC Such as:</p>
+<ul>
+<li>Problems will be encountered via github on the <a href="https://github.com/apache/dolphinscheduler/issues">issue</a> form feedback out.</li>
+<li>Answer the issue questions that others are asking.</li>
+<li>Help improve the documentation.</li>
+<li>Help your project add test cases.</li>
+<li>Add comments to the code.</li>
+<li>Submit a PR that fixes the bug or Feature.</li>
+<li>Publish application case practice, scheduling process analysis, or technical articles related to scheduling.</li>
+<li>Help promote DolphinScheduler, participate in technical conferences or meetup, sharing and more.</li>
+</ul>
+<p>Welcome to the contributing team and join open source starting with submitting your first PR.</p>
+<ul>
+<li>For example, add code comments or find &quot;easy to fix&quot; tags or some very simple issue (misspellings, etc.) and so on, first familiarize yourself with the submission process through the first simple PR.</li>
+</ul>
+<p>Note: Contributions are not limited to PR Only, but contribute to the development of the project.</p>
+<p>I'm sure you'll benefit from open source by participating in DolphinScheduler!</p>
+<h3>1. Participate in documentation contributions.</h3>
+<p>Refer to the <a href="document.md">Submit Guide-Document Notice</a></p>
+<h3>2. Participate in code contributions.</h3>
+<p>Refer to the <a href="issue.md">Submit Guide-Issue Notice</a>, <a href="pull-request.md">Submit Guide-Pull Request Notice</a>, <a href="commit-message.md">Submit Guide-Commit Message Notice</a></p>
+<h3>3. How to pick up an Issue and submit a Pull Request.</h3>
+<p>If you want to implement a Feature or fix a Bug. Please refer to the following:</p>
+<ul>
+<li>All Bugs and the new Features are recommended and managed using the Issues Page.</li>
+<li>If you want to develop a Feature, first reply to the Issue associated with that feature, indicating that you are currently working on it. And set yourself a &quot;deadline&quot; when to Submit the Feature, and add it in the reply comment.</li>
+<li>It's a good idea to find a mentor (or an instructor) in the core contributors who gives immediate feedback on design and functional implementation.</li>
+<li>You should create a new branch to start your work, to get the name of the branch refer to the <a href="pull-request.md">Submit Guide-Pull Request Notice</a>. For example, if you want to complete the feature and submit Issue 111, your branch name should be feature-111. The feature name can be determined after discussion with the instructor.</li>
+<li>When you're done, send a Pull Request to dolphinscheduler, please refer to the《<a href="submit-code.md">Submit Guide-Submit Pull Request Process</a>》</li>
+</ul>
+<p>If you want to submit a Pull Request to complete a Feature or fix a Bug, it is recommended that you start with the <code>good first issue</code>, <code>easy-to-fix</code> issues, complete a small function to submit, do not change too many files at a time, changing too many files will also put a lot of pressure on Reviewers, it is recommended to submit them through multiple Pull Requests, not all at once.</p>
+</div></section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/community.md.4b2dc90.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/community/development/contribute.json b/en-us/community/development/contribute.json
new file mode 100644
index 0000000..bc42154
--- /dev/null
+++ b/en-us/community/development/contribute.json
@@ -0,0 +1,6 @@
+{
+  "filename": "contribute.md",
+  "__html": "<h1>Participate in Contributing</h1>\n<p>First of all, thank you very much for choosing and using DolphinScheduler, and welcome to join the DolphinScheduler family!</p>\n<p>We encourage any form of participation in the community that will eventually become Committer or PPMC Such as:</p>\n<ul>\n<li>Problems will be encountered via github on the <a href=\"https://github.com/apache/dolphinscheduler/issues\">issue</a> form feedback out.</li>\n<li>Answer the issue questions that  [...]
+  "link": "/dist/en-us/community/development/contribute.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/community/development/document.html b/en-us/community/development/document.html
new file mode 100644
index 0000000..a50b482
--- /dev/null
+++ b/en-us/community/development/document.html
@@ -0,0 +1,103 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="document">
+  <meta name="description" content="document">
+  <title>document</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+</head>
+<body>
+  <div id="root"><div class="md2html community-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light [...]
+<p>Good documentation is critical for any type of software. Any contribution that can improve the DolphinScheduler documentation is welcome.</p>
+<h3>Get the document project</h3>
+<p>Documentation for the DolphinScheduler project is maintained in a separate <a href="https://github.com/apache/dolphinscheduler-website">git repository</a>.</p>
+<p>First you need to fork the document project into your own github repository, and then clone the document to your local computer.</p>
+<pre><code>git clone https://github.com/&lt;your-github-user-name&gt;/dolphinscheduler-website
+</code></pre>
+<h3>The document environment</h3>
+<p>The DolphinScheduler website is supported by <a href="https://github.com/chengshiwen/docsite-ext">docsite</a></p>
+<p>Make sure that your node version is 10+, docsite does not yet support versions higher than 10.x.</p>
+<h3>Document build guide</h3>
+<ol>
+<li>
+<p>Run <code>npm install</code> in the root directory to install the dependencies.</p>
+</li>
+<li>
+<p>Run <code>npm run start</code> in the root directory to start a local server, you will see the website in '<a href="http://localhost:8080">http://localhost:8080</a>'.</p>
+</li>
+<li>
+<p>Run <code>npm run build</code> to build source code into dist directory.</p>
+</li>
+<li>
+<p>Verify your change locally: <code>python -m SimpleHTTPServer 8000</code>, when your python version is 3 use :<code>python3 -m http.server 8000</code> instead.</p>
+</li>
+</ol>
+<p>If the latest version of node is installed locally, consider using <code>nvm</code> to allow different versions of <code>node</code> to run on your computer.</p>
+<ol>
+<li>
+<p>Refer to the <a href="http://nvm.sh">Instructions</a> to install nvm.</p>
+</li>
+<li>
+<p>Run <code>nvm install v10.23.1</code> to install node v10.</p>
+</li>
+<li>
+<p>Run <code>nvm use v10.23.1</code> to switch the current working environment to node v10.</p>
+</li>
+</ol>
+<p>Now you can run and build the website in your local environment.</p>
+<h3>The document specification</h3>
+<ol>
+<li>
+<p>** Spaces are Required ** between Chinese characters and English or numbers and ** Spaces are not required ** between Chinese punctuation marks and English or numbers, to enhance the aesthetics and readability of the Chinese-English mix.</p>
+</li>
+<li>
+<p>It is recommended that you use &quot;you&quot; in general. Of course, you can use the term when necessary, such as when there is a warning prompt.</p>
+</li>
+</ol>
+<h3>How to submit a document Pull Request</h3>
+<ol>
+<li>
+<p>Do not use &quot;git add.&quot; to commit all changes.</p>
+</li>
+<li>
+<p>Simply push the changed files, for example:</p>
+</li>
+</ol>
+<ul>
+<li><code>*.md</code></li>
+<li><code>blog.js or docs.js or site.js</code></li>
+</ul>
+<ol start="3">
+<li>Submit the Pull Request to the <strong>master</strong> branch.</li>
+</ol>
+<h3>Reference to the documentation</h3>
+<p><a href="https://cwiki.apache.org/confluence/display/FLINK/Flink+Translation+Specifications">Apache Flink Translation Specifications</a></p>
+</div></section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/community.md.4b2dc90.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/community/development/document.json b/en-us/community/development/document.json
new file mode 100644
index 0000000..e0057f5
--- /dev/null
+++ b/en-us/community/development/document.json
@@ -0,0 +1,6 @@
+{
+  "filename": "document.md",
+  "__html": "<h1>Documentation Notice</h1>\n<p>Good documentation is critical for any type of software. Any contribution that can improve the DolphinScheduler documentation is welcome.</p>\n<h3>Get the document project</h3>\n<p>Documentation for the DolphinScheduler project is maintained in a separate <a href=\"https://github.com/apache/dolphinscheduler-website\">git repository</a>.</p>\n<p>First you need to fork the document project into your own github repository, and then clone the do [...]
+  "link": "/dist/en-us/community/development/document.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/community/development/issue.html b/en-us/community/development/issue.html
new file mode 100644
index 0000000..139cef3
--- /dev/null
+++ b/en-us/community/development/issue.html
@@ -0,0 +1,158 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="issue">
+  <meta name="description" content="issue">
+  <title>issue</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+</head>
+<body>
+  <div id="root"><div class="md2html community-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light [...]
+<h2>Preface</h2>
+<p>Issues function is used to track various Features, Bugs, Functions, etc. The project maintainer can organize the tasks to be completed through issues.</p>
+<p>Issue is an important step in drawing out a feature or bug,
+and the contents that can be discussed in an issue are not limited to the features, the causes of the existing bugs, the research on preliminary scheme, and the corresponding implementation design and code design.</p>
+<p>And only when the Issue is approved, the corresponding Pull Request should be implemented.</p>
+<p>If an issue corresponds to a large feature, it is recommended to divide it into multiple small issues according to the functional modules and other dimensions.</p>
+<h2>Specification</h2>
+<h3>Issue title</h3>
+<p>Title Format: [<code>Issue Type</code>][<code>Module Name</code>] <code>Issue Description</code></p>
+<p>The <code>Issue Type</code> is as follows:</p>
+<table>
+    <thead>
+        <tr>
+            <th style="width: 10%; text-align: center;">Issue Type</th>
+            <th style="width: 20%; text-align: center;">Description</th>
+            <th style="width: 20%; text-align: center;">Example</th>
+        </tr>
+    </thead>
+    <tbody>
+        <tr>
+            <td style="text-align: center;">Feature</td>
+            <td style="text-align: center;">Include expected new features and functions</td>
+            <td style="text-align: center;">[Feature][api] Add xxx api in xxx controller</td>
+        </tr>
+        <tr>
+            <td style="text-align: center;">Bug</td>
+            <td style="text-align: center;">Bugs in the program</td>
+            <td style="text-align: center;">[Bug][api] Throw exception when xxx</td>
+        </tr>
+        <tr>
+            <td style="text-align: center;">Improvement</td>
+            <td style="text-align: center;">Some improvements of the current program, not limited to code format, program performance, etc</td>
+            <td style="text-align: center;">[Improvement][server] Improve xxx between Master and Worker</td>
+        </tr>
+        <tr>
+            <td style="text-align: center;">Test</td>
+            <td style="text-align: center;">Specifically for the test case</td>
+            <td style="text-align: center;">[Test][server] Add xxx e2e test</td>
+        </tr>
+        <tr>
+            <td style="text-align: center;">Sub-Task</td>
+            <td style="text-align: center;">Those generally are subtasks of feature class. For large features, they can be divided into many small subtasks to complete one by one</td>
+            <td style="text-align: center;">[Sub-Task][server] Implement xxx in xxx</td>
+        </tr>
+    </tbody>
+</table>
+<p>The <code>Module Name</code> is as follows:</p>
+<table>
+    <thead>
+        <tr>
+            <th style="width: 10%; text-align: center;">Module Name</th>
+            <th style="width: 20%; text-align: center;">Description</th>
+        </tr>
+    </thead>
+    <tbody>
+        <tr>
+            <td style="text-align: center;">alert</td>
+            <td style="text-align: center;">Alert module</td>
+        </tr>
+        <tr>
+            <td style="text-align: center;">api</td>
+            <td style="text-align: center;">Application program interface layer module</td>
+        </tr>
+        <tr>
+            <td style="text-align: center;">service</td>
+            <td style="text-align: center;">Application service layer module</td>
+        </tr>
+        <tr>
+            <td style="text-align: center;">dao</td>
+            <td style="text-align: center;">Application data access layer module</td>
+        </tr>
+        <tr>
+            <td style="text-align: center;">plugin</td>
+            <td style="text-align: center;">Plugin module</td>
+        </tr>
+        <tr>
+            <td style="text-align: center;">remote</td>
+            <td style="text-align: center;">Communication module</td>
+        </tr>
+        <tr>
+            <td style="text-align: center;">server</td>
+            <td style="text-align: center;">Server module</td>
+        </tr>
+        <tr>
+            <td style="text-align: center;">ui</td>
+            <td style="text-align: center;">Front end module</td>
+        </tr>
+        <tr>
+            <td style="text-align: center;">docs-zh</td>
+            <td style="text-align: center;">Chinese document module</td>
+        </tr>
+        <tr>
+            <td style="text-align: center;">docs</td>
+            <td style="text-align: center;">English document module</td>
+        </tr>
+        <tr>
+            <td style="text-align: center;">...</td>
+            <td style="text-align: center;">-</td>
+        </tr>
+    </tbody>
+</table>
+<h3>Issue content template</h3>
+<p><a href="https://github.com/apache/dolphinscheduler/tree/dev/.github/ISSUE_TEMPLATE">https://github.com/apache/dolphinscheduler/tree/dev/.github/ISSUE_TEMPLATE</a></p>
+<h3>Contributor</h3>
+<p>Except for some special cases, it is recommended to discuss under issue or mailing list to determine the design scheme or provide the design scheme,
+as well as the code implementation design before completing the issue.</p>
+<p>If there are many different solutions, it is suggested to make a decision through mailing list or voting under issue.
+The issue can be implemented after final scheme and code implementation design being approved.
+The main purpose of this is to avoid wasting time caused by different opinions on implementation design or reconstruction in the pull request review stage.</p>
+<h3>Question</h3>
+<ul>
+<li>
+<p>How to deal with the user who raises an issue does not know the module corresponding to the issue.</p>
+<p>It is true that most users when raising issue do not know which module the issue belongs to.
+In fact, this is very common in many open source communities. In this case, the committer / contributor actually knows the module affected by the issue.
+If the issue is really valuable after being approved by committer and contributor, then the committer can modify the issue title according to the specific module involved in the issue,
+or leave a message to the user who raises the issue to modify it into the corresponding title.</p>
+</li>
+</ul>
+</div></section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/community.md.4b2dc90.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/community/development/issue.json b/en-us/community/development/issue.json
new file mode 100644
index 0000000..3c93783
--- /dev/null
+++ b/en-us/community/development/issue.json
@@ -0,0 +1,6 @@
+{
+  "filename": "issue.md",
+  "__html": "<h1>Issue Notice</h1>\n<h2>Preface</h2>\n<p>Issues function is used to track various Features, Bugs, Functions, etc. The project maintainer can organize the tasks to be completed through issues.</p>\n<p>Issue is an important step in drawing out a feature or bug,\nand the contents that can be discussed in an issue are not limited to the features, the causes of the existing bugs, the research on preliminary scheme, and the corresponding implementation design and code design.</ [...]
+  "link": "/dist/en-us/community/development/issue.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/community/development/microbench.html b/en-us/community/development/microbench.html
new file mode 100644
index 0000000..ad7a533
--- /dev/null
+++ b/en-us/community/development/microbench.html
@@ -0,0 +1,121 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="microbench">
+  <meta name="description" content="microbench">
+  <title>microbench</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+</head>
+<body>
+  <div id="root"><div class="md2html community-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light [...]
+<p>All optimization must be based on data verification, and blind optimization is rejected. Based on this, we provide the MicroBench module.</p>
+<p>The MicroBench module is based on the OpenJDK JMH component (HotSpot's recommended benchmark test program). When you start benchmarking, you don't need additional dependencies.</p>
+<p>JMH, the Java MicroBenchmark Harness, is a tool suite dedicated to code microbenchmark testing. What is Micro Benchmark? Simply put, it is based on method-level benchmark testing, with an accuracy of microseconds. When you locate a hot method and want to further optimize the performance of the method, you can use JMH to quantitatively analyze the optimized results.</p>
+<h3>Several points to note in Java benchmark testing:</h3>
+<ul>
+<li>
+<p>Prevent useless code from entering the test method.</p>
+</li>
+<li>
+<p>Concurrent testing.</p>
+</li>
+<li>
+<p>The test results are presented.</p>
+</li>
+</ul>
+<h3>Typical application scenarios of JMH are:</h3>
+<ul>
+<li>
+<p>1: Quantitatively analyze the optimization effect of a hotspot function</p>
+</li>
+<li>
+<p>2: Want to quantitatively know how long a function needs to be executed, and the correlation between execution time and input variables</p>
+</li>
+<li>
+<p>3: Compare multiple implementations of a function</p>
+</li>
+</ul>
+<p>DolphinScheduler-MicroBench provides AbstractBaseBenchmark, you can inherit from it, write your benchmark code, AbstractMicroBenchmark can guarantee to run in JUnit mode.</p>
+<h3>Customized operating parameters</h3>
+<p>The default AbstractMicrobenchmark configuration is</p>
+<p>Warmup times 10 (warmupIterations)</p>
+<p>Number of tests 10 (measureIterations)</p>
+<p>Fork quantity 2 (forkCount)</p>
+<p>You can specify these parameters at startup,-DmeasureIterations, -DperfReportDir (output benchmark test result file directory), -DwarmupIterations, -DforkCount</p>
+<h3>DolphinScheduler-MicroBench Introduction</h3>
+<p>It is generally not recommended to use fewer cycles when running tests. However, a smaller number of tests helps to verify the work during the benchmark test. After the verification is over, run a large number of benchmark tests.</p>
+<pre><code class="language-java"><span class="hljs-meta">@Warmup(iterations = 2, time = 1)</span>
+<span class="hljs-meta">@Measurement(iterations = 4, time = 1)</span>
+<span class="hljs-meta">@State(Scope.Benchmark)</span>
+<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">EnumBenchMark</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">AbstractBaseBenchmark</span> </span>{
+
+}
+</code></pre>
+<p>This can run benchmarks at the method level or the class level. Command line parameters will override the parameters on the annotation.</p>
+<pre><code class="language-java"><span class="hljs-meta">@Benchmark</span> <span class="hljs-comment">// Method annotation, indicating that the method is an object that needs to be benchmarked.</span>
+<span class="hljs-meta">@BenchmarkMode(Mode.AverageTime)</span> <span class="hljs-comment">// Optional benchmark test mode is obtained through enumeration</span>
+<span class="hljs-meta">@OutputTimeUnit(TimeUnit.MICROSECONDS)</span> <span class="hljs-comment">// Output time unit</span>
+<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">enumStaticMapTest</span><span class="hljs-params">()</span> </span>{
+    TestTypeEnum.newGetNameByType(testNum);
+}
+</code></pre>
+<p>When your benchmark test is written, you can run it to view the specific test conditions: (The actual results depend on your system configuration)</p>
+<p>First, it will warm up our code,</p>
+<pre><code class="language-java"># Warmup Iteration   1: 0.007 us/op
+# Warmup Iteration   2: 0.008 us/op
+Iteration   1: 0.004 us/op
+Iteration   2: 0.004 us/op
+Iteration   3: 0.004 us/op
+Iteration   4: 0.004 us/op
+</code></pre>
+<p>After warmup, we usually get the following results</p>
+<pre><code class="language-java">Benchmark                        (testNum)   Mode  Cnt          Score           Error  Units
+EnumBenchMark.simpleTest               <span class="hljs-number">101</span>  thrpt    <span class="hljs-number">8</span>  <span class="hljs-number">428750972.826</span> ±  <span class="hljs-number">66511362.350</span>  ops/s
+EnumBenchMark.simpleTest               <span class="hljs-number">108</span>  thrpt    <span class="hljs-number">8</span>  <span class="hljs-number">299615240.337</span> ± <span class="hljs-number">290089561.671</span>  ops/s
+EnumBenchMark.simpleTest               <span class="hljs-number">103</span>  thrpt    <span class="hljs-number">8</span>  <span class="hljs-number">288423221.721</span> ± <span class="hljs-number">130542990.747</span>  ops/s
+EnumBenchMark.simpleTest               <span class="hljs-number">104</span>  thrpt    <span class="hljs-number">8</span>  <span class="hljs-number">236811792.152</span> ± <span class="hljs-number">155355935.479</span>  ops/s
+EnumBenchMark.simpleTest               <span class="hljs-number">105</span>  thrpt    <span class="hljs-number">8</span>  <span class="hljs-number">472247775.246</span> ±  <span class="hljs-number">45769877.951</span>  ops/s
+EnumBenchMark.simpleTest               <span class="hljs-number">103</span>  thrpt    <span class="hljs-number">8</span>  <span class="hljs-number">455473025.252</span> ±  <span class="hljs-number">61212956.944</span>  ops/s
+EnumBenchMark.enumStaticMapTest        <span class="hljs-number">101</span>   avgt    <span class="hljs-number">8</span>          <span class="hljs-number">0.006</span> ±         <span class="hljs-number">0.003</span>  us/op
+EnumBenchMark.enumStaticMapTest        <span class="hljs-number">108</span>   avgt    <span class="hljs-number">8</span>          <span class="hljs-number">0.005</span> ±         <span class="hljs-number">0.002</span>  us/op
+EnumBenchMark.enumStaticMapTest        <span class="hljs-number">103</span>   avgt    <span class="hljs-number">8</span>          <span class="hljs-number">0.006</span> ±         <span class="hljs-number">0.005</span>  us/op
+EnumBenchMark.enumStaticMapTest        <span class="hljs-number">104</span>   avgt    <span class="hljs-number">8</span>          <span class="hljs-number">0.006</span> ±         <span class="hljs-number">0.004</span>  us/op
+EnumBenchMark.enumStaticMapTest        <span class="hljs-number">105</span>   avgt    <span class="hljs-number">8</span>          <span class="hljs-number">0.004</span> ±         <span class="hljs-number">0.001</span>  us/op
+EnumBenchMark.enumStaticMapTest        <span class="hljs-number">103</span>   avgt    <span class="hljs-number">8</span>          <span class="hljs-number">0.004</span> ±         <span class="hljs-number">0.001</span>  us/op
+EnumBenchMark.enumValuesTest           <span class="hljs-number">101</span>   avgt    <span class="hljs-number">8</span>          <span class="hljs-number">0.011</span> ±         <span class="hljs-number">0.004</span>  us/op
+EnumBenchMark.enumValuesTest           <span class="hljs-number">108</span>   avgt    <span class="hljs-number">8</span>          <span class="hljs-number">0.025</span> ±         <span class="hljs-number">0.016</span>  us/op
+EnumBenchMark.enumValuesTest           <span class="hljs-number">103</span>   avgt    <span class="hljs-number">8</span>          <span class="hljs-number">0.019</span> ±         <span class="hljs-number">0.010</span>  us/op
+EnumBenchMark.enumValuesTest           <span class="hljs-number">104</span>   avgt    <span class="hljs-number">8</span>          <span class="hljs-number">0.018</span> ±         <span class="hljs-number">0.018</span>  us/op
+EnumBenchMark.enumValuesTest           <span class="hljs-number">105</span>   avgt    <span class="hljs-number">8</span>          <span class="hljs-number">0.014</span> ±         <span class="hljs-number">0.012</span>  us/op
+EnumBenchMark.enumValuesTest           <span class="hljs-number">103</span>   avgt    <span class="hljs-number">8</span>          <span class="hljs-number">0.012</span> ±         <span class="hljs-number">0.009</span>  us/op
+</code></pre>
+<p>OpenJDK officially gave a lot of sample codes, interested students can query and learn JMH by themselves:<a href="http://hg.openjdk.java.net/code-tools/jmh/file/tip/jmh-samples/src/main/java/org/openjdk/jmh/samples/">OpenJDK-JMH-Example</a></p>
+</div></section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/community.md.4b2dc90.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/community/development/microbench.json b/en-us/community/development/microbench.json
new file mode 100644
index 0000000..af547b2
--- /dev/null
+++ b/en-us/community/development/microbench.json
@@ -0,0 +1,6 @@
+{
+  "filename": "microbench.md",
+  "__html": "<h1>Micro BenchMark Notice</h1>\n<p>All optimization must be based on data verification, and blind optimization is rejected. Based on this, we provide the MicroBench module.</p>\n<p>The MicroBench module is based on the OpenJDK JMH component (HotSpot's recommended benchmark test program). When you start benchmarking, you don't need additional dependencies.</p>\n<p>JMH, the Java MicroBenchmark Harness, is a tool suite dedicated to code microbenchmark testing. What is Micro Be [...]
+  "link": "/dist/en-us/community/development/microbench.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/community/development/pull-request.html b/en-us/community/development/pull-request.html
new file mode 100644
index 0000000..2ba9b5e
--- /dev/null
+++ b/en-us/community/development/pull-request.html
@@ -0,0 +1,122 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="pull-request">
+  <meta name="description" content="pull-request">
+  <title>pull-request</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+</head>
+<body>
+  <div id="root"><div class="md2html community-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light [...]
+<h2>Preface</h2>
+<p>Pull Request is a way of software cooperation, which is a process of bringing code involving different functions into the trunk. During this process, the code can be discussed, reviewed, and modified.</p>
+<p>In Pull Request, we try not to discuss the implementation of the code. The general implementation of the code and its logic should be determined in Issue. In the Pull Request, we only focus on the code format and code specification, so as to avoid wasting time caused by different opinions on implementation.</p>
+<h2>Specification</h2>
+<h3>Pull Request Title</h3>
+<p>Title Format: [<code>Pull Request Type</code>-<code>Issue No</code>][<code>Module Name</code>] <code>Pull Request Description</code></p>
+<p>The corresponding relationship between <code>Pull Request Type</code> and <code>Issue Type</code> is as follows:</p>
+<table>
+    <thead>
+        <tr>
+            <th style="width: 10%; text-align: center;">Issue Type</th>
+            <th style="width: 20%; text-align: center;">Pull Request Type</th>
+            <th style="width: 20%; text-align: center;">Example(Suppose Issue No is 3333)</th>
+        </tr>
+    </thead>
+    <tbody>
+        <tr>
+            <td style="text-align: center;">Feature</td>
+            <td style="text-align: center;">Feature</td>
+            <td style="text-align: center;">[Feature-3333][server] Implement xxx</td>
+        </tr>
+        <tr>
+            <td style="text-align: center;">Bug</td>
+            <td style="text-align: center;">Fix</td>
+            <td style="text-align: center;">[Fix-3333][server] Fix xxx</td>
+        </tr>
+        <tr>
+            <td style="text-align: center;">Improvement</td>
+            <td style="text-align: center;">Improvement</td>
+            <td style="text-align: center;">[Improvement-3333][alert] Improve the performance of xxx</td>
+        </tr>
+        <tr>
+            <td style="text-align: center;">Test</td>
+            <td style="text-align: center;">Test</td>
+            <td style="text-align: center;">[Test-3333][api] Add the e2e test of xxx</td>
+        </tr>
+        <tr>
+            <td style="text-align: center;">Sub-Task</td>
+            <td style="text-align: center;">(Parent type corresponding to Sub-Task)</td>
+            <td style="text-align: center;">[Feature-3333][server] Implement xxx</td>
+        </tr>
+    </tbody>
+</table>
+<p><code>Issue No</code> refers to the Issue number corresponding to the current Pull Request to be resolved, <code>Module Name</code> is the same as the <code>Module Name</code> of Issue.</p>
+<h3>Pull Request Branch</h3>
+<p>Branch name format: <code>Pull Request type</code>-<code>Issue number</code>. e.g. Feature-3333</p>
+<h3>Pull Request Content</h3>
+<p>Please refer to the commit message section.</p>
+<h3>Pull Request Code Style</h3>
+<p>Code style is the thing you have to consider when you submit pull request for DolphinScheduler. We using <a href="https://checkstyle.sourceforge.io">Checkstyle</a>, a development tool to help programmers write Java code that adheres to a coding standard, in CI to keep DolphinScheduler codebase in the same style. Your pull request could not be merged if your code style checker failed. You could format your code by <em>Checkstyle</em> in your local environment before you submit your pul [...]
+<ol>
+<li>
+<p>Prepare Checkstyle configuration file: You could download it manually by <a href="https://github.com/apache/dolphinscheduler/blob/dev/style/checkstyle.xml">click here</a>, but find it in DolphinScheduler repository would be a better way. You could find configuration file in the path <code>style/checkstyle.xml</code> after you clone repository from Github.</p>
+</li>
+<li>
+<p>Download Checkstyle plugins in Intellij IDEA: Search plugin by keyword <strong>CheckStyle-IDEA</strong> or install in <a href="https://plugins.jetbrains.com/plugin/1065-checkstyle-idea">this page</a>. You could see <a href="https://www.jetbrains.com/help/idea/managing-plugins.html#install_plugin_from_repo">install plugin</a> if you do not know how to install plugin in Intellij IDEA</p>
+</li>
+<li>
+<p>Configure and activate Checkstyle and Intellij IDEA code-style: After completing the above steps, you could configure and activate it in your environment. You could find Checkstyle plugins in the path <code>Preferences -&gt; Tool -&gt; Checkstyle</code>. After that you could activate Checkstyles as screenshot show</p>
+</li>
+</ol>
+<p align="center">
+    <img src="/img/checkstyle-idea.png" alt="checkstyle idea configuration" />
+</p>
+<p>For now your Checkstyle plugins are setup, it would show codes and files which out of style. We highly recommend you configure Intellij IDEA code-style for auto-formatting your code in Intellij IDEA, you could find this setting in <code>Preferences -&gt; Editor -&gt; Code Style -&gt; Java</code> and then activate it as screenshot show</p>
+<p align="center">
+    <img src="/img/code-style-idea.png" alt="code style idea configuration" />
+</p>
+<ol>
+<li>Format your codebase in Intellij IDEA before submit your pull request: After you done above steps, you could using Intellij IDEA shortcut <code>Command + L</code>(for Mac) or <code>Ctrl+L</code>(for Windows) to format your code. The best time to format your code is before you commit your change to your local git repository.</li>
+</ol>
+<h3>Question</h3>
+<ul>
+<li>
+<p>How to deal with one Pull Request to many Issues scenario.</p>
+<p>First of all, there are fewer scenarios for one Pull Request to many Issues.
+The root cause is that multiple issues need to do the same thing.
+Usually, there are two solutions to this scenario: the first is to merge multiple issues with into the same issue, and then close the other issues;
+the second is multiple issues have subtle differences.
+In this scenario, the responsibilities of each issue can be clearly divided. The type of each issue is marked as Sub-Task, and then these sub task type issues are associated with one issue.
+And each Pull Request is submitted should be associated with only one issue of a sub task.</p>
+</li>
+</ul>
+</div></section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/community.md.4b2dc90.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/community/development/pull-request.json b/en-us/community/development/pull-request.json
new file mode 100644
index 0000000..8bc58d4
--- /dev/null
+++ b/en-us/community/development/pull-request.json
@@ -0,0 +1,6 @@
+{
+  "filename": "pull-request.md",
+  "__html": "<h1>Pull Request Notice</h1>\n<h2>Preface</h2>\n<p>Pull Request is a way of software cooperation, which is a process of bringing code involving different functions into the trunk. During this process, the code can be discussed, reviewed, and modified.</p>\n<p>In Pull Request, we try not to discuss the implementation of the code. The general implementation of the code and its logic should be determined in Issue. In the Pull Request, we only focus on the code format and code s [...]
+  "link": "/dist/en-us/community/development/pull-request.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/community/development/submit-code.html b/en-us/community/development/submit-code.html
new file mode 100644
index 0000000..41dd730
--- /dev/null
+++ b/en-us/community/development/submit-code.html
@@ -0,0 +1,112 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="submit-code">
+  <meta name="description" content="submit-code">
+  <title>submit-code</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+</head>
+<body>
+  <div id="root"><div class="md2html community-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light [...]
+<ul>
+<li>
+<p>First from the remote repository <em><a href="https://github.com/apache/dolphinscheduler.git">https://github.com/apache/dolphinscheduler.git</a></em> fork a copy of the code into your own repository</p>
+</li>
+<li>
+<p>There are currently three branches in the remote repository:</p>
+<ul>
+<li>master           normal delivery branch
+After the stable release, merge the code from the stable branch into the master.</li>
+<li>dev              daily development branch
+Every day dev development branch, newly submitted code can pull request to this branch.</li>
+</ul>
+</li>
+<li>
+<p>Clone your repository to your local
+<code>git clone https://github.com/apache/dolphinscheduler.git</code></p>
+</li>
+<li>
+<p>Add remote repository address, named upstream
+<code>git remote add upstream https://github.com/apache/dolphinscheduler.git</code></p>
+</li>
+<li>
+<p>View repository
+    <code>git remote -v</code></p>
+</li>
+</ul>
+<blockquote>
+<p>At this time, there will be two repositories: origin (your own repository) and upstream (remote repository)</p>
+</blockquote>
+<ul>
+<li>
+<p>Get/Update remote repository code
+    <code>git fetch upstream</code></p>
+</li>
+<li>
+<p>Synchronize remote repository code to local repository</p>
+</li>
+</ul>
+<pre><code>git checkout origin/dev
+git merge --no-ff upstream/dev
+</code></pre>
+<p>If remote branch has a new branch such as <code>dev-1.0</code>, you need to synchronize this branch to the local repository</p>
+<pre><code>git checkout -b dev-1.0 upstream/dev-1.0
+git push --set-upstream origin dev-1.0
+</code></pre>
+<ul>
+<li>Create new branch</li>
+</ul>
+<pre><code>git checkout -b xxx origin/dev
+</code></pre>
+<p>Make sure that the branch <code>xxx</code> is building successfully on the latest code of the official dev branch</p>
+<ul>
+<li>After modifying the code locally in the new branch, submit it to your own repository:</li>
+</ul>
+<p><code>git commit -m 'commit content'</code></p>
+<p><code>git push origin xxx --set-upstream</code></p>
+<ul>
+<li>
+<p>Submit changes to the remote repository</p>
+</li>
+<li>
+<p>On the github page, click &quot;New pull request&quot;.</p>
+</li>
+<li>
+<p>Select the modified local branch and the branch you want to merge with the past, click &quot;Create pull request&quot;.</p>
+</li>
+<li>
+<p>Then the community Committers will do CodeReview, and then he will discuss some details (including design, implementation, performance, etc.) with you. When everyone on the team is satisfied with this modification, the commit will be merged into the dev branch</p>
+</li>
+<li>
+<p>Finally, congratulations, you have become an official contributor to dolphinscheduler!</p>
+</li>
+</ul>
+</div></section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/community.md.4b2dc90.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/community/development/submit-code.json b/en-us/community/development/submit-code.json
new file mode 100644
index 0000000..e74ce6e
--- /dev/null
+++ b/en-us/community/development/submit-code.json
@@ -0,0 +1,6 @@
+{
+  "filename": "submit-code.md",
+  "__html": "<h1>Submit Code</h1>\n<ul>\n<li>\n<p>First from the remote repository <em><a href=\"https://github.com/apache/dolphinscheduler.git\">https://github.com/apache/dolphinscheduler.git</a></em> fork a copy of the code into your own repository</p>\n</li>\n<li>\n<p>There are currently three branches in the remote repository:</p>\n<ul>\n<li>master           normal delivery branch\nAfter the stable release, merge the code from the stable branch into the master.</li>\n<li>dev          [...]
+  "link": "/dist/en-us/community/development/submit-code.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/community/development/subscribe.html b/en-us/community/development/subscribe.html
new file mode 100644
index 0000000..b88fc4a
--- /dev/null
+++ b/en-us/community/development/subscribe.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="subscribe">
+  <meta name="description" content="subscribe">
+  <title>subscribe</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+</head>
+<body>
+  <div id="root"><div class="md2html community-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light [...]
+<p>It is highly recommended to subscribe to the development mailing list to keep up-to-date with the community.</p>
+<p>In the process of using DolphinScheduler, if you have any questions or ideas, suggestions, you can participate in the DolphinScheduler community building through the Apache mailing list. Sending a subscription email is also very simple, the steps are as follows:</p>
+<ol>
+<li>
+<p>Send an email to <a href="mailto:dev-subscribe@dolphinscheduler.apache.org">dev-subscribe@dolphinscheduler.apache.org</a> with your own email address, subject and content are arbitrary.</p>
+</li>
+<li>
+<p>Receive confirmation email and reply. After completing step 1, you will receive a confirmation email from <a href="mailto:dev-help@dolphinscheduler.apache.org">dev-help@dolphinscheduler.apache.org</a> (if not received, please confirm whether the email is automatically classified as spam, promotion email, subscription email, etc.) . Then reply directly to the email, or click on the link in the email to reply quickly, the subject and content are arbitrary.</p>
+</li>
+<li>
+<p>Receive a welcome email. After completing the above steps, you will receive a welcome email with the subject WELCOME to <a href="mailto:dev@dolphinscheduler.apache.org">dev@dolphinscheduler.apache.org</a>, and you have successfully subscribed to the Apache DolphinScheduler mailing list.</p>
+</li>
+</ol>
+<h1>Unsubscribe Mailing Lists</h1>
+<p>If you do not need to know what's going on with DolphinScheduler, you can unsubscribe from the mailing list.</p>
+<p>Unsubscribe from the mailing list steps are as follows:</p>
+<ol>
+<li>
+<p>Send an email to <a href="mailto:dev-unsubscribe@dolphinscheduler.apache.org">dev-unsubscribe@dolphinscheduler.apache.org</a> with your subscribed email address, subject and content are arbitrary.</p>
+</li>
+<li>
+<p>Receive confirmation email and reply. After completing step 1, you will receive a confirmation email from <a href="mailto:dev-help@dolphinscheduler.apache.org">dev-help@dolphinscheduler.apache.org</a> (if not received, please confirm whether the email is automatically classified as spam, promotion email, subscription email, etc.) . Then reply directly to the email, or click on the link in the email to reply quickly, the subject and content are arbitrary.</p>
+</li>
+<li>
+<p>Receive a goodbye email. After completing the above steps, you will receive a goodbye email with the subject GOODBYE from <a href="mailto:dev@dolphinscheduler.apache.org">dev@dolphinscheduler.apache.org</a>, and you have successfully unsubscribed to the Apache DolphinScheduler mailing list, and you will not receive emails from <a href="mailto:dev@dolphinscheduler.apache.org">dev@dolphinscheduler.apache.org</a>.</p>
+</li>
+</ol>
+</div></section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/community.md.4b2dc90.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/community/development/subscribe.json b/en-us/community/development/subscribe.json
new file mode 100644
index 0000000..5bc9a3f
--- /dev/null
+++ b/en-us/community/development/subscribe.json
@@ -0,0 +1,6 @@
+{
+  "filename": "subscribe.md",
+  "__html": "<h1>Subscribe Mailing Lists</h1>\n<p>It is highly recommended to subscribe to the development mailing list to keep up-to-date with the community.</p>\n<p>In the process of using DolphinScheduler, if you have any questions or ideas, suggestions, you can participate in the DolphinScheduler community building through the Apache mailing list. Sending a subscription email is also very simple, the steps are as follows:</p>\n<ol>\n<li>\n<p>Send an email to <a href=\"mailto:dev-subs [...]
+  "link": "/dist/en-us/community/development/subscribe.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/community/development/unit-test.html b/en-us/community/development/unit-test.html
new file mode 100644
index 0000000..c165593
--- /dev/null
+++ b/en-us/community/development/unit-test.html
@@ -0,0 +1,128 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="unit-test">
+  <meta name="description" content="unit-test">
+  <title>unit-test</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+</head>
+<body>
+  <div id="root"><div class="md2html community-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light [...]
+<h3>1. The Benefits of Writing Unit Tests</h3>
+<ul>
+<li>Unit tests help everyone to get into the details of the code and understand how it works.</li>
+<li>Through test cases we can find bugs and submit robust code.</li>
+<li>The test case is also a demo usage of the code.</li>
+</ul>
+<h3>2. Some design principles for unit test cases</h3>
+<ul>
+<li>The steps, granularity and combination of conditions should be carefully designed.</li>
+<li>Pay attention to boundary conditions.</li>
+<li>Unit tests should be well designed as well as avoiding useless code.</li>
+<li>When you find a <code>method</code> is difficult to write unit test, and if you confirm that the <code>method</code> is <code>bad code</code>, then refactor it with the developer.</li>
+</ul>
+<!-- markdown-link-check-disable -->
+<ul>
+<li>DolphinScheduler: <a href="http://site.mockito.org/">mockito</a>. Here are some development guides: <a href="http://www.baeldung.com/bdd-mockito">mockito tutorial</a>, <a href="https://dzone.com/refcardz/mockito">mockito refcard</a></li>
+</ul>
+<!-- markdown-link-check-enable -->
+<ul>
+<li>TDD(option): When you start writing a new feature, you can try writing test cases first.</li>
+</ul>
+<h3>3. Test coverage setpoint</h3>
+<ul>
+<li>At this stage, the default value for test coverage of Delta change codes is &gt;= 60%, the higher the better.</li>
+<li>We can see the test reports on this page:  <a href="https://codecov.io/gh/apache/dolphinscheduler">https://codecov.io/gh/apache/dolphinscheduler</a></li>
+</ul>
+<h2>Fundamental guidelines for unit test</h2>
+<h3>1. Isolation and singleness</h3>
+<p>A test case should be accurate to the method level, and it should be possible to execute the test case alone. At the same time the focus is always on the method (only the method is tested).</p>
+<p>If the method is too complex, it should be split up again during the development phase. For test cases, it is best that a case focuses on only one branch (judgment). When changes are applied to it, they only affect the success of a test case. This will greatly facilitate our verification of issues and problem solving during the development phase. At the same time, however, it also poses a great challenge in terms of coverage.</p>
+<h3>2. Automaticity</h3>
+<p>Unit tests can be automated. Mandatory: all unit tests must be written under src/test. Also the method naming should conform to the specification. Benchmark tests are excluded.</p>
+<h3>3. reproducibility</h3>
+<p>Multiple executions (any environment, any time) result in unique and repeatable results.</p>
+<h3>4. Lightweight</h3>
+<p>That is, any environment can be implemented quickly.</p>
+<p>This requires that we don't rely on too many components, such as various spring beans and the like. These are all mock in unit tests, nd adding them would increase the speed of our single-test execution, as well as potentially passing on contamination.</p>
+<p>For some databases, other external components, etc. As far as possible, the mock client is not dependent on the external environment (the presence of any external dependencies greatly limits the portability and stability of test cases and the correctness of results), which also makes it easy for developers to test in any environment.</p>
+<h3>5. Measurable</h3>
+<p>Over the years, mockito has grown to be the NO.1 mock, but it still doesn't support mock static methods, constructors, etc. Even the website keeps saying: &quot;Don't mock everything&quot;. So use static methods as little as possible.</p>
+<p>It is generally recommended to provide static methods only in some utility classes, in which case you don't need mocks and just use real classes. If the dependent class is not a utility class, static methods can be refactored into instance methods. This is more in line with the object-oriented design concept.</p>
+<h3>6. Completeness</h3>
+<p>Test coverage, this is a very difficult problem. For the core process, we hope to achieve 90% coverage, non-core process requirements more than 60%.</p>
+<p>High enough coverage will reduce the probability of bugs and also reduce the cost of our regression tests. This is a long process, and whenever developers add or modify code, test cases need to be refined at the same time. We hope developers and relevant code reviewer will pay enough attention to this point.</p>
+<h3>7. Refusion invalid assertion</h3>
+<p>Invalid assertions make the test itself meaningless, it has little to do with whether your code is correct or not. And there is a risk of creating an illusion of success that may last until your code is deploying to production.</p>
+<p>There are several types of invalid assertions:</p>
+<ol>
+<li>
+<p>Different types of comparisons.</p>
+</li>
+<li>
+<p>Determines that an object or variable with a default value is not null.</p>
+<p>This seems meaningless. Therefore, when making the relevant judgements you should pay attention to whether it contains a default value itself.</p>
+</li>
+<li>
+<p>Assertions should be affirmative rather than negative if possible. Assertions should be within a range of predicted results, or exact values, whenever possible (otherwise you may end up with something that doesn't match your actual expectations but passes the assertion) unless your code only cares about whether it is empty or not.</p>
+</li>
+</ol>
+<h3>8. Some points to note for unit tests</h3>
+<p>1: Thread.sleep()</p>
+<p>Try not to use Thread.sleep in your test code, it makes the test unstable and may fail unexpectedly due to the environment or load. The following approach is recommended.</p>
+<p><code>Awaitility.await().atMost(...)</code></p>
+<p>2: Ignore some test classes</p>
+<p>The @Ignore annotation should be linked to the relevant issue address so that subsequent developers can track the history of why the test was ignored.</p>
+<p>For example @Ignore(&quot;see #1&quot;).</p>
+<p>3: try-catch Unit test exception</p>
+<p>The test will fail when the code in the unit test throws an exception. Therefore, there is no need to use try-catch to catch exceptions.</p>
+<pre><code> ```java
+ @Test
+ public void testMethod() {
+   try {
+             // Some code
+   } catch (MyException e) {
+     Assert.fail(e.getMessage());  // Noncompliant
+   }
+ }
+ ```
+</code></pre>
+<p>You should this:</p>
+<pre><code class="language-java"><span class="hljs-meta">@Test</span>
+<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">testMethod</span><span class="hljs-params">()</span> <span class="hljs-keyword">throws</span> MyException </span>{
+    <span class="hljs-comment">// Some code</span>
+}
+</code></pre>
+<p>4: Test exceptions</p>
+<p>When you need to test for exceptions, you should avoid including multiple method invocations in your test code (especially if there are multiple methods that can raise the same exception), and you should clearly state what you are testing for.</p>
+<p>5: Refuse to use MockitoJUnitRunner.Silent.class</p>
+<p>When an UnnecessaryStubbingException occurs in a unit test, do not first consider using @RunWith(MockitoJUnitRunner.Silent.class) to resolve it. This just hides the problem, and you should follow the exception hint to resolve the issue in question, which is not a difficult task. When the changes are done, you will find that your code is much cleaner again.</p>
+</div></section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/community.md.4b2dc90.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/community/development/unit-test.json b/en-us/community/development/unit-test.json
new file mode 100644
index 0000000..eb5c259
--- /dev/null
+++ b/en-us/community/development/unit-test.json
@@ -0,0 +1,6 @@
+{
+  "filename": "unit-test.md",
+  "__html": "<h2>Unit Test Coverage</h2>\n<h3>1. The Benefits of Writing Unit Tests</h3>\n<ul>\n<li>Unit tests help everyone to get into the details of the code and understand how it works.</li>\n<li>Through test cases we can find bugs and submit robust code.</li>\n<li>The test case is also a demo usage of the code.</li>\n</ul>\n<h3>2. Some design principles for unit test cases</h3>\n<ul>\n<li>The steps, granularity and combination of conditions should be carefully designed.</li>\n<li>Pa [...]
+  "link": "/dist/en-us/community/development/unit-test.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/community/join/e2e-guide.html b/en-us/community/join/e2e-guide.html
new file mode 100644
index 0000000..65f2c68
--- /dev/null
+++ b/en-us/community/join/e2e-guide.html
@@ -0,0 +1,63 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="e2e-guide">
+  <meta name="description" content="e2e-guide">
+  <title>e2e-guide</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+</head>
+<body>
+  <div id="root"><div class="md2html community-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light [...]
+<p>The main purpose of E2E test is to verify the integration and data integrity of the system, and its components, by simulating real user scenarios. This makes it possible to extend the scope of testing and ensure the health and stability of the system. To a certain extent, the test workload and costs are reduced. In simple terms, E2E testing is about treating a program as a black box and simulating the access behaviour of a real system from the user's point of view to see if the input  [...]
+<p>The current community E2E test has not yet reached full coverage, so this document has been written with the aim of guiding more partners to get involved.</p>
+<h3>How to find the corresponding ISSUE?</h3>
+<p>The E2E test pages are currently divided into four pages: Project Management, Resource Center, DataSource, and Security Center.</p>
+<p>Contributors can find the task by going to GitHub, searching for <a href="https://github.com/apache/dolphinscheduler">apace/dolphinscheduler</a>, and then searching for <code>e2e test cases</code> in the <a href="https://github.com/apache/dolphinscheduler/issues?q=is%3Aissue+is%3Aopen+e2e+test+cases">issue list</a>. As shown below.</p>
+<p><img src="/img/community/join/e2e/e2e-issue.png" alt="e2e-issue"></p>
+<p>In each issue, we list the content to be tested and the expected results, which can be seen in the Description. Once you are on the current page, you can select the issue you are interested in, for example, to participate in the Security Center test, just leave a comment under the corresponding issue about the case you want to test.</p>
+<ul>
+<li>Task status: If the test has been completed, it is considered finished and as a contributor you need to find the outstanding tests.</li>
+<li>number: Test case serial number.</li>
+<li>function module: Functional modules to be tested, a functional module containing multiple test cases.</li>
+<li>test point: Specific examples of what needs to be tested. For example button click actions on pages, page jump functions.</li>
+<li>priority: The priority of the test case, <strong>which is recommended to find a high priority</strong>.</li>
+<li>service: The service that needs to be started during the test process.</li>
+<li>test steps: The test steps to be performed for each test case.</li>
+<li>expected results: The expected test results.</li>
+<li>actual results: The actual results.</li>
+<li>remarks: The precautions needed during the test process.</li>
+</ul>
+<p><img src="/img/community/join/e2e/e2e-security.png" alt="e2e-security"></p>
+<h3>How to write test code?</h3>
+<p>After taking up the corresponding task, the next step is to get to the crux of writing the code. Many partners may not be familiar with E2E test codes, so you can refer to this page: <a href="https://dolphinscheduler.apache.org/en-us/development/e2e-test.html">e2e-test</a>.</p>
+<h3>How to submit a Pull Request?</h3>
+<p>Participation in the open source community can take many forms, including issue, pull request and translation. To participate in the E2E testing process, contributors are first required to understand the simple process of submitting a pull request, see: <a href="../development/pull-request.md">Pull Request</a>.</p>
+</div></section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/community.md.4b2dc90.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/community/join/e2e-guide.json b/en-us/community/join/e2e-guide.json
new file mode 100644
index 0000000..a47ac00
--- /dev/null
+++ b/en-us/community/join/e2e-guide.json
@@ -0,0 +1,6 @@
+{
+  "filename": "e2e-guide.md",
+  "__html": "<h1>DolphinScheduler E2E Test Contribution Guide</h1>\n<p>The main purpose of E2E test is to verify the integration and data integrity of the system, and its components, by simulating real user scenarios. This makes it possible to extend the scope of testing and ensure the health and stability of the system. To a certain extent, the test workload and costs are reduced. In simple terms, E2E testing is about treating a program as a black box and simulating the access behaviour [...]
+  "link": "/dist/en-us/community/join/e2e-guide.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/community/join/review.html b/en-us/community/join/review.html
new file mode 100644
index 0000000..ed5f5a1
--- /dev/null
+++ b/en-us/community/join/review.html
@@ -0,0 +1,262 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="review">
+  <meta name="description" content="review">
+  <title>review</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+</head>
+<body>
+  <div id="root"><div class="md2html community-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light [...]
+<p>Beside submit Issues and pull requests to the GitHub repository mentioned in <a href="../team.md">team</a>, another important way to
+contribute to DolphinScheduler is reviewing GitHub Issues or Pull Requests. You can not only know the latest new and
+direction of the community, but also understand the good design in others during you reviewing. At the same time, you can
+increase your exposure in the community and accumulate your honor.</p>
+<p>Anyone is encouraged to review Issues and Pull Requests. We also raise a Help Wanted email discussion to solicit contributors
+from the community to review them. You could see detail in <a href="https://lists.apache.org/thread/9flwlzrp69xjn6v8tdkbytq8glqp2k51">mail</a>, we put the results of mail thread
+in <a href="https://github.com/apache/dolphinscheduler/discussions/7545">GitHub Discussion</a>.</p>
+<blockquote>
+<p>Note: It is only users mentioned in the <a href="https://github.com/apache/dolphinscheduler/discussions/7545">GitHub Discussion</a> can review Issues or Pull
+Requests, Community advocates <strong>Anyone is encouraged to review Issues and Pull Requests</strong>. Users in
+<a href="https://github.com/apache/dolphinscheduler/discussions/7545">GitHub Discussion</a> show their willing to review when we collect in the mail thread.
+The advantage of this list is when the community has discussion, in addition to the mention Members in <a href="../team.md">team</a>,
+you can also find some help in <a href="https://github.com/apache/dolphinscheduler/discussions/7545">GitHub Discussion</a> people. If you want to join the
+<a href="https://github.com/apache/dolphinscheduler/discussions/7545">GitHub Discussion</a>, please comment in that discussion and leave a module you are interested
+in, and the maintainer will add you to the list.</p>
+</blockquote>
+<h2>How Reviewing</h2>
+<p>DolphinScheduler receives community contributions through GitHub, and all its Issues and Pull Requests are hosted in GitHub.
+If you want to join community by reviewing, please go to section <a href="#issues">review Issues</a>, if you prefer Pull Requests please
+go to section <a href="#pull-requests">review Pull Requests</a>.</p>
+<h3>Issues</h3>
+<p>Review Issues means discuss <a href="https://github.com/apache/dolphinscheduler/issues">Issues</a> in GitHub and give suggestions on it. Include but are not limited to the following situations</p>
+<table>
+<thead>
+<tr>
+<th>Situation</th>
+<th>Reason</th>
+<th>Label</th>
+<th>Action</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>wont fix</td>
+<td>Has been fixed in dev branch</td>
+<td><a href="https://github.com/apache/dolphinscheduler/labels/wontfix">wontfix</a></td>
+<td>Close Issue, inform creator the fixed version if it already release</td>
+</tr>
+<tr>
+<td>duplicate issue</td>
+<td>Had the same problem before</td>
+<td><a href="https://github.com/apache/dolphinscheduler/labels/duplicate">duplicate</a></td>
+<td>Close issue, inform creator the link of same issue</td>
+</tr>
+<tr>
+<td>Description not clearly</td>
+<td>Without detail reproduce step</td>
+<td><a href="https://github.com/apache/dolphinscheduler/labels/need%20more%20information">need more information</a></td>
+<td>Inform creator add more description</td>
+</tr>
+</tbody>
+</table>
+<p>In addition give suggestion, add label for issue is also important during review. The labeled issues can be retrieved
+better, which convenient for further processing. An issue can with more than one label. Common issue categories are:</p>
+<table>
+<thead>
+<tr>
+<th>Label</th>
+<th>Meaning</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td><a href="https://github.com/apache/dolphinscheduler/labels/UI">UI</a></td>
+<td>UI and front-end related</td>
+</tr>
+<tr>
+<td><a href="https://github.com/apache/dolphinscheduler/labels/security">security</a></td>
+<td>Security Issue</td>
+</tr>
+<tr>
+<td><a href="https://github.com/apache/dolphinscheduler/labels/user%20experience">user experience</a></td>
+<td>User experience Issue</td>
+</tr>
+<tr>
+<td><a href="https://github.com/apache/dolphinscheduler/labels/development">development</a></td>
+<td>Development Issue</td>
+</tr>
+<tr>
+<td><a href="https://github.com/apache/dolphinscheduler/labels/Python">Python</a></td>
+<td>Python Issue</td>
+</tr>
+<tr>
+<td><a href="https://github.com/apache/dolphinscheduler/labels/plug-in">plug-in</a></td>
+<td>Plug-in Issue</td>
+</tr>
+<tr>
+<td><a href="https://github.com/apache/dolphinscheduler/labels/document">document</a></td>
+<td>Document Issue</td>
+</tr>
+<tr>
+<td><a href="https://github.com/apache/dolphinscheduler/labels/docker">docker</a></td>
+<td>Docker Issue</td>
+</tr>
+<tr>
+<td><a href="https://github.com/apache/dolphinscheduler/labels/need%20to%20verify">need verify</a></td>
+<td>Need verify Issue</td>
+</tr>
+<tr>
+<td><a href="https://github.com/apache/dolphinscheduler/labels/e2e">e2e</a></td>
+<td>E2E Issue</td>
+</tr>
+<tr>
+<td><a href="https://github.com/apache/dolphinscheduler/labels/win-os">win-os</a></td>
+<td>windows operating system Issue</td>
+</tr>
+<tr>
+<td><a href="https://github.com/apache/dolphinscheduler/labels/suggestion">suggestion</a></td>
+<td>Give suggestion to us</td>
+</tr>
+</tbody>
+</table>
+<p>Beside classification, label could also set the priority of Issues. The higher the priority, the more attention pay
+in the community, the easier it is to be fixed or implemented. The priority label are as follows</p>
+<table>
+<thead>
+<tr>
+<th>Label</th>
+<th>priority</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td><a href="https://github.com/apache/dolphinscheduler/labels/priority%3Ahigh">priority:high</a></td>
+<td>High priority</td>
+</tr>
+<tr>
+<td><a href="https://github.com/apache/dolphinscheduler/labels/priority%3Amiddle">priority:middle</a></td>
+<td>Middle priority</td>
+</tr>
+<tr>
+<td><a href="https://github.com/apache/dolphinscheduler/labels/priority%3Alow">priority:low</a></td>
+<td>Low priority</td>
+</tr>
+</tbody>
+</table>
+<p>All the labels above in common label. For all labels in this project you could see in <a href="https://github.com/apache/dolphinscheduler/labels">full label list</a></p>
+<p>Before reading following content, please make sure you have labeled the Issue.</p>
+<ul>
+<li>Remove label <a href="https://github.com/apache/dolphinscheduler/labels/Waiting%20for%20reply">Waiting for reply</a> after replying: Label <a href="https://github.com/apache/dolphinscheduler/labels/Waiting%20for%20reply">Waiting for reply</a>
+added when <a href="https://github.com/apache/dolphinscheduler/issues/new/choose">creating an Issue</a>. It makes positioning un reply issue more convenient, and you should remove
+this label after you reviewed it. If you do not remove it, will cause others to waste time looking on the same issue.</li>
+<li>Mark <a href="https://github.com/apache/dolphinscheduler/labels/Waiting%20for%20review">Waiting for review</a> when not sure whether issue is resolved or not: There are two situations
+when you review issue. One is the problem has been located or resolved, maybe have to <a href="../development/submit-code.md">Create PR</a>
+when necessary. Secondly, you are not sure about this issue, you can labeled <a href="https://github.com/apache/dolphinscheduler/labels/Waiting%20for%20review">Waiting for review</a>
+and mention others to make a second confirmation.</li>
+</ul>
+<p>When an Issue need to create Pull Requests, you could also labeled it from below.</p>
+<table>
+<thead>
+<tr>
+<th>Label</th>
+<th>Mean</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td><a href="https://github.com/apache/dolphinscheduler/labels/Chore">Chore</a></td>
+<td>Chore for project</td>
+</tr>
+<tr>
+<td><a href="https://github.com/apache/dolphinscheduler/labels/good%20first%20issue">Good first issue</a></td>
+<td>Good first issue for new contributor</td>
+</tr>
+<tr>
+<td><a href="https://github.com/apache/dolphinscheduler/labels/easy%20to%20fix">easy to fix</a></td>
+<td>Easy to fix, harder than <code>Good first issue</code></td>
+</tr>
+<tr>
+<td><a href="https://github.com/apache/dolphinscheduler/labels/help%20wanted">help wanted</a></td>
+<td>Help wanted</td>
+</tr>
+</tbody>
+</table>
+<blockquote>
+<p>Note: Only members have permission to add or delete label. When you need to add or remove lebals but are not member,
+you can <code>@</code>  members to do that. But as long as you have a GitHub account, you can comment on issues and give suggestions.
+We encourage everyone in the community to comment and answer issues</p>
+</blockquote>
+<h3>Pull Requests</h3>
+<p>Review Pull mean discussing in <a href="https://github.com/apache/dolphinscheduler/pulls">Pull Requests</a> in GitHub and giving suggestions to it. DolphinScheduler's
+Pull Requests reviewing are the same as <a href="https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/about-pull-request-reviews">GitHub's reviewing changes in pull requests</a>. You can give your
+suggestions in Pull Requests</p>
+<ul>
+<li>When you think the Pull Request is OK to be merged, you can agree to the Pull Request according to the &quot;Approve&quot; process
+in <a href="https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/about-pull-request-reviews">GitHub's reviewing changes in pull requests</a>.</li>
+<li>When you think Pull Request needs to be changed, you can comment it according to the &quot;Comment&quot; process in
+<a href="https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/about-pull-request-reviews">GitHub's reviewing changes in pull requests</a>. And when you think issues that must be fixed before they
+merged, please follow &quot;Request changes&quot; in <a href="https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/about-pull-request-reviews">GitHub's reviewing changes in pull requests</a> to ask contributors
+modify it.</li>
+</ul>
+<p>Labeled Pull Requests is an important part. Reasonable classification can save a lot of time for reviewers. The good news
+is that the label's name and usage of Pull Requests are the same in <a href="#issues">Issues</a>, which can reduce the memory. For
+example, if there is a Pull Request is related to docker and block deployment. We can label it with <a href="https://github.com/apache/dolphinscheduler/labels/docker">docker</a>
+and <a href="https://github.com/apache/dolphinscheduler/labels/priority%3Ahigh">priority:high</a>.</p>
+<p>Pull Requests have some unique labels of it own</p>
+<table>
+<thead>
+<tr>
+<th>Label</th>
+<th>Mean</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td><a href="https://github.com/apache/dolphinscheduler/labels/miss%20document">miss document</a></td>
+<td>Pull Requests miss document, and should be add</td>
+</tr>
+<tr>
+<td><a href="https://github.com/apache/dolphinscheduler/labels/first%20time%20contributor">first time contributor</a></td>
+<td>Pull Requests submit by first time contributor</td>
+</tr>
+<tr>
+<td><a href="https://github.com/apache/dolphinscheduler/labels/don%27t%20merge">don't merge</a></td>
+<td>Pull Requests have some problem and should not be merged</td>
+</tr>
+</tbody>
+</table>
+<blockquote>
+<p>Note: Only members have permission to add or delete label. When you need to add or remove lebals but are not member,
+you can <code>@</code>  members to do that. But as long as you have a GitHub account, you can comment on Pull Requests and give suggestions.
+We encourage everyone in the community to review Pull Requests</p>
+</blockquote>
+</div></section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/community.md.4b2dc90.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/community/join/review.json b/en-us/community/join/review.json
new file mode 100644
index 0000000..f96a3ba
--- /dev/null
+++ b/en-us/community/join/review.json
@@ -0,0 +1,6 @@
+{
+  "filename": "review.md",
+  "__html": "<h1>Community Review</h1>\n<p>Beside submit Issues and pull requests to the GitHub repository mentioned in <a href=\"../team.md\">team</a>, another important way to\ncontribute to DolphinScheduler is reviewing GitHub Issues or Pull Requests. You can not only know the latest new and\ndirection of the community, but also understand the good design in others during you reviewing. At the same time, you can\nincrease your exposure in the community and accumulate your honor.</p>\n [...]
+  "link": "/dist/en-us/community/join/review.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/community/release-post.html b/en-us/community/release-post.html
new file mode 100644
index 0000000..3969d38
--- /dev/null
+++ b/en-us/community/release-post.html
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="release-post">
+  <meta name="description" content="release-post">
+  <title>release-post</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+</head>
+<body>
+  <div id="root"><div class="md2html community-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light [...]
+<h2>Update Official Website</h2>
+<p>For example, after the release of <code>x.y.z</code>, the following updates are required:</p>
+<ul>
+<li><code>docs/en-us/x.y.z</code> and <code>docs/zh-cn/x.y.z</code>: copy the old directory to the new version x.y.z
+<ul>
+<li>The reference links of the included documents keep same with x.y.z, especially pay attention to the following file updates:
+<ul>
+<li><code>architecture-design.md</code></li>
+<li><code>cluster-deployment.md</code></li>
+<li><code>docker-deployment.md</code></li>
+<li><code>expansion-reduction.md</code></li>
+<li><code>kubernetes-deployment.md</code></li>
+<li><code>standalone-deployment.md</code></li>
+<li><code>upgrade.md</code></li>
+</ul>
+</li>
+</ul>
+</li>
+<li><code>docs/en-us/release/history-versions.md</code> and <code>docs/zh-cn/release/history-versions.md</code>: Add the new version and link for x.y.z</li>
+<li><code>download/en-us/download.md</code> and <code>download/zh-cn/download.md</code>: add the download of the x.y.z release package</li>
+<li><code>site_config/docsx-y-z.js</code>: copy the old configuration file to the new version, and keep the content link same with x.y.z</li>
+<li><code>site_config/site.js</code>:
+<ul>
+<li><code>docsLatest</code>: update to x.y.z</li>
+<li><code>docs0</code>: The <code>text</code> of two places of <code>en-us/zh-cn</code> needs to be updated to <code>latest(x.y.z)</code></li>
+<li><code>docsxyz</code>: Add a drop-down menu with <code>key</code> as <code>docsxyz</code> and <code>text</code> as <code>x.y.z</code> in <code>children</code> of two places of <code>en-us/zh-cn</code></li>
+</ul>
+</li>
+<li><code>src/pages/docs/index.md.jsx</code>: Add <code>'x.y.z': docsxyzConfig,</code></li>
+</ul>
+<h2>Add New Version To GitHub's bug-report.yml</h2>
+<p>DolphinScheduler's GitHub <a href="https://github.com/apache/dolphinscheduler/blob/dev/.github/ISSUE_TEMPLATE/bug-report.yml">bug-report</a>
+issue template have <strong>Version</strong> selection bottom. So after we release DolphinScheduler we should and the new version to
+bug-report.yml</p>
+<h2>Publish Image</h2>
+<p>Build docker image first, please refer to <a href="https://dolphinscheduler.apache.org/en-us/docs/latest/user_doc/guide/installation/docker.html">How to build a Docker image?</a></p>
+<p>And then publish image</p>
+<pre><code class="language-bash">docker tag apache/dolphinscheduler:x.y.z apache/dolphinscheduler:latest
+docker login <span class="hljs-comment"># enter the username and password</span>
+docker push apache/dolphinscheduler:x.y.z
+docker push apache/dolphinscheduler:latest
+</code></pre>
+<h2>Release to PyPI</h2>
+<p>Python API need to release to PyPI for easier download and use, you can see more detail in <a href="https://github.com/apache/dolphinscheduler/blob/dev/dolphinscheduler-python/pydolphinscheduler/RELEASE.md#to-pypi">Python API release</a>
+to finish PyPI release.</p>
+</div></section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/community.md.4b2dc90.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/community/release-post.json b/en-us/community/release-post.json
new file mode 100644
index 0000000..d9486ae
--- /dev/null
+++ b/en-us/community/release-post.json
@@ -0,0 +1,6 @@
+{
+  "filename": "release-post.md",
+  "__html": "<h1>Release Post</h1>\n<h2>Update Official Website</h2>\n<p>For example, after the release of <code>x.y.z</code>, the following updates are required:</p>\n<ul>\n<li><code>docs/en-us/x.y.z</code> and <code>docs/zh-cn/x.y.z</code>: copy the old directory to the new version x.y.z\n<ul>\n<li>The reference links of the included documents keep same with x.y.z, especially pay attention to the following file updates:\n<ul>\n<li><code>architecture-design.md</code></li>\n<li><code>clu [...]
+  "link": "/dist/en-us/community/release-post.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/community/release-prepare.html b/en-us/community/release-prepare.html
new file mode 100644
index 0000000..8d9d8f8
--- /dev/null
+++ b/en-us/community/release-prepare.html
@@ -0,0 +1,72 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="release-prepare">
+  <meta name="description" content="release-prepare">
+  <title>release-prepare</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+</head>
+<body>
+  <div id="root"><div class="md2html community-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light [...]
+<h2>Check release-docs</h2>
+<p>Compared with the last release, the <code>release-docs</code> of the current release needs to be updated to the latest, if there are dependencies and versions changes</p>
+<ul>
+<li><code>dolphinscheduler-dist/release-docs/LICENSE</code></li>
+<li><code>dolphinscheduler-dist/release-docs/NOTICE</code></li>
+<li><code>dolphinscheduler-dist/release-docs/licenses</code></li>
+</ul>
+<h2>Update Version</h2>
+<p>For example, to release <code>x.y.z</code>, the following updates are required:</p>
+<ul>
+<li><code>pom.xml</code>: <code>revision</code>, <code>version</code>, <code>tag</code> need to be updated to x.y.z</li>
+<li><code>sql</code>:
+<ul>
+<li><code>dolphinscheduler_mysql.sql</code>: <code>t_ds_version</code> needs to be updated to x.y.z</li>
+<li><code>dolphinscheduler_postgre.sql</code>: <code>t_ds_version</code> needs to be updated to x.y.z</li>
+<li><code>upgrade</code>: whether to add<code>x.y.z_schema</code></li>
+<li><code>soft_version</code>: need to be updated to x.y.z</li>
+</ul>
+</li>
+<li><code>docker/docker-swarm</code>:
+<ul>
+<li><code>docker-compose.yml</code>: <code>image: dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler</code> needs to be updated to x.y.z</li>
+<li><code>docker-stack.yml</code>: <code>image: dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler</code> needs to be updated to x.y.z</li>
+</ul>
+</li>
+<li><code>docker/kubernetes/dolphinscheduler</code>:
+<ul>
+<li><code>Chart.yaml</code>: <code>appVersion</code> needs to be updated to x.y.z (<code>version</code> is helm chart version,incremented and different from x.y.z)</li>
+<li><code>values.yaml</code>: <code>image.tag</code> needs to be updated to x.y.z</li>
+</ul>
+</li>
+<li><code>dolphinscheduler-python/pydolphinscheduler/setup.py</code>: change <code>version</code> to x.y.z</li>
+</ul>
+</div></section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/community.md.4b2dc90.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/community/release-prepare.json b/en-us/community/release-prepare.json
new file mode 100644
index 0000000..d979a13
--- /dev/null
+++ b/en-us/community/release-prepare.json
@@ -0,0 +1,6 @@
+{
+  "filename": "release-prepare.md",
+  "__html": "<h1>Release Preparation</h1>\n<h2>Check release-docs</h2>\n<p>Compared with the last release, the <code>release-docs</code> of the current release needs to be updated to the latest, if there are dependencies and versions changes</p>\n<ul>\n<li><code>dolphinscheduler-dist/release-docs/LICENSE</code></li>\n<li><code>dolphinscheduler-dist/release-docs/NOTICE</code></li>\n<li><code>dolphinscheduler-dist/release-docs/licenses</code></li>\n</ul>\n<h2>Update Version</h2>\n<p>For ex [...]
+  "link": "/dist/en-us/community/release-prepare.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/community/release.html b/en-us/community/release.html
new file mode 100644
index 0000000..dab322f
--- /dev/null
+++ b/en-us/community/release.html
@@ -0,0 +1,383 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="release">
+  <meta name="description" content="release">
+  <title>release</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+</head>
+<body>
+  <div id="root"><div class="md2html community-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light [...]
+<h2>GPG Settings</h2>
+<h3>Install GPG</h3>
+<p>Download installation package on <a href="https://www.gnupg.org/download/index.html">official GnuPG website</a>.
+The command of GnuPG 1.x version can differ a little from that of 2.x version.
+The following instructions take <code>GnuPG-2.1.23</code> version for example.</p>
+<p>After the installation, execute the following command to check the version number.</p>
+<pre><code class="language-shell">gpg --version
+</code></pre>
+<h3>Create Key</h3>
+<p>After the installation, execute the following command to create key.</p>
+<p>This command indicates <code>GnuPG-2.x</code> can be used:</p>
+<pre><code class="language-shell">gpg --full-gen-key
+</code></pre>
+<p>This command indicates <code>GnuPG-1.x</code> can be used:</p>
+<pre><code class="language-shell">gpg --gen-key
+</code></pre>
+<p>Finish the key creation according to instructions:</p>
+<p><strong>Notice: Please use Apache mail for key creation.</strong></p>
+<pre><code class="language-shell">gpg (GnuPG) 2.0.12; Copyright (C) 2009 Free Software Foundation, Inc.
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+
+Please select what kind of key you want:
+  (1) RSA and RSA (default)
+  (2) DSA and Elgamal
+  (3) DSA (sign only)
+  (4) RSA (sign only)
+Your selection? 1
+RSA keys may be between 1024 and 4096 bits long.
+What keysize do you want? (2048) 4096
+Requested keysize is 4096 bits
+Please specify how long the key should be valid.
+        0 = key does not expire
+     &lt;n&gt;  = key expires in n days
+     &lt;n&gt;w = key expires in n weeks
+     &lt;n&gt;m = key expires in n months
+     &lt;n&gt;y = key expires in n years
+Key is valid for? (0)
+Key does not expire at all
+Is this correct? (y/N) y
+
+GnuPG needs to construct a user ID to identify your key.
+
+Real name: ${Input username}
+Email address: ${Input email}
+Comment: ${Input comment}
+You selected this USER-ID:
+   &quot;${Inputed username} (${Inputed comment}) &lt;${Inputed email}&gt;&quot;
+
+Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
+You need a Passphrase to protect your secret key. # Input passwords
+</code></pre>
+<h3>Check Generated Key</h3>
+<pre><code class="language-shell">gpg --list-keys
+</code></pre>
+<p>Execution Result:</p>
+<pre><code class="language-shell">pub   4096R/85E11560 2019-11-15
+uid                  ${Username} (${Comment}) &lt;{Email}&gt;
+sub   4096R/A63BC462 2019-11-15
+</code></pre>
+<p>Among them, 85E11560 is public key ID.</p>
+<h3>Upload the Public Key to Key Server</h3>
+<p>The command is as follow:</p>
+<pre><code class="language-shell">gpg --keyserver hkp://pool.sks-keyservers.net --send-key 85E11560
+</code></pre>
+<p><code>pool.sks-keyservers.net</code> is randomly chosen from <a href="https://sks-keyservers.net/status/">public key server</a>.
+Each server will automatically synchronize with one another, so it would be okay to choose any one.</p>
+<h2>Apache Maven Central Repository Release</h2>
+<h3>Set settings.xml</h3>
+<p>Add the following template to <code>~/.m2/settings.xml</code>, all the passwords need to be filled in after encryption.
+For encryption settings, please see <a href="http://maven.apache.org/guides/mini/guide-encryption.html">here</a>.</p>
+<pre><code class="language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">settings</span>&gt;</span>
+  <span class="hljs-tag">&lt;<span class="hljs-name">servers</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">server</span>&gt;</span>
+      <span class="hljs-tag">&lt;<span class="hljs-name">id</span>&gt;</span>apache.snapshots.https<span class="hljs-tag">&lt;/<span class="hljs-name">id</span>&gt;</span>
+      <span class="hljs-tag">&lt;<span class="hljs-name">username</span>&gt;</span> <span class="hljs-comment">&lt;!-- APACHE LDAP username --&gt;</span> <span class="hljs-tag">&lt;/<span class="hljs-name">username</span>&gt;</span>
+      <span class="hljs-tag">&lt;<span class="hljs-name">password</span>&gt;</span> <span class="hljs-comment">&lt;!-- APACHE LDAP encrypted password --&gt;</span> <span class="hljs-tag">&lt;/<span class="hljs-name">password</span>&gt;</span>
+    <span class="hljs-tag">&lt;/<span class="hljs-name">server</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">server</span>&gt;</span>
+      <span class="hljs-tag">&lt;<span class="hljs-name">id</span>&gt;</span>apache.releases.https<span class="hljs-tag">&lt;/<span class="hljs-name">id</span>&gt;</span>
+      <span class="hljs-tag">&lt;<span class="hljs-name">username</span>&gt;</span> <span class="hljs-comment">&lt;!-- APACHE LDAP username --&gt;</span> <span class="hljs-tag">&lt;/<span class="hljs-name">username</span>&gt;</span>
+      <span class="hljs-tag">&lt;<span class="hljs-name">password</span>&gt;</span> <span class="hljs-comment">&lt;!-- APACHE LDAP encrypted password --&gt;</span> <span class="hljs-tag">&lt;/<span class="hljs-name">password</span>&gt;</span>
+    <span class="hljs-tag">&lt;/<span class="hljs-name">server</span>&gt;</span>
+  <span class="hljs-tag">&lt;/<span class="hljs-name">servers</span>&gt;</span>
+<span class="hljs-tag">&lt;/<span class="hljs-name">settings</span>&gt;</span>
+</code></pre>
+<h3>Update Release Notes</h3>
+<pre><code>https://github.com/apache/dolphinscheduler/releases
+</code></pre>
+<h3>Create Release Branch</h3>
+<p>Suppose DolphinScheduler source codes downloaded from github is under <code>~/dolphinscheduler/</code> directory and the version to be released is <code>${RELEASE.VERSION}</code>.
+Create <code>${RELEASE.VERSION}-release</code> branch, where all the following operations are performed.</p>
+<pre><code class="language-shell">cd ~/dolphinscheduler/
+git pull
+git checkout -b ${RELEASE.VERSION}-release
+git push origin ${RELEASE.VERSION}-release
+</code></pre>
+<h3>Pre-Release Check</h3>
+<pre><code class="language-shell">mvn release:prepare -Prelease -Darguments=&quot;-DskipTests&quot; -DautoVersionSubmodules=true -DdryRun=true -Dusername=${Github username}
+</code></pre>
+<p>-Prelease: choose release profile, which will pack all the source codes, jar files and executable binary packages.</p>
+<p>-DautoVersionSubmodules=true:it can make the version number is inputted only once and not for each sub-module.</p>
+<p>-DdryRun=true:rehearsal, which means not to generate or submit new version number and new tag.</p>
+<h3>Prepare for the Release</h3>
+<p>First, clean local pre-release check information.</p>
+<pre><code class="language-shell">mvn release:clean
+</code></pre>
+<p>Then, prepare to execute the release.</p>
+<pre><code class="language-shell">mvn release:prepare -Prelease -Darguments=&quot;-DskipTests&quot; -DautoVersionSubmodules=true -DpushChanges=false -Dusername=${Github username}
+</code></pre>
+<p>It is basically the same as the previous rehearsal command, but deleting -DdryRun=true parameter.</p>
+<p>-DpushChanges=false:do not submit the edited version number and tag to GitHub automatically.</p>
+<p>After making sure there is no mistake in local files, submit them to GitHub.</p>
+<pre><code class="language-shell">git push
+git push origin --tags
+</code></pre>
+<h3>Deploy the Release</h3>
+<pre><code class="language-shell">mvn release:perform -Prelease -Darguments=&quot;-DskipTests&quot; -DautoVersionSubmodules=true -Dusername=${Github username}
+</code></pre>
+<p>After that command is executed, the version to be released will be uploaded to Apache staging repository automatically.
+Visit <a href="https://repository.apache.org/#stagingRepositories">https://repository.apache.org/#stagingRepositories</a> and use Apache LDAP account to log in; then you can see the uploaded version, the content of <code>Repository</code> column is the ${STAGING.REPOSITORY}.
+Click <code>Close</code> to tell Nexus that the construction is finished, because only in this way, this version can be usable.
+If there is any problem in gpg signature, <code>Close</code> will fail, but you can see the failure information through <code>Activity</code>.</p>
+<h2>Apache SVN Repository Release</h2>
+<h3>Checkout dolphinscheduler Release Directory</h3>
+<p>If there is no local work directory, create one at first.</p>
+<pre><code class="language-shell">mkdir -p ~/ds_svn/dev/
+cd ~/ds_svn/dev/
+</code></pre>
+<p>After the creation, checkout dolphinscheduler release directory from Apache SVN.</p>
+<pre><code class="language-shell">svn --username=${APACHE LDAP username} co https://dist.apache.org/repos/dist/dev/dolphinscheduler
+cd ~/ds_svn/dev/dolphinscheduler
+</code></pre>
+<h3>Add gpg Public Key</h3>
+<p>Only the account in its first deployment needs to add that.
+It is alright for <code>KEYS</code> to only include the public key of the deployed account.</p>
+<pre><code class="language-shell">gpg -a --export ${GPG username} &gt;&gt; KEYS
+</code></pre>
+<h3>Add the Release Content to SVN Directory</h3>
+<p>Create folder by version number.</p>
+<pre><code class="language-shell">mkdir -p ~/ds_svn/dev/dolphinscheduler/${RELEASE.VERSION}
+cd ~/ds_svn/dev/dolphinscheduler/${RELEASE.VERSION}
+</code></pre>
+<p>Add source code packages, binary packages and executable binary packages to SVN working directory.</p>
+<pre><code class="language-shell"><span class="hljs-meta">#</span><span class="bash"> Source and binary tarball <span class="hljs-keyword">for</span> main code</span>
+cp -f ~/dolphinscheduler/dolphinscheduler-dist/target/*.tar.gz ~/ds_svn/dev/dolphinscheduler/${RELEASE.VERSION}
+cp -f ~/dolphinscheduler/dolphinscheduler-dist/target/*.tar.gz.asc ~/ds_svn/dev/dolphinscheduler/${RELEASE.VERSION}
+<span class="hljs-meta">
+#</span><span class="bash"> Source and binary tarball <span class="hljs-keyword">for</span> Python API</span>
+mkdir -p ~/ds_svn/dev/dolphinscheduler/${RELEASE.VERSION}/python
+cp -f ~/dolphinscheduler/dolphinscheduler-dist/target/python/* ~/ds_svn/dev/dolphinscheduler/${RELEASE.VERSION}/python
+</code></pre>
+<h3>Generate sign files</h3>
+<pre><code class="language-shell">shasum -a 512 apache-dolphinscheduler-${RELEASE.VERSION}-src.tar.gz &gt;&gt; apache-dolphinscheduler-${RELEASE.VERSION}-src.tar.gz.sha512
+shasum -b -a 512 apache-dolphinscheduler-${RELEASE.VERSION}-bin.tar.gz &gt;&gt; apache-dolphinscheduler-${RELEASE.VERSION}-bin.tar.gz.sha512
+shasum -a 512 python/apache-dolphinscheduler-${RELEASE.VERSION}.tar.gz &gt;&gt; python/apache-dolphinscheduler-${RELEASE.VERSION}.tar.gz.sha512
+shasum -b -a 512 python/apache_dolphinscheduler-${RELEASE.VERSION}-py3-none-any.whl &gt;&gt; python/apache_dolphinscheduler-${RELEASE.VERSION}-py3-none-any.whl.sha512
+</code></pre>
+<h3>Commit to Apache SVN</h3>
+<pre><code class="language-shell">svn add *
+svn --username=${APACHE LDAP username} commit -m &quot;release ${RELEASE.VERSION}&quot;
+</code></pre>
+<h2>Check Release</h2>
+<h3>Check sha512 hash</h3>
+<pre><code class="language-shell">shasum -c apache-dolphinscheduler-${RELEASE.VERSION}-src.tar.gz.sha512
+shasum -c apache-dolphinscheduler-${RELEASE.VERSION}-bin.tar.gz.sha512
+shasum -c python/apache-dolphinscheduler-${RELEASE.VERSION}.tar.gz.sha512
+shasum -c python/apache_dolphinscheduler-${RELEASE.VERSION}-py3-none-any.whl.sha512
+</code></pre>
+<h3>Check gpg Signature</h3>
+<p>First, import releaser's public key.
+Import KEYS from SVN repository to local. (The releaser does not need to import again; the checking assistant needs to import it, with the user name filled as the releaser's. )</p>
+<pre><code class="language-shell">curl https://dist.apache.org/repos/dist/dev/dolphinscheduler/KEYS &gt;&gt; KEYS
+gpg --import KEYS
+gpg --edit-key &quot;${GPG username of releaser}&quot;
+<span class="hljs-meta">  &gt;</span><span class="bash"> trust</span>
+
+Please decide how far you trust this user to correctly verify other users&#x27; keys
+(by looking at passports, checking fingerprints from different sources, etc.)
+
+  1 = I don&#x27;t know or won&#x27;t say
+  2 = I do NOT trust
+  3 = I trust marginally
+  4 = I trust fully
+  5 = I trust ultimately
+  m = back to the main menu
+
+Your decision? 5
+<span class="hljs-meta">
+  &gt;</span><span class="bash"> save</span>
+</code></pre>
+<p>Then, check the gpg signature.</p>
+<pre><code class="language-shell">gpg --verify apache-dolphinscheduler-${RELEASE.VERSION}-src.tar.gz.asc apache-dolphinscheduler-${RELEASE.VERSION}-src.tar.gz
+gpg --verify apache-dolphinscheduler-${RELEASE.VERSION}-bin.tar.gz.asc apache-dolphinscheduler-${RELEASE.VERSION}-bin.tar.gz
+gpg --verify python/apache-dolphinscheduler-${RELEASE.VERSION}.tar.gz.asc python/apache-dolphinscheduler-${RELEASE.VERSION}.tar.gz
+gpg --verify python/apache_dolphinscheduler-${RELEASE.VERSION}-py3-none-any.whl.asc python/apache_dolphinscheduler-${RELEASE.VERSION}-py3-none-any.whl
+</code></pre>
+<h3>Check Released Files</h3>
+<h4>Check source package</h4>
+<p>Decompress <code>apache-dolphinscheduler-${RELEASE.VERSION}-src.tar.gz</code> and check the following items:</p>
+<ul>
+<li>Check whether source tarball is oversized for including nonessential files</li>
+<li><code>LICENSE</code> and <code>NOTICE</code> files exist</li>
+<li>Correct year in <code>NOTICE</code> file</li>
+<li>There is only text files but no binary files</li>
+<li>All source files have ASF headers</li>
+<li>Codes can be compiled and pass the unit tests (mvn install)</li>
+<li>The contents of the release match with what's tagged in version control (diff -r a verify_dir tag_dir)</li>
+<li>Check if there is any extra files or folders, empty folders for example</li>
+</ul>
+<h4>Check binary packages</h4>
+<p>Decompress <code>apache-dolphinscheduler-${RELEASE.VERSION}-src.tar.gz</code> and <code>apache-dolphinscheduler-${RELEASE.VERSION}-bin.tar.gz</code>
+to check the following items:</p>
+<ul>
+<li><code>LICENSE</code> and <code>NOTICE</code> files exist</li>
+<li>Correct year in <code>NOTICE</code> file</li>
+<li>Check the third party dependency license:
+<ul>
+<li>The software have a compatible license</li>
+<li>All software licenses mentioned in <code>LICENSE</code></li>
+<li>All the third party dependency licenses are under <code>licenses</code> folder</li>
+<li>If it depends on Apache license and has a <code>NOTICE</code> file, that <code>NOTICE</code> file need to be added to <code>NOTICE</code> file of the release</li>
+</ul>
+</li>
+</ul>
+<h2>Call for a Vote</h2>
+<h3>Vote procedure</h3>
+<ol>
+<li>
+<p>DolphinScheduler community vote: send the vote e-mail to <code>dev@dolphinscheduler.apache.org</code>.
+PMC needs to check the rightness of the version according to the document before they vote.
+After at least 72 hours and with at least 3 <code>+1 and no -1 PMC member</code> votes, it can come to the next stage of the vote.</p>
+</li>
+<li>
+<p>Announce the vote result: send the result vote e-mail to <code>dev@dolphinscheduler.apache.org</code>。</p>
+</li>
+</ol>
+<h3>Vote Templates</h3>
+<ol>
+<li>DolphinScheduler Community Vote Template</li>
+</ol>
+<p>Title:</p>
+<pre><code>[VOTE] Release Apache DolphinScheduler ${RELEASE.VERSION}
+</code></pre>
+<p>Body:</p>
+<pre><code>Hello DolphinScheduler Community,
+
+This is a call for vote to release Apache DolphinScheduler version ${RELEASE.VERSION}
+
+Release notes:
+https://dist.apache.org/repos/dist/dev/dolphinscheduler/${RELEASE.VERSION}/ReleaseNotes.md
+
+The release candidates:
+https://dist.apache.org/repos/dist/dev/dolphinscheduler/${RELEASE.VERSION}/
+
+Maven 2 staging repository:
+https://repository.apache.org/content/repositories/${STAGING.REPOSITORY}/org/apache/dolphinscheduler/
+
+Git tag for the release:
+https://github.com/apache/dolphinscheduler/tree/${RELEASE.VERSION}
+
+Release Commit ID:
+https://github.com/apache/dolphinscheduler/commit/xxxxxxxxxxxxxxxxxxxxxxx
+
+Keys to verify the Release Candidate:
+https://dist.apache.org/repos/dist/dev/dolphinscheduler/KEYS
+
+Look at here for how to verify this release candidate:
+https://github.com/apache/dolphinscheduler/blob/1.2.0-release/README.md
+
+The vote will be open for at least 72 hours or until necessary number of votes are reached.
+
+Please vote accordingly:
+
+[ ] +1 approve
+
+[ ] +0 no opinion
+
+[ ] -1 disapprove with the reason
+
+Checklist for reference:
+
+[ ] Download links are valid.
+
+[ ] Checksums and PGP signatures are valid.
+
+[ ] Source code artifacts have correct names matching the current release.
+
+[ ] LICENSE and NOTICE files are correct for each DolphinScheduler repo.
+
+[ ] All files have license headers if necessary.
+
+[ ] No compiled archives bundled in source archive.
+
+</code></pre>
+<ol start="2">
+<li>Announce the vote result:</li>
+</ol>
+<p>Body:</p>
+<pre><code>The vote to release Apache DolphinScheduler ${RELEASE.VERSION} has passed.Here is the vote result,
+
+4 PMC member +1 votes:
+
+xxx
+xxx
+xxx
+xxx
+
+1 community +1 vote:
+xxx
+
+Thanks everyone for taking time to check this release and help us.
+</code></pre>
+<h2>Finish the Release</h2>
+<h3>Move source packages, binary packages and KEYS from the <code>dev</code> directory to <code>release</code> directory</h3>
+<pre><code class="language-shell">svn mv https://dist.apache.org/repos/dist/dev/dolphinscheduler/${RELEASE.VERSION} https://dist.apache.org/repos/dist/release/dolphinscheduler/
+</code></pre>
+<h3>Find DolphinScheduler in staging repository and click <code>Release</code></h3>
+<h3>Send e-mail to <code>dev@dolphinscheduler.apache.org</code> to announce the release is finished</h3>
+<p>Announcement e-mail template:</p>
+<p>Title:</p>
+<pre><code>[ANNOUNCE] Release Apache DolphinScheduler ${RELEASE.VERSION}
+</code></pre>
+<p>Body:</p>
+<pre><code>Hi all,
+
+We are glad to announce the release of Apache DolphinScheduler ${RELEASE.VERSION}. Once again I would like to express my thanks to your help.
+
+Dolphin Scheduler is a distributed and easy-to-extend visual workflow scheduler system,
+dedicated to solving the complex task dependencies in data processing, making the scheduler system out of the box for data processing.
+
+
+Download Links: https://dolphinscheduler.apache.org/en-us/download/download.html
+
+Release Notes: https://dist.apache.org/repos/dist/dev/dolphinscheduler/${RELEASE.VERSION}/ReleaseNotes.md
+
+Website: https://dolphinscheduler.apache.org/
+
+DolphinScheduler Resources:
+- Issue: https://github.com/apache/dolphinscheduler/issues/
+- Mailing list: dev@dolphinscheduler.apache.org
+- Documents: https://github.com/apache/dolphinscheduler/blob/${RELEASE.VERSION}/README.md
+
+</code></pre>
+</div></section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/community.md.4b2dc90.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/community/release.json b/en-us/community/release.json
new file mode 100644
index 0000000..8758628
--- /dev/null
+++ b/en-us/community/release.json
@@ -0,0 +1,6 @@
+{
+  "filename": "release.md",
+  "__html": "<h1>Release Guide</h1>\n<h2>GPG Settings</h2>\n<h3>Install GPG</h3>\n<p>Download installation package on <a href=\"https://www.gnupg.org/download/index.html\">official GnuPG website</a>.\nThe command of GnuPG 1.x version can differ a little from that of 2.x version.\nThe following instructions take <code>GnuPG-2.1.23</code> version for example.</p>\n<p>After the installation, execute the following command to check the version number.</p>\n<pre><code class=\"language-shell\"> [...]
+  "link": "/dist/en-us/community/release.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/community/security.html b/en-us/community/security.html
new file mode 100644
index 0000000..24779fe
--- /dev/null
+++ b/en-us/community/security.html
@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="security">
+  <meta name="description" content="security">
+  <title>security</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+</head>
+<body>
+  <div id="root"><div class="md2html community-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light [...]
+<p>The Apache Software Foundation takes a rigorous stance on eliminating security issues in its software projects. Apache DolphinScheduler is also very concerned Security issues related to its features and functionality.</p>
+<p>If you have apprehensions regarding DolphinScheduler’s security or you discover vulnerability or potential threat, don’t hesitate to get in touch with the Apache Security Team by dropping a mail at <a href="mailto:security@apache.org">security@apache.org</a>. Please specify the project name as DolphinScheduler in the email and provide a description of the relevant problem or potential threat. You are also urged to recommend the way to reproduce and replicate the issue. The apache secu [...]
+<p>Please pay attention to report the security issue on the security email before disclosing it on public domain.</p>
+</div></section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/community.md.4b2dc90.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/community/security.json b/en-us/community/security.json
new file mode 100644
index 0000000..55916ba
--- /dev/null
+++ b/en-us/community/security.json
@@ -0,0 +1,6 @@
+{
+  "filename": "security.md",
+  "__html": "<h1>Security</h1>\n<p>The Apache Software Foundation takes a rigorous stance on eliminating security issues in its software projects. Apache DolphinScheduler is also very concerned Security issues related to its features and functionality.</p>\n<p>If you have apprehensions regarding DolphinScheduler’s security or you discover vulnerability or potential threat, don’t hesitate to get in touch with the Apache Security Team by dropping a mail at <a href=\"mailto:security@apache. [...]
+  "link": "/dist/en-us/community/security.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/community/team.html b/en-us/community/team.html
new file mode 100644
index 0000000..9aaa9ae
--- /dev/null
+++ b/en-us/community/team.html
@@ -0,0 +1,270 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="team">
+  <meta name="description" content="team">
+  <title>team</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+</head>
+<body>
+  <div id="root"><div class="md2html community-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-light [...]
+<p>The DolphinScheduler team is comprised of Members and Contributors. Members have direct access to the source of DolphinScheduler project and actively evolve the code-base. Contributors improve the project through submission of patches and suggestions to the Members. The number of Contributors to the project is unbounded. All contributions to DolphinScheduler are greatly appreciated, whether for trivial cleanups, big new features or other material rewards.</p>
+<h2>Members</h2>
+<table>
+<thead>
+<tr>
+<th>Public Name</th>
+<th>Apache ID</th>
+<th>GitHub ID</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>Furkan Kamaci</td>
+<td>kamaci</td>
+<td><a href="https://github.com/kamaci">@kamaci</a></td>
+</tr>
+<tr>
+<td>Gang Li</td>
+<td>lgcareer</td>
+<td><a href="https://github.com/lgcareer">@lgcareer</a></td>
+</tr>
+<tr>
+<td>Guo Jiwei</td>
+<td>technoboy</td>
+<td><a href="https://github.com/Technoboy-">@Technoboy-</a></td>
+</tr>
+<tr>
+<td>Guo William</td>
+<td>guowei</td>
+<td><a href="https://github.com/William-GuoWei">@William-GuoWei</a></td>
+</tr>
+<tr>
+<td>Jun Gao</td>
+<td>gaojun2048</td>
+<td><a href="https://github.com/gaojun2048">@gaojun2048</a></td>
+</tr>
+<tr>
+<td>Kevin Ratnasekera</td>
+<td>djkevincr</td>
+<td><a href="https://github.com/djkevincr">@djkevincr</a></td>
+</tr>
+<tr>
+<td>Leon Bao</td>
+<td>leonbao</td>
+<td><a href="https://github.com/lenboo">@lenboo</a></td>
+</tr>
+<tr>
+<td>Liang Chen</td>
+<td>chenliang613</td>
+<td><a href="https://github.com/chenliang613">@chenliang613</a></td>
+</tr>
+<tr>
+<td>Lidong Dai</td>
+<td>lidongdai</td>
+<td><a href="https://github.com/dailidong">@dailidong</a></td>
+</tr>
+<tr>
+<td>Qiao Zhanwei</td>
+<td>journey</td>
+<td><a href="https://github.com/qiaozhanwei">@qiaozhanwei</a></td>
+</tr>
+<tr>
+<td>Shao Feng Shi</td>
+<td>shaofengshi</td>
+<td><a href="https://github.com/shaofengshi">@shaofengshi</a></td>
+</tr>
+<tr>
+<td>Sheng Wu</td>
+<td>wusheng</td>
+<td><a href="https://github.com/wu-sheng">@wu-sheng</a></td>
+</tr>
+<tr>
+<td>Wu Baoqi</td>
+<td>baoqiwu</td>
+<td><a href="https://github.com/Baoqi">@Baoqi</a></td>
+</tr>
+<tr>
+<td>Xiaochun Liu</td>
+<td>liuxiaochun</td>
+<td><a href="https://github.com/khadgarmage">@khadgarmage</a></td>
+</tr>
+<tr>
+<td>ZijJian Gong</td>
+<td>millionfor</td>
+<td><a href="https://github.com/millionfor">@millionfor</a></td>
+</tr>
+<tr>
+<td>Calvin Kirs</td>
+<td>kirs</td>
+<td><a href="https://github.com/CalvinKirs">@CalvinKirs</a></td>
+</tr>
+</tbody>
+</table>
+<h3>Committer</h3>
+<table>
+<thead>
+<tr>
+<th>Public Name</th>
+<th>Apache ID</th>
+<th>GitHub ID</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>BoYi Zhang</td>
+<td>zhangboyi</td>
+<td><a href="https://github.com/BoYiZhang">@BoYiZhang</a></td>
+</tr>
+<tr>
+<td>Caibiao Xiang</td>
+<td>break60</td>
+<td><a href="https://github.com/break60">@break60</a></td>
+</tr>
+<tr>
+<td>Chong Zhuang</td>
+<td>kerwin</td>
+<td><a href="https://github.com/zhuangchong">@zhuangchong</a></td>
+</tr>
+<tr>
+<td>Cong Huang</td>
+<td>chongchongzi</td>
+<td><a href="https://github.com/chongchongzi">@chongchongzi</a></td>
+</tr>
+<tr>
+<td>Hemin Wen</td>
+<td>wenhemin</td>
+<td><a href="https://github.com/wen-hemin">@wen-hemin</a></td>
+</tr>
+<tr>
+<td>Kai Zhu</td>
+<td>zhukai</td>
+<td><a href="https://github.com/nauu">@nauu</a></td>
+</tr>
+<tr>
+<td>Kejia Chen</td>
+<td>jave</td>
+<td><a href="https://github.com/Jave-Chen">@Jave-Chen</a></td>
+</tr>
+<tr>
+<td>Li Huang</td>
+<td>eights</td>
+<td><a href="https://github.com/Eights-Li">@Eights-Li</a></td>
+</tr>
+<tr>
+<td>Lin Li</td>
+<td>lilin</td>
+<td><a href="https://github.com/samz406">@samz406</a></td>
+</tr>
+<tr>
+<td>Shang Lou</td>
+<td>clay4megtr</td>
+<td><a href="https://github.com/clay4444">@clay4444</a></td>
+</tr>
+<tr>
+<td>Shaojie Wu</td>
+<td>gabrywu</td>
+<td><a href="https://github.com/gabrywu">@gabrywu</a></td>
+</tr>
+<tr>
+<td>Shiwen Cheng</td>
+<td>chengshiwen</td>
+<td><a href="https://github.com/chengshiwen">@chengshiwen</a></td>
+</tr>
+<tr>
+<td>Wenhe Li</td>
+<td>liwenhe</td>
+<td><a href="https://github.com/liwenhe1993">@liwenhe1993</a></td>
+</tr>
+<tr>
+<td>Xingchun Chen</td>
+<td>chenxingchun</td>
+<td><a href="https://github.com/xingchun-chen">@xingchun-chen</a></td>
+</tr>
+<tr>
+<td>Yichao Yang</td>
+<td>yangyichao</td>
+<td><a href="https://github.com/yangyichao-mango">@yangyichao-mango</a></td>
+</tr>
+<tr>
+<td>Zongyao Zhang</td>
+<td>lfyee</td>
+<td><a href="https://github.com/lfyee">@lfyee</a></td>
+</tr>
+<tr>
+<td>Zhenxu Ke</td>
+<td>kezhenxu94</td>
+<td><a href="https://github.com/kezhenxu94">@kezhenxu94</a></td>
+</tr>
+<tr>
+<td>Jiajie Zhong</td>
+<td>zhongjiajie</td>
+<td><a href="https://github.com/zhongjiajie">@zhongjiajie</a></td>
+</tr>
+<tr>
+<td>Yizhi Wang</td>
+<td>wangyizhi</td>
+<td><a href="https://github.com/Wangyizhi1">@Wangyizhi1</a></td>
+</tr>
+<tr>
+<td>ShunFeng Cai</td>
+<td>caishunfeng</td>
+<td><a href="https://github.com/caishunfeng">@caishunfeng</a></td>
+</tr>
+<tr>
+<td>Wenjun Ruan</td>
+<td>wenjun</td>
+<td><a href="https://github.com/ruanwenjun">@ruanwenjun</a></td>
+</tr>
+<tr>
+<td>Jian Song</td>
+<td>songjian</td>
+<td><a href="https://github.com/songjianet">@songjianet</a></td>
+</tr>
+</tbody>
+</table>
+<h2>Contributors</h2>
+<p>DolphinScheduler have hundreds of contributors, you could find them in our repositories' contribution list.</p>
+<ul>
+<li><a href="https://github.com/apache/dolphinscheduler/graphs/contributors">DolphinScheduler main repository</a></li>
+<li><a href="https://github.com/apache/dolphinscheduler-website/graphs/contributors">DolphinScheduler website</a></li>
+<li><a href="https://github.com/apache/dolphinscheduler-maven-plugin/graphs/contributors">DolphinScheduler maven plugin</a></li>
+<li><a href="https://github.com/apache/dolphinscheduler-ambari/graphs/contributors">DolphinScheduler ambari</a></li>
+</ul>
+<h2>Becoming a Committer</h2>
+<p>DolphinScheduler follows the Apache way to build the community. Anyone can become a committer once they have contributed sufficiently to the project and earned the trust. Read <a href="https://dolphinscheduler.apache.org/en-us/community/development/contribute.html">Contributing Guides</a> to take part in the community.</p>
+<p>The DolphinScheduler community follows the <a href="http://community.apache.org/newcommitter.html">Apache Community’s process</a> on accepting a new committer.</p>
+<ol>
+<li>Start the discussion and vote in @private. Only current PMC member could nominate.</li>
+<li>If the vote passes, send an offer to become a committer with @private CC’ed.</li>
+<li>Setup committer rights</li>
+</ol>
+</div></section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/community.md.4b2dc90.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/community/team.json b/en-us/community/team.json
new file mode 100644
index 0000000..8866fa8
--- /dev/null
+++ b/en-us/community/team.json
@@ -0,0 +1,6 @@
+{
+  "filename": "team.md",
+  "__html": "<h1>DolphinScheduler Team</h1>\n<p>The DolphinScheduler team is comprised of Members and Contributors. Members have direct access to the source of DolphinScheduler project and actively evolve the code-base. Contributors improve the project through submission of patches and suggestions to the Members. The number of Contributors to the project is unbounded. All contributions to DolphinScheduler are greatly appreciated, whether for trivial cleanups, big new features or other ma [...]
+  "link": "/dist/en-us/community/team.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/development/api-standard.html b/en-us/development/api-standard.html
new file mode 100644
index 0000000..83d4f6b
--- /dev/null
+++ b/en-us/development/api-standard.html
@@ -0,0 +1,124 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="api-standard">
+  <meta name="description" content="api-standard">
+  <title>api-standard</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+</head>
+<body>
+  <div id="root"><div class="md2html development-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-lig [...]
+<p>A standardized and unified API is the cornerstone of project design.The API of DolphinScheduler follows the REST ful standard. REST ful is currently the most popular Internet software architecture. It has a clear structure, conforms to standards, is easy to understand and extend.</p>
+<p>This article uses the DolphinScheduler API as an example to explain how to construct a Restful API.</p>
+<h2>1. URI design</h2>
+<p>REST is &quot;Representational State Transfer&quot;.The design of Restful URI is based on resources.The resource corresponds to an entity on the network, for example: a piece of text, a picture, and a service. And each resource corresponds to a URI.</p>
+<ul>
+<li>One Kind of Resource: expressed in the plural, such as <code>task-instances</code>、<code>groups</code> ;</li>
+<li>A Resource: expressed in the singular, or use the ID to represent the corresponding resource, such as <code>group</code>、<code>groups/{groupId}</code>;</li>
+<li>Sub Resources: Resources under a certain resource, such as <code>/instances/{instanceId}/tasks</code>;</li>
+<li>A Sub Resource:<code>/instances/{instanceId}/tasks/{taskId}</code>;</li>
+</ul>
+<h2>2. Method design</h2>
+<p>We need to locate a certain resource by URI, and then use Method or declare actions in the path suffix to reflect the operation of the resource.</p>
+<h3>① Query - GET</h3>
+<p>Use URI to locate the resource, and use GET to indicate query.</p>
+<ul>
+<li>When the URI is a type of resource, it means to query a type of resource. For example, the following example indicates paging query <code>alter-groups</code>.</li>
+</ul>
+<pre><code>Method: GET
+/api/dolphinscheduler/alert-groups
+</code></pre>
+<ul>
+<li>When the URI is a single resource, it means to query this resource. For example, the following example means to query the specified <code>alter-group</code>.</li>
+</ul>
+<pre><code>Method: GET
+/api/dolphinscheduler/alter-groups/{id}
+</code></pre>
+<ul>
+<li>In addition, we can also express query sub-resources based on URI, as follows:</li>
+</ul>
+<pre><code>Method: GET
+/api/dolphinscheduler/projects/{projectId}/tasks
+</code></pre>
+<p><strong>The above examples all represent paging query. If we need to query all data, we need to add <code>/list</code> after the URI to distinguish. Do not mix the same API for both paged query and query.</strong></p>
+<pre><code>Method: GET
+/api/dolphinscheduler/alert-groups/list
+</code></pre>
+<h3>② Create - POST</h3>
+<p>Use URI to locate the resource, use POST to indicate create, and then return the created id to requester.</p>
+<ul>
+<li>create an <code>alter-group</code>:</li>
+</ul>
+<pre><code>Method: POST
+/api/dolphinscheduler/alter-groups
+</code></pre>
+<ul>
+<li>create sub-resources is also the same as above.</li>
+</ul>
+<pre><code>Method: POST
+/api/dolphinscheduler/alter-groups/{alterGroupId}/tasks
+</code></pre>
+<h3>③ Modify - PUT</h3>
+<p>Use URI to locate the resource, use PUT to indicate modify.</p>
+<ul>
+<li>modify an <code>alert-group</code></li>
+</ul>
+<pre><code>Method: PUT
+/api/dolphinscheduler/alter-groups/{alterGroupId}
+</code></pre>
+<h3>④ Delete -DELETE</h3>
+<p>Use URI to locate the resource, use DELETE to indicate delete.</p>
+<ul>
+<li>delete an <code>alert-group</code></li>
+</ul>
+<pre><code>Method: DELETE
+/api/dolphinscheduler/alter-groups/{alterGroupId}
+</code></pre>
+<ul>
+<li>batch deletion: batch delete the id array,we should use POST. <strong>(Do not use the DELETE method, because the body of the DELETE request has no semantic meaning, and it is possible that some gateways, proxies, and firewalls will directly strip off the request body after receiving the DELETE request.)</strong></li>
+</ul>
+<pre><code>Method: POST
+/api/dolphinscheduler/alter-groups/batch-delete
+</code></pre>
+<h3>⑤ Others</h3>
+<p>In addition to creating, deleting, modifying and quering, we also locate the corresponding resource through url, and then append operations to it after the path, such as:</p>
+<pre><code>/api/dolphinscheduler/alert-groups/verify-name
+/api/dolphinscheduler/projects/{projectCode}/process-instances/{code}/view-gantt
+</code></pre>
+<h2>3. Parameter design</h2>
+<p>There are two types of parameters, one is request parameter and the other is path parameter. And the parameter must use small hump.</p>
+<p>In the case of paging, if the parameter entered by the user is less than 1, the front end needs to automatically turn to 1, indicating that the first page is requested; When the backend finds that the parameter entered by the user is greater than the total number of pages, it should directly return to the last page.</p>
+<h2>4. Others design</h2>
+<h3>base URL</h3>
+<p>The URI of the project needs to use <code>/api/&lt;project_name&gt;</code> as the base path, so as to identify that these APIs are under this project.</p>
+<pre><code>/api/dolphinscheduler
+</code></pre>
+</div></section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/development.md.627e13d.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/development/api-standard.json b/en-us/development/api-standard.json
new file mode 100644
index 0000000..f1a0154
--- /dev/null
+++ b/en-us/development/api-standard.json
@@ -0,0 +1,6 @@
+{
+  "filename": "api-standard.md",
+  "__html": "<h1>API design standard</h1>\n<p>A standardized and unified API is the cornerstone of project design.The API of DolphinScheduler follows the REST ful standard. REST ful is currently the most popular Internet software architecture. It has a clear structure, conforms to standards, is easy to understand and extend.</p>\n<p>This article uses the DolphinScheduler API as an example to explain how to construct a Restful API.</p>\n<h2>1. URI design</h2>\n<p>REST is &quot;Representat [...]
+  "link": "/dist/en-us/development/api-standard.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/development/architecture-design.html b/en-us/development/architecture-design.html
new file mode 100644
index 0000000..b74f2d7
--- /dev/null
+++ b/en-us/development/architecture-design.html
@@ -0,0 +1,314 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="architecture-design">
+  <meta name="description" content="architecture-design">
+  <title>architecture-design</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+</head>
+<body>
+  <div id="root"><div class="md2html development-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-lig [...]
+<p>Before explaining the architecture of the schedule system, let us first understand the common nouns of the schedule system.</p>
+<h3>1.Noun Interpretation</h3>
+<p><strong>DAG:</strong> Full name Directed Acyclic Graph,referred to as DAG。Tasks in the workflow are assembled in the form of directed acyclic graphs, which are topologically traversed from nodes with zero indegrees of ingress until there are no successor nodes. For example, the following picture:</p>
+<p align="center">
+  <img src="/img/architecture-design/dag_examples_en_us.png" alt="dag示例"  width="80%" />
+  <p align="center">
+        <em>dag example</em>
+  </p>
+</p>
+<p><strong>Process definition</strong>: Visualization <strong>DAG</strong> by dragging task nodes and establishing associations of task nodes</p>
+<p><strong>Process instance</strong>: A process instance is an instantiation of a process definition, which can be generated by manual startup or  scheduling. The process definition runs once, a new process instance is generated</p>
+<p><strong>Task instance</strong>: A task instance is the instantiation of a specific task node when a process instance runs, which indicates the specific task execution status</p>
+<p><strong>Task type</strong>: Currently supports SHELL, SQL, SUB_PROCESS (sub-process), PROCEDURE, MR, SPARK, PYTHON, DEPENDENT (dependency), and plans to support dynamic plug-in extension, note: the sub-<strong>SUB_PROCESS</strong> is also A separate process definition that can be launched separately</p>
+<p><strong>Schedule mode</strong> :  The system supports timing schedule and manual schedule based on cron expressions. Command type support: start workflow, start execution from current node, resume fault-tolerant workflow, resume pause process, start execution from failed node, complement, timer, rerun, pause, stop, resume waiting thread. Where <strong>recovers the fault-tolerant workflow</strong> and <strong>restores the waiting thread</strong> The two command types are used by the sc [...]
+<p><strong>Timed schedule</strong>: The system uses <strong>quartz</strong> distributed scheduler and supports the generation of cron expression visualization</p>
+<p><strong>Dependency</strong>: The system does not only support <strong>DAG</strong> Simple dependencies between predecessors and successor nodes, but also provides <strong>task dependencies</strong> nodes, support for <strong>custom task dependencies between processes</strong></p>
+<p><strong>Priority</strong>: Supports the priority of process instances and task instances. If the process instance and task instance priority are not set, the default is first in, first out.</p>
+<p><strong>Mail Alert</strong>: Support <strong>SQL Task</strong> Query Result Email Send, Process Instance Run Result Email Alert and Fault Tolerant Alert Notification</p>
+<p><strong>Failure policy</strong>: For tasks running in parallel, if there are tasks that fail, two failure policy processing methods are provided. <strong>Continue</strong> means that the status of the task is run in parallel until the end of the process failure. <strong>End</strong> means that once a failed task is found, Kill also drops the running parallel task and the process ends.</p>
+<p><strong>Complement</strong>: Complement historical data, support <strong>interval parallel and serial</strong> two complement methods</p>
+<h3>2.System architecture</h3>
+<h4>2.1 System Architecture Diagram</h4>
+<p align="center">
+  <img src="/img/architecture-en.jpg" alt="System Architecture Diagram"  />
+  <p align="center">
+        <em>System Architecture Diagram</em>
+  </p>
+</p>
+<h4>2.2 Architectural description</h4>
+<ul>
+<li>
+<p><strong>MasterServer</strong></p>
+<p>MasterServer adopts the distributed non-central design concept. MasterServer is mainly responsible for DAG task split, task submission monitoring, and monitoring the health status of other MasterServer and WorkerServer.
+When the MasterServer service starts, it registers a temporary node with Zookeeper, and listens to the Zookeeper temporary node state change for fault tolerance processing.</p>
+<h5>The service mainly contains:</h5>
+<ul>
+<li>
+<p><strong>Distributed Quartz</strong> distributed scheduling component, mainly responsible for the start and stop operation of the scheduled task. When the quartz picks up the task, the master internally has a thread pool to be responsible for the subsequent operations of the task.</p>
+</li>
+<li>
+<p><strong>MasterSchedulerThread</strong> is a scan thread that periodically scans the <strong>command</strong> table in the database for different business operations based on different <strong>command types</strong></p>
+</li>
+<li>
+<p><strong>MasterExecThread</strong> is mainly responsible for DAG task segmentation, task submission monitoring, logic processing of various command types</p>
+</li>
+<li>
+<p><strong>MasterTaskExecThread</strong> is mainly responsible for task persistence</p>
+</li>
+</ul>
+</li>
+<li>
+<p><strong>WorkerServer</strong></p>
+<ul>
+<li>
+<p>WorkerServer also adopts a distributed, non-central design concept. WorkerServer is mainly responsible for task execution and providing log services. When the WorkerServer service starts, it registers the temporary node with Zookeeper and maintains the heartbeat.</p>
+<h5>This service contains:</h5>
+<ul>
+<li><strong>FetchTaskThread</strong> is mainly responsible for continuously receiving tasks from <strong>Task Queue</strong> and calling <strong>TaskScheduleThread</strong> corresponding executors according to different task types.</li>
+</ul>
+</li>
+<li>
+<p><strong>ZooKeeper</strong></p>
+<p>The ZooKeeper service, the MasterServer and the WorkerServer nodes in the system all use the ZooKeeper for cluster management and fault tolerance. In addition, the system also performs event monitoring and distributed locking based on ZooKeeper.
+We have also implemented queues based on Redis, but we hope that DolphinScheduler relies on as few components as possible, so we finally removed the Redis implementation.</p>
+</li>
+<li>
+<p><strong>Task Queue</strong></p>
+<p>The task queue operation is provided. Currently, the queue is also implemented based on Zookeeper. Since there is less information stored in the queue, there is no need to worry about too much data in the queue. In fact, we have over-measured a million-level data storage queue, which has no effect on system stability and performance.</p>
+</li>
+<li>
+<p><strong>Alert</strong></p>
+<p>Provides alarm-related interfaces. The interfaces mainly include <strong>Alarms</strong>. The storage, query, and notification functions of the two types of alarm data. The notification function has two types: <strong>mail notification</strong> and <strong>SNMP (not yet implemented)</strong>.</p>
+</li>
+<li>
+<p><strong>API</strong></p>
+<p>The API interface layer is mainly responsible for processing requests from the front-end UI layer. The service provides a RESTful api to provide request services externally.
+Interfaces include workflow creation, definition, query, modification, release, offline, manual start, stop, pause, resume, start execution from this node, and more.</p>
+</li>
+<li>
+<p><strong>UI</strong></p>
+<p>The front-end page of the system provides various visual operation interfaces of the system. For details, see the <a href="https://dolphinscheduler.apache.org/en-us/docs/latest/user_doc/guide/quick-start.html">quick start</a> section.</p>
+</li>
+</ul>
+</li>
+</ul>
+<h4>2.3 Architectural Design Ideas</h4>
+<h5>I. Decentralized vs centralization</h5>
+<h6>Centralization Thought</h6>
+<p>The centralized design concept is relatively simple. The nodes in the distributed cluster are divided into two roles according to their roles:</p>
+<p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/master_slave.png" alt="master-slave role" width="50%" />
+ </p>
+<ul>
+<li>The role of Master is mainly responsible for task distribution and supervising the health status of Slave. It can dynamically balance the task to Slave, so that the Slave node will not be &quot;busy&quot; or &quot;free&quot;.</li>
+<li>The role of the Worker is mainly responsible for the execution of the task and maintains the heartbeat with the Master so that the Master can assign tasks to the Slave.</li>
+</ul>
+<p>Problems in the design of centralized :</p>
+<ul>
+<li>Once the Master has a problem, the group has no leader and the entire cluster will crash. In order to solve this problem, most Master/Slave architecture modes adopt the design scheme of the master and backup masters, which can be hot standby or cold standby, automatic switching or manual switching, and more and more new systems are available. Automatically elects the ability to switch masters to improve system availability.</li>
+<li>Another problem is that if the Scheduler is on the Master, although it can support different tasks in one DAG running on different machines, it will generate overload of the Master. If the Scheduler is on the Slave, all tasks in a DAG can only be submitted on one machine. If there are more parallel tasks, the pressure on the Slave may be larger.</li>
+</ul>
+<h6>Decentralization</h6>
+ <p align="center"
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/decentralization.png" alt="decentralized" width="50%" />
+ </p>
+<ul>
+<li>
+<p>In the decentralized design, there is usually no Master/Slave concept, all roles are the same, the status is equal, the global Internet is a typical decentralized distributed system, networked arbitrary node equipment down machine , all will only affect a small range of features.</p>
+</li>
+<li>
+<p>The core design of decentralized design is that there is no &quot;manager&quot; that is different from other nodes in the entire distributed system, so there is no single point of failure problem. However, since there is no &quot;manager&quot; node, each node needs to communicate with other nodes to get the necessary machine information, and the unreliable line of distributed system communication greatly increases the difficulty of implementing the above functions.</p>
+</li>
+<li>
+<p>In fact, truly decentralized distributed systems are rare. Instead, dynamic centralized distributed systems are constantly emerging. Under this architecture, the managers in the cluster are dynamically selected, rather than preset, and when the cluster fails, the nodes of the cluster will spontaneously hold &quot;meetings&quot; to elect new &quot;managers&quot;. Go to preside over the work. The most typical case is the Etcd implemented in ZooKeeper and Go.</p>
+</li>
+<li>
+<p>Decentralization of DolphinScheduler is the registration of Master/Worker to ZooKeeper. The Master Cluster and the Worker Cluster are not centered, and the Zookeeper distributed lock is used to elect one Master or Worker as the “manager” to perform the task.</p>
+</li>
+</ul>
+<h5>二、Distributed lock practice</h5>
+<p>DolphinScheduler uses ZooKeeper distributed locks to implement only one Master to execute the Scheduler at the same time, or only one Worker to perform task submission.</p>
+<ol>
+<li>The core process algorithm for obtaining distributed locks is as follows</li>
+</ol>
+ <p align="center">
+   <img src="/img/architecture-design/distributed_lock_en_us.png" alt="Get Distributed Lock Process" width="70%" />
+ </p>
+<ol start="2">
+<li>Scheduler thread distributed lock implementation flow chart in DolphinScheduler:</li>
+</ol>
+ <p align="center">
+   <img src="/img/architecture-design/distributed_lock_procss_en_us.png" alt="Get Distributed Lock Process" />
+ </p>
+<h5>Third, the thread is insufficient loop waiting problem</h5>
+<ul>
+<li>If there is no subprocess in a DAG, if the number of data in the Command is greater than the threshold set by the thread pool, the direct process waits or fails.</li>
+<li>If a large number of sub-processes are nested in a large DAG, the following figure will result in a &quot;dead&quot; state:</li>
+</ul>
+ <p align="center">
+   <img src="/img/architecture-design/lack_thread_en_us.png" alt="Thread is not enough to wait for loop" width="70%" />
+ </p>
+<p>In the above figure, MainFlowThread waits for SubFlowThread1 to end, SubFlowThread1 waits for SubFlowThread2 to end, SubFlowThread2 waits for SubFlowThread3 to end, and SubFlowThread3 waits for a new thread in the thread pool, then the entire DAG process cannot end, and thus the thread cannot be released. This forms the state of the child parent process loop waiting. At this point, the scheduling cluster will no longer be available unless a new Master is started to add threads to brea [...]
+<p>It seems a bit unsatisfactory to start a new Master to break the deadlock, so we proposed the following three options to reduce this risk:</p>
+<ol>
+<li>Calculate the sum of the threads of all Masters, and then calculate the number of threads required for each DAG, that is, pre-calculate before the DAG process is executed. Because it is a multi-master thread pool, the total number of threads is unlikely to be obtained in real time.</li>
+<li>Judge the single master thread pool. If the thread pool is full, let the thread fail directly.</li>
+<li>Add a Command type with insufficient resources. If the thread pool is insufficient, the main process will be suspended. This way, the thread pool has a new thread, which can make the process with insufficient resources hang up and wake up again.</li>
+</ol>
+<p>Note: The Master Scheduler thread is FIFO-enabled when it gets the Command.</p>
+<p>So we chose the third way to solve the problem of insufficient threads.</p>
+<h5>IV. Fault Tolerant Design</h5>
+<p>Fault tolerance is divided into service fault tolerance and task retry. Service fault tolerance is divided into two types: Master Fault Tolerance and Worker Fault Tolerance.</p>
+<h6>1. Downtime fault tolerance</h6>
+<p>Service fault tolerance design relies on ZooKeeper's Watcher mechanism. The implementation principle is as follows:</p>
+ <p align="center">
+   <img src="/img/architecture-design/fault-tolerant_en_us.png" alt="DolphinScheduler Fault Tolerant Design" width="70%" />
+ </p>
+<p>The Master monitors the directories of other Masters and Workers. If the remove event is detected, the process instance is fault-tolerant or the task instance is fault-tolerant according to the specific business logic.</p>
+<ul>
+<li>Master fault tolerance flow chart:</li>
+</ul>
+ <p align="center">
+   <img src="/img/architecture-design/fault-tolerant_master_en_us.png" alt="Master Fault Tolerance Flowchart" width="70%" />
+ </p>
+<p>After the ZooKeeper Master is fault-tolerant, it is rescheduled by the Scheduler thread in DolphinScheduler. It traverses the DAG to find the &quot;Running&quot; and &quot;Submit Successful&quot; tasks, and monitors the status of its task instance for the &quot;Running&quot; task. You need to determine whether the Task Queue already exists. If it exists, monitor the status of the task instance. If it does not exist, resubmit the task instance.</p>
+<ul>
+<li>Worker fault tolerance flow chart:</li>
+</ul>
+ <p align="center">
+   <img src="/img/architecture-design/fault-tolerant_worker_en_us.png" alt="Worker Fault Tolerance Flowchart" width="70%" />
+ </p>
+<p>Once the Master Scheduler thread finds the task instance as &quot;need to be fault tolerant&quot;, it takes over the task and resubmits.</p>
+<p>Note: Because the &quot;network jitter&quot; may cause the node to lose the heartbeat of ZooKeeper in a short time, the node's remove event occurs. In this case, we use the easiest way, that is, once the node has timeout connection with ZooKeeper, it will directly stop the Master or Worker service.</p>
+<h6>2. Task failure retry</h6>
+<p>Here we must first distinguish between the concept of task failure retry, process failure recovery, and process failure rerun:</p>
+<ul>
+<li>Task failure Retry is task level, which is automatically performed by the scheduling system. For example, if a shell task sets the number of retries to 3 times, then the shell task will try to run up to 3 times after failing to run.</li>
+<li>Process failure recovery is process level, is done manually, recovery can only be performed <strong>from the failed node</strong> or <strong>from the current node</strong></li>
+<li>Process failure rerun is also process level, is done manually, rerun is from the start node</li>
+</ul>
+<p>Next, let's talk about the topic, we divided the task nodes in the workflow into two types.</p>
+<ul>
+<li>One is a business node, which corresponds to an actual script or processing statement, such as a Shell node, an MR node, a Spark node, a dependent node, and so on.</li>
+<li>There is also a logical node, which does not do the actual script or statement processing, but the logical processing of the entire process flow, such as sub-flow sections.</li>
+</ul>
+<p>Each <strong>service node</strong> can configure the number of failed retries. When the task node fails, it will automatically retry until it succeeds or exceeds the configured number of retries. <strong>Logical node</strong> does not support failed retry. But the tasks in the logical nodes support retry.</p>
+<p>If there is a task failure in the workflow that reaches the maximum number of retries, the workflow will fail to stop, and the failed workflow can be manually rerun or process resumed.</p>
+<h5>V. Task priority design</h5>
+<p>In the early scheduling design, if there is no priority design and fair scheduling design, it will encounter the situation that the task submitted first may be completed simultaneously with the task submitted subsequently, but the priority of the process or task cannot be set. We have redesigned this, and we are currently designing it as follows:</p>
+<ul>
+<li>
+<p>According to <strong>different process instance priority</strong> prioritizes <strong>same process instance priority</strong> prioritizes <strong>task priority within the same process</strong> takes precedence over <strong>same process</strong> commit order from high Go to low for task processing.</p>
+<ul>
+<li>
+<p>The specific implementation is to resolve the priority according to the json of the task instance, and then save the <strong>process instance priority _ process instance id_task priority _ task id</strong> information in the ZooKeeper task queue, when obtained from the task queue, Through string comparison, you can get the task that needs to be executed first.</p>
+<ul>
+<li>
+<p>The priority of the process definition is that some processes need to be processed before other processes. This can be configured at the start of the process or at the time of scheduled start. There are 5 levels, followed by HIGHEST, HIGH, MEDIUM, LOW, and LOWEST. As shown below</p>
+<p align="center">
+   <img src="/img/architecture-design/process_priority_en_us.png" alt="Process Priority Configuration" width="40%" />
+ </p>
+</li>
+<li>
+<p>The priority of the task is also divided into 5 levels, followed by HIGHEST, HIGH, MEDIUM, LOW, and LOWEST. As shown below</p>
+<p align="center">`
+   <img src="/img/architecture-design/task_priority_en_us.png" alt="task priority configuration" width="35%" />
+ </p>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<h5>VI. Logback and gRPC implement log access</h5>
+<ul>
+<li>Since the Web (UI) and Worker are not necessarily on the same machine, viewing the log is not as it is for querying local files. There are two options:
+<ul>
+<li>Put the logs on the ES search engine</li>
+<li>Obtain remote log information through gRPC communication</li>
+</ul>
+</li>
+<li>Considering the lightweightness of DolphinScheduler as much as possible, gRPC was chosen to implement remote access log information.</li>
+</ul>
+ <p align="center">
+   <img src="/img/architecture-design/grpc_en_us.png" alt="grpc remote access" width="50%" />
+ </p>
+<ul>
+<li>We use a custom Logback FileAppender and Filter function to generate a log file for each task instance.</li>
+<li>The main implementation of FileAppender is as follows:</li>
+</ul>
+<pre><code class="language-java"> <span class="hljs-comment">/**
+  * task log appender
+  */</span>
+ Public <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">TaskLogAppender</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">FileAppender</span>&lt;<span class="hljs-title">ILoggingEvent</span>&gt; </span>{
+ 
+     ...
+
+    <span class="hljs-meta">@Override</span>
+    <span class="hljs-function">Protected <span class="hljs-keyword">void</span> <span class="hljs-title">append</span><span class="hljs-params">(ILoggingEvent event)</span> </span>{
+
+        If (currentlyActiveFile == <span class="hljs-keyword">null</span>){
+            currentlyActiveFile = getFile();
+        }
+        String activeFile = currentlyActiveFile;
+        <span class="hljs-comment">// thread name: taskThreadName-processDefineId_processInstanceId_taskInstanceId</span>
+        String threadName = event.getThreadName();
+        String[] threadNameArr = threadName.split(<span class="hljs-string">&quot;-&quot;</span>);
+        <span class="hljs-comment">// logId = processDefineId_processInstanceId_taskInstanceId</span>
+        String logId = threadNameArr[<span class="hljs-number">1</span>];
+        ...
+        <span class="hljs-keyword">super</span>.subAppend(event);
+    }
+}
+</code></pre>
+<p>Generate a log in the form of /process definition id/process instance id/task instance id.log</p>
+<ul>
+<li>Filter matches the thread name starting with TaskLogInfo:</li>
+<li>TaskLogFilter is implemented as follows:</li>
+</ul>
+<pre><code class="language-java"> <span class="hljs-comment">/**
+ * task log filter
+ */</span>
+Public <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">TaskLogFilter</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Filter</span>&lt;<span class="hljs-title">ILoggingEvent</span>&gt; </span>{
+
+    <span class="hljs-meta">@Override</span>
+    <span class="hljs-function">Public FilterReply <span class="hljs-title">decide</span><span class="hljs-params">(ILoggingEvent event)</span> </span>{
+        If (event.getThreadName().startsWith(<span class="hljs-string">&quot;TaskLogInfo-&quot;</span>)){
+            Return FilterReply.ACCEPT;
+        }
+        Return FilterReply.DENY;
+    }
+}
+</code></pre>
+<h3>summary</h3>
+<p>Starting from the scheduling, this paper introduces the architecture principle and implementation ideas of the big data distributed workflow scheduling system-DolphinScheduler. To be continued</p>
+</div></section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/development.md.627e13d.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/development/architecture-design.json b/en-us/development/architecture-design.json
new file mode 100644
index 0000000..0343484
--- /dev/null
+++ b/en-us/development/architecture-design.json
@@ -0,0 +1,6 @@
+{
+  "filename": "architecture-design.md",
+  "__html": "<h2>Architecture Design</h2>\n<p>Before explaining the architecture of the schedule system, let us first understand the common nouns of the schedule system.</p>\n<h3>1.Noun Interpretation</h3>\n<p><strong>DAG:</strong> Full name Directed Acyclic Graph,referred to as DAG。Tasks in the workflow are assembled in the form of directed acyclic graphs, which are topologically traversed from nodes with zero indegrees of ingress until there are no successor nodes. For example, the fol [...]
+  "link": "/dist/en-us/development/architecture-design.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/development/backend/mechanism/global-parameter.html b/en-us/development/backend/mechanism/global-parameter.html
new file mode 100644
index 0000000..8f0e9cf
--- /dev/null
+++ b/en-us/development/backend/mechanism/global-parameter.html
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="global-parameter">
+  <meta name="description" content="global-parameter">
+  <title>global-parameter</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+</head>
+<body>
+  <div id="root"><div class="md2html development-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-lig [...]
+<p>After the user defines the parameter with the direction OUT, it is saved in the localParam of the task.</p>
+<h2>Usage of parameters</h2>
+<p>Getting the direct predecessor node <code>preTasks</code> of the current <code>taskInstance</code> to be created from the DAG, get the <code>varPool</code> of <code>preTasks</code>, merge this varPool (List) into one <code>varPool</code>, and in the merging process, if parameters with the same parameter name are found, they will be handled according to the following logics:</p>
+<ul>
+<li>If all the values are null, the merged value is null</li>
+<li>If one and only one value is non-null, then the merged value is the non-null value</li>
+<li>If all the values are not null, it would be the earliest value of the endtime of taskInstance taken by VarPool.</li>
+</ul>
+<p>The direction of all the merged properties is updated to IN during the merge process.</p>
+<p>The result of the merge is saved in taskInstance.varPool.</p>
+<p>The worker receives and parses the varPool into the format of <code>Map&lt;String,Property&gt;</code>, where the key of the map is property.prop, which is the parameter name.</p>
+<p>When the processor processes the parameters, it will merge the varPool and localParam and globalParam parameters, and if there are parameters with duplicate names during the merging process, they will be replaced according to the following priorities, with the higher priority being retained and the lower priority being replaced:</p>
+<ul>
+<li>globalParam: high</li>
+<li>varPool: middle</li>
+<li>localParam: low</li>
+</ul>
+<p>The parameters are replaced with the corresponding values using regular expressions compared to ${parameter name} before the node content is executed.</p>
+<h2>Parameter setting</h2>
+<p>Currently, only SQL and SHELL nodes are supported to get parameters.</p>
+<p>Get the parameter with direction OUT from localParam, and do the following way according to the type of different nodes.</p>
+<h3>SQL node</h3>
+<p>The structure returned by the parameter is List&lt;Map&lt;String,String&gt;&gt;, where the elements of List are each row of data, the key of Map is the column name, and the value is the value corresponding to the column.</p>
+<ul>
+<li>If the SQL statement returns one row of data, match the OUT parameter name based on the OUT parameter name defined by the user when defining the task, or discard it if it does not match.</li>
+<li>If the SQL statement returns multiple rows of data, the column names are matched based on the OUT parameter names defined by the user when defining the task of type LIST. All rows of the corresponding column are converted to <code>List&lt;String&gt;</code> as the value of this parameter. If there is no match, it is discarded.</li>
+</ul>
+<h3>SHELL node</h3>
+<p>The result of the processor execution is returned as <code>Map&lt;String,String&gt;</code>.</p>
+<p>The user needs to define <code>${setValue(key=value)}</code> in the output when defining the shell script.</p>
+<p>Remove <code>${setValue()}</code> when processing parameters, split by &quot;=&quot;, with the 0th being the key and the 1st being the value.</p>
+<p>Similarly match the OUT parameter name and key defined by the user when defining the task, and use value as the value of that parameter.</p>
+<p>Return parameter processing</p>
+<ul>
+<li>The result of acquired Processor is String.</li>
+<li>Determine whether the processor is empty or not, and exit if it is empty.</li>
+<li>Determine whether the localParam is empty or not, and exit if it is empty.</li>
+<li>Get the parameter of localParam which is OUT, and exit if it is empty.</li>
+<li>Format String as per appeal format (<code>List&lt;Map&lt;String,String&gt;&gt;</code> for SQL, <code>Map&lt;String,String&gt;&gt;</code> for shell).</li>
+</ul>
+<p>Assign the parameters with matching values to varPool (List, which contains the original IN's parameters)</p>
+<ul>
+<li>Format the varPool as json and pass it to master.</li>
+<li>The parameters that are OUT would be written into the localParam after the master has received the varPool.</li>
+</ul>
+</div></section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/development.md.627e13d.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/development/backend/mechanism/global-parameter.json b/en-us/development/backend/mechanism/global-parameter.json
new file mode 100644
index 0000000..5305a3a
--- /dev/null
+++ b/en-us/development/backend/mechanism/global-parameter.json
@@ -0,0 +1,6 @@
+{
+  "filename": "global-parameter.md",
+  "__html": "<h1>Global Parameter development document</h1>\n<p>After the user defines the parameter with the direction OUT, it is saved in the localParam of the task.</p>\n<h2>Usage of parameters</h2>\n<p>Getting the direct predecessor node <code>preTasks</code> of the current <code>taskInstance</code> to be created from the DAG, get the <code>varPool</code> of <code>preTasks</code>, merge this varPool (List) into one <code>varPool</code>, and in the merging process, if parameters with  [...]
+  "link": "/dist/en-us/development/backend/mechanism/global-parameter.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/development/backend/mechanism/overview.html b/en-us/development/backend/mechanism/overview.html
new file mode 100644
index 0000000..41c8584
--- /dev/null
+++ b/en-us/development/backend/mechanism/overview.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="overview">
+  <meta name="description" content="overview">
+  <title>overview</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+</head>
+<body>
+  <div id="root"><div class="md2html development-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-lig [...]
+<!-- TODO Since the side menu does not support multiple levels, add new page to keep all sub page here -->
+<ul>
+<li><a href="global-parameter.md">Global Parameter</a></li>
+<li><a href="task/switch.md">Switch Task type</a></li>
+</ul>
+</div></section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/development.md.627e13d.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/development/backend/mechanism/overview.json b/en-us/development/backend/mechanism/overview.json
new file mode 100644
index 0000000..2e33866
--- /dev/null
+++ b/en-us/development/backend/mechanism/overview.json
@@ -0,0 +1,6 @@
+{
+  "filename": "overview.md",
+  "__html": "<h1>Overview</h1>\n<!-- TODO Since the side menu does not support multiple levels, add new page to keep all sub page here -->\n<ul>\n<li><a href=\"global-parameter.md\">Global Parameter</a></li>\n<li><a href=\"task/switch.md\">Switch Task type</a></li>\n</ul>\n",
+  "link": "/dist/en-us/development/backend/mechanism/overview.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/development/backend/mechanism/task/switch.html b/en-us/development/backend/mechanism/task/switch.html
new file mode 100644
index 0000000..9944129
--- /dev/null
+++ b/en-us/development/backend/mechanism/task/switch.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="switch">
+  <meta name="description" content="switch">
+  <title>switch</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+</head>
+<body>
+  <div id="root"><div class="md2html development-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-lig [...]
+<p>Switch task workflow step as follows</p>
+<ul>
+<li>User-defined expressions and branch information are stored in <code>taskParams</code> in <code>taskdefinition</code>. When the switch is executed, it will be formatted as <code>SwitchParameters</code></li>
+<li><code>SwitchTaskExecThread</code> processes the expressions defined in <code>switch</code> from top to bottom, obtains the value of the variable from <code>varPool</code>, and parses the expression through <code>javascript</code>. If the expression returns true, stop checking and record The order of the expression, here we record as resultConditionLocation. The task of SwitchTaskExecThread is over</li>
+<li>After the <code>switch</code> task runs, if there is no error (more commonly, the user-defined expression is out of specification or there is a problem with the parameter name), then <code>MasterExecThread.submitPostNode</code> will obtain the downstream node of the <code>DAG</code> to continue execution.</li>
+<li>If it is found in <code>DagHelper.parsePostNodes</code> that the current node (the node that has just completed the work) is a <code>switch</code> node, the <code>resultConditionLocation</code> will be obtained, and all branches except <code>resultConditionLocation</code> in the SwitchParameters will be skipped. In this way, only the branches that need to be executed are left</li>
+</ul>
+</div></section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/development.md.627e13d.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/development/backend/mechanism/task/switch.json b/en-us/development/backend/mechanism/task/switch.json
new file mode 100644
index 0000000..0739baf
--- /dev/null
+++ b/en-us/development/backend/mechanism/task/switch.json
@@ -0,0 +1,6 @@
+{
+  "filename": "switch.md",
+  "__html": "<h1>SWITCH Task development</h1>\n<p>Switch task workflow step as follows</p>\n<ul>\n<li>User-defined expressions and branch information are stored in <code>taskParams</code> in <code>taskdefinition</code>. When the switch is executed, it will be formatted as <code>SwitchParameters</code></li>\n<li><code>SwitchTaskExecThread</code> processes the expressions defined in <code>switch</code> from top to bottom, obtains the value of the variable from <code>varPool</code>, and par [...]
+  "link": "/dist/en-us/development/backend/mechanism/task/switch.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/development/backend/spi/alert.html b/en-us/development/backend/spi/alert.html
new file mode 100644
index 0000000..35fb91b
--- /dev/null
+++ b/en-us/development/backend/spi/alert.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="alert">
+  <meta name="description" content="alert">
+  <title>alert</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+</head>
+<body>
+  <div id="root"><div class="md2html development-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-lig [...]
+<h4>DolphinScheduler SPI Design</h4>
+<p>DolphinScheduler is undergoing a microkernel + plug-in architecture change. All core capabilities such as tasks, resource storage, registration centers, etc. will be designed as extension points. We hope to use SPI to improve DolphinScheduler’s own flexibility and friendliness (extended sex).</p>
+<p>For alarm-related codes, please refer to the <code>dolphinscheduler-alert-api</code> module. This module defines the extension interface of the alarm plug-in and some basic codes. When we need to realize the plug-inization of related functions, it is recommended to read the code of this block first. Of course, it is recommended that you read the document. This will reduce a lot of time, but the document There is a certain degree of lag. When the document is missing, it is recommended  [...]
+<p>We use the native JAVA-SPI, when you need to extend, in fact, you only need to pay attention to the extension of the <code>org.apache.dolphinscheduler.alert.api.AlertChannelFactory</code> interface, the underlying logic such as plug-in loading, and other kernels have been implemented, Which makes our development more focused and simple.</p>
+<p>By the way, we have adopted an excellent front-end component form-create, which supports the generation of front-end UI components based on JSON. If plug-in development involves the front-end, we will use JSON to generate related front-end UI components, org.apache.dolphinscheduler. The parameters of the plug-in are encapsulated in spi.params, which will convert all the relevant parameters into the corresponding JSON, which means that you can complete the drawing of the front-end comp [...]
+<p>This article mainly focuses on the design and development of Alert.</p>
+<h4>Main Modules</h4>
+<p>If you don't care about its internal design, but simply want to know how to develop your own alarm plug-in, you can skip this content.</p>
+<ul>
+<li>
+<p>dolphinscheduler-alert-api</p>
+<p>This module is the core module of ALERT SPI. This module defines the interface of the alarm plug-in extension and some basic codes. The extension plug-in must implement the interface defined by this module: <code>org.apache.dolphinscheduler.alert.api.AlertChannelFactory</code></p>
+</li>
+<li>
+<p>dolphinscheduler-alert-plugins</p>
+<p>This module is currently a plug-in provided by us, such as Email, DingTalk, Script, etc.</p>
+</li>
+</ul>
+<h4>Alert SPI Main class information.</h4>
+<p>AlertChannelFactory
+Alarm plug-in factory interface. All alarm plug-ins need to implement this interface. This interface is used to define the name of the alarm plug-in and the required parameters. The create method is used to create a specific alarm plug-in instance.</p>
+<p>AlertChannel
+The interface of the alert plug-in. The alert plug-in needs to implement this interface. There is only one method process in this interface. The upper-level alert system will call this method and obtain the return information of the alert through the AlertResult returned by this method.</p>
+<p>AlertData
+Alarm content information, including id, title, content, log.</p>
+<p>AlertInfo
+For alarm-related information, when the upper-level system calls an instance of the alarm plug-in, the instance of this class is passed to the specific alarm plug-in through the process method. It contains the alert content AlertData and the parameter information filled in by the front end of the called alert plug-in instance.</p>
+<p>AlertResult
+The alarm plug-in sends alarm return information.</p>
+<p>org.apache.dolphinscheduler.spi.params
+This package is a plug-in parameter definition. Our front-end uses the from-create front-end library <a href="http://www.form-create.com">http://www.form-create.com</a>, which can dynamically generate the front-end UI based on the parameter list json returned by the plug-in definition, so We don't need to care about the front end when we are doing SPI plug-in development.</p>
+<p>Under this package, we currently only encapsulate RadioParam, TextParam, and PasswordParam, which are used to define text type parameters, radio parameters and password type parameters, respectively.</p>
+<p>AbsPluginParams This class is the base class of all parameters, RadioParam these classes all inherit this class. Each DS alert plug-in will return a list of AbsPluginParams in the implementation of AlertChannelFactory.</p>
+<p>The specific design of alert_spi can be seen in the issue: <a href="https://github.com/apache/incubator-dolphinscheduler/issues/3049">Alert Plugin Design</a></p>
+<h4>Alert SPI built-in implementation</h4>
+<ul>
+<li>
+<p>Email</p>
+<p>Email alert notification</p>
+</li>
+<li>
+<p>DingTalk</p>
+<p>Alert for DingTalk group chat bots</p>
+</li>
+<li>
+<p>EnterpriseWeChat</p>
+<p>EnterpriseWeChat alert notifications</p>
+<p>Related parameter configuration can refer to the EnterpriseWeChat robot document.</p>
+</li>
+<li>
+<p>Script</p>
+<p>We have implemented a shell script for alerting. We will pass the relevant alert parameters to the script and you can implement your alert logic in the shell. This is a good way to interface with internal alerting applications.</p>
+</li>
+<li>
+<p>SMS</p>
+<p>SMS alerts</p>
+</li>
+</ul>
+</div></section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/development.md.627e13d.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/development/backend/spi/alert.json b/en-us/development/backend/spi/alert.json
new file mode 100644
index 0000000..cdbc655
--- /dev/null
+++ b/en-us/development/backend/spi/alert.json
@@ -0,0 +1,6 @@
+{
+  "filename": "alert.md",
+  "__html": "<h3>DolphinScheduler Alert SPI main design</h3>\n<h4>DolphinScheduler SPI Design</h4>\n<p>DolphinScheduler is undergoing a microkernel + plug-in architecture change. All core capabilities such as tasks, resource storage, registration centers, etc. will be designed as extension points. We hope to use SPI to improve DolphinScheduler’s own flexibility and friendliness (extended sex).</p>\n<p>For alarm-related codes, please refer to the <code>dolphinscheduler-alert-api</code> mo [...]
+  "link": "/dist/en-us/development/backend/spi/alert.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/development/backend/spi/datasource.html b/en-us/development/backend/spi/datasource.html
new file mode 100644
index 0000000..251727f
--- /dev/null
+++ b/en-us/development/backend/spi/datasource.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="datasource">
+  <meta name="description" content="datasource">
+  <title>datasource</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+</head>
+<body>
+  <div id="root"><div class="md2html development-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-lig [...]
+<h4>How do I use data sources?</h4>
+<p>The data source center supports POSTGRESQL, HIVE/IMPALA, SPARK, CLICKHOUSE, SQLSERVER data sources by default.</p>
+<p>If you are using MySQL or ORACLE data source, you need to place the corresponding driver package in the lib directory</p>
+<h4>How to do Datasource plugin development?</h4>
+<p>org.apache.dolphinscheduler.spi.datasource.DataSourceChannel
+org.apache.dolphinscheduler.spi.datasource.DataSourceChannelFactory
+org.apache.dolphinscheduler.plugin.datasource.api.client.CommonDataSourceClient</p>
+<ol>
+<li>
+<p>In the first step, the data source plug-in can implement the above interfaces and inherit the general client. For details, refer to the implementation of data source plug-ins such as sqlserver and mysql. The addition methods of all RDBMS plug-ins are the same.</p>
+</li>
+<li>
+<p>Add the driver configuration in the data source plug-in pom.xml</p>
+</li>
+</ol>
+<p>We provide APIs for external access of all data sources in the dolphin scheduler data source API module</p>
+<h4><strong>Future plan</strong></h4>
+<p>Support data sources such as kafka, http, files, sparkSQL, FlinkSQL, etc.</p>
+</div></section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/development.md.627e13d.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/development/backend/spi/datasource.json b/en-us/development/backend/spi/datasource.json
new file mode 100644
index 0000000..8167372
--- /dev/null
+++ b/en-us/development/backend/spi/datasource.json
@@ -0,0 +1,6 @@
+{
+  "filename": "datasource.md",
+  "__html": "<h2>DolphinScheduler Datasource SPI main design</h2>\n<h4>How do I use data sources?</h4>\n<p>The data source center supports POSTGRESQL, HIVE/IMPALA, SPARK, CLICKHOUSE, SQLSERVER data sources by default.</p>\n<p>If you are using MySQL or ORACLE data source, you need to place the corresponding driver package in the lib directory</p>\n<h4>How to do Datasource plugin development?</h4>\n<p>org.apache.dolphinscheduler.spi.datasource.DataSourceChannel\norg.apache.dolphinscheduler [...]
+  "link": "/dist/en-us/development/backend/spi/datasource.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/development/backend/spi/registry.html b/en-us/development/backend/spi/registry.html
new file mode 100644
index 0000000..633d5f9
--- /dev/null
+++ b/en-us/development/backend/spi/registry.html
@@ -0,0 +1,56 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="registry">
+  <meta name="description" content="registry">
+  <title>registry</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+</head>
+<body>
+  <div id="root"><div class="md2html development-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-lig [...]
+<h4>how to use?</h4>
+<p>Make the following configuration (take zookeeper as an example)</p>
+<ul>
+<li>Registry plug-in configuration, take Zookeeper as an example (registry.properties)
+dolphinscheduler-service/src/main/resources/registry.properties<pre><code class="language-registry.properties"> registry.plugin.name=zookeeper
+ registry.servers=127.0.0.1:2181
+</code></pre>
+</li>
+</ul>
+<p>For specific configuration information, please refer to the parameter information provided by the specific plug-in, for example zk: <code>org/apache/dolphinscheduler/plugin/registry/zookeeper/ZookeeperConfiguration.java</code>
+All configuration information prefixes need to be +registry, such as <a href="http://base.sleep.time.ms">base.sleep.time.ms</a>, which should be configured in the registry as follows: registry.base.sleep.time.ms=100</p>
+<h4>How to expand</h4>
+<p><code>dolphinscheduler-registry-api</code> defines the standard for implementing plugins. When you need to extend plugins, you only need to implement <code>org.apache.dolphinscheduler.registry.api.RegistryFactory</code>.</p>
+<p>Under the <code>dolphinscheduler-registry-plugin</code> module is the registry plugin we currently provide.</p>
+<h4>FAQ</h4>
+<p>1: registry connect timeout</p>
+<p>You can increase the relevant timeout parameters.</p>
+</div></section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/development.md.627e13d.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/development/backend/spi/registry.json b/en-us/development/backend/spi/registry.json
new file mode 100644
index 0000000..5721895
--- /dev/null
+++ b/en-us/development/backend/spi/registry.json
@@ -0,0 +1,6 @@
+{
+  "filename": "registry.md",
+  "__html": "<h3>DolphinScheduler Registry SPI Extension</h3>\n<h4>how to use?</h4>\n<p>Make the following configuration (take zookeeper as an example)</p>\n<ul>\n<li>Registry plug-in configuration, take Zookeeper as an example (registry.properties)\ndolphinscheduler-service/src/main/resources/registry.properties<pre><code class=\"language-registry.properties\"> registry.plugin.name=zookeeper\n registry.servers=127.0.0.1:2181\n</code></pre>\n</li>\n</ul>\n<p>For specific configuration in [...]
+  "link": "/dist/en-us/development/backend/spi/registry.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/development/backend/spi/task.html b/en-us/development/backend/spi/task.html
new file mode 100644
index 0000000..cb03db5
--- /dev/null
+++ b/en-us/development/backend/spi/task.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="task">
+  <meta name="description" content="task">
+  <title>task</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+</head>
+<body>
+  <div id="root"><div class="md2html development-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-lig [...]
+<h4>How to develop task plugins?</h4>
+<p>org.apache.dolphinscheduler.spi.task.TaskChannel</p>
+<p>The plug-in can implement the above interface. It mainly includes creating tasks (task initialization, task running, etc.) and task cancellation. If it is a yarn task, you need to implement org.apache.dolphinscheduler.plugin.task.api.AbstractYarnTask.</p>
+<p>We provide APIs for external access to all tasks in the dolphinscheduler-task-api module, while the dolphinscheduler-spi module is the spi general code library, which defines all the plug-in modules, such as the alarm module, the registry module, etc., you can read and view in detail .</p>
+<p><em>NOTICE</em></p>
+<p>Since the task plug-in involves the front-end page, the front-end SPI has not yet been implemented, so you need to implement the front-end page corresponding to the plug-in separately.</p>
+<p>If there is a class conflict in the task plugin, you can use <a href="https://maven.apache.org/plugins/maven-shade-plugin/">Shade-Relocating Classes</a> to solve this problem.</p>
+</div></section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/development.md.627e13d.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/development/backend/spi/task.json b/en-us/development/backend/spi/task.json
new file mode 100644
index 0000000..fcf6b44
--- /dev/null
+++ b/en-us/development/backend/spi/task.json
@@ -0,0 +1,6 @@
+{
+  "filename": "task.md",
+  "__html": "<h2>DolphinScheduler Task SPI extension</h2>\n<h4>How to develop task plugins?</h4>\n<p>org.apache.dolphinscheduler.spi.task.TaskChannel</p>\n<p>The plug-in can implement the above interface. It mainly includes creating tasks (task initialization, task running, etc.) and task cancellation. If it is a yarn task, you need to implement org.apache.dolphinscheduler.plugin.task.api.AbstractYarnTask.</p>\n<p>We provide APIs for external access to all tasks in the dolphinscheduler-t [...]
+  "link": "/dist/en-us/development/backend/spi/task.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/development/development-environment-setup.html b/en-us/development/development-environment-setup.html
new file mode 100644
index 0000000..28f77e5
--- /dev/null
+++ b/en-us/development/development-environment-setup.html
@@ -0,0 +1,173 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+  <meta name="keywords" content="development-environment-setup">
+  <meta name="description" content="development-environment-setup">
+  <title>development-environment-setup</title>
+  <link rel="shortcut icon" href="/img/favicon.ico">
+  <link rel="stylesheet" href="/build/vendor.23870e5.css">
+</head>
+<body>
+  <div id="root"><div class="md2html development-page" data-reactroot=""><header class="header-container header-container-dark"><div class="header-body"><span class="mobile-menu-btn mobile-menu-btn-dark"></span><a href="/en-us/index.html"><img class="logo" src="/img/hlogo_white.svg"/></a><div class="search search-dark"><span class="icon-search"></span></div><span class="language-switch language-switch-dark">中</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-lig [...]
+<h2>Software Requests</h2>
+<p>Before setting up the DolphinScheduler development environment, please make sure you have installed the software as below:</p>
+<ul>
+<li><a href="https://git-scm.com/downloads">Git</a>: DolphinScheduler version control system</li>
+<li><a href="https://www.oracle.com/technetwork/java/javase/downloads/index.html">JDK</a>: DolphinScheduler backend language</li>
+<li><a href="http://maven.apache.org/download.cgi">Maven</a>: Java Package Management System</li>
+<li><a href="https://nodejs.org/en/download">Node</a>: DolphinScheduler frontend
+language</li>
+</ul>
+<h3>Clone Git Repository</h3>
+<p>Download the git repository through your git management tool, here we use git-core as an example</p>
+<pre><code class="language-shell">mkdir dolphinscheduler
+cd dolphinscheduler
+git clone git@github.com:apache/dolphinscheduler.git
+</code></pre>
+<h3>compile source code</h3>
+<p>i. If you use MySQL database, pay attention to modify pom.xml in the root project, and change the scope of the mysql-connector-java dependency to compile.</p>
+<p>ii. Run <code>mvn -U install package -Prelease -Dmaven.test.skip=true</code></p>
+<h2>Notice</h2>
+<p>There are two ways to configure the DolphinScheduler development environment, standalone mode and normal mode</p>
+<ul>
+<li><a href="#dolphinscheduler-standalone-quick-start">Standalone mode</a>: <strong>Recommended</strong>,more convenient to build development environment, it can cover most scenes.</li>
+<li><a href="#dolphinscheduler-normal-mode">Normal mode</a>: Separate server master, worker, api, which can cover more test environments than standalone, and it is more like production environment in real life.</li>
+</ul>
+<h2>DolphinScheduler Standalone Quick Start</h2>
+<blockquote>
+<p><strong><em>Note:</em></strong> Standalone server only for development and debugging, cause it use H2 Database, Zookeeper Testing Server which may not stable in production
+Standalone is only supported in DolphinScheduler 1.3.9 and later versions</p>
+</blockquote>
+<h3>Git Branch Choose</h3>
+<p>Use different Git branch to develop different codes</p>
+<ul>
+<li>If you want to develop based on a binary package, switch git branch to specific release branch, for example, if you want to develop base on 1.3.9, you should choose branch <code>1.3.9-release</code>.</li>
+<li>If you want to develop the latest code, choose branch branch <code>dev</code>.</li>
+</ul>
+<h3>Start backend server</h3>
+<p>Find the class <code>org.apache.dolphinscheduler.server.StandaloneServer</code> in Intellij IDEA and clikc run main function to startup.</p>
+<h3>Start frontend server</h3>
+<p>Install frontend dependencies and run it</p>
+<pre><code class="language-shell">cd dolphinscheduler-ui
+npm install
+npm run start
+</code></pre>
+<p>The browser access address <a href="http://localhost:12345/dolphinscheduler">http://localhost:12345/dolphinscheduler</a> can login DolphinScheduler UI. The default username and password are <strong>admin/dolphinscheduler123</strong></p>
+<h2>DolphinScheduler Normal Mode</h2>
+<h3>Prepare</h3>
+<h4>zookeeper</h4>
+<p>Download <a href="https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.6.3">ZooKeeper</a>, and extract it.</p>
+<ul>
+<li>
+<p>Create directory <code>zkData</code> and <code>zkLog</code></p>
+</li>
+<li>
+<p>Go to the zookeeper installation directory, copy configure file <code>zoo_sample.cfg</code> to <code>conf/zoo.cfg</code>, and change value of dataDir in conf/zoo.cfg to dataDir=./tmp/zookeeper</p>
+<pre><code class="language-shell"><span class="hljs-meta">#</span><span class="bash"> We use path /data/zookeeper/data and /data/zookeeper/datalog here as example</span>
+dataDir=/data/zookeeper/data
+dataLogDir=/data/zookeeper/datalog
+</code></pre>
+</li>
+<li>
+<p>Run <code>./bin/zkServer.sh</code> in terminal by command <code>./bin/zkServer.sh start</code>.</p>
+</li>
+</ul>
+<h4>Database</h4>
+<p>The DolphinScheduler's metadata is stored in relational database. Currently supported MySQL and Postgresql. We use MySQL as an example. Start the database and create a new database named dolphinscheduler as DolphinScheduler metabase</p>
+<p>After creating the new database, run the sql file under <code>dolphinscheduler/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_mysql.sql</code> directly in MySQL to complete the database initialization</p>
+<h4>Start Backend Server</h4>
+<p>Following steps will guide how to start the DolphinScheduler backend service</p>
+<h5>Backend Start Prepare</h5>
+<ul>
+<li>
+<p>Open project: Use IDE open the project, here we use Intellij IDEA as an example, after opening it will take a while for Intellij IDEA to complete the dependent download</p>
+</li>
+<li>
+<p>Plugin installation(<strong>Only required for 2.0 or later</strong>)</p>
+</li>
+<li>
+<p>Registry plug-in configuration, take Zookeeper as an example (registry.properties)
+dolphinscheduler-service/src/main/resources/registry.properties</p>
+</li>
+</ul>
+<pre><code class="language-registry.properties"> registry.plugin.name=zookeeper
+ registry.servers=127.0.0.1:2181
+</code></pre>
+<ul>
+<li>
+<p>File change</p>
+<ul>
+<li>If you use MySQL as your metadata database, you need to modify <code>dolphinscheduler/pom.xml</code> and change the <code>scope</code> of the <code>mysql-connector-java</code> dependency to <code>compile</code>. This step is not necessary to use PostgreSQL</li>
+<li>Modify database configuration, modify the database configuration in the <code>dolphinscheduler-dao/src/main/resources/application-mysql.yaml</code></li>
+</ul>
+<p>We here use MySQL with database, username, password named dolphinscheduler as an example</p>
+<pre><code class="language-application-mysql.yaml"> spring:
+   datasource:
+     driver-class-name: com.mysql.jdbc.Driver
+     url: jdbc:mysql://127.0.0.1:3306/dolphinscheduler?useUnicode=true&amp;characterEncoding=UTF-8
+     username: ds_user
+     password: dolphinscheduler
+</code></pre>
+</li>
+<li>
+<p>Log level: add a line <code>&lt;appender-ref ref=&quot;STDOUT&quot;/&gt;</code> to the following configuration to enable the log to be displayed on the command line</p>
+<p><code>dolphinscheduler-server/src/main/resources/logback-worker.xml</code></p>
+<p><code>dolphinscheduler-server/src/main/resources/logback-master.xml</code></p>
+<p><code>dolphinscheduler-api/src/main/resources/logback-api.xml</code></p>
+<p>here we add the result after modify as below:</p>
+<pre><code class="language-diff">&lt;root level=&quot;INFO&quot;&gt;
+<span class="hljs-addition">+  &lt;appender-ref ref=&quot;STDOUT&quot;/&gt;</span>
+  &lt;appender-ref ref=&quot;APILOGFILE&quot;/&gt;
+  &lt;appender-ref ref=&quot;SKYWALKING-LOG&quot;/&gt;
+&lt;/root&gt;
+</code></pre>
+</li>
+</ul>
+<blockquote>
+<p><strong><em>Note:</em></strong> Only DolphinScheduler 2.0 and later versions need to inatall plugin before start server. It not need before version 2.0.</p>
+</blockquote>
+<h5>Server start</h5>
+<p>There are three services that need to be started, including MasterServer, WorkerServer, ApiApplicationServer.</p>
+<ul>
+<li>MasterServer:Execute function <code>main</code> in the class <code>org.apache.dolphinscheduler.server.master.MasterServer</code> by Intellij IDEA, with the configuration <em>VM Options</em> <code>-Dlogging.config=classpath:logback-master.xml -Ddruid.mysql.usePingMethod=false -Dspring.profiles.active=mysql</code></li>
+<li>WorkerServer:Execute function <code>main</code> in the class <code>org.apache.dolphinscheduler.server.worker.WorkerServer</code> by Intellij IDEA, with the configuration <em>VM Options</em> <code>-Dlogging.config=classpath:logback-worker.xml -Ddruid.mysql.usePingMethod=false -Dspring.profiles.active=mysql</code></li>
+<li>ApiApplicationServer:Execute function <code>main</code> in the class <code>org.apache.dolphinscheduler.api.ApiApplicationServer</code> by Intellij IDEA, with the configuration <em>VM Options</em> <code>-Dlogging.config=classpath:logback-api.xml -Dspring.profiles.active=api,mysql</code>. After it started, you could find Open API documentation in <a href="http://localhost:12345/dolphinscheduler/doc.html">http://localhost:12345/dolphinscheduler/doc.html</a></li>
+</ul>
+<blockquote>
+<p>The <code>mysql</code> in the VM Options <code>-Dspring.profiles.active=mysql</code> means specified configuration file</p>
+</blockquote>
+<h3>Start Frontend Server</h3>
+<p>Install frontend dependencies and run it</p>
+<pre><code class="language-shell">cd dolphinscheduler-ui
+npm install
+npm run start
+</code></pre>
+<p>The browser access address <a href="http://localhost:12345/dolphinscheduler">http://localhost:12345/dolphinscheduler</a> can login DolphinScheduler UI. The default username and password are <strong>admin/dolphinscheduler123</strong></p>
+</div></section><footer class="footer-container"><div class="footer-body"><div><h3>About us</h3><h4>Do you need feedback? Please contact us through the following ways.</h4></div><div class="contact-container"><ul><li><a href="/en-us/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>Email List</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png [...]
+  <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
+  <script src="//cdn.jsdelivr.net/npm/react-dom@15.6.2/dist/react-dom.min.js"></script>
+  <script>window.rootPath = '';</script>
+  <script src="/build/vendor.81f6e56.js"></script>
+  <script src="/build/development.md.627e13d.js"></script>
+  <script>
+    var _hmt = _hmt || [];
+    (function() {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?4e7b4b400dd31fa015018a435c64d06f";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+  <!-- Global site tag (gtag.js) - Google Analytics -->
+  <script async src="https://www.googletagmanager.com/gtag/js?id=G-899J8PYKJZ"></script>
+  <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'G-899J8PYKJZ');
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/en-us/development/development-environment-setup.json b/en-us/development/development-environment-setup.json
new file mode 100644
index 0000000..df95413
--- /dev/null
+++ b/en-us/development/development-environment-setup.json
@@ -0,0 +1,6 @@
+{
+  "filename": "development-environment-setup.md",
+  "__html": "<h1>DolphinScheduler development</h1>\n<h2>Software Requests</h2>\n<p>Before setting up the DolphinScheduler development environment, please make sure you have installed the software as below:</p>\n<ul>\n<li><a href=\"https://git-scm.com/downloads\">Git</a>: DolphinScheduler version control system</li>\n<li><a href=\"https://www.oracle.com/technetwork/java/javase/downloads/index.html\">JDK</a>: DolphinScheduler backend language</li>\n<li><a href=\"http://maven.apache.org/dow [...]
+  "link": "/dist/en-us/development/development-environment-setup.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/en-us/development/e2e-test.html b/en-us/development/e2e-test.html
new file mode 100644
index 0000000..f44c00c
--- /dev/null
+++ b/en-us/development/e2e-test.html
@@ -0,0 +1,186 @@
... 367090 lines suppressed ...