This is an automated email from the ASF dual-hosted git repository.
jerrick pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo-website.git
The following commit(s) were added to refs/heads/asf-site by this push:
new 61d31e2 build website
61d31e2 is described below
commit 61d31e278d42db1c18acb897748d23952bab3094
Author: zhuyong <[email protected]>
AuthorDate: Tue Sep 25 17:31:24 2018 +0800
build website
---
build/blog.js | 6 +-
build/blogDetail.js | 6 +-
build/community.js | 6 +-
build/documentation.js | 6 +-
build/home.js | 6 +-
en-us/blog/tracing-with-skywalking.html | 10 +--
en-us/blog/tracing-with-skywalking.json | 2 +-
en-us/docs/admin/ops/skywalking.html | 10 +--
en-us/docs/admin/ops/skywalking.json | 2 +-
zh-cn/blog/dubbo-mesh-in-thinking.html | 115 ++++++++++++++++++++++++++++++
zh-cn/blog/dubbo-mesh-in-thinking.json | 7 ++
zh-cn/blog/index.html | 2 +-
zh-cn/blog/prepare-an-apache-release.html | 4 +-
zh-cn/blog/prepare-an-apache-release.json | 2 +-
zh-cn/docs/user/best-practice.html | 20 +++---
zh-cn/docs/user/best-practice.json | 5 +-
zh-cn/docs/user/capacity-plan.html | 20 +++---
zh-cn/docs/user/capacity-plan.json | 5 +-
zh-cn/docs/user/dependencies.html | 6 +-
zh-cn/docs/user/dependencies.json | 5 +-
zh-cn/docs/user/maturity.html | 6 +-
zh-cn/docs/user/maturity.json | 5 +-
zh-cn/docs/user/perf-test.html | 10 +--
zh-cn/docs/user/perf-test.json | 5 +-
zh-cn/docs/user/quick-start.html | 6 +-
zh-cn/docs/user/quick-start.json | 5 +-
zh-cn/docs/user/recommend.html | 52 +++++++-------
zh-cn/docs/user/recommend.json | 5 +-
zh-cn/docs/user/rest.html | 8 +--
zh-cn/docs/user/rest.json | 5 +-
30 files changed, 248 insertions(+), 104 deletions(-)
diff --git a/build/blog.js b/build/blog.js
index ed254ae..8e3ac02 100644
--- a/build/blog.js
+++ b/build/blog.js
@@ -1,6 +1,6 @@
-!function(e){function t(r){if(n[r])return n[r].exports;var
o=n[r]={i:r,l:!1,exports:{}};return
e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var
n={};t.m=e,t.c=n,t.i=function(e){return
e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var
n=e&&e.__esModule?function(){return e.default}:function(){return e};return
t.d(n,"a",n),n},t.o=function(e,t){return
Object.prototype.hasOwnProperty.call(e,t)},t.p="/build/",t(t.s=79) [...]
- Copyright (c) 2016 Jed Watson.
+!function(e){function t(r){if(n[r])return n[r].exports;var
o=n[r]={i:r,l:!1,exports:{}};return
e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var
n={};t.m=e,t.c=n,t.i=function(e){return
e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var
n=e&&e.__esModule?function(){return e.default}:function(){return e};return
t.d(n,"a",n),n},t.o=function(e,t){return
Object.prototype.hasOwnProperty.call(e,t)},t.p="/build/",t(t.s=77) [...]
+ Copyright (c) 2017 Jed Watson.
Licensed under the MIT License (MIT), see
http://jedwatson.github.io/classnames
*/
-!function(){"use strict";function n(){for(var
e=[],t=0;t<arguments.length;t++){var r=arguments[t];if(r){var o=typeof
r;if("string"===o||"number"===o)e.push(r);else
if(Array.isArray(r))e.push(n.apply(null,r));else if("object"===o)for(var a in
r)i.call(r,a)&&r[a]&&e.push(a)}}return e.join(" ")}var i={}.hasOwnProperty;void
0!==e&&e.exports?e.exports=n:(r=[],void 0!==(o=function(){return
n}.apply(t,r))&&(e.exports=o))}()},function(e,t,n){"use strict";function
r(e,t,r){var o=r.configurable,u= [...]
\ No newline at end of file
+!function(){"use strict";function n(){for(var
e=[],t=0;t<arguments.length;t++){var r=arguments[t];if(r){var o=typeof
r;if("string"===o||"number"===o)e.push(r);else
if(Array.isArray(r)&&r.length){var a=n.apply(null,r);a&&e.push(a)}else
if("object"===o)for(var u in r)i.call(r,u)&&r[u]&&e.push(u)}}return e.join("
")}var i={}.hasOwnProperty;void
0!==e&&e.exports?(n.default=n,e.exports=n):(r=[],void 0!==(o=function(){return
n}.apply(t,r))&&(e.exports=o))}()},function(e,t,n){"use strict";funct [...]
\ No newline at end of file
diff --git a/build/blogDetail.js b/build/blogDetail.js
index 8febad3..259add7 100644
--- a/build/blogDetail.js
+++ b/build/blogDetail.js
@@ -1,6 +1,6 @@
-!function(e){function t(r){if(n[r])return n[r].exports;var
o=n[r]={i:r,l:!1,exports:{}};return
e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var
n={};t.m=e,t.c=n,t.i=function(e){return
e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var
n=e&&e.__esModule?function(){return e.default}:function(){return e};return
t.d(n,"a",n),n},t.o=function(e,t){return
Object.prototype.hasOwnProperty.call(e,t)},t.p="/build/",t(t.s=80) [...]
- Copyright (c) 2016 Jed Watson.
+!function(e){function t(r){if(n[r])return n[r].exports;var
o=n[r]={i:r,l:!1,exports:{}};return
e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var
n={};t.m=e,t.c=n,t.i=function(e){return
e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var
n=e&&e.__esModule?function(){return e.default}:function(){return e};return
t.d(n,"a",n),n},t.o=function(e,t){return
Object.prototype.hasOwnProperty.call(e,t)},t.p="/build/",t(t.s=78) [...]
+ Copyright (c) 2017 Jed Watson.
Licensed under the MIT License (MIT), see
http://jedwatson.github.io/classnames
*/
-!function(){"use strict";function n(){for(var
e=[],t=0;t<arguments.length;t++){var r=arguments[t];if(r){var o=typeof
r;if("string"===o||"number"===o)e.push(r);else
if(Array.isArray(r))e.push(n.apply(null,r));else if("object"===o)for(var a in
r)i.call(r,a)&&r[a]&&e.push(a)}}return e.join(" ")}var i={}.hasOwnProperty;void
0!==e&&e.exports?e.exports=n:(r=[],void 0!==(o=function(){return
n}.apply(t,r))&&(e.exports=o))}()},function(e,t,n){"use strict";function
r(e,t,r){var o=r.configurable,u= [...]
\ No newline at end of file
+!function(){"use strict";function n(){for(var
e=[],t=0;t<arguments.length;t++){var r=arguments[t];if(r){var o=typeof
r;if("string"===o||"number"===o)e.push(r);else
if(Array.isArray(r)&&r.length){var a=n.apply(null,r);a&&e.push(a)}else
if("object"===o)for(var u in r)i.call(r,u)&&r[u]&&e.push(u)}}return e.join("
")}var i={}.hasOwnProperty;void
0!==e&&e.exports?(n.default=n,e.exports=n):(r=[],void 0!==(o=function(){return
n}.apply(t,r))&&(e.exports=o))}()},function(e,t,n){"use strict";funct [...]
\ No newline at end of file
diff --git a/build/community.js b/build/community.js
index 7880e2c..3b3442a 100644
--- a/build/community.js
+++ b/build/community.js
@@ -1,6 +1,6 @@
-!function(e){function t(r){if(n[r])return n[r].exports;var
o=n[r]={i:r,l:!1,exports:{}};return
e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var
n={};t.m=e,t.c=n,t.i=function(e){return
e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var
n=e&&e.__esModule?function(){return e.default}:function(){return e};return
t.d(n,"a",n),n},t.o=function(e,t){return
Object.prototype.hasOwnProperty.call(e,t)},t.p="/build/",t(t.s=81) [...]
- Copyright (c) 2016 Jed Watson.
+!function(e){function t(r){if(n[r])return n[r].exports;var
o=n[r]={i:r,l:!1,exports:{}};return
e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var
n={};t.m=e,t.c=n,t.i=function(e){return
e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var
n=e&&e.__esModule?function(){return e.default}:function(){return e};return
t.d(n,"a",n),n},t.o=function(e,t){return
Object.prototype.hasOwnProperty.call(e,t)},t.p="/build/",t(t.s=79) [...]
+ Copyright (c) 2017 Jed Watson.
Licensed under the MIT License (MIT), see
http://jedwatson.github.io/classnames
*/
-!function(){"use strict";function n(){for(var
e=[],t=0;t<arguments.length;t++){var r=arguments[t];if(r){var o=typeof
r;if("string"===o||"number"===o)e.push(r);else
if(Array.isArray(r))e.push(n.apply(null,r));else if("object"===o)for(var a in
r)i.call(r,a)&&r[a]&&e.push(a)}}return e.join(" ")}var i={}.hasOwnProperty;void
0!==e&&e.exports?e.exports=n:(r=[],void 0!==(o=function(){return
n}.apply(t,r))&&(e.exports=o))}()},function(e,t,n){"use strict";function
r(e,t,r){var o=r.configurable,l= [...]
\ No newline at end of file
+!function(){"use strict";function n(){for(var
e=[],t=0;t<arguments.length;t++){var r=arguments[t];if(r){var o=typeof
r;if("string"===o||"number"===o)e.push(r);else
if(Array.isArray(r)&&r.length){var a=n.apply(null,r);a&&e.push(a)}else
if("object"===o)for(var l in r)i.call(r,l)&&r[l]&&e.push(l)}}return e.join("
")}var i={}.hasOwnProperty;void
0!==e&&e.exports?(n.default=n,e.exports=n):(r=[],void 0!==(o=function(){return
n}.apply(t,r))&&(e.exports=o))}()},function(e,t,n){"use strict";funct [...]
\ No newline at end of file
diff --git a/build/documentation.js b/build/documentation.js
index 460852b..29dfa6d 100644
--- a/build/documentation.js
+++ b/build/documentation.js
@@ -1,6 +1,6 @@
-!function(e){function t(r){if(n[r])return n[r].exports;var
o=n[r]={i:r,l:!1,exports:{}};return
e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var
n={};t.m=e,t.c=n,t.i=function(e){return
e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var
n=e&&e.__esModule?function(){return e.default}:function(){return e};return
t.d(n,"a",n),n},t.o=function(e,t){return
Object.prototype.hasOwnProperty.call(e,t)},t.p="/build/",t(t.s=82) [...]
- Copyright (c) 2016 Jed Watson.
+!function(e){function t(r){if(n[r])return n[r].exports;var
o=n[r]={i:r,l:!1,exports:{}};return
e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var
n={};t.m=e,t.c=n,t.i=function(e){return
e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var
n=e&&e.__esModule?function(){return e.default}:function(){return e};return
t.d(n,"a",n),n},t.o=function(e,t){return
Object.prototype.hasOwnProperty.call(e,t)},t.p="/build/",t(t.s=80) [...]
+ Copyright (c) 2017 Jed Watson.
Licensed under the MIT License (MIT), see
http://jedwatson.github.io/classnames
*/
-!function(){"use strict";function n(){for(var
e=[],t=0;t<arguments.length;t++){var r=arguments[t];if(r){var o=typeof
r;if("string"===o||"number"===o)e.push(r);else
if(Array.isArray(r))e.push(n.apply(null,r));else if("object"===o)for(var l in
r)i.call(r,l)&&r[l]&&e.push(l)}}return e.join(" ")}var i={}.hasOwnProperty;void
0!==e&&e.exports?e.exports=n:(r=[],void 0!==(o=function(){return
n}.apply(t,r))&&(e.exports=o))}()},function(e,t,n){"use strict";function
r(e,t,r){var o=r.configurable,a= [...]
\ No newline at end of file
+!function(){"use strict";function n(){for(var
e=[],t=0;t<arguments.length;t++){var r=arguments[t];if(r){var o=typeof
r;if("string"===o||"number"===o)e.push(r);else
if(Array.isArray(r)&&r.length){var l=n.apply(null,r);l&&e.push(l)}else
if("object"===o)for(var a in r)i.call(r,a)&&r[a]&&e.push(a)}}return e.join("
")}var i={}.hasOwnProperty;void
0!==e&&e.exports?(n.default=n,e.exports=n):(r=[],void 0!==(o=function(){return
n}.apply(t,r))&&(e.exports=o))}()},function(e,t,n){"use strict";funct [...]
\ No newline at end of file
diff --git a/build/home.js b/build/home.js
index 95e8717..9c877de 100644
--- a/build/home.js
+++ b/build/home.js
@@ -1,6 +1,6 @@
-!function(e){function t(r){if(n[r])return n[r].exports;var
o=n[r]={i:r,l:!1,exports:{}};return
e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var
n={};t.m=e,t.c=n,t.i=function(e){return
e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var
n=e&&e.__esModule?function(){return e.default}:function(){return e};return
t.d(n,"a",n),n},t.o=function(e,t){return
Object.prototype.hasOwnProperty.call(e,t)},t.p="/build/",t(t.s=83) [...]
- Copyright (c) 2016 Jed Watson.
+!function(e){function t(r){if(n[r])return n[r].exports;var
o=n[r]={i:r,l:!1,exports:{}};return
e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var
n={};t.m=e,t.c=n,t.i=function(e){return
e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var
n=e&&e.__esModule?function(){return e.default}:function(){return e};return
t.d(n,"a",n),n},t.o=function(e,t){return
Object.prototype.hasOwnProperty.call(e,t)},t.p="/build/",t(t.s=81) [...]
+ Copyright (c) 2017 Jed Watson.
Licensed under the MIT License (MIT), see
http://jedwatson.github.io/classnames
*/
-!function(){"use strict";function n(){for(var
e=[],t=0;t<arguments.length;t++){var r=arguments[t];if(r){var o=typeof
r;if("string"===o||"number"===o)e.push(r);else
if(Array.isArray(r))e.push(n.apply(null,r));else if("object"===o)for(var a in
r)i.call(r,a)&&r[a]&&e.push(a)}}return e.join(" ")}var i={}.hasOwnProperty;void
0!==e&&e.exports?e.exports=n:(r=[],void 0!==(o=function(){return
n}.apply(t,r))&&(e.exports=o))}()},function(e,t,n){"use strict";function
r(e,t,r){var o=r.configurable,u= [...]
\ No newline at end of file
+!function(){"use strict";function n(){for(var
e=[],t=0;t<arguments.length;t++){var r=arguments[t];if(r){var o=typeof
r;if("string"===o||"number"===o)e.push(r);else
if(Array.isArray(r)&&r.length){var i=n.apply(null,r);i&&e.push(i)}else
if("object"===o)for(var u in r)a.call(r,u)&&r[u]&&e.push(u)}}return e.join("
")}var a={}.hasOwnProperty;void
0!==e&&e.exports?(n.default=n,e.exports=n):(r=[],void 0!==(o=function(){return
n}.apply(t,r))&&(e.exports=o))}()},function(e,t,n){"use strict";funct [...]
\ No newline at end of file
diff --git a/en-us/blog/tracing-with-skywalking.html
b/en-us/blog/tracing-with-skywalking.html
index c665c5e..531fcdd 100644
--- a/en-us/blog/tracing-with-skywalking.html
+++ b/en-us/blog/tracing-with-skywalking.html
@@ -12,7 +12,7 @@
<link rel="stylesheet" href="/build/blogDetail.css" />
</head>
<body>
- <div id="root"><div class="blog-detail-page" data-reactroot=""
data-reactid="1" data-react-checksum="838435608"><header
class="header-container header-container-normal" data-reactid="2"><div
class="header-body" data-reactid="3"><a href="/en-us/index.html"
data-reactid="4"><img class="logo" src="/img/dubbo_colorful.png"
data-reactid="5"/></a><div class="search search-normal" data-reactid="6"><span
class="icon-search" data-reactid="7"></span></div><span class="language-switch
language-swi [...]
+ <div id="root"><div class="blog-detail-page" data-reactroot=""
data-reactid="1" data-react-checksum="-2144617742"><header
class="header-container header-container-normal" data-reactid="2"><div
class="header-body" data-reactid="3"><a href="/en-us/index.html"
data-reactid="4"><img class="logo" src="/img/dubbo_colorful.png"
data-reactid="5"/></a><div class="search search-normal" data-reactid="6"><span
class="icon-search" data-reactid="7"></span></div><span class="language-switch
language-s [...]
<h2>Introduction to Apache Skywalking(Incubator)</h2>
<p><a href="https://github.com/apache/incubator-skywalking">Apache
Skywalking(Incubator)</a> is the APM system that it designed for
micro-services architectures and cloud native architecture systems and supports
distribute tracking. <a
href="https://github.com/apache/incubator-skywalking">Apache skywalking
(incubator)</a> collects and analyzes the trace data and generates the
relationship between the application and the service metric, Apache skywalking
(incubating) supports multiple la [...]
<p>Currently, Skywalking has supported analysis the operation of distributed
systems from 6 visual dimensions. The overview view is a global view of your
applications and components, including the number of components and
applications, application alarm fluctuations, slow service lists, and
application throughput; The topology shows the topological relationship of the
whole application; The application view represents the upstream and downstream
relationship of the application from singl [...]
@@ -27,10 +27,10 @@ String sayHello(String name);
}</p>
<h4>Service provider project</h4>
<p>package org.apache.skywalking.demo.provider;</p>
-<p>@Service(version = "<span class="katex"><span
class="katex-mathml"><math><semantics><mrow><mrow><mi>d</mi><mi>e</mi><mi>m</mi><mi>o</mi><mi
mathvariant="normal">.</mi><mi>s</mi><mi>e</mi><mi>r</mi><mi>v</mi><mi>i</mi><mi>c</mi><mi>e</mi><mi
mathvariant="normal">.</mi><mi>v</mi><mi>e</mi><mi>r</mi><mi>s</mi><mi>i</mi><mi>o</mi><mi>n</mi></mrow><mi
mathvariant="normal">"</mi><mo
separator="true">,</mo><mi>a</mi><mi>p</mi><mi>p</mi><mi>l</mi><mi>i</mi><mi>c</mi><mi>a</mi><mi>t<
[...]
- application = "</annotation></semantics></math></span><span
class="katex-html" aria-hidden="true"><span class="strut"
style="height:0.69444em;"></span><span class="strut bottom"
style="height:0.8888799999999999em;vertical-align:-0.19444em;"></span><span
class="base textstyle uncramped"><span class="mord textstyle uncramped"><span
class="mord mathit">d</span><span class="mord mathit">e</span><span class="mord
mathit">m</span><span class="mord mathit">o</span><span class="mord mathrm [...]
-protocol = "<span class="katex"><span
class="katex-mathml"><math><semantics><mrow><mrow><mi>d</mi><mi>u</mi><mi>b</mi><mi>b</mi><mi>o</mi><mi
mathvariant="normal">.</mi><mi>p</mi><mi>r</mi><mi>o</mi><mi>t</mi><mi>o</mi><mi>c</mi><mi>o</mi><mi>l</mi><mi
mathvariant="normal">.</mi><mi>i</mi><mi>d</mi></mrow><mi
mathvariant="normal">"</mi><mo
separator="true">,</mo><mi>r</mi><mi>e</mi><mi>g</mi><mi>i</mi><mi>s</mi><mi>t</mi><mi>r</mi><mi>y</mi><mo>=</mo><mi
mathvariant="normal">&q [...]
- registry = "</annotation></semantics></math></span><span
class="katex-html" aria-hidden="true"><span class="strut"
style="height:0.69444em;"></span><span class="strut bottom"
style="height:0.8888799999999999em;vertical-align:-0.19444em;"></span><span
class="base textstyle uncramped"><span class="mord textstyle uncramped"><span
class="mord mathit">d</span><span class="mord mathit">u</span><span class="mord
mathit">b</span><span class="mord mathit">b</span><span class="mord mathit">o
[...]
+<p>@Service(version = "${demo.service.version}",
+application = "${<a
href="http://dubbo.application.id">dubbo.application.id</a>}",
+protocol = "${<a
href="http://dubbo.protocol.id">dubbo.protocol.id</a>}",
+registry = "${<a
href="http://dubbo.registry.id">dubbo.registry.id</a>}", timeout = 60000)
public class HelloServiceImpl implements HelloService {</p>
<pre><code>public String sayHello(String name) {
LockSupport.parkNanos(TimeUnit.SECONDS.toNanos(1));
diff --git a/en-us/blog/tracing-with-skywalking.json
b/en-us/blog/tracing-with-skywalking.json
index dc88514..ab0e4fd 100644
--- a/en-us/blog/tracing-with-skywalking.json
+++ b/en-us/blog/tracing-with-skywalking.json
@@ -1,6 +1,6 @@
{
"filename": "tracing-with-skywalking.md",
- "__html": "<h1>Tracing Dubbo service with Apache
Skywalking(incubator)</h1>\n<h2>Introduction to Apache
Skywalking(Incubator)</h2>\n<p><a
href=\"https://github.com/apache/incubator-skywalking\">Apache
Skywalking(Incubator)</a> is the APM system that it designed for
micro-services architectures and cloud native architecture systems and supports
distribute tracking. <a
href=\"https://github.com/apache/incubator-skywalking\">Apache skywalking
(incubator)</a> collects and analyzes the tra [...]
+ "__html": "<h1>Tracing Dubbo service with Apache
Skywalking(incubator)</h1>\n<h2>Introduction to Apache
Skywalking(Incubator)</h2>\n<p><a
href=\"https://github.com/apache/incubator-skywalking\">Apache
Skywalking(Incubator)</a> is the APM system that it designed for
micro-services architectures and cloud native architecture systems and supports
distribute tracking. <a
href=\"https://github.com/apache/incubator-skywalking\">Apache skywalking
(incubator)</a> collects and analyzes the tra [...]
"title": "Tracing Dubbo service with Apache Skywalking(incubator)",
"keywords": "Dubbo, Skywalking, tracing, distribute tracking",
"description": "This article introduces how to use Apache Skywalking to
track Dubbo applications."
diff --git a/en-us/docs/admin/ops/skywalking.html
b/en-us/docs/admin/ops/skywalking.html
index 94ee8e9..8458233 100644
--- a/en-us/docs/admin/ops/skywalking.html
+++ b/en-us/docs/admin/ops/skywalking.html
@@ -12,7 +12,7 @@
<link rel="stylesheet" href="/build/documentation.css" />
</head>
<body>
- <div id="root"><div class="documentation-page" data-reactroot=""
data-reactid="1" data-react-checksum="-2021323888"><header
class="header-container header-container-normal" data-reactid="2"><div
class="header-body" data-reactid="3"><a href="/en-us/index.html"
data-reactid="4"><img class="logo" src="/img/dubbo_colorful.png"
data-reactid="5"/></a><div class="search search-normal" data-reactid="6"><span
class="icon-search" data-reactid="7"></span></div><span class="language-switch
language [...]
+ <div id="root"><div class="documentation-page" data-reactroot=""
data-reactid="1" data-react-checksum="1103774570"><header
class="header-container header-container-normal" data-reactid="2"><div
class="header-body" data-reactid="3"><a href="/en-us/index.html"
data-reactid="4"><img class="logo" src="/img/dubbo_colorful.png"
data-reactid="5"/></a><div class="search search-normal" data-reactid="6"><span
class="icon-search" data-reactid="7"></span></div><span class="language-switch
language- [...]
<h2>Introduction to Apache Skywalking(Incubator)</h2>
<p><a href="https://github.com/apache/incubator-skywalking">Apache
Skywalking(Incubator)</a> is the APM system that it designed for
micro-services architectures and cloud native architecture systems and supports
distribute tracking. <a
href="https://github.com/apache/incubator-skywalking">Apache skywalking
(incubator)</a> collects and analyzes the trace data and generates the
relationship between the application and the service metric, Apache skywalking
(incubating) supports multiple la [...]
<p>Currently, Skywalking has supported analysis the operation of distributed
systems from 6 visual dimensions. The overview view is a global view of your
applications and components, including the number of components and
applications, application alarm fluctuations, slow service lists, and
application throughput; The topology shows the topological relationship of the
whole application; The application view represents the upstream and downstream
relationship of the application from singl [...]
@@ -27,10 +27,10 @@ String sayHello(String name);
}</p>
<h4>Service provider project</h4>
<p>package org.apache.skywalking.demo.provider;</p>
-<p>@Service(version = "<span class="katex"><span
class="katex-mathml"><math><semantics><mrow><mrow><mi>d</mi><mi>e</mi><mi>m</mi><mi>o</mi><mi
mathvariant="normal">.</mi><mi>s</mi><mi>e</mi><mi>r</mi><mi>v</mi><mi>i</mi><mi>c</mi><mi>e</mi><mi
mathvariant="normal">.</mi><mi>v</mi><mi>e</mi><mi>r</mi><mi>s</mi><mi>i</mi><mi>o</mi><mi>n</mi></mrow><mi
mathvariant="normal">"</mi><mo
separator="true">,</mo><mi>a</mi><mi>p</mi><mi>p</mi><mi>l</mi><mi>i</mi><mi>c</mi><mi>a</mi><mi>t<
[...]
- application = "</annotation></semantics></math></span><span
class="katex-html" aria-hidden="true"><span class="strut"
style="height:0.69444em;"></span><span class="strut bottom"
style="height:0.8888799999999999em;vertical-align:-0.19444em;"></span><span
class="base textstyle uncramped"><span class="mord textstyle uncramped"><span
class="mord mathit">d</span><span class="mord mathit">e</span><span class="mord
mathit">m</span><span class="mord mathit">o</span><span class="mord mathrm [...]
-protocol = "<span class="katex"><span
class="katex-mathml"><math><semantics><mrow><mrow><mi>d</mi><mi>u</mi><mi>b</mi><mi>b</mi><mi>o</mi><mi
mathvariant="normal">.</mi><mi>p</mi><mi>r</mi><mi>o</mi><mi>t</mi><mi>o</mi><mi>c</mi><mi>o</mi><mi>l</mi><mi
mathvariant="normal">.</mi><mi>i</mi><mi>d</mi></mrow><mi
mathvariant="normal">"</mi><mo
separator="true">,</mo><mi>r</mi><mi>e</mi><mi>g</mi><mi>i</mi><mi>s</mi><mi>t</mi><mi>r</mi><mi>y</mi><mo>=</mo><mi
mathvariant="normal">&q [...]
- registry = "</annotation></semantics></math></span><span
class="katex-html" aria-hidden="true"><span class="strut"
style="height:0.69444em;"></span><span class="strut bottom"
style="height:0.8888799999999999em;vertical-align:-0.19444em;"></span><span
class="base textstyle uncramped"><span class="mord textstyle uncramped"><span
class="mord mathit">d</span><span class="mord mathit">u</span><span class="mord
mathit">b</span><span class="mord mathit">b</span><span class="mord mathit">o
[...]
+<p>@Service(version = "${demo.service.version}",
+application = "${<a
href="http://dubbo.application.id">dubbo.application.id</a>}",
+protocol = "${<a
href="http://dubbo.protocol.id">dubbo.protocol.id</a>}",
+registry = "${<a
href="http://dubbo.registry.id">dubbo.registry.id</a>}", timeout = 60000)
public class HelloServiceImpl implements HelloService {</p>
<pre><code>public String sayHello(String name) {
LockSupport.parkNanos(TimeUnit.SECONDS.toNanos(1));
diff --git a/en-us/docs/admin/ops/skywalking.json
b/en-us/docs/admin/ops/skywalking.json
index 4b8aedd..e65c1cb 100644
--- a/en-us/docs/admin/ops/skywalking.json
+++ b/en-us/docs/admin/ops/skywalking.json
@@ -1,4 +1,4 @@
{
"filename": "skywalking.md",
- "__html": "<h1>Tracing Dubbo service with Apache
Skywalking(incubator)</h1>\n<h2>Introduction to Apache
Skywalking(Incubator)</h2>\n<p><a
href=\"https://github.com/apache/incubator-skywalking\">Apache
Skywalking(Incubator)</a> is the APM system that it designed for
micro-services architectures and cloud native architecture systems and supports
distribute tracking. <a
href=\"https://github.com/apache/incubator-skywalking\">Apache skywalking
(incubator)</a> collects and analyzes the tra [...]
+ "__html": "<h1>Tracing Dubbo service with Apache
Skywalking(incubator)</h1>\n<h2>Introduction to Apache
Skywalking(Incubator)</h2>\n<p><a
href=\"https://github.com/apache/incubator-skywalking\">Apache
Skywalking(Incubator)</a> is the APM system that it designed for
micro-services architectures and cloud native architecture systems and supports
distribute tracking. <a
href=\"https://github.com/apache/incubator-skywalking\">Apache skywalking
(incubator)</a> collects and analyzes the tra [...]
}
\ No newline at end of file
diff --git a/zh-cn/blog/dubbo-mesh-in-thinking.html
b/zh-cn/blog/dubbo-mesh-in-thinking.html
new file mode 100644
index 0000000..5ae7e56
--- /dev/null
+++ b/zh-cn/blog/dubbo-mesh-in-thinking.html
@@ -0,0 +1,115 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0,
maximum-scale=1.0, user-scalable=no">
+ <meta name="keywords" content="Dubbo, Service Mesh, Cloud Native" />
+ <meta name="description" content="Dubbo是实现框架,融入servcemesh理念就是我们今天分享的。"
/>
+ <!-- 网页标签标题 -->
+ <title>Dubbo在Service Mesh下的思考和方案</title>
+ <link rel="shortcut icon" href="/img/dubbo.ico"/>
+ <link rel="stylesheet" href="/build/blogDetail.css" />
+</head>
+<body>
+ <div id="root"><div class="blog-detail-page" data-reactroot=""
data-reactid="1" data-react-checksum="-56553673"><header
class="header-container header-container-normal" data-reactid="2"><div
class="header-body" data-reactid="3"><a href="/zh-cn/index.html"
data-reactid="4"><img class="logo" src="/img/dubbo_colorful.png"
data-reactid="5"/></a><div class="search search-normal" data-reactid="6"><span
class="icon-search" data-reactid="7"></span></div><span class="language-switch
language-swi [...]
+<h2>开头</h2>
+<p>Service Mesh这个“热”词是2016年9月被“造”出来,而今年2018年更是被称为service
Mesh的关键之年,各家大公司都希望能在这个思潮下领先一步。今天我也分享阿里中间件在这方面的观点,思考和实践。考虑到有些人没了解过Dubbo(集团内以HSF为主)和Servicemesh,先简单介绍下这两个词。Dubbo应该是国内最受欢迎的远程服务框架,在Github上有超过2w的star数,也是阿里分布式架构互联互通的核心所在。跟Dubbo一样,servicemesh也是面向服务互联互通这一问题域,是云原生技术栈的核心之一;大家可以简单理解service
mesh就是云原生组织定义的微服务架构解决理念。Dubbo是实现框架,融入servcemesh理念就是我们今天分享的。</p>
+<h2>现状和挑战</h2>
+<p><img src="../../img/blog/dubbomesh/1.png" alt="1.png | center |
826x206"></p>
+<p>当前Dubbo支撑的阿里分布式应用内支撑万级别的应用数,运行在20多万的服务器实例上,每天调用量是万亿级别,这应该是国内最大的分布式应用集群。</p>
+<p>挑战主要来自三方面</p>
+<ul>
+<li>首先,
数以万计的应用意味着有以十万级的服务,理顺错综复杂的服务拓扑关系,甚至及时诊断某个异常调用链路,需要考虑海量数据的拉取分析,是非常有挑战的,阿里通过EagleEye鹰眼链路系统提供可观察性和治理能力来解决;</li>
+<li>第二个挑战是机房级别容灾,阿里的机房是分布在天南海北,大家可以想象横跨数千公里的网络延迟会造成服务互通很大的影响,所以在保证一定恢复时间和一定数据容错的情况下做异地多活是有巨大挑战,阿里通过支持异地多活的单元化架构解决。</li>
+<li>第三个挑战是阿里业务众多,尤其像阿里生态中的高德,UC,优酷等所使用的开发语言跟淘系Java是不一样的,比如PHP,C,Nodejs,Dart等,要维护多个版本并保证各版本具有同样的功能是成本比较高的;这个挑战在云原生的新一代理念下更具挑战,毕竟。今天主题跟第三个挑战是息息相关,能解决一定的问题。</li>
+</ul>
+<p>这里讲个大鱼吃小鱼的故事来简单理解下云原生:软件会吃掉这个世界,也就是信息化不可避免,而开源会吃掉软件,最终云原生会吃掉开源。这正代表了云原生理念的颠覆性,从商业软件到开源到云原生,环环相套,以体系化和层次化的方式推荐各个方面的开源方案和标准,这会极大降低企业级架构服务的技术门槛,是企业信息化之路的一大利好,当然也是进化方向。这个故事跟今天的主题--开发者定义软件未来,是非常契合,也就是说这个趋势至少在企业级软件服务领域正在发生。云原生:Cloud
Native is Patterns with A complete and trusted tool kit for modern
architectures。</p>
+<p><span data-type="color" style="color:white">Service Mesh的典型方案</span></p>
+<h2>Service Mesh的典型方案</h2>
+<p><img src="../../img/blog/dubbomesh/2.png" alt="2.png | center |
826x206"></p>
+<p>讲完故事,回到servicemesh。</p>
+<p>传统形态下SDK代表着一个特定语言的库,由应用和微服务框架共处一进程内,在发布升级中共享生命周期。比较典型的代表是Twitter的finagle,Google的stubby/grpc,阿里巴巴的HSF/Dubbo.</p>
+<p>Serviemesh下推荐是右边Sidecar方案,Sidecar方案没有引入新的功能,只是改变了原有功能的位置,以独立的应用来存在,大家可以暂时以nginx来理解其网络代理能力也可以。</p>
+<p>在这张图中希望大家关注两个信息,
1)所有的sidecar形成逻辑网络被称为数据面,是业务服务的链路中是强依赖节点,承载了业务数据互联互通的基础;传统的ops管控服务被称为控制面,这部分跟传统是大同小异。
2)在sidecar形态下,网络会增加两跳,即应用与sidecar之间,他们之间的数据互通也是基于协议规范。后面会详细讲。</p>
+<h2>Sidecar模式的优劣</h2>
+<p><img src="../../img/blog/dubbomesh/3.png" alt="3.png | center |
826x206"></p>
+<p>接下来从开发和运维两个阶段来分开比较。</p>
+<ul>
+<li>多语言支持方面,既然sidecar是独立应用,用最合适的一种语言开发完成即可,就避免了需要针对不同语言的应用场景做不同的版本开发。当前阿里选择基于C语言的Envoy做二次开发来追求最小的footprint和性能,当然也曾经历一些弯路,比如曾经用Java开发过一个sidecar,但最终由于引入JRE体量大和GC带来的抖动等问题证明不可行。有必要强调的是:这里说的是sidecar自身开发现在避免了多语言多版本的问题,而真要支持任意服务自由采用任意语言实现这一理想,是需要站在从业务到数据面再到业务的整个链路上的数据交互做思考。</li>
+<li>性能方面,sidecar情形下由于会增加两跳,这两跳是业务应用与sidecar的两个进程之间的调用,这是本机,即便是经过优化,也是会增加进程切换以及数据转换的开销。经过我们的优化测试,在正常的业务访问下,相比SDK形态下最多增加1毫秒的开销,这在大多数业务情形下是基本无感知无影响。</li>
+<li>再看运维阶段的比较,一般SDK形态的服务框架都是只关心开发的诉求,对于如何运维都是不关心,而软件生命周期中运维是最长的,如何从中间件角度解决更多的运维问题是非常有意义的。阿里的中间件经常需要升级,以库的形式升级时就需要业务方应用重新打包,这个推动业务方变更的方式是比较被动,而且周期很长。</li>
+<li>当以镜像为基本原子单位进行发布部署时,阿里的中间件SDK体量大概是200兆,需要与业务一起打包,这样在业务应用升级时让分发的包就显得笨重,时效性相比sidecar形态就差一截。</li>
+</ul>
+<p>稍微总结下,sidecar具有两个明显优势,一个是多语言开发维护成本低
,另一个是独立升级,当然代价是需要增加一点点的网络延迟。至此大家是不是觉得Sidecar基本完美?
别着急,需要大家再思考一个问题:SDK模式下中间件组件会随应用一起发布,拥有完全一致的生命周期;而在sidecar模式下,如何管理sidecar的生命周期?这里可以拿无线耳机来举个例子,无线耳机是独立了,但必须独立电源的驱动,所以充电是要的。是的,在大规模的集群中这个点会带来不小的复杂性。</p>
+<h2>关键点</h2>
+<p><img src="../../img/blog/dubbomesh/4.png" alt="4.png | center |
826x206"></p>
+<p>下面跟大家分享下我们对servicemesh理解的三个关键技术点。分别是sidecar运维,数据面与控制面的集成,协议。</p>
+<ul>
+<li>先说sidecar的运维,这是个难点,也是为什么sidecar方案以前没有被广泛应用的重要原因。前面说sidecar与应用现在成为两个不同的进程,要考虑多个事宜,一是要考虑如何把sidecar与应用部署在一起,二是考虑业务进程或sidecar进程一方需要升级重启时如何协同来保证请求的正常处理或转发,即优雅上下线的问题。这些事宜考虑清楚并解决后,算是具备servicemesh的前提条件。当然,kubernetes解决了这块的事情,提供了initiator类似插件的机制来对原子性的pod进行注入sidecar,并通过健康检查机制来保证两个进程的协同。简单地也可以这么理解:先把kubernetes容器调度平台的实施是servicemesh的前提条件。</li>
+<li>数据面中的sidecar的服务治理能力则是其核心竞争力,包括负载均衡策略,路由,安全,权重等等,这些能力是以规则形式通过控制面来统一下发给数据面。在传统微服务框架下数据面和控制面的集成是紧耦合,也就是数据面和控制面是一体的,举例来说用了Dubbo框架,只能选择Dubbo-Ops。而Envoy作为servicemesh思潮的带领者,提出了一整套的API规范,Istio可以实现其xDS接口,阿里巴巴也可以根据自己的架构设计实现类似的服务平台。</li>
+<li>协议 协议 协议,
重要的事说三遍。。。sidecar和Dubbo的内核是网络协议的处理器,而sidecar又是面向多语言场景的,所以自然协议处理能力是要强调的。先说下阿里Dubbo当下向Mesh方向发展时遇到难点。首先我们的服务接口都是通过Java
Interface描述,其次涉及的传输模型DTO也是Java
POJO定义,最后协议也是私有的。这会导致跨语言比较难,而sidecar形态需要面向多语言,这些问题更是首当其冲。考虑到这里有点稍微偏细节点,希望大家带着如下问题来先思考下:业务应用到sidecar之间的数据交换要考虑什么?
Sidecar自身在处理网络字节流时又要考虑什么?是的,首先业务应用最好都不依赖特定协议库,也不依赖特接口定义库;Sidecar自身处理数据时跟nginx很接近,但最好具备协议转换适配的能力,比如把基于HTTP的请求转换为Dubbo请求,就能轻松集成Dubbo遗�
�系统。</li>
+</ul>
+<h2>回看协议</h2>
+<p><img src="../../img/blog/dubbomesh/5.png" alt="5.png | center |
826x206"></p>
+<p>既然协议在跨语言场景下如此重要,有必要稍微回归下协议的历史轨迹。看历史一般是轻松有趣的过程,最重要的好处是能使我们头脑清晰而不迷茫。</p>
+<p>我们先从2008年说起,很近也就10年,阿里服务框架诞生这一年。当年各大公司还在炒作SOA思想的时候,阿里在不清楚SOA思想的情况下根据自身业务诉求实践拥抱了SOA的架构。阿里服务框架一直是从三个层面来定义,第一RPC通信
第二是提供丰富强大的治理能力
第三就是基于容器隔离的运维能力,使得中间件可以独立升级。这个理念直到今日都是非常先进,非常的赞。就像前面说的,Dubbo主要是面向Java领域的微服务架构解决方案,在以Java为主导的技术架构下是绝对首选,但因为其协议设计是私有特性,要想成为跨语言的协议标准是有一定难度。</p>
+<p>事实上,之前已经出现了很多通用的跨语言的服务集成规范。最早是91年的考吧,是分布式对象访问协议,2000年的SOAP是当年webservice思想下的协议,无论是考吧还是SOAP都是支持所有平台和语言的一套规范,但是设计地比较复杂笨重,且性能存在一定问题。</p>
+<p>REST是一种架构风格,相比SOAP的设计,有非常优秀的理念和最佳实践指导,并且万维网作为世界上最大型最成功的的分布式应用是REST最好的证明。但跟SOAP一样,REST跑在1上有性能瓶颈,这个也可能是当年阿里服务框架没有选择REST规范的原因。额外提下,REST思想虽然很早就有,但事实上REST的规范在Java领域JAX-RS
API 直到最近两年在2.2版本下才算稳定成形,且越来越接近微服务框架。</p>
+<p>1996年的1在连接通道不支持多工复用,根本无法发挥TCP/UDP的网络能力;而到了2015年HTTP2则解决这些,能够最大限度的利用TCP层的网络宽带,且支持了streaming,push等交互模式,这些跟很多的私有或专有应用协议干得是一个事,但是标准化的大家都容易接受的事。这里必须提一下,伴随HTTP2而来的是grpc,原先Google早早推出了Protocolbuffer,但一直没把自家stubby开源,我猜测最大的原因是不想grpc跑在一个私有协议上,而是在等HTTP2.</p>
+<p>总结下来,协议技术一直在向着轻量级和标准规范化的方向发展。像SOAP,考吧这些重量级的不跨平台的协议必然消失在历史车轮里,私有或专有的协议也会向标准协议靠拢。在面向跨语言的场景下,有两种的协议规范是大概率胜出,一种是REST,一种是grpc,两者都是以HTTP为交换通道。</p>
+<h2>面向多语言协议的三层面</h2>
+<p><img src="../../img/blog/dubbomesh/6.png" alt="6.png | center |
826x206"></p>
+<p>展开来讲,在面向多语言的协议需要考虑三个层面。</p>
+<ul>
+<li>先从最右边的会话层,干得事是在tcp字节流的基础上形成交互模式,比如 一对一的标准请求响应模式, 以及onway,
一对多的streaming模式。Dubbo在这一层是有扩展能力的,目前除了支持自定义的Dubbo-Remoting,也支持基于HTTP通道能力,我们觉得未来的趋势是HTTP2,所以也会支持这块.这里在分享一句话跟大家一起思考,HTTP不是RPC,HTTP被翻译成超文本传输协议,但不是传输层。另外提一下,这一层是对于MQ,Streaming
Compute,Cache等等都是通用的。</li>
+<li>再说展示层,干得事是在真正的服务调用过程中,业务对象以何种形式被格式化,比如HTTP头中的content-type就用于这个展示协议的描述,最常用的JSON,TXT,XML等。这一层对于sidecar来说,可以做透明处理,也就是说sidecar只需要解析出头部信息,前提是要求业务应用把需要在治理时用到的一些字段信息以字符串形式放到头部中。Dubbo当前是默认HEssion,跨语言能力比较弱,所以未来JSON是我们首选。</li>
+<li>最后,首先一个服务是干什么的,它的名字,方法,参数都是怎样的,等等基本元信息是需要统一描述的,即便像是REST这样基于URI,也是需要一种协议来定义,以前Dubbo是基于java
interface来定义,现在我们在多语言的mesh环境下是考虑向OpenAPI specification方向考虑,支持swagger。
+我们相信在这几个层面,尤其是会话层和应用层,用不多几年一定会是标准化的,尤其是在云原生的趋势下。</li>
+</ul>
+<h3>方案之Kubernetes集成<span data-type="color" style="color:white">Du</span></h3>
+<p><img src="../../img/blog/dubbomesh/7.png" alt="7.png | center | 826x206">
+<span data-type="color" style="color:white">bbo Mesh方案之Kubernetes集成</span>
+其实,servicemesh在最近两年流行最大的原因是云原生理念的逐渐深入人心,从广义角度看,能够融入云原生的微服务框架都能称得上servicemesh。谈云原生,肯定绕不开kubernetes,所以我们在Dubbo
Mesh的方案的第一个分享是
在kubernetes下的集成,目标是复用Kubernetes的基础服务,从而使得Dubbo能解决kubernetes环境下的微服务集成问题,同时能最大限度的利用dubbo已有的功能。核心思路是两点,</p>
+<ul>
+<li>Dubbo应用在构建阶段自动生成其deployment和service的声明文件。这个主要是解决Dubbo与kubernetes的服务映射。</li>
+<li>Dubbo地址注册针对kubernetes的扩展实现,通过Kubernetes的APIServer来拉取并监听某个服务的podIP。这样,在kubernetes集群内,Dubbo服务就能在其podID的虚拟网络内实现服务发现。</li>
+</ul>
+<h2>方案之跨语言协议支持</h2>
+<p><img src="../../img/blog/dubbomesh/8.png" alt="8.png | center |
826x206"></p>
+<p>前面讲了很多关于协议方面的东西,也为我们在Dubbo Mesh的方案的第二点分享是做了铺垫, 第二点的目标是Dubbo
协议的多语言支持。核心思路是</p>
+<ul>
+<li>积极兼容开源社区Envoy,这个使得Envoy上兼容支持Dubbo的私有协议。</li>
+<li>Dubbo支持HTTP/2作为传输通道,这个是为了Dubbo的协议通道能力向更加开放更加标准规范的方向做努力。</li>
+</ul>
+<h2>ServiceMesh之云原生的指导</h2>
+<p><img src="../../img/blog/dubbomesh/9.png" alt="9.png | center |
826x206"></p>
+<p>孤立地看待servicemesh其实和传统服务框架,价值还不算大,甚至成本相对更高。这时候,当我们把servicemesh设定到云原生的上下文中,就会发现不一样的意义。</p>
+<p>servicemesh是云原生理念的路径地图的第五步,如果没有前面的容器化,CICD等四部,真正拥抱servicemesh也只是空中楼阁。阿里在这方面的实践经验是,servicemesh的实施是需要结合软件开发的整个生命周期进行统筹,从软件在本地开发测试,到通过持续集成服务的自动化构建,再到以镜像方式分发到仓库并依托调度云平台的持续部署,最后持续监控。</p>
+<p>dubbo已经开源好多年,是非常符合云原生这个原则,正向servicemesh方向和云原生理念上努力,为企业信息化做出一点贡献。</p>
+<h2>总结</h2>
+<p>总结一下Dubbo Mesh是Dubbo在cloud
native下的一种演进,这个演进是为了更加开放更加靠近标准协议规范的方向做的探索。通过分享希望大家能带走三点思考。</p>
+<ol>
+<li>servicemesh的多语言方案其实是走规范化标准化的协议之路,这样才能覆盖多语言的诉求。</li>
+<li>建议大家根据实际业务场景来慎重权衡sidecar模式下运维复杂性和收益回报。</li>
+<li>一定把servicemesh设定在云原生的上下文中才具意义,离开了Kubernetes谈servicemesh的实践是不建议的大跃进。
+最后希望大家一起共建共享的Dubbo开源社区,谢谢。</li>
+</ol>
+</section><footer class="footer-container" data-reactid="21"><div
class="footer-body" data-reactid="22"><img src="/img/dubbo_gray.png"
data-reactid="23"/><img class="apache" src="/img/apache_logo.png"
data-reactid="24"/><div class="cols-container" data-reactid="25"><div
class="col col-12" data-reactid="26"><h3 data-reactid="27">Disclaimer</h3><p
data-reactid="28">Apache Dubbo is an effort undergoing incubation at The Apache
Software Foundation (ASF), sponsored by the Incubator. Incubatio [...]
+ <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>
+ <script>
+ window.rootPath = '';
+ </script>
+ <script src="/build/blogDetail.js"></script>
+ <!-- Global site tag (gtag.js) - Google Analytics -->
+ <script async
src="https://www.googletagmanager.com/gtag/js?id=UA-112489517-1"></script>
+ <script>
+ window.dataLayer = window.dataLayer || [];
+ function gtag(){dataLayer.push(arguments);}
+ gtag('js', new Date());
+
+ gtag('config', 'UA-112489517-1');
+ </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/zh-cn/blog/dubbo-mesh-in-thinking.json
b/zh-cn/blog/dubbo-mesh-in-thinking.json
new file mode 100644
index 0000000..5d06bbe
--- /dev/null
+++ b/zh-cn/blog/dubbo-mesh-in-thinking.json
@@ -0,0 +1,7 @@
+{
+ "filename": "dubbo-mesh-in-thinking.md",
+ "__html": "<h1>Dubbo在Service Mesh下的思考和方案</h1>\n<h2>开头</h2>\n<p>Service
Mesh这个“热”词是2016年9月被“造”出来,而今年2018年更是被称为service
Mesh的关键之年,各家大公司都希望能在这个思潮下领先一步。今天我也分享阿里中间件在这方面的观点,思考和实践。考虑到有些人没了解过Dubbo(集团内以HSF为主)和Servicemesh,先简单介绍下这两个词。Dubbo应该是国内最受欢迎的远程服务框架,在Github上有超过2w的star数,也是阿里分布式架构互联互通的核心所在。跟Dubbo一样,servicemesh也是面向服务互联互通这一问题域,是云原生技术栈的核心之一;大家可以简单理解service
mesh就是云原生组织定义的微服务架构解决理念。Dubbo是实现框架,融入servcemesh理念就是我们今天分享的。</p>\n<h2>现状和挑战</h2>\n<p><img
src=\"../../img/blog/dubbomesh/1.png\" alt=\"1.png | [...]
+ "title": "Dubbo在Service Mesh下的思考和方案",
+ "keywords": "Dubbo, Service Mesh, Cloud Native",
+ "description": "Dubbo是实现框架,融入servcemesh理念就是我们今天分享的。"
+}
\ No newline at end of file
diff --git a/zh-cn/blog/index.html b/zh-cn/blog/index.html
index 0ccf838..b68b67a 100644
--- a/zh-cn/blog/index.html
+++ b/zh-cn/blog/index.html
@@ -12,7 +12,7 @@
<link rel="stylesheet" href="/build/blog.css" />
</head>
<body>
- <div id="root"><div class="blog-list-page" data-reactroot=""
data-reactid="1" data-react-checksum="1272581805"><header
class="header-container header-container-normal" data-reactid="2"><div
class="header-body" data-reactid="3"><a href="/zh-cn/index.html"
data-reactid="4"><img class="logo" src="/img/dubbo_colorful.png"
data-reactid="5"/></a><div class="search search-normal" data-reactid="6"><span
class="icon-search" data-reactid="7"></span></div><span class="language-switch
language-swit [...]
+ <div id="root"><div class="blog-list-page" data-reactroot=""
data-reactid="1" data-react-checksum="1539992653"><header
class="header-container header-container-normal" data-reactid="2"><div
class="header-body" data-reactid="3"><a href="/zh-cn/index.html"
data-reactid="4"><img class="logo" src="/img/dubbo_colorful.png"
data-reactid="5"/></a><div class="search search-normal" data-reactid="6"><span
class="icon-search" data-reactid="7"></span></div><span class="language-switch
language-swit [...]
<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>
<script>
diff --git a/zh-cn/blog/prepare-an-apache-release.html
b/zh-cn/blog/prepare-an-apache-release.html
index 598d0f4..4cd7e22 100644
--- a/zh-cn/blog/prepare-an-apache-release.html
+++ b/zh-cn/blog/prepare-an-apache-release.html
@@ -12,7 +12,7 @@
<link rel="stylesheet" href="/build/blogDetail.css" />
</head>
<body>
- <div id="root"><div class="blog-detail-page" data-reactroot=""
data-reactid="1" data-react-checksum="-1268453287"><header
class="header-container header-container-normal" data-reactid="2"><div
class="header-body" data-reactid="3"><a href="/zh-cn/index.html"
data-reactid="4"><img class="logo" src="/img/dubbo_colorful.png"
data-reactid="5"/></a><div class="search search-normal" data-reactid="6"><span
class="icon-search" data-reactid="7"></span></div><span class="language-switch
language-s [...]
+ <div id="root"><div class="blog-detail-page" data-reactroot=""
data-reactid="1" data-react-checksum="-73076503"><header
class="header-container header-container-normal" data-reactid="2"><div
class="header-body" data-reactid="3"><a href="/zh-cn/index.html"
data-reactid="4"><img class="logo" src="/img/dubbo_colorful.png"
data-reactid="5"/></a><div class="search search-normal" data-reactid="6"><span
class="icon-search" data-reactid="7"></span></div><span class="language-switch
language-swi [...]
<h2>理解Apache发布的内容和流程</h2>
<p>总的来说,Source Release是Apache关注的重点,也是发布的必须内容;而Binary
Release是可选项,Dubbo可以选择是否发布二进制包到Apache仓库或者发布到Maven中央仓库。</p>
<p>请参考以下链接,找到更多关于ASF的发布指南:</p>
@@ -143,7 +143,7 @@ default-key 28681CB1
<h2>打包&上传</h2>
<ol>
<li>
-<p>从主干分支拉取新分支作为发布分支,如现在要发布{release_version}版本,则从2.6.x拉出新分支{release_version}-release,此后{release_version}
Release Candidates涉及的修改及打标签等都在{release_version}-release分支进行,最终发布完成后合入主干分支。</p>
+<p>从主干分支拉取新分支作为发布分支,如现在要发布${release_version}版本,则从2.6.x拉出新分支${release_version}-release,此后${release_version}
Release Candidates涉及的修改及打标签等都在${release_version}-release分支进行,最终发布完成后合入主干分支。</p>
</li>
<li>
<p>首先,在${release_version}-release分支验证maven组件打包、source源码打包、签名等是否都正常工作(2.6.x记得要使用1.7或以下版本JDK进行编译打包)</p>
diff --git a/zh-cn/blog/prepare-an-apache-release.json
b/zh-cn/blog/prepare-an-apache-release.json
index 7966e6c..6e360cc 100644
--- a/zh-cn/blog/prepare-an-apache-release.json
+++ b/zh-cn/blog/prepare-an-apache-release.json
@@ -1,6 +1,6 @@
{
"filename": "prepare-an-apache-release.md",
- "__html": "<h1>如何准备Apache
Release</h1>\n<h2>理解Apache发布的内容和流程</h2>\n<p>总的来说,Source
Release是Apache关注的重点,也是发布的必须内容;而Binary
Release是可选项,Dubbo可以选择是否发布二进制包到Apache仓库或者发布到Maven中央仓库。</p>\n<p>请参考以下链接,找到更多关于ASF的发布指南:</p>\n<ul>\n<li><a
href=\"http://www.apache.org/dev/release-publishing\">Apache Release
Guide</a></li>\n<li><a href=\"http://www.apache.org/dev/release.html\">Apache
Release Policy</a></li>\n<li><a
href=\"http://www.apache.org/dev/publishing-maven-artifacts.html\">Maven
Release Info</ [...]
+ "__html": "<h1>如何准备Apache
Release</h1>\n<h2>理解Apache发布的内容和流程</h2>\n<p>总的来说,Source
Release是Apache关注的重点,也是发布的必须内容;而Binary
Release是可选项,Dubbo可以选择是否发布二进制包到Apache仓库或者发布到Maven中央仓库。</p>\n<p>请参考以下链接,找到更多关于ASF的发布指南:</p>\n<ul>\n<li><a
href=\"http://www.apache.org/dev/release-publishing\">Apache Release
Guide</a></li>\n<li><a href=\"http://www.apache.org/dev/release.html\">Apache
Release Policy</a></li>\n<li><a
href=\"http://www.apache.org/dev/publishing-maven-artifacts.html\">Maven
Release Info</ [...]
"title": "如何准备Apache Release",
"keywords": "Dubbo, Apache, Release"
}
\ No newline at end of file
diff --git a/zh-cn/docs/user/best-practice.html
b/zh-cn/docs/user/best-practice.html
index c413cf3..8a41942 100644
--- a/zh-cn/docs/user/best-practice.html
+++ b/zh-cn/docs/user/best-practice.html
@@ -4,18 +4,18 @@
<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="best-practice" />
- <meta name="description" content="best-practice" />
+ <meta name="keywords" content="分包, 粒度, 版本, 兼容性, 枚举, 序列化,异常" />
+ <meta name="description" content="Dubbo 最佳实践" />
<!-- 网页标签标题 -->
- <title>best-practice</title>
+ <title>服务化最佳实践</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=""
data-reactid="1" data-react-checksum="-856452948"><header
class="header-container header-container-normal" data-reactid="2"><div
class="header-body" data-reactid="3"><a href="/zh-cn/index.html"
data-reactid="4"><img class="logo" src="/img/dubbo_colorful.png"
data-reactid="5"/></a><div class="search search-normal" data-reactid="6"><span
class="icon-search" data-reactid="7"></span></div><span class="language-switch
language- [...]
+ <div id="root"><div class="documentation-page" data-reactroot=""
data-reactid="1" data-react-checksum="-1992061893"><header
class="header-container header-container-normal" data-reactid="2"><div
class="header-body" data-reactid="3"><a href="/zh-cn/index.html"
data-reactid="4"><img class="logo" src="/img/dubbo_colorful.png"
data-reactid="5"/></a><div class="search search-normal" data-reactid="6"><span
class="icon-search" data-reactid="7"></span></div><span class="language-switch
language [...]
<h2>分包</h2>
-<p>建议将服务接口,服务模型,服务异常等均放在 API 包中,因为服务模型及异常也是 API
的一部分,同时,这样做也符合分包原则:重用发布等价原则(REP),共同重用原则(CRP)。</p>
-<p>如果需要,也可以考虑在 API 包中放置一份 spring 的引用配置,这样使用方,只需在 spring
加载过程中引用此配置即可,配置建议放在模块的包目录下,以免冲突,如:<code>com/alibaba/china/xxx/dubbo-reference.xml</code>。</p>
+<p>建议将服务接口、服务模型、服务异常等均放在 API 包中,因为服务模型和异常也是 API
的一部分,这样做也符合分包原则:重用发布等价原则(REP),共同重用原则(CRP)。</p>
+<p>如果需要,也可以考虑在 API 包中放置一份 Spring 的引用配置,这样使用方只需在 Spring
加载过程中引用此配置即可。配置建议放在模块的包目录下,以免冲突,如:<code>com/alibaba/china/xxx/dubbo-reference.xml</code>。</p>
<h2>粒度</h2>
<p>服务接口尽可能大粒度,每个服务方法应代表一个功能,而不是某功能的一个步骤,否则将面临分布式事务问题,Dubbo 暂未提供分布式事务支持。</p>
<p>服务接口建议以业务场景为单位划分,并对相近业务做抽象,防止接口数量爆炸。</p>
@@ -26,7 +26,7 @@
<p>当不兼容时,先升级一半提供者为新版本,再将消费者全部升为新版本,然后将剩下的一半提供者升为新版本。</p>
<h2>兼容性</h2>
<p>服务接口增加方法,或服务模型增加字段,可向后兼容,删除方法或删除字段,将不兼容,枚举类型新增字段也不兼容,需通过变更版本号升级。</p>
-<p>各协议的兼容性不同,参见: <a href="./references/protocol/introduction.md">服务协议</a></p>
+<p>各协议的兼容性不同,参见:<a href="./references/protocol/introduction.md">服务协议</a></p>
<h2>枚举值</h2>
<p>如果是完备集,可以用 <code>Enum</code>,比如:<code>ENABLE</code>,
<code>DISABLE</code>。</p>
<p>如果是业务种类,以后明显会有类型增加,不建议用 <code>Enum</code>,可以用 <code>String</code> 代替。</p>
@@ -35,15 +35,15 @@
<h2>序列化</h2>
<p>服务参数及返回值建议使用 POJO 对象,即通过 <code>setter</code>, <code>getter</code>
方法表示属性的对象。</p>
<p>服务参数及返回值不建议使用接口,因为数据模型抽象的意义不大,并且序列化需要接口实现类的元信息,并不能起到隐藏实现的意图。</p>
-<p>服务参数及返回值都必需是 byValue 的,而不能是 byReference
的,消费方和提供方的参数或返回值引用并不是同一个,只是值相同,Dubbo 不支持引用远程对象。</p>
+<p>服务参数及返回值都必需是<a
href="https://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_value">传值调用</a>,而不能是<a
href="https://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_reference">传引用调用</a>,消费方和提供方的参数或返回值引用并不是同一个,只是值相同,Dubbo
不支持引用远程对象。</p>
<h2>异常</h2>
-<p>建议使用异常汇报错误,而不是返回错误码,异常信息能携带更多信息,以及语义更友好。</p>
+<p>建议使用异常汇报错误,而不是返回错误码,异常信息能携带更多信息,并且语义更友好。</p>
<p>如果担心性能问题,在必要时,可以通过 override 掉异常类的 <code>fillInStackTrace()</code>
方法为空方法,使其不拷贝栈信息。</p>
<p>查询方法不建议抛出 checked 异常,否则调用方在查询时将过多的 <code>try...catch</code>,并且不能进行有效处理。</p>
<p>服务提供方不应将 DAO 或 SQL 等异常抛给消费方,应在服务实现中对消费方不关心的异常进行包装,否则可能出现消费方无法反序列化相应异常。</p>
<h2>调用</h2>
<p>不要只是因为是 Dubbo 调用,而把调用 <code>try...catch</code> 起来。<code>try...catch</code>
应该加上合适的回滚边界上。</p>
-<p>对于输入参数的校验逻辑在 Provider 端要有。如有性能上的考虑,服务实现者可以考虑在 API 包上加上服务 Stub 类来完成检验。</p>
+<p>Provider 端需要对输入参数进行校验。如有性能上的考虑,服务实现者可以考虑在 API 包上加上服务 Stub 类来完成检验。</p>
</div></section><footer class="footer-container" data-reactid="384"><div
class="footer-body" data-reactid="385"><img src="/img/dubbo_gray.png"
data-reactid="386"/><img class="apache" src="/img/apache_logo.png"
data-reactid="387"/><div class="cols-container" data-reactid="388"><div
class="col col-12" data-reactid="389"><h3 data-reactid="390">Disclaimer</h3><p
data-reactid="391">Apache Dubbo is an effort undergoing incubation at The
Apache Software Foundation (ASF), sponsored by the Incuba [...]
<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/user/best-practice.json
b/zh-cn/docs/user/best-practice.json
index fb59ece..6ab8602 100644
--- a/zh-cn/docs/user/best-practice.json
+++ b/zh-cn/docs/user/best-practice.json
@@ -1,4 +1,7 @@
{
"filename": "best-practice.md",
- "__html": "<h1>服务化最佳实践</h1>\n<h2>分包</h2>\n<p>建议将服务接口,服务模型,服务异常等均放在 API
包中,因为服务模型及异常也是 API
的一部分,同时,这样做也符合分包原则:重用发布等价原则(REP),共同重用原则(CRP)。</p>\n<p>如果需要,也可以考虑在 API 包中放置一份
spring 的引用配置,这样使用方,只需在 spring
加载过程中引用此配置即可,配置建议放在模块的包目录下,以免冲突,如:<code>com/alibaba/china/xxx/dubbo-reference.xml</code>。</p>\n<h2>粒度</h2>\n<p>服务接口尽可能大粒度,每个服务方法应代表一个功能,而不是某功能的一个步骤,否则将面临分布式事务问题,Dubbo
暂未提供分布式事务支持。</p>\n<p>服务接口建议以业务场景为单位划分,并对相近业务做抽象,防止接口数量爆炸。</p>\n<p>不建议使用过于抽象的通用接口,如:<code>Map
query(Map)</
code>,这样的接口没有明确语义,会给后 [...]
+ "__html": "<h1>服务化最佳实践</h1>\n<h2>分包</h2>\n<p>建议将服务接口、服务模型、服务异常等均放在 API
包中,因为服务模型和异常也是 API
的一部分,这样做也符合分包原则:重用发布等价原则(REP),共同重用原则(CRP)。</p>\n<p>如果需要,也可以考虑在 API 包中放置一份
Spring 的引用配置,这样使用方只需在 Spring
加载过程中引用此配置即可。配置建议放在模块的包目录下,以免冲突,如:<code>com/alibaba/china/xxx/dubbo-reference.xml</code>。</p>\n<h2>粒度</h2>\n<p>服务接口尽可能大粒度,每个服务方法应代表一个功能,而不是某功能的一个步骤,否则将面临分布式事务问题,Dubbo
暂未提供分布式事务支持。</p>\n<p>服务接口建议以业务场景为单位划分,并对相近业务做抽象,防止接口数量爆炸。</p>\n<p>不建议使用过于抽象的通用接口,如:<code>Map
query(Map)</code>,这�
��的接口没有明确语义,会给后期维护带 [...]
+ "title": "服务化最佳实践",
+ "keywords": "分包, 粒度, 版本, 兼容性, 枚举, 序列化,异常",
+ "description": "Dubbo 最佳实践"
}
\ No newline at end of file
diff --git a/zh-cn/docs/user/capacity-plan.html
b/zh-cn/docs/user/capacity-plan.html
index 0559223..6cf3d57 100644
--- a/zh-cn/docs/user/capacity-plan.html
+++ b/zh-cn/docs/user/capacity-plan.html
@@ -4,29 +4,29 @@
<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="capacity-plan" />
- <meta name="description" content="capacity-plan" />
+ <meta name="keywords" content="容量规划" />
+ <meta name="description" content="Dubbo 应用容量规划参考" />
<!-- 网页标签标题 -->
- <title>capacity-plan</title>
+ <title>容量规划</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=""
data-reactid="1" data-react-checksum="-406509198"><header
class="header-container header-container-normal" data-reactid="2"><div
class="header-body" data-reactid="3"><a href="/zh-cn/index.html"
data-reactid="4"><img class="logo" src="/img/dubbo_colorful.png"
data-reactid="5"/></a><div class="search search-normal" data-reactid="6"><span
class="icon-search" data-reactid="7"></span></div><span class="language-switch
language- [...]
+ <div id="root"><div class="documentation-page" data-reactroot=""
data-reactid="1" data-react-checksum="1361517156"><header
class="header-container header-container-normal" data-reactid="2"><div
class="header-body" data-reactid="3"><a href="/zh-cn/index.html"
data-reactid="4"><img class="logo" src="/img/dubbo_colorful.png"
data-reactid="5"/></a><div class="search search-normal" data-reactid="6"><span
class="icon-search" data-reactid="7"></span></div><span class="language-switch
language- [...]
<p>以下数据供参考:</p>
<h2>使用 Dubbo 的会员服务项目</h2>
<ul>
<li>每天接收 4 亿次远程调用</li>
-<li>使用 12 台网站标配机器提供服务(8 核 CPU, 8G 内存)</li>
-<li>平均负载在 1 以下(对于 8 核 CPU 负载很低)</li>
-<li>平均响应时间 2.3 到 2.5 毫秒,网络开销约占 1.5 到 1.6 毫秒(和数据包大小有关)</li>
+<li>使用 12 台网站标配机器提供服务(8 核 CPU,8G 内存)</li>
+<li>平均负载在 1 以下(对于 8 核 CPU 负载很低)</li>
+<li>平均响应时间 2.3 到 2.5 毫秒,网络开销约占 1.5 到 1.6 毫秒(和数据包大小有关)</li>
</ul>
<h2>使用 Dubbo 的产品授权服务项目</h2>
<ul>
<li>每天接收 3 亿次远程调用</li>
-<li>使用 8 台网站标配机器提供服务(8 核CPU,8G 内存)</li>
-<li>平均负载在 1 以下(对于 8 核 CPU 负载很低)</li>
-<li>平均响应时间 1.4 到 2.8 毫秒,网络开销约占 1.0 到 1.1 毫秒(和数据包大小有关)</li>
+<li>使用 8 台网站标配机器提供服务(8 核CPU,8G 内存)</li>
+<li>平均负载在 1 以下(对于 8 核 CPU 负载很低)</li>
+<li>平均响应时间 1.4 到 2.8 毫秒,网络开销约占 1.0 到 1.1 毫秒(和数据包大小有关)</li>
</ul>
</div></section><footer class="footer-container" data-reactid="384"><div
class="footer-body" data-reactid="385"><img src="/img/dubbo_gray.png"
data-reactid="386"/><img class="apache" src="/img/apache_logo.png"
data-reactid="387"/><div class="cols-container" data-reactid="388"><div
class="col col-12" data-reactid="389"><h3 data-reactid="390">Disclaimer</h3><p
data-reactid="391">Apache Dubbo is an effort undergoing incubation at The
Apache Software Foundation (ASF), sponsored by the Incuba [...]
<script
src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
diff --git a/zh-cn/docs/user/capacity-plan.json
b/zh-cn/docs/user/capacity-plan.json
index e5f1689..9fc8c5e 100644
--- a/zh-cn/docs/user/capacity-plan.json
+++ b/zh-cn/docs/user/capacity-plan.json
@@ -1,4 +1,7 @@
{
"filename": "capacity-plan.md",
- "__html": "<h1>容量规划</h1>\n<p>以下数据供参考:</p>\n<h2>使用 Dubbo
的会员服务项目</h2>\n<ul>\n<li>每天接收 4 亿次远程调用</li>\n<li>使用 12 台网站标配机器提供服务(8 核 CPU, 8G
内存)</li>\n<li>平均负载在 1 以下(对于 8 核 CPU 负载很低)</li>\n<li>平均响应时间 2.3 到 2.5 毫秒,网络开销约占
1.5 到 1.6 毫秒(和数据包大小有关)</li>\n</ul>\n<h2>使用 Dubbo 的产品授权服务项目</h2>\n<ul>\n<li>每天接收
3 亿次远程调用</li>\n<li>使用 8 台网站标配机器提供服务(8 核CPU,8G 内存)</li>\n<li>平均负载在 1 以下(对于 8 核
CPU 负载很低)</li>\n<li>平均响应时间 1.4 到 2.8 毫秒,网络开销约占 1.0 到 1.1
毫秒(和数据包大小有关)</li>\n</ul>\n"
+ "__html": "<h1>容量规划</h1>\n<p>以下数据供参考:</p>\n<h2>使用 Dubbo
的会员服务项目</h2>\n<ul>\n<li>每天接收 4 亿次远程调用</li>\n<li>使用 12 台网站标配机器提供服务(8 核 CPU,8G
内存)</li>\n<li>平均负载在 1 以下(对于 8 核 CPU 负载很低)</li>\n<li>平均响应时间 2.3 到 2.5 毫秒,网络开销约占
1.5 到 1.6 毫秒(和数据包大小有关)</li>\n</ul>\n<h2>使用 Dubbo 的产品授权服务项目</h2>\n<ul>\n<li>每天接收
3 亿次远程调用</li>\n<li>使用 8 台网站标配机器提供服务(8 核CPU,8G 内存)</li>\n<li>平均负载在 1 以下(对于 8 核
CPU 负载很低)</li>\n<li>平均响应时间 1.4 到 2.8 毫秒,网络开销约占 1.0 到 1.1
毫秒(和数据包大小有关)</li>\n</ul>\n",
+ "title": "容量规划",
+ "keywords": "容量规划",
+ "description": "Dubbo 应用容量规划参考"
}
\ No newline at end of file
diff --git a/zh-cn/docs/user/dependencies.html
b/zh-cn/docs/user/dependencies.html
index 1545395..c957648 100644
--- a/zh-cn/docs/user/dependencies.html
+++ b/zh-cn/docs/user/dependencies.html
@@ -4,10 +4,10 @@
<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="dependencies" />
- <meta name="description" content="dependencies" />
+ <meta name="keywords" content="必须依赖, 缺省依赖, 可选依赖" />
+ <meta name="description" content="Dubbo 依赖基本介绍" />
<!-- 网页标签标题 -->
- <title>dependencies</title>
+ <title>依赖</title>
<link rel="shortcut icon" href="/img/dubbo.ico"/>
<link rel="stylesheet" href="/build/documentation.css" />
</head>
diff --git a/zh-cn/docs/user/dependencies.json
b/zh-cn/docs/user/dependencies.json
index 7316beb..f15345c 100644
--- a/zh-cn/docs/user/dependencies.json
+++ b/zh-cn/docs/user/dependencies.json
@@ -1,4 +1,7 @@
{
"filename": "dependencies.md",
- "__html": "<h1>依赖</h1>\n<h2>必须依赖</h2>\n<p>JDK 1.6+ <sup
class=\"footnote-ref\"><a href=\"#fn1\"
id=\"fnref1\">[1]</a></sup></p>\n<h2>缺省依赖</h2>\n<p>通过 <code>mvn dependency:tree
> dep.log</code> 命令分析,Dubbo 缺省依赖以下三方库:</p>\n<pre><code>[INFO] +-
com.alibaba:dubbo:jar:2.5.9-SNAPSHOT:compile\n[INFO] | +-
org.springframework:spring-context:jar:4.3.10.RELEASE:compile\n[INFO] | +-
org.javassist:javassist:jar:3.21.0-GA:compile\n[INFO] | \\-
org.jboss.netty:netty:jar:3.2.5.Final:compile\n</c [...]
+ "__html": "<h1>依赖</h1>\n<h2>必须依赖</h2>\n<p>JDK 1.6+ <sup
class=\"footnote-ref\"><a href=\"#fn1\"
id=\"fnref1\">[1]</a></sup></p>\n<h2>缺省依赖</h2>\n<p>通过 <code>mvn dependency:tree
> dep.log</code> 命令分析,Dubbo 缺省依赖以下三方库:</p>\n<pre><code>[INFO] +-
com.alibaba:dubbo:jar:2.5.9-SNAPSHOT:compile\n[INFO] | +-
org.springframework:spring-context:jar:4.3.10.RELEASE:compile\n[INFO] | +-
org.javassist:javassist:jar:3.21.0-GA:compile\n[INFO] | \\-
org.jboss.netty:netty:jar:3.2.5.Final:compile\n</c [...]
+ "title": "依赖",
+ "keywords": "必须依赖, 缺省依赖, 可选依赖",
+ "description": "Dubbo 依赖基本介绍"
}
\ No newline at end of file
diff --git a/zh-cn/docs/user/maturity.html b/zh-cn/docs/user/maturity.html
index d0181b4..fdfda9a 100644
--- a/zh-cn/docs/user/maturity.html
+++ b/zh-cn/docs/user/maturity.html
@@ -4,10 +4,10 @@
<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="maturity" />
- <meta name="description" content="maturity" />
+ <meta name="keywords" content="功能成熟度, 策略成熟度" />
+ <meta name="description" content="介绍 Dubbo 各个功能、策略的成熟度" />
<!-- 网页标签标题 -->
- <title>maturity</title>
+ <title>成熟度</title>
<link rel="shortcut icon" href="/img/dubbo.ico"/>
<link rel="stylesheet" href="/build/documentation.css" />
</head>
diff --git a/zh-cn/docs/user/maturity.json b/zh-cn/docs/user/maturity.json
index 32c65af..10b4ab5 100644
--- a/zh-cn/docs/user/maturity.json
+++ b/zh-cn/docs/user/maturity.json
@@ -1,4 +1,7 @@
{
"filename": "maturity.md",
- "__html":
"<h1>成熟度</h1>\n<h2>功能成熟度</h2>\n<table>\n<thead>\n<tr>\n<th>Feature</th>\n<th>Maturity</th>\n<th>Strength</th>\n<th>Problem</th>\n<th>Advise</th>\n<th>User</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>并发控制</td>\n<td>Tested</td>\n<td>并发控制</td>\n<td></td>\n<td>试用</td>\n<td></td>\n</tr>\n<tr>\n<td>连接控制</td>\n<td>Tested</td>\n<td>连接数控制</td>\n<td></td>\n<td>试用</td>\n<td></td>\n</tr>\n<tr>\n<td>直连提供者</td>\n<td>Tested</td>\n<td>点对点直连服务提供方,用于测试</td>\n<td></td>\n<td>测试环境使用</td>\n<td>Aliba
[...]
+ "__html":
"<h1>成熟度</h1>\n<h2>功能成熟度</h2>\n<table>\n<thead>\n<tr>\n<th>Feature</th>\n<th>Maturity</th>\n<th>Strength</th>\n<th>Problem</th>\n<th>Advise</th>\n<th>User</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>并发控制</td>\n<td>Tested</td>\n<td>并发控制</td>\n<td></td>\n<td>试用</td>\n<td></td>\n</tr>\n<tr>\n<td>连接控制</td>\n<td>Tested</td>\n<td>连接数控制</td>\n<td></td>\n<td>试用</td>\n<td></td>\n</tr>\n<tr>\n<td>直连提供者</td>\n<td>Tested</td>\n<td>点对点直连服务提供方,用于测试</td>\n<td></td>\n<td>测试环境使用</td>\n<td>Aliba
[...]
+ "title": "成熟度",
+ "keywords": "功能成熟度, 策略成熟度",
+ "description": "介绍 Dubbo 各个功能、策略的成熟度"
}
\ No newline at end of file
diff --git a/zh-cn/docs/user/perf-test.html b/zh-cn/docs/user/perf-test.html
index 52782ed..7d69ca9 100644
--- a/zh-cn/docs/user/perf-test.html
+++ b/zh-cn/docs/user/perf-test.html
@@ -4,17 +4,17 @@
<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="perf-test" />
- <meta name="description" content="perf-test" />
+ <meta name="keywords" content="性能测试" />
+ <meta name="description" content="Dubbo 2.0 性能测试报告" />
<!-- 网页标签标题 -->
- <title>perf-test</title>
+ <title>性能测试报告</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=""
data-reactid="1" data-react-checksum="302916722"><header
class="header-container header-container-normal" data-reactid="2"><div
class="header-body" data-reactid="3"><a href="/zh-cn/index.html"
data-reactid="4"><img class="logo" src="/img/dubbo_colorful.png"
data-reactid="5"/></a><div class="search search-normal" data-reactid="6"><span
class="icon-search" data-reactid="7"></span></div><span class="language-switch
language-s [...]
+ <div id="root"><div class="documentation-page" data-reactroot=""
data-reactid="1" data-react-checksum="263201139"><header
class="header-container header-container-normal" data-reactid="2"><div
class="header-body" data-reactid="3"><a href="/zh-cn/index.html"
data-reactid="4"><img class="logo" src="/img/dubbo_colorful.png"
data-reactid="5"/></a><div class="search search-normal" data-reactid="6"><span
class="icon-search" data-reactid="7"></span></div><span class="language-switch
language-s [...]
<h2>测试说明</h2>
-<ol start="0">
+<ol>
<li>本次性能测试,测试了 dubbo 2.0 所有支持的协议在不同大小和数据类型下的表现,并与 dubbo 1.0 进行了对比。</li>
<li>整体性能相比 1.0 有了提升,平均提升 10%,使用 dubbo 2.0 新增的 dubbo 序列化还能获得 10%~50%
的性能提升,详见下面的性能数据。</li>
<li>稳定性测试中由于将底层通信框架从 mina 换成 netty,old 区对象的增长大大减少,50 小时运行,增长不到 200m,无
fullgc。</li>
diff --git a/zh-cn/docs/user/perf-test.json b/zh-cn/docs/user/perf-test.json
index f8628e7..82c55e1 100644
--- a/zh-cn/docs/user/perf-test.json
+++ b/zh-cn/docs/user/perf-test.json
@@ -1,4 +1,7 @@
{
"filename": "perf-test.md",
- "__html": "<h1>性能测试报告</h1>\n<h2>测试说明</h2>\n<ol start=\"0\">\n<li>本次性能测试,测试了
dubbo 2.0 所有支持的协议在不同大小和数据类型下的表现,并与 dubbo 1.0 进行了对比。</li>\n<li>整体性能相比 1.0
有了提升,平均提升 10%,使用 dubbo 2.0 新增的 dubbo 序列化还能获得 10%~50%
的性能提升,详见下面的性能数据。</li>\n<li>稳定性测试中由于将底层通信框架从 mina 换成 netty,old 区对象的增长大大减少,50
小时运行,增长不到 200m,无 fullgc。</li>\n<li>存在的问题:在 50k 数据的时候 2.0 性能不如
1.0,怀疑可能是缓冲区设置的问题,下版本会进一步确认。</li>\n</ol>\n<h2>测试环境</h2>\n<h3>硬件部署与参数调整</h3>\n<table>\n<thead>\n<tr>\n<th>机型</th>\n<th>CPU</th>\n<th>内存</th>\n<th>网络</t
[...]
+ "__html": "<h1>性能测试报告</h1>\n<h2>测试说明</h2>\n<ol>\n<li>本次性能测试,测试了 dubbo 2.0
所有支持的协议在不同大小和数据类型下的表现,并与 dubbo 1.0 进行了对比。</li>\n<li>整体性能相比 1.0 有了提升,平均提升 10%,使用
dubbo 2.0 新增的 dubbo 序列化还能获得 10%~50% 的性能提升,详见下面的性能数据。</li>\n<li>稳定性测试中由于将底层通信框架从
mina 换成 netty,old 区对象的增长大大减少,50 小时运行,增长不到 200m,无 fullgc。</li>\n<li>存在的问题:在 50k
数据的时候 2.0 性能不如
1.0,怀疑可能是缓冲区设置的问题,下版本会进一步确认。</li>\n</ol>\n<h2>测试环境</h2>\n<h3>硬件部署与参数调整</h3>\n<table>\n<thead>\n<tr>\n<th>机型</th>\n<th>CPU</th>\n<th>内存</th>\n<th>网络</th>\n<th>磁盘</
[...]
+ "title": "性能测试报告",
+ "keywords": "性能测试",
+ "description": "Dubbo 2.0 性能测试报告"
}
\ No newline at end of file
diff --git a/zh-cn/docs/user/quick-start.html b/zh-cn/docs/user/quick-start.html
index 33e4446..7ceac3f 100644
--- a/zh-cn/docs/user/quick-start.html
+++ b/zh-cn/docs/user/quick-start.html
@@ -4,10 +4,10 @@
<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="quick-start" />
- <meta name="description" content="quick-start" />
+ <meta name="keywords" content="XML configuration, Consumer, Provider" />
+ <meta name="description" content="使用 XML 配置方式快速上手 Dubbo" />
<!-- 网页标签标题 -->
- <title>quick-start</title>
+ <title>快速启动</title>
<link rel="shortcut icon" href="/img/dubbo.ico"/>
<link rel="stylesheet" href="/build/documentation.css" />
</head>
diff --git a/zh-cn/docs/user/quick-start.json b/zh-cn/docs/user/quick-start.json
index ccd6890..901d58f 100644
--- a/zh-cn/docs/user/quick-start.json
+++ b/zh-cn/docs/user/quick-start.json
@@ -1,4 +1,7 @@
{
"filename": "quick-start.md",
- "__html": "<h1>快速启动</h1>\n<p>Dubbo 采用全 Spring 配置方式,透明化接入应用,对应用没有任何 API
侵入,只需用 Spring 加载 Dubbo 的配置即可,Dubbo 基于 <a
href=\"https://docs.spring.io/spring/docs/4.2.x/spring-framework-reference/html/xsd-configuration.html\">Spring
的 Schema 扩展</a> 进行加载。</p>\n<p>如果不想使用 Spring 配置,可以通过 <a
href=\"./configuration/api.md\">API 的方式</a>
进行调用。</p>\n<h2>服务提供者</h2>\n<p>完整安装步骤,请参见:<a
href=\"../admin/install/provider-demo.md\">示例提供者安装</a></p>\n<h3>定义服务接口</h3>\n<p>DemoService.java
<sup class=\"footnote-ref\ [...]
+ "__html": "<h1>快速启动</h1>\n<p>Dubbo 采用全 Spring 配置方式,透明化接入应用,对应用没有任何 API
侵入,只需用 Spring 加载 Dubbo 的配置即可,Dubbo 基于 <a
href=\"https://docs.spring.io/spring/docs/4.2.x/spring-framework-reference/html/xsd-configuration.html\">Spring
的 Schema 扩展</a> 进行加载。</p>\n<p>如果不想使用 Spring 配置,可以通过 <a
href=\"./configuration/api.md\">API 的方式</a>
进行调用。</p>\n<h2>服务提供者</h2>\n<p>完整安装步骤,请参见:<a
href=\"../admin/install/provider-demo.md\">示例提供者安装</a></p>\n<h3>定义服务接口</h3>\n<p>DemoService.java
<sup class=\"footnote-ref\ [...]
+ "title": "快速启动",
+ "keywords": "XML configuration, Consumer, Provider",
+ "description": "使用 XML 配置方式快速上手 Dubbo"
}
\ No newline at end of file
diff --git a/zh-cn/docs/user/recommend.html b/zh-cn/docs/user/recommend.html
index bcb3728..4d8d583 100644
--- a/zh-cn/docs/user/recommend.html
+++ b/zh-cn/docs/user/recommend.html
@@ -4,26 +4,25 @@
<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="recommend" />
- <meta name="description" content="recommend" />
+ <meta name="keywords" content="Provider 配置, 管理信息, 缓存, 监控" />
+ <meta name="description" content="Dubbo 推荐用法举例" />
<!-- 网页标签标题 -->
- <title>recommend</title>
+ <title>推荐用法</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=""
data-reactid="1" data-react-checksum="373961844"><header
class="header-container header-container-normal" data-reactid="2"><div
class="header-body" data-reactid="3"><a href="/zh-cn/index.html"
data-reactid="4"><img class="logo" src="/img/dubbo_colorful.png"
data-reactid="5"/></a><div class="search search-normal" data-reactid="6"><span
class="icon-search" data-reactid="7"></span></div><span class="language-switch
language-s [...]
+ <div id="root"><div class="documentation-page" data-reactroot=""
data-reactid="1" data-react-checksum="-64594932"><header
class="header-container header-container-normal" data-reactid="2"><div
class="header-body" data-reactid="3"><a href="/zh-cn/index.html"
data-reactid="4"><img class="logo" src="/img/dubbo_colorful.png"
data-reactid="5"/></a><div class="search search-normal" data-reactid="6"><span
class="icon-search" data-reactid="7"></span></div><span class="language-switch
language-s [...]
<h2>在 Provider 上尽量多配置 Consumer 端属性</h2>
<p>原因如下:</p>
<ul>
-<li>作服务的提供者,比服务使用方更清楚服务性能参数,如调用的超时时间,合理的重试次数,等等</li>
-<li>在 Provider 配置后,Consumer 不配置则会使用 Provider 的配置值,即 Provider 配置可以作为 Consumer
的缺省值 <sup class="footnote-ref"><a href="#fn1"
id="fnref1">[1]</a></sup>。否则,Consumer 会使用 Consumer 端的全局设置,这对于 Provider
不可控的,并且往往是不合理的</li>
+<li>作服务的提供者,比服务使用方更清楚服务性能参数,如调用的超时时间、合理的重试次数等</li>
+<li>在 Provider 配置后,Consumer 不配置则会使用 Provider 的配置值,即 Provider 配置可以作为 Consumer
的缺省值 <sup class="footnote-ref"><a href="#fn1"
id="fnref1">[1]</a></sup>。否则,Consumer 会使用 Consumer 端的全局设置,这对于 Provider
是不可控的,并且往往是不合理的</li>
</ul>
-<p>Provider 上尽量多配置 Consumer 端的属性,让 Provider 实现者一开始就思考 Provider
服务特点、服务质量的问题。</p>
+<p>Provider 上尽量多配置 Consumer 端的属性,让 Provider 实现者一开始就思考 Provider
服务特点、服务质量等问题。</p>
<p>示例:</p>
<pre><code class="language-xml"><span class="hljs-tag"><<span
class="hljs-name">dubbo:service</span> <span
class="hljs-attr">interface</span>=<span
class="hljs-string">"com.alibaba.hello.api.HelloService"</span> <span
class="hljs-attr">version</span>=<span class="hljs-string">"1.0.0"</span> <span
class="hljs-attr">ref</span>=<span class="hljs-string">"helloService"</span>
- <span class="hljs-attr">timeout</span>=<span
class="hljs-string">"300"</span> <span class="hljs-attr">retry</span>=<span
class="hljs-string">"2"</span> <span class="hljs-attr">loadbalance</span>=<span
class="hljs-string">"random"</span> <span
class="hljs-attr">actives</span>=<span class="hljs-string">"0"</span>
-/></span>
+ <span class="hljs-attr">timeout</span>=<span
class="hljs-string">"300"</span> <span class="hljs-attr">retry</span>=<span
class="hljs-string">"2"</span> <span class="hljs-attr">loadbalance</span>=<span
class="hljs-string">"random"</span> <span
class="hljs-attr">actives</span>=<span class="hljs-string">"0"</span>
/></span>
<span class="hljs-tag"><<span class="hljs-name">dubbo:service</span> <span
class="hljs-attr">interface</span>=<span
class="hljs-string">"com.alibaba.hello.api.WorldService"</span> <span
class="hljs-attr">version</span>=<span class="hljs-string">"1.0.0"</span> <span
class="hljs-attr">ref</span>=<span class="hljs-string">"helloService"</span>
<span class="hljs-attr">timeout</span>=<span
class="hljs-string">"300"</span> <span class="hljs-attr">retry</span>=<span
class="hljs-string">"2"</span> <span class="hljs-attr">loadbalance</span>=<span
class="hljs-string">"random"</span> <span
class="hljs-attr">actives</span>=<span class="hljs-string">"0"</span>
></span>
@@ -31,12 +30,11 @@
<span class="hljs-tag"><<span
class="hljs-name">dubbo:service</span>/></span>
</code></pre>
<p>在 Provider 上可以配置的 Consumer 端属性有:</p>
-<ol start="0">
+<ol>
<li><code>timeout</code> 方法调用超时</li>
<li><code>retries</code> 失败重试次数,缺省是 2 <sup class="footnote-ref"><a href="#fn2"
id="fnref2">[2]</a></sup></li>
-<li><code>loadbalance</code> 负载均衡算法 <sup class="footnote-ref"><a href="#fn3"
id="fnref3">[3]</a></sup>,缺省是随机 <code>random</code>。还可以有轮询
<code>roundrobin</code>、最不活跃优先 <sup class="footnote-ref"><a href="#fn4"
id="fnref4">[4]</a></sup> <code>leastactive</code></li>
-<li><code>actives</code> 消费者端,最大并发调用限制,即当 Consumer 对一个服务的并发调用到上限后,新调用会 Wait
直到超时
-在方法上配置 <code>dubbo:method</code> 则并发限制针对方法,在接口上配置
<code>dubbo:service</code>,则并发限制针对服务</li>
+<li><code>loadbalance</code> 负载均衡算法 <sup class="footnote-ref"><a href="#fn3"
id="fnref3">[3]</a></sup>,缺省是随机 <code>random</code>。还可以有轮询
<code>roundrobin</code>、最不活跃优先 <sup class="footnote-ref"><a href="#fn4"
id="fnref4">[4]</a></sup> <code>leastactive</code> 等</li>
+<li><code>actives</code> 消费者端,最大并发调用限制,即当 Consumer
对一个服务的并发调用到上限后,新调用会阻塞直到超时,在方法上配置 <code>dubbo:method</code> 则并发限制针对方法,在接口上配置
<code>dubbo:service</code>,则并发限制针对服务</li>
</ol>
<p>详细配置说明参见:<a href="./references/xml/introduction.md">Dubbo配置参考手册</a></p>
<h2>Provider 上配置合理的 Provider 端属性</h2>
@@ -47,9 +45,9 @@
<span class="hljs-tag"></<span
class="hljs-name">dubbo:service</span>></span>
</code></pre>
<p>Provider 上可以配置的 Provider 端属性有:</p>
-<ol start="0">
+<ol>
<li><code>threads</code> 服务线程池大小</li>
-<li><code>executes</code> 一个服务提供者并行执行请求上限,即当 Provider 对一个服务的并发调用到上限后,新调用会
Wait,这个时候 Consumer可能会超时。在方法上配置 <code>dubbo:method</code> 则并发限制针对方法,在接口上配置
<code>dubbo:service</code>,则并发限制针对服务</li>
+<li><code>executes</code> 一个服务提供者并行执行请求上限,即当 Provider
对一个服务的并发调用达到上限后,新调用会阻塞,此时 Consumer 可能会超时。在方法上配置 <code>dubbo:method</code>
则并发限制针对方法,在接口上配置 <code>dubbo:service</code>,则并发限制针对服务</li>
</ol>
<h2>配置管理信息</h2>
<p>目前有负责人信息和组织信息用于区分站点。有问题时便于的找到服务的负责人,至少写两个人以便备份。负责人和组织的信息可以在注册中心的上看到。</p>
@@ -62,29 +60,29 @@
<p>reference 配置负责人:</p>
<pre><code class="language-xml"><span class="hljs-tag"><<span
class="hljs-name">dubbo:reference</span> <span
class="hljs-attr">owner</span>=<span
class="hljs-string">”ding.lid,william.liangf”</span> /></span>
</code></pre>
-<p><code>dubbo:service</code>、<code>dubbo:reference</code> 没有配置负责人,则使用
<code>dubbo:application</code> 设置的负责人。</p>
+<p>若没有配置 service 和 reference 的负责人,则默认使用 <code>dubbo:application</code>
设置的负责人。</p>
<h2>配置 Dubbo 缓存文件</h2>
<p>提供者列表缓存文件:</p>
<pre><code class="language-xml"><span class="hljs-tag"><<span
class="hljs-name">dubbo:registry</span> <span
class="hljs-attr">file</span>=<span
class="hljs-string">”${user.home}/output/dubbo.cache”</span> /></span>
</code></pre>
<p>注意:</p>
-<ol start="0">
-<li>文件的路径,应用可以根据需要调整,保证这个文件不会在发布过程中被清除。</li>
-<li>如果有多个应用进程注意不要使用同一个文件,避免内容被覆盖。</li>
+<ol>
+<li>应用可以根据需要调整缓存文件的路径,保证这个文件不会在发布过程中被清除;</li>
+<li>如果有多个应用进程,注意不要使用同一个文件,避免内容被覆盖;</li>
</ol>
-<p>这个文件会缓存注册中心的列表和服务提供者列表。有了这项配置后,当应用重启过程中,Dubbo
注册中心不可用时则应用会从这个缓存文件读取服务提供者列表的信息,进一步保证应用可靠性。</p>
+<p>该文件会缓存注册中心列表和服务提供者列表。配置缓存文件后,应用重启过程中,若注册中心不可用,应用会从该缓存文件读取服务提供者列表,进一步保证应用可靠性。</p>
<h2>监控配置</h2>
-<ol start="0">
+<ol>
<li>
<p>使用固定端口暴露服务,而不要使用随机端口</p>
<p>这样在注册中心推送有延迟的情况下,消费者通过缓存列表也能调用到原地址,保证调用成功。</p>
</li>
<li>
-<p>使用 Dragoon 的 http 监控项监控注册中心上服务提供方</p>
-<p>Dragoon 监控服务在注册中心上的状态:<a
href="http://dubbo-reg1.hst.xyi.cn.alidc.net:8080/status/com.alibaba.morgan.member.MemberService:1.0.5">http://dubbo-reg1.hst.xyi.cn.alidc.net:8080/status/com.alibaba.morgan.member.MemberService:1.0.5</a>
确保注册中心上有该服务的存在。</p>
+<p>使用 Dubbo Ops 监控注册中心上的服务提供方</p>
+<p>使用 <a href="https://github.com/apache/incubator-dubbo-ops">Dubbo Ops</a>
监控服务在注册中心上的状态,确保注册中心上有该服务的存在。</p>
</li>
<li>
-<p>服务提供方,使用 Dragoon 的 telnet 或 shell 监控项</p>
+<p>服务提供方,使用 Dubbo Qos 的 telnet 或 shell 监控项</p>
<p>监控服务提供者端口状态:<code>echo status | nc -i 1 20880 | grep OK | wc -l</code>,其中的
20880 为服务端口</p>
</li>
<li>
@@ -96,7 +94,7 @@
<p>Dubbo 中所有的配置项都可以配置在 Spring 配置文件中,并且可以针对单个服务配置。</p>
<p>如完全不配置则使用 Dubbo 缺省值,参见 <a
href="./references/xml/introduction.md">Dubbo配置参考手册</a> 中的说明。</p>
<h3>dubbo.properties 中属性名与 XML 的对应关系</h3>
-<ol start="0">
+<ol>
<li>
<p>应用名 <code>dubbo.application.name</code></p>
<pre><code class="language-xml"><span class="hljs-tag"><<span
class="hljs-name">dubbo:application</span> <span
class="hljs-attr">name</span>=<span class="hljs-string">"myalibaba"</span>
></span>
@@ -109,7 +107,7 @@
</li>
<li>
<p>调用超时 <code>dubbo.service.*.timeout</code></p>
-<p>可以在多个配置项设置超时 <code>timeout</code>,由上至下覆盖(即上面的优先)<sup
class="footnote-ref"><a href="#fn5"
id="fnref5">[5]</a></sup>,其它的参数(<code>retries</code>、<code>loadbalance</code>、<code>actives</code>等)的覆盖策略也一样示例如下:</p>
+<p>可以在多个配置项设置超时 <code>timeout</code>,由上至下覆盖(即上面的优先)<sup
class="footnote-ref"><a href="#fn5"
id="fnref5">[5]</a></sup>,其它的参数(<code>retries</code>、<code>loadbalance</code>、<code>actives</code>等)的覆盖策略与
<code>timeout</code> 相同。示例如下:</p>
<p>提供者端特定方法的配置</p>
<pre><code class="language-xml"><span class="hljs-tag"><<span
class="hljs-name">dubbo:service</span> <span
class="hljs-attr">interface</span>=<span
class="hljs-string">"com.alibaba.xxx.XxxService"</span> ></span>
<span class="hljs-tag"><<span class="hljs-name">dubbo:method</span>
<span class="hljs-attr">name</span>=<span
class="hljs-string">"findPerson"</span> <span
class="hljs-attr">timeout</span>=<span class="hljs-string">"1000"</span>
/></span>
@@ -130,7 +128,7 @@
</code></pre>
</li>
<li>
-<p>消费者启动时,没有提供者是否抛异常 Fast-Fail
<code>alibaba.intl.commons.dubbo.service.allow.no.provider</code></p>
+<p>消费者启动时,没有提供者是否抛异常
<code>alibaba.intl.commons.dubbo.service.allow.no.provider</code></p>
<pre><code class="language-xml"><span class="hljs-tag"><<span
class="hljs-name">dubbo:reference</span> <span
class="hljs-attr">interface</span>=<span
class="hljs-string">"com.alibaba.xxx.XxxService"</span> <span
class="hljs-attr">check</span>=<span class="hljs-string">"false"</span>
/></span>
</code></pre>
</li>
diff --git a/zh-cn/docs/user/recommend.json b/zh-cn/docs/user/recommend.json
index e9ff09f..34836a4 100644
--- a/zh-cn/docs/user/recommend.json
+++ b/zh-cn/docs/user/recommend.json
@@ -1,4 +1,7 @@
{
"filename": "recommend.md",
- "__html": "<h1>推荐用法</h1>\n<h2>在 Provider 上尽量多配置 Consumer
端属性</h2>\n<p>原因如下:</p>\n<ul>\n<li>作服务的提供者,比服务使用方更清楚服务性能参数,如调用的超时时间,合理的重试次数,等等</li>\n<li>在
Provider 配置后,Consumer 不配置则会使用 Provider 的配置值,即 Provider 配置可以作为 Consumer 的缺省值
<sup class=\"footnote-ref\"><a href=\"#fn1\"
id=\"fnref1\">[1]</a></sup>。否则,Consumer 会使用 Consumer 端的全局设置,这对于 Provider
不可控的,并且往往是不合理的</li>\n</ul>\n<p>Provider 上尽量多配置 Consumer 端的属性,让 Provider
实现者一开始就思考 Provider 服务特点、服务质量的问题。</p>\n<p>示例:</p>\n<pre><code class=\"language
[...]
+ "__html": "<h1>推荐用法</h1>\n<h2>在 Provider 上尽量多配置 Consumer
端属性</h2>\n<p>原因如下:</p>\n<ul>\n<li>作服务的提供者,比服务使用方更清楚服务性能参数,如调用的超时时间、合理的重试次数等</li>\n<li>在
Provider 配置后,Consumer 不配置则会使用 Provider 的配置值,即 Provider 配置可以作为 Consumer 的缺省值
<sup class=\"footnote-ref\"><a href=\"#fn1\"
id=\"fnref1\">[1]</a></sup>。否则,Consumer 会使用 Consumer 端的全局设置,这对于 Provider
是不可控的,并且往往是不合理的</li>\n</ul>\n<p>Provider 上尽量多配置 Consumer 端的属性,让 Provider
实现者一开始就思考 Provider 服务特点、服务质量等问题。</p>\n<p>示例:</p>\n<pre><code class=\"language-
[...]
+ "title": "推荐用法",
+ "keywords": "Provider 配置, 管理信息, 缓存, 监控",
+ "description": "Dubbo 推荐用法举例"
}
\ No newline at end of file
diff --git a/zh-cn/docs/user/rest.html b/zh-cn/docs/user/rest.html
index 5ec8b7f..fecad97 100644
--- a/zh-cn/docs/user/rest.html
+++ b/zh-cn/docs/user/rest.html
@@ -4,15 +4,15 @@
<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="rest" />
- <meta name="description" content="rest" />
+ <meta name="keywords" content="RESTful Remoting, REST" />
+ <meta name="description" content="在 Dubbo 中开发 REST 风格的远程调用" />
<!-- 网页标签标题 -->
- <title>rest</title>
+ <title>在 Dubbo 中开发 REST 风格的远程调用(RESTful Remoting)</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=""
data-reactid="1" data-react-checksum="-1112132361"><header
class="header-container header-container-normal" data-reactid="2"><div
class="header-body" data-reactid="3"><a href="/zh-cn/index.html"
data-reactid="4"><img class="logo" src="/img/dubbo_colorful.png"
data-reactid="5"/></a><div class="search search-normal" data-reactid="6"><span
class="icon-search" data-reactid="7"></span></div><span class="language-switch
language [...]
+ <div id="root"><div class="documentation-page" data-reactroot=""
data-reactid="1" data-react-checksum="16528759"><header class="header-container
header-container-normal" data-reactid="2"><div class="header-body"
data-reactid="3"><a href="/zh-cn/index.html" data-reactid="4"><img class="logo"
src="/img/dubbo_colorful.png" data-reactid="5"/></a><div class="search
search-normal" data-reactid="6"><span class="icon-search"
data-reactid="7"></span></div><span class="language-switch language-sw [...]
<p><strong>作者:沈理</strong></p>
<p><strong>文档版权:<a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
2.0许可证 署名-禁止演绎</a></strong></p>
<p>完善中……</p>
diff --git a/zh-cn/docs/user/rest.json b/zh-cn/docs/user/rest.json
index 1b8ed37..9801883 100644
--- a/zh-cn/docs/user/rest.json
+++ b/zh-cn/docs/user/rest.json
@@ -1,4 +1,7 @@
{
"filename": "rest.md",
- "__html": "<h1>在Dubbo中开发REST风格的远程调用(RESTful
Remoting)</h1>\n<p><strong>作者:沈理</strong></p>\n<p><strong>文档版权:<a
href=\"http://www.apache.org/licenses/LICENSE-2.0\">Apache 2.0许可证
署名-禁止演绎</a></strong></p>\n<p>完善中……</p>\n<blockquote>\n<p>本文篇幅较长,因为REST本身涉及面较多。另外,本文参照Spring等的文档风格,不仅仅局限于框架用法的阐述,同时也努力呈现框架的设计理念和优良应用的架构思想。</p>\n</blockquote>\n<blockquote>\n<p>对于想粗略了解dubbo和REST的人,只需浏览
<code>概述</code> 至 <code>标准Java REST API:JAX-RS简介</code>
几节即可。</p>\n</blockquote>\n<p>TODO 生成可点击的目录</p>\n<h2>目录</h2 [...]
+ "__html": "<h1>在 Dubbo 中开发 REST 风格的远程调用(RESTful
Remoting)</h1>\n<p><strong>作者:沈理</strong></p>\n<p><strong>文档版权:<a
href=\"http://www.apache.org/licenses/LICENSE-2.0\">Apache 2.0许可证
署名-禁止演绎</a></strong></p>\n<p>完善中……</p>\n<blockquote>\n<p>本文篇幅较长,因为REST本身涉及面较多。另外,本文参照Spring等的文档风格,不仅仅局限于框架用法的阐述,同时也努力呈现框架的设计理念和优良应用的架构思想。</p>\n</blockquote>\n<blockquote>\n<p>对于想粗略了解dubbo和REST的人,只需浏览
<code>概述</code> 至 <code>标准Java REST API:JAX-RS简介</code>
几节即可。</p>\n</blockquote>\n<p>TODO 生成可点击的目录</p>\n<h2>目录 [...]
+ "title": "在 Dubbo 中开发 REST 风格的远程调用(RESTful Remoting)",
+ "keywords": "RESTful Remoting, REST",
+ "description": "在 Dubbo 中开发 REST 风格的远程调用"
}
\ No newline at end of file