You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by gi...@apache.org on 2019/06/27 13:01:22 UTC

[dubbo-website] branch asf-site updated: Website updated with ef991ad2e93c26914bc3976fb0df1f13c911e95e

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

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


The following commit(s) were added to refs/heads/asf-site by this push:
     new 28f9a05  Website updated with ef991ad2e93c26914bc3976fb0df1f13c911e95e
28f9a05 is described below

commit 28f9a0535755a3b5a7ddfd01a12d34308925569b
Author: jenkins <us...@infra.apache.org>
AuthorDate: Thu Jun 27 13:01:18 2019 +0000

    Website updated with ef991ad2e93c26914bc3976fb0df1f13c911e95e
---
 COMMIT_ID                                          |   2 +-
 md_json/docs.json                                  |   5 +
 .../configcenter/design.html}                      | 150 +++++++++------------
 zh-cn/docs/dev/configcenter/design.json            |   6 +
 zh-cn/docs/user/configuration/config-center.html   |   4 +-
 zh-cn/docs/user/configuration/config-center.json   |   2 +-
 6 files changed, 77 insertions(+), 92 deletions(-)

diff --git a/COMMIT_ID b/COMMIT_ID
index 76844fd..783218c 100644
--- a/COMMIT_ID
+++ b/COMMIT_ID
@@ -1 +1 @@
-d5b2314946d78ebc3fd84e053067ee2edb14ac66
+ef991ad2e93c26914bc3976fb0df1f13c911e95e
diff --git a/md_json/docs.json b/md_json/docs.json
index bc30b12..a2ba31e 100644
--- a/md_json/docs.json
+++ b/md_json/docs.json
@@ -1086,6 +1086,11 @@
       "meta": {}
     },
     {
+      "filename": "design.md",
+      "link": "/zh-cn/docs/dev/configcenter/design.html",
+      "meta": {}
+    },
+    {
       "filename": "contract.md",
       "link": "/zh-cn/docs/dev/contract.html",
       "meta": {}
diff --git a/zh-cn/docs/user/configuration/config-center.html b/zh-cn/docs/dev/configcenter/design.html
similarity index 78%
copy from zh-cn/docs/user/configuration/config-center.html
copy to zh-cn/docs/dev/configcenter/design.html
index 29f69d3..7abf64a 100644
--- a/zh-cn/docs/user/configuration/config-center.html
+++ b/zh-cn/docs/dev/configcenter/design.html
@@ -4,111 +4,85 @@
 <head>
 	<meta charset="UTF-8">
 	<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
-	<meta name="keywords" content="config-center" />
-	<meta name="description" content="config-center" />
+	<meta name="keywords" content="design" />
+	<meta name="description" content="design" />
 	<!-- 网页标签标题 -->
-	<title>config-center</title>
+	<title>design</title>
 	<link rel="shortcut icon" href="/img/dubbo.ico"/>
 	<link rel="stylesheet" href="/build/documentation.css" />
 </head>
 <body>
-	<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/zh-cn/index.html"><img class="logo" src="/img/dubbo_colorful.png"/></a><div class="search search-normal"><span class="icon-search"></span></div><span class="language-switch language-switch-normal">En</span><div class="header-menu"><img class="header-menu-toggle" src="/img/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a [...]
-<p>配置中心(v2.7.0)在Dubbo中承担两个职责:</p>
+	<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/zh-cn/index.html"><img class="logo" src="/img/dubbo_colorful.png"/></a><div class="search search-normal"><span class="icon-search"></span></div><span class="language-switch language-switch-normal">En</span><div class="header-menu"><img class="header-menu-toggle" src="/img/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a [...]
+<h2>设计目的</h2>
+<p>配置中心的核心功能是作为Key-Value存储,Dubbo框架告知配置中心其关心的key,配置中心返回该key对应的value值。</p>
+<p>按照应用场景划分,配置中心在Dubbo框架中主要承担以下职责:</p>
+<ul>
+<li>作为外部化配置中心,即存储dubbo.properties配置文件,此时,key值通常为文件名如dubbo.properties,value则为配置文件内容。</li>
+<li>存储单个配置项,如各种开关项、常量值等。</li>
+<li>存储服务治理规则,此时key通常按照&quot;服务名+规则类型&quot;的格式来组织,而value则为具体的治理规则。</li>
+</ul>
+<p>为了进一步实现对key-value的分组管理,Dubbo的配置中心还加入了namespace、group的概念,这些概念在很多专业的第三方配置中心中都有体现,通常情况下,namespace用来隔离不同的租户,group用来对统一租户的key集合做分组。</p>
+<p>当前,Dubbo配置中心实现了对Zookeeper、Nacos、Etcd、Consul、Apollo的对接,接下来我们具体看一下Dubbo抽象的配置中心是怎么映射到具体的第三方实现中的。</p>
+<h2>实现原理</h2>
+<h3>Zookeeper</h3>
+<p>zookeeper提供了一个树状的存储模型,其实现原理如下:</p>
+<p><img src="/img/configcenter_zk_model.jpg" alt="image-20190127225608553"></p>
+<p>namespace, group, key等分别对应不同层级的ZNode节点,而value则作为根ZNode节点的值存储。</p>
 <ol>
-<li>外部化配置。启动配置的集中式存储 (简单理解为dubbo.properties的外部化存储)。</li>
-<li>服务治理。服务治理规则的存储与通知。</li>
-</ol>
-<p>启用动态配置(以Zookeeper为例,可查看<a href="../references/xml/dubbo-config-center.md">动态配置配置项详解</a>):</p>
-<pre><code class="language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:config-center</span> <span class="hljs-attr">address</span>=<span class="hljs-string">"zookeeper://127.0.0.1:2181"</span>/&gt;</span>
-</code></pre>
-<p>或者</p>
-<pre><code class="language-properties"><span class="hljs-meta">dubbo.config-center.address</span>=<span class="hljs-string">zookeeper://127.0.0.1:2181</span>
-</code></pre>
-<p>或者</p>
-<pre><code class="language-java">ConfigCenterConfig configCenter = <span class="hljs-keyword">new</span> ConfigCenterConfig();
-configCenter.setAddress(<span class="hljs-string">"zookeeper://127.0.0.1:2181"</span>);
-</code></pre>
-<blockquote>
-<p>为了兼容2.6.x版本配置,在使用Zookeeper作为注册中心,且没有显示配置配置中心的情况下,Dubbo框架会默认将此Zookeeper用作配置中心,但将只作服务治理用途。</p>
-</blockquote>
-<h2>外部化配置</h2>
-<p>外部化配置目的之一是实现配置的集中式管理,这部分业界已经有很多成熟的专业配置系统如Apollo, Nacos等,Dubbo所做的主要是保证能配合这些系统正常工作。</p>
-<p>外部化配置和其他本地配置在内容和格式上并无区别,可以简单理解为<code>dubbo.properties</code>的外部化存储,配置中心更适合将一些公共配置如注册中心、元数据中心配置等抽取以便做集中管理。</p>
-<pre><code class="language-properties"><span class="hljs-comment"># 将注册中心地址、元数据中心地址等配置集中管理,可以做到统一环境、减少开发侧感知。</span>
-<span class="hljs-meta">dubbo.registry.address</span>=<span class="hljs-string">zookeeper://127.0.0.1:2181</span>
-<span class="hljs-meta">dubbo.registry.simplified</span>=<span class="hljs-string">true</span>
-
-<span class="hljs-meta">dubbo.metadataReport.address</span>=<span class="hljs-string">zookeeper://127.0.0.1:2181</span>
-
-<span class="hljs-meta">dubbo.protocol.name</span>=<span class="hljs-string">dubbo</span>
-<span class="hljs-meta">dubbo.protocol.port</span>=<span class="hljs-string">20880</span>
-
-<span class="hljs-meta">dubbo.application.qos.port</span>=<span class="hljs-string">33333</span>
-</code></pre>
+<li>
+<p>外部化配置中心 dubbo.properties</p>
+<p><img src="/img/configcenter_zk_properties.jpg" alt="image-20190127225608553"></p>
+<p>上图展示了两个不同作用域的dubbo.properties文件在zookeeper中的存储结构:</p>
 <ul>
-<li>优先级</li>
+<li>命名空间namespace都为:dubbo</li>
+<li>分组group:全局级别为dubbo,所有应用共享;应用级别为应用名demo-provider,只对改应用生效</li>
+<li>key:dubbo.properties</li>
 </ul>
-<p>外部化配置默认较本地配置有更高的优先级,因此这里配置的内容会覆盖本地配置值,关于<a href="./configuration-load-process.md">各配置形式间的覆盖关系</a>有单独一章说明,你也可通过以下选项调整配置中心的优先级:</p>
-<pre><code class="language-properties"><span class="hljs-meta">-Ddubbo.configCenter.highestPriority</span>=<span class="hljs-string">false</span>
-</code></pre>
+</li>
+<li>
+<p>单个配置项</p>
+<p><img src="/img/configcenter_zk_singleitem.jpg" alt="image-20190127225608553"></p>
+<p>设置优雅停机事件为15000:</p>
 <ul>
-<li>作用域</li>
+<li>命名空间namespace:dubbo</li>
+<li>分组group:dubbo</li>
+<li>key:dubbo.service.shutdown.wait=15000</li>
 </ul>
-<p>外部化配置有全局和应用两个级别,全局配置是所有应用共享的,应用级配置是由每个应用自己维护且只对自身可见的。</p>
-<p>当前已支持的扩展实现有Zookeeper、Apollo。</p>
-<h4>Zookeeper</h4>
-<pre><code class="language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:config-center</span> <span class="hljs-attr">address</span>=<span class="hljs-string">"zookeeper://127.0.0.1:2181"</span>/&gt;</span>
-</code></pre>
-<p>默认所有的配置都存储在<code>/dubbo/config</code>节点,具体节点结构图如下:</p>
-<p><img src="/img/zk-configcenter.jpg" alt="image-20190127225608553"></p>
+</li>
+<li>
+<p>服务治理规则</p>
+<p><img src="/img/configcenter_zk_rule.jpg" alt="image-20190127225608553"></p>
+<p>上图展示了一条应用级别的条件路由规则:</p>
 <ul>
-<li>namespace,用于不同配置的环境隔离。</li>
-<li>config,Dubbo约定的固定节点,不可更改,所有配置和服务治理规则都存储在此节点下。</li>
-<li>dubbo/application,分别用来隔离全局配置、应用级别配置:dubbo是默认group值,application对应应用名</li>
-<li>dubbo.properties,此节点的node value存储具体配置内容</li>
+<li>命名空间namespace:dubbo</li>
+<li>分组group:dubbo</li>
+<li>key:governance-conditionrouter-consumer.condition-router,其中governance-conditionrouter-consumer为应用名,condition-router代表条件路由</li>
 </ul>
-<h4>Apollo</h4>
-<pre><code class="language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:config-center</span> <span class="hljs-attr">protocol</span>=<span class="hljs-string">"apollo"</span> <span class="hljs-attr">address</span>=<span class="hljs-string">"127.0.0.1:2181"</span>/&gt;</span>
-</code></pre>
-<p>Apollo中的一个核心概念是命名空间 - namespace(和上面zookeeper的namespace概念不同),在这里全局和应用级别配置就是通过命名空间来区分的。</p>
-<p>默认情况下,Dubbo会从名叫<code>dubbo</code>的命名空间中读取全局配置(<code>&lt;dubbo:config-center namespace=&quot;your namespace&quot;&gt;</code>)</p>
-<p><img src="/img/apollo-configcenter-dubbo.jpg" alt="image-20190128095444169"></p>
-<p>而应用自有的配置,会从<code>application</code>命名空间读取</p>
-<p><img src="/img/apollo-configcenter-application.jpg" alt="image-20190128095659517"></p>
 <blockquote>
-<p>注意:当前dubbo.properties是作为一个key存储在Apollo namespace中,为更好的适应Apollo的设计理念,在接下来的版本中可能会调整为</p>
-<p><img src="/img/apollo-configcenter-enhance.jpg" alt="image-20190128100058755"></p>
-</blockquote>
-<h4>自己加载外部化配置</h4>
-<p>所谓Dubbo对配置中心的支持,本质上就是把<code>.properties</code>从远程拉取到本地,然后和本地的配置做一次融合。理论上只要Dubbo框架能拿到需要的配置就可以正常的启动,它并不关心这些配置是自己加载到的还是应用直接塞给它的,所以Dubbo还提供了以下API,让用户将自己组织好的配置塞给Dubbo框架(配置加载的过程是用户要完成的),这样Dubbo框架就不再直接和Apollo或Zookeeper做读取配置交互。</p>
-<pre><code class="language-java"><span class="hljs-comment">// 应用自行加载配置</span>
-Map&lt;String, String&gt; dubboConfigurations = <span class="hljs-keyword">new</span> HashMap&lt;&gt;();
-dubboConfigurations.put(<span class="hljs-string">"dubbo.registry.address"</span>, <span class="hljs-string">"zookeeper://127.0.0.1:2181"</span>);
-dubboConfigurations.put(<span class="hljs-string">"dubbo.registry.simplified"</span>, <span class="hljs-string">"true"</span>);
-
-<span class="hljs-comment">//将组织好的配置塞给Dubbo框架</span>
-ConfigCenterConfig configCenter = <span class="hljs-keyword">new</span> ConfigCenterConfig();
-configCenter.setExternalConfig(dubboConfigurations);
-</code></pre>
-<h2>服务治理</h2>
-<h4>Zookeeper</h4>
-<p>默认节点结构:</p>
-<p><img src="/img/zk-configcenter-governance.jpg" alt="image-20190128101129591"></p>
+<p>注意:</p>
+<p>Dubbo同时支持应用、服务两种粒度的服务治理规则,对于这两种粒度,其key取值规则如下:</p>
 <ul>
-<li>namespace,用于不同配置的环境隔离。</li>
-<li>config,Dubbo约定的固定节点,不可更改,所有配置和服务治理规则都存储在此节点下。</li>
-<li>dubbo,所有服务治理规则都是全局性的,dubbo为默认节点</li>
-<li>configurators/tag-router/condition-router,不同的服务治理规则类型,node value存储具体规则内容</li>
+<li>应用粒度 {应用名 + 规则后缀}。如: <code>demo-application.configurators</code>、<code>demo-application.tag-router</code>等</li>
+<li>服务粒度 {服务接口名:[服务版本]:[服务分组] + 规则后缀},其中服务版本、服务分组是可选的,如果它们有配置则在key中体现,没被配置则用&quot;:&quot;占位。如
+<code>org.apache.dubbo.demo.DemoService::.configurators</code>、<code>org.apache.dubbo.demo.DemoService:1.0.0:group1.configurators</code></li>
 </ul>
-<h4>Apollo</h4>
-<p>所有的服务治理规则都是全局性的,默认从公共命名空间<code>dubbo</code>读取和订阅:</p>
-<p><img src="/img/apollo-configcenter-governance.jpg" alt="image-20190128100600055"></p>
-<p>不同的规则以不同的key后缀区分:</p>
+</blockquote>
+</li>
+</ol>
+<h3>Etcd &amp; Consul</h3>
+<p>Etcd和Consul本质上也是一种类似zookeeper的树状存储结构,实现请参考zookeeper。</p>
+<h3>Nacos</h3>
+<p>Nacos作为一个专业的第三方配置中心,拥有专门为配置中心设计的存储结构,包括内置的namespace、group、dataid等概念。并且这几个概念基本上与Dubbo框架抽象的配置中心是一一对应的。</p>
+<p>与Zookeeper实现的对应关系如下:</p>
+<p><img src="/img/configcenter_nacos_model.jpg" alt="image-20190127225608553"></p>
+<p>参考上文关于zookeeper实现中描述的示例,这里的dataid可能为:</p>
 <ul>
-<li>configurators,<a href="../demos/config-rule.md">覆盖规则</a></li>
-<li>tag-router,<a href="../demos/routing-rule.md">标签路由</a></li>
-<li>condition-router,<a href="../demos/routing-rule.md">条件路由</a></li>
+<li>外部化配置中心:dubbo.properties</li>
+<li>单个配置项:dubbo.service.shutdown.wait</li>
+<li>服务治理规则:org.apache.dubbo.demo.DemoService:1.0.0:group1.configurators</li>
 </ul>
+<h3>Apollo</h3>
+<p>Apollo与Nacos类似,请参考动态配置中心使用文档中关于Apollo部分的描述。</p>
 </div></section><footer class="footer-container"><div class="footer-body"><img src="/img/dubbo_gray.png"/><img class="apache" src="/img/apache_logo.png"/><div class="cols-container"><div class="col col-12"><h3></h3><p></p></div><div class="col col-4"><dl><dt>ASF</dt><dd><a href="http://www.apache.org" target="_self">基金会</a></dd><dd><a href="http://www.apache.org/licenses/" target="_self">证书</a></dd><dd><a href="http://www.apache.org/events/current-event" target="_self">事件</a></dd><dd><a  [...]
 	<script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
 	<script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
diff --git a/zh-cn/docs/dev/configcenter/design.json b/zh-cn/docs/dev/configcenter/design.json
new file mode 100644
index 0000000..3c8bfbd
--- /dev/null
+++ b/zh-cn/docs/dev/configcenter/design.json
@@ -0,0 +1,6 @@
+{
+  "filename": "design.md",
+  "__html": "<h1>Dubbo配置中心</h1>\n<h2>设计目的</h2>\n<p>配置中心的核心功能是作为Key-Value存储,Dubbo框架告知配置中心其关心的key,配置中心返回该key对应的value值。</p>\n<p>按照应用场景划分,配置中心在Dubbo框架中主要承担以下职责:</p>\n<ul>\n<li>作为外部化配置中心,即存储dubbo.properties配置文件,此时,key值通常为文件名如dubbo.properties,value则为配置文件内容。</li>\n<li>存储单个配置项,如各种开关项、常量值等。</li>\n<li>存储服务治理规则,此时key通常按照&quot;服务名+规则类型&quot;的格式来组织,而value则为具体的治理规则。</li>\n</ul>\n<p>为了进一步实现对key-value的分组管理,Dubbo的配置中心还加入了namespace、group的概念,这些概念在很多专业的第三方配置中心中都有体现,通常情况下,namespace用来隔离不同的租户,group用来对统一租户的key集 [...]
+  "link": "/zh-cn/docs/dev/configcenter/design.html",
+  "meta": {}
+}
\ No newline at end of file
diff --git a/zh-cn/docs/user/configuration/config-center.html b/zh-cn/docs/user/configuration/config-center.html
index 29f69d3..81f27ca 100644
--- a/zh-cn/docs/user/configuration/config-center.html
+++ b/zh-cn/docs/user/configuration/config-center.html
@@ -38,7 +38,7 @@ configCenter.setAddress(<span class="hljs-string">"zookeeper://127.0.0.1:2181"</
 <span class="hljs-meta">dubbo.registry.address</span>=<span class="hljs-string">zookeeper://127.0.0.1:2181</span>
 <span class="hljs-meta">dubbo.registry.simplified</span>=<span class="hljs-string">true</span>
 
-<span class="hljs-meta">dubbo.metadataReport.address</span>=<span class="hljs-string">zookeeper://127.0.0.1:2181</span>
+<span class="hljs-meta">dubbo.metadata-report.address</span>=<span class="hljs-string">zookeeper://127.0.0.1:2181</span>
 
 <span class="hljs-meta">dubbo.protocol.name</span>=<span class="hljs-string">dubbo</span>
 <span class="hljs-meta">dubbo.protocol.port</span>=<span class="hljs-string">20880</span>
@@ -49,7 +49,7 @@ configCenter.setAddress(<span class="hljs-string">"zookeeper://127.0.0.1:2181"</
 <li>优先级</li>
 </ul>
 <p>外部化配置默认较本地配置有更高的优先级,因此这里配置的内容会覆盖本地配置值,关于<a href="./configuration-load-process.md">各配置形式间的覆盖关系</a>有单独一章说明,你也可通过以下选项调整配置中心的优先级:</p>
-<pre><code class="language-properties"><span class="hljs-meta">-Ddubbo.configCenter.highestPriority</span>=<span class="hljs-string">false</span>
+<pre><code class="language-properties"><span class="hljs-meta">-Ddubbo.config-center.highest-priority</span>=<span class="hljs-string">false</span>
 </code></pre>
 <ul>
 <li>作用域</li>
diff --git a/zh-cn/docs/user/configuration/config-center.json b/zh-cn/docs/user/configuration/config-center.json
index e06ba3e..3d4dbdc 100644
--- a/zh-cn/docs/user/configuration/config-center.json
+++ b/zh-cn/docs/user/configuration/config-center.json
@@ -1,6 +1,6 @@
 {
   "filename": "config-center.md",
-  "__html": "<h1>动态配置中心</h1>\n<p>配置中心(v2.7.0)在Dubbo中承担两个职责:</p>\n<ol>\n<li>外部化配置。启动配置的集中式存储 (简单理解为dubbo.properties的外部化存储)。</li>\n<li>服务治理。服务治理规则的存储与通知。</li>\n</ol>\n<p>启用动态配置(以Zookeeper为例,可查看<a href=\"../references/xml/dubbo-config-center.md\">动态配置配置项详解</a>):</p>\n<pre><code class=\"language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dubbo:config-center</span> <span class=\"hljs-attr\">address</span>=<span class=\"hljs-string\">\"zookeeper://127.0.0.1:2181\"</span>/&gt; [...]
+  "__html": "<h1>动态配置中心</h1>\n<p>配置中心(v2.7.0)在Dubbo中承担两个职责:</p>\n<ol>\n<li>外部化配置。启动配置的集中式存储 (简单理解为dubbo.properties的外部化存储)。</li>\n<li>服务治理。服务治理规则的存储与通知。</li>\n</ol>\n<p>启用动态配置(以Zookeeper为例,可查看<a href=\"../references/xml/dubbo-config-center.md\">动态配置配置项详解</a>):</p>\n<pre><code class=\"language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dubbo:config-center</span> <span class=\"hljs-attr\">address</span>=<span class=\"hljs-string\">\"zookeeper://127.0.0.1:2181\"</span>/&gt; [...]
   "link": "/zh-cn/docs/user/configuration/config-center.html",
   "meta": {}
 }
\ No newline at end of file