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 2021/12/14 11:05:43 UTC

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

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 74892da  Automated deployment: 990e856e4e1a3cb918fdb4297487283be8639973
74892da is described below

commit 74892da02bc9217aa51d8565bf78801271eefd89
Author: github-actions[bot] <gi...@users.noreply.github.com>
AuthorDate: Tue Dec 14 11:05:37 2021 +0000

    Automated deployment: 990e856e4e1a3cb918fdb4297487283be8639973
---
 en-us/development/backend/spi/alert.html           | 56 +++++--------
 en-us/development/backend/spi/alert.json           |  2 +-
 en-us/development/backend/spi/plugin.html          | 92 ----------------------
 en-us/development/backend/spi/plugin.json          |  6 --
 en-us/development/backend/spi/registry.html        | 58 ++++----------
 en-us/development/backend/spi/registry.json        |  2 +-
 en-us/development/backend/spi/task.html            | 23 +-----
 en-us/development/backend/spi/task.json            |  2 +-
 .../development/development-environment-setup.html | 41 ++++------
 .../development/development-environment-setup.json |  2 +-
 zh-cn/development/backend/spi/alert.html           | 35 ++------
 zh-cn/development/backend/spi/alert.json           |  2 +-
 zh-cn/development/backend/spi/plugin.html          | 92 ----------------------
 zh-cn/development/backend/spi/plugin.json          |  6 --
 zh-cn/development/backend/spi/registry.html        | 53 ++++---------
 zh-cn/development/backend/spi/registry.json        |  2 +-
 zh-cn/development/backend/spi/task.html            | 19 +----
 zh-cn/development/backend/spi/task.json            |  2 +-
 .../development/development-environment-setup.html | 40 +++-------
 .../development/development-environment-setup.json |  2 +-
 20 files changed, 101 insertions(+), 436 deletions(-)

diff --git a/en-us/development/backend/spi/alert.html b/en-us/development/backend/spi/alert.html
index 9ec7dc0..c7e1728 100644
--- a/en-us/development/backend/spi/alert.html
+++ b/en-us/development/backend/spi/alert.html
@@ -12,48 +12,39 @@
 <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>The architecture of microkernel &amp; plug-in of DolphinScheduler is changing. All core capabilities such as tasks, resource storage, registry, etc. will be designed to be extensions, and we want to improve the flexibility as well as the friendliness (extensibility) of DolphinScheduler itself through SPI.</p>
-<p>You can read the relevant code under the dolphinscheduler-spi module as a reference. The extended interface of the associated plug-in is under the module, and when we need to implement the relevant function plug-in, it is recommended to read this code block first. Of course, you are welcomed to read the documentation, which will save a lot less time. However, the documentation has a certain lag and when it is missing, it is suggested to take the source code as the reference (If you ar [...]
-<p>When you need to extend, you actually only need to focus on the extension interface. For example, for the alert service you only need to focus on the AlertChannelFactory and the AlertChannel. The underlying logic is already implemented by DolphinScheduler, which makes our development much more focused and simpler.</p>
-<p>By the way, we use an excellent front-end component, form-create, which supports the generation of front-end ui components based on json. If plugin development involves a front-end, we will use json to generate the relevant front-end UI components. The parameters of the plugin are wrapped in org.apache.dolphinscheduler.spi.params, which converts all the relevant parameters into json, meaning that you can draw the front-end components (mainly forms here, we only care about the data of  [...]
-<p>This article focuses on the design and development of Alert alerts.</p>
+<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, and just want to know how to develop your own alarm plugin, you can skip this section.</p>
+<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-spi</p>
-<p>This module is the core SPI module and provides the basic SPI relevant behaviour, where dolphinschedulerplugin is the plugin top-layer interface, all DolphinsCheduler's plugins must implement the interface, and the module also provides some universal tool classes (if you can detach it again Some will something will be better? For example, the UI, we currently use the parameter part) and some UI related basic information.</p>
+<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</p>
-<p>In this module, we have implemented the load of the associated plugin when the Alert-Server starts. Alert provides a variety of plug-in configuration methods that can be enabled by simple configurations after you have done the development. The configuration file is located at dolphinscheduler-alert/src/main/resources/alert.properties .</p>
-<p>It provides two methods of configuration.</p>
-<p>1: Configure the jar directory specified by the plugin, eg: alert.plugin.dir=/root/dolphinscheduler/lib/plugin/alert . When alert-server starts, it will load the jar of the relevant plugin from the specified directory.</p>
-<p>2: IDE development mode</p>
-<p>You can use this configuration when you are in the debugging phase of development, see <a href="https://github.com/apache/incubator-dolphinscheduler-maven-plugin">dolphinscheduler-maven-plugin</a> for design principles.</p>
-</li>
-<li>
-<p>Packaging plugins</p>
+<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>
-<p>We use provisio, an excellent packaging tool, for packaging plugins. Please add it to dolphinscheduler-dist/src/main/provisio/dolphinscheduler.xml, and it will package plugins to the specified directory when processed.</p>
 <h4>Alert SPI Main class information.</h4>
 <p>AlertChannelFactory
-All alert plugins need to implement this interface. The interface is used to define the name of the alert plugin and the required parameters.</p>
+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 alarm plug-in. The alarm plugin needs to implement the interface. It only has one method process. The upper alarm system calls the method and gets the return information of the alert by the AlertResult returned by this method.</p>
+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
-Alert content information. It includes id, title, content and log.</p>
+Alarm content information, including id, title, content, log.</p>
 <p>AlertInfo
-Alarm-related information. When the upper system calls the alarm plug-in instance, the instance of this class is incorporated into the specific alarm plugin through the Process method. It contains the parameter information filled in the front end of the alarm content AlertData and the called alarm plugin instance.</p>
+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 alert plugin sends an alert return message.</p>
+The alarm plug-in sends alarm return information.</p>
 <p>org.apache.dolphinscheduler.spi.params
-This package contains the plug-in parameter definitions. We use alpacajs, a front-end library <a href="http://www.form-create.com">http://www.form-create.com</a>, which dynamically generates 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 doing SPI plug-in development.</p>
-<p>Inside this package we currently only wrap RadioParam, TextParam and PasswordParam, which are used to define parameters of text, radio and password respectively.</p>
-<p>AbsPluginParams</p>
-<p>This class is the base class for all parameters and is inherited by the RadioParam classes. Each DS alert plugin returns a list of AbsPluginParams in the AlertChannelFactory implementation.</p>
-<p>The specific design of alert_spi can be found in issue: <a href="https://github.com/apache/incubator-dolphinscheduler/issues/3049">Alert Plugin Design</a></p>
+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>
@@ -78,15 +69,6 @@ This package contains the plug-in parameter definitions. We use alpacajs, a fron
 <p>SMS alerts</p>
 </li>
 </ul>
-<h4>Alarm Custom Plugin Development</h4>
-<p>In fact, it's very easy to implement a plugin by yourself, you only need to care about the plugin extension interface. In Alert you only need to care about the AlertChannelFactory and AlertChannel. We would recommend that you follow the design specifications of other built-in plugins so that when your idea is good enough, you can donate it to the community without having to change it too much.</p>
-<p>When you complete the development of the relevant code, you need to execute <code>mvn -U install -Dmaven.test.skip=true</code> to install the plug-in and generate the plug-in jar of the alert. The directory is: dolphinscheduler-dist/target/dolphinscheduler-dist-${VERSION}/lib/plugin/alert (the version number will change with the main version number)</p>
-<p>Note: <strong>${VERSION}</strong> needs to be manually modified according to the current version. regarding alert.plugin.binding, maven.local.repository does not need to be modified.</p>
-<p>alert.properties configuration</p>
-<pre><code>alert.plugin.dir=./dolphinscheduler-dist/target/dolphinscheduler-dist-${VERSION}/lib/plugin/alert
-</code></pre>
-<p>Then, you can happily start using your own plugins.</p>
-<p>In fact, custom plug-in development is as easy as we described, and not as difficult as you imagined.</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>
diff --git a/en-us/development/backend/spi/alert.json b/en-us/development/backend/spi/alert.json
index 6e8531b..cdbc655 100644
--- a/en-us/development/backend/spi/alert.json
+++ b/en-us/development/backend/spi/alert.json
@@ -1,6 +1,6 @@
 {
   "filename": "alert.md",
-  "__html": "<h3>DolphinScheduler Alert SPI main design</h3>\n<h4>DolphinScheduler SPI Design</h4>\n<p>The architecture of microkernel &amp; plug-in of DolphinScheduler is changing. All core capabilities such as tasks, resource storage, registry, etc. will be designed to be extensions, and we want to improve the flexibility as well as the friendliness (extensibility) of DolphinScheduler itself through SPI.</p>\n<p>You can read the relevant code under the dolphinscheduler-spi module as a  [...]
+  "__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/plugin.html b/en-us/development/backend/spi/plugin.html
deleted file mode 100644
index 8120ae7..0000000
--- a/en-us/development/backend/spi/plugin.html
+++ /dev/null
@@ -1,92 +0,0 @@
-<!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="plugin">
-  <meta name="description" content="plugin">
-  <title>plugin</title>
-  <link rel="shortcut icon" href="/img/favicon.ico">
-  <link rel="stylesheet" href="/build/vendor.888a4ad.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>Remind:Currently, task plugin development does not support hot deployment.</p>
-<h3>Shell-based tasks</h3>
-<h4>YARN-based calculations (see MapReduceTask)</h4>
-<ul>
-<li>Need to be <strong>org.apache.dolphinscheduler.server.worker.task</strong> Down <strong>TaskManager</strong> Create a custom task in the class (also need to register the corresponding task type in TaskType)</li>
-<li>Need to inherit<strong>org.apache.dolphinscheduler.server.worker.task</strong> Down <strong>AbstractYarnTask</strong></li>
-<li>Constructor Scheduling <strong>AbstractYarnTask</strong> Construction method</li>
-<li>Inherit <strong>AbstractParameters</strong> Custom task parameter entity</li>
-<li>Rewrite <strong>AbstractTask</strong> of <strong>init</strong> Parsing in method<strong>Custom task parameters</strong></li>
-<li>Rewrite <strong>buildCommand</strong> Encapsulation command</li>
-</ul>
-<h4>Non-YARN-based calculations (see ShellTask)</h4>
-<ul>
-<li>
-<p>Need to be <strong>org.apache.dolphinscheduler.server.worker.task</strong> Down <strong>TaskManager</strong> A custom task</p>
-</li>
-<li>
-<p>Need to inherit<strong>org.apache.dolphinscheduler.server.worker.task</strong> Down <strong>AbstractTask</strong></p>
-</li>
-<li>
-<p>Instantiation in constructor <strong>ShellCommandExecutor</strong></p>
-<pre><code>public ShellTask(TaskProps props, Logger logger) {
-  super(props, logger);
-
-  this.taskDir = props.getTaskDir();
-
-  this.processTask = new ShellCommandExecutor(this::logHandle,
-      props.getTaskDir(), props.getTaskAppId(),
-      props.getTenantCode(), props.getEnvFile(), props.getTaskStartTime(),
-      props.getTaskTimeout(), logger);
-  this.processDao = DaoFactory.getDaoInstance(ProcessDao.class);
-}
-</code></pre>
-<p>Incoming custom tasks <strong>TaskProps</strong>And custom<strong>Logger</strong>,TaskProps Encapsulate task information, Logger is installed with custom log information</p>
-</li>
-<li>
-<p>Inherit <strong>AbstractParameters</strong> Custom task parameter entity</p>
-</li>
-<li>
-<p>Rewrite <strong>AbstractTask</strong> of <strong>init</strong> Parsing in method<strong>Custom task parameter entity</strong></p>
-</li>
-<li>
-<p>Rewrite <strong>handle</strong> method,transfer <strong>ShellCommandExecutor</strong> of <strong>run</strong> method,The first parameter is passed in<strong>command</strong>,Pass the second parameter to ProcessDao and set the corresponding <strong>exitStatusCode</strong></p>
-</li>
-</ul>
-<h3>Non-SHELL-based tasks (see SqlTask)</h3>
-<ul>
-<li>Need to be <strong>org.apache.dolphinscheduler.server.worker.task</strong> Down <strong>TaskManager</strong> A custom task</li>
-<li>Need to inherit<strong>org.apache.dolphinscheduler.server.worker.task</strong> Down <strong>AbstractTask</strong></li>
-<li>Inherit <strong>AbstractParameters</strong> Custom task parameter entity</li>
-<li>Constructor or override <strong>AbstractTask</strong> of <strong>init</strong> in the method, parse the custom task parameter entity</li>
-<li>Rewrite <strong>handle</strong> Methods to implement business logic and set the corresponding<strong>exitStatusCode</strong></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.4b8ff33.js"></script>
-  <script src="/build/development.md.9e19c25.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/plugin.json b/en-us/development/backend/spi/plugin.json
deleted file mode 100644
index c7f2a0b..0000000
--- a/en-us/development/backend/spi/plugin.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-  "filename": "plugin.md",
-  "__html": "<h2>Task Plugin Development</h2>\n<p>Remind:Currently, task plugin development does not support hot deployment.</p>\n<h3>Shell-based tasks</h3>\n<h4>YARN-based calculations (see MapReduceTask)</h4>\n<ul>\n<li>Need to be <strong>org.apache.dolphinscheduler.server.worker.task</strong> Down <strong>TaskManager</strong> Create a custom task in the class (also need to register the corresponding task type in TaskType)</li>\n<li>Need to inherit<strong>org.apache.dolphinscheduler.se [...]
-  "link": "/dist/en-us/development/backend/spi/plugin.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
index b505f62..f00a132 100644
--- a/en-us/development/backend/spi/registry.html
+++ b/en-us/development/backend/spi/registry.html
@@ -10,48 +10,24 @@
   <link rel="stylesheet" href="/build/vendor.888a4ad.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 it?</h4>
-<p>Note: <strong>${VERSION}</strong> needs to be manually modified according to the current version.</p>
-<p>First you need to execute the <code>mvn -U install -Prelease -Dmaven.test.skip=true</code> to install the plugin for generating the plugin JAR of the registry. The directory is: dolphinscheduler-dist/target/dolphinscheduler-dist-${VERSION}/lib/plugin/registry.</p>
-<p>Next,  please follow the configuration below (using zookeeper as an example).</p>
-<table>
-<thead>
-<tr>
-<th style="text-align:center">parameter</th>
-<th style="text-align:center">default</th>
-<th style="text-align:center">description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td style="text-align:center">registry.plugin.dir</td>
-<td style="text-align:center">./dolphinscheduler-dist/target/dolphinscheduler-dist-${VERSION}/lib/plugin/registry</td>
-<td style="text-align:center">Registration Center Plugin Directory</td>
-</tr>
-<tr>
-<td style="text-align:center"><a href="http://registry.plugin.name">registry.plugin.name</a></td>
-<td style="text-align:center">zookeeper</td>
-<td style="text-align:center">Registration Center specific plugin name</td>
-</tr>
-<tr>
-<td style="text-align:center">registry.plugin.binding</td>
-<td style="text-align:center">registry</td>
-<td style="text-align:center">Dolphinscheduler plugin category</td>
-</tr>
-<tr>
-<td style="text-align:center">registry.servers</td>
-<td style="text-align:center">127.0.0.1:2181</td>
-<td style="text-align:center">ZK connection address</td>
-</tr>
-</tbody>
-</table>
-<p>For the specific configuration information, please refer to the parameter information that provided by the specific plugin. Taking zk as an example, all the parameters of this configuration information about zk are in the class org/apache/dolphinscheduler/plugin/registry/zookeeper/ZookeeperConfiguration.java. If a parameter is needed to be changed to a specific value instead of the default, it can be configured directly in the registry. However, the prefix should be added to indicate  [...]
+  <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 plugin not found</p>
-<p>Please check if <code>mvn -U install -Dmaven.test.skip=true</code> is executed. Besides, please check if the directory is configured in registry.plugin.dir in the configuration file contains the relevant plugins.</p>
-<p>2:registry connect timeout</p>
-<p>You can add the relevant timeout parameters.</p>
+<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>
diff --git a/en-us/development/backend/spi/registry.json b/en-us/development/backend/spi/registry.json
index 02e5e71..5721895 100644
--- a/en-us/development/backend/spi/registry.json
+++ b/en-us/development/backend/spi/registry.json
@@ -1,6 +1,6 @@
 {
   "filename": "registry.md",
-  "__html": "<h3>DolphinScheduler Registry SPI main design</h3>\n<h4>How to use it?</h4>\n<p>Note: <strong>${VERSION}</strong> needs to be manually modified according to the current version.</p>\n<p>First you need to execute the <code>mvn -U install -Prelease -Dmaven.test.skip=true</code> to install the plugin for generating the plugin JAR of the registry. The directory is: dolphinscheduler-dist/target/dolphinscheduler-dist-${VERSION}/lib/plugin/registry.</p>\n<p>Next,  please follow the [...]
+  "__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
index 64fd093..c1f2724 100644
--- a/en-us/development/backend/spi/task.html
+++ b/en-us/development/backend/spi/task.html
@@ -10,26 +10,11 @@
   <link rel="stylesheet" href="/build/vendor.888a4ad.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 development environment?</h4>
-<p>Note: <strong>${VERSION}</strong> needs to be manually modified according to the current version.</p>
-<p>First you need to execute the <code>mvn -U install -Dmaven.test.skip=true</code> to install the plugin for generating the plugin JAR of the registry. The directory is: dolphinscheduler-dist/target/dolphinscheduler-dist-${VERSION}/lib/plugin/task (The version number will follow the change of the main version number)</p>
-<p>Executing this command will generate all plugins provided by default for all modules.</p>
-<p>Next, configure the plugin directory in (dolphinscheduler-server/src/main/resources/worker.properties)</p>
-<pre><code>task.plugin.dir config the #task.plugin.dir config the Task Plugin dir . WorkerServer while find and load the Task Plugin Jar from this dir when deploy and start WorkerServer on the server .
-task.plugin.dir=./dolphinscheduler-dist/target/dolphinscheduler-dist-${VERSION}/lib/plugin/task
-</code></pre>
-<p>The following configurations can be used for local development debugging, for example:</p>
-<pre><code>maven.local.repository=/Users/localRepository
-#task.plugin.binding config the task plugin need be load when development and run in IDE
-task.plugin.binding=./dolphinscheduler-task-plugin/dolphinscheduler-task-shell/pom.xml
-</code></pre>
-<p>Please configure according to the actual situation.</p>
-<h4>How to do task plugin development?</h4>
-<h3>Back-end development:</h3>
+  <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 plugin should implements the above interface.  It mainly contains methods for creating tasks (task initialization, task run, etc.), task cancellation, and if it is a yarn task, it needs to implement org.apache.dolphinscheduler.plugin.task.api.AbstractYarnTask.</p>
-<p>We provide the API for all tasks to be accessed externally in the dolphinscheduler-task-api module. And dolphinscheduler-spi module is the spi common code base that defines all the plug-in modules like alert module, registry module etc. You can read it in detail to see it.</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>
 </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>
diff --git a/en-us/development/backend/spi/task.json b/en-us/development/backend/spi/task.json
index 3df9365..442d992 100644
--- a/en-us/development/backend/spi/task.json
+++ b/en-us/development/backend/spi/task.json
@@ -1,6 +1,6 @@
 {
   "filename": "task.md",
-  "__html": "<h2>DolphinScheduler Task SPI main design</h2>\n<h4>How to use development environment?</h4>\n<p>Note: <strong>${VERSION}</strong> needs to be manually modified according to the current version.</p>\n<p>First you need to execute the <code>mvn -U install -Dmaven.test.skip=true</code> to install the plugin for generating the plugin JAR of the registry. The directory is: dolphinscheduler-dist/target/dolphinscheduler-dist-${VERSION}/lib/plugin/task (The version number will follo [...]
+  "__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
index 0e6297c..ea342c2 100644
--- a/en-us/development/development-environment-setup.html
+++ b/en-us/development/development-environment-setup.html
@@ -35,7 +35,6 @@ git clone git@github.com:apache/dolphinscheduler.git
 <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
-If you want to test plugin, you can modify <code>plugin.bind</code> in StandaloneServer class or modify the configuration file by yourself.
 Standalone is only supported in DolphinScheduler 1.3.9 and later versions</p>
 </blockquote>
 <h3>Git Branch Choose</h3>
@@ -45,9 +44,6 @@ Standalone is only supported in DolphinScheduler 1.3.9 and later versions</p>
 <li>If you want to develop the latest code, choose branch branch <code>dev</code>.</li>
 </ul>
 <h3>Start backend server</h3>
-<p>Compile backend code</p>
-<pre><code class="language-shell">mvn install -DskipTests
-</code></pre>
 <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>
@@ -86,35 +82,30 @@ dataLogDir=/data/zookeeper/datalog
 <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>): Compile plugin by command <code>mvn -U clean install -Dmaven.test.skip=true</code></p>
-<p>Note: <strong>${VERSION}</strong> needs to be manually modified according to the current version, regarding ***.plugin.binding, maven.local.repository does not need to be modified.</p>
-<ul>
-<li>alert plugin config (alert.properties)</li>
-</ul>
-<pre><code class="language-alert.properties"> alert.plugin.dir=./dolphinscheduler-dist/target/dolphinscheduler-dist-${VERSION}/lib/plugin/alert	
-</code></pre>
-<ul>
-<li>registry plugin config  (registry.properties)</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.dir=./dolphinscheduler-dist/target/dolphinscheduler-dist-${VERSION}/lib/plugin/registry/zookeeper	
+<pre><code class="language-registry.properties"> registry.plugin.name=zookeeper
+ registry.servers=127.0.0.1:2181
 </code></pre>
 <ul>
-<li>task plugin config (worker.properties)</li>
-</ul>
-<pre><code class="language-worker.properties">   task.plugin.dir=./dolphinscheduler-dist/target/dolphinscheduler-dist-${VERSION}/lib/plugin/task	
-</code></pre>
-</li>
 <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/dolphinscheduler-dao/datasource.properties</code></li>
+<li>Modify database configuration, modify the database configuration in the <code>dolphinscheduler-dao/src/main/resources/application-mysql.yaml</code></li>
 </ul>
-<pre><code class="language-properties"><span class="hljs-comment"># We here use MySQL with database, username, password named dolphinscheduler as an example</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/dolphinscheduler?useUnicode=true&amp;characterEncoding=UTF-8&amp;allowMultiQueries=true</span>
-<span class="hljs-meta">spring.datasource.username</span>=<span class="hljs-string">dolphinscheduler</span>
-<span class="hljs-meta">spring.datasource.password</span>=<span class="hljs-string">dolphinscheduler</span>
+<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>
diff --git a/en-us/development/development-environment-setup.json b/en-us/development/development-environment-setup.json
index 7ea0868..bce45c7 100644
--- a/en-us/development/development-environment-setup.json
+++ b/en-us/development/development-environment-setup.json
@@ -1,6 +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 [...]
+  "__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/zh-cn/development/backend/spi/alert.html b/zh-cn/development/backend/spi/alert.html
index 5df32a8..397fc44 100644
--- a/zh-cn/development/backend/spi/alert.html
+++ b/zh-cn/development/backend/spi/alert.html
@@ -13,30 +13,22 @@
   <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="/zh-cn/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">En</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-li [...]
 <h4>DolphinScheduler SPI 设计</h4>
 <p>DolphinScheduler 正在处于微内核 + 插件化的架构更改之中,所有核心能力如任务、资源存储、注册中心等都将被设计为扩展点,我们希望通过 SPI 来提高 DolphinScheduler 本身的灵活性以及友好性(扩展性)。</p>
-<p>相关代码可以参考 dolphinscheduler-spi 模块。相关插件的扩展接口皆在该模块下,当我们需要实现相关功能的插件化的时候,建议先阅读此块的代码,当然,更建议你阅读文档,这会减少很多时间,不过文档有一定的后滞性,当文档缺失的时候,建议以源码为准(如果有兴趣,我们也欢迎你来提交相关文档),此外,我们几乎不会对扩展接口做变更(不包括新增),除非重大架构调整,出现不兼容升级版本,因此,现有文档一般都能够满足。</p>
-<p>当你需要扩展的时候,事实上你只需要关注扩展接口即可,比如告警服务,您只需要关注 AlertChannelFactory 以及 AlertChannel 即可。底层相关逻辑 DolphinScheduler 已经帮我们实现,这让我们的开发更加专注且简单。</p>
+<p>告警相关代码可以参考 <code>dolphinscheduler-alert-api</code> 模块。该模块定义了告警插件扩展的接口以及一些基础代码,当我们需要实现相关功能的插件化的时候,建议先阅读此块的代码,当然,更建议你阅读文档,这会减少很多时间,不过文档有一定的后滞性,当文档缺失的时候,建议以源码为准(如果有兴趣,我们也欢迎你来提交相关文档),此外,我们几乎不会对扩展接口做变更(不包括新增),除非重大架构调整,出现不兼容升级版本,因此,现有文档一般都能够满足。</p>
+<p>我们采用了原生的 JAVA-SPI,当你需要扩展的时候,事实上你只需要关注扩展<code>org.apache.dolphinscheduler.alert.api.AlertChannelFactory</code>接口即可,底层相关逻辑如插件加载等内核已经实现,这让我们的开发更加专注且简单。</p>
 <p>顺便提一句,我们采用了一款优秀的前端组件 form-create,它支持基于 json 生成前端 ui 组件,如果插件开发牵扯到前端,我们会通过 json 来生成相关前端 UI 组件,org.apache.dolphinscheduler.spi.params 里面对插件的参数做了封装,它会将相关参数全部全部转化为对应的 json,这意味这你完全可以通过 Java 代码的方式完成前端组件的绘制(这里主要是表单,我们只关心前后端交互的数据)。</p>
 <p>本文主要着重讲解 Alert 告警相关设计以及开发。</p>
 <h4>主要模块</h4>
 <p>如果你并不关心它的内部设计,只是想单纯的了解如何开发自己的告警插件,可以略过该内容。</p>
 <ul>
 <li>
-<p>dolphinscheduler-spi</p>
-<p>该模块是 SPI 的核心模块,提供了 SPI 相关的基础行为,其中 DolphinSchedulerPlugin 为插件顶层接口,所有 DolphinScheduler 的插件都必须实现该接口,另外该模块也提供了一些通用的工具类(如果能够再抽离出去一些会不会更好?比如 UI,我们目前就 Alert 用到了参数这块)以及一些 UI 相关的基础信息。</p>
+<p>dolphinscheduler-alert-api</p>
+<p>该模块是 ALERT SPI 的核心模块,该模块定义了告警插件扩展的接口以及一些基础代码,扩展插件必须实现此模块所定义的接口:<code>org.apache.dolphinscheduler.alert.api.AlertChannelFactory</code></p>
 </li>
 <li>
-<p>dolphinscheduler-alert</p>
-<p>在这个模块,我们实现了在 alert-server 启动的时候相关插件的加载。alert 提供了多种插件配置方法,当你开发工作完成后,通过简单的配置即可启用。配置文件位于 dolphinscheduler-alert/src/main/resources/alert.properties</p>
-<p>它提供了两种配置方法:</p>
-<p>1:配置插件指定的 jar 目录,eg:alert.plugin.dir=/root/dolphinscheduler/lib/plugin/alert . 当alert-server启动时,会从指定目录加载相关插件的jar。</p>
-<p>2:IDE开发模式</p>
-<p>当你处于开发调试阶段的时候,你可以采用该配置,相关设计原理参照 <a href="https://github.com/apache/incubator-dolphinscheduler-maven-plugin">dolphinscheduler-maven-plugin</a></p>
-</li>
-<li>
-<p>打包插件</p>
+<p>dolphinscheduler-alert-plugins</p>
+<p>该模块是目前我们提供的插件,如 Email、DingTalk、Script等。</p>
 </li>
 </ul>
-<p>插件打包我们使用了 <a href="https://github.com/jvanzyl/provisio">provisio</a>,这是一款优秀的打包工具,你需要在完成插件开发后将其添加到 dolphinscheduler-dist/src/main/provisio/dolphinscheduler.xml,它会在执行的时候将插件打包至指定目录。</p>
 <h4>Alert SPI 主要类信息:</h4>
 <p>AlertChannelFactory
 告警插件工厂接口,所有告警插件需要实现该接口,该接口用来定义告警插件的名称,需要的参数,create 方法用来创建具体的告警插件实例。</p>
@@ -49,7 +41,7 @@
 <p>AlertResult
 告警插件发送告警返回信息。</p>
 <p>org.apache.dolphinscheduler.spi.params
-该包下是插件化的参数定义,我们前端使用 alpacajs 这个前端库 <a href="http://www.form-create.com">http://www.form-create.com</a>,该库可以基于插件定义返回的参数列表 json 来动态生成前端的 ui,因此我们在做 SPI 插件开发的时候无需关心前端。</p>
+该包下是插件化的参数定义,我们前端使用 from-create 这个前端库 <a href="http://www.form-create.com">http://www.form-create.com</a>,该库可以基于插件定义返回的参数列表 json 来动态生成前端的 ui,因此我们在做 SPI 插件开发的时候无需关心前端。</p>
 <p>该 package 下我们目前只封装了 RadioParam,TextParam,PasswordParam,分别用来定义 text 类型的参数,radio 参数和 password 类型的参数。</p>
 <p>AbsPluginParams 该类是所有参数的基类,RadioParam 这些类都继承了该类。每个 DS 的告警插件都会在 AlertChannelFactory 的实现中返回一个 AbsPluginParams 的 list。</p>
 <p>alert_spi 具体设计可见 issue:<a href="https://github.com/apache/incubator-dolphinscheduler/issues/3049">Alert Plugin Design</a></p>
@@ -72,20 +64,7 @@
 <p>Script</p>
 <p>我们实现了 Shell 脚本告警,我们会将相关告警参数透传给脚本,你可以在 Shell 中实现你的相关告警逻辑,如果你需要对接内部告警应用,这是一种不错的方法。</p>
 </li>
-<li>
-<p>SMS</p>
-<p>短信告警</p>
-</li>
 </ul>
-<h4>告警自定义插件开发</h4>
-<p>事实上,自我实现一款插件及其简单,仅仅关心插件扩展接口即可,Alert 中你只需要关心 AlertChannelFactory 以及 AlertChannel。我们更建议你按照其他内置插件的设计规范来去开发,这样当你的idea足够好的时候,你无需做过多更改即可捐献给社区。</p>
-<p>注意:<strong>${VERSION}</strong> 需要根据当前版本手动修改。</p>
-<p>当你完成相关代码开发的时候, 你需要执行 <code>mvn -U install -Dmaven.test.skip=true</code> 安装插件,生成注册中心的插件 jar。目录是:dolphinscheduler-dist/target/dolphinscheduler-dist-${VERSION}/lib/plugin/alert(版本号会跟随主版本号变更)</p>
-<p>alert.properties 配置,对于 alert.plugin.binding,maven.local.repository 这两个参数则无需做修改。</p>
-<pre><code>alert.plugin.dir=./dolphinscheduler-dist/target/dolphinscheduler-dist-${VERSION}/lib/plugin/alert
-</code></pre>
-<p>然后,接下来就可以开始愉快的使用你自己的插件了。</p>
-<p>事实上,自定义插件化开发确实如同我们描绘的那么简单,并没有想象中的多么困难。</p>
 </div></section><footer class="footer-container"><div class="footer-body"><div><h3>联系我们</h3><h4>有问题需要反馈?请通过以下方式联系我们。</h4></div><div class="contact-container"><ul><li><a href="/zh-cn/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>邮件列表</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png"/><img class="img-change" src="/img/twitterblue.png"/><p [...]
   <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>
diff --git a/zh-cn/development/backend/spi/alert.json b/zh-cn/development/backend/spi/alert.json
index 70691e0..a797399 100644
--- a/zh-cn/development/backend/spi/alert.json
+++ b/zh-cn/development/backend/spi/alert.json
@@ -1,6 +1,6 @@
 {
   "filename": "alert.md",
-  "__html": "<h3>DolphinScheduler Alert SPI 主要设计</h3>\n<h4>DolphinScheduler SPI 设计</h4>\n<p>DolphinScheduler 正在处于微内核 + 插件化的架构更改之中,所有核心能力如任务、资源存储、注册中心等都将被设计为扩展点,我们希望通过 SPI 来提高 DolphinScheduler 本身的灵活性以及友好性(扩展性)。</p>\n<p>相关代码可以参考 dolphinscheduler-spi 模块。相关插件的扩展接口皆在该模块下,当我们需要实现相关功能的插件化的时候,建议先阅读此块的代码,当然,更建议你阅读文档,这会减少很多时间,不过文档有一定的后滞性,当文档缺失的时候,建议以源码为准(如果有兴趣,我们也欢迎你来提交相关文档),此外,我们几乎不会对扩展接口做变更(不包括新增),除非重大架构调整,出现不兼容升级版本,因此,现有文档一般都能够满足。</p>\n<p>当你需要扩展的时候
 ,事实上你只需要关注扩展接口即可,比如告警服务,您只需要关注 AlertChannelFact [...]
+  "__html": "<h3>DolphinScheduler Alert SPI 主要设计</h3>\n<h4>DolphinScheduler SPI 设计</h4>\n<p>DolphinScheduler 正在处于微内核 + 插件化的架构更改之中,所有核心能力如任务、资源存储、注册中心等都将被设计为扩展点,我们希望通过 SPI 来提高 DolphinScheduler 本身的灵活性以及友好性(扩展性)。</p>\n<p>告警相关代码可以参考 <code>dolphinscheduler-alert-api</code> 模块。该模块定义了告警插件扩展的接口以及一些基础代码,当我们需要实现相关功能的插件化的时候,建议先阅读此块的代码,当然,更建议你阅读文档,这会减少很多时间,不过文档有一定的后滞性,当文档缺失的时候,建议以源码为准(如果有兴趣,我们也欢迎你来提交相关文档),此外,我们几乎不会对扩展接口做变更(不包括新增),除非重大架构调整,出现不兼容升级版本,因此,现有文档一般都�
 �够满足。</p>\n<p>我们采用了原生的 JAVA-SPI,当你需要扩展的时候 [...]
   "link": "/dist/zh-cn/development/backend/spi/alert.html",
   "meta": {}
 }
\ No newline at end of file
diff --git a/zh-cn/development/backend/spi/plugin.html b/zh-cn/development/backend/spi/plugin.html
deleted file mode 100644
index f31c9be..0000000
--- a/zh-cn/development/backend/spi/plugin.html
+++ /dev/null
@@ -1,92 +0,0 @@
-<!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="plugin">
-  <meta name="description" content="plugin">
-  <title>plugin</title>
-  <link rel="shortcut icon" href="/img/favicon.ico">
-  <link rel="stylesheet" href="/build/vendor.888a4ad.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="/zh-cn/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">En</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-li [...]
-<p>提醒:目前任务插件开发暂不支持热部署</p>
-<h3>基于SHELL的任务</h3>
-<h4>基于YARN的计算(参见MapReduceTask)</h4>
-<ul>
-<li>需要在 <strong>org.apache.dolphinscheduler.server.worker.task</strong> 下的 <strong>TaskManager</strong> 类中创建自定义任务(也需在TaskType注册对应的任务类型)</li>
-<li>需要继承<strong>org.apache.dolphinscheduler.server.worker.task</strong> 下的 <strong>AbstractYarnTask</strong></li>
-<li>构造方法调度 <strong>AbstractYarnTask</strong> 构造方法</li>
-<li>继承 <strong>AbstractParameters</strong> 自定义任务参数实体</li>
-<li>重写 <strong>AbstractTask</strong> 的 <strong>init</strong> 方法中解析<strong>自定义任务参数</strong></li>
-<li>重写 <strong>buildCommand</strong> 封装command</li>
-</ul>
-<h4>基于非YARN的计算(参见ShellTask)</h4>
-<ul>
-<li>
-<p>需要在 <strong>org.apache.dolphinscheduler.server.worker.task</strong> 下的 <strong>TaskManager</strong> 中创建自定义任务</p>
-</li>
-<li>
-<p>需要继承<strong>org.apache.dolphinscheduler.server.worker.task</strong> 下的 <strong>AbstractTask</strong></p>
-</li>
-<li>
-<p>构造方法中实例化 <strong>ShellCommandExecutor</strong></p>
-<pre><code>public ShellTask(TaskProps props, Logger logger) {
-  super(props, logger);
-
-  this.taskDir = props.getTaskDir();
-
-  this.processTask = new ShellCommandExecutor(this::logHandle,
-      props.getTaskDir(), props.getTaskAppId(),
-      props.getTenantCode(), props.getEnvFile(), props.getTaskStartTime(),
-      props.getTaskTimeout(), logger);
-  this.processDao = DaoFactory.getDaoInstance(ProcessDao.class);
-}
-</code></pre>
-<p>传入自定义任务的 <strong>TaskProps</strong>和自定义<strong>Logger</strong>,TaskProps 封装了任务的信息,Logger封装了自定义日志信息</p>
-</li>
-<li>
-<p>继承 <strong>AbstractParameters</strong> 自定义任务参数实体</p>
-</li>
-<li>
-<p>重写 <strong>AbstractTask</strong> 的 <strong>init</strong> 方法中解析<strong>自定义任务参数实体</strong></p>
-</li>
-<li>
-<p>重写 <strong>handle</strong> 方法,调用 <strong>ShellCommandExecutor</strong> 的 <strong>run</strong> 方法,第一个参数传入自己的<strong>command</strong>,第二个参数传入 ProcessDao,设置相应的 <strong>exitStatusCode</strong></p>
-</li>
-</ul>
-<h3>基于非SHELL的任务(参见SqlTask)</h3>
-<ul>
-<li>需要在 <strong>org.apache.dolphinscheduler.server.worker.task</strong> 下的 <strong>TaskManager</strong> 中创建自定义任务</li>
-<li>需要继承<strong>org.apache.dolphinscheduler.server.worker.task</strong> 下的 <strong>AbstractTask</strong></li>
-<li>继承 <strong>AbstractParameters</strong> 自定义任务参数实体</li>
-<li>构造方法或者重写 <strong>AbstractTask</strong> 的 <strong>init</strong> 方法中,解析自定义任务参数实体</li>
-<li>重写 <strong>handle</strong> 方法实现业务逻辑并设置相应的<strong>exitStatusCode</strong></li>
-</ul>
-</div></section><footer class="footer-container"><div class="footer-body"><div><h3>联系我们</h3><h4>有问题需要反馈?请通过以下方式联系我们。</h4></div><div class="contact-container"><ul><li><a href="/zh-cn/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>邮件列表</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png"/><img class="img-change" src="/img/twitterblue.png"/><p [...]
-  <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.4b8ff33.js"></script>
-  <script src="/build/development.md.9e19c25.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/zh-cn/development/backend/spi/plugin.json b/zh-cn/development/backend/spi/plugin.json
deleted file mode 100644
index 1b7cc11..0000000
--- a/zh-cn/development/backend/spi/plugin.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-  "filename": "plugin.md",
-  "__html": "<h2>任务插件开发</h2>\n<p>提醒:目前任务插件开发暂不支持热部署</p>\n<h3>基于SHELL的任务</h3>\n<h4>基于YARN的计算(参见MapReduceTask)</h4>\n<ul>\n<li>需要在 <strong>org.apache.dolphinscheduler.server.worker.task</strong> 下的 <strong>TaskManager</strong> 类中创建自定义任务(也需在TaskType注册对应的任务类型)</li>\n<li>需要继承<strong>org.apache.dolphinscheduler.server.worker.task</strong> 下的 <strong>AbstractYarnTask</strong></li>\n<li>构造方法调度 <strong>AbstractYarnTask</strong> 构造方法</li>\n<li>继承 <strong>AbstractParameters</strong> 自定义任务参数实体</li>\ [...]
-  "link": "/dist/zh-cn/development/backend/spi/plugin.html",
-  "meta": {}
-}
\ No newline at end of file
diff --git a/zh-cn/development/backend/spi/registry.html b/zh-cn/development/backend/spi/registry.html
index 7abb230..a918948 100644
--- a/zh-cn/development/backend/spi/registry.html
+++ b/zh-cn/development/backend/spi/registry.html
@@ -10,48 +10,23 @@
   <link rel="stylesheet" href="/build/vendor.888a4ad.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="/zh-cn/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">En</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-li [...]
+  <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="/zh-cn/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">En</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-li [...]
 <h4>如何使用?</h4>
-<p>首先你需要执行 <code>mvn -U install -Dmaven.test.skip=true</code> 安装插件,生成注册中心的插件 jar。目录是:dolphinscheduler-dist/target/dolphinscheduler-dist-${VERSION}/lib/plugin/registry</p>
-<p>注意:<strong>${VERSION}</strong> 需要根据当前版本手动修改</p>
-<p>其次进行以下配置(以 zookeeper 为例)</p>
-<table>
-<thead>
-<tr>
-<th>参数</th>
-<th>默认值</th>
-<th>描述</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>registry.plugin.dir</td>
-<td>./dolphinscheduler-dist/target/dolphinscheduler-dist-${VERSION}/lib/plugin/registry/zookeeper</td>
-<td>注册中心插件目录</td>
-</tr>
-<tr>
-<td><a href="http://registry.plugin.name">registry.plugin.name</a></td>
-<td>zookeeper</td>
-<td>注册中心具体插件名称</td>
-</tr>
-<tr>
-<td>registry.plugin.binding</td>
-<td>registry</td>
-<td>DolphinScheduler 插件类别</td>
-</tr>
-<tr>
-<td>registry.servers</td>
-<td>127.0.0.1:2181</td>
-<td>zk 连接地址</td>
-</tr>
-</tbody>
-</table>
-<p>具体配置信息请参考具体插件提供的参数信息,例如 zk:org/apache/dolphinscheduler/plugin/registry/zookeeper/ZookeeperConfiguration.java
+<p>进行以下配置(以 zookeeper 为例)</p>
+<ul>
+<li>注册中心插件配置, 以Zookeeper 为例 (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>具体配置信息请参考具体插件提供的参数信息,例如 zk:<code>org/apache/dolphinscheduler/plugin/registry/zookeeper/ZookeeperConfiguration.java</code>
 所有配置信息前缀需要 +registry,如 <a href="http://base.sleep.time.ms">base.sleep.time.ms</a>,在 registry 中应该这样配置:registry.base.sleep.time.ms=100</p>
+<h4>如何扩展</h4>
+<p><code>dolphinscheduler-registry-api</code> 定义了实现插件的标准,当你需要扩展插件的时候只需要实现 <code>org.apache.dolphinscheduler.registry.api.RegistryFactory</code> 即可。</p>
+<p><code>dolphinscheduler-registry-plugin</code> 模块下是我们目前所提供的注册中心插件。</p>
 <h4>FAQ</h4>
-<p>1: registry plugin not found</p>
-<p>请检查是否有执行 <code>mvn -U install -Dmaven.test.skip=true</code> ,此外,请检查配置文件中的 registry.plugin.dir 中配置的目录是否有相关插件。</p>
-<p>2:registry connect timeout</p>
+<p>1:registry connect timeout</p>
 <p>可以增加相关超时参数。</p>
 </div></section><footer class="footer-container"><div class="footer-body"><div><h3>联系我们</h3><h4>有问题需要反馈?请通过以下方式联系我们。</h4></div><div class="contact-container"><ul><li><a href="/zh-cn/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>邮件列表</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png"/><img class="img-change" src="/img/twitterblue.png"/><p [...]
   <script src="//cdn.jsdelivr.net/npm/react@15.6.2/dist/react-with-addons.min.js"></script>
diff --git a/zh-cn/development/backend/spi/registry.json b/zh-cn/development/backend/spi/registry.json
index 29cc52f..896bfb3 100644
--- a/zh-cn/development/backend/spi/registry.json
+++ b/zh-cn/development/backend/spi/registry.json
@@ -1,6 +1,6 @@
 {
   "filename": "registry.md",
-  "__html": "<h3>DolphinScheduler Registry SPI 主要设计</h3>\n<h4>如何使用?</h4>\n<p>首先你需要执行 <code>mvn -U install -Dmaven.test.skip=true</code> 安装插件,生成注册中心的插件 jar。目录是:dolphinscheduler-dist/target/dolphinscheduler-dist-${VERSION}/lib/plugin/registry</p>\n<p>注意:<strong>${VERSION}</strong> 需要根据当前版本手动修改</p>\n<p>其次进行以下配置(以 zookeeper 为例)</p>\n<table>\n<thead>\n<tr>\n<th>参数</th>\n<th>默认值</th>\n<th>描述</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>registry.plugin.dir</td>\n<td>./dolphinscheduler-dist/target/ [...]
+  "__html": "<h3>DolphinScheduler Registry SPI 扩展</h3>\n<h4>如何使用?</h4>\n<p>进行以下配置(以 zookeeper 为例)</p>\n<ul>\n<li>注册中心插件配置, 以Zookeeper 为例 (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>具体配置信息请参考具体插件提供的参数信息,例如 zk:<code>org/apache/dolphinscheduler/plugin/registry/zookeeper/ZookeeperConfiguration.java</code [...]
   "link": "/dist/zh-cn/development/backend/spi/registry.html",
   "meta": {}
 }
\ No newline at end of file
diff --git a/zh-cn/development/backend/spi/task.html b/zh-cn/development/backend/spi/task.html
index f6814a2..4b6aa2b 100644
--- a/zh-cn/development/backend/spi/task.html
+++ b/zh-cn/development/backend/spi/task.html
@@ -10,26 +10,13 @@
   <link rel="stylesheet" href="/build/vendor.888a4ad.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="/zh-cn/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">En</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-li [...]
-<h4>开发环境如何使用?</h4>
-<p>首先你需要执行 <code>mvn -U install -Dmaven.test.skip=true</code> 安装插件,生成注册中心的插件 jar。目录是:dolphinscheduler-dist/target/dolphinscheduler-dist-${VERSION}/lib/plugin/task(版本号会跟随主版本号变更)</p>
-<p>注意:<strong>${VERSION}</strong> 需要根据当前版本手动修改</p>
-<p>执行此命令会生成所有模块默认提供的所有插件。</p>
-<p>其次在(dolphinscheduler-server/src/main/resources/worker.properties)进行配置插件目录</p>
-<pre><code>task.plugin.dir config the #task.plugin.dir config the Task Plugin dir . WorkerServer while find and load the Task Plugin Jar from this dir when deploy and start WorkerServer on the server .
-task.plugin.dir=./dolphinscheduler-dist/target/dolphinscheduler-dist-${VERSION}/lib/plugin/task
-</code></pre>
-<p>本地开发调试也可采用以下方式进行配置,例如:</p>
-<pre><code>maven.local.repository=/Users/localRepository
-#task.plugin.binding config the task plugin need be load when development and run in IDE
-task.plugin.binding=./dolphinscheduler-task-plugin/dolphinscheduler-task-shell/pom.xml
-</code></pre>
-<p>请根据实际情况进行配置。</p>
+  <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="/zh-cn/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">En</span><div class="header-menu"><div><ul class="ant-menu whiteClass ant-menu-li [...]
 <h4>如何进行任务插件开发?</h4>
-<h3>后端开发:</h3>
 <p>org.apache.dolphinscheduler.spi.task.TaskChannel</p>
 <p>插件实现以上接口即可。主要包含创建任务(任务初始化,任务运行等方法)、任务取消,如果是 yarn 任务,则需要实现 org.apache.dolphinscheduler.plugin.task.api.AbstractYarnTask。</p>
 <p>我们在 dolphinscheduler-task-api 模块提供了所有任务对外访问的 API,而 dolphinscheduler-spi 模块则是 spi 通用代码库,定义了所有的插件模块,比如告警模块,注册中心模块等,你可以详细阅读查看。</p>
+<p><em>NOTICE</em>
+由于任务插件设计到前端页面,目前前端的SPI还没有实现,因此你需要单独实现插件对应的前端页面。</p>
 </div></section><footer class="footer-container"><div class="footer-body"><div><h3>联系我们</h3><h4>有问题需要反馈?请通过以下方式联系我们。</h4></div><div class="contact-container"><ul><li><a href="/zh-cn/community/development/subscribe.html"><img class="img-base" src="/img/emailgray.png"/><img class="img-change" src="/img/emailblue.png"/><p>邮件列表</p></a></li><li><a href="https://twitter.com/dolphinschedule"><img class="img-base" src="/img/twittergray.png"/><img class="img-change" src="/img/twitterblue.png"/><p [...]
   <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>
diff --git a/zh-cn/development/backend/spi/task.json b/zh-cn/development/backend/spi/task.json
index 65338ef..38876b7 100644
--- a/zh-cn/development/backend/spi/task.json
+++ b/zh-cn/development/backend/spi/task.json
@@ -1,6 +1,6 @@
 {
   "filename": "task.md",
-  "__html": "<h2>DolphinScheduler Task SPI 主要设计</h2>\n<h4>开发环境如何使用?</h4>\n<p>首先你需要执行 <code>mvn -U install -Dmaven.test.skip=true</code> 安装插件,生成注册中心的插件 jar。目录是:dolphinscheduler-dist/target/dolphinscheduler-dist-${VERSION}/lib/plugin/task(版本号会跟随主版本号变更)</p>\n<p>注意:<strong>${VERSION}</strong> 需要根据当前版本手动修改</p>\n<p>执行此命令会生成所有模块默认提供的所有插件。</p>\n<p>其次在(dolphinscheduler-server/src/main/resources/worker.properties)进行配置插件目录</p>\n<pre><code>task.plugin.dir config the #task.plugin.dir config the Task  [...]
+  "__html": "<h2>DolphinScheduler Task SPI 扩展</h2>\n<h4>如何进行任务插件开发?</h4>\n<p>org.apache.dolphinscheduler.spi.task.TaskChannel</p>\n<p>插件实现以上接口即可。主要包含创建任务(任务初始化,任务运行等方法)、任务取消,如果是 yarn 任务,则需要实现 org.apache.dolphinscheduler.plugin.task.api.AbstractYarnTask。</p>\n<p>我们在 dolphinscheduler-task-api 模块提供了所有任务对外访问的 API,而 dolphinscheduler-spi 模块则是 spi 通用代码库,定义了所有的插件模块,比如告警模块,注册中心模块等,你可以详细阅读查看。</p>\n<p><em>NOTICE</em>\n由于任务插件设计到前端页面,目前前端的SPI还没有实现,因此你需要单独实现插件对应的前端页面。</p>\n",
   "link": "/dist/zh-cn/development/backend/spi/task.html",
   "meta": {}
 }
\ No newline at end of file
diff --git a/zh-cn/development/development-environment-setup.html b/zh-cn/development/development-environment-setup.html
index 647ffd0..17e420a 100644
--- a/zh-cn/development/development-environment-setup.html
+++ b/zh-cn/development/development-environment-setup.html
@@ -34,7 +34,6 @@ git clone git@github.com:apache/dolphinscheduler.git
 <h2>DolphinScheduler Standalone快速开发模式</h2>
 <blockquote>
 <p><strong><em>注意:</em></strong> 仅供单机开发调试使用,默认使用 H2 Database,Zookeeper Testing Server
-如需测试插件,可自行修改 StandaloneServer中 <code>plugin.bind</code>,亦或修改配置文件,具体请查看插件说明
 Standalone 仅在 DolphinScheduler 1.3.9 及以后的版本支持</p>
 </blockquote>
 <h3>分支选择</h3>
@@ -44,9 +43,6 @@ Standalone 仅在 DolphinScheduler 1.3.9 及以后的版本支持</p>
 <li>如果想要开发最新代码,切换到 <code>dev</code> 分支</li>
 </ul>
 <h3>启动后端</h3>
-<p>编译后端相关依赖</p>
-<pre><code class="language-shell">mvn install -DskipTests
-</code></pre>
 <p>在 Intellij IDEA 找到并启动类 <code>org.apache.dolphinscheduler.server.StandaloneServer</code> 即可完成后端启动</p>
 <h3>启动前端</h3>
 <p>安装前端依赖并运行前端组件</p>
@@ -84,35 +80,28 @@ dataLogDir=/data/zookeeper/datalog
 <p>打开项目:使用开发工具打开项目,这里以 Intellij IDEA 为例,打开后需要一段时间,让 Intellij IDEA 完成以依赖的下载</p>
 </li>
 <li>
-<p>插件的配置(<strong>仅 2.0 及以后的版本需要</strong>):编译对应的插件,在项目目录执行 <code>mvn -U clean install -Dmaven.test.skip=true</code> 完成注册插件的安装</p>
-<p>注意:<strong>${VERSION}</strong> 需要根据当前版本手动修改,关于 ***.plugin.binding, maven.local.repository 则无需做任何修改</p>
+<p>插件的配置(<strong>仅 2.0 及以后的版本需要</strong>):</p>
 <ul>
-<li>告警插件配置 (alert.properties)</li>
+<li>注册中心插件配置, 以Zookeeper 为例 (registry.properties)
+dolphinscheduler-service/src/main/resources/registry.properties</li>
 </ul>
-<pre><code class="language-alert.properties"> alert.plugin.dir=./dolphinscheduler-dist/target/dolphinscheduler-dist-${VERSION}/lib/plugin/alert	
-</code></pre>
-<ul>
-<li>注册中心插件配置 (registry.properties)</li>
-</ul>
-<pre><code class="language-registry.properties"> registry.plugin.dir=./dolphinscheduler-dist/target/dolphinscheduler-dist-${VERSION}/lib/plugin/registry/zookeeper	
-</code></pre>
-<ul>
-<li>任务插件配置 (worker.properties)</li>
-</ul>
-<pre><code class="language-worker.properties">   task.plugin.dir=./dolphinscheduler-dist/target/dolphinscheduler-dist-${VERSION}/lib/plugin/task	
+<pre><code class="language-registry.properties"> registry.plugin.name=zookeeper
+ registry.servers=127.0.0.1:2181
 </code></pre>
 </li>
 <li>
 <p>必要的修改</p>
 <ul>
 <li>如果使用 MySQL 作为元数据库,需要先修改 <code>dolphinscheduler/pom.xml</code>,将 <code>mysql-connector-java</code> 依赖的 <code>scope</code> 改为 <code>compile</code>,使用 PostgreSQL 则不需要</li>
-<li>修改数据库配置,修改 <code>dolphinscheduler/dolphinscheduler-dao/datasource.properties</code> 文件中的数据库配置</li>
+<li>修改数据库配置,修改 <code>dolphinscheduler-dao/src/main/resources/application-mysql.yaml</code> 文件中的数据库配置</li>
 </ul>
-<pre><code class="language-properties"><span class="hljs-comment"># 本样例以 MySQL 为例,其中数据库名为 dolphinscheduler,账户名密码均为 dolphinscheduler</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/dolphinscheduler?useUnicode=true&amp;characterEncoding=UTF-8&amp;allowMultiQueries=true</span>
-<span class="hljs-meta">spring.datasource.username</span>=<span class="hljs-string">dolphinscheduler</span>
-<span class="hljs-meta">spring.datasource.password</span>=<span class="hljs-string">dolphinscheduler</span>
+<p>本样例以 MySQL 为例,其中数据库名为 dolphinscheduler,账户名密码均为 dolphinscheduler</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>
@@ -129,9 +118,6 @@ dataLogDir=/data/zookeeper/datalog
 </code></pre>
 </li>
 </ul>
-<blockquote>
-<p><strong><em>注意:</em></strong> 上述准备工作中,插件的安装仅 DolphinScheduler 2.0 及以后的版本需要运行,2.0 之前的版本不需要运行该命令</p>
-</blockquote>
 <h5>启动服务</h5>
 <p>我们需要启动三个必须服务,包括 MasterServer,WorkerServer,ApiApplicationServer,如果有需求可以启动可选服务 LoggerServer</p>
 <ul>
diff --git a/zh-cn/development/development-environment-setup.json b/zh-cn/development/development-environment-setup.json
index ceb6dd0..a5088be 100644
--- a/zh-cn/development/development-environment-setup.json
+++ b/zh-cn/development/development-environment-setup.json
@@ -1,6 +1,6 @@
 {
   "filename": "development-environment-setup.md",
-  "__html": "<h1>DolphinScheduler 开发手册</h1>\n<h2>前置条件</h2>\n<p>在搭建 DolphinScheduler 开发环境之前请确保你已经安装一下软件</p>\n<ul>\n<li><a href=\"https://git-scm.com/downloads\">Git</a>: 版本控制系统</li>\n<li><a href=\"https://www.oracle.com/technetwork/java/javase/downloads/index.html\">JDK</a>: 后端开发</li>\n<li><a href=\"http://maven.apache.org/download.cgi\">Maven</a>: Java包管理系统</li>\n<li><a href=\"https://nodejs.org/en/download\">Node</a>: 前端开发</li>\n</ul>\n<h3>克隆代码库</h3>\n<p>通过你 git 管理工具下载 git 代码,下面以 git-co [...]
+  "__html": "<h1>DolphinScheduler 开发手册</h1>\n<h2>前置条件</h2>\n<p>在搭建 DolphinScheduler 开发环境之前请确保你已经安装一下软件</p>\n<ul>\n<li><a href=\"https://git-scm.com/downloads\">Git</a>: 版本控制系统</li>\n<li><a href=\"https://www.oracle.com/technetwork/java/javase/downloads/index.html\">JDK</a>: 后端开发</li>\n<li><a href=\"http://maven.apache.org/download.cgi\">Maven</a>: Java包管理系统</li>\n<li><a href=\"https://nodejs.org/en/download\">Node</a>: 前端开发</li>\n</ul>\n<h3>克隆代码库</h3>\n<p>通过你 git 管理工具下载 git 代码,下面以 git-co [...]
   "link": "/dist/zh-cn/development/development-environment-setup.html",
   "meta": {}
 }
\ No newline at end of file