You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ni...@apache.org on 2018/08/28 06:58:19 UTC

[incubator-servicecomb-website] branch asf-site updated (ad81a69 -> f4baa57)

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

ningjiang pushed a change to branch asf-site
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-website.git.


    from ad81a69  Publish the website
     add dabb3ba  添加客户管理系统微服务化实战-PartI
     add d3eef81  删除旧的轻松微服务系列文章
     add a6d4d31  Updated the team member
     new ea0b31b  Merge branch 'master' into asf-site
     new f4baa57  Publish the website

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 _developers/cn/team.md                             |   43 +-
 _developers/team.md                                |   39 +-
 ...-05-17-easy-build-microservice-system-part-I.md |  136 --
 ...05-23-easy-build-microservice-system-part-II.md |  325 -----
 ...6-07-easy-build-microservice-system-part-III.md |  160 ---
 ...07-10-easy-build-microservice-system-part-IV.md |  198 ---
 _posts/cn/2018-08-28-crm-part-I.md                 |  747 ++++++++++
 assets/images/scaffold/OutputHello.png             |  Bin 17437 -> 19140 bytes
 assets/images/scaffold/StartServiceComb.io.png     |  Bin 0 -> 75973 bytes
 content/assets/images/scaffold/OutputHello.png     |  Bin 17437 -> 19140 bytes
 .../assets/images/scaffold/StartServiceComb.io.png |  Bin 0 -> 75973 bytes
 content/cn/developers/team/index.html              |   49 +-
 .../docs/apache-servicecomb-day-slides/index.html  |   22 +-
 .../apache-servicecomb-incubating-day/index.html   |   22 +-
 content/cn/docs/autoscale-on-company/index.html    |   22 +-
 .../index.html                                     |   22 +-
 content/cn/docs/communication-btw-sc-ms/index.html |   22 +-
 content/cn/docs/company-on-kubernetes/index.html   |   22 +-
 .../cn/docs/config_center_integration/index.html   |   22 +-
 content/cn/docs/consul-servicemesh.html            |   20 +-
 .../index.html                                     |  607 +++++++-
 .../index.html                                     |   22 +-
 content/cn/docs/distributed_saga_1/index.html      |   22 +-
 content/cn/docs/distributed_saga_2/index.html      |   22 +-
 content/cn/docs/distributed_saga_3/index.html      |   22 +-
 .../index.html                                     |  938 ------------
 .../index.html                                     |  947 ------------
 .../index.html                                     |  995 -------------
 content/cn/docs/go-to-cloud/index.html             |   22 +-
 .../index.html                                     |   26 +-
 .../docs/how-to-reform-a-legacy-system/index.html  |   22 +-
 content/cn/docs/jira_beginner_guide/index.html     |   22 +-
 content/cn/docs/join_the_community/index.html      |   22 +-
 content/cn/docs/linuxcon-workshop-demo/index.html  |   22 +-
 .../cn/docs/maven_dependency_management/index.html |   22 +-
 content/cn/docs/open-design/index.html             |   22 +-
 .../index.html                                     |   22 +-
 content/cn/docs/release_note_1_0_0.html            |   18 +-
 content/cn/docs/saga_pack_design/index.html        |   22 +-
 content/cn/docs/saga_with_cucumber/index.html      |   24 +-
 .../seckill-development-journey-part-I/index.html  |   22 +-
 .../seckill-development-journey-part-II/index.html |   22 +-
 .../index.html                                     |   22 +-
 .../index.html                                     |   22 +-
 .../cn/docs/tracing-with-servicecomb/index.html    |   22 +-
 content/cn/year-archive/index.html                 |  399 +----
 content/developers/team/index.html                 |   37 +-
 .../index.html                                     |   24 +-
 .../apache-servicecomb-incubating-day/index.html   |   24 +-
 content/docs/autoscale-on-company/index.html       |   22 +-
 content/docs/communication-btw-sc-ms/index.html    |   22 +-
 content/docs/company-on-kubernetes/index.html      |   22 +-
 content/docs/distributed_saga_1/index.html         |   22 +-
 content/docs/distributed_saga_2/index.html         |   22 +-
 content/docs/distributed_saga_3/index.html         |   22 +-
 content/docs/go-to-cloud/index.html                |   22 +-
 .../docs/how-to-reform-a-legacy-system/index.html  |   22 +-
 content/docs/howto-upgrade-topzipkin2/index.html   |   22 +-
 content/docs/linuxcon-workshop-demo/index.html     |   22 +-
 content/docs/release-note-1-0-0/index.html         |   19 +-
 .../seckill-development-journey-part-I/index.html  |   22 +-
 .../seckill-development-journey-part-II/index.html |   22 +-
 .../index.html                                     |   22 +-
 content/docs/service-center-ui/index.html          |   22 +-
 .../service-registry-refactor-proposal/index.html  |   22 +-
 .../index.html                                     |   22 +-
 content/docs/tracing-with-servicecomb/index.html   |   22 +-
 content/feed.xml                                   | 1519 +++++++++++++++-----
 content/sitemap.xml                                |   20 +-
 content/sitemap/index.html                         |   10 +-
 70 files changed, 3128 insertions(+), 5120 deletions(-)
 delete mode 100644 _posts/cn/2018-05-17-easy-build-microservice-system-part-I.md
 delete mode 100644 _posts/cn/2018-05-23-easy-build-microservice-system-part-II.md
 delete mode 100644 _posts/cn/2018-06-07-easy-build-microservice-system-part-III.md
 delete mode 100644 _posts/cn/2018-07-10-easy-build-microservice-system-part-IV.md
 create mode 100644 _posts/cn/2018-08-28-crm-part-I.md
 create mode 100644 assets/images/scaffold/StartServiceComb.io.png
 create mode 100644 content/assets/images/scaffold/StartServiceComb.io.png
 rename content/cn/docs/{easy-build-microservice-system-part-II => crm-part-I}/index.html (51%)
 delete mode 100644 content/cn/docs/easy-build-microservice-system-part-I/index.html
 delete mode 100644 content/cn/docs/easy-build-microservice-system-part-III/index.html
 delete mode 100644 content/cn/docs/easy-build-microservice-system-part-IV/index.html


[incubator-servicecomb-website] 02/02: Publish the website

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ningjiang pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-website.git

commit f4baa5789fce3cd9511faa2bf802753773f43a3a
Author: Willem Jiang <ji...@huawei.com>
AuthorDate: Tue Aug 28 14:58:01 2018 +0800

    Publish the website
---
 content/assets/images/scaffold/OutputHello.png     |  Bin 17437 -> 19140 bytes
 .../assets/images/scaffold/StartServiceComb.io.png |  Bin 0 -> 75973 bytes
 content/cn/developers/team/index.html              |   49 +-
 .../docs/apache-servicecomb-day-slides/index.html  |   22 +-
 .../apache-servicecomb-incubating-day/index.html   |   22 +-
 content/cn/docs/autoscale-on-company/index.html    |   22 +-
 .../index.html                                     |   22 +-
 content/cn/docs/communication-btw-sc-ms/index.html |   22 +-
 content/cn/docs/company-on-kubernetes/index.html   |   22 +-
 .../cn/docs/config_center_integration/index.html   |   22 +-
 content/cn/docs/consul-servicemesh.html            |   20 +-
 .../index.html                                     |  607 +++++++-
 .../index.html                                     |   22 +-
 content/cn/docs/distributed_saga_1/index.html      |   22 +-
 content/cn/docs/distributed_saga_2/index.html      |   22 +-
 content/cn/docs/distributed_saga_3/index.html      |   22 +-
 .../index.html                                     |  938 ------------
 .../index.html                                     |  947 ------------
 .../index.html                                     |  995 -------------
 content/cn/docs/go-to-cloud/index.html             |   22 +-
 .../index.html                                     |   26 +-
 .../docs/how-to-reform-a-legacy-system/index.html  |   22 +-
 content/cn/docs/jira_beginner_guide/index.html     |   22 +-
 content/cn/docs/join_the_community/index.html      |   22 +-
 content/cn/docs/linuxcon-workshop-demo/index.html  |   22 +-
 .../cn/docs/maven_dependency_management/index.html |   22 +-
 content/cn/docs/open-design/index.html             |   22 +-
 .../index.html                                     |   22 +-
 content/cn/docs/release_note_1_0_0.html            |   18 +-
 content/cn/docs/saga_pack_design/index.html        |   22 +-
 content/cn/docs/saga_with_cucumber/index.html      |   24 +-
 .../seckill-development-journey-part-I/index.html  |   22 +-
 .../seckill-development-journey-part-II/index.html |   22 +-
 .../index.html                                     |   22 +-
 .../index.html                                     |   22 +-
 .../cn/docs/tracing-with-servicecomb/index.html    |   22 +-
 content/cn/year-archive/index.html                 |  399 +----
 content/developers/team/index.html                 |   37 +-
 .../index.html                                     |   24 +-
 .../apache-servicecomb-incubating-day/index.html   |   24 +-
 content/docs/autoscale-on-company/index.html       |   22 +-
 content/docs/communication-btw-sc-ms/index.html    |   22 +-
 content/docs/company-on-kubernetes/index.html      |   22 +-
 content/docs/distributed_saga_1/index.html         |   22 +-
 content/docs/distributed_saga_2/index.html         |   22 +-
 content/docs/distributed_saga_3/index.html         |   22 +-
 content/docs/go-to-cloud/index.html                |   22 +-
 .../docs/how-to-reform-a-legacy-system/index.html  |   22 +-
 content/docs/howto-upgrade-topzipkin2/index.html   |   22 +-
 content/docs/linuxcon-workshop-demo/index.html     |   22 +-
 content/docs/release-note-1-0-0/index.html         |   19 +-
 .../seckill-development-journey-part-I/index.html  |   22 +-
 .../seckill-development-journey-part-II/index.html |   22 +-
 .../index.html                                     |   22 +-
 content/docs/service-center-ui/index.html          |   22 +-
 .../service-registry-refactor-proposal/index.html  |   22 +-
 .../index.html                                     |   22 +-
 content/docs/tracing-with-servicecomb/index.html   |   22 +-
 content/feed.xml                                   | 1519 +++++++++++++++-----
 content/sitemap.xml                                |   20 +-
 content/sitemap/index.html                         |   10 +-
 61 files changed, 2337 insertions(+), 4263 deletions(-)

diff --git a/content/assets/images/scaffold/OutputHello.png b/content/assets/images/scaffold/OutputHello.png
index c514cea..5f1ab6b 100644
Binary files a/content/assets/images/scaffold/OutputHello.png and b/content/assets/images/scaffold/OutputHello.png differ
diff --git a/content/assets/images/scaffold/StartServiceComb.io.png b/content/assets/images/scaffold/StartServiceComb.io.png
new file mode 100644
index 0000000..568ea81
Binary files /dev/null and b/content/assets/images/scaffold/StartServiceComb.io.png differ
diff --git a/content/cn/developers/team/index.html b/content/cn/developers/team/index.html
index 4c3051b..01a4adf 100644
--- a/content/cn/developers/team/index.html
+++ b/content/cn/developers/team/index.html
@@ -498,6 +498,18 @@
       <td>*</td>
     </tr>
     <tr>
+      <td>yangbor</td>
+      <td>Yang Bo</td>
+      <td>Huawei</td>
+      <td> </td>
+    </tr>
+    <tr>
+      <td>zenlinTechnofreak</td>
+      <td>Lin Zhinan</td>
+      <td>Huawei</td>
+      <td> </td>
+    </tr>
+    <tr>
       <td>zhangqi</td>
       <td>Zhang qi</td>
       <td>Huawei</td>
@@ -542,6 +554,16 @@
       <td>SupWisdom</td>
     </tr>
     <tr>
+      <td>cherrylzhao</td>
+      <td>Zhao Jun</td>
+      <td>JD.com</td>
+    </tr>
+    <tr>
+      <td>crystaldust</td>
+      <td>Ju Zheng</td>
+      <td>Huawei</td>
+    </tr>
+    <tr>
       <td>imlidian</td>
       <td>Li Dian</td>
       <td>Huawei</td>
@@ -552,6 +574,11 @@
       <td>Pactera</td>
     </tr>
     <tr>
+      <td>KomachiSion</td>
+      <td>Yang Yi</td>
+      <td>JD.com</td>
+    </tr>
+    <tr>
       <td>laijianbin</td>
       <td>Lai Jianbin</td>
       <td> </td>
@@ -582,16 +609,16 @@
       <td>Huawei</td>
     </tr>
     <tr>
-      <td>SingleX</td>
-      <td>Gao Xing</td>
-      <td>CaiNiao</td>
-    </tr>
-    <tr>
       <td>sjh0027</td>
       <td> </td>
       <td> </td>
     </tr>
     <tr>
+      <td>SingleX</td>
+      <td>Gao Xing</td>
+      <td>CaiNiao</td>
+    </tr>
+    <tr>
       <td>TankTian</td>
       <td>Tian Min</td>
       <td>Huawei</td>
@@ -622,21 +649,11 @@
       <td> </td>
     </tr>
     <tr>
-      <td>yangbor</td>
-      <td>Yang Bo</td>
-      <td>Huawei</td>
-    </tr>
-    <tr>
       <td>yhs0092</td>
       <td> </td>
       <td> </td>
     </tr>
     <tr>
-      <td>zenlinTechnofreak</td>
-      <td>Lin Zhinan</td>
-      <td>Huawei</td>
-    </tr>
-    <tr>
       <td>zhanglongchun</td>
       <td>Zhang LongChun</td>
       <td> </td>
@@ -644,7 +661,7 @@
     <tr>
       <td>zhang2014</td>
       <td>Zhang Jian</td>
-      <td>oneAPM</td>
+      <td>OneAPM</td>
     </tr>
     <tr>
       <td>zhuhoudong</td>
diff --git a/content/cn/docs/apache-servicecomb-day-slides/index.html b/content/cn/docs/apache-servicecomb-day-slides/index.html
index 2a727c9..35dbbc0 100644
--- a/content/cn/docs/apache-servicecomb-day-slides/index.html
+++ b/content/cn/docs/apache-servicecomb-day-slides/index.html
@@ -591,11 +591,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -603,7 +603,7 @@
 
 
 
-  4 分钟 阅读
+  6 分钟 阅读
 
 </p>
     
@@ -620,11 +620,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -632,7 +632,7 @@
 
 
 
-  少于 1 分钟 阅读
+  4 分钟 阅读
 
 </p>
     
@@ -649,11 +649,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -661,7 +661,7 @@
 
 
 
-  1 分钟 阅读
+  少于 1 分钟 阅读
 
 </p>
     
@@ -678,11 +678,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/cn/docs/apache-servicecomb-incubating-day/index.html b/content/cn/docs/apache-servicecomb-incubating-day/index.html
index d2d1e73..eed5921 100644
--- a/content/cn/docs/apache-servicecomb-incubating-day/index.html
+++ b/content/cn/docs/apache-servicecomb-incubating-day/index.html
@@ -631,11 +631,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -643,7 +643,7 @@
 
 
 
-  4 分钟 阅读
+  6 分钟 阅读
 
 </p>
     
@@ -660,11 +660,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -672,7 +672,7 @@
 
 
 
-  少于 1 分钟 阅读
+  4 分钟 阅读
 
 </p>
     
@@ -689,11 +689,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -701,7 +701,7 @@
 
 
 
-  1 分钟 阅读
+  少于 1 分钟 阅读
 
 </p>
     
@@ -718,11 +718,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/cn/docs/autoscale-on-company/index.html b/content/cn/docs/autoscale-on-company/index.html
index 24c4eda..aa8467a 100644
--- a/content/cn/docs/autoscale-on-company/index.html
+++ b/content/cn/docs/autoscale-on-company/index.html
@@ -647,11 +647,11 @@ bash LinuxCon-Beijing-WorkShop/kubernetes/stress-test.sh
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -659,7 +659,7 @@ bash LinuxCon-Beijing-WorkShop/kubernetes/stress-test.sh
 
 
 
-  4 分钟 阅读
+  6 分钟 阅读
 
 </p>
     
@@ -676,11 +676,11 @@ bash LinuxCon-Beijing-WorkShop/kubernetes/stress-test.sh
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -688,7 +688,7 @@ bash LinuxCon-Beijing-WorkShop/kubernetes/stress-test.sh
 
 
 
-  少于 1 分钟 阅读
+  4 分钟 阅读
 
 </p>
     
@@ -705,11 +705,11 @@ bash LinuxCon-Beijing-WorkShop/kubernetes/stress-test.sh
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -717,7 +717,7 @@ bash LinuxCon-Beijing-WorkShop/kubernetes/stress-test.sh
 
 
 
-  1 分钟 阅读
+  少于 1 分钟 阅读
 
 </p>
     
@@ -734,11 +734,11 @@ bash LinuxCon-Beijing-WorkShop/kubernetes/stress-test.sh
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/cn/docs/build-java-chassis-microservices-using-gradle/index.html b/content/cn/docs/build-java-chassis-microservices-using-gradle/index.html
index 1474a4a..7577a65 100644
--- a/content/cn/docs/build-java-chassis-microservices-using-gradle/index.html
+++ b/content/cn/docs/build-java-chassis-microservices-using-gradle/index.html
@@ -618,11 +618,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -630,7 +630,7 @@
 
 
 
-  4 分钟 阅读
+  6 分钟 阅读
 
 </p>
     
@@ -647,11 +647,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -659,7 +659,7 @@
 
 
 
-  少于 1 分钟 阅读
+  4 分钟 阅读
 
 </p>
     
@@ -676,11 +676,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -688,7 +688,7 @@
 
 
 
-  1 分钟 阅读
+  少于 1 分钟 阅读
 
 </p>
     
@@ -705,11 +705,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/cn/docs/communication-btw-sc-ms/index.html b/content/cn/docs/communication-btw-sc-ms/index.html
index e9ff023..33ed8df 100644
--- a/content/cn/docs/communication-btw-sc-ms/index.html
+++ b/content/cn/docs/communication-btw-sc-ms/index.html
@@ -557,11 +557,11 @@ When Consumer needs to communicate to Provider then consumer reads endpoints of
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -569,7 +569,7 @@ When Consumer needs to communicate to Provider then consumer reads endpoints of
 
 
 
-  4 分钟 阅读
+  6 分钟 阅读
 
 </p>
     
@@ -586,11 +586,11 @@ When Consumer needs to communicate to Provider then consumer reads endpoints of
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -598,7 +598,7 @@ When Consumer needs to communicate to Provider then consumer reads endpoints of
 
 
 
-  少于 1 分钟 阅读
+  4 分钟 阅读
 
 </p>
     
@@ -615,11 +615,11 @@ When Consumer needs to communicate to Provider then consumer reads endpoints of
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -627,7 +627,7 @@ When Consumer needs to communicate to Provider then consumer reads endpoints of
 
 
 
-  1 分钟 阅读
+  少于 1 分钟 阅读
 
 </p>
     
@@ -644,11 +644,11 @@ When Consumer needs to communicate to Provider then consumer reads endpoints of
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/cn/docs/company-on-kubernetes/index.html b/content/cn/docs/company-on-kubernetes/index.html
index 4256d5b..cfe9ec1 100644
--- a/content/cn/docs/company-on-kubernetes/index.html
+++ b/content/cn/docs/company-on-kubernetes/index.html
@@ -657,11 +657,11 @@ kubectl get svc company-manager -o yaml | grep nodePort -C 1
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -669,7 +669,7 @@ kubectl get svc company-manager -o yaml | grep nodePort -C 1
 
 
 
-  4 分钟 阅读
+  6 分钟 阅读
 
 </p>
     
@@ -686,11 +686,11 @@ kubectl get svc company-manager -o yaml | grep nodePort -C 1
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -698,7 +698,7 @@ kubectl get svc company-manager -o yaml | grep nodePort -C 1
 
 
 
-  少于 1 分钟 阅读
+  4 分钟 阅读
 
 </p>
     
@@ -715,11 +715,11 @@ kubectl get svc company-manager -o yaml | grep nodePort -C 1
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -727,7 +727,7 @@ kubectl get svc company-manager -o yaml | grep nodePort -C 1
 
 
 
-  1 分钟 阅读
+  少于 1 分钟 阅读
 
 </p>
     
@@ -744,11 +744,11 @@ kubectl get svc company-manager -o yaml | grep nodePort -C 1
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/cn/docs/config_center_integration/index.html b/content/cn/docs/config_center_integration/index.html
index a468a23..403d6bb 100644
--- a/content/cn/docs/config_center_integration/index.html
+++ b/content/cn/docs/config_center_integration/index.html
@@ -781,11 +781,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -793,7 +793,7 @@
 
 
 
-  4 分钟 阅读
+  6 分钟 阅读
 
 </p>
     
@@ -810,11 +810,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -822,7 +822,7 @@
 
 
 
-  少于 1 分钟 阅读
+  4 分钟 阅读
 
 </p>
     
@@ -839,11 +839,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -851,7 +851,7 @@
 
 
 
-  1 分钟 阅读
+  少于 1 分钟 阅读
 
 </p>
     
@@ -868,11 +868,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/cn/docs/consul-servicemesh.html b/content/cn/docs/consul-servicemesh.html
index f3e1769..1691ebd 100644
--- a/content/cn/docs/consul-servicemesh.html
+++ b/content/cn/docs/consul-servicemesh.html
@@ -588,7 +588,7 @@
       
   <nav class="pagination">
     
-      <a href="/cn/docs/easy-build-microservice-system-part-IV/" class="pagination--pager" title="轻松微服务系列:边缘服务支持统一认证
+      <a href="/docs/apache-servicecomb-incubating-day-report/" class="pagination--pager" title="Apache ServiceComb (incubating) Day Report
 ">向前</a>
     
     
@@ -676,11 +676,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -688,7 +688,7 @@
 
 
 
-  4 分钟 阅读
+  6 分钟 阅读
 
 </p>
     
@@ -705,11 +705,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -717,7 +717,7 @@
 
 
 
-  少于 1 分钟 阅读
+  4 分钟 阅读
 
 </p>
     
@@ -734,11 +734,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -746,7 +746,7 @@
 
 
 
-  1 分钟 阅读
+  少于 1 分钟 阅读
 
 </p>
     
diff --git a/content/cn/docs/easy-build-microservice-system-part-II/index.html b/content/cn/docs/crm-part-I/index.html
similarity index 51%
rename from content/cn/docs/easy-build-microservice-system-part-II/index.html
rename to content/cn/docs/crm-part-I/index.html
index b50c10d..b1809ce 100644
--- a/content/cn/docs/easy-build-microservice-system-part-II/index.html
+++ b/content/cn/docs/crm-part-I/index.html
@@ -19,12 +19,12 @@
 
 
 
-<title>轻松微服务系列:快速实现客户关系管理系统的用户服务 - Apache ServiceComb (incubating)</title>
+<title>客户管理系统微服务化实战-PartI - Apache ServiceComb (incubating)</title>
 
 
 
 
-<meta name="description" content="轻松微服务系列:快速实现客户关系管理系统的用户服务">
+<meta name="description" content="客户管理系统微服务化实战-PartI">
 
 
 
@@ -33,21 +33,21 @@
 
 <meta property="og:locale" content="cn">
 <meta property="og:site_name" content="Apache ServiceComb (incubating)">
-<meta property="og:title" content="轻松微服务系列:快速实现客户关系管理系统的用户服务">
+<meta property="og:title" content="客户管理系统微服务化实战-PartI">
 
 
-  <link rel="canonical" href="http://github.com/pages/apache/incubator-servicecomb-website/cn/docs/easy-build-microservice-system-part-II/">
-  <meta property="og:url" content="http://github.com/pages/apache/incubator-servicecomb-website/cn/docs/easy-build-microservice-system-part-II/">
+  <link rel="canonical" href="http://github.com/pages/apache/incubator-servicecomb-website/cn/docs/crm-part-I/">
+  <meta property="og:url" content="http://github.com/pages/apache/incubator-servicecomb-website/cn/docs/crm-part-I/">
 
 
 
-  <meta property="og:description" content="轻松微服务系列:快速实现客户关系管理系统的用户服务">
+  <meta property="og:description" content="客户管理系统微服务化实战-PartI">
 
 
 
   <meta name="twitter:site" content="@ServiceComb">
-  <meta name="twitter:title" content="轻松微服务系列:快速实现客户关系管理系统的用户服务">
-  <meta name="twitter:description" content="轻松微服务系列:快速实现客户关系管理系统的用户服务">
+  <meta name="twitter:title" content="客户管理系统微服务化实战-PartI">
+  <meta name="twitter:description" content="客户管理系统微服务化实战-PartI">
   <meta name="twitter:url" content="">
 
   
@@ -70,7 +70,7 @@
 
 
   <meta property="og:type" content="article">
-  <meta property="article:published_time" content="2018-05-23T00:00:00+08:00">
+  <meta property="article:published_time" content="2018-08-28T00:00:00+08:00">
 
 
 
@@ -226,7 +226,7 @@
           
             
             
-            <a href=/docs/easy-build-microservice-system-part-II/>English</a>
+            <a href=/docs/crm-part-I/>English</a>
           
         </div>
       </nav>
@@ -347,16 +347,16 @@
 
 
   <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
-    <meta itemprop="headline" content="轻松微服务系列:快速实现客户关系管理系统的用户服务">
-    <meta itemprop="description" content="轻松微服务系列:快速实现客户关系管理系统的用户服务">
-    <meta itemprop="datePublished" content="May 23, 2018">
-    <meta itemprop="dateModified" content="May 23, 2018">
+    <meta itemprop="headline" content="客户管理系统微服务化实战-PartI">
+    <meta itemprop="description" content="客户管理系统微服务化实战-PartI">
+    <meta itemprop="datePublished" content="August 28, 2018">
+    <meta itemprop="dateModified" content="August 28, 2018">
 
     <div class="page__inner-wrap">
       
         
           <header>
-            <h1 class="page__title" itemprop="headline">轻松微服务系列:快速实现客户关系管理系统的用户服务
+            <h1 class="page__title" itemprop="headline">客户管理系统微服务化实战-PartI
 </h1>
             
               <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -364,7 +364,7 @@
 
 
 
-  2 分钟 阅读
+  5 分钟 阅读
 
 </p>
             
@@ -373,17 +373,127 @@
       
 
       <section class="page__content" itemprop="text">
-        <h2 id="轻松微服务系列快速实现客户关系管理系统的用户服务">轻松微服务系列:快速实现客户关系管理系统的用户服务</h2>
-<p>在前一篇博文<a href="http://servicecomb.incubator.apache.org/cn/docs/easy-build-microservice-system-part-I/">《轻松微服务系列:从一键构建微服务和DDD设计开始》</a>,我们已经详细介绍了如何快速构建微服务和DDD相关概念,并引入了一个经典场景——地产CRM。通过<a href="https://en.wikipedia.org/wiki/Event_storming">Event Storming</a>实践获得了系统设计:</p>
+        <h2 id="客户管理系统微服务化实战-parti">客户管理系统微服务化实战-PartI</h2>
+<h2 id="ddd场景极速开发">——DDD、场景、极速开发</h2>
+
+<p>在今年的LC3大会上,ServiceComb展台所展示的demo视频<code class="highlighter-rouge">“30分钟开发雏形CRM应用”</code>引起了参会者的广泛关注,大家纷纷对其背后的技术表现出浓厚的兴趣。本文将从房地产企业的客户管理管理场景入手,使用领域驱动设计,深入技术细节,详解如何快速开发落地一个微服务化的客户管理系统。</p>
+
+<h1 id="1-牛刀小试">1. 牛刀小试</h1>
+<p>打开浏览器,输入地址<code class="highlighter-rouge">http://start.servicecomb.io/</code>打开SERVICECOMB SPRING INITIALIZR,修改Project Metadata中的<code class="highlighter-rouge">Group</code>,<code class="highlighter-rouge">Artifact</code>和ServiceComb Parameters中的<code class="highlighter-rouge">ServiceCenter Address</code>,<code class="highlighter-rouge">Governance</code>等,点击Generate Project,解压生成下载的demo.zip。</p>
+
+<p><img src="/assets/images/scaffold/StartServiceComb.io.png" alt="SERVICECOMB SPRING INITIALIZR截图" /></p>
+
+<p>运行它也很简单,使用IDE打开项目,DEBUG -&gt; Application.java,或在命令行:</p>
+
+<p>稍等微服务启动就绪,打开浏览器输入<code class="highlighter-rouge">http://localhost:9080/hello</code>验证一下:</p>
+
+<p><img src="/assets/images/scaffold/OutputHello.png" alt="输出hello截图" /></p>
+
+<p>是不是非常轻松呢?</p>
+
+<h1 id="2-脚手架">2. 脚手架</h1>
+<p>在建筑领域,脚手架是施工现场为方便工人操作并解决垂直和水平运输而搭设的各种支架以及平台。</p>
+
+<p><img src="/assets/images/scaffold/Scaffold.jpg" alt="scaffold" /></p>
+
+<p>在软件开发领域,它引申为预提供一些基础框架代码加速开发过程,避免从零开始构建项目。用户只需要依据需求场景选择合适的脚手架,然后填充定制的业务逻辑即可,不必再去处理一些基础功能,例如数据库连接、日志实现、RPC传输等。</p>
+
+<p>微服务框架一般都会提供脚手架功能,例如Spring,提供了SPRING INITIALIZR;ServiceComb基于SPRING INITIALIZR,提供了更具优势的特性:</p>
+<ol>
+  <li>生成的项目除了在POM中自动添加必要的依赖,还会提供Producer和Consumer示例代码(Hello World);</li>
+  <li>会进一步提供<strong>Edge Server</strong>、<strong>Authcation Server</strong>等更贴近业务的脚手架项目,让用户能快速构建体系完整的微服务系统。</li>
+</ol>
+
+<p>那么什么叫一个完整的微服务系统呢?我们可以拿一个具体的场景做例子,会更有感觉:</p>
+
+<h1 id="3-场景地产crm">3. 场景:地产CRM</h1>
+<p>您经营着一家房地产开发商,销售房产,迫切需要一套销售系统,考虑到微服务的优势,您决定使用微服务的方式构建系统;主要的业务流程也非常简单:用户前来购买购买产品(房产),首先需要登记用户信息,并缴纳一定数量的定金,待交易当日,挑选心仪的产品(房产),支付尾款,完成交易。</p>
+
+<h2 id="31--使用ddd指导地产crm系统的设计">3.1  使用DDD指导地产CRM系统的设计</h2>
+<p>微服务系统的设计方面,领域驱动设计(Domain-Driven Design,DDD)是一个从业务出发的好选择,它由Eric Evans提出,是一种全新的系统设计和建模方法,这里的模型指的就是领域模型(Domain Model)。领域模型通过聚合(Aggregate)组织在一起,聚合间有明显的业务边界,这些边界将领域划分为一个个限界上下文(Bounded Context)。Martin Fowler对它们都有详细的<a href="https://martinfowler.com/tags/domain%20driven%20design.html">解读</a>。</p>
+
+<p>理论概念都搞清楚了,那么怎么来找模型和聚合呢?一个非常流行的方法就是<a href="https://en.wikipedia.org/wiki/Event_storming">Event Storming</a>,它是由Alberto Brandolini发明,经历了DDD社区和很多团队的实践,也是一种非常有参与感的团队活动:</p>
+
+<p><img src="/assets/images/scaffold/EventStorming.png" alt="EventStorming" /></p>
+
+<p>上图就是我们对地产CRM这个场景使用Event Storming探索的结果,现在我们能够将限界上下文清晰的梳理出来:</p>
+
+<p><img src="/assets/images/scaffold/BoundedContext.png" alt="BoundedContext" /></p>
+
+<blockquote>
+  <p>提示:Event Storming是一项非常有创造性的活动,也是一个持续讨论和反复改进的过程,不同的团队关注的核心域(Core Domain)不同,得到的最终结果也会有差异。我们的目的是为了演示完整的微服务系统构建的过程,并不涉及商业核心竞争力方面的探讨,因此没有Core Domain和Sub Domain之类的偏重。</p>
+</blockquote>
+
+<h2 id="32-将分析成果转化为方案域设计">3.2 将分析成果转化为方案域设计</h2>
+<p>当我们完成所有的限界上下文的识别后,可以直接将它们落地为微服务:</p>
+
+<p><img src="/assets/images/scaffold/MicroserviceDesign1.png" alt="MicroserviceDesign1" /></p>
+
+<ol>
+  <li>用户服务:提供用户信息管理服务,这里保存这用户的账号和密码,负责登录和认证;</li>
+  <li>产品(房产)服务:提供产品管理服务,保存着房产的信息诸如价格、是否已售出等信息;</li>
+  <li>支付服务:提供交易时支付服务,模拟对接银行支付定金,以及购房时支付尾款;</li>
+</ol>
+
+<p>由于完成一笔交易是一个复杂的流程,与这三个微服务都有关联,因此我们引入了一个复合服务——交易服务:</p>
+
+<p><img src="/assets/images/scaffold/MicroserviceDesign2.png" alt="MicroserviceDesign2" /></p>
+
+<ol>
+  <li>交易服务:提供产品交易服务,它通过编排调用将整个交易流程串起来,交易服务中有两个流程:
+    <ul>
+      <li>定金支付</li>
+    </ul>
+
+    <p>Step1:通过用户服务验证用户身份;</p>
+
+    <p>Step2:通过支付服务请求银行扣款,增加定金账号内的定金;</p>
+  </li>
+</ol>
+
+<ul>
+  <li>
+    <p>购房交易</p>
+
+    <p>Step1:通过用户服务验证用户身份;</p>
+
+    <p>Step2:通过资源服务确定用户希望购买的资源(房产)尚未售出;</p>
+
+    <p>Step3:通过资源服务标记目标资源(房产)已售出;</p>
+
+    <p>Step4:通过支付服务请求扣减定金账号内的定金,以及银行扣剩下的尾款;</p>
+
+    <p>最后两个步骤需要保证事务一致性,其中Step4包含两个扣款操作。</p>
+  </li>
+</ul>
+
+<p>之后,我们引入Edge服务提供统一入口:</p>
+
+<p><img src="/assets/images/scaffold/MicroserviceDesign3.png" alt="MicroserviceDesign3" /></p>
+
+<ol>
+  <li>Edge服务:很多时候也被称为API网关(API Gateway),负责集中认证、动态路由等等;</li>
+</ol>
+
+<blockquote>
+  <p>提示:Edge服务需要依赖服务注册-发现机制,因此同时导入了ServiceCenter。</p>
+</blockquote>
+
+<p>最后还需要提供UI:</p>
 
 <p><img src="/assets/images/scaffold/MicroserviceDesign4.png" alt="MicroserviceDesign4" /></p>
 
-<p>现在,我们将从“用户微服务”入手,探索微服务实现过程中即将面对的细节,并轻松处理这些难点。</p>
+<ol>
+  <li>前端UI(同样以微服务方式提供):用户交互界面;</li>
+</ol>
+
+<p>至此,DDD设计地产CRM的工作就结束了。</p>
 
-<h3 id="用户微服务并不简单">用户微服务并不简单</h3>
+<h1 id="4-快速实现客户关系管理系统的用户服务">4. 快速实现客户关系管理系统的用户服务</h1>
+<h2 id="41-用户微服务并不简单">4.1 用户微服务并不简单</h2>
 <p>用户微服务是所有系统中不可或缺的部分,它承载了认证和授权等核心功能——无论是登录一个网站、还是打开一个APP,当涉及到需要身份识别后才能够执行的操作,都需要用户微服务把关。例如观看视频网站上的视频,匿名用户会插播广告,如果希望屏蔽广告,则需要登录并购买VIP会员,登录即是身份认证的过程,而VIP屏蔽广告即是授权的过程。</p>
 
-<h4 id="认证">认证</h4>
+<h5 id="认证">认证</h5>
 <p>认证不仅仅是一次性验证用户名和密码的过程,还需要能反复使用认证的结果,确保后继所有操作都是合法的,这就涉及到“有状态”,但HTTP是一个无状态协议,如何能够将登录成功后的认证信息与后继的请求关联起来呢?</p>
 
 <p>我们非常熟悉的做法是使用Session或Cookie:</p>
@@ -396,7 +506,7 @@
 
 <p>Token中文翻译为令牌,它将登录认证后的信息签名后返回,服务端不保存,客户端请求的时候将认证的完整信息附带上提供给服务端验签,签名可以保证信息不被篡改。了解了了解Token的原理,自然要关注Token的格式,JWT就是这样一个基于JSON的开放标准<a href="https://tools.ietf.org/html/rfc7519">RFC-7519</a>。</p>
 
-<h5 id="jwt-java-web-token规范">JWT (Java Web Token)规范</h5>
+<h6 id="jwt-java-web-token规范">JWT (Java Web Token)规范</h6>
 <p>简而言之JWT规范由三部分构成:</p>
 <ol>
   <li>Header: 声明Token的类型也就是JWT,以及加密算法,例如:</li>
@@ -429,7 +539,7 @@
   <p>提示:JWT IO提供了<a href="https://jwt.io/">在线编码和解码工具</a>。</p>
 </blockquote>
 
-<h4 id="授权">授权</h4>
+<h5 id="授权">授权</h5>
 <p>授权的本意是指将完成某项工作所必须的权力授给下属人员,在软件系统中往往引申为使人或角色具备访问特定资源或更改行为的许可。例如之前提到的VIP屏蔽广告,即是视频网站允许播放终端在特定的帐号登录后跳过广告播放环节(行为)的许可。</p>
 
 <p>授权系统比较常见的做法有ACL和RBAC:</p>
@@ -447,17 +557,13 @@
 
 <p>由于微服务系统的权限控制主要是接口访问控制上,并且多采用用户组方式组织用户,因此RBAC是比较流行的做法。</p>
 
-<h3 id="实现用户微服务">实现用户微服务</h3>
-<h4 id="第一步创建微服务项目">第一步:创建微服务项目</h4>
-<p>还记得前一篇博文<a href="http://servicecomb.incubator.apache.org/cn/docs/easy-build-microservice-system-part-I/">《轻松微服务系列:从一键构建微服务和DDD设计开始》</a>中一键构建微服务的命令行么?使用ServiceComb SpringMVC Archetypes创建用户微服务,在交互模式下,<code class="highlighter-rouge">groupId</code>输入org.apache.servicecomb.scaffold,<code class="highlighter-rouge">artifactId</code>输入user-service,<code class="highlighter-rouge">version</code>使用默认的1.0-SNAPSHOT,创建完毕后使用IDEA或Eclipse打开项目:</p>
+<h2 id="42-实现用户微服务">4.2 实现用户微服务</h2>
+<h5 id="第一步创建微服务项目">第一步:创建微服务项目</h5>
+<p>使用SERVICECOMB SPRING INITIALIZR创建用户微服务,创建完毕后使用IDEA或Eclipse打开项目,我们删掉HelloImpl和HelloConsumer,之后添加自己的实现。</p>
 
-<p><img src="/assets/images/scaffold/UserServiceInit.png" alt="UserServiceInit" /></p>
-
-<p>我们删掉HelloImpl和HelloConsumer,并添加自己的实现。</p>
-
-<h4 id="第二步使用mysql持久化用户信息">第二步:使用MySQL持久化用户信息</h4>
+<h5 id="第二步使用mysql持久化用户信息">第二步:使用MySQL持久化用户信息</h5>
 <p>用户微服务需要持久化用户信息,我们使用MySQL数据库,ORM使用Spring Data JPA:</p>
-<h5 id="引入依赖">引入依赖</h5>
+<h6 id="引入依赖">引入依赖</h6>
 <div class="language-xml highlighter-rouge"><pre class="highlight"><code><span class="nt">&lt;dependency&gt;</span>
   <span class="nt">&lt;groupId&gt;</span>mysql<span class="nt">&lt;/groupId&gt;</span>
   <span class="nt">&lt;artifactId&gt;</span>mysql-connector-java<span class="nt">&lt;/artifactId&gt;</span>
@@ -468,7 +574,7 @@
 <span class="nt">&lt;/dependency&gt;</span>
 </code></pre>
 </div>
-<h5 id="定义存储user信息的userentity实体">定义存储User信息的UserEntity实体</h5>
+<h6 id="定义存储user信息的userentity实体">定义存储User信息的UserEntity实体</h6>
 <div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@Entity</span>
 <span class="nd">@Table</span><span class="o">(</span><span class="n">name</span> <span class="o">=</span> <span class="s">"T_User"</span><span class="o">)</span>
 <span class="kd">public</span> <span class="kd">class</span> <span class="nc">UserEntity</span> <span class="o">{</span>
@@ -506,7 +612,7 @@
 
 <p>在CodeFist模式下,Spring Data JPA会在数据库中自动创建T_User表与此实体映射。</p>
 
-<h5 id="实现userentity实体的repository">实现UserEntity实体的Repository</h5>
+<h6 id="实现userentity实体的repository">实现UserEntity实体的Repository</h6>
 <p>我们继承JPA的PagingAndSortingRepository来实现ORM操作</p>
 
 <div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@Repository</span>
@@ -516,7 +622,7 @@
 </code></pre>
 </div>
 
-<h5 id="配置数据库连接">配置数据库连接</h5>
+<h6 id="配置数据库连接">配置数据库连接</h6>
 <p>在项目的<code class="highlighter-rouge">resources</code>目录下新增<code class="highlighter-rouge">application.properties</code>文件,写入数据库连接信息:</p>
 
 <div class="language-properties highlighter-rouge"><pre class="highlight"><code><span class="py">spring.datasource.url</span><span class="p">=</span><span class="s">jdbc:mysql://localhost:3306/user_db?useSSL=false</span>
@@ -531,8 +637,8 @@
   <p>提示:关于Spring Data JPA的更多资料请参见<a href="https://projects.spring.io/spring-data-jpa/">这篇文档</a>,为了能够简化依赖的引入我们实际上使用的是Spring Boot JPA Starter,详细的例子请参见<a href="https://spring.io/guides/gs/accessing-data-jpa/">这篇文档</a>。</p>
 </blockquote>
 
-<h4 id="第三步实现jwt认证">第三步:实现JWT认证</h4>
-<h5 id="定义jwt接口">定义JWT接口</h5>
+<h5 id="第三步实现jwt认证">第三步:实现JWT认证</h5>
+<h6 id="定义jwt接口">定义JWT接口</h6>
 
 <div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">interface</span> <span class="nc">TokenStore</span> <span class="o">{</span>
   <span class="n">String</span> <span class="nf">generate</span><span class="o">(</span><span class="n">String</span> <span class="n">userName</span><span class="o">);</span>
@@ -544,7 +650,7 @@
 
 <p>generate用于生成Token,validate用于验证Token是否正确。</p>
 
-<h5 id="实现tokenstore">实现TokenStore</h5>
+<h6 id="实现tokenstore">实现TokenStore</h6>
 <p>我们使用<a href="https://github.com/jwtk/jjwt">jjwt</a>提供的JWT实现,创建JwtTokenStore类,继承TokenStore接口,并重写方法:</p>
 
 <div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@Component</span>
@@ -587,8 +693,8 @@
 </code></pre>
 </div>
 
-<h4 id="第四步实现用户服务">第四步:实现用户服务</h4>
-<h5 id="定义userservice接口">定义UserService接口</h5>
+<h5 id="第四步实现用户服务">第四步:实现用户服务</h5>
+<h6 id="定义userservice接口">定义UserService接口</h6>
 
 <div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">interface</span> <span class="nc">UserService</span> <span class="o">{</span>
   <span class="n">ResponseEntity</span><span class="o">&lt;</span><span class="n">Boolean</span><span class="o">&gt;</span> <span class="nf">logon</span><span class="o">(</span><span class="n">UserDTO</span> <span class="n">user</span><span class="o">);</span>
@@ -619,7 +725,7 @@
 </code></pre>
 </div>
 
-<h5 id="实现并发布userservice">实现并发布UserService</h5>
+<h6 id="实现并发布userservice">实现并发布UserService</h6>
 <p>创建UserServiceImpl,继承<code class="highlighter-rouge">UserService</code>接口:</p>
 
 <div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@RestSchema</span><span class="o">(</span><span class="n">schemaId</span> <span class="o">=</span> <span class="s">"user"</span><span class="o">)</span>
@@ -684,12 +790,9 @@
 
 <p>登录成功后,会从TokenStore生成Token,并将其写入Key为<code class="highlighter-rouge">AUTHORIZATION</code>的Header。</p>
 
-<h4 id="第五步实现授权可选">第五步:实现授权(可选)</h4>
-<p>由于我们允许任何用户注册和登录,所以目前还没有授权的需求,基于RBAC构建授权体系将会在以后的博文中介绍。</p>
-
-<p>经过上面五步,具有基本注册和登录功能的用户微服务就构建好了。</p>
+<p>由于我们允许任何用户注册和登录,所以目前还没有授权的需求,经过上面四步,具有基本注册和登录功能的用户微服务就构建好了。</p>
 
-<h3 id="验证实现的用户服务">验证实现的用户服务</h3>
+<h2 id="43-验证实现的用户服务">4.3 验证实现的用户服务</h2>
 <p>启动用户微服务,我们先注册一个账号:</p>
 
 <p><img src="/assets/images/scaffold/TestLogon.png" alt="TestLogon" /></p>
@@ -700,7 +803,376 @@
 
 <p>返回登录成功,Response中已经包含了<code class="highlighter-rouge">AUTHORIZATION</code>Header,后继的所有请求都需要使用这个Token值进行合法认证。</p>
 
-<p>至此,实现客户关系管理系统的用户服务工作就结束了,下一篇文章我们会将目光转移到Edge服务,通过Edge服务作为微服务调用的统一入口,在它之上构建统一认证,并讲解如何应对海量级调用的挑战,敬请期待!</p>
+<p>至此,实现客户关系管理系统的用户服务工作就结束了,现在我们会将目光转移到Edge服务,通过Edge服务作为微服务调用的统一入口,在它之上构建统一认证,应对海量级调用的挑战。</p>
+
+<h1 id="5-开发高性能边缘服务">5 开发高性能边缘服务</h1>
+<h2 id="51-什么是边缘服务edge-service">5.1 什么是边缘服务(Edge Service)</h2>
+<p>边缘服务也是一个微服务,微服务化系统通常使用边缘服务(Edge Service)作为所有其它微服务的统一入口,因此它也常常会被称为API Gateway,使用边缘服务的好处有如下几点:</p>
+<ul>
+  <li>动态路由:动态配置URL地址与微服务之间的对应关系,便于扩展,以及实现版本灰度发布等;</li>
+  <li>统一认证:在入口处进行访问认证,避免需要在所有的微服务中都承载重复的认证机制;</li>
+  <li>集中监控:与统一认证类似,在边缘服务对入口调用进行监控,容易统计流量信息。</li>
+</ul>
+
+<h2 id="52-边缘服务的作用和原理">5.2 边缘服务的作用和原理</h2>
+<p>我们先来看不使用边缘服务,UI直接调用用户服务的场景:</p>
+
+<p><img src="/assets/images/scaffold/DirectInvoke.png" alt="DirectInvoke" /></p>
+
+<p>可以看出这种调用方式,UI缺乏一定的灵活性,体现在:</p>
+<ul>
+  <li>UI的实现绑定了Chassis的编程语言Java,无法使用PHP等其它前端技术开发;</li>
+  <li>UI访问微服务的路径无法动态配置,如果作为后端的微服务系统发生调整,则UI很可能需要修改;</li>
+  <li>UI很容易混入复合(编排)调用的逻辑,使得结构变得复杂难以维护。</li>
+</ul>
+
+<p>我们再看引入边缘服务后,UI如何通过边缘服务调用用户服务:</p>
+
+<p><img src="/assets/images/scaffold/InvokeViaEdge.png" alt="InvokeViaEdge" /></p>
+
+<p>Edge服务将在<code class="highlighter-rouge">9090</code>端口上接受http rest调用,我们设计了下面的转发规则:</p>
+
+<div class="language-text highlighter-rouge"><pre class="highlight"><code>http://{edge-host-name}:9090/{ServiceComb微服务Name}/{服务路径&amp;参数}
+</code></pre>
+</div>
+
+<p>用户微服务名(<code class="highlighter-rouge">service_description.name</code>)是<code class="highlighter-rouge">user-service</code>,因此login调用URL:<em>cse://user-service/login</em>可以通过:<em>http://{edge-host-name}:9090/user-service/login</em> 访问。</p>
+
+<p>如此一来,微服务名成为了路径的一部分,http协议的<code class="highlighter-rouge">hostname</code>和<code class="highlighter-rouge">port</code>将固定指向Edge服务保持不变,灵活性大大增加了。</p>
+
+<p>到此我们还可以再做一点点改进,引入一个自定义配置<code class="highlighter-rouge">edge.routing-short-path.{简称}</code>,映射微服务名:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>edge:
+  routing-short-path:
+    user: user-service
+</code></pre>
+</div>
+
+<p>上面的配置代表:<em>http://{edge-host-name}:9090/user/login</em> 等效于:<em>http://{edge-host-name}:9090/user-service/login</em> ,如此一来:</p>
+<ol>
+  <li>URL能够更加简洁;</li>
+  <li>当微服务名发生变化,只需要调整对应的配置,不需要更改前端UI路径代码。</li>
+</ol>
+
+<h2 id="53-实现边缘服务">5.3 实现边缘服务</h2>
+<h5 id="第一步引入edge-core依赖">第一步:引入Edge Core依赖</h5>
+<div class="language-xml highlighter-rouge"><pre class="highlight"><code><span class="nt">&lt;dependency&gt;</span>
+  <span class="nt">&lt;groupId&gt;</span>org.apache.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+  <span class="nt">&lt;artifactId&gt;</span>edge-core<span class="nt">&lt;/artifactId&gt;</span>
+<span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+</div>
+
+<h5 id="第二步编写调度器dispatcher">第二步:编写调度器Dispatcher</h5>
+<p>Edge服务的核心就是调度器Dispatcher,ServiceComb Edge Core中的Dispatcher基于高性能的Vertx Reactive,轻松应对百万量级API请求的挑战;只需要继承AbstractEdgeDispatcher抽象类,添加对应的逻辑即可:</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">class</span> <span class="nc">EdgeDispatcher</span> <span class="kd">extends</span> <span class="n">AbstractEdgeDispatcher</span> <span class="o">{</span>
+  <span class="kd">private</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">Logger</span> <span class="n">LOGGER</span> <span class="o">=</span> <span class="n">LoggerFactory</span><span class="o">.</span><span class="na">getLogger</span><span class="o">(</span><span class="n">EdgeDispatcher</span><span class="o">.</span><span class="na">class</span><span class="o">);</span>
+
+  <span class="c1">//此Dispatcher的优先级,Order级越小,路由策略优先级越高</span>
+  <span class="kd">public</span> <span class="kt">int</span> <span class="nf">getOrder</span><span class="o">()</span> <span class="o">{</span>
+    <span class="k">return</span> <span class="mi">10000</span><span class="o">;</span>
+  <span class="o">}</span>
+
+  <span class="c1">//初始化Dispatcher的路由策略</span>
+  <span class="kd">public</span> <span class="kt">void</span> <span class="nf">init</span><span class="o">(</span><span class="n">Router</span> <span class="n">router</span><span class="o">)</span> <span class="o">{</span>
+    <span class="c1">///捕获 {ServiceComb微服务Name}/{服务路径&amp;参数} 的URL</span>
+    <span class="n">String</span> <span class="n">regex</span> <span class="o">=</span> <span class="s">"/([^\\\\/]+)/(.*)"</span><span class="o">;</span>
+    <span class="n">router</span><span class="o">.</span><span class="na">routeWithRegex</span><span class="o">(</span><span class="n">regex</span><span class="o">).</span><span class="na">handler</span><span class="o">(</span><span class="n">CookieHandler</span><span class="o">.</span><span class="na">create</span><span class="o">());</span>
+    <span class="n">router</span><span class="o">.</span><span class="na">routeWithRegex</span><span class="o">(</span><span class="n">regex</span><span class="o">).</span><span class="na">handler</span><span class="o">(</span><span class="n">createBodyHandler</span><span class="o">());</span>
+    <span class="n">router</span><span class="o">.</span><span class="na">routeWithRegex</span><span class="o">(</span><span class="n">regex</span><span class="o">).</span><span class="na">failureHandler</span><span class="o">(</span><span class="k">this</span><span class="o">::</span><span class="n">onFailure</span><span class="o">).</span><span class="na">handler</span><span class="o">(</span><span class="k">this</span><span class="o">::</span><span class="n">onRequest</span><span clas [...]
+  <span class="o">}</span>
+
+  <span class="c1">//处理请求,请注意</span>
+  <span class="kd">private</span> <span class="kt">void</span> <span class="nf">onRequest</span><span class="o">(</span><span class="n">RoutingContext</span> <span class="n">context</span><span class="o">)</span> <span class="o">{</span>
+    <span class="n">Map</span><span class="o">&lt;</span><span class="n">String</span><span class="o">,</span> <span class="n">String</span><span class="o">&gt;</span> <span class="n">pathParams</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="na">pathParams</span><span class="o">();</span>
+    <span class="c1">//从匹配的param0拿到{ServiceComb微服务Name}</span>
+    <span class="kd">final</span> <span class="n">String</span> <span class="n">service</span> <span class="o">=</span> <span class="n">pathParams</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="s">"param0"</span><span class="o">);</span>
+    <span class="c1">//从匹配的param1拿到{服务路径&amp;参数}</span>
+    <span class="n">String</span> <span class="n">path</span> <span class="o">=</span> <span class="s">"/"</span> <span class="o">+</span> <span class="n">pathParams</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="s">"param1"</span><span class="o">);</span>
+
+    <span class="c1">//还记得我们之前说的做出一点点改进吗?引入一个自定义配置edge.routing-short-path.{简称},映射微服务名;如果简称没有配置,那么就认为直接是微服务的名</span>
+    <span class="kd">final</span> <span class="n">String</span> <span class="n">serviceName</span> <span class="o">=</span> <span class="n">DynamicPropertyFactory</span><span class="o">.</span><span class="na">getInstance</span><span class="o">()</span>
+        <span class="o">.</span><span class="na">getStringProperty</span><span class="o">(</span><span class="s">"edge.routing-short-path."</span> <span class="o">+</span> <span class="n">service</span><span class="o">,</span> <span class="n">service</span><span class="o">).</span><span class="na">get</span><span class="o">();</span>
+
+    <span class="c1">//创建一个Edge转发</span>
+    <span class="n">EdgeInvocation</span> <span class="n">edgeInvocation</span> <span class="o">=</span> <span class="k">new</span> <span class="n">EdgeInvocation</span><span class="o">();</span>
+    <span class="c1">//允许接受任意版本的微服务实例作为Provider,未来我们会使用此(设置版本)能力实现灰度发布</span>
+    <span class="n">edgeInvocation</span><span class="o">.</span><span class="na">setVersionRule</span><span class="o">(</span><span class="n">DefinitionConst</span><span class="o">.</span><span class="na">VERSION_RULE_ALL</span><span class="o">);</span>
+    <span class="n">edgeInvocation</span><span class="o">.</span><span class="na">init</span><span class="o">(</span><span class="n">serviceName</span><span class="o">,</span> <span class="n">context</span><span class="o">,</span> <span class="n">path</span><span class="o">,</span> <span class="n">httpServerFilters</span><span class="o">);</span>
+    <span class="n">edgeInvocation</span><span class="o">.</span><span class="na">edgeInvoke</span><span class="o">();</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<h5 id="第三步加载调度器dispatcher">第三步:加载调度器Dispatcher</h5>
+<p>ServiceComb Edge使用SPI(Service Provider Interface)的方式加载已经编写好的调度器Dispatcher,在resources目录下创建<code class="highlighter-rouge">META-INF.services/org.apache.servicecomb.transport.rest.vertx.VertxHttpDispatcher</code>配置文件,写入上一步EdgeDispatcher的类全名:</p>
+
+<div class="language-text highlighter-rouge"><pre class="highlight"><code>{EdgeDispatcher的包名}.EdgeDispatcher
+</code></pre>
+</div>
+
+<h5 id="第四步配置microserviceyaml">第四步:配置microservice.yaml</h5>
+<p>边缘服务本身也是一个微服务,同样需要配置microservice.yaml:</p>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">APPLICATION_ID</span><span class="pi">:</span> <span class="s">scaffold</span>
+<span class="s">service_description</span><span class="pi">:</span>
+  <span class="s">name</span><span class="pi">:</span> <span class="s">edge-service</span>
+  <span class="s">version</span><span class="pi">:</span> <span class="s">0.0.1</span>
+<span class="s">servicecomb</span><span class="pi">:</span>
+  <span class="s">service</span><span class="pi">:</span>
+    <span class="s">registry</span><span class="pi">:</span>
+      <span class="c1">#配置ServiceCenter使得Edge能够发现其他微服务</span>
+      <span class="s">address</span><span class="pi">:</span> <span class="s">http://127.0.0.1:30100</span>
+  <span class="c1">#配置Rest Endpoint</span>
+  <span class="s">rest</span><span class="pi">:</span>
+    <span class="s">address</span><span class="pi">:</span> <span class="s">0.0.0.0:9090</span>
+
+<span class="c1">#自定义的简称机制配置(这是我们自行扩展实现的)</span>
+<span class="s">edge</span><span class="pi">:</span>
+  <span class="s">routing-short-path</span><span class="pi">:</span>
+    <span class="s">user</span><span class="pi">:</span> <span class="s">user-service</span>
+</code></pre>
+</div>
+
+<blockquote>
+  <p>提示:</p>
+  <ol>
+    <li>除了配置Rest Endpoint,我们也支持配置Highway Endpoint,但Highway Endpoint只支持ServiceComb开发的微服务调用;</li>
+    <li>microservice.yaml中没有配置Handler,Edge支持所有Consumer端Handler,不支持Producer端Handler,调用链原理如下:</li>
+  </ol>
+
+  <p><img src="/assets/images/scaffold/EdgeOnlySupportConsumerHandler.png" alt="EdgeOnlySupportConsumerHandler" /></p>
+
+</blockquote>
+
+<h2 id="54-验证边缘服务">5.4 验证边缘服务</h2>
+<p>启动用户微服务和Edge服务,使用<a href="https://www.getpostman.com/">Postman</a>注册一个用户:</p>
+
+<p><img src="/assets/images/scaffold/LogonViaEdge.png" alt="LogonViaEdge" /></p>
+
+<p>成功,现在我们使用新注册的用户名<code class="highlighter-rouge">ldg</code>登录:</p>
+
+<p><img src="/assets/images/scaffold/LoginViaEdge.png" alt="LoginViaEdge" /></p>
+
+<p>同样成功,并在Response中已经包含了正确的<code class="highlighter-rouge">AUTHORIZATION</code>Header。</p>
+
+<h2 id="55-性能比拼">5.5 性能比拼</h2>
+<p>ServiceComb Java Chassis也支持集成Netflix Zuul作为网关服务,我们做了一次性能比较,使用ServiceComb Edge作为网关吞吐能力大幅优于Netflix Zuul,性能测试项目源代码在<a href="https://github.com/zhengyangyong/gateway-perf">这里</a>。</p>
+
+<h1 id="6-扩展边缘服务支持统一认证">6 扩展边缘服务支持统一认证</h1>
+<h2 id="61-设计思路">6.1 设计思路</h2>
+<p>正如前面提到的,统一认证的目的是在Edge入口处进行访问认证,避免需要在所有的微服务中都承载重复的认证机制,因此:</p>
+<ol>
+  <li>我们先要将认证功能作为一个独立的Procuder发布出来,使Edge服务能够随时认证Token,我们将其命名为<code class="highlighter-rouge">AuthenticationService</code>,放在用户服务中;</li>
+  <li>将无需认证的访问请求识别出来,包括:</li>
+</ol>
+
+<table>
+  <thead>
+    <tr>
+      <th style="text-align: left">功能</th>
+      <th style="text-align: left">描述</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td style="text-align: left">login</td>
+      <td style="text-align: left">登录验证,通过后为用户生成Token</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">logon</td>
+      <td style="text-align: left">新用户注册</td>
+    </tr>
+  </tbody>
+</table>
+
+<p>除此之外其他业务请求都需要做Token认证;</p>
+
+<ol>
+  <li>Edge服务转发访问请求之前,对需要认证的请求先做统一认证,认证通过之后才转发,我们使用<code class="highlighter-rouge">HttpServerFilter</code>扩展这个能力:</li>
+</ol>
+
+<p><img src="/assets/images/scaffold/FilterChain.png" alt="FilterChain" /></p>
+
+<p>统一认证流程时序图为:</p>
+
+<p><img src="/assets/images/scaffold/EdgeAuth.png" alt="EdgeAuth" /></p>
+
+<h2 id="62-实现统一认证">6.2 实现统一认证</h2>
+<h5 id="第一步发布认证服务">第一步:发布认证服务</h5>
+<h6 id="定义authenticationservice">定义AuthenticationService</h6>
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">interface</span> <span class="nc">AuthenticationService</span> <span class="o">{</span>
+  <span class="n">String</span> <span class="nf">validate</span><span class="o">(</span><span class="n">String</span> <span class="n">token</span><span class="o">);</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+<h6 id="实现并发布authenticationservice">实现并发布AuthenticationService</h6>
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@RestSchema</span><span class="o">(</span><span class="n">schemaId</span> <span class="o">=</span> <span class="s">"authentication"</span><span class="o">)</span>
+<span class="nd">@RequestMapping</span><span class="o">(</span><span class="n">path</span> <span class="o">=</span> <span class="s">"/"</span><span class="o">)</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">AuthenticationServiceImpl</span> <span class="kd">implements</span> <span class="n">AuthenticationService</span> <span class="o">{</span>
+
+  <span class="kd">private</span> <span class="kd">final</span> <span class="n">TokenStore</span> <span class="n">tokenStore</span><span class="o">;</span>
+
+  <span class="nd">@Autowired</span>
+  <span class="kd">public</span> <span class="nf">AuthenticationServiceImpl</span><span class="o">(</span><span class="n">TokenStore</span> <span class="n">tokenStore</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">this</span><span class="o">.</span><span class="na">tokenStore</span> <span class="o">=</span> <span class="n">tokenStore</span><span class="o">;</span>
+  <span class="o">}</span>
+
+  <span class="nd">@Override</span>
+  <span class="nd">@GetMapping</span><span class="o">(</span><span class="n">path</span> <span class="o">=</span> <span class="s">"validate"</span><span class="o">)</span>
+  <span class="kd">public</span> <span class="n">String</span> <span class="nf">validate</span><span class="o">(</span><span class="n">String</span> <span class="n">token</span><span class="o">)</span> <span class="o">{</span>
+    <span class="n">String</span> <span class="n">userName</span> <span class="o">=</span> <span class="n">tokenStore</span><span class="o">.</span><span class="na">validate</span><span class="o">(</span><span class="n">token</span><span class="o">);</span>
+    <span class="k">if</span> <span class="o">(</span><span class="n">userName</span> <span class="o">==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
+      <span class="k">throw</span> <span class="k">new</span> <span class="nf">InvocationException</span><span class="o">(</span><span class="n">BAD_REQUEST</span><span class="o">,</span> <span class="s">"incorrect token"</span><span class="o">);</span>
+    <span class="o">}</span>
+    <span class="k">return</span> <span class="n">userName</span><span class="o">;</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<h5 id="第二步实现统一认证authenticationfilter">第二步:实现统一认证AuthenticationFilter</h5>
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">class</span> <span class="nc">AuthenticationFilter</span> <span class="kd">implements</span> <span class="n">HttpServerFilter</span> <span class="o">{</span>
+
+  <span class="kd">private</span> <span class="kd">final</span> <span class="n">RestTemplate</span> <span class="n">template</span> <span class="o">=</span> <span class="n">RestTemplateBuilder</span><span class="o">.</span><span class="na">create</span><span class="o">();</span>
+
+  <span class="kd">private</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">USER_SERVICE_NAME</span> <span class="o">=</span> <span class="s">"user-service"</span><span class="o">;</span>
+
+  <span class="kd">public</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">EDGE_AUTHENTICATION_NAME</span> <span class="o">=</span> <span class="s">"edge-authentication-name"</span><span class="o">;</span>
+
+  <span class="kd">private</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">Set</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span> <span class="n">NOT_REQUIRED_VERIFICATION_USER_SERVICE_METHODS</span> <span class="o">=</span> <span class="k">new</span> <span class="n">HashSet</span><span class="o">&lt;&gt;(</span>
+      <span class="n">Arrays</span><span class="o">.</span><span class="na">asList</span><span class="o">(</span><span class="s">"login"</span><span class="o">,</span> <span class="s">"logon"</span><span class="o">,</span> <span class="s">"validate"</span><span class="o">));</span>
+
+  <span class="nd">@Override</span>
+  <span class="kd">public</span> <span class="kt">int</span> <span class="nf">getOrder</span><span class="o">()</span> <span class="o">{</span>
+    <span class="k">return</span> <span class="mi">0</span><span class="o">;</span>
+  <span class="o">}</span>
+
+  <span class="nd">@Override</span>
+  <span class="kd">public</span> <span class="n">Response</span> <span class="nf">afterReceiveRequest</span><span class="o">(</span><span class="n">Invocation</span> <span class="n">invocation</span><span class="o">,</span> <span class="n">HttpServletRequestEx</span> <span class="n">httpServletRequestEx</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">if</span> <span class="o">(</span><span class="n">isInvocationNeedValidate</span><span class="o">(</span><span class="n">invocation</span><span class="o">.</span><span class="na">getMicroserviceName</span><span class="o">(),</span> <span class="n">invocation</span><span class="o">.</span><span class="na">getOperationName</span><span class="o">()))</span> <span class="o">{</span>
+      <span class="n">String</span> <span class="n">token</span> <span class="o">=</span> <span class="n">httpServletRequestEx</span><span class="o">.</span><span class="na">getHeader</span><span class="o">(</span><span class="n">AUTHORIZATION</span><span class="o">);</span>
+      <span class="k">if</span> <span class="o">(</span><span class="n">StringUtils</span><span class="o">.</span><span class="na">isNotEmpty</span><span class="o">(</span><span class="n">token</span><span class="o">))</span> <span class="o">{</span>
+        <span class="n">String</span> <span class="n">userName</span> <span class="o">=</span> <span class="n">template</span>
+            <span class="o">.</span><span class="na">getForObject</span><span class="o">(</span><span class="s">"cse://"</span> <span class="o">+</span> <span class="n">USER_SERVICE_NAME</span> <span class="o">+</span> <span class="s">"/validate?token={token}"</span><span class="o">,</span> <span class="n">String</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">token</span><span class="o">);</span>
+        <span class="k">if</span> <span class="o">(</span><span class="n">StringUtils</span><span class="o">.</span><span class="na">isNotEmpty</span><span class="o">(</span><span class="n">userName</span><span class="o">))</span> <span class="o">{</span>
+          <span class="c1">//Add header</span>
+          <span class="n">invocation</span><span class="o">.</span><span class="na">getContext</span><span class="o">().</span><span class="na">put</span><span class="o">(</span><span class="n">EDGE_AUTHENTICATION_NAME</span><span class="o">,</span> <span class="n">userName</span><span class="o">);</span>
+        <span class="o">}</span> <span class="k">else</span> <span class="o">{</span>
+          <span class="k">return</span> <span class="n">Response</span>
+              <span class="o">.</span><span class="na">failResp</span><span class="o">(</span><span class="k">new</span> <span class="n">InvocationException</span><span class="o">(</span><span class="n">Status</span><span class="o">.</span><span class="na">UNAUTHORIZED</span><span class="o">,</span> <span class="s">"authentication failed, invalid token"</span><span class="o">));</span>
+        <span class="o">}</span>
+      <span class="o">}</span> <span class="k">else</span> <span class="o">{</span>
+        <span class="k">return</span> <span class="n">Response</span><span class="o">.</span><span class="na">failResp</span><span class="o">(</span>
+            <span class="k">new</span> <span class="nf">InvocationException</span><span class="o">(</span><span class="n">Status</span><span class="o">.</span><span class="na">UNAUTHORIZED</span><span class="o">,</span> <span class="s">"authentication failed, missing AUTHORIZATION header"</span><span class="o">));</span>
+      <span class="o">}</span>
+    <span class="o">}</span>
+    <span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
+  <span class="o">}</span>
+
+  <span class="kd">private</span> <span class="kt">boolean</span> <span class="nf">isInvocationNeedValidate</span><span class="o">(</span><span class="n">String</span> <span class="n">serviceName</span><span class="o">,</span> <span class="n">String</span> <span class="n">operationPath</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">if</span> <span class="o">(</span><span class="n">USER_SERVICE_NAME</span><span class="o">.</span><span class="na">equals</span><span class="o">(</span><span class="n">serviceName</span><span class="o">))</span> <span class="o">{</span>
+      <span class="k">for</span> <span class="o">(</span><span class="n">String</span> <span class="n">method</span> <span class="o">:</span> <span class="n">NOT_REQUIRED_VERIFICATION_USER_SERVICE_METHODS</span><span class="o">)</span> <span class="o">{</span>
+        <span class="k">if</span> <span class="o">(</span><span class="n">operationPath</span><span class="o">.</span><span class="na">startsWith</span><span class="o">(</span><span class="n">method</span><span class="o">))</span> <span class="o">{</span>
+          <span class="k">return</span> <span class="kc">false</span><span class="o">;</span>
+        <span class="o">}</span>
+      <span class="o">}</span>
+    <span class="o">}</span>
+    <span class="k">return</span> <span class="kc">true</span><span class="o">;</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<p>别忘了通过SPI机制加载它,在<code class="highlighter-rouge">resources\META-INF\services</code>目录中创建<code class="highlighter-rouge">org.apache.servicecomb.common.rest.filter.HttpServerFilter</code>文件:</p>
+<div class="language-text highlighter-rouge"><pre class="highlight"><code>org.apache.servicecomb.scaffold.edge.filter.AuthenticationFilter
+</code></pre>
+</div>
+
+<h5 id="第三步在用户微服务中增加修改密码的功能用于验证">第三步:在用户微服务中增加修改密码的功能用于验证</h5>
+<p>现有的<code class="highlighter-rouge">login</code>和<code class="highlighter-rouge">logon</code>都无需认证,因此我们在用户微服务中增加需要认证的修改密码的功能用于验证统一认证。</p>
+<h6 id="在userservice中添加修改密码">在UserService中添加修改密码</h6>
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">interface</span> <span class="nc">UserService</span> <span class="o">{</span>
+  <span class="n">ResponseEntity</span><span class="o">&lt;</span><span class="n">Boolean</span><span class="o">&gt;</span> <span class="nf">logon</span><span class="o">(</span><span class="n">UserDTO</span> <span class="n">user</span><span class="o">);</span>
+
+  <span class="n">ResponseEntity</span><span class="o">&lt;</span><span class="n">Boolean</span><span class="o">&gt;</span> <span class="nf">login</span><span class="o">(</span><span class="n">UserDTO</span> <span class="n">user</span><span class="o">);</span>
+  <span class="c1">//需要认证的修改密码功能</span>
+  <span class="n">ResponseEntity</span><span class="o">&lt;</span><span class="n">Boolean</span><span class="o">&gt;</span> <span class="nf">changePassword</span><span class="o">(</span><span class="n">UserUpdateDTO</span> <span class="n">userUpdate</span><span class="o">);</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<h6 id="在userserviceimpl中实现修改密码">在UserServiceImpl中实现修改密码</h6>
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@Override</span>
+<span class="nd">@PostMapping</span><span class="o">(</span><span class="n">path</span> <span class="o">=</span> <span class="s">"changePassword"</span><span class="o">)</span>
+<span class="kd">public</span> <span class="n">ResponseEntity</span><span class="o">&lt;</span><span class="n">Boolean</span><span class="o">&gt;</span> <span class="nf">changePassword</span><span class="o">(</span><span class="nd">@RequestBody</span> <span class="n">UserUpdateDTO</span> <span class="n">userUpdate</span><span class="o">)</span> <span class="o">{</span>
+  <span class="k">if</span> <span class="o">(</span><span class="n">validateUserUpdate</span><span class="o">(</span><span class="n">userUpdate</span><span class="o">))</span> <span class="o">{</span>
+    <span class="n">UserEntity</span> <span class="n">dbUser</span> <span class="o">=</span> <span class="n">repository</span><span class="o">.</span><span class="na">findByName</span><span class="o">(</span><span class="n">userUpdate</span><span class="o">.</span><span class="na">getName</span><span class="o">());</span>
+    <span class="k">if</span> <span class="o">(</span><span class="n">dbUser</span> <span class="o">!=</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
+      <span class="k">if</span> <span class="o">(</span><span class="n">dbUser</span><span class="o">.</span><span class="na">getPassword</span><span class="o">().</span><span class="na">equals</span><span class="o">(</span><span class="n">userUpdate</span><span class="o">.</span><span class="na">getOldPassword</span><span class="o">()))</span> <span class="o">{</span>
+        <span class="n">dbUser</span><span class="o">.</span><span class="na">setPassword</span><span class="o">(</span><span class="n">userUpdate</span><span class="o">.</span><span class="na">getNewPassword</span><span class="o">());</span>
+        <span class="n">repository</span><span class="o">.</span><span class="na">save</span><span class="o">(</span><span class="n">dbUser</span><span class="o">);</span>
+        <span class="k">return</span> <span class="k">new</span> <span class="n">ResponseEntity</span><span class="o">&lt;&gt;(</span><span class="kc">true</span><span class="o">,</span> <span class="n">HttpStatus</span><span class="o">.</span><span class="na">OK</span><span class="o">);</span>
+      <span class="o">}</span>
+      <span class="k">throw</span> <span class="k">new</span> <span class="nf">InvocationException</span><span class="o">(</span><span class="n">BAD_REQUEST</span><span class="o">,</span> <span class="s">"wrong password"</span><span class="o">);</span>
+    <span class="o">}</span>
+    <span class="k">throw</span> <span class="k">new</span> <span class="nf">InvocationException</span><span class="o">(</span><span class="n">BAD_REQUEST</span><span class="o">,</span> <span class="s">"user name not exist"</span><span class="o">);</span>
+  <span class="o">}</span>
+  <span class="k">throw</span> <span class="k">new</span> <span class="nf">InvocationException</span><span class="o">(</span><span class="n">BAD_REQUEST</span><span class="o">,</span> <span class="s">"incorrect user"</span><span class="o">);</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<h2 id="63-验证实现的统一认证">6.3 验证实现的统一认证</h2>
+<h5 id="确认authenticationfilter在edge服务中成功加载">确认AuthenticationFilter在Edge服务中成功加载</h5>
+<p>在Edge服务的启动日志中能够找到:</p>
+<div class="language-text highlighter-rouge"><pre class="highlight"><code>2018-07-13 14:38:48,756 [INFO]   1. org.apache.servicecomb.scaffold.edge.filter.AuthenticationFilter. org.apache.servicecomb.foundation.common.utils.SPIServiceUtils.loadSortedService(SPIServiceUtils.java:79)
+</code></pre>
+</div>
+
+<h5 id="用户登录">用户登录</h5>
+<p>使用zhengyangyong登录:</p>
+
+<p><img src="/assets/images/scaffold/LoginFirst.png" alt="LoginFirst" /></p>
+
+<p>拿到的Token值为:eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ6aGVuZ3lhbmd5b25nIiwiZXhwIjoxNTMwNjA4OTczfQ.90teWUNbypPZvds_SD7Kus_y7wLc4b6VzC_aIVg8sLItKxwQ0g4V9BDU665PlqQY5KM-mnk8y0R6ENL1T8YVFg</p>
+
+<h5 id="不带authorization-header请求changepassword">不带Authorization Header请求changePassword</h5>
+
+<p><img src="/assets/images/scaffold/NoAuthHeader.png" alt="NoAuthHeader" /></p>
+
+<p>返回的失败信息是:authentication failed, missing AUTHORIZATION header</p>
+
+<h5 id="使用错误的token请求changepassword">使用错误的Token请求changePassword</h5>
+
+<p><img src="/assets/images/scaffold/ErrorAuthHeader.png" alt="ErrorAuthHeader" /></p>
+
+<p>返回的失败信息是:authentication failed : InvocationException: code=400;msg=CommonExceptionData [message=incorrect token]</p>
+
+<h5 id="使用正确的token请求changepassword">使用正确的Token请求changePassword</h5>
+
+<p><img src="/assets/images/scaffold/AuthSuccess.png" alt="AuthSuccess" /></p>
+
+<p>修改密码成功。</p>
+
+<p><strong>这里可能有疑问,使用zhengyangyong登录后,是可以通过这个Token修改其他用户例如lidagang的密码的,这是因为我们目前构建的validate仅检查Token的有效性,而不做权限检查,基于RBAC的角色权限管理系统将会在未来构建。</strong></p>
+
+<blockquote>
+  <p>提示:</p>
+  <ol>
+    <li>AuthenticationFilter的完整<a href="https://github.com/zhengyangyong/scaffold/blob/master/edge-service/src/main/java/org/apache/servicecomb/scaffold/edge/filter/AuthenticationFilter.java">代码</a>;</li>
+    <li>HttpServerFilter的<a href="https://github.com/apache/incubator-servicecomb-docs/blob/master/java-chassis-reference/zh_CN/general-development/http-filter.md">介绍</a>。</li>
+  </ol>
+</blockquote>
+
+<h1 id="7小结">7.小结</h1>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>本文详细介绍了如何使用http://start.servicecomb.io脚手架快速构建微服务项目、使用领域驱动设计(Domain-Driven Design,DDD)设计地产CRM系统、使用Edge Service构建统一认证边缘服务等内容。至此,一个地产客户关系管理系统的骨架已经初步搭建起来,剩下的模块,我们将在接下来的文章里详细介绍。
+</code></pre>
+</div>
+
 
         
       </section>
@@ -721,11 +1193,19 @@
     
       
       
-      <a href="/tags/#archetypes" class="page__taxonomy-item" rel="tag">Archetypes</a><span class="sep">, </span>
+      <a href="/tags/#crm" class="page__taxonomy-item" rel="tag">CRM</a><span class="sep">, </span>
     
       
       
-      <a href="/tags/#authentication" class="page__taxonomy-item" rel="tag">Authentication</a><span class="sep">, </span>
+      <a href="/tags/#ddd" class="page__taxonomy-item" rel="tag">DDD</a><span class="sep">, </span>
+    
+      
+      
+      <a href="/tags/#edge" class="page__taxonomy-item" rel="tag">Edge</a><span class="sep">, </span>
+    
+      
+      
+      <a href="/tags/#jpa" class="page__taxonomy-item" rel="tag">JPA</a><span class="sep">, </span>
     
       
       
@@ -745,7 +1225,7 @@
         
           
             
-              <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> 最新的:</strong> <time datetime="2018-05-23">2018年5月23日</time></p>
+              <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> 最新的:</strong> <time datetime="2018-08-28">2018年8月28日</time></p>
             
           
         
@@ -756,25 +1236,24 @@
     <h4 class="page__share-title">分享</h4>
   
 
-  <a href="https://twitter.com/intent/tweet?via=ServiceComb&text=轻松微服务系列:快速实现客户关系管理系统的用户服务 /cn/docs/easy-build-microservice-system-part-II/" class="btn btn--twitter" title="分享 Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
+  <a href="https://twitter.com/intent/tweet?via=ServiceComb&text=客户管理系统微服务化实战-PartI /cn/docs/crm-part-I/" class="btn btn--twitter" title="分享 Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
 
-  <a href="https://www.facebook.com/sharer/sharer.php?u=/cn/docs/easy-build-microservice-system-part-II/" class="btn btn--facebook" title="分享 Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
+  <a href="https://www.facebook.com/sharer/sharer.php?u=/cn/docs/crm-part-I/" class="btn btn--facebook" title="分享 Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
 
-  <a href="https://plus.google.com/share?url=/cn/docs/easy-build-microservice-system-part-II/" class="btn btn--google-plus" title="分享 Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
+  <a href="https://plus.google.com/share?url=/cn/docs/crm-part-I/" class="btn btn--google-plus" title="分享 Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
 
-  <a href="https://www.linkedin.com/shareArticle?mini=true&url=/cn/docs/easy-build-microservice-system-part-II/" class="btn btn--linkedin" title="分享 LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
+  <a href="https://www.linkedin.com/shareArticle?mini=true&url=/cn/docs/crm-part-I/" class="btn btn--linkedin" title="分享 LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
 </section>
 
 
       
   <nav class="pagination">
     
-      <a href="/cn/docs/easy-build-microservice-system-part-I/" class="pagination--pager" title="轻松微服务系列:从一键构建微服务和DDD设计开始
+      <a href="/docs/release-note-1-0-0/" class="pagination--pager" title="[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 ">向前</a>
     
     
-      <a href="/cn/docs/how-to-grow-up-to-be-an-apache-committer/" class="pagination--pager" title="如何从一名开源小白成长为Apache Committer
-">向后</a>
+      <a href="#" class="pagination--pager disabled">向后</a>
     
   </nav>
 
@@ -820,7 +1299,7 @@
             <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
           </fieldset>
           <fieldset class="hidden" style="display: none;">
-            <input type="hidden" name="options[slug]" value="easy-build-microservice-system-part-II">
+            <input type="hidden" name="options[slug]" value="crm-part-I">
             <label for="comment-form-location">Not used. Leave blank if you are a human.</label>
             <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
           </fieldset>
@@ -927,7 +1406,7 @@
 
 
 
-  1 分钟 阅读
+  少于 1 分钟 阅读
 
 </p>
     
@@ -944,11 +1423,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/docs/apache-servicecomb-incubating-day-report/" rel="permalink">Apache ServiceComb (incubating) Day Report
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) Day Report
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -956,7 +1435,7 @@
 
 
 
-  1 分钟 阅读
+  少于 1 分钟 阅读
 
 </p>
     
@@ -1016,8 +1495,8 @@
     <div class="col">
       <ul>
         <p class="header">贡献</p>
-        <li><a href="https://github.com/apache/incubator-servicecomb-website/issues/new?title=Issue with _posts/cn/2018-05-23-easy-build-microservice-system-part-II.md">报告本网页问题</a></li>
-        <li><a href="https://github.com/apache/incubator-servicecomb-website/edit/master/_posts/cn/2018-05-23-easy-build-microservice-system-part-II.md">在Github上编辑此页</a></li>
+        <li><a href="https://github.com/apache/incubator-servicecomb-website/issues/new?title=Issue with _posts/cn/2018-08-28-crm-part-I.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/apache/incubator-servicecomb-website/edit/master/_posts/cn/2018-08-28-crm-part-I.md">在Github上编辑此页</a></li>
         <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
         <li><a href="/cn/security">安全</a></li>
       </ul>
diff --git a/content/cn/docs/distributed-transactions-saga-implementation/index.html b/content/cn/docs/distributed-transactions-saga-implementation/index.html
index a1f5eba..cda8949 100644
--- a/content/cn/docs/distributed-transactions-saga-implementation/index.html
+++ b/content/cn/docs/distributed-transactions-saga-implementation/index.html
@@ -724,11 +724,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -736,7 +736,7 @@
 
 
 
-  4 分钟 阅读
+  6 分钟 阅读
 
 </p>
     
@@ -753,11 +753,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -765,7 +765,7 @@
 
 
 
-  少于 1 分钟 阅读
+  4 分钟 阅读
 
 </p>
     
@@ -782,11 +782,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -794,7 +794,7 @@
 
 
 
-  1 分钟 阅读
+  少于 1 分钟 阅读
 
 </p>
     
@@ -811,11 +811,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/cn/docs/distributed_saga_1/index.html b/content/cn/docs/distributed_saga_1/index.html
index 95f6e85..3af50ff 100644
--- a/content/cn/docs/distributed_saga_1/index.html
+++ b/content/cn/docs/distributed_saga_1/index.html
@@ -642,11 +642,11 @@ Caitie McCaffrey也在她的<a href="https://www.youtube.com/watch?v=xDuwrtwYHu8
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -654,7 +654,7 @@ Caitie McCaffrey也在她的<a href="https://www.youtube.com/watch?v=xDuwrtwYHu8
 
 
 
-  4 分钟 阅读
+  6 分钟 阅读
 
 </p>
     
@@ -671,11 +671,11 @@ Caitie McCaffrey也在她的<a href="https://www.youtube.com/watch?v=xDuwrtwYHu8
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -683,7 +683,7 @@ Caitie McCaffrey也在她的<a href="https://www.youtube.com/watch?v=xDuwrtwYHu8
 
 
 
-  少于 1 分钟 阅读
+  4 分钟 阅读
 
 </p>
     
@@ -700,11 +700,11 @@ Caitie McCaffrey也在她的<a href="https://www.youtube.com/watch?v=xDuwrtwYHu8
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -712,7 +712,7 @@ Caitie McCaffrey也在她的<a href="https://www.youtube.com/watch?v=xDuwrtwYHu8
 
 
 
-  1 分钟 阅读
+  少于 1 分钟 阅读
 
 </p>
     
@@ -729,11 +729,11 @@ Caitie McCaffrey也在她的<a href="https://www.youtube.com/watch?v=xDuwrtwYHu8
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/cn/docs/distributed_saga_2/index.html b/content/cn/docs/distributed_saga_2/index.html
index 48209c5..fd33692 100644
--- a/content/cn/docs/distributed_saga_2/index.html
+++ b/content/cn/docs/distributed_saga_2/index.html
@@ -618,11 +618,11 @@ Caitie McCaffrey在她的演讲<a href="https://www.youtube.com/watch?v=1H6tounp
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -630,7 +630,7 @@ Caitie McCaffrey在她的演讲<a href="https://www.youtube.com/watch?v=1H6tounp
 
 
 
-  4 分钟 阅读
+  6 分钟 阅读
 
 </p>
     
@@ -647,11 +647,11 @@ Caitie McCaffrey在她的演讲<a href="https://www.youtube.com/watch?v=1H6tounp
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -659,7 +659,7 @@ Caitie McCaffrey在她的演讲<a href="https://www.youtube.com/watch?v=1H6tounp
 
 
 
-  少于 1 分钟 阅读
+  4 分钟 阅读
 
 </p>
     
@@ -676,11 +676,11 @@ Caitie McCaffrey在她的演讲<a href="https://www.youtube.com/watch?v=1H6tounp
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -688,7 +688,7 @@ Caitie McCaffrey在她的演讲<a href="https://www.youtube.com/watch?v=1H6tounp
 
 
 
-  1 分钟 阅读
+  少于 1 分钟 阅读
 
 </p>
     
@@ -705,11 +705,11 @@ Caitie McCaffrey在她的演讲<a href="https://www.youtube.com/watch?v=1H6tounp
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/cn/docs/distributed_saga_3/index.html b/content/cn/docs/distributed_saga_3/index.html
index 32c00c8..b7f2bf3 100644
--- a/content/cn/docs/distributed_saga_3/index.html
+++ b/content/cn/docs/distributed_saga_3/index.html
@@ -640,11 +640,11 @@ n个处于不确定状态的服务向其他n-1个服务咨询将产生<strong>O(
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -652,7 +652,7 @@ n个处于不确定状态的服务向其他n-1个服务咨询将产生<strong>O(
 
 
 
-  4 分钟 阅读
+  6 分钟 阅读
 
 </p>
     
@@ -669,11 +669,11 @@ n个处于不确定状态的服务向其他n-1个服务咨询将产生<strong>O(
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -681,7 +681,7 @@ n个处于不确定状态的服务向其他n-1个服务咨询将产生<strong>O(
 
 
 
-  少于 1 分钟 阅读
+  4 分钟 阅读
 
 </p>
     
@@ -698,11 +698,11 @@ n个处于不确定状态的服务向其他n-1个服务咨询将产生<strong>O(
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -710,7 +710,7 @@ n个处于不确定状态的服务向其他n-1个服务咨询将产生<strong>O(
 
 
 
-  1 分钟 阅读
+  少于 1 分钟 阅读
 
 </p>
     
@@ -727,11 +727,11 @@ n个处于不确定状态的服务向其他n-1个服务咨询将产生<strong>O(
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/cn/docs/easy-build-microservice-system-part-I/index.html b/content/cn/docs/easy-build-microservice-system-part-I/index.html
deleted file mode 100644
index 6338c27..0000000
--- a/content/cn/docs/easy-build-microservice-system-part-I/index.html
+++ /dev/null
@@ -1,938 +0,0 @@
-<!doctype html>
-<!--
-  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
-  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
-  Free for personal and commercial use under the MIT license
-  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
--->
-<html lang="cn" class="no-js">
-  <head>
-    <meta charset="utf-8">
-
-<!-- begin SEO -->
-
-
-
-
-
-
-
-
-
-<title>轻松微服务系列:从一键构建微服务和DDD设计开始 - Apache ServiceComb (incubating)</title>
-
-
-
-
-<meta name="description" content="轻松微服务系列:从一键构建微服务和DDD设计开始">
-
-
-
-
-<meta name="author" content="Yangyong Zheng">
-
-<meta property="og:locale" content="cn">
-<meta property="og:site_name" content="Apache ServiceComb (incubating)">
-<meta property="og:title" content="轻松微服务系列:从一键构建微服务和DDD设计开始">
-
-
-  <link rel="canonical" href="http://github.com/pages/apache/incubator-servicecomb-website/cn/docs/easy-build-microservice-system-part-I/">
-  <meta property="og:url" content="http://github.com/pages/apache/incubator-servicecomb-website/cn/docs/easy-build-microservice-system-part-I/">
-
-
-
-  <meta property="og:description" content="轻松微服务系列:从一键构建微服务和DDD设计开始">
-
-
-
-  <meta name="twitter:site" content="@ServiceComb">
-  <meta name="twitter:title" content="轻松微服务系列:从一键构建微服务和DDD设计开始">
-  <meta name="twitter:description" content="轻松微服务系列:从一键构建微服务和DDD设计开始">
-  <meta name="twitter:url" content="">
-
-  
-    <meta name="twitter:card" content="summary">
-    
-  
-
-  
-    <meta name="twitter:creator" content="@">
-  
-
-
-
-  
-
-  
-
-
-
-
-
-  <meta property="og:type" content="article">
-  <meta property="article:published_time" content="2018-05-17T00:00:00+08:00">
-
-
-
-
-
-
-
-
-  <script type="application/ld+json">
-    {
-      "@context" : "http://schema.org",
-      "@type" : "Person",
-      "name" : "Apache ServiceComb (incubating)",
-      "url" : "http://github.com/pages/apache/incubator-servicecomb-website",
-      "sameAs" : null
-    }
-  </script>
-
-
-
-  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
-
-
-
-
-<!-- end SEO -->
-
-
-<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache ServiceComb (incubating) Feed">
-
-<!-- http://t.co/dKP3o1e -->
-<meta name="HandheldFriendly" content="True">
-<meta name="MobileOptimized" content="320">
-<meta name="viewport" content="width=device-width, initial-scale=1.0">
-
-<script>
-  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
-</script>
-<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
-<script src="/assets/vendor/prism/prism.js"></script>
-
-<script type="text/javascript" async
-  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
-</script>
-
-<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
-
-<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
-<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
-<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
-<!-- For all browsers -->
-<link rel="stylesheet" href="/assets/css/main.css">
-<link rel="stylesheet" href="/assets/vendor/prism/prism.css">
-
-<!--[if lte IE 9]>
-  <style>
-    /* old IE unsupported flexbox fixes */
-    .greedy-nav .site-title {
-      padding-right: 3em;
-    }
-    .greedy-nav button {
-      position: absolute;
-      top: 0;
-      right: 0;
-      height: 100%;
-    }
-  </style>
-<![endif]-->
-
-<meta http-equiv="cleartype" content="on">
-
-    <!-- start custom head snippets -->
-
-<!-- insert favicons. use http://realfavicongenerator.net/ -->
-<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
-<script src="/assets/js/custom.js"></script>
-<!-- end custom head snippets -->
-
-  </head>
-
-  <body class="layout--single">
-
-    <!--[if lt IE 9]>
-<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
-<![endif]-->
-    <div class="masthead">
-  <div class="masthead__inner-wrap">
-    <div class="masthead__menu">
-      <nav id="site-nav" class="greedy-nav">
-	      
-          <a class="site-title active" href="/cn"><img src="/assets/images/ServiceComb-logo.png"></a>
-	      
-        <ul class="visible-links">
-          
-            
-            <li class="masthead__menu-item">
-              
-              
-              
-                <a href="/cn/docs/quick-start/">快速入门</a>
-              
-            </li>
-          
-            
-            <li class="masthead__menu-item">
-              
-              
-              
-                <a href="/cn/users/">用户手册</a>
-              
-            </li>
-          
-            
-            <li class="masthead__menu-item">
-              
-              
-              
-                <a href="/cn/developers/">开发者手册</a>
-              
-            </li>
-          
-            
-            <li class="masthead__menu-item">
-              
-              
-              
-                <a href="/cn/year-archive/">博文</a>
-              
-            </li>
-          
-            
-            <li class="masthead__menu-item">
-              
-              
-              
-                <a href="/cn/faqs/">常见问题</a>
-              
-            </li>
-          
-            
-            <li class="masthead__menu-item">
-              
-              
-              
-                <a href="/cn/release/">下载</a>
-              
-            </li>
-          
-        </ul>
-        <button><div class="navicon"></div></button>
-        <ul class="hidden-links hidden"></ul>
-        <div class="nav-lang">
-          
-            
-            
-            <a href=/docs/easy-build-microservice-system-part-I/>English</a>
-          
-        </div>
-      </nav>
-    </div>
-  </div>
-</div>
-
-
-    
-
-
-
-<div id="main" role="main">
-  
-  <div class="sidebar sticky">
-      
-      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
-      
-  
-
-<div itemscope itemtype="http://schema.org/Person">
-
-  
-
-  <div class="author__content">
-    <h3 class="author__name" itemprop="name">Yangyong Zheng</h3>
-    
-      <p class="author__bio" itemprop="description">
-	    
-	      
-	        Fast Action, do not ask
-	      
-	    
-      </p>
-    
-  </div>
-
-  <div class="author__urls-wrapper">
-    <button class="btn btn--inverse">关注</button>
-    <ul class="author__urls social-icons">
-      
-
-      
-        <li>
-          <a href="https://zhengyangyong.github.io" itemprop="url">
-            <i class="fa fa-fw fa-chain" aria-hidden="true"></i> 网站
-          </a>
-        </li>
-      
-
-      
-        <li>
-          <a href="mailto:yangyong.zheng@huawei.com">
-            <meta itemprop="email" content="yangyong.zheng@huawei.com" />
-            <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> 电子邮箱
-          </a>
-        </li>
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      <!--
-  <li>
-    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs">
-      <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link
-    </a>
-  </li>
--->
-    </ul>
-  </div>
-</div>
-
-  
-  </div>
-
-
-
-  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
-    <meta itemprop="headline" content="轻松微服务系列:从一键构建微服务和DDD设计开始">
-    <meta itemprop="description" content="轻松微服务系列:从一键构建微服务和DDD设计开始">
-    <meta itemprop="datePublished" content="May 17, 2018">
-    <meta itemprop="dateModified" content="May 17, 2018">
-
-    <div class="page__inner-wrap">
-      
-        
-          <header>
-            <h1 class="page__title" itemprop="headline">轻松微服务系列:从一键构建微服务和DDD设计开始
-</h1>
-            
-              <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
-
-
-
-
-  少于 1 分钟 阅读
-
-</p>
-            
-          </header>
-        
-      
-
-      <section class="page__content" itemprop="text">
-        <h2 id="轻松微服务系列从一键构建微服务和ddd设计开始">轻松微服务系列:从一键构建微服务和DDD设计开始</h2>
-<p>提到微服务,相信“程序猿”们已经不再陌生,估计大家都多少尝试过微服务框架,也遇到了不少“坑”直呼坑爹吧?其实微服务完全可以使用脚手架功能一键构建出来,开箱即用,而DDD(Domain-Driven Design),也是有章可循。这个“轻松微服务”系列,将为大家开启“轻松”愉快之旅。</p>
-
-<h3 id="牛刀小试">牛刀小试</h3>
-<p>打开命令行,输入下面的命令:</p>
-<div class="language-bash highlighter-rouge"><pre class="highlight"><code>mvn org.apache.maven.plugins:maven-archetype-plugin:2.4:generate -DarchetypeGroupId<span class="o">=</span>org.apache.servicecomb.archetypes -DarchetypeArtifactId<span class="o">=</span>business-service-jaxrs-archetype -DarchetypeVersion<span class="o">=</span>1.0.0-m2-SNAPSHOT -DarchetypeRepository<span class="o">=</span>https://repository.apache.org/content/groups/snapshots-group
-</code></pre>
-</div>
-
-<blockquote>
-  <p>提示:由于Java Chassis Archetypes还处于SNAPSHOT阶段,Repository托管在Apache Snapshots库中,仅用于测试,所以下载速度会稍慢。</p>
-</blockquote>
-
-<p>之后按提示指定微服务的<code class="highlighter-rouge">groupId</code>,<code class="highlighter-rouge">artifactId</code>,<code class="highlighter-rouge">version</code>,<code class="highlighter-rouge">package</code>等信息,回车,一个新的微服务就创建好了:</p>
-
-<p><img src="/assets/images/scaffold/ArchetypesCreate.png" alt="Archetypes创建" /></p>
-
-<p>运行它也很简单,使用IDE打开项目,DEBUG -&gt; Application.java,或在命令行:</p>
-
-<div class="language-bash highlighter-rouge"><pre class="highlight"><code><span class="c">#编译打包</span>
-mvn package
-<span class="c">#切换到输出目录</span>
-<span class="nb">cd </span>target
-<span class="c">#启动可执行jar包</span>
-java -jar xxxx.jar
-</code></pre>
-</div>
-
-<p>稍等微服务启动就绪,打开浏览器输入<code class="highlighter-rouge">http://localhost:8080/hello</code>验证一下:</p>
-
-<p><img src="/assets/images/scaffold/OutputHello.png" alt="输出hello" /></p>
-
-<p>是不是非常轻松呢?这份轻松来源我们使用Archetypes优化了构建过程,它是脚手架的基础。</p>
-
-<blockquote>
-  <p>提示:如果想了解更多Archetypes的原理,请参考<a href="https://maven.apache.org/archetype-archives/archetype-2.3/maven-archetype-plugin/">这篇文档</a>,希望理解命令行中使用到的参数,请参考<a href="https://maven.apache.org/archetype-archives/archetype-2.3/maven-archetype-plugin/generate-mojo.html">这篇文档</a>。</p>
-</blockquote>
-
-<h3 id="脚手架">脚手架</h3>
-<p>在建筑领域,脚手架是施工现场为方便工人操作并解决垂直和水平运输而搭设的各种支架以及平台。</p>
-
-<p><img src="/assets/images/scaffold/Scaffold.jpg" alt="scaffold" /></p>
-
-<p>在软件开发领域,它引申为预提供一些基础框架代码加速开发过程,避免从零开始构建项目。用户只需要依据需求场景选择合适的脚手架,然后填充定制的业务逻辑即可,不必再去处理一些基础功能,例如数据库连接、日志实现、RPC传输等。</p>
-
-<p>微服务框架一般都会提供脚手架功能,例如Spring,提供了Spring initializr:</p>
-
-<p><img src="/assets/images/scaffold/SpringInitializr.png" alt="SpringInitializr" /></p>
-
-<p>它集成了Spring Boot和Spring Cloud丰富的组件,创建出来的项目POM中将自动包含用户选中的依赖。</p>
-
-<p>ServiceComb Java Chassis提供的脚手架具备更明显的优势:</p>
-<ol>
-  <li>
-    <p>对每一种编程模型都提供了对应的<a href="https://github.com/apache/incubator-servicecomb-java-chassis/tree/master/archetypes">Archetypes项目</a>,包括SpringMVC、JAXRS、POJO和Spring Boot Starter;</p>
-  </li>
-  <li>
-    <p>生成的项目除了在POM中自动添加必要的依赖,还会提供Producer和Consumer示例代码(Hello World);</p>
-  </li>
-  <li>
-    <p>不久后会进一步提供<strong>Edge Server</strong>、<strong>Authcation Server</strong>等更贴近业务的脚手架项目,让用户能快速构建体系完整的微服务系统。</p>
-  </li>
-</ol>
-
-<p>前面牛刀小试中展示的一键构建微服务,正是基于它们:</p>
-
-<p><img src="/assets/images/scaffold/ArchetypeProjects.png" alt="ArchetypeProjects" /></p>
-
-<p>那么什么叫一个完整的微服务系统呢?我们可以拿一个具体的场景做例子,会更有感觉:</p>
-
-<h3 id="场景地产crm">场景:地产CRM</h3>
-<p>您经营着一家房地产开发商,销售房产,迫切需要一套销售系统,考虑到微服务的优势,您决定使用微服务的方式构建系统;主要的业务流程也非常简单:用户前来购买购买产品(房产),首先需要登记用户信息,并缴纳一定数量的定金,待交易当日,挑选心仪的产品(房产),支付尾款,完成交易。</p>
-
-<h4 id="使用ddd指导地产crm系统的设计">使用DDD指导地产CRM系统的设计</h4>
-<p>微服务系统的设计自然离不开DDD(Domain-Driven Design),它由Eric Evans提出,是一种全新的系统设计和建模方法,这里的模型指的就是领域模型(Domain Model)。领域模型通过聚合(Aggregate)组织在一起,聚合间有明显的业务边界,这些边界将领域划分为一个个限界上下文(Bounded Context)。Martin Fowler对它们都有详细的<a href="https://martinfowler.com/tags/domain%20driven%20design.html">解读</a>。</p>
-
-<p>理论概念都搞清楚了,那么怎么来找模型和聚合呢?一个非常流行的方法就是<a href="https://en.wikipedia.org/wiki/Event_storming">Event Storming</a>,它是由Alberto Brandolini发明,经历了DDD社区和很多团队的实践,也是一种非常有参与感的团队活动:</p>
-
-<p><img src="/assets/images/scaffold/EventStorming.png" alt="EventStorming" /></p>
-
-<p>上图就是我们对地产CRM这个场景使用Event Storming探索的结果,现在我们能够将限界上下文清晰的梳理出来:</p>
-
-<p><img src="/assets/images/scaffold/BoundedContext.png" alt="BoundedContext" /></p>
-
-<blockquote>
-  <p>提示:Event Storming是一项非常有创造性的活动,也是一个持续讨论和反复改进的过程,不同的团队关注的核心域(Core Domain)不同,得到的最终结果也会有差异。我们的目的是为了演示完整的微服务系统构建的过程,并不涉及商业核心竞争力方面的探讨,因此没有Core Domain和Sub Domain之类的偏重。</p>
-</blockquote>
-
-<h4 id="将分析成果转化为方案域设计">将分析成果转化为方案域设计</h4>
-<p>当我们完成所有的限界上下文的识别后,可以直接将它们落地为微服务:</p>
-
-<p><img src="/assets/images/scaffold/MicroserviceDesign1.png" alt="MicroserviceDesign1" /></p>
-
-<ol>
-  <li>用户服务:提供用户信息管理服务,这里保存这用户的账号和密码,负责登录和认证;</li>
-  <li>产品(房产)服务:提供产品管理服务,保存着房产的信息诸如价格、是否已售出等信息;</li>
-  <li>支付服务:提供交易时支付服务,模拟对接银行支付定金,以及购房时支付尾款;</li>
-</ol>
-
-<p>由于完成一笔交易是一个复杂的流程,与这三个微服务都有关联,因此我们引入了一个复合服务——交易服务:</p>
-
-<p><img src="/assets/images/scaffold/MicroserviceDesign2.png" alt="MicroserviceDesign2" /></p>
-
-<ol>
-  <li>交易服务:提供产品交易服务,它通过编排调用将整个交易流程串起来,交易服务中有两个流程:
-    <ul>
-      <li>定金支付</li>
-    </ul>
-
-    <p>Step1:通过用户服务验证用户身份;</p>
-
-    <p>Step2:通过支付服务请求银行扣款,增加定金账号内的定金;</p>
-  </li>
-</ol>
-
-<ul>
-  <li>
-    <p>购房交易</p>
-
-    <p>Step1:通过用户服务验证用户身份;</p>
-
-    <p>Step2:通过资源服务确定用户希望购买的资源(房产)尚未售出;</p>
-
-    <p>Step3:通过资源服务标记目标资源(房产)已售出;</p>
-
-    <p>Step4:通过支付服务请求扣减定金账号内的定金,以及银行扣剩下的尾款;</p>
-
-    <p>最后两个步骤需要保证事务一致性,其中Step4包含两个扣款操作。</p>
-  </li>
-</ul>
-
-<p>之后,我们引入Edge服务提供统一入口:</p>
-
-<p><img src="/assets/images/scaffold/MicroserviceDesign3.png" alt="MicroserviceDesign3" /></p>
-
-<ol>
-  <li>Edge服务:很多时候也被称为API网关(API Gateway),负责集中认证、动态路由等等;</li>
-</ol>
-
-<blockquote>
-  <p>提示:Edge服务需要依赖服务注册-发现机制,因此同时导入了ServiceCenter。</p>
-</blockquote>
-
-<p>最后还需要提供UI:</p>
-
-<p><img src="/assets/images/scaffold/MicroserviceDesign4.png" alt="MicroserviceDesign4" /></p>
-
-<ol>
-  <li>前端UI(同样以微服务方式提供):用户交互界面;</li>
-</ol>
-
-<p>至此,DDD设计地产CRM的工作就结束了,从下一篇文章开始,我们将和您一起轻松愉快的开启代码构建之旅,敬请期待!</p>
-
-        
-      </section>
-
-      <footer class="page__meta">
-        
-        
-  
-
-
-  
-  
-  
-
-  <p class="page__taxonomy">
-    <strong><i class="fa fa-fw fa-tags" aria-hidden="true"></i> 标签: </strong>
-    <span itemprop="keywords">
-    
-      
-      
-      <a href="/tags/#archetypes" class="page__taxonomy-item" rel="tag">Archetypes</a><span class="sep">, </span>
-    
-      
-      
-      <a href="/tags/#scaffold" class="page__taxonomy-item" rel="tag">Scaffold</a>
-    
-    </span>
-  </p>
-
-
-
-
-
-        
-          
-            
-              <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> 最新的:</strong> <time datetime="2018-05-17">2018年5月17日</time></p>
-            
-          
-        
-      </footer>
-
-      <section class="page__share">
-  
-    <h4 class="page__share-title">分享</h4>
-  
-
-  <a href="https://twitter.com/intent/tweet?via=ServiceComb&text=轻松微服务系列:从一键构建微服务和DDD设计开始 /cn/docs/easy-build-microservice-system-part-I/" class="btn btn--twitter" title="分享 Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
-
-  <a href="https://www.facebook.com/sharer/sharer.php?u=/cn/docs/easy-build-microservice-system-part-I/" class="btn btn--facebook" title="分享 Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
-
-  <a href="https://plus.google.com/share?url=/cn/docs/easy-build-microservice-system-part-I/" class="btn btn--google-plus" title="分享 Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
-
-  <a href="https://www.linkedin.com/shareArticle?mini=true&url=/cn/docs/easy-build-microservice-system-part-I/" class="btn btn--linkedin" title="分享 LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
-</section>
-
-
-      
-  <nav class="pagination">
-    
-      <a href="/cn/docs/saga_with_cucumber/" class="pagination--pager" title="ServiceComb Saga使用Cucumber做验收测试源码分析
-">向前</a>
-    
-    
-      <a href="/cn/docs/easy-build-microservice-system-part-II/" class="pagination--pager" title="轻松微服务系列:快速实现客户关系管理系统的用户服务
-">向后</a>
-    
-  </nav>
-
-
-    </div>
-
-    
-      <div class="page__comments">
-  
-  
-    <section id="static-comments">
-      
-        <!-- Start static comments -->
-        <div class="js-comments">
-          
-        </div>
-        <!-- End static comments -->
-
-        <!-- Start new comment form -->
-        <h4 class="page__comments-title">留下评论</h4>
-        <p class="small">您的电子邮箱地址并不会被展示。请填写标记为必须的字段。 <span class="required">*</span></p>
-        <form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/apache/incubator-servicecomb-website/master">
-          <div class="form__spinner">
-            <i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
-            <span class="sr-only">正在加载...</span>
-          </div>
-
-          <fieldset>
-            <label for="comment-form-message">评论 <small class="required">*</small></label>
-            <textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
-            <div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">Markdown语法已支持。</a></div>
-          </fieldset>
-          <fieldset>
-            <label for="comment-form-name">姓名 <small class="required">*</small></label>
-            <input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
-          </fieldset>
-          <fieldset>
-            <label for="comment-form-email">电子邮箱 <small class="required">*</small></label>
-            <input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
-          </fieldset>
-          <fieldset>
-            <label for="comment-form-url">网站(可选)</label>
-            <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
-          </fieldset>
-          <fieldset class="hidden" style="display: none;">
-            <input type="hidden" name="options[slug]" value="easy-build-microservice-system-part-I">
-            <label for="comment-form-location">Not used. Leave blank if you are a human.</label>
-            <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
-          </fieldset>
-          <!-- Start comment form alert messaging -->
-          <p class="hidden js-notice">
-            <strong class="js-notice-text"></strong>
-          </p>
-          <!-- End comment form alert messaging -->
-          <fieldset>
-            <button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--large">提交评论</button>
-          </fieldset>
-        </form>
-        <!-- End new comment form -->
-      
-    </section>
-  
-</div>
-
-    
-  </article>
-
-  
-  
-    <div class="page__related">
-      <h4 class="page__related-title">猜您还喜欢</h4>
-      <div class="grid__wrapper">
-        
-          
-
-
-
-<div class="grid__item">
-  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
-    
-    <h2 class="archive__item-title" itemprop="headline">
-      
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
-</a>
-      
-    </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
-</p>
-    
-      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
-
-
-
-
-  4 分钟 阅读
-
-</p>
-    
-  </article>
-</div>
-
-        
-          
-
-
-
-<div class="grid__item">
-  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
-    
-    <h2 class="archive__item-title" itemprop="headline">
-      
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
-</a>
-      
-    </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
-</p>
-    
-      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
-
-
-
-
-  少于 1 分钟 阅读
-
-</p>
-    
-  </article>
-</div>
-
-        
-          
-
-
-
-<div class="grid__item">
-  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
-    
-    <h2 class="archive__item-title" itemprop="headline">
-      
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
-</a>
-      
-    </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
-</p>
-    
-      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
-
-
-
-
-  1 分钟 阅读
-
-</p>
-    
-  </article>
-</div>
-
-        
-          
-
-
-
-<div class="grid__item">
-  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
-    
-    <h2 class="archive__item-title" itemprop="headline">
-      
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
-</a>
-      
-    </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
-</p>
-    
-      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
-
-
-
-
-  1 分钟 阅读
-
-</p>
-    
-  </article>
-</div>
-
-        
-      </div>
-    </div>
-  
-</div>
-
-
-    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
-    <div align="center" style="margin: 0 0;">
-    <ins class="adsbygoogle"
-         style="display:block; border-bottom: initial;"
-         data-ad-client="ca-pub-7328585512091257"
-         data-ad-slot="3049671934"
-         data-ad-format="auto"></ins>
-    </div>
-
-    <div class="page__footer">
-      <footer>
-        <!-- start custom footer snippets -->
-<div class="container">
-  <div class="row justify-content-md-center">
-    <div class="page__footer-bottom">
-      <p>Apache ServiceComb(incubating)is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indic [...]
-    </div>  
-  </div>
-</div>
-<!-- end custom footer snippets -->
-
-        <div class="container">
-  <div class="row justify-content-md-center">
-    
-    <div class="col">
-      <ul>
-        <p class="header">资源</p>
-        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
-        <li><a href="/cn/users/">用户指南</a></li>
-        <li><a href="/cn/slides/">资料</a></li>
-        <li><a href="/cn/users/faq/">常见问题</a></li>
-      </ul>
-    </div>
-    <div class="col">
-      <ul>
-        <p class="header">ASF</p>
-        <li><a href="http://www.apache.org">基金会</a></li>
-        <li><a href="http://www.apache.org/licenses/">许可证</a></li>
-        <li><a href="http://www.apache.org/events/current-event">活动</a></li>
-        <li><a href="http://www.apache.org/foundation/sponsorship.html">赞助</a></li>
-        <li><a href="http://www.apache.org/foundation/thanks.html">鸣谢</a></li>
-      </ul>
-    </div>
-    <div class="col">
-      <ul>
-        <p class="header">贡献</p>
-        <li><a href="https://github.com/apache/incubator-servicecomb-website/issues/new?title=Issue with _posts/cn/2018-05-17-easy-build-microservice-system-part-I.md">报告本网页问题</a></li>
-        <li><a href="https://github.com/apache/incubator-servicecomb-website/edit/master/_posts/cn/2018-05-17-easy-build-microservice-system-part-I.md">在Github上编辑此页</a></li>
-        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
-        <li><a href="/cn/security">安全</a></li>
-      </ul>
-    </div>
-    <div class="col">
-      <ul class="social-icons">
-        <p class="header">社区</p>
-        <li>
-            <a href="mailto:dev-subscribe@servicecomb.incubator.apache.org" rel="nofollow"><span class="mail">邮件列表</span></a>
-        </li>
-        <li>
-            <a href="https://github.com/apache?q=ServiceComb" target="_blank"><span class="github">Github</span></a>
-        </li>
-        <li>
-            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
-        </li>
-        <li>
-            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
-        </li>
-      </ul>
-    </div>
-  </div>
-</div>
-<div class="page__footer-bottom">
-  <div>&copy; 2018 Apache ServiceComb (incubating). 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
-  <div>All other marks mentioned may be trademarks or registered trademarks of their respective owners.</div>
-</div>
-
-      </footer>
-    </div>
-
-    <script src="/assets/js/main.min.js"></script>
-
-
-
-
-  <script>
-  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
-  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
-  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
-  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
-
-  ga('create', 'UA-101622733-1', 'auto');
-  ga('send', 'pageview');
-</script>
-
-
-
-
-
-
-
-  
-  <script>
-    (function ($) {
-    var $comments = $('.js-comments');
-
-    $('#new_comment').submit(function () {
-      var form = this;
-
-      $(form).addClass('disabled');
-      $('#comment-form-submit').html('<i class="fa fa-spinner fa-spin fa-fw"></i> 正在加载...');
-
-      $.ajax({
-        type: $(this).attr('method'),
-        url: $(this).attr('action'),
-        data: $(this).serialize(),
-        contentType: 'application/x-www-form-urlencoded',
-        success: function (data) {
-          $('#comment-form-submit').html('已提交');
-          $('.page__comments-form .js-notice').removeClass('notice--danger');
-          $('.page__comments-form .js-notice').addClass('notice--success');
-          showAlert('感谢您的评论!被批准后它会立即在此站点展示。');
-        },
-        error: function (err) {
-          console.log(err);
-          $('#comment-form-submit').html('提交评论');
-          $('.page__comments-form .js-notice').removeClass('notice--success');
-          $('.page__comments-form .js-notice').addClass('notice--danger');
-          showAlert('很抱歉,您的提交存在错误。请确保所有必填字段都已填写正确,然后再试一次。');
-          $(form).removeClass('disabled');
-        }
-      });
-
-      return false;
-    });
-
-    function showAlert(message) {
-      $('.page__comments-form .js-notice').removeClass('hidden');
-      $('.page__comments-form .js-notice-text').html(message);
-    }
-  })(jQuery);
-  </script>
-
-
-
-
-
-
-
-  </body>
-</html>
diff --git a/content/cn/docs/easy-build-microservice-system-part-III/index.html b/content/cn/docs/easy-build-microservice-system-part-III/index.html
deleted file mode 100644
index 998a0b0..0000000
--- a/content/cn/docs/easy-build-microservice-system-part-III/index.html
+++ /dev/null
@@ -1,947 +0,0 @@
-<!doctype html>
-<!--
-  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
-  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
-  Free for personal and commercial use under the MIT license
-  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
--->
-<html lang="cn" class="no-js">
-  <head>
-    <meta charset="utf-8">
-
-<!-- begin SEO -->
-
-
-
-
-
-
-
-
-
-<title>轻松微服务系列:开发高性能边缘服务 - Apache ServiceComb (incubating)</title>
-
-
-
-
-<meta name="description" content="轻松微服务系列:开发高性能边缘服务">
-
-
-
-
-<meta name="author" content="Yangyong Zheng">
-
-<meta property="og:locale" content="cn">
-<meta property="og:site_name" content="Apache ServiceComb (incubating)">
-<meta property="og:title" content="轻松微服务系列:开发高性能边缘服务">
-
-
-  <link rel="canonical" href="http://github.com/pages/apache/incubator-servicecomb-website/cn/docs/easy-build-microservice-system-part-III/">
-  <meta property="og:url" content="http://github.com/pages/apache/incubator-servicecomb-website/cn/docs/easy-build-microservice-system-part-III/">
-
-
-
-  <meta property="og:description" content="轻松微服务系列:开发高性能边缘服务">
-
-
-
-  <meta name="twitter:site" content="@ServiceComb">
-  <meta name="twitter:title" content="轻松微服务系列:开发高性能边缘服务">
-  <meta name="twitter:description" content="轻松微服务系列:开发高性能边缘服务">
-  <meta name="twitter:url" content="">
-
-  
-    <meta name="twitter:card" content="summary">
-    
-  
-
-  
-    <meta name="twitter:creator" content="@">
-  
-
-
-
-  
-
-  
-
-
-
-
-
-  <meta property="og:type" content="article">
-  <meta property="article:published_time" content="2018-06-07T00:00:00+08:00">
-
-
-
-
-
-
-
-
-  <script type="application/ld+json">
-    {
-      "@context" : "http://schema.org",
-      "@type" : "Person",
-      "name" : "Apache ServiceComb (incubating)",
-      "url" : "http://github.com/pages/apache/incubator-servicecomb-website",
-      "sameAs" : null
-    }
-  </script>
-
-
-
-  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
-
-
-
-
-<!-- end SEO -->
-
-
-<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache ServiceComb (incubating) Feed">
-
-<!-- http://t.co/dKP3o1e -->
-<meta name="HandheldFriendly" content="True">
-<meta name="MobileOptimized" content="320">
-<meta name="viewport" content="width=device-width, initial-scale=1.0">
-
-<script>
-  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
-</script>
-<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
-<script src="/assets/vendor/prism/prism.js"></script>
-
-<script type="text/javascript" async
-  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
-</script>
-
-<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
-
-<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
-<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
-<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
-<!-- For all browsers -->
-<link rel="stylesheet" href="/assets/css/main.css">
-<link rel="stylesheet" href="/assets/vendor/prism/prism.css">
-
-<!--[if lte IE 9]>
-  <style>
-    /* old IE unsupported flexbox fixes */
-    .greedy-nav .site-title {
-      padding-right: 3em;
-    }
-    .greedy-nav button {
-      position: absolute;
-      top: 0;
-      right: 0;
-      height: 100%;
-    }
-  </style>
-<![endif]-->
-
-<meta http-equiv="cleartype" content="on">
-
-    <!-- start custom head snippets -->
-
-<!-- insert favicons. use http://realfavicongenerator.net/ -->
-<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
-<script src="/assets/js/custom.js"></script>
-<!-- end custom head snippets -->
-
-  </head>
-
-  <body class="layout--single">
-
-    <!--[if lt IE 9]>
-<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
-<![endif]-->
-    <div class="masthead">
-  <div class="masthead__inner-wrap">
-    <div class="masthead__menu">
-      <nav id="site-nav" class="greedy-nav">
-	      
-          <a class="site-title active" href="/cn"><img src="/assets/images/ServiceComb-logo.png"></a>
-	      
-        <ul class="visible-links">
-          
-            
-            <li class="masthead__menu-item">
-              
-              
-              
-                <a href="/cn/docs/quick-start/">快速入门</a>
-              
-            </li>
-          
-            
-            <li class="masthead__menu-item">
-              
-              
-              
-                <a href="/cn/users/">用户手册</a>
-              
-            </li>
-          
-            
-            <li class="masthead__menu-item">
-              
-              
-              
-                <a href="/cn/developers/">开发者手册</a>
-              
-            </li>
-          
-            
-            <li class="masthead__menu-item">
-              
-              
-              
-                <a href="/cn/year-archive/">博文</a>
-              
-            </li>
-          
-            
-            <li class="masthead__menu-item">
-              
-              
-              
-                <a href="/cn/faqs/">常见问题</a>
-              
-            </li>
-          
-            
-            <li class="masthead__menu-item">
-              
-              
-              
-                <a href="/cn/release/">下载</a>
-              
-            </li>
-          
-        </ul>
-        <button><div class="navicon"></div></button>
-        <ul class="hidden-links hidden"></ul>
-        <div class="nav-lang">
-          
-            
-            
-            <a href=/docs/easy-build-microservice-system-part-III/>English</a>
-          
-        </div>
-      </nav>
-    </div>
-  </div>
-</div>
-
-
-    
-
-
-
-<div id="main" role="main">
-  
-  <div class="sidebar sticky">
-      
-      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
-      
-  
-
-<div itemscope itemtype="http://schema.org/Person">
-
-  
-
-  <div class="author__content">
-    <h3 class="author__name" itemprop="name">Yangyong Zheng</h3>
-    
-      <p class="author__bio" itemprop="description">
-	    
-	      
-	        Fast Action, do not ask
-	      
-	    
-      </p>
-    
-  </div>
-
-  <div class="author__urls-wrapper">
-    <button class="btn btn--inverse">关注</button>
-    <ul class="author__urls social-icons">
-      
-
-      
-        <li>
-          <a href="https://zhengyangyong.github.io" itemprop="url">
-            <i class="fa fa-fw fa-chain" aria-hidden="true"></i> 网站
-          </a>
-        </li>
-      
-
-      
-        <li>
-          <a href="mailto:yangyong.zheng@huawei.com">
-            <meta itemprop="email" content="yangyong.zheng@huawei.com" />
-            <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> 电子邮箱
-          </a>
-        </li>
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      <!--
-  <li>
-    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs">
-      <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link
-    </a>
-  </li>
--->
-    </ul>
-  </div>
-</div>
-
-  
-  </div>
-
-
-
-  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
-    <meta itemprop="headline" content="轻松微服务系列:开发高性能边缘服务">
-    <meta itemprop="description" content="轻松微服务系列:开发高性能边缘服务">
-    <meta itemprop="datePublished" content="June 07, 2018">
-    <meta itemprop="dateModified" content="June 07, 2018">
-
-    <div class="page__inner-wrap">
-      
-        
-          <header>
-            <h1 class="page__title" itemprop="headline">轻松微服务系列:开发高性能边缘服务
-</h1>
-            
-              <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
-
-
-
-
-  少于 1 分钟 阅读
-
-</p>
-            
-          </header>
-        
-      
-
-      <section class="page__content" itemprop="text">
-        <h2 id="轻松微服务系列开发高性能边缘服务">轻松微服务系列:开发高性能边缘服务</h2>
-<p>在前一篇博文<a href="http://servicecomb.incubator.apache.org/cn/docs/easy-build-microservice-system-part-II/">《轻松微服务系列:快速实现客户关系管理系统的用户服务》</a>,我们已经详细演示了从Archetype创建微服务后如何填充业务逻辑,快速构建包含JWT认证的用户服务。这篇博文我们将目光聚焦在Edge服务上,介绍如何构建高性能边缘服务应对高吞吐API网关的挑战。</p>
-
-<h3 id="什么是边缘服务edge-service">什么是边缘服务(Edge Service)</h3>
-<p>边缘服务也是一个微服务,微服务化系统通常使用边缘服务(Edge Service)作为所有其它微服务的统一入口,因此它也常常会被称为API Gateway,使用边缘服务的好处有如下几点:</p>
-<ul>
-  <li>动态路由:动态配置URL地址与微服务之间的对应关系,便于扩展,以及实现版本灰度发布等;</li>
-  <li>统一认证:在入口处进行访问认证,避免需要在所有的微服务中都承载重复的认证机制;</li>
-  <li>集中监控:与统一认证类似,在边缘服务对入口调用进行监控,容易统计流量信息。</li>
-</ul>
-
-<h3 id="边缘服务的作用和原理">边缘服务的作用和原理</h3>
-<p>我们先来看不使用边缘服务,UI直接调用用户服务的场景:</p>
-
-<p><img src="/assets/images/scaffold/DirectInvoke.png" alt="DirectInvoke" /></p>
-
-<p>可以看出这种调用方式,UI缺乏一定的灵活性,体现在:</p>
-<ul>
-  <li>UI的实现绑定了Chassis的编程语言Java,无法使用PHP等其它前端技术开发;</li>
-  <li>UI访问微服务的路径无法动态配置,如果作为后端的微服务系统发生调整,则UI很可能需要修改;</li>
-  <li>UI很容易混入复合(编排)调用的逻辑,使得结构变得复杂难以维护。</li>
-</ul>
-
-<p>我们再看引入边缘服务后,UI如何通过边缘服务调用用户服务:</p>
-
-<p><img src="/assets/images/scaffold/InvokeViaEdge.png" alt="InvokeViaEdge" /></p>
-
-<p>Edge服务将在<code class="highlighter-rouge">9090</code>端口上接受http rest调用,我们设计了下面的转发规则:</p>
-
-<div class="language-text highlighter-rouge"><pre class="highlight"><code>http://{edge-host-name}:9090/{ServiceComb微服务Name}/{服务路径&amp;参数}
-</code></pre>
-</div>
-
-<p>用户微服务名(<code class="highlighter-rouge">service_description.name</code>)是<code class="highlighter-rouge">user-service</code>,因此login调用URL:<em>cse://user-service/login</em>可以通过:<em>http://{edge-host-name}:9090/user-service/login</em> 访问。</p>
-
-<p>如此一来,微服务名成为了路径的一部分,http协议的<code class="highlighter-rouge">hostname</code>和<code class="highlighter-rouge">port</code>将固定指向Edge服务保持不变,灵活性大大增加了。</p>
-
-<p>到此我们还可以再做一点点改进,引入一个自定义配置<code class="highlighter-rouge">edge.routing-short-path.{简称}</code>,映射微服务名:</p>
-
-<div class="highlighter-rouge"><pre class="highlight"><code>edge:
-  routing-short-path:
-    user: user-service
-</code></pre>
-</div>
-
-<p>上面的配置代表:<em>http://{edge-host-name}:9090/user/login</em> 等效于:<em>http://{edge-host-name}:9090/user-service/login</em> ,如此一来:</p>
-<ol>
-  <li>URL能够更加简洁;</li>
-  <li>当微服务名发生变化,只需要调整对应的配置,不需要更改前端UI路径代码。</li>
-</ol>
-
-<h3 id="实现边缘服务">实现边缘服务</h3>
-<h4 id="第一步引入edge-core依赖">第一步:引入Edge Core依赖</h4>
-<div class="language-xml highlighter-rouge"><pre class="highlight"><code><span class="nt">&lt;dependency&gt;</span>
-  <span class="nt">&lt;groupId&gt;</span>org.apache.servicecomb<span class="nt">&lt;/groupId&gt;</span>
-  <span class="nt">&lt;artifactId&gt;</span>edge-core<span class="nt">&lt;/artifactId&gt;</span>
-<span class="nt">&lt;/dependency&gt;</span>
-</code></pre>
-</div>
-
-<h4 id="第二步编写调度器dispatcher">第二步:编写调度器Dispatcher</h4>
-<p>Edge服务的核心就是调度器Dispatcher,ServiceComb Edge Core中的Dispatcher基于高性能的Vertx Reactive,轻松应对百万量级API请求的挑战;只需要继承AbstractEdgeDispatcher抽象类,添加对应的逻辑即可:</p>
-
-<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">class</span> <span class="nc">EdgeDispatcher</span> <span class="kd">extends</span> <span class="n">AbstractEdgeDispatcher</span> <span class="o">{</span>
-  <span class="kd">private</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">Logger</span> <span class="n">LOGGER</span> <span class="o">=</span> <span class="n">LoggerFactory</span><span class="o">.</span><span class="na">getLogger</span><span class="o">(</span><span class="n">EdgeDispatcher</span><span class="o">.</span><span class="na">class</span><span class="o">);</span>
-
-  <span class="c1">//此Dispatcher的优先级,Order级越小,路由策略优先级越高</span>
-  <span class="kd">public</span> <span class="kt">int</span> <span class="nf">getOrder</span><span class="o">()</span> <span class="o">{</span>
-    <span class="k">return</span> <span class="mi">10000</span><span class="o">;</span>
-  <span class="o">}</span>
-
-  <span class="c1">//初始化Dispatcher的路由策略</span>
-  <span class="kd">public</span> <span class="kt">void</span> <span class="nf">init</span><span class="o">(</span><span class="n">Router</span> <span class="n">router</span><span class="o">)</span> <span class="o">{</span>
-    <span class="c1">///捕获 {ServiceComb微服务Name}/{服务路径&amp;参数} 的URL</span>
-    <span class="n">String</span> <span class="n">regex</span> <span class="o">=</span> <span class="s">"/([^\\\\/]+)/(.*)"</span><span class="o">;</span>
-    <span class="n">router</span><span class="o">.</span><span class="na">routeWithRegex</span><span class="o">(</span><span class="n">regex</span><span class="o">).</span><span class="na">handler</span><span class="o">(</span><span class="n">CookieHandler</span><span class="o">.</span><span class="na">create</span><span class="o">());</span>
-    <span class="n">router</span><span class="o">.</span><span class="na">routeWithRegex</span><span class="o">(</span><span class="n">regex</span><span class="o">).</span><span class="na">handler</span><span class="o">(</span><span class="n">createBodyHandler</span><span class="o">());</span>
-    <span class="n">router</span><span class="o">.</span><span class="na">routeWithRegex</span><span class="o">(</span><span class="n">regex</span><span class="o">).</span><span class="na">failureHandler</span><span class="o">(</span><span class="k">this</span><span class="o">::</span><span class="n">onFailure</span><span class="o">).</span><span class="na">handler</span><span class="o">(</span><span class="k">this</span><span class="o">::</span><span class="n">onRequest</span><span clas [...]
-  <span class="o">}</span>
-
-  <span class="c1">//处理请求,请注意</span>
-  <span class="kd">private</span> <span class="kt">void</span> <span class="nf">onRequest</span><span class="o">(</span><span class="n">RoutingContext</span> <span class="n">context</span><span class="o">)</span> <span class="o">{</span>
-    <span class="n">Map</span><span class="o">&lt;</span><span class="n">String</span><span class="o">,</span> <span class="n">String</span><span class="o">&gt;</span> <span class="n">pathParams</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="na">pathParams</span><span class="o">();</span>
-    <span class="c1">//从匹配的param0拿到{ServiceComb微服务Name}</span>
-    <span class="kd">final</span> <span class="n">String</span> <span class="n">service</span> <span class="o">=</span> <span class="n">pathParams</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="s">"param0"</span><span class="o">);</span>
-    <span class="c1">//从匹配的param1拿到{服务路径&amp;参数}</span>
-    <span class="n">String</span> <span class="n">path</span> <span class="o">=</span> <span class="s">"/"</span> <span class="o">+</span> <span class="n">pathParams</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="s">"param1"</span><span class="o">);</span>
-
-    <span class="c1">//还记得我们之前说的做出一点点改进吗?引入一个自定义配置edge.routing-short-path.{简称},映射微服务名;如果简称没有配置,那么就认为直接是微服务的名</span>
-    <span class="kd">final</span> <span class="n">String</span> <span class="n">serviceName</span> <span class="o">=</span> <span class="n">DynamicPropertyFactory</span><span class="o">.</span><span class="na">getInstance</span><span class="o">()</span>
-        <span class="o">.</span><span class="na">getStringProperty</span><span class="o">(</span><span class="s">"edge.routing-short-path."</span> <span class="o">+</span> <span class="n">service</span><span class="o">,</span> <span class="n">service</span><span class="o">).</span><span class="na">get</span><span class="o">();</span>
-
-    <span class="c1">//创建一个Edge转发</span>
-    <span class="n">EdgeInvocation</span> <span class="n">edgeInvocation</span> <span class="o">=</span> <span class="k">new</span> <span class="n">EdgeInvocation</span><span class="o">();</span>
-    <span class="c1">//允许接受任意版本的微服务实例作为Provider,未来我们会使用此(设置版本)能力实现灰度发布</span>
-    <span class="n">edgeInvocation</span><span class="o">.</span><span class="na">setVersionRule</span><span class="o">(</span><span class="n">DefinitionConst</span><span class="o">.</span><span class="na">VERSION_RULE_ALL</span><span class="o">);</span>
-    <span class="n">edgeInvocation</span><span class="o">.</span><span class="na">init</span><span class="o">(</span><span class="n">serviceName</span><span class="o">,</span> <span class="n">context</span><span class="o">,</span> <span class="n">path</span><span class="o">,</span> <span class="n">httpServerFilters</span><span class="o">);</span>
-    <span class="n">edgeInvocation</span><span class="o">.</span><span class="na">edgeInvoke</span><span class="o">();</span>
-  <span class="o">}</span>
-<span class="o">}</span>
-</code></pre>
-</div>
-
-<h4 id="第三步加载调度器dispatcher">第三步:加载调度器Dispatcher</h4>
-<p>ServiceComb Edge使用SPI(Service Provider Interface)的方式加载已经编写好的调度器Dispatcher,在resources目录下创建<code class="highlighter-rouge">META-INF.services/org.apache.servicecomb.transport.rest.vertx.VertxHttpDispatcher</code>配置文件,写入上一步EdgeDispatcher的类全名:</p>
-
-<div class="language-text highlighter-rouge"><pre class="highlight"><code>{EdgeDispatcher的包名}.EdgeDispatcher
-</code></pre>
-</div>
-
-<h4 id="第四步配置microserviceyaml">第四步:配置microservice.yaml</h4>
-<p>边缘服务本身也是一个微服务,同样需要配置microservice.yaml:</p>
-
-<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">APPLICATION_ID</span><span class="pi">:</span> <span class="s">scaffold</span>
-<span class="s">service_description</span><span class="pi">:</span>
-  <span class="s">name</span><span class="pi">:</span> <span class="s">edge-service</span>
-  <span class="s">version</span><span class="pi">:</span> <span class="s">0.0.1</span>
-<span class="s">servicecomb</span><span class="pi">:</span>
-  <span class="s">service</span><span class="pi">:</span>
-    <span class="s">registry</span><span class="pi">:</span>
-      <span class="c1">#配置ServiceCenter使得Edge能够发现其他微服务</span>
-      <span class="s">address</span><span class="pi">:</span> <span class="s">http://127.0.0.1:30100</span>
-  <span class="c1">#配置Rest Endpoint</span>
-  <span class="s">rest</span><span class="pi">:</span>
-    <span class="s">address</span><span class="pi">:</span> <span class="s">0.0.0.0:9090</span>
-
-<span class="c1">#自定义的简称机制配置(这是我们自行扩展实现的)</span>
-<span class="s">edge</span><span class="pi">:</span>
-  <span class="s">routing-short-path</span><span class="pi">:</span>
-    <span class="s">user</span><span class="pi">:</span> <span class="s">user-service</span>
-</code></pre>
-</div>
-
-<blockquote>
-  <p>提示:</p>
-  <ol>
-    <li>除了配置Rest Endpoint,我们也支持配置Highway Endpoint,但Highway Endpoint只支持ServiceComb开发的微服务调用;</li>
-    <li>microservice.yaml中没有配置Handler,Edge支持所有Consumer端Handler,不支持Producer端Handler,调用链原理如下:</li>
-  </ol>
-
-  <p><img src="/assets/images/scaffold/EdgeOnlySupportConsumerHandler.png" alt="EdgeOnlySupportConsumerHandler" /></p>
-
-</blockquote>
-
-<h3 id="验证边缘服务">验证边缘服务</h3>
-<p>启动用户微服务和Edge服务,使用<a href="https://www.getpostman.com/">Postman</a>注册一个用户:</p>
-
-<p><img src="/assets/images/scaffold/LogonViaEdge.png" alt="LogonViaEdge" /></p>
-
-<p>成功,现在我们使用新注册的用户名<code class="highlighter-rouge">ldg</code>登录:</p>
-
-<p><img src="/assets/images/scaffold/LoginViaEdge.png" alt="LoginViaEdge" /></p>
-
-<p>同样成功,并在Response中已经包含了正确的<code class="highlighter-rouge">AUTHORIZATION</code>Header。</p>
-
-<h3 id="性能比拼">性能比拼</h3>
-<p>ServiceComb Java Chassis也支持集成Netflix Zuul作为网关服务,我们做了一次性能比较,使用ServiceComb Edge作为网关吞吐能力大幅优于Netflix Zuul,性能测试项目源代码在<a href="https://github.com/zhengyangyong/gateway-perf">这里</a>。</p>
-
-        
-      </section>
-
-      <footer class="page__meta">
-        
-        
-  
-
-
-  
-  
-  
-
-  <p class="page__taxonomy">
-    <strong><i class="fa fa-fw fa-tags" aria-hidden="true"></i> 标签: </strong>
-    <span itemprop="keywords">
-    
-      
-      
-      <a href="/tags/#api-gateway" class="page__taxonomy-item" rel="tag">API Gateway</a><span class="sep">, </span>
-    
-      
-      
-      <a href="/tags/#edge-service" class="page__taxonomy-item" rel="tag">Edge Service</a><span class="sep">, </span>
-    
-      
-      
-      <a href="/tags/#zuul" class="page__taxonomy-item" rel="tag">Zuul</a>
-    
-    </span>
-  </p>
-
-
-
-
-
-        
-          
-            
-              <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> 最新的:</strong> <time datetime="2018-06-07">2018年6月7日</time></p>
-            
-          
-        
-      </footer>
-
-      <section class="page__share">
-  
-    <h4 class="page__share-title">分享</h4>
-  
-
-  <a href="https://twitter.com/intent/tweet?via=ServiceComb&text=轻松微服务系列:开发高性能边缘服务 /cn/docs/easy-build-microservice-system-part-III/" class="btn btn--twitter" title="分享 Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
-
-  <a href="https://www.facebook.com/sharer/sharer.php?u=/cn/docs/easy-build-microservice-system-part-III/" class="btn btn--facebook" title="分享 Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
-
-  <a href="https://plus.google.com/share?url=/cn/docs/easy-build-microservice-system-part-III/" class="btn btn--google-plus" title="分享 Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
-
-  <a href="https://www.linkedin.com/shareArticle?mini=true&url=/cn/docs/easy-build-microservice-system-part-III/" class="btn btn--linkedin" title="分享 LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
-</section>
-
-
-      
-  <nav class="pagination">
-    
-      <a href="/cn/docs/how-to-grow-up-to-be-an-apache-committer/" class="pagination--pager" title="如何从一名开源小白成长为Apache Committer
-">向前</a>
-    
-    
-      <a href="/docs/apache-servicecomb-incubating-day/" class="pagination--pager" title="Microservice Meetup: Detailed Agenda of Apache ServiceComb (incubating) Day
-">向后</a>
-    
-  </nav>
-
-
-    </div>
-
-    
-      <div class="page__comments">
-  
-  
-    <section id="static-comments">
-      
-        <!-- Start static comments -->
-        <div class="js-comments">
-          
-        </div>
-        <!-- End static comments -->
-
-        <!-- Start new comment form -->
-        <h4 class="page__comments-title">留下评论</h4>
-        <p class="small">您的电子邮箱地址并不会被展示。请填写标记为必须的字段。 <span class="required">*</span></p>
-        <form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/apache/incubator-servicecomb-website/master">
-          <div class="form__spinner">
-            <i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
-            <span class="sr-only">正在加载...</span>
-          </div>
-
-          <fieldset>
-            <label for="comment-form-message">评论 <small class="required">*</small></label>
-            <textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
-            <div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">Markdown语法已支持。</a></div>
-          </fieldset>
-          <fieldset>
-            <label for="comment-form-name">姓名 <small class="required">*</small></label>
-            <input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
-          </fieldset>
-          <fieldset>
-            <label for="comment-form-email">电子邮箱 <small class="required">*</small></label>
-            <input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
-          </fieldset>
-          <fieldset>
-            <label for="comment-form-url">网站(可选)</label>
-            <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
-          </fieldset>
-          <fieldset class="hidden" style="display: none;">
-            <input type="hidden" name="options[slug]" value="easy-build-microservice-system-part-III">
-            <label for="comment-form-location">Not used. Leave blank if you are a human.</label>
-            <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
-          </fieldset>
-          <!-- Start comment form alert messaging -->
-          <p class="hidden js-notice">
-            <strong class="js-notice-text"></strong>
-          </p>
-          <!-- End comment form alert messaging -->
-          <fieldset>
-            <button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--large">提交评论</button>
-          </fieldset>
-        </form>
-        <!-- End new comment form -->
-      
-    </section>
-  
-</div>
-
-    
-  </article>
-
-  
-  
-    <div class="page__related">
-      <h4 class="page__related-title">猜您还喜欢</h4>
-      <div class="grid__wrapper">
-        
-          
-
-
-
-<div class="grid__item">
-  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
-    
-    <h2 class="archive__item-title" itemprop="headline">
-      
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
-</a>
-      
-    </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
-</p>
-    
-      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
-
-
-
-
-  4 分钟 阅读
-
-</p>
-    
-  </article>
-</div>
-
-        
-          
-
-
-
-<div class="grid__item">
-  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
-    
-    <h2 class="archive__item-title" itemprop="headline">
-      
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
-</a>
-      
-    </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
-</p>
-    
-      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
-
-
-
-
-  少于 1 分钟 阅读
-
-</p>
-    
-  </article>
-</div>
-
-        
-          
-
-
-
-<div class="grid__item">
-  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
-    
-    <h2 class="archive__item-title" itemprop="headline">
-      
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
-</a>
-      
-    </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
-</p>
-    
-      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
-
-
-
-
-  1 分钟 阅读
-
-</p>
-    
-  </article>
-</div>
-
-        
-          
-
-
-
-<div class="grid__item">
-  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
-    
-    <h2 class="archive__item-title" itemprop="headline">
-      
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
-</a>
-      
-    </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
-</p>
-    
-      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
-
-
-
-
-  1 分钟 阅读
-
-</p>
-    
-  </article>
-</div>
-
-        
-      </div>
-    </div>
-  
-</div>
-
-
-    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
-    <div align="center" style="margin: 0 0;">
-    <ins class="adsbygoogle"
-         style="display:block; border-bottom: initial;"
-         data-ad-client="ca-pub-7328585512091257"
-         data-ad-slot="3049671934"
-         data-ad-format="auto"></ins>
-    </div>
-
-    <div class="page__footer">
-      <footer>
-        <!-- start custom footer snippets -->
-<div class="container">
-  <div class="row justify-content-md-center">
-    <div class="page__footer-bottom">
-      <p>Apache ServiceComb(incubating)is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indic [...]
-    </div>  
-  </div>
-</div>
-<!-- end custom footer snippets -->
-
-        <div class="container">
-  <div class="row justify-content-md-center">
-    
-    <div class="col">
-      <ul>
-        <p class="header">资源</p>
-        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
-        <li><a href="/cn/users/">用户指南</a></li>
-        <li><a href="/cn/slides/">资料</a></li>
-        <li><a href="/cn/users/faq/">常见问题</a></li>
-      </ul>
-    </div>
-    <div class="col">
-      <ul>
-        <p class="header">ASF</p>
-        <li><a href="http://www.apache.org">基金会</a></li>
-        <li><a href="http://www.apache.org/licenses/">许可证</a></li>
-        <li><a href="http://www.apache.org/events/current-event">活动</a></li>
-        <li><a href="http://www.apache.org/foundation/sponsorship.html">赞助</a></li>
-        <li><a href="http://www.apache.org/foundation/thanks.html">鸣谢</a></li>
-      </ul>
-    </div>
-    <div class="col">
-      <ul>
-        <p class="header">贡献</p>
-        <li><a href="https://github.com/apache/incubator-servicecomb-website/issues/new?title=Issue with _posts/cn/2018-06-07-easy-build-microservice-system-part-III.md">报告本网页问题</a></li>
-        <li><a href="https://github.com/apache/incubator-servicecomb-website/edit/master/_posts/cn/2018-06-07-easy-build-microservice-system-part-III.md">在Github上编辑此页</a></li>
-        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
-        <li><a href="/cn/security">安全</a></li>
-      </ul>
-    </div>
-    <div class="col">
-      <ul class="social-icons">
-        <p class="header">社区</p>
-        <li>
-            <a href="mailto:dev-subscribe@servicecomb.incubator.apache.org" rel="nofollow"><span class="mail">邮件列表</span></a>
-        </li>
-        <li>
-            <a href="https://github.com/apache?q=ServiceComb" target="_blank"><span class="github">Github</span></a>
-        </li>
-        <li>
-            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
-        </li>
-        <li>
-            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
-        </li>
-      </ul>
-    </div>
-  </div>
-</div>
-<div class="page__footer-bottom">
-  <div>&copy; 2018 Apache ServiceComb (incubating). 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
-  <div>All other marks mentioned may be trademarks or registered trademarks of their respective owners.</div>
-</div>
-
-      </footer>
-    </div>
-
-    <script src="/assets/js/main.min.js"></script>
-
-
-
-
-  <script>
-  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
-  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
-  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
-  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
-
-  ga('create', 'UA-101622733-1', 'auto');
-  ga('send', 'pageview');
-</script>
-
-
-
-
-
-
-
-  
-  <script>
-    (function ($) {
-    var $comments = $('.js-comments');
-
-    $('#new_comment').submit(function () {
-      var form = this;
-
-      $(form).addClass('disabled');
-      $('#comment-form-submit').html('<i class="fa fa-spinner fa-spin fa-fw"></i> 正在加载...');
-
-      $.ajax({
-        type: $(this).attr('method'),
-        url: $(this).attr('action'),
-        data: $(this).serialize(),
-        contentType: 'application/x-www-form-urlencoded',
-        success: function (data) {
-          $('#comment-form-submit').html('已提交');
-          $('.page__comments-form .js-notice').removeClass('notice--danger');
-          $('.page__comments-form .js-notice').addClass('notice--success');
-          showAlert('感谢您的评论!被批准后它会立即在此站点展示。');
-        },
-        error: function (err) {
-          console.log(err);
-          $('#comment-form-submit').html('提交评论');
-          $('.page__comments-form .js-notice').removeClass('notice--success');
-          $('.page__comments-form .js-notice').addClass('notice--danger');
-          showAlert('很抱歉,您的提交存在错误。请确保所有必填字段都已填写正确,然后再试一次。');
-          $(form).removeClass('disabled');
-        }
-      });
-
-      return false;
-    });
-
-    function showAlert(message) {
-      $('.page__comments-form .js-notice').removeClass('hidden');
-      $('.page__comments-form .js-notice-text').html(message);
-    }
-  })(jQuery);
-  </script>
-
-
-
-
-
-
-
-  </body>
-</html>
diff --git a/content/cn/docs/easy-build-microservice-system-part-IV/index.html b/content/cn/docs/easy-build-microservice-system-part-IV/index.html
deleted file mode 100644
index b3d1b67..0000000
--- a/content/cn/docs/easy-build-microservice-system-part-IV/index.html
+++ /dev/null
@@ -1,995 +0,0 @@
-<!doctype html>
-<!--
-  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
-  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
-  Free for personal and commercial use under the MIT license
-  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
--->
-<html lang="cn" class="no-js">
-  <head>
-    <meta charset="utf-8">
-
-<!-- begin SEO -->
-
-
-
-
-
-
-
-
-
-<title>轻松微服务系列:边缘服务支持统一认证 - Apache ServiceComb (incubating)</title>
-
-
-
-
-<meta name="description" content="轻松微服务系列:边缘服务支持统一认证">
-
-
-
-
-<meta name="author" content="Yangyong Zheng">
-
-<meta property="og:locale" content="cn">
-<meta property="og:site_name" content="Apache ServiceComb (incubating)">
-<meta property="og:title" content="轻松微服务系列:边缘服务支持统一认证">
-
-
-  <link rel="canonical" href="http://github.com/pages/apache/incubator-servicecomb-website/cn/docs/easy-build-microservice-system-part-IV/">
-  <meta property="og:url" content="http://github.com/pages/apache/incubator-servicecomb-website/cn/docs/easy-build-microservice-system-part-IV/">
-
-
-
-  <meta property="og:description" content="轻松微服务系列:边缘服务支持统一认证">
-
-
-
-  <meta name="twitter:site" content="@ServiceComb">
-  <meta name="twitter:title" content="轻松微服务系列:边缘服务支持统一认证">
-  <meta name="twitter:description" content="轻松微服务系列:边缘服务支持统一认证">
-  <meta name="twitter:url" content="">
-
-  
-    <meta name="twitter:card" content="summary">
-    
-  
-
-  
-    <meta name="twitter:creator" content="@">
-  
-
-
-
-  
-
-  
-
-
-
-
-
-  <meta property="og:type" content="article">
-  <meta property="article:published_time" content="2018-07-10T00:00:00+08:00">
-
-
-
-
-
-
-
-
-  <script type="application/ld+json">
-    {
-      "@context" : "http://schema.org",
-      "@type" : "Person",
-      "name" : "Apache ServiceComb (incubating)",
-      "url" : "http://github.com/pages/apache/incubator-servicecomb-website",
-      "sameAs" : null
-    }
-  </script>
-
-
-
-  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
-
-
-
-
-<!-- end SEO -->
-
-
-<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache ServiceComb (incubating) Feed">
-
-<!-- http://t.co/dKP3o1e -->
-<meta name="HandheldFriendly" content="True">
-<meta name="MobileOptimized" content="320">
-<meta name="viewport" content="width=device-width, initial-scale=1.0">
-
-<script>
-  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
-</script>
-<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
-<script src="/assets/vendor/prism/prism.js"></script>
-
-<script type="text/javascript" async
-  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
-</script>
-
-<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
-
-<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
-<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
-<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
-<!-- For all browsers -->
-<link rel="stylesheet" href="/assets/css/main.css">
-<link rel="stylesheet" href="/assets/vendor/prism/prism.css">
-
-<!--[if lte IE 9]>
-  <style>
-    /* old IE unsupported flexbox fixes */
-    .greedy-nav .site-title {
-      padding-right: 3em;
-    }
-    .greedy-nav button {
-      position: absolute;
-      top: 0;
-      right: 0;
-      height: 100%;
-    }
-  </style>
-<![endif]-->
-
-<meta http-equiv="cleartype" content="on">
-
-    <!-- start custom head snippets -->
-
-<!-- insert favicons. use http://realfavicongenerator.net/ -->
-<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
-<script src="/assets/js/custom.js"></script>
-<!-- end custom head snippets -->
-
-  </head>
-
-  <body class="layout--single">
-
-    <!--[if lt IE 9]>
-<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
-<![endif]-->
-    <div class="masthead">
-  <div class="masthead__inner-wrap">
-    <div class="masthead__menu">
-      <nav id="site-nav" class="greedy-nav">
-	      
-          <a class="site-title active" href="/cn"><img src="/assets/images/ServiceComb-logo.png"></a>
-	      
-        <ul class="visible-links">
-          
-            
-            <li class="masthead__menu-item">
-              
-              
-              
-                <a href="/cn/docs/quick-start/">快速入门</a>
-              
-            </li>
-          
-            
-            <li class="masthead__menu-item">
-              
-              
-              
-                <a href="/cn/users/">用户手册</a>
-              
-            </li>
-          
-            
-            <li class="masthead__menu-item">
-              
-              
-              
-                <a href="/cn/developers/">开发者手册</a>
-              
-            </li>
-          
-            
-            <li class="masthead__menu-item">
-              
-              
-              
-                <a href="/cn/year-archive/">博文</a>
-              
-            </li>
-          
-            
-            <li class="masthead__menu-item">
-              
-              
-              
-                <a href="/cn/faqs/">常见问题</a>
-              
-            </li>
-          
-            
-            <li class="masthead__menu-item">
-              
-              
-              
-                <a href="/cn/release/">下载</a>
-              
-            </li>
-          
-        </ul>
-        <button><div class="navicon"></div></button>
-        <ul class="hidden-links hidden"></ul>
-        <div class="nav-lang">
-          
-            
-            
-            <a href=/docs/easy-build-microservice-system-part-IV/>English</a>
-          
-        </div>
-      </nav>
-    </div>
-  </div>
-</div>
-
-
-    
-
-
-
-<div id="main" role="main">
-  
-  <div class="sidebar sticky">
-      
-      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
-      
-  
-
-<div itemscope itemtype="http://schema.org/Person">
-
-  
-
-  <div class="author__content">
-    <h3 class="author__name" itemprop="name">Yangyong Zheng</h3>
-    
-      <p class="author__bio" itemprop="description">
-	    
-	      
-	        Fast Action, do not ask
-	      
-	    
-      </p>
-    
-  </div>
-
-  <div class="author__urls-wrapper">
-    <button class="btn btn--inverse">关注</button>
-    <ul class="author__urls social-icons">
-      
-
-      
-        <li>
-          <a href="https://zhengyangyong.github.io" itemprop="url">
-            <i class="fa fa-fw fa-chain" aria-hidden="true"></i> 网站
-          </a>
-        </li>
-      
-
-      
-        <li>
-          <a href="mailto:yangyong.zheng@huawei.com">
-            <meta itemprop="email" content="yangyong.zheng@huawei.com" />
-            <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> 电子邮箱
-          </a>
-        </li>
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      
-
-      <!--
-  <li>
-    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs">
-      <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link
-    </a>
-  </li>
--->
-    </ul>
-  </div>
-</div>
-
-  
-  </div>
-
-
-
-  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
-    <meta itemprop="headline" content="轻松微服务系列:边缘服务支持统一认证">
-    <meta itemprop="description" content="轻松微服务系列:边缘服务支持统一认证">
-    <meta itemprop="datePublished" content="July 10, 2018">
-    <meta itemprop="dateModified" content="July 10, 2018">
-
-    <div class="page__inner-wrap">
-      
-        
-          <header>
-            <h1 class="page__title" itemprop="headline">轻松微服务系列:边缘服务支持统一认证
-</h1>
-            
-              <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
-
-
-
-
-  1 分钟 阅读
-
-</p>
-            
-          </header>
-        
-      
-
-      <section class="page__content" itemprop="text">
-        <h2 id="轻松微服务系列边缘服务支持统一认证">轻松微服务系列:边缘服务支持统一认证</h2>
-<p>在前一篇博文<a href="http://servicecomb.incubator.apache.org/cn/docs/easy-build-microservice-system-part-III/">《轻松微服务系列:开发高性能边缘服务》</a>,我们开发了具备基本路由能力的高性能边缘服务。这篇博文我们将在Edge服务上实施如何扩展支持统一认证。</p>
-
-<h3 id="设计思路">设计思路</h3>
-<p>正如前面的博文提到过,统一认证的目的是在Edge入口处进行访问认证,避免需要在所有的微服务中都承载重复的认证机制,因此:</p>
-<ol>
-  <li>我们先要将认证功能作为一个独立的Procuder发布出来,使Edge服务能够随时认证Token,我们将其命名为<code class="highlighter-rouge">AuthenticationService</code>,放在用户服务中;</li>
-  <li>将无需认证的访问请求识别出来,包括:</li>
-</ol>
-
-<table>
-  <thead>
-    <tr>
-      <th style="text-align: left">功能</th>
-      <th style="text-align: left">描述</th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td style="text-align: left">login</td>
-      <td style="text-align: left">登录验证,通过后为用户生成Token</td>
-    </tr>
-    <tr>
-      <td style="text-align: left">logon</td>
-      <td style="text-align: left">新用户注册</td>
-    </tr>
-  </tbody>
-</table>
-
-<p>除此之外其他业务请求都需要做Token认证;</p>
-
-<ol>
-  <li>Edge服务转发访问请求之前,对需要认证的请求先做统一认证,认证通过之后才转发,我们使用<code class="highlighter-rouge">HttpServerFilter</code>扩展这个能力:</li>
-</ol>
-
-<p><img src="/assets/images/scaffold/FilterChain.png" alt="FilterChain" /></p>
-
-<p>统一认证流程时序图为:</p>
-
-<p><img src="/assets/images/scaffold/EdgeAuth.png" alt="EdgeAuth" /></p>
-
-<h3 id="实现统一认证">实现统一认证</h3>
-<h4 id="第一步发布认证服务">第一步:发布认证服务</h4>
-<h5 id="定义authenticationservice">定义AuthenticationService</h5>
-<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">interface</span> <span class="nc">AuthenticationService</span> <span class="o">{</span>
-  <span class="n">String</span> <span class="nf">validate</span><span class="o">(</span><span class="n">String</span> <span class="n">token</span><span class="o">);</span>
-<span class="o">}</span>
-</code></pre>
-</div>
-<h5 id="实现并发布authenticationservice">实现并发布AuthenticationService</h5>
-<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@RestSchema</span><span class="o">(</span><span class="n">schemaId</span> <span class="o">=</span> <span class="s">"authentication"</span><span class="o">)</span>
-<span class="nd">@RequestMapping</span><span class="o">(</span><span class="n">path</span> <span class="o">=</span> <span class="s">"/"</span><span class="o">)</span>
-<span class="kd">public</span> <span class="kd">class</span> <span class="nc">AuthenticationServiceImpl</span> <span class="kd">implements</span> <span class="n">AuthenticationService</span> <span class="o">{</span>
-
-  <span class="kd">private</span> <span class="kd">final</span> <span class="n">TokenStore</span> <span class="n">tokenStore</span><span class="o">;</span>
-
-  <span class="nd">@Autowired</span>
-  <span class="kd">public</span> <span class="nf">AuthenticationServiceImpl</span><span class="o">(</span><span class="n">TokenStore</span> <span class="n">tokenStore</span><span class="o">)</span> <span class="o">{</span>
-    <span class="k">this</span><span class="o">.</span><span class="na">tokenStore</span> <span class="o">=</span> <span class="n">tokenStore</span><span class="o">;</span>
-  <span class="o">}</span>
-
-  <span class="nd">@Override</span>
-  <span class="nd">@GetMapping</span><span class="o">(</span><span class="n">path</span> <span class="o">=</span> <span class="s">"validate"</span><span class="o">)</span>
-  <span class="kd">public</span> <span class="n">String</span> <span class="nf">validate</span><span class="o">(</span><span class="n">String</span> <span class="n">token</span><span class="o">)</span> <span class="o">{</span>
-    <span class="n">String</span> <span class="n">userName</span> <span class="o">=</span> <span class="n">tokenStore</span><span class="o">.</span><span class="na">validate</span><span class="o">(</span><span class="n">token</span><span class="o">);</span>
-    <span class="k">if</span> <span class="o">(</span><span class="n">userName</span> <span class="o">==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
-      <span class="k">throw</span> <span class="k">new</span> <span class="nf">InvocationException</span><span class="o">(</span><span class="n">BAD_REQUEST</span><span class="o">,</span> <span class="s">"incorrect token"</span><span class="o">);</span>
-    <span class="o">}</span>
-    <span class="k">return</span> <span class="n">userName</span><span class="o">;</span>
-  <span class="o">}</span>
-<span class="o">}</span>
-</code></pre>
-</div>
-
-<h4 id="第二步实现统一认证authenticationfilter">第二步:实现统一认证AuthenticationFilter</h4>
-<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">class</span> <span class="nc">AuthenticationFilter</span> <span class="kd">implements</span> <span class="n">HttpServerFilter</span> <span class="o">{</span>
-
-  <span class="kd">private</span> <span class="kd">final</span> <span class="n">RestTemplate</span> <span class="n">template</span> <span class="o">=</span> <span class="n">RestTemplateBuilder</span><span class="o">.</span><span class="na">create</span><span class="o">();</span>
-
-  <span class="kd">private</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">USER_SERVICE_NAME</span> <span class="o">=</span> <span class="s">"user-service"</span><span class="o">;</span>
-
-  <span class="kd">public</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">EDGE_AUTHENTICATION_NAME</span> <span class="o">=</span> <span class="s">"edge-authentication-name"</span><span class="o">;</span>
-
-  <span class="kd">private</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">Set</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span> <span class="n">NOT_REQUIRED_VERIFICATION_USER_SERVICE_METHODS</span> <span class="o">=</span> <span class="k">new</span> <span class="n">HashSet</span><span class="o">&lt;&gt;(</span>
-      <span class="n">Arrays</span><span class="o">.</span><span class="na">asList</span><span class="o">(</span><span class="s">"login"</span><span class="o">,</span> <span class="s">"logon"</span><span class="o">,</span> <span class="s">"validate"</span><span class="o">));</span>
-
-  <span class="nd">@Override</span>
-  <span class="kd">public</span> <span class="kt">int</span> <span class="nf">getOrder</span><span class="o">()</span> <span class="o">{</span>
-    <span class="k">return</span> <span class="mi">0</span><span class="o">;</span>
-  <span class="o">}</span>
-
-  <span class="nd">@Override</span>
-  <span class="kd">public</span> <span class="n">Response</span> <span class="nf">afterReceiveRequest</span><span class="o">(</span><span class="n">Invocation</span> <span class="n">invocation</span><span class="o">,</span> <span class="n">HttpServletRequestEx</span> <span class="n">httpServletRequestEx</span><span class="o">)</span> <span class="o">{</span>
-    <span class="k">if</span> <span class="o">(</span><span class="n">isInvocationNeedValidate</span><span class="o">(</span><span class="n">invocation</span><span class="o">.</span><span class="na">getMicroserviceName</span><span class="o">(),</span> <span class="n">invocation</span><span class="o">.</span><span class="na">getOperationName</span><span class="o">()))</span> <span class="o">{</span>
-      <span class="n">String</span> <span class="n">token</span> <span class="o">=</span> <span class="n">httpServletRequestEx</span><span class="o">.</span><span class="na">getHeader</span><span class="o">(</span><span class="n">AUTHORIZATION</span><span class="o">);</span>
-      <span class="k">if</span> <span class="o">(</span><span class="n">StringUtils</span><span class="o">.</span><span class="na">isNotEmpty</span><span class="o">(</span><span class="n">token</span><span class="o">))</span> <span class="o">{</span>
-        <span class="n">String</span> <span class="n">userName</span> <span class="o">=</span> <span class="n">template</span>
-            <span class="o">.</span><span class="na">getForObject</span><span class="o">(</span><span class="s">"cse://"</span> <span class="o">+</span> <span class="n">USER_SERVICE_NAME</span> <span class="o">+</span> <span class="s">"/validate?token={token}"</span><span class="o">,</span> <span class="n">String</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">token</span><span class="o">);</span>
-        <span class="k">if</span> <span class="o">(</span><span class="n">StringUtils</span><span class="o">.</span><span class="na">isNotEmpty</span><span class="o">(</span><span class="n">userName</span><span class="o">))</span> <span class="o">{</span>
-          <span class="c1">//Add header</span>
-          <span class="n">invocation</span><span class="o">.</span><span class="na">getContext</span><span class="o">().</span><span class="na">put</span><span class="o">(</span><span class="n">EDGE_AUTHENTICATION_NAME</span><span class="o">,</span> <span class="n">userName</span><span class="o">);</span>
-        <span class="o">}</span> <span class="k">else</span> <span class="o">{</span>
-          <span class="k">return</span> <span class="n">Response</span>
-              <span class="o">.</span><span class="na">failResp</span><span class="o">(</span><span class="k">new</span> <span class="n">InvocationException</span><span class="o">(</span><span class="n">Status</span><span class="o">.</span><span class="na">UNAUTHORIZED</span><span class="o">,</span> <span class="s">"authentication failed, invalid token"</span><span class="o">));</span>
-        <span class="o">}</span>
-      <span class="o">}</span> <span class="k">else</span> <span class="o">{</span>
-        <span class="k">return</span> <span class="n">Response</span><span class="o">.</span><span class="na">failResp</span><span class="o">(</span>
-            <span class="k">new</span> <span class="nf">InvocationException</span><span class="o">(</span><span class="n">Status</span><span class="o">.</span><span class="na">UNAUTHORIZED</span><span class="o">,</span> <span class="s">"authentication failed, missing AUTHORIZATION header"</span><span class="o">));</span>
-      <span class="o">}</span>
-    <span class="o">}</span>
-    <span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
-  <span class="o">}</span>
-
-  <span class="kd">private</span> <span class="kt">boolean</span> <span class="nf">isInvocationNeedValidate</span><span class="o">(</span><span class="n">String</span> <span class="n">serviceName</span><span class="o">,</span> <span class="n">String</span> <span class="n">operationPath</span><span class="o">)</span> <span class="o">{</span>
-    <span class="k">if</span> <span class="o">(</span><span class="n">USER_SERVICE_NAME</span><span class="o">.</span><span class="na">equals</span><span class="o">(</span><span class="n">serviceName</span><span class="o">))</span> <span class="o">{</span>
-      <span class="k">for</span> <span class="o">(</span><span class="n">String</span> <span class="n">method</span> <span class="o">:</span> <span class="n">NOT_REQUIRED_VERIFICATION_USER_SERVICE_METHODS</span><span class="o">)</span> <span class="o">{</span>
-        <span class="k">if</span> <span class="o">(</span><span class="n">operationPath</span><span class="o">.</span><span class="na">startsWith</span><span class="o">(</span><span class="n">method</span><span class="o">))</span> <span class="o">{</span>
-          <span class="k">return</span> <span class="kc">false</span><span class="o">;</span>
-        <span class="o">}</span>
-      <span class="o">}</span>
-    <span class="o">}</span>
-    <span class="k">return</span> <span class="kc">true</span><span class="o">;</span>
-  <span class="o">}</span>
-<span class="o">}</span>
-</code></pre>
-</div>
-
-<p>别忘了通过SPI机制加载它,在<code class="highlighter-rouge">resources\META-INF\services</code>目录中创建<code class="highlighter-rouge">org.apache.servicecomb.common.rest.filter.HttpServerFilter</code>文件:</p>
-<div class="language-text highlighter-rouge"><pre class="highlight"><code>org.apache.servicecomb.scaffold.edge.filter.AuthenticationFilter
-</code></pre>
-</div>
-
-<h4 id="第三步在用户微服务中增加修改密码的功能用于验证">第三步:在用户微服务中增加修改密码的功能用于验证</h4>
-<p>现有的<code class="highlighter-rouge">login</code>和<code class="highlighter-rouge">logon</code>都无需认证,因此我们在用户微服务中增加需要认证的修改密码的功能用于验证统一认证。</p>
-<h5 id="在userservice中添加修改密码">在UserService中添加修改密码</h5>
-<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">interface</span> <span class="nc">UserService</span> <span class="o">{</span>
-  <span class="n">ResponseEntity</span><span class="o">&lt;</span><span class="n">Boolean</span><span class="o">&gt;</span> <span class="nf">logon</span><span class="o">(</span><span class="n">UserDTO</span> <span class="n">user</span><span class="o">);</span>
-
-  <span class="n">ResponseEntity</span><span class="o">&lt;</span><span class="n">Boolean</span><span class="o">&gt;</span> <span class="nf">login</span><span class="o">(</span><span class="n">UserDTO</span> <span class="n">user</span><span class="o">);</span>
-  <span class="c1">//需要认证的修改密码功能</span>
-  <span class="n">ResponseEntity</span><span class="o">&lt;</span><span class="n">Boolean</span><span class="o">&gt;</span> <span class="nf">changePassword</span><span class="o">(</span><span class="n">UserUpdateDTO</span> <span class="n">userUpdate</span><span class="o">);</span>
-<span class="o">}</span>
-</code></pre>
-</div>
-
-<h5 id="在userserviceimpl中实现修改密码">在UserServiceImpl中实现修改密码</h5>
-<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@Override</span>
-<span class="nd">@PostMapping</span><span class="o">(</span><span class="n">path</span> <span class="o">=</span> <span class="s">"changePassword"</span><span class="o">)</span>
-<span class="kd">public</span> <span class="n">ResponseEntity</span><span class="o">&lt;</span><span class="n">Boolean</span><span class="o">&gt;</span> <span class="nf">changePassword</span><span class="o">(</span><span class="nd">@RequestBody</span> <span class="n">UserUpdateDTO</span> <span class="n">userUpdate</span><span class="o">)</span> <span class="o">{</span>
-  <span class="k">if</span> <span class="o">(</span><span class="n">validateUserUpdate</span><span class="o">(</span><span class="n">userUpdate</span><span class="o">))</span> <span class="o">{</span>
-    <span class="n">UserEntity</span> <span class="n">dbUser</span> <span class="o">=</span> <span class="n">repository</span><span class="o">.</span><span class="na">findByName</span><span class="o">(</span><span class="n">userUpdate</span><span class="o">.</span><span class="na">getName</span><span class="o">());</span>
-    <span class="k">if</span> <span class="o">(</span><span class="n">dbUser</span> <span class="o">!=</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
-      <span class="k">if</span> <span class="o">(</span><span class="n">dbUser</span><span class="o">.</span><span class="na">getPassword</span><span class="o">().</span><span class="na">equals</span><span class="o">(</span><span class="n">userUpdate</span><span class="o">.</span><span class="na">getOldPassword</span><span class="o">()))</span> <span class="o">{</span>
-        <span class="n">dbUser</span><span class="o">.</span><span class="na">setPassword</span><span class="o">(</span><span class="n">userUpdate</span><span class="o">.</span><span class="na">getNewPassword</span><span class="o">());</span>
-        <span class="n">repository</span><span class="o">.</span><span class="na">save</span><span class="o">(</span><span class="n">dbUser</span><span class="o">);</span>
-        <span class="k">return</span> <span class="k">new</span> <span class="n">ResponseEntity</span><span class="o">&lt;&gt;(</span><span class="kc">true</span><span class="o">,</span> <span class="n">HttpStatus</span><span class="o">.</span><span class="na">OK</span><span class="o">);</span>
-      <span class="o">}</span>
-      <span class="k">throw</span> <span class="k">new</span> <span class="nf">InvocationException</span><span class="o">(</span><span class="n">BAD_REQUEST</span><span class="o">,</span> <span class="s">"wrong password"</span><span class="o">);</span>
-    <span class="o">}</span>
-    <span class="k">throw</span> <span class="k">new</span> <span class="nf">InvocationException</span><span class="o">(</span><span class="n">BAD_REQUEST</span><span class="o">,</span> <span class="s">"user name not exist"</span><span class="o">);</span>
-  <span class="o">}</span>
-  <span class="k">throw</span> <span class="k">new</span> <span class="nf">InvocationException</span><span class="o">(</span><span class="n">BAD_REQUEST</span><span class="o">,</span> <span class="s">"incorrect user"</span><span class="o">);</span>
-<span class="o">}</span>
-</code></pre>
-</div>
-
-<h3 id="验证实现的统一认证">验证实现的统一认证</h3>
-<h4 id="确认authenticationfilter在edge服务中成功加载">确认AuthenticationFilter在Edge服务中成功加载</h4>
-<p>在Edge服务的启动日志中能够找到:</p>
-<div class="language-text highlighter-rouge"><pre class="highlight"><code>2018-07-13 14:38:48,756 [INFO]   1. org.apache.servicecomb.scaffold.edge.filter.AuthenticationFilter. org.apache.servicecomb.foundation.common.utils.SPIServiceUtils.loadSortedService(SPIServiceUtils.java:79)
-</code></pre>
-</div>
-
-<h4 id="用户登录">用户登录</h4>
-<p>使用zhengyangyong登录:</p>
-
-<p><img src="/assets/images/scaffold/LoginFirst.png" alt="LoginFirst" /></p>
-
-<p>拿到的Token值为:eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ6aGVuZ3lhbmd5b25nIiwiZXhwIjoxNTMwNjA4OTczfQ.90teWUNbypPZvds_SD7Kus_y7wLc4b6VzC_aIVg8sLItKxwQ0g4V9BDU665PlqQY5KM-mnk8y0R6ENL1T8YVFg</p>
-
-<h4 id="不带authorization-header请求changepassword">不带Authorization Header请求changePassword</h4>
-
-<p><img src="/assets/images/scaffold/NoAuthHeader.png" alt="NoAuthHeader" /></p>
-
-<p>返回的失败信息是:authentication failed, missing AUTHORIZATION header</p>
-
-<h4 id="使用错误的token请求changepassword">使用错误的Token请求changePassword</h4>
-
-<p><img src="/assets/images/scaffold/ErrorAuthHeader.png" alt="ErrorAuthHeader" /></p>
-
-<p>返回的失败信息是:authentication failed : InvocationException: code=400;msg=CommonExceptionData [message=incorrect token]</p>
-
-<h4 id="使用正确的token请求changepassword">使用正确的Token请求changePassword</h4>
-
-<p><img src="/assets/images/scaffold/AuthSuccess.png" alt="AuthSuccess" /></p>
-
-<p>修改密码成功。</p>
-
-<p><strong>这里可能有疑问,使用zhengyangyong登录后,是可以通过这个Token修改其他用户例如lidagang的密码的,这是因为我们目前构建的validate仅检查Token的有效性,而不做权限检查,基于RBAC的角色权限管理系统将会在未来构建。</strong></p>
-
-<h3 id="参考资料">参考资料</h3>
-<ol>
-  <li>AuthenticationFilter的完整<a href="https://github.com/zhengyangyong/scaffold/blob/master/edge-service/src/main/java/org/apache/servicecomb/scaffold/edge/filter/AuthenticationFilter.java">代码</a>;</li>
-  <li>HttpServerFilter的<a href="https://github.com/apache/incubator-servicecomb-docs/blob/master/java-chassis-reference/zh_CN/general-development/http-filter.md">介绍</a>。</li>
-</ol>
-
-        
-      </section>
-
-      <footer class="page__meta">
-        
-        
-  
-
-
-  
-  
-  
-
-  <p class="page__taxonomy">
-    <strong><i class="fa fa-fw fa-tags" aria-hidden="true"></i> 标签: </strong>
-    <span itemprop="keywords">
-    
-      
-      
-      <a href="/tags/#api-gateway" class="page__taxonomy-item" rel="tag">API Gateway</a><span class="sep">, </span>
-    
-      
-      
-      <a href="/tags/#authentication" class="page__taxonomy-item" rel="tag">Authentication</a><span class="sep">, </span>
-    
-      
-      
-      <a href="/tags/#edge-service" class="page__taxonomy-item" rel="tag">Edge Service</a>
-    
-    </span>
-  </p>
-
-
-
-
-
-        
-          
-            
-              <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> 最新的:</strong> <time datetime="2018-07-10">2018年7月10日</time></p>
-            
-          
-        
-      </footer>
-
-      <section class="page__share">
-  
-    <h4 class="page__share-title">分享</h4>
-  
-
-  <a href="https://twitter.com/intent/tweet?via=ServiceComb&text=轻松微服务系列:边缘服务支持统一认证 /cn/docs/easy-build-microservice-system-part-IV/" class="btn btn--twitter" title="分享 Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
-
-  <a href="https://www.facebook.com/sharer/sharer.php?u=/cn/docs/easy-build-microservice-system-part-IV/" class="btn btn--facebook" title="分享 Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
-
-  <a href="https://plus.google.com/share?url=/cn/docs/easy-build-microservice-system-part-IV/" class="btn btn--google-plus" title="分享 Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
-
-  <a href="https://www.linkedin.com/shareArticle?mini=true&url=/cn/docs/easy-build-microservice-system-part-IV/" class="btn btn--linkedin" title="分享 LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
-</section>
-
-
-      
-  <nav class="pagination">
-    
-      <a href="/docs/apache-servicecomb-incubating-day-report/" class="pagination--pager" title="Apache ServiceComb (incubating) Day Report
-">向前</a>
-    
-    
-      <a href="/cn/docs/consul-servicemesh" class="pagination--pager" title="Consul Service Mesh实战
-">向后</a>
-    
-  </nav>
-
-
-    </div>
-
-    
-      <div class="page__comments">
-  
-  
-    <section id="static-comments">
-      
-        <!-- Start static comments -->
-        <div class="js-comments">
-          
-        </div>
-        <!-- End static comments -->
-
-        <!-- Start new comment form -->
-        <h4 class="page__comments-title">留下评论</h4>
-        <p class="small">您的电子邮箱地址并不会被展示。请填写标记为必须的字段。 <span class="required">*</span></p>
-        <form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/apache/incubator-servicecomb-website/master">
-          <div class="form__spinner">
-            <i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
-            <span class="sr-only">正在加载...</span>
-          </div>
-
-          <fieldset>
-            <label for="comment-form-message">评论 <small class="required">*</small></label>
-            <textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
-            <div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">Markdown语法已支持。</a></div>
-          </fieldset>
-          <fieldset>
-            <label for="comment-form-name">姓名 <small class="required">*</small></label>
-            <input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
-          </fieldset>
-          <fieldset>
-            <label for="comment-form-email">电子邮箱 <small class="required">*</small></label>
-            <input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
-          </fieldset>
-          <fieldset>
-            <label for="comment-form-url">网站(可选)</label>
-            <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
-          </fieldset>
-          <fieldset class="hidden" style="display: none;">
-            <input type="hidden" name="options[slug]" value="easy-build-microservice-system-part-IV">
-            <label for="comment-form-location">Not used. Leave blank if you are a human.</label>
-            <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
-          </fieldset>
-          <!-- Start comment form alert messaging -->
-          <p class="hidden js-notice">
-            <strong class="js-notice-text"></strong>
-          </p>
-          <!-- End comment form alert messaging -->
-          <fieldset>
-            <button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--large">提交评论</button>
-          </fieldset>
-        </form>
-        <!-- End new comment form -->
-      
-    </section>
-  
-</div>
-
-    
-  </article>
-
-  
-  
-    <div class="page__related">
-      <h4 class="page__related-title">猜您还喜欢</h4>
-      <div class="grid__wrapper">
-        
-          
-
-
-
-<div class="grid__item">
-  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
-    
-    <h2 class="archive__item-title" itemprop="headline">
-      
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
-</a>
-      
-    </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
-</p>
-    
-      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
-
-
-
-
-  4 分钟 阅读
-
-</p>
-    
-  </article>
-</div>
-
-        
-          
-
-
-
-<div class="grid__item">
-  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
-    
-    <h2 class="archive__item-title" itemprop="headline">
-      
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
-</a>
-      
-    </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
-</p>
-    
-      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
-
-
-
-
-  少于 1 分钟 阅读
-
-</p>
-    
-  </article>
-</div>
-
-        
-          
-
-
-
-<div class="grid__item">
-  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
-    
-    <h2 class="archive__item-title" itemprop="headline">
-      
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
-</a>
-      
-    </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
-</p>
-    
-      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
-
-
-
-
-  1 分钟 阅读
-
-</p>
-    
-  </article>
-</div>
-
-        
-          
-
-
-
-<div class="grid__item">
-  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
-    
-    <h2 class="archive__item-title" itemprop="headline">
-      
-        <a href="/docs/apache-servicecomb-incubating-day-report/" rel="permalink">Apache ServiceComb (incubating) Day Report
-</a>
-      
-    </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) Day Report
-</p>
-    
-      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
-
-
-
-
-  少于 1 分钟 阅读
-
-</p>
-    
-  </article>
-</div>
-
-        
-      </div>
-    </div>
-  
-</div>
-
-
-    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
-    <div align="center" style="margin: 0 0;">
-    <ins class="adsbygoogle"
-         style="display:block; border-bottom: initial;"
-         data-ad-client="ca-pub-7328585512091257"
-         data-ad-slot="3049671934"
-         data-ad-format="auto"></ins>
-    </div>
-
-    <div class="page__footer">
-      <footer>
-        <!-- start custom footer snippets -->
-<div class="container">
-  <div class="row justify-content-md-center">
-    <div class="page__footer-bottom">
-      <p>Apache ServiceComb(incubating)is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indic [...]
-    </div>  
-  </div>
-</div>
-<!-- end custom footer snippets -->
-
-        <div class="container">
-  <div class="row justify-content-md-center">
-    
-    <div class="col">
-      <ul>
-        <p class="header">资源</p>
-        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
-        <li><a href="/cn/users/">用户指南</a></li>
-        <li><a href="/cn/slides/">资料</a></li>
-        <li><a href="/cn/users/faq/">常见问题</a></li>
-      </ul>
-    </div>
-    <div class="col">
-      <ul>
-        <p class="header">ASF</p>
-        <li><a href="http://www.apache.org">基金会</a></li>
-        <li><a href="http://www.apache.org/licenses/">许可证</a></li>
-        <li><a href="http://www.apache.org/events/current-event">活动</a></li>
-        <li><a href="http://www.apache.org/foundation/sponsorship.html">赞助</a></li>
-        <li><a href="http://www.apache.org/foundation/thanks.html">鸣谢</a></li>
-      </ul>
-    </div>
-    <div class="col">
-      <ul>
-        <p class="header">贡献</p>
-        <li><a href="https://github.com/apache/incubator-servicecomb-website/issues/new?title=Issue with _posts/cn/2018-07-10-easy-build-microservice-system-part-IV.md">报告本网页问题</a></li>
-        <li><a href="https://github.com/apache/incubator-servicecomb-website/edit/master/_posts/cn/2018-07-10-easy-build-microservice-system-part-IV.md">在Github上编辑此页</a></li>
-        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
-        <li><a href="/cn/security">安全</a></li>
-      </ul>
-    </div>
-    <div class="col">
-      <ul class="social-icons">
-        <p class="header">社区</p>
-        <li>
-            <a href="mailto:dev-subscribe@servicecomb.incubator.apache.org" rel="nofollow"><span class="mail">邮件列表</span></a>
-        </li>
-        <li>
-            <a href="https://github.com/apache?q=ServiceComb" target="_blank"><span class="github">Github</span></a>
-        </li>
-        <li>
-            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
-        </li>
-        <li>
-            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
-        </li>
-      </ul>
-    </div>
-  </div>
-</div>
-<div class="page__footer-bottom">
-  <div>&copy; 2018 Apache ServiceComb (incubating). 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
-  <div>All other marks mentioned may be trademarks or registered trademarks of their respective owners.</div>
-</div>
-
-      </footer>
-    </div>
-
-    <script src="/assets/js/main.min.js"></script>
-
-
-
-
-  <script>
-  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
-  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
-  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
-  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
-
-  ga('create', 'UA-101622733-1', 'auto');
-  ga('send', 'pageview');
-</script>
-
-
-
-
-
-
-
-  
-  <script>
-    (function ($) {
-    var $comments = $('.js-comments');
-
-    $('#new_comment').submit(function () {
-      var form = this;
-
-      $(form).addClass('disabled');
-      $('#comment-form-submit').html('<i class="fa fa-spinner fa-spin fa-fw"></i> 正在加载...');
-
-      $.ajax({
-        type: $(this).attr('method'),
-        url: $(this).attr('action'),
-        data: $(this).serialize(),
-        contentType: 'application/x-www-form-urlencoded',
-        success: function (data) {
-          $('#comment-form-submit').html('已提交');
-          $('.page__comments-form .js-notice').removeClass('notice--danger');
-          $('.page__comments-form .js-notice').addClass('notice--success');
-          showAlert('感谢您的评论!被批准后它会立即在此站点展示。');
-        },
-        error: function (err) {
-          console.log(err);
-          $('#comment-form-submit').html('提交评论');
-          $('.page__comments-form .js-notice').removeClass('notice--success');
-          $('.page__comments-form .js-notice').addClass('notice--danger');
-          showAlert('很抱歉,您的提交存在错误。请确保所有必填字段都已填写正确,然后再试一次。');
-          $(form).removeClass('disabled');
-        }
-      });
-
-      return false;
-    });
-
-    function showAlert(message) {
-      $('.page__comments-form .js-notice').removeClass('hidden');
-      $('.page__comments-form .js-notice-text').html(message);
-    }
-  })(jQuery);
-  </script>
-
-
-
-
-
-
-
-  </body>
-</html>
diff --git a/content/cn/docs/go-to-cloud/index.html b/content/cn/docs/go-to-cloud/index.html
index 5328be7..2e1b48b 100644
--- a/content/cn/docs/go-to-cloud/index.html
+++ b/content/cn/docs/go-to-cloud/index.html
@@ -699,11 +699,11 @@ watching microservice 4 successfully,服务注册成功<br />
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -711,7 +711,7 @@ watching microservice 4 successfully,服务注册成功<br />
 
 
 
-  4 分钟 阅读
+  6 分钟 阅读
 
 </p>
     
@@ -728,11 +728,11 @@ watching microservice 4 successfully,服务注册成功<br />
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -740,7 +740,7 @@ watching microservice 4 successfully,服务注册成功<br />
 
 
 
-  少于 1 分钟 阅读
+  4 分钟 阅读
 
 </p>
     
@@ -757,11 +757,11 @@ watching microservice 4 successfully,服务注册成功<br />
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -769,7 +769,7 @@ watching microservice 4 successfully,服务注册成功<br />
 
 
 
-  1 分钟 阅读
+  少于 1 分钟 阅读
 
 </p>
     
@@ -786,11 +786,11 @@ watching microservice 4 successfully,服务注册成功<br />
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/cn/docs/how-to-grow-up-to-be-an-apache-committer/index.html b/content/cn/docs/how-to-grow-up-to-be-an-apache-committer/index.html
index e77ff7e..ee8b8e1 100644
--- a/content/cn/docs/how-to-grow-up-to-be-an-apache-committer/index.html
+++ b/content/cn/docs/how-to-grow-up-to-be-an-apache-committer/index.html
@@ -469,11 +469,11 @@
       
   <nav class="pagination">
     
-      <a href="/cn/docs/easy-build-microservice-system-part-II/" class="pagination--pager" title="轻松微服务系列:快速实现客户关系管理系统的用户服务
+      <a href="/cn/docs/saga_with_cucumber/" class="pagination--pager" title="ServiceComb Saga使用Cucumber做验收测试源码分析
 ">向前</a>
     
     
-      <a href="/cn/docs/easy-build-microservice-system-part-III/" class="pagination--pager" title="轻松微服务系列:开发高性能边缘服务
+      <a href="/docs/apache-servicecomb-incubating-day/" class="pagination--pager" title="Microservice Meetup: Detailed Agenda of Apache ServiceComb (incubating) Day
 ">向后</a>
     
   </nav>
@@ -557,11 +557,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -569,7 +569,7 @@
 
 
 
-  4 分钟 阅读
+  6 分钟 阅读
 
 </p>
     
@@ -586,11 +586,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -598,7 +598,7 @@
 
 
 
-  少于 1 分钟 阅读
+  4 分钟 阅读
 
 </p>
     
@@ -615,11 +615,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -627,7 +627,7 @@
 
 
 
-  1 分钟 阅读
+  少于 1 分钟 阅读
 
 </p>
     
@@ -644,11 +644,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/cn/docs/how-to-reform-a-legacy-system/index.html b/content/cn/docs/how-to-reform-a-legacy-system/index.html
index 8036ab3..fd67b56 100644
--- a/content/cn/docs/how-to-reform-a-legacy-system/index.html
+++ b/content/cn/docs/how-to-reform-a-legacy-system/index.html
@@ -895,11 +895,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -907,7 +907,7 @@
 
 
 
-  4 分钟 阅读
+  6 分钟 阅读
 
 </p>
     
@@ -924,11 +924,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -936,7 +936,7 @@
 
 
 
-  少于 1 分钟 阅读
+  4 分钟 阅读
 
 </p>
     
@@ -953,11 +953,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -965,7 +965,7 @@
 
 
 
-  1 分钟 阅读
+  少于 1 分钟 阅读
 
 </p>
     
@@ -982,11 +982,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/cn/docs/jira_beginner_guide/index.html b/content/cn/docs/jira_beginner_guide/index.html
index a847916..f0f9c07 100644
--- a/content/cn/docs/jira_beginner_guide/index.html
+++ b/content/cn/docs/jira_beginner_guide/index.html
@@ -552,11 +552,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -564,7 +564,7 @@
 
 
 
-  4 分钟 阅读
+  6 分钟 阅读
 
 </p>
     
@@ -581,11 +581,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -593,7 +593,7 @@
 
 
 
-  少于 1 分钟 阅读
+  4 分钟 阅读
 
 </p>
     
@@ -610,11 +610,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -622,7 +622,7 @@
 
 
 
-  1 分钟 阅读
+  少于 1 分钟 阅读
 
 </p>
     
@@ -639,11 +639,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/cn/docs/join_the_community/index.html b/content/cn/docs/join_the_community/index.html
index 81d1ca5..c615e62 100644
--- a/content/cn/docs/join_the_community/index.html
+++ b/content/cn/docs/join_the_community/index.html
@@ -618,11 +618,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -630,7 +630,7 @@
 
 
 
-  4 分钟 阅读
+  6 分钟 阅读
 
 </p>
     
@@ -647,11 +647,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -659,7 +659,7 @@
 
 
 
-  少于 1 分钟 阅读
+  4 分钟 阅读
 
 </p>
     
@@ -676,11 +676,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -688,7 +688,7 @@
 
 
 
-  1 分钟 阅读
+  少于 1 分钟 阅读
 
 </p>
     
@@ -705,11 +705,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/cn/docs/linuxcon-workshop-demo/index.html b/content/cn/docs/linuxcon-workshop-demo/index.html
index 73db12d..7674627 100644
--- a/content/cn/docs/linuxcon-workshop-demo/index.html
+++ b/content/cn/docs/linuxcon-workshop-demo/index.html
@@ -1290,11 +1290,11 @@ DevOps在微服务开发中的实践。希望能对大家有所帮助。</p>
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -1302,7 +1302,7 @@ DevOps在微服务开发中的实践。希望能对大家有所帮助。</p>
 
 
 
-  4 分钟 阅读
+  6 分钟 阅读
 
 </p>
     
@@ -1319,11 +1319,11 @@ DevOps在微服务开发中的实践。希望能对大家有所帮助。</p>
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -1331,7 +1331,7 @@ DevOps在微服务开发中的实践。希望能对大家有所帮助。</p>
 
 
 
-  少于 1 分钟 阅读
+  4 分钟 阅读
 
 </p>
     
@@ -1348,11 +1348,11 @@ DevOps在微服务开发中的实践。希望能对大家有所帮助。</p>
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -1360,7 +1360,7 @@ DevOps在微服务开发中的实践。希望能对大家有所帮助。</p>
 
 
 
-  1 分钟 阅读
+  少于 1 分钟 阅读
 
 </p>
     
@@ -1377,11 +1377,11 @@ DevOps在微服务开发中的实践。希望能对大家有所帮助。</p>
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/cn/docs/maven_dependency_management/index.html b/content/cn/docs/maven_dependency_management/index.html
index b885f27..e85a216 100644
--- a/content/cn/docs/maven_dependency_management/index.html
+++ b/content/cn/docs/maven_dependency_management/index.html
@@ -643,11 +643,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -655,7 +655,7 @@
 
 
 
-  4 分钟 阅读
+  6 分钟 阅读
 
 </p>
     
@@ -672,11 +672,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -684,7 +684,7 @@
 
 
 
-  少于 1 分钟 阅读
+  4 分钟 阅读
 
 </p>
     
@@ -701,11 +701,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -713,7 +713,7 @@
 
 
 
-  1 分钟 阅读
+  少于 1 分钟 阅读
 
 </p>
     
@@ -730,11 +730,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/cn/docs/open-design/index.html b/content/cn/docs/open-design/index.html
index 7bea68a..b1bbbcf 100644
--- a/content/cn/docs/open-design/index.html
+++ b/content/cn/docs/open-design/index.html
@@ -838,11 +838,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -850,7 +850,7 @@
 
 
 
-  4 分钟 阅读
+  6 分钟 阅读
 
 </p>
     
@@ -867,11 +867,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -879,7 +879,7 @@
 
 
 
-  少于 1 分钟 阅读
+  4 分钟 阅读
 
 </p>
     
@@ -896,11 +896,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -908,7 +908,7 @@
 
 
 
-  1 分钟 阅读
+  少于 1 分钟 阅读
 
 </p>
     
@@ -925,11 +925,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/cn/docs/performance-test-on-seckill-with-jmeter/index.html b/content/cn/docs/performance-test-on-seckill-with-jmeter/index.html
index b8b2c2e..ebfb07d 100644
--- a/content/cn/docs/performance-test-on-seckill-with-jmeter/index.html
+++ b/content/cn/docs/performance-test-on-seckill-with-jmeter/index.html
@@ -648,11 +648,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -660,7 +660,7 @@
 
 
 
-  4 分钟 阅读
+  6 分钟 阅读
 
 </p>
     
@@ -677,11 +677,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -689,7 +689,7 @@
 
 
 
-  少于 1 分钟 阅读
+  4 分钟 阅读
 
 </p>
     
@@ -706,11 +706,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -718,7 +718,7 @@
 
 
 
-  1 分钟 阅读
+  少于 1 分钟 阅读
 
 </p>
     
@@ -735,11 +735,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/cn/docs/release_note_1_0_0.html b/content/cn/docs/release_note_1_0_0.html
index d2ea2da..bef7ac4 100644
--- a/content/cn/docs/release_note_1_0_0.html
+++ b/content/cn/docs/release_note_1_0_0.html
@@ -722,11 +722,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -734,7 +734,7 @@
 
 
 
-  4 分钟 阅读
+  6 分钟 阅读
 
 </p>
     
@@ -751,11 +751,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -763,7 +763,7 @@
 
 
 
-  少于 1 分钟 阅读
+  4 分钟 阅读
 
 </p>
     
@@ -780,11 +780,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -792,7 +792,7 @@
 
 
 
-  1 分钟 阅读
+  少于 1 分钟 阅读
 
 </p>
     
diff --git a/content/cn/docs/saga_pack_design/index.html b/content/cn/docs/saga_pack_design/index.html
index 2886346..ead5512 100644
--- a/content/cn/docs/saga_pack_design/index.html
+++ b/content/cn/docs/saga_pack_design/index.html
@@ -681,11 +681,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -693,7 +693,7 @@
 
 
 
-  4 分钟 阅读
+  6 分钟 阅读
 
 </p>
     
@@ -710,11 +710,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -722,7 +722,7 @@
 
 
 
-  少于 1 分钟 阅读
+  4 分钟 阅读
 
 </p>
     
@@ -739,11 +739,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -751,7 +751,7 @@
 
 
 
-  1 分钟 阅读
+  少于 1 分钟 阅读
 
 </p>
     
@@ -768,11 +768,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/cn/docs/saga_with_cucumber/index.html b/content/cn/docs/saga_with_cucumber/index.html
index 808eda6..1dba114 100644
--- a/content/cn/docs/saga_with_cucumber/index.html
+++ b/content/cn/docs/saga_with_cucumber/index.html
@@ -771,7 +771,7 @@
 ">向前</a>
     
     
-      <a href="/cn/docs/easy-build-microservice-system-part-I/" class="pagination--pager" title="轻松微服务系列:从一键构建微服务和DDD设计开始
+      <a href="/cn/docs/how-to-grow-up-to-be-an-apache-committer/" class="pagination--pager" title="如何从一名开源小白成长为Apache Committer
 ">向后</a>
     
   </nav>
@@ -855,11 +855,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -867,7 +867,7 @@
 
 
 
-  4 分钟 阅读
+  6 分钟 阅读
 
 </p>
     
@@ -884,11 +884,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -896,7 +896,7 @@
 
 
 
-  少于 1 分钟 阅读
+  4 分钟 阅读
 
 </p>
     
@@ -913,11 +913,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -925,7 +925,7 @@
 
 
 
-  1 分钟 阅读
+  少于 1 分钟 阅读
 
 </p>
     
@@ -942,11 +942,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/cn/docs/seckill-development-journey-part-I/index.html b/content/cn/docs/seckill-development-journey-part-I/index.html
index a5e9678..a46cd11 100644
--- a/content/cn/docs/seckill-development-journey-part-I/index.html
+++ b/content/cn/docs/seckill-development-journey-part-I/index.html
@@ -582,11 +582,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -594,7 +594,7 @@
 
 
 
-  4 分钟 阅读
+  6 分钟 阅读
 
 </p>
     
@@ -611,11 +611,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -623,7 +623,7 @@
 
 
 
-  少于 1 分钟 阅读
+  4 分钟 阅读
 
 </p>
     
@@ -640,11 +640,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -652,7 +652,7 @@
 
 
 
-  1 分钟 阅读
+  少于 1 分钟 阅读
 
 </p>
     
@@ -669,11 +669,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/cn/docs/seckill-development-journey-part-II/index.html b/content/cn/docs/seckill-development-journey-part-II/index.html
index 7b36b7e..23d1257 100644
--- a/content/cn/docs/seckill-development-journey-part-II/index.html
+++ b/content/cn/docs/seckill-development-journey-part-II/index.html
@@ -571,11 +571,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -583,7 +583,7 @@
 
 
 
-  4 分钟 阅读
+  6 分钟 阅读
 
 </p>
     
@@ -600,11 +600,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -612,7 +612,7 @@
 
 
 
-  少于 1 分钟 阅读
+  4 分钟 阅读
 
 </p>
     
@@ -629,11 +629,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -641,7 +641,7 @@
 
 
 
-  1 分钟 阅读
+  少于 1 分钟 阅读
 
 </p>
     
@@ -658,11 +658,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/cn/docs/seckill-development-journey-part-III/index.html b/content/cn/docs/seckill-development-journey-part-III/index.html
index 7b5541b..b3b50f1 100644
--- a/content/cn/docs/seckill-development-journey-part-III/index.html
+++ b/content/cn/docs/seckill-development-journey-part-III/index.html
@@ -585,11 +585,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -597,7 +597,7 @@
 
 
 
-  4 分钟 阅读
+  6 分钟 阅读
 
 </p>
     
@@ -614,11 +614,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -626,7 +626,7 @@
 
 
 
-  少于 1 分钟 阅读
+  4 分钟 阅读
 
 </p>
     
@@ -643,11 +643,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -655,7 +655,7 @@
 
 
 
-  1 分钟 阅读
+  少于 1 分钟 阅读
 
 </p>
     
@@ -672,11 +672,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/cn/docs/stress-test-on-company-with-jmeter-in-k8s/index.html b/content/cn/docs/stress-test-on-company-with-jmeter-in-k8s/index.html
index e6e102b..adfde74 100644
--- a/content/cn/docs/stress-test-on-company-with-jmeter-in-k8s/index.html
+++ b/content/cn/docs/stress-test-on-company-with-jmeter-in-k8s/index.html
@@ -683,11 +683,11 @@ sampler.getHeaderManager<span class="o">()</span>.removeHeaderNamed<span class="
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -695,7 +695,7 @@ sampler.getHeaderManager<span class="o">()</span>.removeHeaderNamed<span class="
 
 
 
-  4 分钟 阅读
+  6 分钟 阅读
 
 </p>
     
@@ -712,11 +712,11 @@ sampler.getHeaderManager<span class="o">()</span>.removeHeaderNamed<span class="
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -724,7 +724,7 @@ sampler.getHeaderManager<span class="o">()</span>.removeHeaderNamed<span class="
 
 
 
-  少于 1 分钟 阅读
+  4 分钟 阅读
 
 </p>
     
@@ -741,11 +741,11 @@ sampler.getHeaderManager<span class="o">()</span>.removeHeaderNamed<span class="
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -753,7 +753,7 @@ sampler.getHeaderManager<span class="o">()</span>.removeHeaderNamed<span class="
 
 
 
-  1 分钟 阅读
+  少于 1 分钟 阅读
 
 </p>
     
@@ -770,11 +770,11 @@ sampler.getHeaderManager<span class="o">()</span>.removeHeaderNamed<span class="
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/cn/docs/tracing-with-servicecomb/index.html b/content/cn/docs/tracing-with-servicecomb/index.html
index e0ef046..bf20922 100644
--- a/content/cn/docs/tracing-with-servicecomb/index.html
+++ b/content/cn/docs/tracing-with-servicecomb/index.html
@@ -634,11 +634,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -646,7 +646,7 @@
 
 
 
-  4 分钟 阅读
+  6 分钟 阅读
 
 </p>
     
@@ -663,11 +663,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -675,7 +675,7 @@
 
 
 
-  少于 1 分钟 阅读
+  4 分钟 阅读
 
 </p>
     
@@ -692,11 +692,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -704,7 +704,7 @@
 
 
 
-  1 分钟 阅读
+  少于 1 分钟 阅读
 
 </p>
     
@@ -721,11 +721,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/cn/year-archive/index.html b/content/cn/year-archive/index.html
index 793367d..9edb5a5 100644
--- a/content/cn/year-archive/index.html
+++ b/content/cn/year-archive/index.html
@@ -400,11 +400,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -412,7 +412,7 @@
 
 
 
-  少于 1 分钟 阅读
+  5 分钟 阅读
 
 </p>
     
@@ -431,11 +431,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -462,11 +462,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -474,7 +474,7 @@
 
 
 
-  1 分钟 阅读
+  少于 1 分钟 阅读
 
 </p>
     
@@ -555,37 +555,6 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-III/" rel="permalink">轻松微服务系列:开发高性能边缘服务
-</a>
-      
-    </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:开发高性能边缘服务
-</p>
-    
-      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
-
-
-
-
-  少于 1 分钟 阅读
-
-</p>
-    
-  </article>
-</div>
-
-        
-          
-          
-          
-
-
-
-<div class="list__item">
-  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
-    
-    <h2 class="archive__item-title" itemprop="headline">
-      
         <a href="/cn/docs/how-to-grow-up-to-be-an-apache-committer/" rel="permalink">如何从一名开源小白成长为Apache Committer
 </a>
       
@@ -617,68 +586,6 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-II/" rel="permalink">轻松微服务系列:快速实现客户关系管理系统的用户服务
-</a>
-      
-    </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:快速实现客户关系管理系统的用户服务
-</p>
-    
-      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
-
-
-
-
-  2 分钟 阅读
-
-</p>
-    
-  </article>
-</div>
-
-        
-          
-          
-          
-
-
-
-<div class="list__item">
-  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
-    
-    <h2 class="archive__item-title" itemprop="headline">
-      
-        <a href="/cn/docs/easy-build-microservice-system-part-I/" rel="permalink">轻松微服务系列:从一键构建微服务和DDD设计开始
-</a>
-      
-    </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:从一键构建微服务和DDD设计开始
-</p>
-    
-      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
-
-
-
-
-  少于 1 分钟 阅读
-
-</p>
-    
-  </article>
-</div>
-
-        
-          
-          
-          
-
-
-
-<div class="list__item">
-  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
-    
-    <h2 class="archive__item-title" itemprop="headline">
-      
         <a href="/cn/docs/saga_with_cucumber/" rel="permalink">ServiceComb Saga使用Cucumber做验收测试源码分析
 </a>
       
@@ -1494,22 +1401,6 @@
 <!-- If not equal to previous then it must be unique as sorted -->
 
 
-
-
-
-<!-- If not equal to previous then it must be unique as sorted -->
-
-
-<!-- Push to group_names -->
-
-
-
-
-
-
-<!-- If not equal to previous then it must be unique as sorted -->
-
-
 <!-- Push to group_names -->
 
 
@@ -1520,12 +1411,6 @@
 <!-- If not equal to previous then it must be unique as sorted -->
 
 
-
-
-
-<!-- If not equal to previous then it must be unique as sorted -->
-
-
 <!-- Push to group_names -->
 
 
@@ -1536,12 +1421,6 @@
 <!-- If not equal to previous then it must be unique as sorted -->
 
 
-
-
-
-<!-- If not equal to previous then it must be unique as sorted -->
-
-
 <!-- Push to group_names -->
 
 
@@ -1572,12 +1451,6 @@
 <!-- If not equal to previous then it must be unique as sorted -->
 
 
-
-
-
-<!-- If not equal to previous then it must be unique as sorted -->
-
-
 <!-- Push to group_names -->
 
 
@@ -1628,12 +1501,6 @@
 <!-- If not equal to previous then it must be unique as sorted -->
 
 
-
-
-
-<!-- If not equal to previous then it must be unique as sorted -->
-
-
 <!-- Push to group_names -->
 
 
@@ -2313,14 +2180,6 @@
 
 
 
-<!-- Collect if contains -->
-
-
-
-<!-- Push to group_items -->
-
-
-
         
           
           <h2 id="1-0-0" class="archive__subtitle">1.0.0</h2>
@@ -2356,68 +2215,6 @@
           
         
           
-          <h2 id="api-gateway" class="archive__subtitle">API Gateway</h2>
-          
-            
-
-
-
-<div class="list__item">
-  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
-    
-    <h2 class="archive__item-title" itemprop="headline">
-      
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
-</a>
-      
-    </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
-</p>
-    
-      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
-
-
-
-
-  1 分钟 阅读
-
-</p>
-    
-  </article>
-</div>
-
-          
-            
-
-
-
-<div class="list__item">
-  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
-    
-    <h2 class="archive__item-title" itemprop="headline">
-      
-        <a href="/cn/docs/easy-build-microservice-system-part-III/" rel="permalink">轻松微服务系列:开发高性能边缘服务
-</a>
-      
-    </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:开发高性能边缘服务
-</p>
-    
-      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
-
-
-
-
-  少于 1 分钟 阅读
-
-</p>
-    
-  </article>
-</div>
-
-          
-        
-          
           <h2 id="apache-way" class="archive__subtitle">Apache Way</h2>
           
             
@@ -2451,7 +2248,7 @@
           
         
           
-          <h2 id="archetypes" class="archive__subtitle">Archetypes</h2>
+          <h2 id="crm" class="archive__subtitle">CRM</h2>
           
             
 
@@ -2462,11 +2259,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-II/" rel="permalink">轻松微服务系列:快速实现客户关系管理系统的用户服务
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:快速实现客户关系管理系统的用户服务
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -2474,7 +2271,7 @@
 
 
 
-  2 分钟 阅读
+  5 分钟 阅读
 
 </p>
     
@@ -2482,6 +2279,10 @@
 </div>
 
           
+        
+          
+          <h2 id="committer" class="archive__subtitle">Committer</h2>
+          
             
 
 
@@ -2491,11 +2292,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-I/" rel="permalink">轻松微服务系列:从一键构建微服务和DDD设计开始
+        <a href="/cn/docs/how-to-grow-up-to-be-an-apache-committer/" rel="permalink">如何从一名开源小白成长为Apache Committer
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:从一键构建微服务和DDD设计开始
+    <p class="archive__item-excerpt" itemprop="description">如何从一名开源小白成长为Apache Committer
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -2513,36 +2314,7 @@
           
         
           
-          <h2 id="authentication" class="archive__subtitle">Authentication</h2>
-          
-            
-
-
-
-<div class="list__item">
-  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
-    
-    <h2 class="archive__item-title" itemprop="headline">
-      
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
-</a>
-      
-    </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
-</p>
-    
-      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
-
-
-
-
-  1 分钟 阅读
-
-</p>
-    
-  </article>
-</div>
-
+          <h2 id="cucumber" class="archive__subtitle">Cucumber</h2>
           
             
 
@@ -2553,11 +2325,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-II/" rel="permalink">轻松微服务系列:快速实现客户关系管理系统的用户服务
+        <a href="/cn/docs/saga_with_cucumber/" rel="permalink">ServiceComb Saga使用Cucumber做验收测试源码分析
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:快速实现客户关系管理系统的用户服务
+    <p class="archive__item-excerpt" itemprop="description">ServiceComb Saga使用Cucumber做验收测试源码分析
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -2565,7 +2337,7 @@
 
 
 
-  2 分钟 阅读
+  3 分钟 阅读
 
 </p>
     
@@ -2575,7 +2347,7 @@
           
         
           
-          <h2 id="committer" class="archive__subtitle">Committer</h2>
+          <h2 id="ddd" class="archive__subtitle">DDD</h2>
           
             
 
@@ -2586,11 +2358,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/how-to-grow-up-to-be-an-apache-committer/" rel="permalink">如何从一名开源小白成长为Apache Committer
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">如何从一名开源小白成长为Apache Committer
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -2598,7 +2370,7 @@
 
 
 
-  少于 1 分钟 阅读
+  5 分钟 阅读
 
 </p>
     
@@ -2608,7 +2380,7 @@
           
         
           
-          <h2 id="cucumber" class="archive__subtitle">Cucumber</h2>
+          <h2 id="edge" class="archive__subtitle">Edge</h2>
           
             
 
@@ -2619,11 +2391,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/saga_with_cucumber/" rel="permalink">ServiceComb Saga使用Cucumber做验收测试源码分析
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServiceComb Saga使用Cucumber做验收测试源码分析
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -2631,7 +2403,7 @@
 
 
 
-  3 分钟 阅读
+  5 分钟 阅读
 
 </p>
     
@@ -2641,36 +2413,7 @@
           
         
           
-          <h2 id="edge-service" class="archive__subtitle">Edge Service</h2>
-          
-            
-
-
-
-<div class="list__item">
-  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
-    
-    <h2 class="archive__item-title" itemprop="headline">
-      
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
-</a>
-      
-    </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
-</p>
-    
-      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
-
-
-
-
-  1 分钟 阅读
-
-</p>
-    
-  </article>
-</div>
-
+          <h2 id="jpa" class="archive__subtitle">JPA</h2>
           
             
 
@@ -2681,11 +2424,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-III/" rel="permalink">轻松微服务系列:开发高性能边缘服务
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:开发高性能边缘服务
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -2693,7 +2436,7 @@
 
 
 
-  少于 1 分钟 阅读
+  5 分钟 阅读
 
 </p>
     
@@ -2714,11 +2457,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-II/" rel="permalink">轻松微服务系列:快速实现客户关系管理系统的用户服务
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:快速实现客户关系管理系统的用户服务
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -2726,7 +2469,7 @@
 
 
 
-  2 分钟 阅读
+  5 分钟 阅读
 
 </p>
     
@@ -2908,73 +2651,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-II/" rel="permalink">轻松微服务系列:快速实现客户关系管理系统的用户服务
-</a>
-      
-    </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:快速实现客户关系管理系统的用户服务
-</p>
-    
-      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
-
-
-
-
-  2 分钟 阅读
-
-</p>
-    
-  </article>
-</div>
-
-          
-            
-
-
-
-<div class="list__item">
-  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
-    
-    <h2 class="archive__item-title" itemprop="headline">
-      
-        <a href="/cn/docs/easy-build-microservice-system-part-I/" rel="permalink">轻松微服务系列:从一键构建微服务和DDD设计开始
-</a>
-      
-    </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:从一键构建微服务和DDD设计开始
-</p>
-    
-      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
-
-
-
-
-  少于 1 分钟 阅读
-
-</p>
-    
-  </article>
-</div>
-
-          
-        
-          
-          <h2 id="zuul" class="archive__subtitle">Zuul</h2>
-          
-            
-
-
-
-<div class="list__item">
-  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
-    
-    <h2 class="archive__item-title" itemprop="headline">
-      
-        <a href="/cn/docs/easy-build-microservice-system-part-III/" rel="permalink">轻松微服务系列:开发高性能边缘服务
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:开发高性能边缘服务
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -2982,7 +2663,7 @@
 
 
 
-  少于 1 分钟 阅读
+  5 分钟 阅读
 
 </p>
     
diff --git a/content/developers/team/index.html b/content/developers/team/index.html
index bbe9735..3a6847f 100644
--- a/content/developers/team/index.html
+++ b/content/developers/team/index.html
@@ -475,6 +475,18 @@
       <td>*</td>
     </tr>
     <tr>
+      <td>yangbor</td>
+      <td>Yang Bo</td>
+      <td>Huawei</td>
+      <td> </td>
+    </tr>
+    <tr>
+      <td>zenlinTechnofreak</td>
+      <td>Lin Zhinan</td>
+      <td>Huawei</td>
+      <td> </td>
+    </tr>
+    <tr>
       <td>zhangqi</td>
       <td>Zhang qi</td>
       <td>Huawei</td>
@@ -519,6 +531,16 @@
       <td>SupWisdom</td>
     </tr>
     <tr>
+      <td>cherrylzhao</td>
+      <td>Zhao Jun</td>
+      <td>JD.com</td>
+    </tr>
+    <tr>
+      <td>crystaldust</td>
+      <td>Ju Zheng</td>
+      <td>Huawei</td>
+    </tr>
+    <tr>
       <td>imlidian</td>
       <td>Li Dian</td>
       <td>Huawei</td>
@@ -529,6 +551,11 @@
       <td>Pactera</td>
     </tr>
     <tr>
+      <td>KomachiSion</td>
+      <td>Yang Yi</td>
+      <td>JD.com</td>
+    </tr>
+    <tr>
       <td>laijianbin</td>
       <td>Lai Jianbin</td>
       <td> </td>
@@ -599,21 +626,11 @@
       <td> </td>
     </tr>
     <tr>
-      <td>yangbor</td>
-      <td>Yang Bo</td>
-      <td>Huawei</td>
-    </tr>
-    <tr>
       <td>yhs0092</td>
       <td> </td>
       <td> </td>
     </tr>
     <tr>
-      <td>zenlinTechnofreak</td>
-      <td>Lin Zhinan</td>
-      <td>Huawei</td>
-    </tr>
-    <tr>
       <td>zhanglongchun</td>
       <td>Zhang LongChun</td>
       <td> </td>
diff --git a/content/docs/apache-servicecomb-incubating-day-report/index.html b/content/docs/apache-servicecomb-incubating-day-report/index.html
index f7b0703..be270ab 100644
--- a/content/docs/apache-servicecomb-incubating-day-report/index.html
+++ b/content/docs/apache-servicecomb-incubating-day-report/index.html
@@ -465,7 +465,7 @@ About 80 participants attended the workshop on-site and about 300 participants w
 ">Previous</a>
     
     
-      <a href="/cn/docs/easy-build-microservice-system-part-IV/" class="pagination--pager" title="轻松微服务系列:边缘服务支持统一认证
+      <a href="/cn/docs/consul-servicemesh" class="pagination--pager" title="Consul Service Mesh实战
 ">Next</a>
     
   </nav>
@@ -549,11 +549,11 @@ About 80 participants attended the workshop on-site and about 300 participants w
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -561,7 +561,7 @@ About 80 participants attended the workshop on-site and about 300 participants w
 
 
 
-  4 minute read
+  6 minute read
 
 </p>
     
@@ -578,11 +578,11 @@ About 80 participants attended the workshop on-site and about 300 participants w
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -590,7 +590,7 @@ About 80 participants attended the workshop on-site and about 300 participants w
 
 
 
-  less than 1 minute read
+  4 minute read
 
 </p>
     
@@ -607,11 +607,11 @@ About 80 participants attended the workshop on-site and about 300 participants w
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -619,7 +619,7 @@ About 80 participants attended the workshop on-site and about 300 participants w
 
 
 
-  1 minute read
+  less than 1 minute read
 
 </p>
     
@@ -636,11 +636,11 @@ About 80 participants attended the workshop on-site and about 300 participants w
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/docs/apache-servicecomb-incubating-day/index.html b/content/docs/apache-servicecomb-incubating-day/index.html
index 7a621a1..c54b5c3 100644
--- a/content/docs/apache-servicecomb-incubating-day/index.html
+++ b/content/docs/apache-servicecomb-incubating-day/index.html
@@ -567,7 +567,7 @@ The microservice open source project - Apache ServiceComb (incubating) will host
       
   <nav class="pagination">
     
-      <a href="/cn/docs/easy-build-microservice-system-part-III/" class="pagination--pager" title="轻松微服务系列:开发高性能边缘服务
+      <a href="/cn/docs/how-to-grow-up-to-be-an-apache-committer/" class="pagination--pager" title="如何从一名开源小白成长为Apache Committer
 ">Previous</a>
     
     
@@ -655,11 +655,11 @@ The microservice open source project - Apache ServiceComb (incubating) will host
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -667,7 +667,7 @@ The microservice open source project - Apache ServiceComb (incubating) will host
 
 
 
-  4 minute read
+  6 minute read
 
 </p>
     
@@ -684,11 +684,11 @@ The microservice open source project - Apache ServiceComb (incubating) will host
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -696,7 +696,7 @@ The microservice open source project - Apache ServiceComb (incubating) will host
 
 
 
-  less than 1 minute read
+  4 minute read
 
 </p>
     
@@ -713,11 +713,11 @@ The microservice open source project - Apache ServiceComb (incubating) will host
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -725,7 +725,7 @@ The microservice open source project - Apache ServiceComb (incubating) will host
 
 
 
-  1 minute read
+  less than 1 minute read
 
 </p>
     
@@ -742,11 +742,11 @@ The microservice open source project - Apache ServiceComb (incubating) will host
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/docs/autoscale-on-company/index.html b/content/docs/autoscale-on-company/index.html
index 55f3fe0..5f36c1e 100644
--- a/content/docs/autoscale-on-company/index.html
+++ b/content/docs/autoscale-on-company/index.html
@@ -652,11 +652,11 @@ Fig 5    HPA Data of The End</p>
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -664,7 +664,7 @@ Fig 5    HPA Data of The End</p>
 
 
 
-  4 minute read
+  6 minute read
 
 </p>
     
@@ -681,11 +681,11 @@ Fig 5    HPA Data of The End</p>
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -693,7 +693,7 @@ Fig 5    HPA Data of The End</p>
 
 
 
-  less than 1 minute read
+  4 minute read
 
 </p>
     
@@ -710,11 +710,11 @@ Fig 5    HPA Data of The End</p>
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -722,7 +722,7 @@ Fig 5    HPA Data of The End</p>
 
 
 
-  1 minute read
+  less than 1 minute read
 
 </p>
     
@@ -739,11 +739,11 @@ Fig 5    HPA Data of The End</p>
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/docs/communication-btw-sc-ms/index.html b/content/docs/communication-btw-sc-ms/index.html
index 65d7ce0..5cbb9da 100644
--- a/content/docs/communication-btw-sc-ms/index.html
+++ b/content/docs/communication-btw-sc-ms/index.html
@@ -554,11 +554,11 @@ When Consumer needs to communicate to Provider then consumer reads endpoints of
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -566,7 +566,7 @@ When Consumer needs to communicate to Provider then consumer reads endpoints of
 
 
 
-  4 minute read
+  6 minute read
 
 </p>
     
@@ -583,11 +583,11 @@ When Consumer needs to communicate to Provider then consumer reads endpoints of
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -595,7 +595,7 @@ When Consumer needs to communicate to Provider then consumer reads endpoints of
 
 
 
-  less than 1 minute read
+  4 minute read
 
 </p>
     
@@ -612,11 +612,11 @@ When Consumer needs to communicate to Provider then consumer reads endpoints of
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -624,7 +624,7 @@ When Consumer needs to communicate to Provider then consumer reads endpoints of
 
 
 
-  1 minute read
+  less than 1 minute read
 
 </p>
     
@@ -641,11 +641,11 @@ When Consumer needs to communicate to Provider then consumer reads endpoints of
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/docs/company-on-kubernetes/index.html b/content/docs/company-on-kubernetes/index.html
index 7f78613..c3fff96 100644
--- a/content/docs/company-on-kubernetes/index.html
+++ b/content/docs/company-on-kubernetes/index.html
@@ -649,11 +649,11 @@ kubectl get svc company-manager -o yaml | grep nodePort -C 1
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -661,7 +661,7 @@ kubectl get svc company-manager -o yaml | grep nodePort -C 1
 
 
 
-  4 minute read
+  6 minute read
 
 </p>
     
@@ -678,11 +678,11 @@ kubectl get svc company-manager -o yaml | grep nodePort -C 1
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -690,7 +690,7 @@ kubectl get svc company-manager -o yaml | grep nodePort -C 1
 
 
 
-  less than 1 minute read
+  4 minute read
 
 </p>
     
@@ -707,11 +707,11 @@ kubectl get svc company-manager -o yaml | grep nodePort -C 1
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -719,7 +719,7 @@ kubectl get svc company-manager -o yaml | grep nodePort -C 1
 
 
 
-  1 minute read
+  less than 1 minute read
 
 </p>
     
@@ -736,11 +736,11 @@ kubectl get svc company-manager -o yaml | grep nodePort -C 1
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/docs/distributed_saga_1/index.html b/content/docs/distributed_saga_1/index.html
index 5ead921..d29d551 100644
--- a/content/docs/distributed_saga_1/index.html
+++ b/content/docs/distributed_saga_1/index.html
@@ -684,11 +684,11 @@ next blog post.</p>
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -696,7 +696,7 @@ next blog post.</p>
 
 
 
-  4 minute read
+  6 minute read
 
 </p>
     
@@ -713,11 +713,11 @@ next blog post.</p>
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -725,7 +725,7 @@ next blog post.</p>
 
 
 
-  less than 1 minute read
+  4 minute read
 
 </p>
     
@@ -742,11 +742,11 @@ next blog post.</p>
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -754,7 +754,7 @@ next blog post.</p>
 
 
 
-  1 minute read
+  less than 1 minute read
 
 </p>
     
@@ -771,11 +771,11 @@ next blog post.</p>
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/docs/distributed_saga_2/index.html b/content/docs/distributed_saga_2/index.html
index 51431e7..92dfb86 100644
--- a/content/docs/distributed_saga_2/index.html
+++ b/content/docs/distributed_saga_2/index.html
@@ -630,11 +630,11 @@ there are a few requirements on design of microservices to ensure saga consisten
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -642,7 +642,7 @@ there are a few requirements on design of microservices to ensure saga consisten
 
 
 
-  4 minute read
+  6 minute read
 
 </p>
     
@@ -659,11 +659,11 @@ there are a few requirements on design of microservices to ensure saga consisten
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -671,7 +671,7 @@ there are a few requirements on design of microservices to ensure saga consisten
 
 
 
-  less than 1 minute read
+  4 minute read
 
 </p>
     
@@ -688,11 +688,11 @@ there are a few requirements on design of microservices to ensure saga consisten
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -700,7 +700,7 @@ there are a few requirements on design of microservices to ensure saga consisten
 
 
 
-  1 minute read
+  less than 1 minute read
 
 </p>
     
@@ -717,11 +717,11 @@ there are a few requirements on design of microservices to ensure saga consisten
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/docs/distributed_saga_3/index.html b/content/docs/distributed_saga_3/index.html
index a677dac..75cccb5 100644
--- a/content/docs/distributed_saga_3/index.html
+++ b/content/docs/distributed_saga_3/index.html
@@ -663,11 +663,11 @@ and allows easier troubleshooting of any problem occurred in transactions.</p>
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -675,7 +675,7 @@ and allows easier troubleshooting of any problem occurred in transactions.</p>
 
 
 
-  4 minute read
+  6 minute read
 
 </p>
     
@@ -692,11 +692,11 @@ and allows easier troubleshooting of any problem occurred in transactions.</p>
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -704,7 +704,7 @@ and allows easier troubleshooting of any problem occurred in transactions.</p>
 
 
 
-  less than 1 minute read
+  4 minute read
 
 </p>
     
@@ -721,11 +721,11 @@ and allows easier troubleshooting of any problem occurred in transactions.</p>
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -733,7 +733,7 @@ and allows easier troubleshooting of any problem occurred in transactions.</p>
 
 
 
-  1 minute read
+  less than 1 minute read
 
 </p>
     
@@ -750,11 +750,11 @@ and allows easier troubleshooting of any problem occurred in transactions.</p>
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/docs/go-to-cloud/index.html b/content/docs/go-to-cloud/index.html
index e919fe7..1428a0f 100644
--- a/content/docs/go-to-cloud/index.html
+++ b/content/docs/go-to-cloud/index.html
@@ -698,11 +698,11 @@ watching microservice 4 successfully,服务注册成功<br />
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -710,7 +710,7 @@ watching microservice 4 successfully,服务注册成功<br />
 
 
 
-  4 minute read
+  6 minute read
 
 </p>
     
@@ -727,11 +727,11 @@ watching microservice 4 successfully,服务注册成功<br />
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -739,7 +739,7 @@ watching microservice 4 successfully,服务注册成功<br />
 
 
 
-  less than 1 minute read
+  4 minute read
 
 </p>
     
@@ -756,11 +756,11 @@ watching microservice 4 successfully,服务注册成功<br />
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -768,7 +768,7 @@ watching microservice 4 successfully,服务注册成功<br />
 
 
 
-  1 minute read
+  less than 1 minute read
 
 </p>
     
@@ -785,11 +785,11 @@ watching microservice 4 successfully,服务注册成功<br />
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/docs/how-to-reform-a-legacy-system/index.html b/content/docs/how-to-reform-a-legacy-system/index.html
index 04ad176..cc20dbf 100644
--- a/content/docs/how-to-reform-a-legacy-system/index.html
+++ b/content/docs/how-to-reform-a-legacy-system/index.html
@@ -892,11 +892,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -904,7 +904,7 @@
 
 
 
-  4 minute read
+  6 minute read
 
 </p>
     
@@ -921,11 +921,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -933,7 +933,7 @@
 
 
 
-  less than 1 minute read
+  4 minute read
 
 </p>
     
@@ -950,11 +950,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -962,7 +962,7 @@
 
 
 
-  1 minute read
+  less than 1 minute read
 
 </p>
     
@@ -979,11 +979,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/docs/howto-upgrade-topzipkin2/index.html b/content/docs/howto-upgrade-topzipkin2/index.html
index 5eb544e..46150d0 100644
--- a/content/docs/howto-upgrade-topzipkin2/index.html
+++ b/content/docs/howto-upgrade-topzipkin2/index.html
@@ -755,11 +755,11 @@ handlers/handler-tracing-zipkin/pom.xml
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -767,7 +767,7 @@ handlers/handler-tracing-zipkin/pom.xml
 
 
 
-  4 minute read
+  6 minute read
 
 </p>
     
@@ -784,11 +784,11 @@ handlers/handler-tracing-zipkin/pom.xml
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -796,7 +796,7 @@ handlers/handler-tracing-zipkin/pom.xml
 
 
 
-  less than 1 minute read
+  4 minute read
 
 </p>
     
@@ -813,11 +813,11 @@ handlers/handler-tracing-zipkin/pom.xml
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -825,7 +825,7 @@ handlers/handler-tracing-zipkin/pom.xml
 
 
 
-  1 minute read
+  less than 1 minute read
 
 </p>
     
@@ -842,11 +842,11 @@ handlers/handler-tracing-zipkin/pom.xml
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/docs/linuxcon-workshop-demo/index.html b/content/docs/linuxcon-workshop-demo/index.html
index 9590e36..d9b3b2d 100644
--- a/content/docs/linuxcon-workshop-demo/index.html
+++ b/content/docs/linuxcon-workshop-demo/index.html
@@ -1287,11 +1287,11 @@ DevOps在微服务开发中的实践。希望能对大家有所帮助。</p>
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -1299,7 +1299,7 @@ DevOps在微服务开发中的实践。希望能对大家有所帮助。</p>
 
 
 
-  4 minute read
+  6 minute read
 
 </p>
     
@@ -1316,11 +1316,11 @@ DevOps在微服务开发中的实践。希望能对大家有所帮助。</p>
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -1328,7 +1328,7 @@ DevOps在微服务开发中的实践。希望能对大家有所帮助。</p>
 
 
 
-  less than 1 minute read
+  4 minute read
 
 </p>
     
@@ -1345,11 +1345,11 @@ DevOps在微服务开发中的实践。希望能对大家有所帮助。</p>
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -1357,7 +1357,7 @@ DevOps在微服务开发中的实践。希望能对大家有所帮助。</p>
 
 
 
-  1 minute read
+  less than 1 minute read
 
 </p>
     
@@ -1374,11 +1374,11 @@ DevOps在微服务开发中的实践。希望能对大家有所帮助。</p>
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/docs/release-note-1-0-0/index.html b/content/docs/release-note-1-0-0/index.html
index 9326c22..23b9098 100644
--- a/content/docs/release-note-1-0-0/index.html
+++ b/content/docs/release-note-1-0-0/index.html
@@ -553,7 +553,8 @@
 ">Previous</a>
     
     
-      <a href="#" class="pagination--pager disabled">Next</a>
+      <a href="/cn/docs/crm-part-I/" class="pagination--pager" title="客户管理系统微服务化实战-PartI
+">Next</a>
     
   </nav>
 
@@ -636,11 +637,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -648,7 +649,7 @@
 
 
 
-  less than 1 minute read
+  6 minute read
 
 </p>
     
@@ -665,11 +666,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -694,11 +695,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -706,7 +707,7 @@
 
 
 
-  1 minute read
+  less than 1 minute read
 
 </p>
     
diff --git a/content/docs/seckill-development-journey-part-I/index.html b/content/docs/seckill-development-journey-part-I/index.html
index fcc1a9d..162bdbe 100644
--- a/content/docs/seckill-development-journey-part-I/index.html
+++ b/content/docs/seckill-development-journey-part-I/index.html
@@ -581,11 +581,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -593,7 +593,7 @@
 
 
 
-  4 minute read
+  6 minute read
 
 </p>
     
@@ -610,11 +610,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -622,7 +622,7 @@
 
 
 
-  less than 1 minute read
+  4 minute read
 
 </p>
     
@@ -639,11 +639,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -651,7 +651,7 @@
 
 
 
-  1 minute read
+  less than 1 minute read
 
 </p>
     
@@ -668,11 +668,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/docs/seckill-development-journey-part-II/index.html b/content/docs/seckill-development-journey-part-II/index.html
index 97659b5..948406b 100644
--- a/content/docs/seckill-development-journey-part-II/index.html
+++ b/content/docs/seckill-development-journey-part-II/index.html
@@ -570,11 +570,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -582,7 +582,7 @@
 
 
 
-  4 minute read
+  6 minute read
 
 </p>
     
@@ -599,11 +599,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -611,7 +611,7 @@
 
 
 
-  less than 1 minute read
+  4 minute read
 
 </p>
     
@@ -628,11 +628,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -640,7 +640,7 @@
 
 
 
-  1 minute read
+  less than 1 minute read
 
 </p>
     
@@ -657,11 +657,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/docs/seckill-development-journey-part-III/index.html b/content/docs/seckill-development-journey-part-III/index.html
index 2817e57..898e37e 100644
--- a/content/docs/seckill-development-journey-part-III/index.html
+++ b/content/docs/seckill-development-journey-part-III/index.html
@@ -585,11 +585,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -597,7 +597,7 @@
 
 
 
-  4 minute read
+  6 minute read
 
 </p>
     
@@ -614,11 +614,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -626,7 +626,7 @@
 
 
 
-  less than 1 minute read
+  4 minute read
 
 </p>
     
@@ -643,11 +643,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -655,7 +655,7 @@
 
 
 
-  1 minute read
+  less than 1 minute read
 
 </p>
     
@@ -672,11 +672,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/docs/service-center-ui/index.html b/content/docs/service-center-ui/index.html
index 80377e3..c15505b 100644
--- a/content/docs/service-center-ui/index.html
+++ b/content/docs/service-center-ui/index.html
@@ -569,11 +569,11 @@ can also download the html client for their Schemas.</p>
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -581,7 +581,7 @@ can also download the html client for their Schemas.</p>
 
 
 
-  4 分钟 阅读
+  6 分钟 阅读
 
 </p>
     
@@ -598,11 +598,11 @@ can also download the html client for their Schemas.</p>
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -610,7 +610,7 @@ can also download the html client for their Schemas.</p>
 
 
 
-  少于 1 分钟 阅读
+  4 分钟 阅读
 
 </p>
     
@@ -627,11 +627,11 @@ can also download the html client for their Schemas.</p>
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -639,7 +639,7 @@ can also download the html client for their Schemas.</p>
 
 
 
-  1 分钟 阅读
+  少于 1 分钟 阅读
 
 </p>
     
@@ -656,11 +656,11 @@ can also download the html client for their Schemas.</p>
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/docs/service-registry-refactor-proposal/index.html b/content/docs/service-registry-refactor-proposal/index.html
index 6488db1..45e1e4b 100644
--- a/content/docs/service-registry-refactor-proposal/index.html
+++ b/content/docs/service-registry-refactor-proposal/index.html
@@ -569,11 +569,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -581,7 +581,7 @@
 
 
 
-  4 minute read
+  6 minute read
 
 </p>
     
@@ -598,11 +598,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -610,7 +610,7 @@
 
 
 
-  less than 1 minute read
+  4 minute read
 
 </p>
     
@@ -627,11 +627,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -639,7 +639,7 @@
 
 
 
-  1 minute read
+  less than 1 minute read
 
 </p>
     
@@ -656,11 +656,11 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/docs/stress-test-on-company-with-jmeter-in-k8s/index.html b/content/docs/stress-test-on-company-with-jmeter-in-k8s/index.html
index 22b7e35..929b263 100644
--- a/content/docs/stress-test-on-company-with-jmeter-in-k8s/index.html
+++ b/content/docs/stress-test-on-company-with-jmeter-in-k8s/index.html
@@ -679,11 +679,11 @@ fig-6 Memory Usage of different services</p>
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -691,7 +691,7 @@ fig-6 Memory Usage of different services</p>
 
 
 
-  4 minute read
+  6 minute read
 
 </p>
     
@@ -708,11 +708,11 @@ fig-6 Memory Usage of different services</p>
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -720,7 +720,7 @@ fig-6 Memory Usage of different services</p>
 
 
 
-  less than 1 minute read
+  4 minute read
 
 </p>
     
@@ -737,11 +737,11 @@ fig-6 Memory Usage of different services</p>
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -749,7 +749,7 @@ fig-6 Memory Usage of different services</p>
 
 
 
-  1 minute read
+  less than 1 minute read
 
 </p>
     
@@ -766,11 +766,11 @@ fig-6 Memory Usage of different services</p>
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/docs/tracing-with-servicecomb/index.html b/content/docs/tracing-with-servicecomb/index.html
index ef39e63..db78d77 100644
--- a/content/docs/tracing-with-servicecomb/index.html
+++ b/content/docs/tracing-with-servicecomb/index.html
@@ -640,11 +640,11 @@ analyzing timing data to troubleshoot network latencies among our microservices
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
+        <a href="/cn/docs/crm-part-I/" rel="permalink">客户管理系统微服务化实战-PartI
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
+    <p class="archive__item-excerpt" itemprop="description">客户管理系统微服务化实战-PartI
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -652,7 +652,7 @@ analyzing timing data to troubleshoot network latencies among our microservices
 
 
 
-  4 minute read
+  6 minute read
 
 </p>
     
@@ -669,11 +669,11 @@ analyzing timing data to troubleshoot network latencies among our microservices
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
+        <a href="/docs/release-note-1-0-0/" rel="permalink">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
+    <p class="archive__item-excerpt" itemprop="description">Apache ServiceComb (incubating) enters new stage
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -681,7 +681,7 @@ analyzing timing data to troubleshoot network latencies among our microservices
 
 
 
-  less than 1 minute read
+  4 minute read
 
 </p>
     
@@ -698,11 +698,11 @@ analyzing timing data to troubleshoot network latencies among our microservices
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
+        <a href="/cn/docs/release_note_1_0_0" rel="permalink">[里程碑]Apache ServiceComb 1.0.0版本正式发布
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
+    <p class="archive__item-excerpt" itemprop="description">ServieComb版本正式步入稳定态
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
@@ -710,7 +710,7 @@ analyzing timing data to troubleshoot network latencies among our microservices
 
 
 
-  1 minute read
+  less than 1 minute read
 
 </p>
     
@@ -727,11 +727,11 @@ analyzing timing data to troubleshoot network latencies among our microservices
     
     <h2 class="archive__item-title" itemprop="headline">
       
-        <a href="/cn/docs/easy-build-microservice-system-part-IV/" rel="permalink">轻松微服务系列:边缘服务支持统一认证
+        <a href="/cn/docs/consul-servicemesh" rel="permalink">Consul Service Mesh实战
 </a>
       
     </h2>
-    <p class="archive__item-excerpt" itemprop="description">轻松微服务系列:边缘服务支持统一认证
+    <p class="archive__item-excerpt" itemprop="description">Consul Service Mesh介绍与相关实践
 </p>
     
       <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
diff --git a/content/feed.xml b/content/feed.xml
index 99a68ab..713f636 100644
--- a/content/feed.xml
+++ b/content/feed.xml
@@ -1,4 +1,802 @@
-<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.4.3">Jekyll</generator><link href="/feed.xml" rel="self" type="application/atom+xml" /><link href="/" rel="alternate" type="text/html" /><updated>2018-08-27T19:12:57+08:00</updated><id>/</id><title type="html">Apache ServiceComb (incubating)</title><subtitle>The homepage of ServiceComb</subtitle><author><name>{&quot;name&quot;=&gt;nil, &quot;avatar&quot;=&gt; [...]
+<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.4.3">Jekyll</generator><link href="/feed.xml" rel="self" type="application/atom+xml" /><link href="/" rel="alternate" type="text/html" /><updated>2018-08-28T14:57:15+08:00</updated><id>/</id><title type="html">Apache ServiceComb (incubating)</title><subtitle>The homepage of ServiceComb</subtitle><author><name>{&quot;name&quot;=&gt;nil, &quot;avatar&quot;=&gt; [...]
+&lt;h2 id=&quot;ddd场景极速开发&quot;&gt;——DDD、场景、极速开发&lt;/h2&gt;
+
+&lt;p&gt;在今年的LC3大会上,ServiceComb展台所展示的demo视频&lt;code class=&quot;highlighter-rouge&quot;&gt;“30分钟开发雏形CRM应用”&lt;/code&gt;引起了参会者的广泛关注,大家纷纷对其背后的技术表现出浓厚的兴趣。本文将从房地产企业的客户管理管理场景入手,使用领域驱动设计,深入技术细节,详解如何快速开发落地一个微服务化的客户管理系统。&lt;/p&gt;
+
+&lt;h1 id=&quot;1-牛刀小试&quot;&gt;1. 牛刀小试&lt;/h1&gt;
+&lt;p&gt;打开浏览器,输入地址&lt;code class=&quot;highlighter-rouge&quot;&gt;http://start.servicecomb.io/&lt;/code&gt;打开SERVICECOMB SPRING INITIALIZR,修改Project Metadata中的&lt;code class=&quot;highlighter-rouge&quot;&gt;Group&lt;/code&gt;,&lt;code class=&quot;highlighter-rouge&quot;&gt;Artifact&lt;/code&gt;和ServiceComb Parameters中的&lt;code class=&quot;highlighter-rouge&quot;&gt;ServiceCenter Address&lt;/code&gt;,&lt;code class=&quot;highlighter-rouge&quot;&gt;Governance&lt;/code&gt;等,点击Generate Proj [...]
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/scaffold/StartServiceComb.io.png&quot; alt=&quot;SERVICECOMB SPRING INITIALIZR截图&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;运行它也很简单,使用IDE打开项目,DEBUG -&amp;gt; Application.java,或在命令行:&lt;/p&gt;
+
+&lt;p&gt;稍等微服务启动就绪,打开浏览器输入&lt;code class=&quot;highlighter-rouge&quot;&gt;http://localhost:9080/hello&lt;/code&gt;验证一下:&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/scaffold/OutputHello.png&quot; alt=&quot;输出hello截图&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;是不是非常轻松呢?&lt;/p&gt;
+
+&lt;h1 id=&quot;2-脚手架&quot;&gt;2. 脚手架&lt;/h1&gt;
+&lt;p&gt;在建筑领域,脚手架是施工现场为方便工人操作并解决垂直和水平运输而搭设的各种支架以及平台。&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/scaffold/Scaffold.jpg&quot; alt=&quot;scaffold&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;在软件开发领域,它引申为预提供一些基础框架代码加速开发过程,避免从零开始构建项目。用户只需要依据需求场景选择合适的脚手架,然后填充定制的业务逻辑即可,不必再去处理一些基础功能,例如数据库连接、日志实现、RPC传输等。&lt;/p&gt;
+
+&lt;p&gt;微服务框架一般都会提供脚手架功能,例如Spring,提供了SPRING INITIALIZR;ServiceComb基于SPRING INITIALIZR,提供了更具优势的特性:&lt;/p&gt;
+&lt;ol&gt;
+  &lt;li&gt;生成的项目除了在POM中自动添加必要的依赖,还会提供Producer和Consumer示例代码(Hello World);&lt;/li&gt;
+  &lt;li&gt;会进一步提供&lt;strong&gt;Edge Server&lt;/strong&gt;、&lt;strong&gt;Authcation Server&lt;/strong&gt;等更贴近业务的脚手架项目,让用户能快速构建体系完整的微服务系统。&lt;/li&gt;
+&lt;/ol&gt;
+
+&lt;p&gt;那么什么叫一个完整的微服务系统呢?我们可以拿一个具体的场景做例子,会更有感觉:&lt;/p&gt;
+
+&lt;h1 id=&quot;3-场景地产crm&quot;&gt;3. 场景:地产CRM&lt;/h1&gt;
+&lt;p&gt;您经营着一家房地产开发商,销售房产,迫切需要一套销售系统,考虑到微服务的优势,您决定使用微服务的方式构建系统;主要的业务流程也非常简单:用户前来购买购买产品(房产),首先需要登记用户信息,并缴纳一定数量的定金,待交易当日,挑选心仪的产品(房产),支付尾款,完成交易。&lt;/p&gt;
+
+&lt;h2 id=&quot;31--使用ddd指导地产crm系统的设计&quot;&gt;3.1  使用DDD指导地产CRM系统的设计&lt;/h2&gt;
+&lt;p&gt;微服务系统的设计方面,领域驱动设计(Domain-Driven Design,DDD)是一个从业务出发的好选择,它由Eric Evans提出,是一种全新的系统设计和建模方法,这里的模型指的就是领域模型(Domain Model)。领域模型通过聚合(Aggregate)组织在一起,聚合间有明显的业务边界,这些边界将领域划分为一个个限界上下文(Bounded Context)。Martin Fowler对它们都有详细的&lt;a href=&quot;https://martinfowler.com/tags/domain%20driven%20design.html&quot;&gt;解读&lt;/a&gt;。&lt;/p&gt;
+
+&lt;p&gt;理论概念都搞清楚了,那么怎么来找模型和聚合呢?一个非常流行的方法就是&lt;a href=&quot;https://en.wikipedia.org/wiki/Event_storming&quot;&gt;Event Storming&lt;/a&gt;,它是由Alberto Brandolini发明,经历了DDD社区和很多团队的实践,也是一种非常有参与感的团队活动:&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/scaffold/EventStorming.png&quot; alt=&quot;EventStorming&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;上图就是我们对地产CRM这个场景使用Event Storming探索的结果,现在我们能够将限界上下文清晰的梳理出来:&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/scaffold/BoundedContext.png&quot; alt=&quot;BoundedContext&quot; /&gt;&lt;/p&gt;
+
+&lt;blockquote&gt;
+  &lt;p&gt;提示:Event Storming是一项非常有创造性的活动,也是一个持续讨论和反复改进的过程,不同的团队关注的核心域(Core Domain)不同,得到的最终结果也会有差异。我们的目的是为了演示完整的微服务系统构建的过程,并不涉及商业核心竞争力方面的探讨,因此没有Core Domain和Sub Domain之类的偏重。&lt;/p&gt;
+&lt;/blockquote&gt;
+
+&lt;h2 id=&quot;32-将分析成果转化为方案域设计&quot;&gt;3.2 将分析成果转化为方案域设计&lt;/h2&gt;
+&lt;p&gt;当我们完成所有的限界上下文的识别后,可以直接将它们落地为微服务:&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/scaffold/MicroserviceDesign1.png&quot; alt=&quot;MicroserviceDesign1&quot; /&gt;&lt;/p&gt;
+
+&lt;ol&gt;
+  &lt;li&gt;用户服务:提供用户信息管理服务,这里保存这用户的账号和密码,负责登录和认证;&lt;/li&gt;
+  &lt;li&gt;产品(房产)服务:提供产品管理服务,保存着房产的信息诸如价格、是否已售出等信息;&lt;/li&gt;
+  &lt;li&gt;支付服务:提供交易时支付服务,模拟对接银行支付定金,以及购房时支付尾款;&lt;/li&gt;
+&lt;/ol&gt;
+
+&lt;p&gt;由于完成一笔交易是一个复杂的流程,与这三个微服务都有关联,因此我们引入了一个复合服务——交易服务:&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/scaffold/MicroserviceDesign2.png&quot; alt=&quot;MicroserviceDesign2&quot; /&gt;&lt;/p&gt;
+
+&lt;ol&gt;
+  &lt;li&gt;交易服务:提供产品交易服务,它通过编排调用将整个交易流程串起来,交易服务中有两个流程:
+    &lt;ul&gt;
+      &lt;li&gt;定金支付&lt;/li&gt;
+    &lt;/ul&gt;
+
+    &lt;p&gt;Step1:通过用户服务验证用户身份;&lt;/p&gt;
+
+    &lt;p&gt;Step2:通过支付服务请求银行扣款,增加定金账号内的定金;&lt;/p&gt;
+  &lt;/li&gt;
+&lt;/ol&gt;
+
+&lt;ul&gt;
+  &lt;li&gt;
+    &lt;p&gt;购房交易&lt;/p&gt;
+
+    &lt;p&gt;Step1:通过用户服务验证用户身份;&lt;/p&gt;
+
+    &lt;p&gt;Step2:通过资源服务确定用户希望购买的资源(房产)尚未售出;&lt;/p&gt;
+
+    &lt;p&gt;Step3:通过资源服务标记目标资源(房产)已售出;&lt;/p&gt;
+
+    &lt;p&gt;Step4:通过支付服务请求扣减定金账号内的定金,以及银行扣剩下的尾款;&lt;/p&gt;
+
+    &lt;p&gt;最后两个步骤需要保证事务一致性,其中Step4包含两个扣款操作。&lt;/p&gt;
+  &lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;之后,我们引入Edge服务提供统一入口:&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/scaffold/MicroserviceDesign3.png&quot; alt=&quot;MicroserviceDesign3&quot; /&gt;&lt;/p&gt;
+
+&lt;ol&gt;
+  &lt;li&gt;Edge服务:很多时候也被称为API网关(API Gateway),负责集中认证、动态路由等等;&lt;/li&gt;
+&lt;/ol&gt;
+
+&lt;blockquote&gt;
+  &lt;p&gt;提示:Edge服务需要依赖服务注册-发现机制,因此同时导入了ServiceCenter。&lt;/p&gt;
+&lt;/blockquote&gt;
+
+&lt;p&gt;最后还需要提供UI:&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/scaffold/MicroserviceDesign4.png&quot; alt=&quot;MicroserviceDesign4&quot; /&gt;&lt;/p&gt;
+
+&lt;ol&gt;
+  &lt;li&gt;前端UI(同样以微服务方式提供):用户交互界面;&lt;/li&gt;
+&lt;/ol&gt;
+
+&lt;p&gt;至此,DDD设计地产CRM的工作就结束了。&lt;/p&gt;
+
+&lt;h1 id=&quot;4-快速实现客户关系管理系统的用户服务&quot;&gt;4. 快速实现客户关系管理系统的用户服务&lt;/h1&gt;
+&lt;h2 id=&quot;41-用户微服务并不简单&quot;&gt;4.1 用户微服务并不简单&lt;/h2&gt;
+&lt;p&gt;用户微服务是所有系统中不可或缺的部分,它承载了认证和授权等核心功能——无论是登录一个网站、还是打开一个APP,当涉及到需要身份识别后才能够执行的操作,都需要用户微服务把关。例如观看视频网站上的视频,匿名用户会插播广告,如果希望屏蔽广告,则需要登录并购买VIP会员,登录即是身份认证的过程,而VIP屏蔽广告即是授权的过程。&lt;/p&gt;
+
+&lt;h5 id=&quot;认证&quot;&gt;认证&lt;/h5&gt;
+&lt;p&gt;认证不仅仅是一次性验证用户名和密码的过程,还需要能反复使用认证的结果,确保后继所有操作都是合法的,这就涉及到“有状态”,但HTTP是一个无状态协议,如何能够将登录成功后的认证信息与后继的请求关联起来呢?&lt;/p&gt;
+
+&lt;p&gt;我们非常熟悉的做法是使用Session或Cookie:&lt;/p&gt;
+&lt;ul&gt;
+  &lt;li&gt;Session存储在服务端,因此具备良好的防篡改能力,但弊端是使服务有状态,微服务系统中,同一个微服务会依据系统压力的大小弹性伸缩出多个运行实例负载均衡,跨实例访问会状态丢失。&lt;/li&gt;
+  &lt;li&gt;Cookie存储在客户端,它正好与Session相反,优势是服务不必保持状态,但弊端是客户比较容易的篡改Cookie信息,例如修改过期时间以逃避验证,而且浏览器对Cookie也有较多限制。&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;那么,如何兼顾这两方面的需求呢?Token就是一个比较好的解决方案。&lt;/p&gt;
+
+&lt;p&gt;Token中文翻译为令牌,它将登录认证后的信息签名后返回,服务端不保存,客户端请求的时候将认证的完整信息附带上提供给服务端验签,签名可以保证信息不被篡改。了解了了解Token的原理,自然要关注Token的格式,JWT就是这样一个基于JSON的开放标准&lt;a href=&quot;https://tools.ietf.org/html/rfc7519&quot;&gt;RFC-7519&lt;/a&gt;。&lt;/p&gt;
+
+&lt;h6 id=&quot;jwt-java-web-token规范&quot;&gt;JWT (Java Web Token)规范&lt;/h6&gt;
+&lt;p&gt;简而言之JWT规范由三部分构成:&lt;/p&gt;
+&lt;ol&gt;
+  &lt;li&gt;Header: 声明Token的类型也就是JWT,以及加密算法,例如:&lt;/li&gt;
+&lt;/ol&gt;
+
+&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;typ&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;JWT&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;alg&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;HS256&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+
+&lt;ol&gt;
+  &lt;li&gt;Playload:存放有效信息,既包含标准签发者、用户、签发时间、过期时间,唯一标识等信息;也可以存放用户自定义的声明信息,例如权限控制相关的内容,例如:&lt;/li&gt;
+&lt;/ol&gt;
+
+&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;sub&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;1234567890&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;YangYong Zheng&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;iat&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1516239022&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
+&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+
+&lt;ol&gt;
+  &lt;li&gt;Signature:签名信息,包含Header和Playload的原始信息(Base64编码过)以及签名过后的信息。&lt;/li&gt;
+&lt;/ol&gt;
+
+&lt;blockquote&gt;
+  &lt;p&gt;提示:JWT IO提供了&lt;a href=&quot;https://jwt.io/&quot;&gt;在线编码和解码工具&lt;/a&gt;。&lt;/p&gt;
+&lt;/blockquote&gt;
+
+&lt;h5 id=&quot;授权&quot;&gt;授权&lt;/h5&gt;
+&lt;p&gt;授权的本意是指将完成某项工作所必须的权力授给下属人员,在软件系统中往往引申为使人或角色具备访问特定资源或更改行为的许可。例如之前提到的VIP屏蔽广告,即是视频网站允许播放终端在特定的帐号登录后跳过广告播放环节(行为)的许可。&lt;/p&gt;
+
+&lt;p&gt;授权系统比较常见的做法有ACL和RBAC:&lt;/p&gt;
+&lt;ul&gt;
+  &lt;li&gt;ACL:ACL全称Access Control List,它是以受控资源为核心,每一个受控资源,都有一个权限控制列表记录哪些用户或角色对这项资源执行具体操作(也被称为授权点)的权限设置,例如查询(可见)、修改、删除等等。Windows中的文件系统安全即是一个经典的ACL实现案例:&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/scaffold/ACL.png&quot; alt=&quot;ACL&quot; /&gt;&lt;/p&gt;
+
+&lt;ul&gt;
+  &lt;li&gt;RBAC:RBAC全称Role Based Access Control,与ACL相比,它以角色为核心,权限落地在角色上,不为特定用户授权。它的优势是大幅简化了用户与权限的管理,在受控对象不多或控制粒度要求不高(例如接口访问控制)的场景下非常适用。&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/scaffold/RBAC.png&quot; alt=&quot;RBAC&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;由于微服务系统的权限控制主要是接口访问控制上,并且多采用用户组方式组织用户,因此RBAC是比较流行的做法。&lt;/p&gt;
+
+&lt;h2 id=&quot;42-实现用户微服务&quot;&gt;4.2 实现用户微服务&lt;/h2&gt;
+&lt;h5 id=&quot;第一步创建微服务项目&quot;&gt;第一步:创建微服务项目&lt;/h5&gt;
+&lt;p&gt;使用SERVICECOMB SPRING INITIALIZR创建用户微服务,创建完毕后使用IDEA或Eclipse打开项目,我们删掉HelloImpl和HelloConsumer,之后添加自己的实现。&lt;/p&gt;
+
+&lt;h5 id=&quot;第二步使用mysql持久化用户信息&quot;&gt;第二步:使用MySQL持久化用户信息&lt;/h5&gt;
+&lt;p&gt;用户微服务需要持久化用户信息,我们使用MySQL数据库,ORM使用Spring Data JPA:&lt;/p&gt;
+&lt;h6 id=&quot;引入依赖&quot;&gt;引入依赖&lt;/h6&gt;
+&lt;div class=&quot;language-xml highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
+  &lt;span class=&quot;nt&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;mysql&lt;span class=&quot;nt&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
+  &lt;span class=&quot;nt&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;mysql-connector-java&lt;span class=&quot;nt&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
+&lt;span class=&quot;nt&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
+&lt;span class=&quot;nt&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
+  &lt;span class=&quot;nt&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.springframework.boot&lt;span class=&quot;nt&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
+  &lt;span class=&quot;nt&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;spring-boot-starter-data-jpa&lt;span class=&quot;nt&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
+&lt;span class=&quot;nt&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+&lt;h6 id=&quot;定义存储user信息的userentity实体&quot;&gt;定义存储User信息的UserEntity实体&lt;/h6&gt;
+&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nd&quot;&gt;@Entity&lt;/span&gt;
+&lt;span class=&quot;nd&quot;&gt;@Table&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;T_User&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
+&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;UserEntity&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+  &lt;span class=&quot;nd&quot;&gt;@Id&lt;/span&gt;
+  &lt;span class=&quot;kd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+
+  &lt;span class=&quot;kd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+
+  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;getName&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+
+  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;setName&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+    &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+
+  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;getPassword&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+
+  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;setPassword&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+    &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;password&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+
+  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;UserEntity&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+
+  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;UserEntity&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&l [...]
+    &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+    &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;password&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+
+&lt;p&gt;在CodeFist模式下,Spring Data JPA会在数据库中自动创建T_User表与此实体映射。&lt;/p&gt;
+
+&lt;h6 id=&quot;实现userentity实体的repository&quot;&gt;实现UserEntity实体的Repository&lt;/h6&gt;
+&lt;p&gt;我们继承JPA的PagingAndSortingRepository来实现ORM操作&lt;/p&gt;
+
+&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nd&quot;&gt;@Repository&lt;/span&gt;
+&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;UserRepository&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;PagingAndSortingRepository&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;UserEntity&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Long&lt;/s [...]
+  &lt;span class=&quot;n&quot;&gt;UserEntity&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;findByName&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
+&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+
+&lt;h6 id=&quot;配置数据库连接&quot;&gt;配置数据库连接&lt;/h6&gt;
+&lt;p&gt;在项目的&lt;code class=&quot;highlighter-rouge&quot;&gt;resources&lt;/code&gt;目录下新增&lt;code class=&quot;highlighter-rouge&quot;&gt;application.properties&lt;/code&gt;文件,写入数据库连接信息:&lt;/p&gt;
+
+&lt;div class=&quot;language-properties highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;py&quot;&gt;spring.datasource.url&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;jdbc:mysql://localhost:3306/user_db?useSSL=false&lt;/span&gt;
+&lt;span class=&quot;py&quot;&gt;spring.datasource.username&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;root&lt;/span&gt;
+&lt;span class=&quot;py&quot;&gt;spring.datasource.password&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;pwd&lt;/span&gt;
+&lt;span class=&quot;err&quot;&gt;spring.jpa.hibernate.ddl-&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;auto&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;update&lt;/span&gt;
+&lt;span class=&quot;py&quot;&gt;spring.jpa.properties.hibernate.dialect&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;org.hibernate.dialect.MySQL5Dialect&lt;/span&gt;
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+
+&lt;blockquote&gt;
+  &lt;p&gt;提示:关于Spring Data JPA的更多资料请参见&lt;a href=&quot;https://projects.spring.io/spring-data-jpa/&quot;&gt;这篇文档&lt;/a&gt;,为了能够简化依赖的引入我们实际上使用的是Spring Boot JPA Starter,详细的例子请参见&lt;a href=&quot;https://spring.io/guides/gs/accessing-data-jpa/&quot;&gt;这篇文档&lt;/a&gt;。&lt;/p&gt;
+&lt;/blockquote&gt;
+
+&lt;h5 id=&quot;第三步实现jwt认证&quot;&gt;第三步:实现JWT认证&lt;/h5&gt;
+&lt;h6 id=&quot;定义jwt接口&quot;&gt;定义JWT接口&lt;/h6&gt;
+
+&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;TokenStore&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+  &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;generate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;userName&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
+
+  &lt;span class=&quot;kt&quot;&gt;boolean&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;validate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;token&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
+&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+
+&lt;p&gt;generate用于生成Token,validate用于验证Token是否正确。&lt;/p&gt;
+
+&lt;h6 id=&quot;实现tokenstore&quot;&gt;实现TokenStore&lt;/h6&gt;
+&lt;p&gt;我们使用&lt;a href=&quot;https://github.com/jwtk/jjwt&quot;&gt;jjwt&lt;/a&gt;提供的JWT实现,创建JwtTokenStore类,继承TokenStore接口,并重写方法:&lt;/p&gt;
+
+&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nd&quot;&gt;@Component&lt;/span&gt;
+&lt;span class=&quot;nd&quot;&gt;@Component&lt;/span&gt;
+&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;JwtTokenStore&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;implements&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;TokenStore&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+  &lt;span class=&quot;kd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Logger&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;LOGGER&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;LoggerFactory&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;getLogger&lt;/span&gt;&lt;span class=&quot; [...]
+
+  &lt;span class=&quot;kd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;secretKey&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+
+  &lt;span class=&quot;kd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;secondsToExpire&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+
+  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;JwtTokenStore&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+    &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;secretKey&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;someSecretKeyForAuthentication&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+    &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;secondsToExpire&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;60&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;60&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;24&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+
+  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;JwtTokenStore&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;secretKey&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;secondsToExpire&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o [...]
+    &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;secretKey&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;secretKey&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+    &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;secondsToExpire&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;secondsToExpire&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+
+  &lt;span class=&quot;nd&quot;&gt;@Override&lt;/span&gt;
+  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;generate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;userName&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Jwts&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;builder&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;setSubject&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;userName&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
+        &lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;setExpiration&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Date&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ZonedDateTime&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;now&l [...]
+        &lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;signWith&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;HS512&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;secretKey&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;compact&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;();&lt;/span&gt;
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+
+  &lt;span class=&quot;nd&quot;&gt;@Override&lt;/span&gt;
+  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;boolean&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;validate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;token&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+    &lt;span class=&quot;k&quot;&gt;try&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+      &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;StringUtils&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;isNotEmpty&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Jwts&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;parser&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt;
+       &lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;setSigningKey&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;secretKey&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;parseClaimsJws&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;token&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;na&quot;& [...]
+    &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;catch&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;JwtException&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;IllegalArgumentException&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+      &lt;span class=&quot;n&quot;&gt;LOGGER&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;info&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;validateToken token : &quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;token&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot; failed&quot;&lt;/span&gt;&lt; [...]
+    &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+
+&lt;h5 id=&quot;第四步实现用户服务&quot;&gt;第四步:实现用户服务&lt;/h5&gt;
+&lt;h6 id=&quot;定义userservice接口&quot;&gt;定义UserService接口&lt;/h6&gt;
+
+&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;UserService&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+  &lt;span class=&quot;n&quot;&gt;ResponseEntity&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Boolean&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;logon&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;UserDTO&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
+  &lt;span class=&quot;n&quot;&gt;ResponseEntity&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Boolean&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;login&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;UserDTO&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
+&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+
+&lt;p&gt;logon用于新用户注册,login用于用户登录验证,UserDTO用于参数传递:&lt;/p&gt;
+
+&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;UserDTO&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+  &lt;span class=&quot;kd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+  &lt;span class=&quot;kd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;getName&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;getPassword&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;UserDTO&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;UserDTO&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/ [...]
+    &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+    &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;password&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+
+&lt;h6 id=&quot;实现并发布userservice&quot;&gt;实现并发布UserService&lt;/h6&gt;
+&lt;p&gt;创建UserServiceImpl,继承&lt;code class=&quot;highlighter-rouge&quot;&gt;UserService&lt;/code&gt;接口:&lt;/p&gt;
+
+&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nd&quot;&gt;@RestSchema&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;schemaId&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;user&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
+&lt;span class=&quot;nd&quot;&gt;@RequestMapping&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;/&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
+&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;UserServiceImpl&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;implements&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;UserService&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+  &lt;span class=&quot;kd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;UserRepository&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;repository&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+
+  &lt;span class=&quot;kd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;TokenStore&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tokenStore&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+
+  &lt;span class=&quot;nd&quot;&gt;@Autowired&lt;/span&gt;
+  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;UserServiceImpl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;UserRepository&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;repository&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;TokenStore&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tokenStore&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span c [...]
+    &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;repository&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;repository&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+    &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;tokenStore&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tokenStore&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+
+  &lt;span class=&quot;nd&quot;&gt;@Override&lt;/span&gt;
+  &lt;span class=&quot;nd&quot;&gt;@PostMapping&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;logon&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
+  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ResponseEntity&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Boolean&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;logon&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nd&quot;&gt;@RequestBody&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;UserDTO&lt;/span&gt; &lt;span c [...]
+    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;validateUser&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+      &lt;span class=&quot;n&quot;&gt;UserEntity&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;dbUser&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;repository&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;findByName&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt; [...]
+      &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;dbUser&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+        &lt;span class=&quot;n&quot;&gt;UserEntity&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;entity&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;UserEntity&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;getName&lt;/span&gt;&lt;span class=&quot;o&quot;&gt [...]
+        &lt;span class=&quot;n&quot;&gt;repository&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;save&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;entity&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
+        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ResponseEntity&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;gt;(&lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HttpStatus&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;OK&lt;/span&gt;&lt;span class=& [...]
+      &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+      &lt;span class=&quot;k&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;InvocationException&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BAD_REQUEST&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;user name had exist&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
+    &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+    &lt;span class=&quot;k&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;InvocationException&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BAD_REQUEST&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;incorrect user&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+
+  &lt;span class=&quot;nd&quot;&gt;@Override&lt;/span&gt;
+  &lt;span class=&quot;nd&quot;&gt;@PostMapping&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;login&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
+  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ResponseEntity&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Boolean&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;login&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nd&quot;&gt;@RequestBody&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;UserDTO&lt;/span&gt; &lt;span c [...]
+    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;validateUser&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+      &lt;span class=&quot;n&quot;&gt;UserEntity&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;dbUser&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;repository&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;findByName&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt; [...]
+      &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;dbUser&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;dbUser&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;getPassword&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;equals&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/spa [...]
+          &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;token&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tokenStore&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;generate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;get [...]
+          &lt;span class=&quot;n&quot;&gt;HttpHeaders&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;headers&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;generateAuthenticationHeaders&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;token&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
+          &lt;span class=&quot;c1&quot;&gt;//add authentication header&lt;/span&gt;
+          &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ResponseEntity&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;gt;(&lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;headers&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HttpStatus&lt;/span&gt;&lt;span  [...]
+        &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+        &lt;span class=&quot;k&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;InvocationException&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BAD_REQUEST&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;wrong password&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
+      &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+      &lt;span class=&quot;k&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;InvocationException&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BAD_REQUEST&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;user name not exist&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
+    &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+    &lt;span class=&quot;k&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;InvocationException&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BAD_REQUEST&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;incorrect user&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+
+  &lt;span class=&quot;kd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;boolean&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;validateUser&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;UserDTO&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;StringUtils&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;isNotEmpty&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quo [...]
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+
+  &lt;span class=&quot;kd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HttpHeaders&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;generateAuthenticationHeaders&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;token&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+    &lt;span class=&quot;n&quot;&gt;HttpHeaders&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;headers&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HttpHeaders&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;();&lt;/span&gt;
+    &lt;span class=&quot;n&quot;&gt;headers&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;AUTHORIZATION&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;token&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
+    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;headers&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+
+&lt;p&gt;登录成功后,会从TokenStore生成Token,并将其写入Key为&lt;code class=&quot;highlighter-rouge&quot;&gt;AUTHORIZATION&lt;/code&gt;的Header。&lt;/p&gt;
+
+&lt;p&gt;由于我们允许任何用户注册和登录,所以目前还没有授权的需求,经过上面四步,具有基本注册和登录功能的用户微服务就构建好了。&lt;/p&gt;
+
+&lt;h2 id=&quot;43-验证实现的用户服务&quot;&gt;4.3 验证实现的用户服务&lt;/h2&gt;
+&lt;p&gt;启动用户微服务,我们先注册一个账号:&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/scaffold/TestLogon.png&quot; alt=&quot;TestLogon&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;显示注册成功,现在我们使用这个账号登录:&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/scaffold/TestLogin.png&quot; alt=&quot;TestLogin&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;返回登录成功,Response中已经包含了&lt;code class=&quot;highlighter-rouge&quot;&gt;AUTHORIZATION&lt;/code&gt;Header,后继的所有请求都需要使用这个Token值进行合法认证。&lt;/p&gt;
+
+&lt;p&gt;至此,实现客户关系管理系统的用户服务工作就结束了,现在我们会将目光转移到Edge服务,通过Edge服务作为微服务调用的统一入口,在它之上构建统一认证,应对海量级调用的挑战。&lt;/p&gt;
+
+&lt;h1 id=&quot;5-开发高性能边缘服务&quot;&gt;5 开发高性能边缘服务&lt;/h1&gt;
+&lt;h2 id=&quot;51-什么是边缘服务edge-service&quot;&gt;5.1 什么是边缘服务(Edge Service)&lt;/h2&gt;
+&lt;p&gt;边缘服务也是一个微服务,微服务化系统通常使用边缘服务(Edge Service)作为所有其它微服务的统一入口,因此它也常常会被称为API Gateway,使用边缘服务的好处有如下几点:&lt;/p&gt;
+&lt;ul&gt;
+  &lt;li&gt;动态路由:动态配置URL地址与微服务之间的对应关系,便于扩展,以及实现版本灰度发布等;&lt;/li&gt;
+  &lt;li&gt;统一认证:在入口处进行访问认证,避免需要在所有的微服务中都承载重复的认证机制;&lt;/li&gt;
+  &lt;li&gt;集中监控:与统一认证类似,在边缘服务对入口调用进行监控,容易统计流量信息。&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;h2 id=&quot;52-边缘服务的作用和原理&quot;&gt;5.2 边缘服务的作用和原理&lt;/h2&gt;
+&lt;p&gt;我们先来看不使用边缘服务,UI直接调用用户服务的场景:&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/scaffold/DirectInvoke.png&quot; alt=&quot;DirectInvoke&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;可以看出这种调用方式,UI缺乏一定的灵活性,体现在:&lt;/p&gt;
+&lt;ul&gt;
+  &lt;li&gt;UI的实现绑定了Chassis的编程语言Java,无法使用PHP等其它前端技术开发;&lt;/li&gt;
+  &lt;li&gt;UI访问微服务的路径无法动态配置,如果作为后端的微服务系统发生调整,则UI很可能需要修改;&lt;/li&gt;
+  &lt;li&gt;UI很容易混入复合(编排)调用的逻辑,使得结构变得复杂难以维护。&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;我们再看引入边缘服务后,UI如何通过边缘服务调用用户服务:&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/scaffold/InvokeViaEdge.png&quot; alt=&quot;InvokeViaEdge&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;Edge服务将在&lt;code class=&quot;highlighter-rouge&quot;&gt;9090&lt;/code&gt;端口上接受http rest调用,我们设计了下面的转发规则:&lt;/p&gt;
+
+&lt;div class=&quot;language-text highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;http://{edge-host-name}:9090/{ServiceComb微服务Name}/{服务路径&amp;amp;参数}
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+
+&lt;p&gt;用户微服务名(&lt;code class=&quot;highlighter-rouge&quot;&gt;service_description.name&lt;/code&gt;)是&lt;code class=&quot;highlighter-rouge&quot;&gt;user-service&lt;/code&gt;,因此login调用URL:&lt;em&gt;cse://user-service/login&lt;/em&gt;可以通过:&lt;em&gt;http://{edge-host-name}:9090/user-service/login&lt;/em&gt; 访问。&lt;/p&gt;
+
+&lt;p&gt;如此一来,微服务名成为了路径的一部分,http协议的&lt;code class=&quot;highlighter-rouge&quot;&gt;hostname&lt;/code&gt;和&lt;code class=&quot;highlighter-rouge&quot;&gt;port&lt;/code&gt;将固定指向Edge服务保持不变,灵活性大大增加了。&lt;/p&gt;
+
+&lt;p&gt;到此我们还可以再做一点点改进,引入一个自定义配置&lt;code class=&quot;highlighter-rouge&quot;&gt;edge.routing-short-path.{简称}&lt;/code&gt;,映射微服务名:&lt;/p&gt;
+
+&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;edge:
+  routing-short-path:
+    user: user-service
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+
+&lt;p&gt;上面的配置代表:&lt;em&gt;http://{edge-host-name}:9090/user/login&lt;/em&gt; 等效于:&lt;em&gt;http://{edge-host-name}:9090/user-service/login&lt;/em&gt; ,如此一来:&lt;/p&gt;
+&lt;ol&gt;
+  &lt;li&gt;URL能够更加简洁;&lt;/li&gt;
+  &lt;li&gt;当微服务名发生变化,只需要调整对应的配置,不需要更改前端UI路径代码。&lt;/li&gt;
+&lt;/ol&gt;
+
+&lt;h2 id=&quot;53-实现边缘服务&quot;&gt;5.3 实现边缘服务&lt;/h2&gt;
+&lt;h5 id=&quot;第一步引入edge-core依赖&quot;&gt;第一步:引入Edge Core依赖&lt;/h5&gt;
+&lt;div class=&quot;language-xml highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
+  &lt;span class=&quot;nt&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.apache.servicecomb&lt;span class=&quot;nt&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
+  &lt;span class=&quot;nt&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;edge-core&lt;span class=&quot;nt&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
+&lt;span class=&quot;nt&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+
+&lt;h5 id=&quot;第二步编写调度器dispatcher&quot;&gt;第二步:编写调度器Dispatcher&lt;/h5&gt;
+&lt;p&gt;Edge服务的核心就是调度器Dispatcher,ServiceComb Edge Core中的Dispatcher基于高性能的Vertx Reactive,轻松应对百万量级API请求的挑战;只需要继承AbstractEdgeDispatcher抽象类,添加对应的逻辑即可:&lt;/p&gt;
+
+&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;EdgeDispatcher&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;AbstractEdgeDispatcher&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+  &lt;span class=&quot;kd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Logger&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;LOGGER&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;LoggerFactory&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;getLogger&lt;/span&gt;&lt;span class=&quot; [...]
+
+  &lt;span class=&quot;c1&quot;&gt;//此Dispatcher的优先级,Order级越小,路由策略优先级越高&lt;/span&gt;
+  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;getOrder&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;10000&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+
+  &lt;span class=&quot;c1&quot;&gt;//初始化Dispatcher的路由策略&lt;/span&gt;
+  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;init&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Router&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;router&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+    &lt;span class=&quot;c1&quot;&gt;///捕获 {ServiceComb微服务Name}/{服务路径&amp;amp;参数} 的URL&lt;/span&gt;
+    &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;regex&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;/([^\\\\/]+)/(.*)&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+    &lt;span class=&quot;n&quot;&gt;router&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;routeWithRegex&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;regex&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;handler&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;CookieHandler&lt;/span&gt;&lt;span class=&quot;o&quot;&gt [...]
+    &lt;span class=&quot;n&quot;&gt;router&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;routeWithRegex&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;regex&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;handler&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;createBodyHandler&lt;/span&gt;&lt;span class=&quot;o&quot [...]
+    &lt;span class=&quot;n&quot;&gt;router&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;routeWithRegex&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;regex&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;failureHandler&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;: [...]
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+
+  &lt;span class=&quot;c1&quot;&gt;//处理请求,请注意&lt;/span&gt;
+  &lt;span class=&quot;kd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;onRequest&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;RoutingContext&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;context&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+    &lt;span class=&quot;n&quot;&gt;Map&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pathParams&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;context&lt;/span&gt;&lt;span class=&quot;o&quot;& [...]
+    &lt;span class=&quot;c1&quot;&gt;//从匹配的param0拿到{ServiceComb微服务Name}&lt;/span&gt;
+    &lt;span class=&quot;kd&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;service&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pathParams&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;param0&quot;&lt;/span&gt;&lt;span class=&quot;o&qu [...]
+    &lt;span class=&quot;c1&quot;&gt;//从匹配的param1拿到{服务路径&amp;amp;参数}&lt;/span&gt;
+    &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;path&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;/&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pathParams&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot [...]
+
+    &lt;span class=&quot;c1&quot;&gt;//还记得我们之前说的做出一点点改进吗?引入一个自定义配置edge.routing-short-path.{简称},映射微服务名;如果简称没有配置,那么就认为直接是微服务的名&lt;/span&gt;
+    &lt;span class=&quot;kd&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;serviceName&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DynamicPropertyFactory&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;getInstance&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt;
+        &lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;getStringProperty&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;edge.routing-short-path.&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;service&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;service&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;).&lt;/span&gt;&l [...]
+
+    &lt;span class=&quot;c1&quot;&gt;//创建一个Edge转发&lt;/span&gt;
+    &lt;span class=&quot;n&quot;&gt;EdgeInvocation&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;edgeInvocation&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;EdgeInvocation&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;();&lt;/span&gt;
+    &lt;span class=&quot;c1&quot;&gt;//允许接受任意版本的微服务实例作为Provider,未来我们会使用此(设置版本)能力实现灰度发布&lt;/span&gt;
+    &lt;span class=&quot;n&quot;&gt;edgeInvocation&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;setVersionRule&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DefinitionConst&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;VERSION_RULE_ALL&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
+    &lt;span class=&quot;n&quot;&gt;edgeInvocation&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;init&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;serviceName&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;context&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt [...]
+    &lt;span class=&quot;n&quot;&gt;edgeInvocation&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;edgeInvoke&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;();&lt;/span&gt;
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+
+&lt;h5 id=&quot;第三步加载调度器dispatcher&quot;&gt;第三步:加载调度器Dispatcher&lt;/h5&gt;
+&lt;p&gt;ServiceComb Edge使用SPI(Service Provider Interface)的方式加载已经编写好的调度器Dispatcher,在resources目录下创建&lt;code class=&quot;highlighter-rouge&quot;&gt;META-INF.services/org.apache.servicecomb.transport.rest.vertx.VertxHttpDispatcher&lt;/code&gt;配置文件,写入上一步EdgeDispatcher的类全名:&lt;/p&gt;
+
+&lt;div class=&quot;language-text highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;{EdgeDispatcher的包名}.EdgeDispatcher
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+
+&lt;h5 id=&quot;第四步配置microserviceyaml&quot;&gt;第四步:配置microservice.yaml&lt;/h5&gt;
+&lt;p&gt;边缘服务本身也是一个微服务,同样需要配置microservice.yaml:&lt;/p&gt;
+
+&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s&quot;&gt;APPLICATION_ID&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;scaffold&lt;/span&gt;
+&lt;span class=&quot;s&quot;&gt;service_description&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
+  &lt;span class=&quot;s&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;edge-service&lt;/span&gt;
+  &lt;span class=&quot;s&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;0.0.1&lt;/span&gt;
+&lt;span class=&quot;s&quot;&gt;servicecomb&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
+  &lt;span class=&quot;s&quot;&gt;service&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
+    &lt;span class=&quot;s&quot;&gt;registry&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
+      &lt;span class=&quot;c1&quot;&gt;#配置ServiceCenter使得Edge能够发现其他微服务&lt;/span&gt;
+      &lt;span class=&quot;s&quot;&gt;address&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;http://127.0.0.1:30100&lt;/span&gt;
+  &lt;span class=&quot;c1&quot;&gt;#配置Rest Endpoint&lt;/span&gt;
+  &lt;span class=&quot;s&quot;&gt;rest&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
+    &lt;span class=&quot;s&quot;&gt;address&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;0.0.0.0:9090&lt;/span&gt;
+
+&lt;span class=&quot;c1&quot;&gt;#自定义的简称机制配置(这是我们自行扩展实现的)&lt;/span&gt;
+&lt;span class=&quot;s&quot;&gt;edge&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
+  &lt;span class=&quot;s&quot;&gt;routing-short-path&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
+    &lt;span class=&quot;s&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;user-service&lt;/span&gt;
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+
+&lt;blockquote&gt;
+  &lt;p&gt;提示:&lt;/p&gt;
+  &lt;ol&gt;
+    &lt;li&gt;除了配置Rest Endpoint,我们也支持配置Highway Endpoint,但Highway Endpoint只支持ServiceComb开发的微服务调用;&lt;/li&gt;
+    &lt;li&gt;microservice.yaml中没有配置Handler,Edge支持所有Consumer端Handler,不支持Producer端Handler,调用链原理如下:&lt;/li&gt;
+  &lt;/ol&gt;
+
+  &lt;p&gt;&lt;img src=&quot;/assets/images/scaffold/EdgeOnlySupportConsumerHandler.png&quot; alt=&quot;EdgeOnlySupportConsumerHandler&quot; /&gt;&lt;/p&gt;
+
+&lt;/blockquote&gt;
+
+&lt;h2 id=&quot;54-验证边缘服务&quot;&gt;5.4 验证边缘服务&lt;/h2&gt;
+&lt;p&gt;启动用户微服务和Edge服务,使用&lt;a href=&quot;https://www.getpostman.com/&quot;&gt;Postman&lt;/a&gt;注册一个用户:&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/scaffold/LogonViaEdge.png&quot; alt=&quot;LogonViaEdge&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;成功,现在我们使用新注册的用户名&lt;code class=&quot;highlighter-rouge&quot;&gt;ldg&lt;/code&gt;登录:&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/scaffold/LoginViaEdge.png&quot; alt=&quot;LoginViaEdge&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;同样成功,并在Response中已经包含了正确的&lt;code class=&quot;highlighter-rouge&quot;&gt;AUTHORIZATION&lt;/code&gt;Header。&lt;/p&gt;
+
+&lt;h2 id=&quot;55-性能比拼&quot;&gt;5.5 性能比拼&lt;/h2&gt;
+&lt;p&gt;ServiceComb Java Chassis也支持集成Netflix Zuul作为网关服务,我们做了一次性能比较,使用ServiceComb Edge作为网关吞吐能力大幅优于Netflix Zuul,性能测试项目源代码在&lt;a href=&quot;https://github.com/zhengyangyong/gateway-perf&quot;&gt;这里&lt;/a&gt;。&lt;/p&gt;
+
+&lt;h1 id=&quot;6-扩展边缘服务支持统一认证&quot;&gt;6 扩展边缘服务支持统一认证&lt;/h1&gt;
+&lt;h2 id=&quot;61-设计思路&quot;&gt;6.1 设计思路&lt;/h2&gt;
+&lt;p&gt;正如前面提到的,统一认证的目的是在Edge入口处进行访问认证,避免需要在所有的微服务中都承载重复的认证机制,因此:&lt;/p&gt;
+&lt;ol&gt;
+  &lt;li&gt;我们先要将认证功能作为一个独立的Procuder发布出来,使Edge服务能够随时认证Token,我们将其命名为&lt;code class=&quot;highlighter-rouge&quot;&gt;AuthenticationService&lt;/code&gt;,放在用户服务中;&lt;/li&gt;
+  &lt;li&gt;将无需认证的访问请求识别出来,包括:&lt;/li&gt;
+&lt;/ol&gt;
+
+&lt;table&gt;
+  &lt;thead&gt;
+    &lt;tr&gt;
+      &lt;th style=&quot;text-align: left&quot;&gt;功能&lt;/th&gt;
+      &lt;th style=&quot;text-align: left&quot;&gt;描述&lt;/th&gt;
+    &lt;/tr&gt;
+  &lt;/thead&gt;
+  &lt;tbody&gt;
+    &lt;tr&gt;
+      &lt;td style=&quot;text-align: left&quot;&gt;login&lt;/td&gt;
+      &lt;td style=&quot;text-align: left&quot;&gt;登录验证,通过后为用户生成Token&lt;/td&gt;
+    &lt;/tr&gt;
+    &lt;tr&gt;
+      &lt;td style=&quot;text-align: left&quot;&gt;logon&lt;/td&gt;
+      &lt;td style=&quot;text-align: left&quot;&gt;新用户注册&lt;/td&gt;
+    &lt;/tr&gt;
+  &lt;/tbody&gt;
+&lt;/table&gt;
+
+&lt;p&gt;除此之外其他业务请求都需要做Token认证;&lt;/p&gt;
+
+&lt;ol&gt;
+  &lt;li&gt;Edge服务转发访问请求之前,对需要认证的请求先做统一认证,认证通过之后才转发,我们使用&lt;code class=&quot;highlighter-rouge&quot;&gt;HttpServerFilter&lt;/code&gt;扩展这个能力:&lt;/li&gt;
+&lt;/ol&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/scaffold/FilterChain.png&quot; alt=&quot;FilterChain&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;统一认证流程时序图为:&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/scaffold/EdgeAuth.png&quot; alt=&quot;EdgeAuth&quot; /&gt;&lt;/p&gt;
+
+&lt;h2 id=&quot;62-实现统一认证&quot;&gt;6.2 实现统一认证&lt;/h2&gt;
+&lt;h5 id=&quot;第一步发布认证服务&quot;&gt;第一步:发布认证服务&lt;/h5&gt;
+&lt;h6 id=&quot;定义authenticationservice&quot;&gt;定义AuthenticationService&lt;/h6&gt;
+&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;AuthenticationService&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+  &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;validate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;token&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
+&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+&lt;h6 id=&quot;实现并发布authenticationservice&quot;&gt;实现并发布AuthenticationService&lt;/h6&gt;
+&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nd&quot;&gt;@RestSchema&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;schemaId&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;authentication&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
+&lt;span class=&quot;nd&quot;&gt;@RequestMapping&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;/&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
+&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;AuthenticationServiceImpl&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;implements&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;AuthenticationService&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+
+  &lt;span class=&quot;kd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;TokenStore&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tokenStore&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+
+  &lt;span class=&quot;nd&quot;&gt;@Autowired&lt;/span&gt;
+  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;AuthenticationServiceImpl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;TokenStore&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tokenStore&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+    &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;tokenStore&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tokenStore&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+
+  &lt;span class=&quot;nd&quot;&gt;@Override&lt;/span&gt;
+  &lt;span class=&quot;nd&quot;&gt;@GetMapping&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;validate&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
+  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;validate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;token&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+    &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;userName&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tokenStore&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;validate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;token&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
+    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;userName&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+      &lt;span class=&quot;k&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;InvocationException&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BAD_REQUEST&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;incorrect token&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
+    &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;userName&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+
+&lt;h5 id=&quot;第二步实现统一认证authenticationfilter&quot;&gt;第二步:实现统一认证AuthenticationFilter&lt;/h5&gt;
+&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;AuthenticationFilter&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;implements&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HttpServerFilter&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+
+  &lt;span class=&quot;kd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;RestTemplate&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;template&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;RestTemplateBuilder&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;create&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;();&lt;/span&gt;
+
+  &lt;span class=&quot;kd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;USER_SERVICE_NAME&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;user-service&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+
+  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;EDGE_AUTHENTICATION_NAME&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;edge-authentication-name&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+
+  &lt;span class=&quot;kd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Set&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NOT_REQUIRED_VERIFICATION_USER_SERVICE_METHODS&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;= [...]
+      &lt;span class=&quot;n&quot;&gt;Arrays&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;asList&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;login&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;logon&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;validate&quot;&lt;/span&gt;&lt;span [...]
+
+  &lt;span class=&quot;nd&quot;&gt;@Override&lt;/span&gt;
+  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;getOrder&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+
+  &lt;span class=&quot;nd&quot;&gt;@Override&lt;/span&gt;
+  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Response&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;afterReceiveRequest&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Invocation&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;invocation&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HttpServletRequestEx&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;httpServletReque [...]
+    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;isInvocationNeedValidate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;invocation&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;getMicroserviceName&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(),&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;invocation&lt;/span&gt;&lt;span  [...]
+      &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;token&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;httpServletRequestEx&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;getHeader&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;AUTHORIZATION&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
+      &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;StringUtils&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;isNotEmpty&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;token&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+        &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;userName&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;template&lt;/span&gt;
+            &lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;getForObject&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;cse://&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;USER_SERVICE_NAME&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;/validate?token={token}&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;& [...]
+        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;StringUtils&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;isNotEmpty&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;userName&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+          &lt;span class=&quot;c1&quot;&gt;//Add header&lt;/span&gt;
+          &lt;span class=&quot;n&quot;&gt;invocation&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;getContext&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;put&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;EDGE_AUTHENTICATION_NAME&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;userName&lt;/span&gt;&lt;span clas [...]
+        &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+          &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Response&lt;/span&gt;
+              &lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;failResp&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;InvocationException&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Status&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;UNAUTHORIZED&lt;/span&gt;&lt;span class=&qu [...]
+        &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+      &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Response&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;failResp&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;
+            &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;InvocationException&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Status&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;UNAUTHORIZED&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;authentication failed, missing AUTHORIZATION header&quot;&lt;/span&gt;&lt;span c [...]
+      &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+    &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+
+  &lt;span class=&quot;kd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;boolean&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;isInvocationNeedValidate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;serviceName&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;operationPath&lt;/span&gt;& [...]
+    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;USER_SERVICE_NAME&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;equals&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;serviceName&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+      &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;method&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NOT_REQUIRED_VERIFICATION_USER_SERVICE_METHODS&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;operationPath&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;startsWith&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+          &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+        &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+      &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+    &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+
+&lt;p&gt;别忘了通过SPI机制加载它,在&lt;code class=&quot;highlighter-rouge&quot;&gt;resources\META-INF\services&lt;/code&gt;目录中创建&lt;code class=&quot;highlighter-rouge&quot;&gt;org.apache.servicecomb.common.rest.filter.HttpServerFilter&lt;/code&gt;文件:&lt;/p&gt;
+&lt;div class=&quot;language-text highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;org.apache.servicecomb.scaffold.edge.filter.AuthenticationFilter
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+
+&lt;h5 id=&quot;第三步在用户微服务中增加修改密码的功能用于验证&quot;&gt;第三步:在用户微服务中增加修改密码的功能用于验证&lt;/h5&gt;
+&lt;p&gt;现有的&lt;code class=&quot;highlighter-rouge&quot;&gt;login&lt;/code&gt;和&lt;code class=&quot;highlighter-rouge&quot;&gt;logon&lt;/code&gt;都无需认证,因此我们在用户微服务中增加需要认证的修改密码的功能用于验证统一认证。&lt;/p&gt;
+&lt;h6 id=&quot;在userservice中添加修改密码&quot;&gt;在UserService中添加修改密码&lt;/h6&gt;
+&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;UserService&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+  &lt;span class=&quot;n&quot;&gt;ResponseEntity&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Boolean&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;logon&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;UserDTO&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
+
+  &lt;span class=&quot;n&quot;&gt;ResponseEntity&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Boolean&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;login&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;UserDTO&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
+  &lt;span class=&quot;c1&quot;&gt;//需要认证的修改密码功能&lt;/span&gt;
+  &lt;span class=&quot;n&quot;&gt;ResponseEntity&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Boolean&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;changePassword&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;UserUpdateDTO&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;userUpdate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
+&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+
+&lt;h6 id=&quot;在userserviceimpl中实现修改密码&quot;&gt;在UserServiceImpl中实现修改密码&lt;/h6&gt;
+&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nd&quot;&gt;@Override&lt;/span&gt;
+&lt;span class=&quot;nd&quot;&gt;@PostMapping&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;changePassword&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
+&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ResponseEntity&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Boolean&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;changePassword&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nd&quot;&gt;@RequestBody&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;UserUpdateDTO&lt;/span&g [...]
+  &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;validateUserUpdate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;userUpdate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+    &lt;span class=&quot;n&quot;&gt;UserEntity&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;dbUser&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;repository&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;findByName&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;userUpdate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot; [...]
+    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;dbUser&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
+      &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;dbUser&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;getPassword&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;equals&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;userUpdate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt; [...]
+        &lt;span class=&quot;n&quot;&gt;dbUser&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;setPassword&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;userUpdate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;getNewPassword&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;());&lt;/span&gt;
+        &lt;span class=&quot;n&quot;&gt;repository&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;save&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;dbUser&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
+        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ResponseEntity&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;gt;(&lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HttpStatus&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;OK&lt;/span&gt;&lt;span class=& [...]
+      &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+      &lt;span class=&quot;k&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;InvocationException&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BAD_REQUEST&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;wrong password&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
+    &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+    &lt;span class=&quot;k&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;InvocationException&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BAD_REQUEST&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;user name not exist&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
+  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+  &lt;span class=&quot;k&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;InvocationException&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BAD_REQUEST&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;incorrect user&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
+&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+
+&lt;h2 id=&quot;63-验证实现的统一认证&quot;&gt;6.3 验证实现的统一认证&lt;/h2&gt;
+&lt;h5 id=&quot;确认authenticationfilter在edge服务中成功加载&quot;&gt;确认AuthenticationFilter在Edge服务中成功加载&lt;/h5&gt;
+&lt;p&gt;在Edge服务的启动日志中能够找到:&lt;/p&gt;
+&lt;div class=&quot;language-text highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;2018-07-13 14:38:48,756 [INFO]   1. org.apache.servicecomb.scaffold.edge.filter.AuthenticationFilter. org.apache.servicecomb.foundation.common.utils.SPIServiceUtils.loadSortedService(SPIServiceUtils.java:79)
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+
+&lt;h5 id=&quot;用户登录&quot;&gt;用户登录&lt;/h5&gt;
+&lt;p&gt;使用zhengyangyong登录:&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/scaffold/LoginFirst.png&quot; alt=&quot;LoginFirst&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;拿到的Token值为:eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ6aGVuZ3lhbmd5b25nIiwiZXhwIjoxNTMwNjA4OTczfQ.90teWUNbypPZvds_SD7Kus_y7wLc4b6VzC_aIVg8sLItKxwQ0g4V9BDU665PlqQY5KM-mnk8y0R6ENL1T8YVFg&lt;/p&gt;
+
+&lt;h5 id=&quot;不带authorization-header请求changepassword&quot;&gt;不带Authorization Header请求changePassword&lt;/h5&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/scaffold/NoAuthHeader.png&quot; alt=&quot;NoAuthHeader&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;返回的失败信息是:authentication failed, missing AUTHORIZATION header&lt;/p&gt;
+
+&lt;h5 id=&quot;使用错误的token请求changepassword&quot;&gt;使用错误的Token请求changePassword&lt;/h5&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/scaffold/ErrorAuthHeader.png&quot; alt=&quot;ErrorAuthHeader&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;返回的失败信息是:authentication failed : InvocationException: code=400;msg=CommonExceptionData [message=incorrect token]&lt;/p&gt;
+
+&lt;h5 id=&quot;使用正确的token请求changepassword&quot;&gt;使用正确的Token请求changePassword&lt;/h5&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/scaffold/AuthSuccess.png&quot; alt=&quot;AuthSuccess&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;修改密码成功。&lt;/p&gt;
+
+&lt;p&gt;&lt;strong&gt;这里可能有疑问,使用zhengyangyong登录后,是可以通过这个Token修改其他用户例如lidagang的密码的,这是因为我们目前构建的validate仅检查Token的有效性,而不做权限检查,基于RBAC的角色权限管理系统将会在未来构建。&lt;/strong&gt;&lt;/p&gt;
+
+&lt;blockquote&gt;
+  &lt;p&gt;提示:&lt;/p&gt;
+  &lt;ol&gt;
+    &lt;li&gt;AuthenticationFilter的完整&lt;a href=&quot;https://github.com/zhengyangyong/scaffold/blob/master/edge-service/src/main/java/org/apache/servicecomb/scaffold/edge/filter/AuthenticationFilter.java&quot;&gt;代码&lt;/a&gt;;&lt;/li&gt;
+    &lt;li&gt;HttpServerFilter的&lt;a href=&quot;https://github.com/apache/incubator-servicecomb-docs/blob/master/java-chassis-reference/zh_CN/general-development/http-filter.md&quot;&gt;介绍&lt;/a&gt;。&lt;/li&gt;
+  &lt;/ol&gt;
+&lt;/blockquote&gt;
+
+&lt;h1 id=&quot;7小结&quot;&gt;7.小结&lt;/h1&gt;
+
+&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;本文详细介绍了如何使用http://start.servicecomb.io脚手架快速构建微服务项目、使用领域驱动设计(Domain-Driven Design,DDD)设计地产CRM系统、使用Edge Service构建统一认证边缘服务等内容。至此,一个地产客户关系管理系统的骨架已经初步搭建起来,剩下的模块,我们将在接下来的文章里详细介绍。
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;</content><author><name>Yangyong Zheng</name><email>yangyong.zheng@huawei.com</email><uri>https://zhengyangyong.github.io</uri></author><category term="CRM" /><category term="Scaffold" /><category term="DDD" /><category term="JPA" /><category term="JWT" /><category term="Edge" /><summary type="html">客户管理系统微服务化实战-PartI</summary></entry><entry xml:lang="en"><title type="html">[Milestone] Apache ServiceComb (incubating) Release Version 1.0.0</title><link href="/docs/release-note [...]
 
 &lt;p&gt;​	ServiceComb has entered the Apache Foundation since December 2017, and version 1.0.0-m1 released in March 2018  , 1.0.0-m2 in  June 2018 . Now in August 2018, the milestone of release -1.0.0  was completed.&lt;/p&gt;
 
@@ -411,257 +1209,53 @@
 
 &lt;p&gt;那么,按照通常的思路,是不是可以直接指定Envoy,让Consul启动Envoy来实现集成呢?理论上确实可行,但是Consul是无法管理第三方代理的配置的,Envoy的配置只能由用户自行定义,增加了运维成本,也不便于管理。&lt;/p&gt;
 
-&lt;p&gt;这时,就轮到HashiCorp好基友&lt;a href=&quot;https://www.solo.io/&quot;&gt;solo.io&lt;/a&gt;出品的&lt;a href=&quot;https://github.com/solo-io/gloo-connect&quot;&gt;Gloo Connect&lt;/a&gt;闪亮登场了!solo.io是一家提供Cloud Native工具和集成方案的公司,例如支持Kubernetes和Istio的微服务debugger &lt;a href=&quot;https://github.com/solo-io/squash&quot;&gt;squash&lt;/a&gt;,基于Envoy的function gateway解决方案&lt;a href=&quot;https://github.com/solo-io/gloo&quot;&gt;Gloo&lt;/a&gt;。在刚刚过去的&lt;a href=&quot;https://www.hashidays.com/&quot;&gt [...]
-
-&lt;p&gt;Gloo Connect作为Consul的第三方代理,在启动时会把Consul Connect proxy的配置和Gloo的配置转换成Envoy的配置,并启动Envoy实例。同时,Gloo Connect也可以通过命令行对Envoy的配置进行动态修改。下面,我们根据Gloo Connect的官方示例来演示如何将Consul与Envoy集成。&lt;/p&gt;
-
-&lt;h6 id=&quot;tips&quot;&gt;Tips&lt;/h6&gt;
-
-&lt;p&gt;根据Gloo Connect的&lt;a href=&quot;https://github.com/solo-io/gloo-connect/blob/master/docs/getting-started/README.md&quot;&gt;Getting Started文档&lt;/a&gt;,Consul 1.2.0中,存在一个已知bug,运行示例需要下载一个&lt;a href=&quot;https://github.com/solo-io/gloo-connect/releases/download/v0.1.0/consul&quot;&gt;预先编译的Consul版本&lt;/a&gt;,或者使用1.2.1版本,并把Consul配置到系统路径,或者当前目录。&lt;/p&gt;
-
-&lt;p&gt;首先,我们将gloo-connect项目clone到本地,进入getting-started目录,并编译运行&lt;code class=&quot;highlighter-rouge&quot;&gt;service.go&lt;/code&gt;:&lt;/p&gt;
-
-&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;git clone https://github.com/solo-io/gloo-connect/
-&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;gloo-connect/docs/getting-started
-&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;go run service.go &amp;amp;
-&lt;/code&gt;&lt;/pre&gt;
-&lt;/div&gt;
-
-&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;service.go&lt;/code&gt;运行后监听8080端口,交替返回200和500状态码。接下来,我们执行当前目录下的&lt;code class=&quot;highlighter-rouge&quot;&gt;run-consul.sh&lt;/code&gt;脚本,该脚本会在&lt;code class=&quot;highlighter-rouge&quot;&gt;./run-data/consul-config&lt;/code&gt;目录下生成两个配置信息&lt;code class=&quot;highlighter-rouge&quot;&gt;connect.json&lt;/code&gt;和&lt;code class=&quot;highlighter-rouge&quot;&gt;service.json&lt;/code&gt;,前者将gloo-connect指定为Consul Connect默认的proxy,后者定义 [...]
-
-&lt;p&gt;脚本启动后,我们通过进程管理工具,可以看到Consul为每个服务启动了第三方代理gloo-connect,而每个gloo-connect又启动了一个Envoy进程,并把转换好的配置传给Envoy:&lt;/p&gt;
-
-&lt;p&gt;&lt;img src=&quot;https://github.com/crystaldust/imagestorage/raw/master/consul-servicemesh/gloo-connect.png&quot; alt=&quot;gloo-connect&quot; /&gt;&lt;/p&gt;
-
-&lt;p&gt;此时,真正监听1234端口的就是Envoy进程了。下面,我们访问1234端口,会看到服务交替返回状态码200和500:&lt;/p&gt;
-
-&lt;p&gt;&lt;img src=&quot;https://github.com/crystaldust/imagestorage/raw/master/consul-servicemesh/req-microsvc1-by-proxy.png&quot; alt=&quot;req-microsvc1-by-proxy&quot; /&gt;&lt;/p&gt;
-
-&lt;p&gt;我们用gloo-connect命令为&lt;code class=&quot;highlighter-rouge&quot;&gt;microsvc1&lt;/code&gt;的Envoy sidecar配置一条retry规则:&lt;/p&gt;
-
-&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;./gloo-connect &lt;span class=&quot;nb&quot;&gt;set &lt;/span&gt;service microsvc1 --http --retries&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;3
-&lt;/code&gt;&lt;/pre&gt;
-&lt;/div&gt;
-
-&lt;p&gt;这样,当通过Envoy代理访问&lt;code class=&quot;highlighter-rouge&quot;&gt;microsvc1&lt;/code&gt;时,如果遇到500,会重试3次,其实在第一次重试时就会返回200了,因此我们访问1234端口,每次都会返回200:&lt;/p&gt;
-
-&lt;p&gt;&lt;img src=&quot;https://github.com/crystaldust/imagestorage/raw/master/consul-servicemesh/gloo-connect-retries.png&quot; alt=&quot;gloo-connect-retries&quot; /&gt;&lt;/p&gt;
-
-&lt;p&gt;这样,我们就借助一个第三方工具gloo-connect,实现了Consul和Envoy的集成!需要说明的是,gloo-connect也处于早期阶段,目前支持的配置还比较少,除了&lt;code class=&quot;highlighter-rouge&quot;&gt;retries&lt;/code&gt;,只支持&lt;code class=&quot;highlighter-rouge&quot;&gt;http&lt;/code&gt;(是否使用http模式,默认为false)和&lt;code class=&quot;highlighter-rouge&quot;&gt;timeout&lt;/code&gt;。&lt;/p&gt;
-
-&lt;h4 id=&quot;总结&quot;&gt;总结&lt;/h4&gt;
-
-&lt;p&gt;目前来看,Consul Connect虽然还刚刚起步,但是已经让我们非常惊喜的看到了一个相对完整、简单易用的Service Mesh方案,通过第三方的集成,未来也许会有更多优秀的代理,甚至是用户自己定义的代理,不断加入到Consul的阵营中。随着Consul Connect的不断演进和HashiCorp的持续投入,我们相信,Consul会在未来的Service Mesh竞争中占有一席之地,也希望业界不断涌现Consul这样优秀的方案,给用户更多选择,让Service Mesh的世界越来越精彩。&lt;/p&gt;
-
-&lt;h4 id=&quot;后记&quot;&gt;后记&lt;/h4&gt;
-
-&lt;p&gt;不同于Istio、Conduit等“天生Service Mesh”的微服务方案,Consul本身是一个成熟的服务发现工具,其实现Service Mesh的思路非常有意思。在笔者看来,除去“控制面”“数据面”这种基于大的框架角度的划分,Service Mesh从功能上要完成三件事情:服务注册与发现,配置管理(存储、下发),服务治理。Consul在第一点已经做得非常好了,配置方面,Consul的集群内共享KV为实现配置管理奠定了坚实的基础,完全可以通过第三方工具、或者Consul自身增强的特性,基于KV实现配置的下发。服务治理方面与Consul本身关系不大,但是通过Connect,Consul具备了为服务配置代理或者集成第三方代理的能力,完全可以用已有的优秀代理来实现Service Mesh数据面,补足服务治理的能力。&lt;/p&gt;
-
-&lt;p&gt;Consul的方案,也给已经在业界流行并经过生产环境验证的“上一代”微服务框架带来很多启发。在Service Mesh概念流行之前,已有很多基于SDK的侵入式微服务框架。这些框架往往提供服务发现机制或者或者兼容开源的服务发现机制,有一些也提供配置的管理,只是需要在应用程序中引入SDK来实现服务治理,因此对于不同的语言,都要提供相应的SDK。但是相对于Consul,毕竟这些框架已经具备了微服务治理的能力,它们向Service Mesh转型的过程中,更需要的是将治理能力从SDK转移到网络层面的代理中。在这一点上,华为开源的微服务框架ServiceComb的做法非常值得参考。在ServiceComb中,已有Service Center实现服务的注册与发现,基于archaius的配置更新机制,以及提供治理能力的SDK(支持Java和Go两种语言),为了实现数据面的代理,ServiceComb团队将SDK中实现
 治理能力的代码剥离出来,基于此开发了网络代理&lt;a href=&quot;https://github.com/go-chassis/mesher&q [...]
-&lt;p&gt;在前一篇博文&lt;a href=&quot;http://servicecomb.incubator.apache.org/cn/docs/easy-build-microservice-system-part-III/&quot;&gt;《轻松微服务系列:开发高性能边缘服务》&lt;/a&gt;,我们开发了具备基本路由能力的高性能边缘服务。这篇博文我们将在Edge服务上实施如何扩展支持统一认证。&lt;/p&gt;
-
-&lt;h3 id=&quot;设计思路&quot;&gt;设计思路&lt;/h3&gt;
-&lt;p&gt;正如前面的博文提到过,统一认证的目的是在Edge入口处进行访问认证,避免需要在所有的微服务中都承载重复的认证机制,因此:&lt;/p&gt;
-&lt;ol&gt;
-  &lt;li&gt;我们先要将认证功能作为一个独立的Procuder发布出来,使Edge服务能够随时认证Token,我们将其命名为&lt;code class=&quot;highlighter-rouge&quot;&gt;AuthenticationService&lt;/code&gt;,放在用户服务中;&lt;/li&gt;
-  &lt;li&gt;将无需认证的访问请求识别出来,包括:&lt;/li&gt;
-&lt;/ol&gt;
-
-&lt;table&gt;
-  &lt;thead&gt;
-    &lt;tr&gt;
-      &lt;th style=&quot;text-align: left&quot;&gt;功能&lt;/th&gt;
-      &lt;th style=&quot;text-align: left&quot;&gt;描述&lt;/th&gt;
-    &lt;/tr&gt;
-  &lt;/thead&gt;
-  &lt;tbody&gt;
-    &lt;tr&gt;
-      &lt;td style=&quot;text-align: left&quot;&gt;login&lt;/td&gt;
-      &lt;td style=&quot;text-align: left&quot;&gt;登录验证,通过后为用户生成Token&lt;/td&gt;
-    &lt;/tr&gt;
-    &lt;tr&gt;
-      &lt;td style=&quot;text-align: left&quot;&gt;logon&lt;/td&gt;
-      &lt;td style=&quot;text-align: left&quot;&gt;新用户注册&lt;/td&gt;
-    &lt;/tr&gt;
-  &lt;/tbody&gt;
-&lt;/table&gt;
-
-&lt;p&gt;除此之外其他业务请求都需要做Token认证;&lt;/p&gt;
-
-&lt;ol&gt;
-  &lt;li&gt;Edge服务转发访问请求之前,对需要认证的请求先做统一认证,认证通过之后才转发,我们使用&lt;code class=&quot;highlighter-rouge&quot;&gt;HttpServerFilter&lt;/code&gt;扩展这个能力:&lt;/li&gt;
-&lt;/ol&gt;
-
-&lt;p&gt;&lt;img src=&quot;/assets/images/scaffold/FilterChain.png&quot; alt=&quot;FilterChain&quot; /&gt;&lt;/p&gt;
-
-&lt;p&gt;统一认证流程时序图为:&lt;/p&gt;
-
-&lt;p&gt;&lt;img src=&quot;/assets/images/scaffold/EdgeAuth.png&quot; alt=&quot;EdgeAuth&quot; /&gt;&lt;/p&gt;
-
-&lt;h3 id=&quot;实现统一认证&quot;&gt;实现统一认证&lt;/h3&gt;
-&lt;h4 id=&quot;第一步发布认证服务&quot;&gt;第一步:发布认证服务&lt;/h4&gt;
-&lt;h5 id=&quot;定义authenticationservice&quot;&gt;定义AuthenticationService&lt;/h5&gt;
-&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;AuthenticationService&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
-  &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;validate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;token&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
-&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
-&lt;/code&gt;&lt;/pre&gt;
-&lt;/div&gt;
-&lt;h5 id=&quot;实现并发布authenticationservice&quot;&gt;实现并发布AuthenticationService&lt;/h5&gt;
-&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nd&quot;&gt;@RestSchema&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;schemaId&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;authentication&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
-&lt;span class=&quot;nd&quot;&gt;@RequestMapping&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;/&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
-&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;AuthenticationServiceImpl&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;implements&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;AuthenticationService&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
-
-  &lt;span class=&quot;kd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;TokenStore&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tokenStore&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
-
-  &lt;span class=&quot;nd&quot;&gt;@Autowired&lt;/span&gt;
-  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;AuthenticationServiceImpl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;TokenStore&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tokenStore&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
-    &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;tokenStore&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tokenStore&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
-  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
-
-  &lt;span class=&quot;nd&quot;&gt;@Override&lt;/span&gt;
-  &lt;span class=&quot;nd&quot;&gt;@GetMapping&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;validate&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
-  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;validate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;token&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
-    &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;userName&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tokenStore&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;validate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;token&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
-    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;userName&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
-      &lt;span class=&quot;k&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;InvocationException&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BAD_REQUEST&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;incorrect token&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
-    &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
-    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;userName&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
-  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
-&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
-&lt;/code&gt;&lt;/pre&gt;
-&lt;/div&gt;
-
-&lt;h4 id=&quot;第二步实现统一认证authenticationfilter&quot;&gt;第二步:实现统一认证AuthenticationFilter&lt;/h4&gt;
-&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;AuthenticationFilter&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;implements&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HttpServerFilter&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
-
-  &lt;span class=&quot;kd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;RestTemplate&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;template&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;RestTemplateBuilder&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;create&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;();&lt;/span&gt;
-
-  &lt;span class=&quot;kd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;USER_SERVICE_NAME&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;user-service&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
-
-  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;EDGE_AUTHENTICATION_NAME&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;edge-authentication-name&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
-
-  &lt;span class=&quot;kd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Set&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NOT_REQUIRED_VERIFICATION_USER_SERVICE_METHODS&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;= [...]
-      &lt;span class=&quot;n&quot;&gt;Arrays&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;asList&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;login&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;logon&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;validate&quot;&lt;/span&gt;&lt;span [...]
-
-  &lt;span class=&quot;nd&quot;&gt;@Override&lt;/span&gt;
-  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;getOrder&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
-    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
-  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
-
-  &lt;span class=&quot;nd&quot;&gt;@Override&lt;/span&gt;
-  &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Response&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;afterReceiveRequest&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Invocation&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;invocation&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HttpServletRequestEx&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;httpServletReque [...]
-    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;isInvocationNeedValidate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;invocation&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;getMicroserviceName&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(),&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;invocation&lt;/span&gt;&lt;span  [...]
-      &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;token&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;httpServletRequestEx&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;getHeader&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;AUTHORIZATION&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
-      &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;StringUtils&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;isNotEmpty&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;token&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
-        &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;userName&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;template&lt;/span&gt;
-            &lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;getForObject&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;cse://&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;USER_SERVICE_NAME&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;/validate?token={token}&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;& [...]
-        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;StringUtils&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;isNotEmpty&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;userName&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
-          &lt;span class=&quot;c1&quot;&gt;//Add header&lt;/span&gt;
-          &lt;span class=&quot;n&quot;&gt;invocation&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;getContext&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;put&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;EDGE_AUTHENTICATION_NAME&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;userName&lt;/span&gt;&lt;span clas [...]
-        &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
-          &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Response&lt;/span&gt;
-              &lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;failResp&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;InvocationException&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Status&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;UNAUTHORIZED&lt;/span&gt;&lt;span class=&qu [...]
-        &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
-      &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
-        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Response&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;failResp&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;
-            &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;InvocationException&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Status&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;UNAUTHORIZED&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;authentication failed, missing AUTHORIZATION header&quot;&lt;/span&gt;&lt;span c [...]
-      &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
-    &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
-    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
-  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
-
-  &lt;span class=&quot;kd&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;boolean&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;isInvocationNeedValidate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;serviceName&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;operationPath&lt;/span&gt;& [...]
-    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;USER_SERVICE_NAME&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;equals&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;serviceName&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
-      &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;method&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NOT_REQUIRED_VERIFICATION_USER_SERVICE_METHODS&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
-        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;operationPath&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;startsWith&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
-          &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
-        &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
-      &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
-    &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
-    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
-  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
-&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
-&lt;/code&gt;&lt;/pre&gt;
-&lt;/div&gt;
-
-&lt;p&gt;别忘了通过SPI机制加载它,在&lt;code class=&quot;highlighter-rouge&quot;&gt;resources\META-INF\services&lt;/code&gt;目录中创建&lt;code class=&quot;highlighter-rouge&quot;&gt;org.apache.servicecomb.common.rest.filter.HttpServerFilter&lt;/code&gt;文件:&lt;/p&gt;
-&lt;div class=&quot;language-text highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;org.apache.servicecomb.scaffold.edge.filter.AuthenticationFilter
-&lt;/code&gt;&lt;/pre&gt;
-&lt;/div&gt;
-
-&lt;h4 id=&quot;第三步在用户微服务中增加修改密码的功能用于验证&quot;&gt;第三步:在用户微服务中增加修改密码的功能用于验证&lt;/h4&gt;
-&lt;p&gt;现有的&lt;code class=&quot;highlighter-rouge&quot;&gt;login&lt;/code&gt;和&lt;code class=&quot;highlighter-rouge&quot;&gt;logon&lt;/code&gt;都无需认证,因此我们在用户微服务中增加需要认证的修改密码的功能用于验证统一认证。&lt;/p&gt;
-&lt;h5 id=&quot;在userservice中添加修改密码&quot;&gt;在UserService中添加修改密码&lt;/h5&gt;
-&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;UserService&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
-  &lt;span class=&quot;n&quot;&gt;ResponseEntity&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Boolean&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;logon&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;UserDTO&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
-
-  &lt;span class=&quot;n&quot;&gt;ResponseEntity&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Boolean&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;login&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;UserDTO&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
-  &lt;span class=&quot;c1&quot;&gt;//需要认证的修改密码功能&lt;/span&gt;
-  &lt;span class=&quot;n&quot;&gt;ResponseEntity&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Boolean&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;changePassword&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;UserUpdateDTO&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;userUpdate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
-&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
-&lt;/code&gt;&lt;/pre&gt;
-&lt;/div&gt;
-
-&lt;h5 id=&quot;在userserviceimpl中实现修改密码&quot;&gt;在UserServiceImpl中实现修改密码&lt;/h5&gt;
-&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nd&quot;&gt;@Override&lt;/span&gt;
-&lt;span class=&quot;nd&quot;&gt;@PostMapping&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;path&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;changePassword&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
-&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ResponseEntity&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Boolean&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;changePassword&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nd&quot;&gt;@RequestBody&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;UserUpdateDTO&lt;/span&g [...]
-  &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;validateUserUpdate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;userUpdate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
-    &lt;span class=&quot;n&quot;&gt;UserEntity&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;dbUser&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;repository&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;findByName&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;userUpdate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot; [...]
-    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;dbUser&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
-      &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;dbUser&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;getPassword&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;equals&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;userUpdate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt; [...]
-        &lt;span class=&quot;n&quot;&gt;dbUser&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;setPassword&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;userUpdate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;getNewPassword&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;());&lt;/span&gt;
-        &lt;span class=&quot;n&quot;&gt;repository&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;save&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;dbUser&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
-        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ResponseEntity&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;gt;(&lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HttpStatus&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;OK&lt;/span&gt;&lt;span class=& [...]
-      &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
-      &lt;span class=&quot;k&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;InvocationException&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BAD_REQUEST&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;wrong password&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
-    &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
-    &lt;span class=&quot;k&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;InvocationException&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BAD_REQUEST&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;user name not exist&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
-  &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
-  &lt;span class=&quot;k&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;InvocationException&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BAD_REQUEST&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;incorrect user&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
-&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
-&lt;/code&gt;&lt;/pre&gt;
-&lt;/div&gt;
-
-&lt;h3 id=&quot;验证实现的统一认证&quot;&gt;验证实现的统一认证&lt;/h3&gt;
-&lt;h4 id=&quot;确认authenticationfilter在edge服务中成功加载&quot;&gt;确认AuthenticationFilter在Edge服务中成功加载&lt;/h4&gt;
-&lt;p&gt;在Edge服务的启动日志中能够找到:&lt;/p&gt;
-&lt;div class=&quot;language-text highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;2018-07-13 14:38:48,756 [INFO]   1. org.apache.servicecomb.scaffold.edge.filter.AuthenticationFilter. org.apache.servicecomb.foundation.common.utils.SPIServiceUtils.loadSortedService(SPIServiceUtils.java:79)
+&lt;p&gt;这时,就轮到HashiCorp好基友&lt;a href=&quot;https://www.solo.io/&quot;&gt;solo.io&lt;/a&gt;出品的&lt;a href=&quot;https://github.com/solo-io/gloo-connect&quot;&gt;Gloo Connect&lt;/a&gt;闪亮登场了!solo.io是一家提供Cloud Native工具和集成方案的公司,例如支持Kubernetes和Istio的微服务debugger &lt;a href=&quot;https://github.com/solo-io/squash&quot;&gt;squash&lt;/a&gt;,基于Envoy的function gateway解决方案&lt;a href=&quot;https://github.com/solo-io/gloo&quot;&gt;Gloo&lt;/a&gt;。在刚刚过去的&lt;a href=&quot;https://www.hashidays.com/&quot;&gt [...]
+
+&lt;p&gt;Gloo Connect作为Consul的第三方代理,在启动时会把Consul Connect proxy的配置和Gloo的配置转换成Envoy的配置,并启动Envoy实例。同时,Gloo Connect也可以通过命令行对Envoy的配置进行动态修改。下面,我们根据Gloo Connect的官方示例来演示如何将Consul与Envoy集成。&lt;/p&gt;
+
+&lt;h6 id=&quot;tips&quot;&gt;Tips&lt;/h6&gt;
+
+&lt;p&gt;根据Gloo Connect的&lt;a href=&quot;https://github.com/solo-io/gloo-connect/blob/master/docs/getting-started/README.md&quot;&gt;Getting Started文档&lt;/a&gt;,Consul 1.2.0中,存在一个已知bug,运行示例需要下载一个&lt;a href=&quot;https://github.com/solo-io/gloo-connect/releases/download/v0.1.0/consul&quot;&gt;预先编译的Consul版本&lt;/a&gt;,或者使用1.2.1版本,并把Consul配置到系统路径,或者当前目录。&lt;/p&gt;
+
+&lt;p&gt;首先,我们将gloo-connect项目clone到本地,进入getting-started目录,并编译运行&lt;code class=&quot;highlighter-rouge&quot;&gt;service.go&lt;/code&gt;:&lt;/p&gt;
+
+&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;git clone https://github.com/solo-io/gloo-connect/
+&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;gloo-connect/docs/getting-started
+&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;go run service.go &amp;amp;
 &lt;/code&gt;&lt;/pre&gt;
 &lt;/div&gt;
 
-&lt;h4 id=&quot;用户登录&quot;&gt;用户登录&lt;/h4&gt;
-&lt;p&gt;使用zhengyangyong登录:&lt;/p&gt;
... 652 lines suppressed ...


[incubator-servicecomb-website] 01/02: Merge branch 'master' into asf-site

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ningjiang pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-website.git

commit ea0b31bf2b79671c810408fa7dbbed141a6fb0a7
Merge: ad81a69 a6d4d31
Author: Willem Jiang <ji...@huawei.com>
AuthorDate: Tue Aug 28 14:56:43 2018 +0800

    Merge branch 'master' into asf-site

 _developers/cn/team.md                             |  43 +-
 _developers/team.md                                |  39 +-
 ...-05-17-easy-build-microservice-system-part-I.md | 136 ----
 ...05-23-easy-build-microservice-system-part-II.md | 325 ---------
 ...6-07-easy-build-microservice-system-part-III.md | 160 -----
 ...07-10-easy-build-microservice-system-part-IV.md | 198 ------
 _posts/cn/2018-08-28-crm-part-I.md                 | 747 +++++++++++++++++++++
 assets/images/scaffold/OutputHello.png             | Bin 17437 -> 19140 bytes
 assets/images/scaffold/StartServiceComb.io.png     | Bin 0 -> 75973 bytes
 9 files changed, 791 insertions(+), 857 deletions(-)