You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ni...@apache.org on 2017/12/12 09:17:58 UTC

[01/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Repository: incubator-servicecomb-website
Updated Branches:
  refs/heads/asf-site d18d3e627 -> dd9482e3c


http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/users/use-servicecomb-in-spring-boot/index.html
----------------------------------------------------------------------
diff --git a/content/users/use-servicecomb-in-spring-boot/index.html b/content/users/use-servicecomb-in-spring-boot/index.html
new file mode 100644
index 0000000..a75192a
--- /dev/null
+++ b/content/users/use-servicecomb-in-spring-boot/index.html
@@ -0,0 +1,940 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>在Spring Boot中使用ServiceComb - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="在Spring Boot中使用ServiceComb">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="在Spring Boot中使用ServiceComb">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/users/use-servicecomb-in-spring-boot/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/users/use-servicecomb-in-spring-boot/">
+
+
+
+  <meta property="og:description" content="在Spring Boot中使用ServiceComb">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="在Spring Boot中使用ServiceComb">
+  <meta name="twitter:description" content="在Spring Boot中使用ServiceComb">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/users/use-servicecomb-in-spring-boot/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">User Guide</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/" class="">Java Chassis Architecture</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/setup-environment/" class="">Setup Environment</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Provider</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-definition/" class="">Service Definition</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-contract/" class="">Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-springmvc/" class="">Develop Microservice with SpringMVC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-jax-rs/" class="">Develop Microservice with JAX-RS</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-transparent-rpc/" class="">Develop Microservice with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-interface-constraints/" class="">Service Interface Constraints</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-configurations/" class="">Service Configurations</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/communicate-protocol/" class="">Communicate Protocol</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/application-boot-process/" class="">Application Boot Up Process</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-heartbeat/" class="">Service Heartbeat</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Consumer</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rest-template/" class="">Develop with Rest Template</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rpc/" class="">Develop with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-service-contract/" class="">Use Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/invoke-control/" class="">Invoke Control</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">General Development</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/local-develop-test/" class="">Develop and Test in Local Environment</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-servicecomb-in-spring-boot/" class="active">Use ServiceComb in Spring Boot</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/distributed-tracing/" class="">Distributed Tracing</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/customized-tracing/" class="">Customized Tracing</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Edging Service</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/nginx/" class="">confd and Nginx</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/zuul/" class="">Zuul</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">Metrics</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Deployment</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/run-mode/" class="">Run Mode</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Security</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-tls/" class="">Use TLS</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="在Spring Boot中使用ServiceComb">
+    <meta itemprop="description" content="在Spring Boot中使用ServiceComb">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">在Spring Boot中使用ServiceComb
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> On This Page</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#使用service-center和治理中心管理spring-cloud应用" id="markdown-toc-使用service-center和治理中心管理spring-cloud应用">使用Service Center和治理中心管理Spring Cloud应用</a>    <ul>
+      <li><a href="#概念阐述" id="markdown-toc-概念阐述">概念阐述</a></li>
+      <li><a href="#场景描述" id="markdown-toc-场景描述">场景描述</a></li>
+      <li><a href="#配置说明" id="markdown-toc-配置说明">配置说明</a></li>
+    </ul>
+  </li>
+  <li><a href="#在servicecomb框架中集成spring-boot框架" id="markdown-toc-在servicecomb框架中集成spring-boot框架">在ServiceComb框架中集成Spring Boot框架</a>    <ul>
+      <li><a href="#概念阐述-1" id="markdown-toc-概念阐述-1">概念阐述</a></li>
+      <li><a href="#场景描述-1" id="markdown-toc-场景描述-1">场景描述</a></li>
+      <li><a href="#servicecomb集成springboot" id="markdown-toc-servicecomb集成springboot">ServiceComb集成SpringBoot</a></li>
+    </ul>
+  </li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="使用service-center和治理中心管理spring-cloud应用">使用Service Center和治理中心管理Spring Cloud应用</h2>
+<h3 id="概念阐述">概念阐述</h3>
+
+<p>本小节介绍在SpringCloud原生应用中,通过改变相关配置,让SpringCloud应用使用ServiceComb微服务框架中的Service Center和治理中心。</p>
+
+<h3 id="场景描述">场景描述</h3>
+
+<ul>
+  <li>
+    <p>SpringCloud应用默认情况下由Spring Cloud Eureka提供在分布式环境下的服务发现和服务注册的功能。</p>
+
+    <p><img src="/assets/images/manage_springcloud_application_using_sc_and_gs.png" alt="" /></p>
+  </li>
+  <li>
+    <p>ServiceComb微服务框架中的Service Center用于服务元数据以及服务实例元数据的管理和处理注册、发现,同时还支持以下功能:</p>
+  </li>
+</ul>
+
+<blockquote>
+  <ul>
+    <li>
+      <p>支持pull/push两种模式监控实例变化</p>
+    </li>
+    <li>
+      <p>实例动态扩容,海量的长连接或者短连接</p>
+    </li>
+    <li>
+      <p>支持灰度发布、服务分组等高级管理特性</p>
+    </li>
+  </ul>
+</blockquote>
+
+<p>使用SpringBoot/Cloud开发应用,并让服务运行于ServiceComb微服务SDK容器中,使用其高性能通信、服务治理、分布式事务管理等功能。</p>
+
+<h3 id="配置说明">配置说明</h3>
+
+<p>使用SpringBoot/Cloud开发应用,在原有应用的基础上按照以下步骤进行操作,即可对接ServiceComb的SDK各组件:</p>
+
+<ul>
+  <li>
+    <p><strong>步骤 1</strong> 在pom中添加依赖管理dependencyManagement:</p>
+
+    <div class="language-xml highlighter-rouge"><pre class="highlight"><code> <span class="nt">&lt;dependencyManagement&gt;</span>
+   <span class="nt">&lt;dependencies&gt;</span>
+     <span class="nt">&lt;dependency&gt;</span>
+       <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+       <span class="nt">&lt;artifactId&gt;</span>java-chassis-dependencies<span class="nt">&lt;/artifactId&gt;</span>
+       <span class="nt">&lt;version&gt;</span>0.1.0<span class="nt">&lt;/version&gt;</span>
+       <span class="nt">&lt;type&gt;</span>pom<span class="nt">&lt;/type&gt;</span>
+       <span class="nt">&lt;scope&gt;</span>import<span class="nt">&lt;/scope&gt;</span>
+     <span class="nt">&lt;/dependency&gt;</span>
+   <span class="nt">&lt;/dependencies&gt;</span>
+ <span class="nt">&lt;/dependencyManagement&gt;</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>步骤 2</strong> 在pom中添加依赖:</p>
+
+    <div class="language-xml highlighter-rouge"><pre class="highlight"><code> <span class="nt">&lt;dependency&gt;</span>
+   <span class="c">&lt;!--让服务运行于微服务sdk容器中--&gt;</span>
+   <span class="nt">&lt;group&gt;</span>io.servicecomb<span class="nt">&lt;/group&gt;</span>
+   <span class="nt">&lt;artifactId&gt;</span>spring-boot-starter-provider<span class="nt">&lt;/artifactId&gt;</span>
+ <span class="nt">&lt;/dependency&gt;</span>
+ <span class="nt">&lt;dependency&gt;</span>
+   <span class="c">&lt;!--使用服务中心--&gt;</span>
+   <span class="nt">&lt;group&gt;</span>io.servicecomb<span class="nt">&lt;/group&gt;</span>
+   <span class="nt">&lt;artifactId&gt;</span>spring-boot-starter-discovery<span class="nt">&lt;/artifactId&gt;</span>
+ <span class="nt">&lt;/dependency&gt;</span>
+ <span class="nt">&lt;dependency&gt;</span>
+   <span class="c">&lt;!--让服务运行于Spring boot embeded tomat中--&gt;</span>
+   <span class="nt">&lt;group&gt;</span>io.servicecomb<span class="nt">&lt;/group&gt;</span>
+   <span class="nt">&lt;artifactId&gt;</span>spring-boot-starter-transport<span class="nt">&lt;/artifactId&gt;</span>
+ <span class="nt">&lt;/dependency&gt;</span>
+ <span class="nt">&lt;dependency&gt;</span>
+   <span class="nt">&lt;groupId&gt;</span>org.springframework.boot<span class="nt">&lt;/groupId&gt;</span>
+   <span class="nt">&lt;artifactId&gt;</span>spring-boot-starter-web<span class="nt">&lt;/artifactId&gt;</span>
+ <span class="nt">&lt;/dependency&gt;&lt;dependency&gt;</span>
+   <span class="nt">&lt;groupId&gt;</span>org.springframework.boot<span class="nt">&lt;/groupId&gt;</span>
+   <span class="nt">&lt;artifactId&gt;</span>spring-boot-starter-actuator<span class="nt">&lt;/artifactId&gt;</span>
+ <span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>步骤 3</strong> 配置处理链和协议:</p>
+
+    <p>在resources目录下新建microservice.yaml文件,对服务进行定义,详细定义规则请参考<a href="/users/service-definition/">服务定义章节</a>,示例如下:</p>
+
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code> <span class="s">APPLICATION_ID</span><span class="pi">:</span> <span class="s">discoverytest</span>
+ <span class="s">service_description</span><span class="pi">:</span>
+   <span class="s">name</span><span class="pi">:</span> <span class="s">discoveryServer</span>
+   <span class="s">version</span><span class="pi">:</span> <span class="s">0.0.2</span>
+ <span class="s">cse</span><span class="pi">:</span>
+   <span class="s">service</span><span class="pi">:</span>
+     <span class="s">registry</span><span class="pi">:</span>
+       <span class="s">address</span><span class="pi">:</span>  <span class="s">http://127.0.0.1:30100</span> <span class="c1">#服务注册中心地址</span>
+   <span class="err"> </span><span class="s">rest</span><span class="pi">:</span>
+      <span class="s">address</span><span class="pi">:</span> <span class="s">0.0.0.0:8080</span> <span class="c1">#服务发布的端口</span>
+    <span class="s">handler</span><span class="pi">:</span>
+      <span class="s">chain</span><span class="pi">:</span>
+        <span class="s">Provider</span><span class="pi">:</span>
+          <span class="s">default</span><span class="pi">:</span> <span class="s">bizkeeper-provider</span> <span class="c1">#调用的处理链</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>步骤4</strong> 若要使用ServiceComb的服务中心:</p>
+
+    <p>在pom中添加依赖:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="o">&lt;</span><span class="n">dependency</span><span class="o">&gt;</span>
+   <span class="o">&lt;!--</span><span class="err">使用服务中心</span><span class="o">--&gt;</span>
+   <span class="o">&lt;</span><span class="n">group</span><span class="o">&gt;</span><span class="n">io</span><span class="o">.</span><span class="na">servicecomb</span><span class="o">&lt;/</span><span class="n">group</span><span class="o">&gt;</span>
+   <span class="o">&lt;</span><span class="n">artifactId</span><span class="o">&gt;</span><span class="n">spring</span><span class="o">-</span><span class="n">boot</span><span class="o">-</span><span class="n">starter</span><span class="o">-</span><span class="n">discovery</span><span class="o">&lt;/</span><span class="n">artifactId</span><span class="o">&gt;</span>
+ <span class="o">&lt;/</span><span class="n">dependency</span><span class="o">&gt;</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>步骤 5</strong> 在启动类添加注解@EnableServiceComb:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="nd">@EnableDiscoveryClient</span>
+ <span class="nd">@SpringBootApplication</span>
+ <span class="nd">@EnableServiceComb</span> <span class="c1">//新增注解</span>
+ <span class="kd">public</span> <span class="kd">class</span> <span class="nc">xxxServer</span> <span class="o">{</span>
+   <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
+     <span class="n">SpringApplication</span><span class="o">.</span><span class="na">run</span><span class="o">(</span><span class="n">xxxServer</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">args</span><span class="o">);</span>
+   <span class="o">}</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>步骤 6</strong> 定义服务契约,具体请参考<a href="/users/service-contract/">服务契约</a>,示例如下:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="c1">// ControllerImpl.class:</span>
+ <span class="nd">@RestSchema</span><span class="o">(</span><span class="n">schemaId</span> <span class="o">=</span> <span class="s">"test"</span><span class="o">)</span>
+ <span class="nd">@RequestMapping</span><span class="o">(</span><span class="n">path</span> <span class="o">=</span> <span class="s">"/compute"</span><span class="o">,</span> <span class="n">produces</span> <span class="o">=</span> <span class="n">MediaType</span><span class="o">.</span><span class="na">TEXT_PLAIN</span><span class="o">)</span>
+ <span class="kd">public</span> <span class="kd">class</span> <span class="nc">ControllerImpl</span> <span class="o">{</span>
+   <span class="nd">@ResponseBody</span>
+   <span class="nd">@RequestMapping</span><span class="o">(</span><span class="n">path</span> <span class="o">=</span> <span class="s">"/hello/{name}"</span><span class="o">,</span> <span class="n">method</span> <span class="o">=</span> <span class="n">RequestMethod</span><span class="o">.</span><span class="na">GET</span><span class="o">)</span>
+   <span class="kd">public</span> <span class="n">String</span> <span class="nf">add</span><span class="o">(</span><span class="nd">@PathVariable</span> <span class="n">String</span> <span class="n">name</span><span class="o">)</span> <span class="o">{</span>
+     <span class="k">return</span> <span class="s">"hello"</span> <span class="o">+</span> <span class="n">name</span><span class="o">;</span>
+   <span class="o">}</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>步骤 7</strong> 启动xxxServer,该服务便可注册到ServieComb的Service Center。</p>
+  </li>
+</ul>
+
+<h2 id="在servicecomb框架中集成spring-boot框架">在ServiceComb框架中集成Spring Boot框架</h2>
+<h3 id="概念阐述-1">概念阐述</h3>
+
+<p>本小节介绍了在ServiceComb框架中集成SpringBoot框架的好处和操作步骤。</p>
+
+<h3 id="场景描述-1">场景描述</h3>
+
+<h4 id="springboot框架"><strong>SpringBoot框架</strong></h4>
+
+<p>  Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。从最根本上来讲,Spring Boot就是一些库的集合,它能够被任意项目的构建系统所使用。Boot的功能是模块化的,通过导入Boot所谓的”starter”模块,可以将许多的依赖添加到工程中。</p>
+
+<h4 id="在servicecomb中集成springboot"><strong>在ServiceComb中集成SpringBoot</strong></h4>
+
+<p>  使用原生的ServiceComb框架开发微服务应用,如若需要使用ServiceComb框架提供的各项功能服务,需要在微服务项目工程pom文件中添加相应的依赖包,例如需要使用ServiceComb框架提供的负载均衡服务,需要添加handler-loadbalance包依赖。这样可以把ServiceComb提供的能力以starter的方式插入Spring Boot中,同时使用Spring Boot中提供的其他开箱即用的starter(例如SpringCloud)一起构建微服务。</p>
+
+<h3 id="servicecomb集成springboot">ServiceComb集成SpringBoot</h3>
+
+<p>  首先使用ServiceComb框架开发微服务应用,详细步骤请参考<a href="/users/service-definition/">开发服务提供者</a>与<a href="/users/develop-with-rest-template/">开发服务消费者</a>。然后在这个基础上集成SpringBoot框架。</p>
+
+<p>  在对应用进行SpringBoot框架适配前,请确保应用能够正常运行,并且能够从中央的maven库下载依赖的资源。</p>
+
+<ul>
+  <li>
+    <p><strong>步骤 1</strong> 在工程pom文件添加&lt;dependencyManagement&gt;节点:</p>
+
+    <div class="language-xml highlighter-rouge"><pre class="highlight"><code> <span class="nt">&lt;dependencyManagement&gt;</span> 
+   <span class="nt">&lt;dependencies&gt;</span> 
+     <span class="nt">&lt;dependency&gt;</span> 
+       <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+       <span class="nt">&lt;artifactId&gt;</span>java-chassis-dependencies<span class="nt">&lt;/artifactId&gt;</span>
+       <span class="nt">&lt;version&gt;</span>0.1.0<span class="nt">&lt;/version&gt;</span>
+       <span class="nt">&lt;type&gt;</span>pom<span class="nt">&lt;/type&gt;</span>
+       <span class="nt">&lt;scope&gt;</span>import<span class="nt">&lt;/scope&gt;</span>
+     <span class="nt">&lt;/dependency&gt;</span>
+   <span class="nt">&lt;/dependencies&gt;</span>
+ <span class="nt">&lt;/dependencyManagement&gt;</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>步骤 2</strong> 添加如下依赖:</p>
+
+    <p>引入ServiceComb提供的Spring Boot依赖</p>
+
+    <div class="language-xml highlighter-rouge"><pre class="highlight"><code> <span class="nt">&lt;dependency&gt;</span> 
+   <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+   <span class="nt">&lt;artifactId&gt;</span>spring-boot-starter-provider<span class="nt">&lt;/artifactId&gt;</span> 
+ <span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+    </div>
+
+    <p>引入Spring Boot依赖</p>
+
+    <div class="language-xml highlighter-rouge"><pre class="highlight"><code> <span class="nt">&lt;dependency&gt;</span> 
+   <span class="nt">&lt;groupId&gt;</span>org.springframework.boot<span class="nt">&lt;/groupId&gt;</span>
+   <span class="nt">&lt;artifactId&gt;</span>spring-boot-starter-web<span class="nt">&lt;/artifactId&gt;</span> 
+ <span class="nt">&lt;/dependency&gt;</span>
+ <span class="nt">&lt;dependency&gt;</span> 
+   <span class="nt">&lt;groupId&gt;</span>org.springframework.boot<span class="nt">&lt;/groupId&gt;</span>
+   <span class="nt">&lt;artifactId&gt;</span>spring-boot-starter-actuator<span class="nt">&lt;/artifactId&gt;</span> 
+ <span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>步骤 3</strong> 在resources目录下新建application.yml文件,文件内容如下:</p>
+
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code> <span class="s">server</span><span class="pi">:</span>
+   <span class="s">port</span><span class="pi">:</span> <span class="s">7999</span> <span class="c1">#此处的端口为springboot服务端口</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>步骤 4</strong> 为微服务启动类添加注解:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="kn">package</span> <span class="n">xxx</span>
+ <span class="kn">import</span> <span class="nn">xxx</span>
+ <span class="nd">@SpringBootApplication</span> <span class="c1">//新增注解</span>
+ <span class="nd">@EnableServiceComb</span> <span class="c1">//新增注解</span>
+ <span class="kd">public</span> <span class="kd">class</span> <span class="nc">xxxServer</span><span class="o">/</span><span class="n">Client</span> <span class="o">{</span>
+   <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="kd">final</span> <span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
+   <span class="err"> </span> <span class="n">Log4jUtils</span><span class="o">.</span><span class="na">init</span><span class="o">();</span>
+   <span class="err"> </span><span class="c1">//BeanUtils.init();</span>
+   <span class="err"> </span><span class="n">SpringApplication</span><span class="o">.</span><span class="na">run</span><span class="o">(</span><span class="n">xxxServerOrClient</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">args</span><span class="o">)</span>
+   <span class="o">}</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>步骤 5</strong> 运行/调试应用。</p>
+  </li>
+</ul>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/use-servicecomb-in-spring-boot.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/use-servicecomb-in-spring-boot.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>


[53/57] incubator-servicecomb-website git commit: typo fix

Posted by ni...@apache.org.
typo fix


Project: http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/commit/ac28d1c1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/tree/ac28d1c1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/diff/ac28d1c1

Branch: refs/heads/asf-site
Commit: ac28d1c1d0749a1cffeca5da01b0efc4882fb683
Parents: 434d794
Author: PhoenixLuo2 <49...@qq.com>
Authored: Mon Dec 11 15:01:13 2017 +0800
Committer: Willem Jiang <ji...@huawei.com>
Committed: Tue Dec 12 16:04:28 2017 +0800

----------------------------------------------------------------------
 _docs/flow-control.md                       | 2 +-
 _faqs/cn/faq.md                             | 6 +++---
 _pages/home.md                              | 2 +-
 _posts/cn/2017-06-24-go-to-cloud.md         | 2 +-
 _users/cn/communicate-protocol.md           | 2 +-
 _users/cn/develop-with-springmvc.md         | 2 +-
 _users/cn/service-configurations.md         | 2 +-
 _users/cn/use-servicecomb-in-spring-boot.md | 2 +-
 _users/cn/use-tls.md                        | 2 +-
 _users/communicate-protocol.md              | 2 +-
 _users/develop-with-springmvc.md            | 2 +-
 _users/service-configurations.md            | 2 +-
 _users/use-servicecomb-in-spring-boot.md    | 2 +-
 _users/use-tls.md                           | 2 +-
 14 files changed, 16 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/ac28d1c1/_docs/flow-control.md
----------------------------------------------------------------------
diff --git a/_docs/flow-control.md b/_docs/flow-control.md
index d3141ec..bbf0f83 100644
--- a/_docs/flow-control.md
+++ b/_docs/flow-control.md
@@ -8,7 +8,7 @@ last_modified_at: 2017-09-03T10:01:43-04:00
 ---
 
 {% include toc %}
-Flow control machanism controls the transmission speed to avoid microservices being overloaded. This guide shows how to use flow control with **ServiceComb** in the BMI application. 
+Flow control mechanism controls the transmission speed to avoid microservices being overloaded. This guide shows how to use flow control with **ServiceComb** in the BMI application. 
 
 ## Before you start
 

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/ac28d1c1/_faqs/cn/faq.md
----------------------------------------------------------------------
diff --git a/_faqs/cn/faq.md b/_faqs/cn/faq.md
index fcd923f..b5311fe 100755
--- a/_faqs/cn/faq.md
+++ b/_faqs/cn/faq.md
@@ -186,7 +186,7 @@ redirect_from:
            200:
              description: "response of 200"
              schema:
-               $ref: "#/definitions/ReponseImpl"
+               $ref: "#/definitions/ResponseImpl"
    ```
    
    如果客户端没有放置swagger,还会报告如下异常:
@@ -211,7 +211,7 @@ redirect_from:
            200:
              description: "response of 200"
              schema:
-               $ref: "#/definitions/ReponseImpl"
+               $ref: "#/definitions/ResponseImpl"
    ```
 
 * **Q: ServiceComb微服务框架服务调用是否使用长连接?**
@@ -437,7 +437,7 @@ redirect_from:
 
 * **Q: Transport是个什么概念?用来干什么的?**
 
-   A: transport负责编解码,以及传输。通信模型有rest和highway两种,highway对应的是私有协议,使用protobuf编码,rest用的是json。hightway和rest都是基于vertx做的,vertx是基于netty的。
+   A: transport负责编解码,以及传输。通信模型有rest和highway两种,highway对应的是私有协议,使用protobuf编码,rest用的是json。highway和rest都是基于vertx做的,vertx是基于netty的。
 
 * **Q: 框架中引入了vertx会有什么好处?**
 

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/ac28d1c1/_pages/home.md
----------------------------------------------------------------------
diff --git a/_pages/home.md b/_pages/home.md
index 90031c0..08091e9 100644
--- a/_pages/home.md
+++ b/_pages/home.md
@@ -33,7 +33,7 @@ feature_row:
     alt: "Standard"
     title: "Service Contract"
     url: /users/service-contract/
-    excerpt: "service contract gurantee based on [OpenAPI](https://www.openapis.org)"
+    excerpt: "service contract guarantee based on [OpenAPI](https://www.openapis.org)"
   - image_path: /assets/images/servicecomb-feature-quickstart.png
     alt: "Efficient"
     title: "Rapid Development"

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/ac28d1c1/_posts/cn/2017-06-24-go-to-cloud.md
----------------------------------------------------------------------
diff --git a/_posts/cn/2017-06-24-go-to-cloud.md b/_posts/cn/2017-06-24-go-to-cloud.md
index c4f2a44..27a39bc 100644
--- a/_posts/cn/2017-06-24-go-to-cloud.md
+++ b/_posts/cn/2017-06-24-go-to-cloud.md
@@ -117,7 +117,7 @@ Import - - Maven:Existing Maven Projects,选择代码所在的目录,点击f
 该缺少的jar包为商业版本特性,请联系华为公有云 Service Stage 团队获取(此jar上云必选,否则无法使用Service Stage service centerc/config center/调用链等特性;本地调试时huawei商业版本的几个包依赖可以去掉,可以实现本地的服务发现和注册)。  
 如果需要将jar包复制到maven本地仓库中,具体包列表如下:  
 ![jar-list]({{ site.url }}{{ site.baseurl }}/assets/images/jar-list.png){: .align-center}  
-eclispe中更新工程:Maven - - Update Project…
+eclipse中更新工程:Maven - - Update Project…
 
 ###	修改微服务描述文件
 

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/ac28d1c1/_users/cn/communicate-protocol.md
----------------------------------------------------------------------
diff --git a/_users/cn/communicate-protocol.md b/_users/cn/communicate-protocol.md
index 22c54ee..b0be20f 100644
--- a/_users/cn/communicate-protocol.md
+++ b/_users/cn/communicate-protocol.md
@@ -30,7 +30,7 @@ ServiceComb实现了两种网络通道,包括REST和Highway,均支持TLS加
 
 ### 完整线程
 
-ServicecComb微服务的完整线程模型如下图所示:
+ServiceComb微服务的完整线程模型如下图所示:
 
 ![](/assets/images/thread-model.png)
 

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/ac28d1c1/_users/cn/develop-with-springmvc.md
----------------------------------------------------------------------
diff --git a/_users/cn/develop-with-springmvc.md b/_users/cn/develop-with-springmvc.md
index d00e4fa..572b541 100644
--- a/_users/cn/develop-with-springmvc.md
+++ b/_users/cn/develop-with-springmvc.md
@@ -82,7 +82,7 @@ ServiceComb支持SpringMVC注解,允许使用SpringMVC风格开发微服务。
           xsi:schemaLocation="http://www.springframework.org/schema/beans classpath:org/springframework/beans/factory/xml/spring-beans-3.0.xsd
           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    
-       <context:component-scan base-package="io.servicecomb.samples.springmvc.povider"/>
+       <context:component-scan base-package="io.servicecomb.samples.springmvc.provider"/>
    </beans>
    ```
 

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/ac28d1c1/_users/cn/service-configurations.md
----------------------------------------------------------------------
diff --git a/_users/cn/service-configurations.md b/_users/cn/service-configurations.md
index b8a7d44..66e64bb 100644
--- a/_users/cn/service-configurations.md
+++ b/_users/cn/service-configurations.md
@@ -17,7 +17,7 @@ redirect_from:
 
 ### 配置说明
 
-  负载均衡策略在mocroservice.yaml文件中配置,配置项为`cse.loadbalance.[MicroServiceName].[property name]`,其中若省略MicroServiceName,则为全局配置;若指定MicroServiceName,则为针对特定微服务的配置。
+  负载均衡策略在microservice.yaml文件中配置,配置项为`cse.loadbalance.[MicroServiceName].[property name]`,其中若省略MicroServiceName,则为全局配置;若指定MicroServiceName,则为针对特定微服务的配置。
 
   **表1 配置项说明**
 

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/ac28d1c1/_users/cn/use-servicecomb-in-spring-boot.md
----------------------------------------------------------------------
diff --git a/_users/cn/use-servicecomb-in-spring-boot.md b/_users/cn/use-servicecomb-in-spring-boot.md
index e622e92..dd1789a 100644
--- a/_users/cn/use-servicecomb-in-spring-boot.md
+++ b/_users/cn/use-servicecomb-in-spring-boot.md
@@ -139,7 +139,7 @@ redirect_from:
    }
    ```
 
-* **步骤 7** 启动xxxServer,该服务便可注册到ServieComb的Service Center。
+* **步骤 7** 启动xxxServer,该服务便可注册到ServiceComb的Service Center。
 
 
 ## 在ServiceComb框架中集成Spring Boot框架

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/ac28d1c1/_users/cn/use-tls.md
----------------------------------------------------------------------
diff --git a/_users/cn/use-tls.md b/_users/cn/use-tls.md
index bad36e6..f7d9b04 100644
--- a/_users/cn/use-tls.md
+++ b/_users/cn/use-tls.md
@@ -55,7 +55,7 @@ ssl.[tag].[property]
 | ssl.protocols | TLSv1.2 | - | 否 | 协议列表 | 使用逗号分隔 |
 | ssl.ciphers | TLS\_ECDHE\_RSA\_WITH\_AES\_256\_GCM\_SHA384,<br/>TLS\_RSA\_WITH\_AES\_256\_GCM\_SHA384,<br/>TLS\_ECDHE\_RSA\_WITH\_AES\_128\_GCM\_SHA256,<br/>TLS\_RSA\_WITH\_AES\_128\_GCM\_SHA256 | - | 否 | 算法列表 | 使用逗号分隔 |
 | ssl.authPeer | true | - | 否 | 是否认证对端 | - |
-| ssl.checkCN.host | true | - | 否 | 是否对证书的CN进行检查 | 该配置项只对Consumer端,并且使用http协议有效,即Consumser端使用rest通道有效。对于Provider端、highway通道等无效。检查CN的目的是防止服务器被钓鱼,参考标准定义:[https://tools.ietf.org/html/rfc2818。](https://tools.ietf.org/html/rfc2818。) |
+| ssl.checkCN.host | true | - | 否 | 是否对证书的CN进行检查 | 该配置项只对Consumer端,并且使用http协议有效,即Consumer端使用rest通道有效。对于Provider端、highway通道等无效。检查CN的目的是防止服务器被钓鱼,参考标准定义:[https://tools.ietf.org/html/rfc2818。](https://tools.ietf.org/html/rfc2818。) |
 | ssl.trustStore | trust.jks | - | 否 | 信任证书文件 | - |
 | ssl.trustStoreType | JKS | - | 否 | 信任证书类型 | - |
 | ssl.trustStoreValue | - | - | 否 | 信任证书密码 | - |

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/ac28d1c1/_users/communicate-protocol.md
----------------------------------------------------------------------
diff --git a/_users/communicate-protocol.md b/_users/communicate-protocol.md
index a8b04ea..136f882 100644
--- a/_users/communicate-protocol.md
+++ b/_users/communicate-protocol.md
@@ -30,7 +30,7 @@ ServiceComb实现了两种网络通道,包括REST和Highway,均支持TLS加
 
 ### 完整线程
 
-ServicecComb微服务的完整线程模型如下图所示:
+ServiceComb微服务的完整线程模型如下图所示:
 
 ![](/assets/images/thread-model.png)
 

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/ac28d1c1/_users/develop-with-springmvc.md
----------------------------------------------------------------------
diff --git a/_users/develop-with-springmvc.md b/_users/develop-with-springmvc.md
index 3969fac..7559aa7 100644
--- a/_users/develop-with-springmvc.md
+++ b/_users/develop-with-springmvc.md
@@ -82,7 +82,7 @@ ServiceComb支持SpringMVC注解,允许使用SpringMVC风格开发微服务。
           xsi:schemaLocation="http://www.springframework.org/schema/beans classpath:org/springframework/beans/factory/xml/spring-beans-3.0.xsd
           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    
-       <context:component-scan base-package="io.servicecomb.samples.springmvc.povider"/>
+       <context:component-scan base-package="io.servicecomb.samples.springmvc.provider"/>
    </beans>
    ```
 

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/ac28d1c1/_users/service-configurations.md
----------------------------------------------------------------------
diff --git a/_users/service-configurations.md b/_users/service-configurations.md
index 1fd9b98..aafdbde 100644
--- a/_users/service-configurations.md
+++ b/_users/service-configurations.md
@@ -17,7 +17,7 @@ redirect_from:
 
 ### 配置说明
 
-  负载均衡策略在mocroservice.yaml文件中配置,配置项为`cse.loadbalance.[MicroServiceName].[property name]`,其中若省略MicroServiceName,则为全局配置;若指定MicroServiceName,则为针对特定微服务的配置。
+  负载均衡策略在microservice.yaml文件中配置,配置项为`cse.loadbalance.[MicroServiceName].[property name]`,其中若省略MicroServiceName,则为全局配置;若指定MicroServiceName,则为针对特定微服务的配置。
 
   **表1 配置项说明**
 

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/ac28d1c1/_users/use-servicecomb-in-spring-boot.md
----------------------------------------------------------------------
diff --git a/_users/use-servicecomb-in-spring-boot.md b/_users/use-servicecomb-in-spring-boot.md
index 8aafe64..73d2b21 100644
--- a/_users/use-servicecomb-in-spring-boot.md
+++ b/_users/use-servicecomb-in-spring-boot.md
@@ -139,7 +139,7 @@ redirect_from:
    }
    ```
 
-* **步骤 7** 启动xxxServer,该服务便可注册到ServieComb的Service Center。
+* **步骤 7** 启动xxxServer,该服务便可注册到ServiceComb的Service Center。
 
 
 ## 在ServiceComb框架中集成Spring Boot框架

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/ac28d1c1/_users/use-tls.md
----------------------------------------------------------------------
diff --git a/_users/use-tls.md b/_users/use-tls.md
index 61c01a9..5d5857b 100644
--- a/_users/use-tls.md
+++ b/_users/use-tls.md
@@ -55,7 +55,7 @@ ssl.[tag].[property]
 | ssl.protocols | TLSv1.2 | - | 否 | 协议列表 | 使用逗号分隔 |
 | ssl.ciphers | TLS\_ECDHE\_RSA\_WITH\_AES\_256\_GCM\_SHA384,<br/>TLS\_RSA\_WITH\_AES\_256\_GCM\_SHA384,<br/>TLS\_ECDHE\_RSA\_WITH\_AES\_128\_GCM\_SHA256,<br/>TLS\_RSA\_WITH\_AES\_128\_GCM\_SHA256 | - | 否 | 算法列表 | 使用逗号分隔 |
 | ssl.authPeer | true | - | 否 | 是否认证对端 | - |
-| ssl.checkCN.host | true | - | 否 | 是否对证书的CN进行检查 | 该配置项只对Consumer端,并且使用http协议有效,即Consumser端使用rest通道有效。对于Provider端、highway通道等无效。检查CN的目的是防止服务器被钓鱼,参考标准定义:[https://tools.ietf.org/html/rfc2818。](https://tools.ietf.org/html/rfc2818。) |
+| ssl.checkCN.host | true | - | 否 | 是否对证书的CN进行检查 | 该配置项只对Consumer端,并且使用http协议有效,即Consumer端使用rest通道有效。对于Provider端、highway通道等无效。检查CN的目的是防止服务器被钓鱼,参考标准定义:[https://tools.ietf.org/html/rfc2818。](https://tools.ietf.org/html/rfc2818。) |
 | ssl.trustStore | trust.jks | - | 否 | 信任证书文件 | - |
 | ssl.trustStoreType | JKS | - | 否 | 信任证书类型 | - |
 | ssl.trustStoreValue | - | - | 否 | 信任证书密码 | - |


[09/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/index.html
----------------------------------------------------------------------
diff --git a/content/index.html b/content/index.html
new file mode 100644
index 0000000..50613e4
--- /dev/null
+++ b/content/index.html
@@ -0,0 +1,478 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="ServiceComb is a microservice framework with full functionality of service management, focus on rapidly development of microservices.Latest release: Java SDK v0.5.0 Service Center v0.5.0 Saga v0.0.2 ">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="Apache incubator ServiceComb">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/">
+
+
+
+  <meta property="og:description" content="ServiceComb is a microservice framework with full functionality of service management, focus on rapidly development of microservices.Latest release: Java SDK v0.5.0 Service Center v0.5.0 Saga v0.0.2 ">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="Apache incubator ServiceComb">
+  <meta name="twitter:description" content="ServiceComb is a microservice framework with full functionality of service management, focus on rapidly development of microservices.Latest release: Java SDK v0.5.0 Service Center v0.5.0 Saga v0.0.2 ">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+  <meta property="og:image" content="/assets/images/servicecomb-banner-s.png">
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--splash">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+  
+
+
+
+
+
+
+
+<div class="page__hero--overlay"
+  style=" background-image: url('/assets/images/servicecomb-banner-s.png');"
+>
+  
+    <div class="wrapper">
+      <h1 class="page__title" itemprop="headline">
+        
+          Apache incubator ServiceComb
+
+        
+      </h1>
+      
+        <p class="page__lead">ServiceComb is a microservice framework with full functionality of service management, focus on rapidly development of microservices.
+<div class="excerpt-label">Latest release:</div>
+<div class="button-group"> <a href="https://github.com/ServiceComb/java-chassis/releases/tag/0.5.0" class="home-button btn--info">Java SDK v0.5.0</a> <a href="https://github.com/ServiceComb/service-center/releases/tag/0.5.0" class="home-button btn--info">Service Center v0.5.0</a> <a href="https://github.com/ServiceComb/ServiceComb-Saga/releases/tag/saga-0.0.2" class="home-button btn--info">Saga v0.0.2</a> </div>
+</p>
+      
+      
+      
+    </div>
+  
+  
+</div>
+
+
+
+<div role="main" class="home-page">
+  <article class="splash" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <meta itemprop="description" content="ServiceComb is a microservice framework with full functionality of service management, focus on rapidly development of microservices.Latest release: Java SDK v0.5.0 Service Center v0.5.0 Saga v0.0.2 ">
+    
+    
+
+    <section class="page__content" itemprop="text">
+      
+<div class="feature__wrapper">
+
+  
+
+    
+
+    <div class="feature__item--center">
+      <div class="archive__item">
+        
+
+        <div class="archive__item-body">
+          
+
+          
+            <div class="archive__item-excerpt">
+              <div class="excerpt-title">Latest News</div>
+<ul> <li> <a href="/docs/quick-start-dataconsistency/">ServiceComb now provides data consistency solutions(Saga) in microservice application.</a> </li> <li class="line-end"> <a href="/docs/linuxcon-workshop-demo/">In the recent LinuxCon Beijing 2017 conference, ServiceComb organized a workshop to demonstrate how to build a cloud application using ServiceComb.</a> </li> </ul>
+
+            </div>
+          
+        </div>
+      </div>
+    </div>
+  
+
+</div>
+
+<div class="normal-feature-row">
+
+
+<div class="feature__wrapper">
+
+  
+
+    
+
+    <div class="feature__item">
+      <div class="archive__item">
+        
+          <div class="archive__item-teaser">
+            <a href="/users/service-contract/">
+            <img src="/assets/images/servicecomb-feature-openapi.png" alt="Standard" />
+            </a>
+          </div>
+        
+
+        <div class="archive__item-body">
+          
+            <a class="archive__item-title" href="/users/service-contract/">Service Contract</a>
+          
+
+          
+            <div class="archive__item-excerpt">
+              <p>service contract gurantee based on <a href="https://www.openapis.org">OpenAPI</a></p>
+
+            </div>
+          
+        </div>
+      </div>
+    </div>
+  
+
+    
+
+    <div class="feature__item">
+      <div class="archive__item">
+        
+          <div class="archive__item-teaser">
+            <a href="/docs/quick-start/">
+            <img src="/assets/images/servicecomb-feature-quickstart.png" alt="Efficient" />
+            </a>
+          </div>
+        
+
+        <div class="archive__item-body">
+          
+            <a class="archive__item-title" href="/docs/quick-start/">Rapid Development</a>
+          
+
+          
+            <div class="archive__item-excerpt">
+              <p>supports many service frameworks, speed up building of cloud applications</p>
+
+            </div>
+          
+        </div>
+      </div>
+    </div>
+  
+
+    
+
+    <div class="feature__item">
+      <div class="archive__item">
+        
+          <div class="archive__item-teaser">
+            
+            <img src="/assets/images/servicecomb-feature-multiLanguage.png" alt="MultiLanguage" />
+            
+          </div>
+        
+
+        <div class="archive__item-body">
+          
+            <a class="archive__item-title">Multiple Languages</a>
+          
+
+          
+            <div class="archive__item-excerpt">
+              <p>supports both Java and Go</p>
+
+            </div>
+          
+        </div>
+      </div>
+    </div>
+  
+
+</div>
+</div>
+
+    </section>
+  </article>
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _pages/home.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_pages/home.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/robots.txt
----------------------------------------------------------------------
diff --git a/content/robots.txt b/content/robots.txt
new file mode 100644
index 0000000..e087884
--- /dev/null
+++ b/content/robots.txt
@@ -0,0 +1 @@
+Sitemap: /sitemap.xml

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/sitemap.xml
----------------------------------------------------------------------
diff --git a/content/sitemap.xml b/content/sitemap.xml
new file mode 100644
index 0000000..13a30a1
--- /dev/null
+++ b/content/sitemap.xml
@@ -0,0 +1,508 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
+<url>
+<loc>/docs/linuxcon-workshop-demo/</loc>
+<lastmod>2017-06-15T09:38:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/docs/linuxcon-workshop-demo/</loc>
+<lastmod>2017-06-15T09:38:43+08:00</lastmod>
+</url>
+<url>
+<loc>/docs/go-to-cloud/</loc>
+<lastmod>2017-06-24T11:40:00+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/docs/go-to-cloud/</loc>
+<lastmod>2017-06-24T11:40:00+08:00</lastmod>
+</url>
+<url>
+<loc>/docs/tracing-with-servicecomb/</loc>
+<lastmod>2017-07-17T09:18:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/docs/tracing-with-servicecomb/</loc>
+<lastmod>2017-07-17T09:18:43+08:00</lastmod>
+</url>
+<url>
+<loc>/docs/communication-btw-sc-ms/</loc>
+<lastmod>2017-08-09T09:18:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/docs/communication-btw-sc-ms/</loc>
+<lastmod>2017-08-09T09:18:43+08:00</lastmod>
+</url>
+<url>
+<loc>/docs/company-on-kubernetes/</loc>
+<lastmod>2017-08-21T00:00:00+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/docs/company-on-kubernetes/</loc>
+<lastmod>2017-08-21T00:00:00+08:00</lastmod>
+</url>
+<url>
+<loc>/docs/autoscale-on-company/</loc>
+<lastmod>2017-08-24T00:00:00+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/docs/autoscale-on-company/</loc>
+<lastmod>2017-08-24T00:00:00+08:00</lastmod>
+</url>
+<url>
+<loc>/docs/stress-test-on-company-with-jmeter-in-k8s/</loc>
+<lastmod>2017-08-25T09:18:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/docs/stress-test-on-company-with-jmeter-in-k8s/</loc>
+<lastmod>2017-08-26T09:18:43+08:00</lastmod>
+</url>
+<url>
+<loc>/docs/seckill-development-journey-part-I/</loc>
+<lastmod>2017-09-13T09:00:00+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/docs/seckill-development-journey-part-I/</loc>
+<lastmod>2017-09-13T09:00:00+08:00</lastmod>
+</url>
+<url>
+<loc>/docs/seckill-development-journey-part-II/</loc>
+<lastmod>2017-09-13T09:00:00+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/docs/seckill-development-journey-part-II/</loc>
+<lastmod>2017-09-13T09:00:00+08:00</lastmod>
+</url>
+<url>
+<loc>/docs/seckill-development-journey-part-III/</loc>
+<lastmod>2017-09-13T09:00:00+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/docs/seckill-development-journey-part-III/</loc>
+<lastmod>2017-09-13T09:00:00+08:00</lastmod>
+</url>
+<url>
+<loc>/docs/distributed_saga_1/</loc>
+<lastmod>2017-09-13T18:33:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/docs/distributed_saga_1/</loc>
+<lastmod>2017-09-13T18:33:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/docs/maven_dependency_management/</loc>
+<lastmod>2017-09-14T20:33:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/docs/performance-test-on-seckill-with-jmeter/</loc>
+<lastmod>2017-09-15T09:00:00+08:00</lastmod>
+</url>
+<url>
+<loc>/docs/distributed_saga_2/</loc>
+<lastmod>2017-09-16T16:05:00+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/docs/distributed_saga_2/</loc>
+<lastmod>2017-09-16T19:05:00+08:00</lastmod>
+</url>
+<url>
+<loc>/docs/distributed_saga_3/</loc>
+<lastmod>2017-09-18T15:22:00+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/docs/distributed_saga_3/</loc>
+<lastmod>2017-09-18T15:22:00+08:00</lastmod>
+</url>
+<url>
+<loc>/docs/how-to-reform-a-legacy-system/</loc>
+<lastmod>2017-10-23T15:22:00+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/docs/how-to-reform-a-legacy-system/</loc>
+<lastmod>2017-10-23T15:22:00+08:00</lastmod>
+</url>
+<url>
+<loc>/docs/service-center-ui/</loc>
+<lastmod>2017-10-30T09:18:43+08:00</lastmod>
+</url>
+<url>
+<loc>/docs/service-center-ui/</loc>
+<lastmod>2017-10-30T09:18:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/docs/jira_beginner_guide/</loc>
+<lastmod>2017-11-16T11:43:00+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/users/metrics/</loc>
+<lastmod>2017-11-29T22:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/users/metrics/</loc>
+<lastmod>2017-11-29T22:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/slides/</loc>
+</url>
+<url>
+<loc>/slides/</loc>
+</url>
+<url>
+<loc>/users/application-boot-process/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/users/application-boot-process/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/users/communicate-protocol/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/users/communicate-protocol/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/users/customized-tracing/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/users/customized-tracing/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/users/service-contract/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/users/service-contract/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/users/run-mode/</loc>
+<lastmod>2017-06-06T22:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/users/run-mode/</loc>
+<lastmod>2017-06-06T22:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/users/develop-with-jax-rs/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/users/develop-with-jax-rs/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/users/develop-with-rest-template/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/users/develop-with-rest-template/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/users/develop-with-rpc/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/users/develop-with-rpc/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/users/develop-with-springmvc/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/users/develop-with-springmvc/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/users/develop-with-transparent-rpc/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/users/develop-with-transparent-rpc/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/developers/</loc>
+<lastmod>2017-06-24T19:18:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/developers/</loc>
+<lastmod>2017-06-24T19:18:43+08:00</lastmod>
+</url>
+<url>
+<loc>/users/distributed-tracing/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/users/distributed-tracing/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/docs/quick-start-advance/distributed-tracing/</loc>
+<lastmod>2017-09-03T22:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/docs/quick-start-advance/distributed-tracing/</loc>
+<lastmod>2017-09-03T22:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/users/faq/</loc>
+<lastmod>2017-06-06T22:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/faqs/</loc>
+<lastmod>2017-10-30T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/faqs/</loc>
+<lastmod>2017-10-29T22:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/docs/quick-start-advance/flow-control/</loc>
+<lastmod>2017-09-03T22:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/docs/quick-start-advance/flow-control/</loc>
+<lastmod>2017-09-03T22:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/</loc>
+</url>
+<url>
+<loc>/cn/</loc>
+</url>
+<url>
+<loc>/users/huawei-cloud-faq/</loc>
+<lastmod>2017-06-06T22:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/faqs/faqs-huawei-cloud/</loc>
+<lastmod>2017-10-29T22:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/faqs/faqs-huawei-cloud/</loc>
+<lastmod>2017-10-30T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/users/invoke-control/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/users/invoke-control/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/about/language</loc>
+<lastmod>2017-06-07T14:28:13+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/docs/quick-start-advance/load-balance/</loc>
+<lastmod>2017-09-03T22:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/docs/quick-start-advance/load-balance/</loc>
+<lastmod>2017-09-03T22:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/users/local-develop-test/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/users/local-develop-test/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/users/edging-service/nginx/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/users/edging-service/nginx/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/docs/quick-start-advance/</loc>
+<lastmod>2017-09-03T22:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/docs/quick-start-advance/</loc>
+<lastmod>2017-09-03T22:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/docs/quick-start-bmi/</loc>
+<lastmod>2017-09-06T08:50:00+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/docs/quick-start-bmi/</loc>
+<lastmod>2017-09-04T22:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/docs/quick-start-dataconsistency/</loc>
+<lastmod>2017-09-19T23:50:10+08:00</lastmod>
+</url>
+<url>
+<loc>/docs/quick-start-dataconsistency/</loc>
+<lastmod>2017-09-03T22:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/docs/quick-start/</loc>
+<lastmod>2017-09-03T22:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/docs/quick-start/</loc>
+<lastmod>2017-09-06T08:50:43+08:00</lastmod>
+</url>
+<url>
+<loc>/users/service-configurations/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/users/service-configurations/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/users/service-definition/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/users/service-definition/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/users/service-heartbeat/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/users/service-heartbeat/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/users/service-interface-constraints/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/users/service-interface-constraints/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/docs/quick-start-advance/service-management/</loc>
+<lastmod>2017-09-03T22:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/docs/quick-start-advance/service-management/</loc>
+<lastmod>2017-09-03T22:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/users/</loc>
+<lastmod>2017-06-14T22:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/users/</loc>
+<lastmod>2017-06-14T22:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/developers/setup-develop-environment/</loc>
+<lastmod>2017-06-24T18:48:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/developers/setup-develop-environment/</loc>
+<lastmod>2017-06-24T18:48:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/users/setup-environment/</loc>
+<lastmod>2017-09-03T22:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/users/setup-environment/</loc>
+<lastmod>2017-09-03T22:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/sitemap/</loc>
+</url>
+<url>
+<loc>/developers/submit-codes/</loc>
+<lastmod>2017-09-10T01:12:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/developers/submit-codes/</loc>
+<lastmod>2017-09-10T01:12:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/users/use-service-contract/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/users/use-service-contract/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/users/use-servicecomb-in-spring-boot/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/users/use-servicecomb-in-spring-boot/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/users/use-tls/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/users/use-tls/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/year-archive/</loc>
+</url>
+<url>
+<loc>/cn/year-archive/</loc>
+</url>
+<url>
+<loc>/users/edging-service/zuul/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/cn/users/edging-service/zuul/</loc>
+<lastmod>2017-08-16T03:01:43+08:00</lastmod>
+</url>
+<url>
+<loc>/assets/slides/20170619/LinuxCon-Workshop-company.pdf</loc>
+<lastmod>2017-06-20T14:33:50+08:00</lastmod>
+</url>
+<url>
+<loc>/assets/slides/20170619/MSAPrinciple&EcoSystem.pdf</loc>
+<lastmod>2017-06-20T14:33:50+08:00</lastmod>
+</url>
+<url>
+<loc>/assets/slides/20170619/ServiceCombIntroduction.pdf</loc>
+<lastmod>2017-06-20T14:33:51+08:00</lastmod>
+</url>
+<url>
+<loc>/assets/slides/20170619/ServiceCombRoadMap.pdf</loc>
+<lastmod>2017-06-20T14:33:51+08:00</lastmod>
+</url>
+<url>
+<loc>/assets/slides/20171026/ServiceCombIntroduce1026.pdf</loc>
+<lastmod>2017-10-31T19:44:33+08:00</lastmod>
+</url>
+<url>
+<loc>/assets/slides/20171102/ServiceComb_PastAndPresent.pdf</loc>
+<lastmod>2017-12-10T20:49:56+08:00</lastmod>
+</url>
+<url>
+<loc>/assets/slides/20171109/MicroservicePracticeOfHuaweiConsumerCloudBasedOnServiceComb.pdf</loc>
+<lastmod>2017-12-10T20:49:56+08:00</lastmod>
+</url>
+<url>
+<loc>/assets/slides/20171207/Uncover_ServiceComb_Design.pdf</loc>
+<lastmod>2017-12-10T20:49:56+08:00</lastmod>
+</url>
+<url>
+<loc>/assets/slides/20171209/PracticeOfServiceMeshOnHuaweiPublicCloud.pdf</loc>
+<lastmod>2017-12-10T20:49:56+08:00</lastmod>
+</url>
+</urlset>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/sitemap/index.html
----------------------------------------------------------------------
diff --git a/content/sitemap/index.html b/content/sitemap/index.html
new file mode 100644
index 0000000..a369cab
--- /dev/null
+++ b/content/sitemap/index.html
@@ -0,0 +1,435 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>Sitemap - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="The homepage of ServiceComb">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="Sitemap">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/sitemap/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/sitemap/">
+
+
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="Sitemap">
+  <meta name="twitter:description" content="The homepage of ServiceComb">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--archive">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/sitemap/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <div class="archive">
+    
+      <h1 class="page__title" itemprop="headline">Sitemap</h1>
+    
+    <p>A list of all the posts and pages found on the site. For you robots out there is an <a href="/sitemap.xml">XML version</a> available for digesting as well.</p>
+
+<h2>Pages</h2>
+
+<link rel="alternate" hreflang="en" href="/sitemap/" />
+
+<div class="list__item">
+  <article class="archive__item" itemscope="" itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="" rel="permalink"></a>
+      
+    </h2>
+    
+    
+  </article>
+</div>
+
+<h2>Posts</h2>
+
+<link rel="alternate" hreflang="en" href="/docs/linuxcon-workshop-demo/" />
+
+<link rel="alternate" hreflang="cn" href="/cn/docs/linuxcon-workshop-demo/" />
+
+<link rel="alternate" hreflang="en" href="/docs/go-to-cloud/" />
+
+<link rel="alternate" hreflang="cn" href="/cn/docs/go-to-cloud/" />
+
+<link rel="alternate" hreflang="en" href="/docs/tracing-with-servicecomb/" />
+
+<link rel="alternate" hreflang="cn" href="/cn/docs/tracing-with-servicecomb/" />
+
+<link rel="alternate" hreflang="en" href="/docs/communication-btw-sc-ms/" />
+
+<link rel="alternate" hreflang="cn" href="/cn/docs/communication-btw-sc-ms/" />
+
+<link rel="alternate" hreflang="en" href="/docs/company-on-kubernetes/" />
+
+<link rel="alternate" hreflang="cn" href="/cn/docs/company-on-kubernetes/" />
+
+<link rel="alternate" hreflang="en" href="/docs/autoscale-on-company/" />
+
+<link rel="alternate" hreflang="cn" href="/cn/docs/autoscale-on-company/" />
+
+<link rel="alternate" hreflang="en" href="/docs/stress-test-on-company-with-jmeter-in-k8s/" />
+
+<link rel="alternate" hreflang="cn" href="/cn/docs/stress-test-on-company-with-jmeter-in-k8s/" />
+
+<link rel="alternate" hreflang="en" href="/docs/seckill-development-journey-part-I/" />
+
+<link rel="alternate" hreflang="cn" href="/cn/docs/seckill-development-journey-part-I/" />
+
+<link rel="alternate" hreflang="en" href="/docs/seckill-development-journey-part-II/" />
+
+<link rel="alternate" hreflang="cn" href="/cn/docs/seckill-development-journey-part-II/" />
+
+<link rel="alternate" hreflang="en" href="/docs/seckill-development-journey-part-III/" />
+
+<link rel="alternate" hreflang="cn" href="/cn/docs/seckill-development-journey-part-III/" />
+
+<link rel="alternate" hreflang="en" href="/docs/distributed_saga_1/" />
+
+<link rel="alternate" hreflang="cn" href="/cn/docs/distributed_saga_1/" />
+
+<link rel="alternate" hreflang="cn" href="/cn/docs/maven_dependency_management/" />
+
+<link rel="alternate" hreflang="cn" href="/cn/docs/performance-test-on-seckill-with-jmeter/" />
+
+<link rel="alternate" hreflang="en" href="/docs/distributed_saga_2/" />
+
+<link rel="alternate" hreflang="cn" href="/cn/docs/distributed_saga_2/" />
+
+<link rel="alternate" hreflang="en" href="/docs/distributed_saga_3/" />
+
+<link rel="alternate" hreflang="cn" href="/cn/docs/distributed_saga_3/" />
+
+<link rel="alternate" hreflang="en" href="/docs/how-to-reform-a-legacy-system/" />
+
+<link rel="alternate" hreflang="cn" href="/cn/docs/how-to-reform-a-legacy-system/" />
+
+<link rel="alternate" hreflang="en" href="/docs/service-center-ui/" />
+
+<link rel="alternate" hreflang="cn" href="/docs/service-center-ui/" />
+
+<link rel="alternate" hreflang="cn" href="/cn/docs/jira_beginner_guide/" />
+
+
+  </div>
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _pages/sitemap.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_pages/sitemap.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/slides/index.html
----------------------------------------------------------------------
diff --git a/content/slides/index.html b/content/slides/index.html
new file mode 100644
index 0000000..c1e1689
--- /dev/null
+++ b/content/slides/index.html
@@ -0,0 +1,422 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>Workshop Slides - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="The homepage of ServiceComb">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="Workshop Slides">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/slides/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/slides/">
+
+
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="Workshop Slides">
+  <meta name="twitter:description" content="The homepage of ServiceComb">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+  <meta property="og:type" content="article">
+  <meta property="article:published_time" content="2017-06-20T11:02:20+08:00">
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/slides/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="Workshop Slides">
+    
+    <meta itemprop="datePublished" content="June 20, 2017">
+    
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">Workshop Slides
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <h2 id="linuxcon-beijing-2017-workshop">LinuxCon Beijing 2017 Workshop</h2>
+<ul>
+  <li><a href="/assets/slides/20170619/MSAPrinciple&amp;EcoSystem.pdf">design principles and ecosystem of microservice</a></li>
+  <li><a href="/assets/slides/20170619/ServiceCombRoadMap.pdf">ServiceComb RoadMap</a></li>
+  <li><a href="/assets/slides/20170619/LinuxCon-Workshop-company.pdf">ServiceComb Workshop</a></li>
+</ul>
+
+<h2 id="arch-submit-20171209-beijing">Arch Submit, 20171209, Beijing</h2>
+<ul>
+  <li><a href="/assets/slides/20171209/PracticeOfServiceMeshOnHuaweiPublicCloud.pdf">Practice Of Service Mesh on Huawei Public Cloud</a></li>
+</ul>
+
+<h2 id="servicecomb-live-streaming-phase-i-20171026"><a href="http://www.itdks.com/liveevent/detail/6618">ServiceComb live streaming phase I</a>, 20171026</h2>
+<ul>
+  <li><a href="/assets/slides/20171026/ServiceCombIntroduce1026.pdf">ServiceComb Introduction</a></li>
+</ul>
+
+<h2 id="servicecomb-live-streaming-phase-ii-20171102"><a href="http://www.itdks.com/liveevent/detail/6620">ServiceComb live streaming phase II</a>, 20171102</h2>
+<ul>
+  <li><a href="/assets/slides/20171102/ServiceComb_PastAndPresent.pdf">ServiceComb: past and present</a></li>
+</ul>
+
+<h2 id="servicecomb-live-streaming-phase-iii-20171109"><a href="http://www.itdks.com/liveevent/detail/6621">ServiceComb live streaming phase III</a>, 20171109</h2>
+<ul>
+  <li><a href="/assets/slides/20171109/MicroservicePracticeOfHuaweiConsumerCloudBasedOnServiceComb.pdf">Micrservice practice of Huawei consumer cloud based on ServiceComb</a></li>
+</ul>
+
+<h2 id="servicecomb-live-streaming-phase-iv-20171124"><a href="http://www.itdks.com/liveevent/detail/6622">ServiceComb live streaming phase IV</a>, 20171124</h2>
+<ul>
+  <li><a href="/assets/slides/20171124/LiveCodingServiceCombQuickStart.zip">Live coding the quick start example of ServiceComb</a></li>
+</ul>
+
+<h2 id="servicecomb-live-streaming-phase-v-20171207"><a href="http://www.itdks.com/liveevent/detail/6623">ServiceComb live streaming phase V</a>, 20171207</h2>
+<ul>
+  <li><a href="/assets/slides/20171207/Uncover_ServiceComb_Design.pdf">Uncover ServiceComb Design</a></li>
+</ul>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _pages/about-slides.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_pages/about-slides.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/users/application-boot-process/index.html
----------------------------------------------------------------------
diff --git a/content/users/application-boot-process/index.html b/content/users/application-boot-process/index.html
new file mode 100644
index 0000000..5dc8fe0
--- /dev/null
+++ b/content/users/application-boot-process/index.html
@@ -0,0 +1,696 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>程序启动逻辑 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="程序启动逻辑">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="程序启动逻辑">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/users/application-boot-process/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/users/application-boot-process/">
+
+
+
+  <meta property="og:description" content="程序启动逻辑">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="程序启动逻辑">
+  <meta name="twitter:description" content="程序启动逻辑">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/users/application-boot-process/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">User Guide</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/" class="">Java Chassis Architecture</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/setup-environment/" class="">Setup Environment</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Provider</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-definition/" class="">Service Definition</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-contract/" class="">Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-springmvc/" class="">Develop Microservice with SpringMVC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-jax-rs/" class="">Develop Microservice with JAX-RS</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-transparent-rpc/" class="">Develop Microservice with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-interface-constraints/" class="">Service Interface Constraints</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-configurations/" class="">Service Configurations</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/communicate-protocol/" class="">Communicate Protocol</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/application-boot-process/" class="active">Application Boot Up Process</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-heartbeat/" class="">Service Heartbeat</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Consumer</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rest-template/" class="">Develop with Rest Template</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rpc/" class="">Develop with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-service-contract/" class="">Use Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/invoke-control/" class="">Invoke Control</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">General Development</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/local-develop-test/" class="">Develop and Test in Local Environment</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-servicecomb-in-spring-boot/" class="">Use ServiceComb in Spring Boot</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/distributed-tracing/" class="">Distributed Tracing</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/customized-tracing/" class="">Customized Tracing</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Edging Service</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/nginx/" class="">confd and Nginx</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/zuul/" class="">Zuul</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">Metrics</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Deployment</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/run-mode/" class="">Run Mode</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Security</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-tls/" class="">Use TLS</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="程序启动逻辑">
+    <meta itemprop="description" content="程序启动逻辑">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">程序启动逻辑
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <p>服务提供者的启动过程分为初始化Log4j、bean加载(包括配置加载)和服务注册三部分。</p>
+
+<ul>
+  <li>
+    <p>初始化Log4j</p>
+
+    <p><code class="highlighter-rouge">Log4jUtils</code>默认会从<code class="highlighter-rouge">classpath\*:config/base/log4j.properties</code>和<code class="highlighter-rouge">classpath\*:config/log4j.properties</code>两个路径读取log4j配置并合并,将其传递给Log4j的<code class="highlighter-rouge">PropertyConfigurator</code>方法初始化Log4j。如果优先级最高的配置文件是在磁盘上,且其所在目录有写权限,则将合并的配置输出到该目录,以便于维护时观察生效的参数。</p>
+  </li>
+  <li>
+    <p>bean加载</p>
+
+    <p><code class="highlighter-rouge">BeanUtils</code>默认会从<code class="highlighter-rouge">classpath\*:META-INF/spring/\*.bean.xml</code>路径加载配置文件,并将其传递给Spring框架的<code class="highlighter-rouge">ClassPathXmlApplicationContext</code>完成应用上下文加载。在这个过程中会加载foundation-config模块的bean,完成配置加载。</p>
+  </li>
+  <li>
+    <p>服务注册</p>
+
+    <p>在Spring context加载完成后,<code class="highlighter-rouge">io.servicecomb.core.CseApplicationListener</code>会加载handler配置、加载provider的schema信息,最后将微服务信息注册到服务中心。</p>
+  </li>
+</ul>
+
+<blockquote>
+  <p><strong>说明:</strong>
+ServiceComb的配置项分为三个层次:配置中心、环境变量、本地文件,三者优先级依次递减,高优先级中的配置项覆盖低优先级同名配置项。存放在配置中心的配置项可以在运行时修改。</p>
+</blockquote>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/application-boot-process.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/application-boot-process.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>


[25/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/users/service-configurations/index.html
----------------------------------------------------------------------
diff --git a/content/cn/users/service-configurations/index.html b/content/cn/users/service-configurations/index.html
new file mode 100644
index 0000000..52c9ce7
--- /dev/null
+++ b/content/cn/users/service-configurations/index.html
@@ -0,0 +1,1095 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>服务配置 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="服务配置">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="服务配置">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/service-configurations/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/service-configurations/">
+
+
+
+  <meta property="og:description" content="服务配置">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="服务配置">
+  <meta name="twitter:description" content="服务配置">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/users/service-configurations/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">用户手册</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/" class="">Java Chassis系统架构</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/setup-environment/" class="">环境配置</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务提供者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-definition/" class="">服务定义</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-contract/" class="">服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-springmvc/" class="">用SpringMVC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-jax-rs/" class="">用JAX-RS开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-transparent-rpc/" class="">用透明RPC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-interface-constraints/" class="">服务接口约束</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-configurations/" class="active">服务配置</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/communicate-protocol/" class="">通信协议</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/application-boot-process/" class="">程序启动逻辑</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-heartbeat/" class="">服务心跳</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务消费者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rest-template/" class="">使用Rest Template方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rpc/" class="">使用RPC方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-service-contract/" class="">使用服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/invoke-control/" class="">调用控制</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">通用开发</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/local-develop-test/" class="">本地开发与测试</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-servicecomb-in-spring-boot/" class="">在Spring Boot中使用ServiceComb</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/distributed-tracing/" class="">分布式调用链追踪</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/customized-tracing/" class="">自定义调用链打点</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">服务能力开放</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/nginx/" class="">使用confd和Nginx做边缘服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/zuul/" class="">使用Zuul做边缘服务</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">监控</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">部署</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/run-mode/" class="">运行模式</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">微服务安全</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-tls/" class="">使用TLS通信</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="服务配置">
+    <meta itemprop="description" content="服务配置">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">服务配置
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> 在本页上</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#负载均衡策略" id="markdown-toc-负载均衡策略">负载均衡策略</a>    <ul>
+      <li><a href="#场景描述" id="markdown-toc-场景描述">场景描述</a></li>
+      <li><a href="#配置说明" id="markdown-toc-配置说明">配置说明</a></li>
+      <li><a href="#示例代码" id="markdown-toc-示例代码">示例代码</a></li>
+    </ul>
+  </li>
+  <li><a href="#自定义路由策略" id="markdown-toc-自定义路由策略">自定义路由策略</a></li>
+  <li><a href="#限流策略" id="markdown-toc-限流策略">限流策略</a>    <ul>
+      <li><a href="#场景描述-1" id="markdown-toc-场景描述-1">场景描述</a></li>
+      <li><a href="#注意事项" id="markdown-toc-注意事项">注意事项</a></li>
+      <li><a href="#配置说明-1" id="markdown-toc-配置说明-1">配置说明</a></li>
+    </ul>
+  </li>
+  <li><a href="#降级策略" id="markdown-toc-降级策略">降级策略</a>    <ul>
+      <li><a href="#概念阐述" id="markdown-toc-概念阐述">概念阐述</a></li>
+      <li><a href="#场景描述-2" id="markdown-toc-场景描述-2">场景描述</a></li>
+      <li><a href="#配置说明-2" id="markdown-toc-配置说明-2">配置说明</a></li>
+    </ul>
+  </li>
+  <li><a href="#示例代码-1" id="markdown-toc-示例代码-1">示例代码</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="负载均衡策略">负载均衡策略</h2>
+<h3 id="场景描述">场景描述</h3>
+
+<p>  ServiceComb提供了基于Ribbon的负载均衡方案,用户可以通过配置文件配置负载均衡策略,当前支持随机、顺序、基于响应时间的权值等多种负载均衡路由策略。</p>
+
+<h3 id="配置说明">配置说明</h3>
+
+<p>  负载均衡策略在mocroservice.yaml文件中配置,配置项为<code class="highlighter-rouge">cse.loadbalance.[MicroServiceName].[property name]</code>,其中若省略MicroServiceName,则为全局配置;若指定MicroServiceName,则为针对特定微服务的配置。</p>
+
+<p>  <strong>表1 配置项说明</strong></p>
+
+<table>
+  <thead>
+    <tr>
+      <th style="text-align: left">配置项</th>
+      <th style="text-align: left">默认值</th>
+      <th style="text-align: left">取值范围</th>
+      <th style="text-align: left">是否必选</th>
+      <th style="text-align: left">含义</th>
+      <th style="text-align: left">注意</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td style="text-align: left">cse.loadbalance.NFLoadBalancerRuleClassName</td>
+      <td style="text-align: left">com.netflix.loadbalancer.RoundRobinRule</td>
+      <td style="text-align: left">com.netflix.loadbalancer.RoundRobinRule(轮询)com.netflix.loadbalancer.RandomRule(随机)com.netflix.loadbalancer.WeightedResponseTimeRule(服务器响应时间权值)io.servicecomb.loadbalance.SessionStickinessRule(会话保持)</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">负载均衡路由策略</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.loadbalance.SessionStickinessRule.sessionTimeoutInSeconds</td>
+      <td style="text-align: left">30</td>
+      <td style="text-align: left">Integer</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">客户端闲置时间,超过限制后选择后面的服务器。</td>
+      <td style="text-align: left">暂不支持微服务配置。e.g. cse.loadbalance.SessionStickinessRule.sessionTimeoutInSeconds,不能配置为cse.loadbalance.DemoService.SessionStickinessRule.sessionTimeoutInSeconds</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.loadbalance.SessionStickinessRule.successiveFailedTimes</td>
+      <td style="text-align: left">5</td>
+      <td style="text-align: left">Integer</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">客户端失败次数,超过后会切换服务器</td>
+      <td style="text-align: left">暂不支持微服务配置</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.loadbalance.retryEnabled</td>
+      <td style="text-align: left">FALSE</td>
+      <td style="text-align: left">Boolean</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">负载均衡捕获到服务调用异常,是否进行重试</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.loadbalance.retryOnNext</td>
+      <td style="text-align: left">0</td>
+      <td style="text-align: left">Integer</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">尝试新的服务器的次数</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.loadbalance.retryOnSame</td>
+      <td style="text-align: left">0</td>
+      <td style="text-align: left">Integer</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">同一个服务器尝试的次数</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.loadbalance.isolation.enabled</td>
+      <td style="text-align: left">FALSE</td>
+      <td style="text-align: left">Boolean</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">是否开启故障实例隔离功能</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.loadbalance.isolation.enableRequestThreshold</td>
+      <td style="text-align: left">20</td>
+      <td style="text-align: left">Integer</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">当实例的调用总次数达到该值时开始进入隔离逻辑门槛</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.loadbalance.isolation.errorThresholdPercentage</td>
+      <td style="text-align: left">20</td>
+      <td style="text-align: left">Integer,区间为(0,100]</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">实例故障隔离错误百分比</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.loadbalance.isolation.singleTestTime</td>
+      <td style="text-align: left">10000</td>
+      <td style="text-align: left">Integer</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">故障实例单点测试时间</td>
+      <td style="text-align: left">单位为ms</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.loadbalance.transactionControl.policy</td>
+      <td style="text-align: left">io.servicecomb.loadbalance.filter.SimpleTransactionControlFilter</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">动态路由分流策略</td>
+      <td style="text-align: left">框架提供了简单的分流机制,开发者也可以实现自定义的分流过滤策略</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.loadbalance.transactionControl.options</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">key/value pairs</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">针对SimpleTransactionControlFilter分流策略的配置项,可添加任意项过滤标签</td>
+      <td style="text-align: left">-</td>
+    </tr>
+  </tbody>
+</table>
+
+<h3 id="示例代码">示例代码</h3>
+
+<p>  负载均衡策略配置在src/main/resources/microservice.yaml文件中。</p>
+
+<p>  配置处理链:</p>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">cse</span><span class="pi">:</span>
+  <span class="c1"># other configurations omitted</span>
+  <span class="s">handler</span><span class="pi">:</span>
+    <span class="s">chain</span><span class="pi">:</span>
+      <span class="s">Consumer</span><span class="pi">:</span>
+        <span class="s">default</span><span class="pi">:</span> <span class="s">loadbalance</span>
+  <span class="c1"># other configurations omitted</span>
+</code></pre>
+</div>
+
+<p>  增加路由策略:</p>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">cse:</span>
+  <span class="s"># other configurations omitted</span>
+  <span class="s">loadbalance</span><span class="pi">:</span>
+    <span class="s">NFLoadBalancerRuleClassName</span><span class="pi">:</span> <span class="s">com.netflix.loadbalancer.RoundRobinRule</span>
+  <span class="c1"># other configurations omitted</span>
+</code></pre>
+</div>
+
+<h2 id="自定义路由策略">自定义路由策略</h2>
+
+<p>  用户可以在ServiceComb提供的路由策略框架下根据业务需要,通过编程的方式来开发路由策略。实施步骤如下:</p>
+
+<ul>
+  <li>
+    <p>实现接口<code class="highlighter-rouge">com.netflix.loadbalancer.IRule</code>中定义的接口方法。
+路由选择逻辑在public Server choose(Object key)方法中实现。LoadBalancerStats是一个封装了负载均衡器当前运行状态的一个结构。通过获取stats中各个实例的运行指标,在choose方法中,判定将当前请求路由到哪个实例上进行处理。处理风格可以参照<code class="highlighter-rouge">io.servicecomb.loadbalance.SessionStickinessRule</code>。</p>
+  </li>
+  <li>
+    <p>编译开发的策略,保证生成的class在classpath下。</p>
+  </li>
+  <li>
+    <p>通过SDK配置该路由策略,假如是<code class="highlighter-rouge">AbcRule</code>。则配置如下:       <code class="highlighter-rouge">cse.loadbalance.NFLoadBalancerRuleClassName=io.servicecomb.ribbon.rule.AbcRule</code></p>
+  </li>
+</ul>
+
+<h2 id="限流策略">限流策略</h2>
+<h3 id="场景描述-1">场景描述</h3>
+
+<p>用户在provider端使用限流策略,可以限制指定微服务向其发送请求的频率,达到限制每秒钟最大请求数量的效果。</p>
+
+<h3 id="注意事项">注意事项</h3>
+
+<ol>
+  <li>限流策略的控制并不是绝对精确的,可能会有少量误差。</li>
+  <li>provider端的流量控制是业务层面的功能,不是安全意义上的流量控制,如需防止DDoS攻击,需要结合其他的一系列措施。</li>
+  <li>流量控制是微服务级的,不是进程级的。</li>
+</ol>
+
+<h3 id="配置说明-1">配置说明</h3>
+
+<p>  限流策略配置在microservice.yaml文件中,相关配置项见下表。要开启服务提供者端的限流策略,还需要在处理链中配置服务端限流handler,配置示例如下:</p>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">cse</span><span class="pi">:</span>
+  <span class="s">handler</span><span class="pi">:</span>
+    <span class="s">chain</span><span class="pi">:</span>
+      <span class="s">Consumer</span><span class="pi">:</span>
+        <span class="s">default</span><span class="pi">:</span> <span class="s">qps-flowcontrol-provider</span>
+</code></pre>
+</div>
+
+<p>  <strong>表2 QPS流控配置项说明</strong></p>
+
+<table>
+  <thead>
+    <tr>
+      <th style="text-align: left">配置项</th>
+      <th style="text-align: left">默认值</th>
+      <th style="text-align: left">取值范围</th>
+      <th style="text-align: left">是否必选</th>
+      <th style="text-align: left">含义</th>
+      <th style="text-align: left">注意</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td style="text-align: left">cse.flowcontrol.Provider.qps.enabled</td>
+      <td style="text-align: left">true</td>
+      <td style="text-align: left">true/false</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">是否启用Provider流控</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.flowcontrol.Provider.qps.limit.[ServiceName]</td>
+      <td style="text-align: left">2147483647(max int)</td>
+      <td style="text-align: left">(0,2147483647],整形</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">每秒钟允许的请求数</td>
+      <td style="text-align: left">仅支持microservice一个级别的配置</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.flowcontrol.Provider.qps.global.limit</td>
+      <td style="text-align: left">2147483647(max int)</td>
+      <td style="text-align: left">(0,2147483647],整形</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">provider接受请求流量的全局配置</td>
+      <td style="text-align: left">没有具体到微服务的配置时,此配置生效</td>
+    </tr>
+  </tbody>
+</table>
+
+<h2 id="降级策略">降级策略</h2>
+<h3 id="概念阐述">概念阐述</h3>
+
+<p>降级策略是当服务请求异常时,微服务所采用的异常处理策略。降级策略有三个相关的技术概念:“隔离”、“熔断”、“容错”:</p>
+
+<p>降级策略有三个相关的技术概念:“隔离”、“熔断”、“容错”:</p>
+<ul>
+  <li>“隔离”是一种异常检测机制,常用的检测方法是请求超时、流量过大等。一般的设置参数包括超时时间、同时并发请求个数等。</li>
+  <li>“熔断”是一种异常反应机制,“熔断”依赖于“隔离”。熔断通常基于错误率来实现。一般的设置参数包括统计请求的个数、错误率等。</li>
+  <li>“容错”是一种异常处理机制,“容错”依赖于“熔断”。熔断以后,会调用“容错”的方法。一般的设置参数包括调用容错方法的次数等。</li>
+</ul>
+
+<p>把这些概念联系起来:当”隔离”措施检测到N次请求中共有M次错误的时候,”熔断”不再发送后续请求,调用”容错”处理函数。这个技术上的定义,是和Netflix Hystrix一致的,通过这个定义,非常容易理解它提供的配置项,参考:<a href="https://github.com/Netflix/Hystrix/wiki/Configuration">https://github.com/Netflix/Hystrix/wiki/Configuration</a>。当前ServiceComb提供两种容错方式,分别为返回null值和抛出异常。</p>
+
+<h3 id="场景描述-2">场景描述</h3>
+
+<p>用户通过配置降级策略,可以设置微服务的异常处理策略。</p>
+
+<h3 id="配置说明-2">配置说明</h3>
+
+<p>  配置项如表所示。</p>
+
+<p>  <strong>表3 降级策略相关配置项说明</strong></p>
+
+<table>
+  <thead>
+    <tr>
+      <th style="text-align: left">配置项</th>
+      <th style="text-align: left">默认值</th>
+      <th style="text-align: left">取值范围</th>
+      <th style="text-align: left">是否必选</th>
+      <th style="text-align: left">含义</th>
+      <th style="text-align: left">注意</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td style="text-align: left">cse.isolation.timeout.enabled</td>
+      <td style="text-align: left">FALSE</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">是否启用超时检测</td>
+      <td style="text-align: left"> </td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.isolation.timeoutInMilliseconds</td>
+      <td style="text-align: left">30000</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">超时时间阈值</td>
+      <td style="text-align: left"> </td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.isolation.maxConcurrentRequests</td>
+      <td style="text-align: left">10</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">最大并发数阈值</td>
+      <td style="text-align: left"> </td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.circuitBreaker.enabled</td>
+      <td style="text-align: left">TRUE</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">是否启用熔断措施</td>
+      <td style="text-align: left"> </td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.circuitBreaker.forceOpen</td>
+      <td style="text-align: left">FALSE</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">不管失败次数,都进行熔断</td>
+      <td style="text-align: left"> </td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.circuitBreaker.forceClosed</td>
+      <td style="text-align: left">FALSE</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">任何时候都不熔断</td>
+      <td style="text-align: left">当与forceOpen同时配置时,forceOpen优先。</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.circuitBreaker.sleepWindowInMilliseconds</td>
+      <td style="text-align: left">15000</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">熔断后,多长时间恢复</td>
+      <td style="text-align: left">恢复后,会重新计算失败情况。注意:如果恢复后的调用立即失败,那么会立即重新进入熔断。</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.circuitBreaker.requestVolumeThreshold</td>
+      <td style="text-align: left">20</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">10s内统计错误发生次数阈值,超过阈值则触发熔断</td>
+      <td style="text-align: left">由于10秒还会被划分为10个1秒的统计周期,经过1s中后才会开始计算错误率,因此从调用开始至少经过1s,才会发生熔断。</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.circuitBreaker.errorThresholdPercentage</td>
+      <td style="text-align: left">50</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">错误率阈值,达到阈值则触发熔断</td>
+      <td style="text-align: left"> </td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.fallback.enabled</td>
+      <td style="text-align: left">TRUE</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">是否启用出错后的故障处理措施</td>
+      <td style="text-align: left"> </td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.fallback.maxConcurrentRequests</td>
+      <td style="text-align: left">10</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">并发调用容错处理措施(cse.fallbackpolicy.policy)的请求数,超过这个值则不再调用处理措施,直接返回异常</td>
+      <td style="text-align: left"> </td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.fallbackpolicy.policy</td>
+      <td style="text-align: left">throwexception</td>
+      <td style="text-align: left">returnnulll | throwexception</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">出错后的处理策略</td>
+      <td style="text-align: left"> </td>
+    </tr>
+  </tbody>
+</table>
+
+<p class="notice--warning"><strong>注意:</strong> 谨慎使用cse.isolation.timeout.enabled=true。因为系统处理链都是异步执行,中间处理链的返回,会导致后面处理链的逻辑处理效果丢失。尽可能将cse.isolation.timeout.enabled保持默认值false,并且正确设置网络层超时时间cse.request.timeout=30000。</p>
+
+<h2 id="示例代码-1">示例代码</h2>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">cse</span><span class="pi">:</span>
+  <span class="s">handler</span><span class="pi">:</span>
+    <span class="s">chain</span><span class="pi">:</span>
+      <span class="s">Consumer</span><span class="pi">:</span>
+        <span class="s">default</span><span class="pi">:</span> <span class="s">bizkeeper-consumer</span>
+  <span class="s">isolation</span><span class="pi">:</span>
+    <span class="s">Consumer</span><span class="pi">:</span>
+      <span class="s">timeout</span><span class="pi">:</span>
+        <span class="s">enabled</span><span class="pi">:</span> <span class="s">true</span>
+      <span class="s">timeoutInMilliseconds</span><span class="pi">:</span> <span class="s">30000</span>
+  <span class="s">circuitBreaker</span><span class="pi">:</span>
+    <span class="s">sleepWindowInMilliseconds</span><span class="pi">:</span> <span class="s">15000</span>
+    <span class="s">requestVolumeThreshold</span><span class="pi">:</span> <span class="s">20</span>
+  <span class="s">fallback</span><span class="pi">:</span>
+    <span class="s">enabled</span><span class="pi">:</span> <span class="s">true</span>
+    <span class="s">policy</span><span class="pi">:</span> <span class="s">throwexception</span>
+</code></pre>
+</div>
+
+<blockquote>
+  <p><strong>说明:</strong>
+降级策略需要启用服务治理能力,对应的服务提供者的handler是<code class="highlighter-rouge">bizkeeper-provider</code>,服务消费者的handler是<code class="highlighter-rouge">bizkeeper-consumer</code>。</p>
+</blockquote>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/cn/service-configurations.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/cn/service-configurations.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/users/service-contract/index.html
----------------------------------------------------------------------
diff --git a/content/cn/users/service-contract/index.html b/content/cn/users/service-contract/index.html
new file mode 100644
index 0000000..c48f8c8
--- /dev/null
+++ b/content/cn/users/service-contract/index.html
@@ -0,0 +1,802 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>服务契约 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="服务契约">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="服务契约">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/service-contract/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/service-contract/">
+
+
+
+  <meta property="og:description" content="服务契约">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="服务契约">
+  <meta name="twitter:description" content="服务契约">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/users/service-contract/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">用户手册</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/" class="">Java Chassis系统架构</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/setup-environment/" class="">环境配置</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务提供者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-definition/" class="">服务定义</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-contract/" class="active">服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-springmvc/" class="">用SpringMVC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-jax-rs/" class="">用JAX-RS开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-transparent-rpc/" class="">用透明RPC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-interface-constraints/" class="">服务接口约束</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-configurations/" class="">服务配置</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/communicate-protocol/" class="">通信协议</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/application-boot-process/" class="">程序启动逻辑</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-heartbeat/" class="">服务心跳</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务消费者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rest-template/" class="">使用Rest Template方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rpc/" class="">使用RPC方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-service-contract/" class="">使用服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/invoke-control/" class="">调用控制</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">通用开发</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/local-develop-test/" class="">本地开发与测试</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-servicecomb-in-spring-boot/" class="">在Spring Boot中使用ServiceComb</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/distributed-tracing/" class="">分布式调用链追踪</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/customized-tracing/" class="">自定义调用链打点</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">服务能力开放</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/nginx/" class="">使用confd和Nginx做边缘服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/zuul/" class="">使用Zuul做边缘服务</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">监控</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">部署</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/run-mode/" class="">运行模式</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">微服务安全</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-tls/" class="">使用TLS通信</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="服务契约">
+    <meta itemprop="description" content="服务契约">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">服务契约
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> 在本页上</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#概念阐述" id="markdown-toc-概念阐述">概念阐述</a></li>
+  <li><a href="#场景描述" id="markdown-toc-场景描述">场景描述</a></li>
+  <li><a href="#显式契约" id="markdown-toc-显式契约">显式契约</a>    <ul>
+      <li><a href="#配置说明" id="markdown-toc-配置说明">配置说明</a></li>
+      <li><a href="#示例代码" id="markdown-toc-示例代码">示例代码</a></li>
+    </ul>
+  </li>
+  <li><a href="#隐式契约" id="markdown-toc-隐式契约">隐式契约</a>    <ul>
+      <li><a href="#概念阐述-1" id="markdown-toc-概念阐述-1">概念阐述</a></li>
+      <li><a href="#场景描述-1" id="markdown-toc-场景描述-1">场景描述</a></li>
+      <li><a href="#涉及api" id="markdown-toc-涉及api">涉及API</a></li>
+    </ul>
+  </li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="概念阐述">概念阐述</h2>
+
+<p>服务契约,指基于OpenAPI规范的微服务接口契约,是服务端与消费端对于接口的定义。</p>
+
+<h2 id="场景描述">场景描述</h2>
+
+<p>服务契约用于服务端和消费端的解耦,服务端围绕契约进行服务的实现,消费端根据契约进行服务的调用,可支持服务端和消费端采用不同的编程语言实现。</p>
+
+<h2 id="显式契约">显式契约</h2>
+
+<h3 id="配置说明">配置说明</h3>
+
+<p>ServiceComb使用yaml文件格式定义服务契约,推荐使用<a href="http://editor.swagger.io/#/">Swagger Editor</a>工具来编写契约,可检查语法格式及自动生成API文档。详细的契约文件格式请参考<a href="https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md">OpenAPI官方文档</a>。</p>
+
+<p>契约文件放置在”resources/microservices”或者”resources/applications”目录下,目录结构如下所示。</p>
+
+<pre><code class="language-txt">resources
+  - microservices
+    - serviceName #微服务名
+      - schemaId.yaml #schema接口的契约
+  - applications
+    - appId #应用ID
+      - serviceName #微服务名
+        - schemaId.yaml #schema接口的契约
+</code></pre>
+
+<h3 id="示例代码">示例代码</h3>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">swagger</span><span class="pi">:</span> <span class="s1">'</span><span class="s">2.0'</span>
+<span class="s">info</span><span class="pi">:</span>
+  <span class="s">title</span><span class="pi">:</span> <span class="s">hello</span>
+  <span class="s">version</span><span class="pi">:</span> <span class="s">1.0.0</span>
+  <span class="s">x-java-interface</span><span class="pi">:</span> <span class="s">io.servicecomb.samples.common.schema.Hello</span>
+<span class="s">basePath</span><span class="pi">:</span> <span class="s">/springmvchello</span>
+<span class="s">produces</span><span class="pi">:</span>
+  <span class="pi">-</span> <span class="s">application/json</span>
+
+<span class="s">paths</span><span class="pi">:</span>
+  <span class="s">/sayhi</span><span class="pi">:</span>
+    <span class="s">post</span><span class="pi">:</span>
+      <span class="s">operationId</span><span class="pi">:</span> <span class="s">sayHi</span>
+      <span class="s">parameters</span><span class="pi">:</span>
+        <span class="pi">-</span> <span class="s">name</span><span class="pi">:</span> <span class="s">name</span>
+          <span class="s">in</span><span class="pi">:</span> <span class="s">query</span>
+          <span class="s">required</span><span class="pi">:</span> <span class="s">true</span>
+          <span class="s">type</span><span class="pi">:</span> <span class="s">string</span>
+      <span class="s">responses</span><span class="pi">:</span>
+        <span class="s">200</span><span class="pi">:</span>
+          <span class="s">description</span><span class="pi">:</span> <span class="s">正确返回</span>
+          <span class="s">schema</span><span class="pi">:</span>
+            <span class="s">type</span><span class="pi">:</span> <span class="s">string</span>
+        <span class="s">default</span><span class="pi">:</span>
+          <span class="s">description</span><span class="pi">:</span> <span class="s">默认返回</span>
+          <span class="s">schema</span><span class="pi">:</span>
+            <span class="s">type</span><span class="pi">:</span> <span class="s">string</span>
+  <span class="s">/sayhello</span><span class="pi">:</span>
+    <span class="s">post</span><span class="pi">:</span>
+      <span class="s">operationId</span><span class="pi">:</span> <span class="s">sayHello</span>
+      <span class="s">parameters</span><span class="pi">:</span>
+        <span class="pi">-</span> <span class="s">name</span><span class="pi">:</span> <span class="s">person</span>
+          <span class="s">in</span><span class="pi">:</span> <span class="s">body</span>
+          <span class="s">required</span><span class="pi">:</span> <span class="s">true</span>
+          <span class="s">schema</span><span class="pi">:</span>
+            <span class="s">$ref</span><span class="pi">:</span> <span class="s2">"</span><span class="s">#/definitions/Person"</span>
+      <span class="s">responses</span><span class="pi">:</span>
+        <span class="s">200</span><span class="pi">:</span>
+          <span class="s">description</span><span class="pi">:</span> <span class="s">正确返回</span>
+          <span class="s">schema</span><span class="pi">:</span>
+            <span class="s">type</span><span class="pi">:</span> <span class="s">string</span>
+        <span class="s">default</span><span class="pi">:</span>
+          <span class="s">description</span><span class="pi">:</span> <span class="s">默认返回</span>
+          <span class="s">schema</span><span class="pi">:</span>
+            <span class="s">type</span><span class="pi">:</span> <span class="s">string</span>
+<span class="s">definitions</span><span class="pi">:</span>
+  <span class="s">Person</span><span class="pi">:</span>
+    <span class="s">type</span><span class="pi">:</span> <span class="s2">"</span><span class="s">object"</span>
+    <span class="s">properties</span><span class="pi">:</span>
+      <span class="s">name</span><span class="pi">:</span>
+        <span class="s">type</span><span class="pi">:</span> <span class="s2">"</span><span class="s">string"</span>
+        <span class="s">description</span><span class="pi">:</span> <span class="s2">"</span><span class="s">person</span><span class="nv"> </span><span class="s">name"</span>
+    <span class="s">xml</span><span class="pi">:</span>
+      <span class="s">name</span><span class="pi">:</span> <span class="s2">"</span><span class="s">Person"</span>
+</code></pre>
+</div>
+
+<blockquote>
+  <p><strong>注意</strong>:</p>
+  <ul>
+    <li>根据swagger标准,basePath配置的路径需要包括web server的webroot。</li>
+    <li>info.x-java-interface需要标明具体的接口路径,根据项目实际情况而定。</li>
+  </ul>
+</blockquote>
+
+<h2 id="隐式契约">隐式契约</h2>
+<h3 id="概念阐述-1">概念阐述</h3>
+
+<p>  隐式契约是指ServiceComb根据服务实现类自动生成的服务契约。</p>
+
+<h3 id="场景描述-1">场景描述</h3>
+
+<p>  用户通过隐式契约功能,可以不预先定义契约和接口,直接定义实现类,在服务启动时,根据实现类自动生成契约,并注册到服务中心。</p>
+
+<h3 id="涉及api">涉及API</h3>
+
+<p>  隐式契约可用于Spring MVC、JAX-RS、透明RPC三种开发模式,具体使用参见<a href="/cn/users/develop-with-springmvc/">用SpringMVC开发微服务</a>、<a href="/cn/users/develop-with-jax-rs/">用JAX-RS开发微服务</a>和<a href="/cn/users/develop-with-transparent-rpc/">用透明RPC开发微服务</a>。</p>
+
+<p>  使用透明RPC模式开发微服务时,由于从代码上无法分辨微服务开发人员期望如何定义契约,所以生成的契约全是POST方法,所有method的入参被包装为一个class,作为body参数传递,所以建议使用隐式契约开发provider时,选择SpringMVC或JAX-RS开发模式,可以得到完整的RESTful声明。</p>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/cn/define-service-contract.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/cn/define-service-contract.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/users/service-definition/index.html
----------------------------------------------------------------------
diff --git a/content/cn/users/service-definition/index.html b/content/cn/users/service-definition/index.html
new file mode 100644
index 0000000..10772ef
--- /dev/null
+++ b/content/cn/users/service-definition/index.html
@@ -0,0 +1,794 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>服务定义 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="服务定义">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="服务定义">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/service-definition/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/service-definition/">
+
+
+
+  <meta property="og:description" content="服务定义">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="服务定义">
+  <meta name="twitter:description" content="服务定义">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/users/service-definition/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">用户手册</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/" class="">Java Chassis系统架构</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/setup-environment/" class="">环境配置</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务提供者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-definition/" class="active">服务定义</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-contract/" class="">服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-springmvc/" class="">用SpringMVC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-jax-rs/" class="">用JAX-RS开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-transparent-rpc/" class="">用透明RPC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-interface-constraints/" class="">服务接口约束</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-configurations/" class="">服务配置</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/communicate-protocol/" class="">通信协议</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/application-boot-process/" class="">程序启动逻辑</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-heartbeat/" class="">服务心跳</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务消费者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rest-template/" class="">使用Rest Template方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rpc/" class="">使用RPC方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-service-contract/" class="">使用服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/invoke-control/" class="">调用控制</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">通用开发</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/local-develop-test/" class="">本地开发与测试</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-servicecomb-in-spring-boot/" class="">在Spring Boot中使用ServiceComb</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/distributed-tracing/" class="">分布式调用链追踪</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/customized-tracing/" class="">自定义调用链打点</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">服务能力开放</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/nginx/" class="">使用confd和Nginx做边缘服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/zuul/" class="">使用Zuul做边缘服务</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">监控</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">部署</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/run-mode/" class="">运行模式</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">微服务安全</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-tls/" class="">使用TLS通信</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="服务定义">
+    <meta itemprop="description" content="服务定义">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">服务定义
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> 在本页上</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#概念阐述" id="markdown-toc-概念阐述">概念阐述</a></li>
+  <li><a href="#场景描述" id="markdown-toc-场景描述">场景描述</a></li>
+  <li><a href="#配置说明" id="markdown-toc-配置说明">配置说明</a></li>
+  <li><a href="#示例代码" id="markdown-toc-示例代码">示例代码</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="概念阐述">概念阐述</h2>
+
+<p>服务定义信息是微服务的身份标识,它定义了服务从属于哪个应用,以及名字和版本。服务定义信息中也可以有扩展信息,用于定义服务的属性元数据。</p>
+
+<h2 id="场景描述">场景描述</h2>
+
+<p>当用户定义新的微服务或修改微服务的基本信息时,会涉及到服务定义信息的创建和修改操作。</p>
+
+<h2 id="配置说明">配置说明</h2>
+
+<p>介绍涉及microservice.yaml文件的以下配置项,文件在项目中的存放路径为src/main/resources/microservice.yaml。</p>
+
+<table>
+  <thead>
+    <tr>
+      <th style="text-align: left">配置项</th>
+      <th style="text-align: left">默认值</th>
+      <th style="text-align: left">取值范围</th>
+      <th style="text-align: left">是否必选</th>
+      <th style="text-align: left">含义</th>
+      <th style="text-align: left">注意</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td style="text-align: left">APPLICATION_ID</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">是</td>
+      <td style="text-align: left">应用名</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">service_description.name</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">是</td>
+      <td style="text-align: left">微服务名</td>
+      <td style="text-align: left">应确保app内部唯一。微服务名支持数字、大小写字母和”-“、”_“、”.”三个特殊字符,但是不能以特殊字符作为首尾字符,命名规范为:^[a-zA-Z0-9]+$|^[a-zA-Z0-9][a-zA-Z0-9_-.]*[a-zA-Z0-9]$。</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">service_description.version</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">是</td>
+      <td style="text-align: left">微服务版本号</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">service_description.properties</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">微服务元数据配置(通过microservice.yaml文件进行配置)</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">service_description.propertyExtendedClass</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">微服务元数据配置(通过实现接口PropertyExtended进行配置)</td>
+      <td style="text-align: left">接口返回的配置会覆盖配置文件中key相同的配置。</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">instance_description.properties</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">服务实例元数据配置(通过microservice.yaml文件进行配置)</td>
+      <td style="text-align: left"> </td>
+    </tr>
+    <tr>
+      <td style="text-align: left">instance_description.propertyExtendedClass</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">微服务元数据配置(通过实现接口PropertyExtended进行配置)</td>
+      <td style="text-align: left">同service_description.propertyExtendedClass</td>
+    </tr>
+  </tbody>
+</table>
+
+<blockquote>
+  <p>说明:</p>
+  <ul>
+    <li>服务的元数据会随服务一同注册到服务中心,如需修改,则要连同服务version一起变更。若想保持服务version不变,则需要通过服务管理中心统一变更元数据。</li>
+    <li>默认情况下,微服务只支持同一个app内部的服务调用。可在微服务的properties中配置allowCrossApp=true属性,开启可被跨app访问权限。</li>
+  </ul>
+</blockquote>
+
+<h2 id="示例代码">示例代码</h2>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">APPLICATION_ID</span><span class="pi">:</span> <span class="s">helloTest</span> <span class="c1">#应用名</span>
+<span class="s">service_description</span><span class="pi">:</span> <span class="c1">#服务描述</span>
+  <span class="s">name</span><span class="pi">:</span> <span class="s">helloServer</span> <span class="c1">#微服务名称</span>
+  <span class="s">version</span><span class="pi">:</span> <span class="s">0.0.1</span> <span class="c1">#服务版本号</span>
+  <span class="s">properties</span><span class="pi">:</span> <span class="c1">#元数据</span>
+    <span class="s">allowCrossApp</span><span class="pi">:</span> <span class="s">false</span>
+    <span class="s">key1</span><span class="pi">:</span> <span class="s">value1</span>
+    <span class="s">key2</span><span class="pi">:</span> <span class="s">value2</span>
+  <span class="s">propertyExtentedClass</span><span class="pi">:</span> <span class="s">io.servicecomb.serviceregistry.MicroServicePropertyExtendedStub</span>
+<span class="s">instance_description</span><span class="pi">:</span> <span class="c1">#实例描述</span>
+  <span class="s">properties</span><span class="pi">:</span> <span class="c1">#元数据</span>
+    <span class="s">key3</span><span class="pi">:</span> <span class="s">value3</span>
+  <span class="s">propertyExtentedClass</span><span class="pi">:</span> <span class="s">io.servicecomb.serviceregistry.MicroServicePropertyExtendedStub</span>
+</code></pre>
+</div>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/cn/service-definition.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/cn/service-definition.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>


[22/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/year-archive/index.html
----------------------------------------------------------------------
diff --git a/content/cn/year-archive/index.html b/content/cn/year-archive/index.html
new file mode 100644
index 0000000..af30472
--- /dev/null
+++ b/content/cn/year-archive/index.html
@@ -0,0 +1,2052 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="The homepage of ServiceComb">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="Apache incubator ServiceComb">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/year-archive/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/year-archive/">
+
+
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="Apache incubator ServiceComb">
+  <meta name="twitter:description" content="The homepage of ServiceComb">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--archive">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/year-archive/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+
+<div itemscope itemtype="http://schema.org/Person">
+
+  
+    <div class="author__avatar">
+      
+        <img src="/assets/images/ServiceComb-logo-3.jpg" class="author__avatar" alt="" itemprop="image">
+      
+    </div>
+  
+
+  <div class="author__content">
+    <h3 class="author__name" itemprop="name"></h3>
+    
+      <p class="author__bio" itemprop="description">
+	    
+	      
+	        ServiceComb提供了一套关于服务注册,服务发现,服务配置以及管理功能的微服务框架
+	      
+	    
+      </p>
+    
+  </div>
+
+  <div class="author__urls-wrapper">
+    <button class="btn btn--inverse">关注</button>
+    <ul class="author__urls social-icons">
+      
+        <li itemprop="homeLocation" itemscope itemtype="http://schema.org/Place">
+        
+          
+            <i class="fa fa-fw fa-map-marker" aria-hidden="true"></i> <span itemprop="name">中国</span>
+          
+        
+        </li>
+      
+
+      
+
+      
+        <li>
+          <a href="mailto:servicecomb-developers@googlegroups.com">
+            <meta itemprop="email" content="servicecomb-developers@googlegroups.com" />
+            <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> 电子邮箱
+          </a>
+        </li>
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+        <li>
+          <a href="https://github.com/ServiceComb" itemprop="sameAs">
+            <i class="fa fa-fw fa-github" aria-hidden="true"></i> GitHub
+          </a>
+        </li>
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      <!--
+  <li>
+    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs">
+      <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link
+    </a>
+  </li>
+-->
+    </ul>
+  </div>
+</div>
+
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <div class="archive">
+    
+      <h1 class="page__title" itemprop="headline"></h1>
+    
+    <ul class="nav nav-tabs">
+    <li data-toggle="tab" class="active title"><a data-toggle="tab" href="#postByYear">按时间排序</a></li>
+    <li data-toggle="tab" class="title"><a data-toggle="tab" href="#postByTag">按标签排序</a></li>
+</ul>
+
+<div class="tab-content">
+    <div id="postByYear" class="tab-pane active">
+        
+        
+        
+          
+          
+            <h2 id="2017" class="archive__subtitle">2017</h2>
+            
+          
+          
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/jira_beginner_guide/" rel="permalink">老司机带你刷任务 - ServiceComb JIRA入门指南
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">ServiceComb JIRA入门指南
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+          
+          
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+          
+          
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/how-to-reform-a-legacy-system/" rel="permalink">最头疼的遗留系统该如何改造?
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+          
+          
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/distributed_saga_3/" rel="permalink">ServiceComb中的数据最终一致性方案 - part 3
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">Saga和其他数据一致性解决方案相比有什么不同之处?
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+          
+          
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/distributed_saga_2/" rel="permalink">ServiceComb中的数据最终一致性方案 - part 2
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">ServiceComb中的分布式Saga设计
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+          
+          
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/performance-test-on-seckill-with-jmeter/" rel="permalink">使用JMeter对秒杀示例进行性能测试
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">介绍如何使用JMeter进行性能测试以及获取秒杀示例的性能基线
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+          
+          
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/maven_dependency_management/" rel="permalink">使用maven管理复杂依赖关系的技巧
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">maven dependency management
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+          
+          
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/distributed_saga_1/" rel="permalink">ServiceComb中的数据最终一致性方案 - part 1
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">在微服务场景下的数据一致性问题背景
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+          
+          
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/seckill-development-journey-part-III/" rel="permalink">秒杀开发历程(三)
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">介绍如何一步一步构建秒杀项目的过程
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+          
+          
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/seckill-development-journey-part-II/" rel="permalink">秒杀开发历程(二)
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">介绍如何一步一步构建秒杀项目的过程
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+          
+          
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/seckill-development-journey-part-I/" rel="permalink">秒杀开发历程(一)
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">介绍如何一步一步构建秒杀项目的过程
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+          
+          
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/stress-test-on-company-with-jmeter-in-k8s/" rel="permalink">在Kubernetes集群中使用JMeter对Company示例进行压力测试
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">介绍如何在Kubernetes集群上使用JMeter进行压力测试
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+          
+          
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/autoscale-on-company/" rel="permalink">微服务化后的按需精细化资源控制
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">本篇将介绍使用kubernetes的弹性伸缩能力在微服务化的Company中实现按需精细化资源控制的实践
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+          
+          
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/company-on-kubernetes/" rel="permalink">在kubernetes上一键式部署company
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">本篇将介绍在kubernetes集群中一键式部署基于ServiceComb开发的company示例
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+          
+          
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/communication-btw-sc-ms/" rel="permalink">Communication Between Service-Center and MicroServices
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction of how service-center and microservices work together
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+          
+          
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/tracing-with-servicecomb/" rel="permalink">基于 ServiceComb 和 Zipkin 的分布式调用链追踪
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">本篇将介绍如何使用 ServiceComb 和 Zipkin 实现分布式调用链追踪
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+          
+          
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/go-to-cloud/" rel="permalink">单体应用利用ServiceComb实现微服务化和云化之路
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">该文档演示:从已有基于spring boot的单体应用利用ServiceComb实现微服务化和云化之路
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+          
+          
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/linuxcon-workshop-demo/" rel="permalink">Linux Con Workshop Demo
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">A step by step guide on how to use ServiceComb to develop a complete project
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  6 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+    </div>
+    <div id="postByTag" class="tab-pane fade">
+        
+        <!--
+# Jekyll Group-By-Array 0.1.0
+# https://github.com/mushishi78/jekyll-group-by-array
+# © 2015 Max White <mu...@gmail.com>
+# MIT License
+-->
+
+<!-- Initialize -->
+
+
+
+
+<!-- Map -->
+
+
+<!-- Flatten -->
+
+
+<!-- Uniq -->
+
+
+
+<!-- If not equal to previous then it must be unique as sorted -->
+
+
+<!-- Push to group_names -->
+
+
+
+
+
+
+<!-- If not equal to previous then it must be unique as sorted -->
+
+
+<!-- Push to group_names -->
+
+
+
+
+
+
+<!-- If not equal to previous then it must be unique as sorted -->
+
+
+
+
+
+<!-- If not equal to previous then it must be unique as sorted -->
+
+
+<!-- Push to group_names -->
+
+
+
+
+
+
+<!-- If not equal to previous then it must be unique as sorted -->
+
+
+<!-- Push to group_names -->
+
+
+
+
+
+
+<!-- If not equal to previous then it must be unique as sorted -->
+
+
+<!-- Push to group_names -->
+
+
+
+
+
+
+<!-- If not equal to previous then it must be unique as sorted -->
+
+
+<!-- Push to group_names -->
+
+
+
+
+
+
+<!-- If not equal to previous then it must be unique as sorted -->
+
+
+<!-- Push to group_names -->
+
+
+
+
+
+
+<!-- If not equal to previous then it must be unique as sorted -->
+
+
+
+
+
+<!-- If not equal to previous then it must be unique as sorted -->
+
+
+<!-- Push to group_names -->
+
+
+
+
+
+
+<!-- If not equal to previous then it must be unique as sorted -->
+
+
+<!-- Push to group_names -->
+
+
+
+
+
+
+<!-- If not equal to previous then it must be unique as sorted -->
+
+
+<!-- Push to group_names -->
+
+
+
+
+
+
+<!-- If not equal to previous then it must be unique as sorted -->
+
+
+
+
+
+<!-- If not equal to previous then it must be unique as sorted -->
+
+
+<!-- Push to group_names -->
+
+
+
+
+
+
+<!-- If not equal to previous then it must be unique as sorted -->
+
+
+<!-- Push to group_names -->
+
+
+
+
+
+
+<!-- If not equal to previous then it must be unique as sorted -->
+
+
+<!-- Push to group_names -->
+
+
+
+
+
+
+<!-- If not equal to previous then it must be unique as sorted -->
+
+
+<!-- Push to group_names -->
+
+
+
+
+
+
+<!-- If not equal to previous then it must be unique as sorted -->
+
+
+
+
+
+<!-- If not equal to previous then it must be unique as sorted -->
+
+
+
+
+
+<!-- If not equal to previous then it must be unique as sorted -->
+
+
+<!-- Push to group_names -->
+
+
+
+
+
+
+<!-- If not equal to previous then it must be unique as sorted -->
+
+
+<!-- Push to group_names -->
+
+
+
+
+
+
+
+<!-- group_items -->
+
+
+<!-- Collect if contains -->
+
+
+
+<!-- Push to group_items -->
+
+
+
+<!-- Collect if contains -->
+
+
+
+<!-- Push to group_items -->
+
+
+
+<!-- Collect if contains -->
+
+
+
+<!-- Push to group_items -->
+
+
+
+<!-- Collect if contains -->
+
+
+
+<!-- Push to group_items -->
+
+
+
+<!-- Collect if contains -->
+
+
+
+<!-- Push to group_items -->
+
+
+
+<!-- Collect if contains -->
+
+
+
+<!-- Push to group_items -->
+
+
+
+<!-- Collect if contains -->
+
+
+
+<!-- Push to group_items -->
+
+
+
+<!-- Collect if contains -->
+
+
+
+<!-- Push to group_items -->
+
+
+
+<!-- Collect if contains -->
+
+
+
+<!-- Push to group_items -->
+
+
+
+<!-- Collect if contains -->
+
+
+
+<!-- Push to group_items -->
+
+
+
+<!-- Collect if contains -->
+
+
+
+<!-- Push to group_items -->
+
+
+
+<!-- Collect if contains -->
+
+
+
+<!-- Push to group_items -->
+
+
+
+<!-- Collect if contains -->
+
+
+
+<!-- Push to group_items -->
+
+
+
+<!-- Collect if contains -->
+
+
+
+<!-- Push to group_items -->
+
+
+
+<!-- Collect if contains -->
+
+
+
+<!-- Push to group_items -->
+
+
+
+<!-- Collect if contains -->
+
+
+
+<!-- Push to group_items -->
+
+
+
+        
+          
+          <h2 id="jmeter" class="archive__subtitle">jmeter</h2>
+          
+            
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/stress-test-on-company-with-jmeter-in-k8s/" rel="permalink">在Kubernetes集群中使用JMeter对Company示例进行压力测试
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">介绍如何在Kubernetes集群上使用JMeter进行压力测试
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+          
+        
+          
+          <h2 id="kubernetes" class="archive__subtitle">kubernetes</h2>
+          
+            
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/autoscale-on-company/" rel="permalink">微服务化后的按需精细化资源控制
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">本篇将介绍使用kubernetes的弹性伸缩能力在微服务化的Company中实现按需精细化资源控制的实践
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+          
+            
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/company-on-kubernetes/" rel="permalink">在kubernetes上一键式部署company
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">本篇将介绍在kubernetes集群中一键式部署基于ServiceComb开发的company示例
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+          
+        
+          
+          <h2 id="maven" class="archive__subtitle">maven</h2>
+          
+            
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/maven_dependency_management/" rel="permalink">使用maven管理复杂依赖关系的技巧
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">maven dependency management
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+          
+        
+          
+          <h2 id="seckill" class="archive__subtitle">seckill</h2>
+          
+            
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/performance-test-on-seckill-with-jmeter/" rel="permalink">使用JMeter对秒杀示例进行性能测试
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">介绍如何使用JMeter进行性能测试以及获取秒杀示例的性能基线
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+          
+        
+          
+          <h2 id="service-center" class="archive__subtitle">service center</h2>
+          
+            
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+          
+        
+          
+          <h2 id="zipkin" class="archive__subtitle">zipkin</h2>
+          
+            
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/tracing-with-servicecomb/" rel="permalink">基于 ServiceComb 和 Zipkin 的分布式调用链追踪
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">本篇将介绍如何使用 ServiceComb 和 Zipkin 实现分布式调用链追踪
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+          
+        
+          
+          <h2 id="事务一致性" class="archive__subtitle">事务一致性</h2>
+          
+            
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/distributed_saga_3/" rel="permalink">ServiceComb中的数据最终一致性方案 - part 3
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">Saga和其他数据一致性解决方案相比有什么不同之处?
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+          
+            
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/distributed_saga_2/" rel="permalink">ServiceComb中的数据最终一致性方案 - part 2
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">ServiceComb中的分布式Saga设计
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+          
+        
+          
+          <h2 id="分布式追踪" class="archive__subtitle">分布式追踪</h2>
+          
+            
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/tracing-with-servicecomb/" rel="permalink">基于 ServiceComb 和 Zipkin 的分布式调用链追踪
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">本篇将介绍如何使用 ServiceComb 和 Zipkin 实现分布式调用链追踪
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+          
+        
+          
+          <h2 id="华为云" class="archive__subtitle">华为云</h2>
+          
+            
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/go-to-cloud/" rel="permalink">单体应用利用ServiceComb实现微服务化和云化之路
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">该文档演示:从已有基于spring boot的单体应用利用ServiceComb实现微服务化和云化之路
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+          
+        
+          
+          <h2 id="压力测试" class="archive__subtitle">压力测试</h2>
+          
+            
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/performance-test-on-seckill-with-jmeter/" rel="permalink">使用JMeter对秒杀示例进行性能测试
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">介绍如何使用JMeter进行性能测试以及获取秒杀示例的性能基线
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+          
+            
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/stress-test-on-company-with-jmeter-in-k8s/" rel="permalink">在Kubernetes集群中使用JMeter对Company示例进行压力测试
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">介绍如何在Kubernetes集群上使用JMeter进行压力测试
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+          
+        
+          
+          <h2 id="弹性伸缩" class="archive__subtitle">弹性伸缩</h2>
+          
+            
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/autoscale-on-company/" rel="permalink">微服务化后的按需精细化资源控制
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">本篇将介绍使用kubernetes的弹性伸缩能力在微服务化的Company中实现按需精细化资源控制的实践
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+          
+        
+          
+          <h2 id="服务中心" class="archive__subtitle">服务中心</h2>
+          
+            
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/communication-btw-sc-ms/" rel="permalink">Communication Between Service-Center and MicroServices
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction of how service-center and microservices work together
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+          
+        
+          
+          <h2 id="示例" class="archive__subtitle">示例</h2>
+          
+            
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/linuxcon-workshop-demo/" rel="permalink">Linux Con Workshop Demo
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">A step by step guide on how to use ServiceComb to develop a complete project
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  6 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+          
+        
+          
+          <h2 id="秒杀" class="archive__subtitle">秒杀</h2>
+          
+            
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/seckill-development-journey-part-III/" rel="permalink">秒杀开发历程(三)
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">介绍如何一步一步构建秒杀项目的过程
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+          
+            
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/seckill-development-journey-part-II/" rel="permalink">秒杀开发历程(二)
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">介绍如何一步一步构建秒杀项目的过程
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+          
+            
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/seckill-development-journey-part-I/" rel="permalink">秒杀开发历程(一)
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">介绍如何一步一步构建秒杀项目的过程
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+          
+        
+          
+          <h2 id="系统改造" class="archive__subtitle">系统改造</h2>
+          
+            
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/how-to-reform-a-legacy-system/" rel="permalink">最头疼的遗留系统该如何改造?
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+          
+        
+          
+          <h2 id="部署" class="archive__subtitle">部署</h2>
+          
+            
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/company-on-kubernetes/" rel="permalink">在kubernetes上一键式部署company
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">本篇将介绍在kubernetes集群中一键式部署基于ServiceComb开发的company示例
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+          
+        
+    </div>
+</div>
+
+  </div>
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _pages/cn/year-archive.html">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_pages/cn/year-archive.html">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/developers/index.html
----------------------------------------------------------------------
diff --git a/content/developers/index.html b/content/developers/index.html
new file mode 100644
index 0000000..3c8fb8f
--- /dev/null
+++ b/content/developers/index.html
@@ -0,0 +1,460 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>开发者指南 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="开发者指南">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="开发者指南">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/developers/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/developers/">
+
+
+
+  <meta property="og:description" content="开发者指南">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="开发者指南">
+  <meta name="twitter:description" content="开发者指南">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/developers/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          
+          
+
+          <a href="/developers/"><span class="nav__sub-title nav__sub-title-with-url">Developer Guide</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/developers/setup-develop-environment/"><span class="nav__sub-title nav__sub-title-with-url">Develop Environment Setup</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/developers/submit-codes/"><span class="nav__sub-title nav__sub-title-with-url">Code Submit Guide</span></a>
+        
+
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="开发者指南">
+    <meta itemprop="description" content="开发者指南">
+    
+    <meta itemprop="dateModified" content="June 24, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">开发者指南
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <p><strong>ServiceComb</strong> 项目托管在<a href="https://github.com/ServiceComb">Github</a>上,其各子项目如下表所示:</p>
+
+<table>
+  <thead>
+    <tr>
+      <th>项目名</th>
+      <th>项目简介</th>
+      <th>编程语言</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td><a href="https://github.com/ServiceComb/ServiceComb-Java-Chassis">Java Chassis</a></td>
+      <td>Java微服务框架(SDK)</td>
+      <td>Java</td>
+    </tr>
+    <tr>
+      <td><a href="https://github.com/ServiceComb/service-center">Service Center</a></td>
+      <td>服务中心(服务注册及发现)</td>
+      <td>Go</td>
+    </tr>
+    <tr>
+      <td><a href="https://github.com/ServiceComb/saga">Saga</a></td>
+      <td>微服务数据最终一致性实现</td>
+      <td>Java</td>
+    </tr>
+    <tr>
+      <td><a href="https://github.com/ServiceComb/ServiceComb.github.io">ServiceComb.github.io</a></td>
+      <td>ServiceComb网站</td>
+      <td>Markdown</td>
+    </tr>
+  </tbody>
+</table>
+
+<p>参与 ServiceComb 项目并为其作出贡献的方法有很多:代码实现、测试编写、流程工具改进、文档完善等。您可以选择上述任何一个或多个感兴趣的项目进行贡献。具体贡献事宜可参考以下指南:</p>
+
+<ul>
+  <li><a href="/developers/setup-develop-environment/">开发环境准备</a>:主要介绍git,JDK,Maven以及IDE的安装及配置。</li>
+  <li><a href="/developers/submit-codes/">代码提交指南</a>:主要介绍功能特性需求及现有bug的获取途径,提交代码前的测试事宜,如何提交PR以及如何解决冲突等。</li>
+</ul>
+
+<p>同时,也欢迎您加入<a href="https://groups.google.com/forum/#!forum/servicecomb-developers">ServiceComb开发者群组</a>了解 ServiceComb 项目的开发动态以及进行话题讨论。</p>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _developers/developer-guide.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_developers/developer-guide.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/developers/setup-develop-environment/index.html
----------------------------------------------------------------------
diff --git a/content/developers/setup-develop-environment/index.html b/content/developers/setup-develop-environment/index.html
new file mode 100644
index 0000000..9a9144e
--- /dev/null
+++ b/content/developers/setup-develop-environment/index.html
@@ -0,0 +1,503 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>开发环境准备 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="开发环境准备">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="开发环境准备">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/developers/setup-develop-environment/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/developers/setup-develop-environment/">
+
+
+
+  <meta property="og:description" content="开发环境准备">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="开发环境准备">
+  <meta name="twitter:description" content="开发环境准备">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/developers/setup-develop-environment/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          
+          
+
+          <a href="/developers/"><span class="nav__sub-title nav__sub-title-with-url">Developer Guide</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/developers/setup-develop-environment/"><span class="nav__sub-title nav__sub-title-with-url">Develop Environment Setup</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/developers/submit-codes/"><span class="nav__sub-title nav__sub-title-with-url">Code Submit Guide</span></a>
+        
+
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="开发环境准备">
+    <meta itemprop="description" content="开发环境准备">
+    
+    <meta itemprop="dateModified" content="June 24, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">开发环境准备
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <h2 id="基本环境准备">基本环境准备</h2>
+<p>在您开始前,请确保以下应用已安装:</p>
+<ul>
+  <li><strong>Git</strong>,安装详情可参考<a href="https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git" target="_blank">Git安装教程</a></li>
+  <li><strong>JDK 1.8</strong>,安装详情可参考<a href="https://docs.oracle.com/javase/8/docs/technotes/guides/install/install_overview.html" target="_blank">JDK安装教程</a></li>
+  <li><strong>Maven 3.x</strong>,安装详情可参考<a href="https://maven.apache.org/install.html" target="_blank">Maven安装教程</a></li>
+  <li><strong>Docker</strong>,安装详情可参考<a href="https://docs.docker.com/engine/installation/" target="_blank">Docker 安装教程</a></li>
+  <li><strong>Service Center</strong>, 安装详情可参考<a href="/users/setup-environment/#运行service-center">Service Center安装教程</a></li>
+  <li><strong>IntelliJ Idea IDE</strong>(可选,您可以使用其他心仪的IDE,如eclipse),安装详情可参考<a href="https://www.jetbrains.com/help/idea/installing-and-launching.html" target="_blank">IntelliJ安装教程</a></li>
+</ul>
+
+<h2 id="git配置">Git配置</h2>
+<ol>
+  <li>注册Github。由于ServiceComb的代码是托管在Github上的,所以您需要有一个Github的帐号,可前往 <a href="https://github.com/join?source=header-home">https://github.com/join?source=header-home</a> 进行注册,如您已有Github帐号,则可跳过此步。注册完成后直接在 <a href="https://github.com/login?return_to=%2Fjoin%3Fsource%3Dheader-home">https://github.com/login?return_to=%2Fjoin%3Fsource%3Dheader-home</a> 进行登录即可。</li>
+  <li>
+    <p>配置Git。主要配置Git的个人信息和设置免密码提交代码。个人信息可通过以下指令进行配置:</p>
+
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code>git config --global user.name &lt;your-user-name&gt;
+git config --global user.email &lt;your-email-address&gt;
+</code></pre>
+    </div>
+
+    <p>其中,请将&lt;your-user-name&gt;和&lt;your-email-address&gt;替换为您在Github上注册用到的用户名和邮箱信息。设置免密码提交代码可参考<a href="https://stackoverflow.com/a/8588786" target="_blank">Git免密码提交代码教程</a>。</p>
+  </li>
+  <li>
+    <p>获取项目代码。以 <a href="https://github.com/ServiceComb/ServiceComb-Java-Chassis">ServiceComb-Java-Chassis</a> 项目为例,可直接执行以下指令获取代码:</p>
+
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code>git clone https://github.com/ServiceComb/ServiceComb-Java-Chassis
+</code></pre>
+    </div>
+  </li>
+</ol>
+
+<h2 id="ide-环境配置">IDE 环境配置</h2>
+<p>现有支持Java开发的IDE很多,如Eclipse, IntelliJ IDEA和STS等。我们在此推荐使用IntelliJ IDEA,对于日常开发,其社区版的功能已经足够了。在安装完IntelliJ IDEA后,您可以根据<a href="https://www.jetbrains.com/help/idea/installing-and-launching.html#d325787e291">初始化设置教程</a>对IntelliJ IDEA进行配置,随后可通过阅读<a href="https://www.jetbrains.com/help/idea/keyboard-shortcuts-you-cannot-miss.html">必备快捷键</a>了解常用的快捷键。</p>
+
+<p>Java Chassis和Saga项目使用了<a href="https://github.com/google/styleguide">Google Code Style</a>作为代码风格,配置文件可以在本项目 <code class="highlighter-rouge">etc</code> 目录下找到。其中,目录中也有Eclipse的代码风格,读者可以直接导入使用。</p>
+
+<p><img src="/assets/images/intellij.code.style.3.png" alt="code style files" class="align-center" /></p>
+
+<aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> On This Page</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#基本环境准备" id="markdown-toc-基本环境准备">基本环境准备</a></li>
+  <li><a href="#git配置" id="markdown-toc-git配置">Git配置</a></li>
+  <li><a href="#ide-环境配置" id="markdown-toc-ide-环境配置">IDE 环境配置</a>    <ul>
+      <li><a href="#intellij-idea-配置" id="markdown-toc-intellij-idea-配置">IntelliJ IDEA 配置</a></li>
+    </ul>
+  </li>
+  <li><a href="#下一步" id="markdown-toc-下一步">下一步</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<h3 id="intellij-idea-配置">IntelliJ IDEA 配置</h3>
+<p><a href="https://www.jetbrains.com/idea/download/">IntelliJ IDEA</a>的配置方法如下</p>
+
+<ol>
+  <li>
+    <p>打开IntelliJ配置
+<img src="/assets/images/intellij.code.style.4.png" alt="IntelliJ Settings" class="align-center" /></p>
+  </li>
+  <li>
+    <p>Import 配置文件 <code class="highlighter-rouge">etc/intellij-java-google-style.xml</code>
+<img src="/assets/images/intellij.code.style.1.png" alt="import code style" class="align-center" /></p>
+  </li>
+  <li>
+    <p>打开已修改而未提交的文件,并打开格式化文件对话框
+<img src="/assets/images/intellij.code.style.5.png" alt="reformat file dialog" class="align-center" /></p>
+  </li>
+  <li>
+    <p>选择只格式化修改部分
+<img src="/assets/images/intellij.code.style.2.png" alt="reformat options" class="align-center" /></p>
+  </li>
+</ol>
+
+<p>配置完成后,后续按快捷键 (Ctrl+Alt+i) 格式化修改文件即可。更多关于IntelliJ的使用技巧可阅读<a href="https://www.jetbrains.com/help/idea/tutorials.html">IntelliJ教程</a>。</p>
+
+<h2 id="下一步">下一步</h2>
+
+<ul>
+  <li>阅读<a href="/developers/submit-codes/">代码提交指南</a></li>
+</ul>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _developers/setup-develop-environment.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_developers/setup-develop-environment.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>


[43/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/docs/company-on-kubernetes/index.html
----------------------------------------------------------------------
diff --git a/content/cn/docs/company-on-kubernetes/index.html b/content/cn/docs/company-on-kubernetes/index.html
new file mode 100644
index 0000000..66b4651
--- /dev/null
+++ b/content/cn/docs/company-on-kubernetes/index.html
@@ -0,0 +1,895 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>在kubernetes上一键式部署company - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="本篇将介绍在kubernetes集群中一键式部署基于ServiceComb开发的company示例">
+
+
+
+
+<meta name="author" content="Zen Lin">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="在kubernetes上一键式部署company">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/company-on-kubernetes/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/company-on-kubernetes/">
+
+
+
+  <meta property="og:description" content="本篇将介绍在kubernetes集群中一键式部署基于ServiceComb开发的company示例">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="在kubernetes上一键式部署company">
+  <meta name="twitter:description" content="本篇将介绍在kubernetes集群中一键式部署基于ServiceComb开发的company示例">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+    <meta name="twitter:creator" content="@">
+  
+
+
+
+  
+
+  
+
+
+
+
+
+  <meta property="og:type" content="article">
+  <meta property="article:published_time" content="2017-08-21T00:00:00+08:00">
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/docs/company-on-kubernetes/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+
+<div itemscope itemtype="http://schema.org/Person">
+
+  
+
+  <div class="author__content">
+    <h3 class="author__name" itemprop="name">Zen Lin</h3>
+    
+      <p class="author__bio" itemprop="description">
+	    
+	      
+	        To enjoy in opensource community.
+	      
+	    
+      </p>
+    
+  </div>
+
+  <div class="author__urls-wrapper">
+    <button class="btn btn--inverse">关注</button>
+    <ul class="author__urls social-icons">
+      
+
+      
+        <li>
+          <a href="http://zenlintechnofreak.github.io" itemprop="url">
+            <i class="fa fa-fw fa-chain" aria-hidden="true"></i> 网站
+          </a>
+        </li>
+      
+
+      
+        <li>
+          <a href="mailto:zenlintechnofreak@gmail.com">
+            <meta itemprop="email" content="zenlintechnofreak@gmail.com" />
+            <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> 电子邮箱
+          </a>
+        </li>
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      <!--
+  <li>
+    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs">
+      <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link
+    </a>
+  </li>
+-->
+    </ul>
+  </div>
+</div>
+
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="在kubernetes上一键式部署company">
+    <meta itemprop="description" content="本篇将介绍在kubernetes集群中一键式部署基于ServiceComb开发的company示例">
+    <meta itemprop="datePublished" content="August 21, 2017">
+    
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">在kubernetes上一键式部署company
+</h1>
+            
+              <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  1 分钟 阅读
+
+</p>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <p>  <a href="/cn/docs/linuxcon-workshop-demo/">Linux Con Workshop Demo</a> 博文介绍了如何使用微服务开源开发框架ServiceComb快速开发company示例,将典型的企业级应用company示例进行快速微服务化。</p>
+
+<p>  现在,<a href="https://github.com/ServiceComb/ServiceComb-Company-WorkShop.git">github</a>上已经提供了在kubernetes集群上一键式部署的功能。本文将着重讲解相应的yaml文件和服务间通信,这对于开发者基于Company 模型进行微服务开发并且部署到云上将会有所帮助。</p>
+
+<h2 id="一键部署">一键部署</h2>
+
+<p>  <a href="https://github.com/ServiceComb/ServiceComb-Company-WorkShop/blob/master/kubernetes/README.md">Run Company on Kubernetes Cluster</a> 提供了详细的使用方法,读者只需通过以下3条指令,就可将company在kubernetes集群上部署起来,</p>
+
+<div class="language-shell highlighter-rouge"><pre class="highlight"><code>git clone https://github.com/ServiceComb/ServiceComb-Company-WorkShop.git
+
+<span class="nb">cd </span>ServiceComb-Company-WorkShop/kubernetes/
+
+bash start.sh
+</code></pre>
+</div>
+
+<h2 id="yaml文件解读">Yaml文件解读</h2>
+
+<p>  以作者的实际环境为例:</p>
+
+<div class="language-shell highlighter-rouge"><pre class="highlight"><code><span class="gp">root@zenlin:~/src/LinuxCon-Beijing-WorkShop/kubernetes# </span>kubectl get pod -owide
+NAME                                      READY     STATUS    RESTARTS   AGE       IP            NODE
+company-beekeeper-3737555734-48sxf        1/1       Running   0          17s       10.244.2.49   zenlinnode2
+company-bulletin-board-4113647782-th91w   1/1       Running   0          17s       10.244.1.53   zenlinnode1
+company-doorman-3391375245-g0p8c          1/1       Running   0          17s       10.244.1.55   zenlinnode1
+company-manager-454733969-0c1g8           1/1       Running   0          16s       10.244.2.50   zenlinnode2
+company-worker-1085546725-x7zl4           1/1       Running   0          17s       10.244.1.54   zenlinnode1
+zipkin-508217170-0khr3                    1/1       Running   0          17s       10.244.2.48   zenlinnode2
+</code></pre>
+</div>
+
+<p>  可以看到,一共启动了6个pod,分别为,公司经理(company-manager)、门卫(company-doorman)、公告栏(company-bulletin-board)、技工(company-worker)、养蜂人(company-beekeeper)、调用链跟踪(zipkin),K8S集群分别为他们分配对应的集群IP。</p>
+
+<div class="language-bash highlighter-rouge"><pre class="highlight"><code><span class="gp">root@zenlin:~/src/LinuxCon-Beijing-WorkShop/kubernetes# </span>kubectl get svc -owide
+NAME                     CLUSTER-IP      EXTERNAL-IP   PORT<span class="o">(</span>S<span class="o">)</span>          AGE       SELECTOR
+company-bulletin-board   10.99.70.46     &lt;none&gt;        30100/TCP        12m       io.kompose.service<span class="o">=</span>company-bulletin-board
+company-manager          10.100.61.227   &lt;nodes&gt;       8083:30301/TCP   12m       io.kompose.service<span class="o">=</span>company-manager
+zipkin                   10.104.92.198   &lt;none&gt;        9411/TCP         12m       io.kompose.service<span class="o">=</span>zipkin
+</code></pre>
+</div>
+
+<p>  仅启动了3个service,调用链跟踪(zipkin)、公告栏(company-bulletin-board)以及经理(company-manager),这是因为,调用链跟踪和公告栏需要在集群内被其他服务通过域名来调用,而经理需要作为对外作为网关,统一暴露服务端口。</p>
+
+<p>  查看company-bulletin-board-service.yaml文件,</p>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code>    <span class="s">apiVersion</span><span class="pi">:</span> <span class="s">v1</span>
+    <span class="s">kind</span><span class="pi">:</span> <span class="s">Service</span>
+    <span class="s">metadata</span><span class="pi">:</span>
+      <span class="s">creationTimestamp</span><span class="pi">:</span> <span class="s">null</span>
+      <span class="s">labels</span><span class="pi">:</span>
+<span class="err">    	</span><span class="s">io.kompose.service</span><span class="pi">:</span> <span class="s">company-bulletin-board</span>
+      <span class="s">name</span><span class="pi">:</span> <span class="s">company-bulletin-board</span>
+    <span class="s">spec</span><span class="pi">:</span>
+      <span class="s">ports</span><span class="pi">:</span>
+<span class="err">    </span><span class="pi">-</span> <span class="s">name</span><span class="pi">:</span> <span class="s2">"</span><span class="s">30100"</span>
+      <span class="s">port</span><span class="pi">:</span> <span class="s">30100</span>
+      <span class="s">targetPort</span><span class="pi">:</span> <span class="s">30100</span>
+        <span class="s">selector</span><span class="pi">:</span>
+      <span class="s">io.kompose.service</span><span class="pi">:</span> <span class="s">company-bulletin-board</span>
+      <span class="s">status</span><span class="pi">:</span>
+        <span class="s">loadBalancer</span><span class="pi">:</span> <span class="pi">{}</span>
+</code></pre>
+</div>
+
+<p>  该文件定义了公告栏对应的service,给service定义了name、port和targetPort,这样通过kubectl expose创建的service会在集群内具备DNS能力,在其他服务刚启动还未注册到公告栏(服务注册发现中心)时,就是使用该能力来访问到公告栏并注册服务的。</p>
+
+<p>  对于label和selector的作用,在一个service启动多个pod的场景下将会非常有用,当某个pod崩溃时,服务的selector将会自动将死亡的pod从endpoints中移除,并且选择新的pod加入到endpoints中。</p>
+
+<p>  查看company-worker-deployment.yaml 文件,</p>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">apiVersion</span><span class="pi">:</span> <span class="s">extensions/v1beta1</span>
+<span class="s">kind</span><span class="pi">:</span> <span class="s">Deployment</span>
+<span class="s">metadata</span><span class="pi">:</span>
+  <span class="s">creationTimestamp</span><span class="pi">:</span> <span class="s">null</span>
+  <span class="s">labels</span><span class="pi">:</span>
+<span class="err">	</span><span class="s">io.kompose.service</span><span class="pi">:</span> <span class="s">company-worker</span>
+  <span class="s">name</span><span class="pi">:</span> <span class="s">company-worker</span>
+<span class="s">spec</span><span class="pi">:</span>
+  <span class="s">replicas</span><span class="pi">:</span> <span class="s">1</span>
+  <span class="s">strategy</span><span class="pi">:</span> <span class="pi">{}</span>
+  <span class="s">template</span><span class="pi">:</span>
+<span class="err">	</span><span class="s">metadata</span><span class="pi">:</span>
+<span class="err">  	</span><span class="s">creationTimestamp</span><span class="pi">:</span> <span class="s">null</span>
+  <span class="err">	</span><span class="s">labels</span><span class="pi">:</span>
+<span class="err">    	</span><span class="s">io.kompose.service</span><span class="pi">:</span> <span class="s">company-worker</span>
+<span class="s">spec</span><span class="pi">:</span>
+  <span class="s">containers</span><span class="pi">:</span>
+  <span class="pi">-</span> <span class="s">env</span><span class="pi">:</span>
+    <span class="pi">-</span> <span class="s">name</span><span class="pi">:</span> <span class="s">ARTIFACT_ID</span>
+      <span class="s">value</span><span class="pi">:</span> <span class="s">worker</span>
+    <span class="pi">-</span> <span class="s">name</span><span class="pi">:</span> <span class="s">JAVA_OPTS</span>
+      <span class="s">value</span><span class="pi">:</span> <span class="s">-Dcse.service.registry.address=http://company-bulletin-board:30100 -Dservicecomb.tracing.collector.adress=http://zipkin:9411</span>
+    <span class="s">image</span><span class="pi">:</span> <span class="s">servicecomb/worker:0.0.1-SNAPSHOT</span>
+    <span class="s">name</span><span class="pi">:</span> <span class="s">company-worker</span>
+    <span class="s">ports</span><span class="pi">:</span>
+    <span class="pi">-</span> <span class="s">containerPort</span><span class="pi">:</span> <span class="s">7070</span>
+    <span class="pi">-</span> <span class="s">containerPort</span><span class="pi">:</span> <span class="s">8080</span>
+    <span class="s">resources</span><span class="pi">:</span> <span class="pi">{}</span>
+  <span class="s">restartPolicy</span><span class="pi">:</span> <span class="s">Always</span>
+<span class="s">status</span><span class="pi">:</span> <span class="pi">{}</span>
+</code></pre>
+</div>
+
+<p>  该yaml文件定义了副本数为1(replicas: 1)的pod,可以通过修改该副本数控制所需启动的pod的副本数量(当然也可以使用K8S的弹性伸缩能力去实现按需动态水平伸缩,弹性伸缩部分将在后面的博文中提供)。前面我们提到过company-bulletin-board具备了DNS的能力,故现在可以通过该Deployment中的env传递cse.service.registry.address的值给pod内的服务使用,如: -Dcse.service.registry.address=http://company-bulletin-board:30100,<a href="https://github.com/kubernetes/kubernetes/blob/master/cluster/addons/dns/README.md">kube-dns</a>将会自动解析该servicename。</p>
+
+<p>  对于kubernetes如何实现服务间通信,可以阅读<a href="https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/">connect-applications-service</a>。</p>
+
+<p>  其他的deployment.yaml以及service.yaml都跟以上大同小异,唯一例外的是company-manager服务,我们可以看到在company-manager-service.yaml中看到定义了nodePort,这将使能company-manager对集群外部提供公网IP和服务端口,如下:</p>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">spec</span><span class="pi">:</span>
+  <span class="s">ports</span><span class="pi">:</span>
+  <span class="pi">-</span> <span class="s">name</span><span class="pi">:</span> <span class="s2">"</span><span class="s">8083"</span>
+<span class="err">  	</span><span class="s">port</span><span class="pi">:</span> <span class="s">8083</span>
+  <span class="err">	</span><span class="s">targetPort</span><span class="pi">:</span> <span class="s">8080</span>
+  <span class="err">	</span><span class="s">nodePort</span><span class="pi">:</span> <span class="s">30301</span>
+  <span class="err">	</span><span class="s">protocol</span><span class="pi">:</span> <span class="s">TCP</span>
+  <span class="s">type</span><span class="pi">:</span> <span class="s">NodePort</span>
+</code></pre>
+</div>
+
+<p>  可以通过以下方法获得公网IP和服务端口:</p>
+
+<div class="language-shell highlighter-rouge"><pre class="highlight"><code>kubectl get svc company-manager -o yaml | grep ExternalIP -C 1
+kubectl get svc company-manager -o yaml | grep nodePort -C 1
+</code></pre>
+</div>
+
+<p>  接下来你就可以使用公网IP和服务端口访问已经部署好的company了,在<a href="https://github.com/ServiceComb/ServiceComb-Company-WorkShop/blob/master/kubernetes/README.md">github.com/ServiceComb/ServiceComb-Company-WorkShop/kubernetes</a>上详细提供了通过在集群内访问和集群外访问的方法。</p>
+
+<h2 id="模型归纳">模型归纳</h2>
+
+<p>  通过详细阅读所有的deployment.yaml和service.yaml,可以整理出以下的模型:</p>
+
+<p><img src="/assets/images/kubernetes-company-cn.PNG" alt="kubernetes-company" class="align-center" /></p>
+
+<p>  另外,经典的航空订票系统Acmeair也已经支持在kubernetes上一键式部署基于ServiceComb框架开发的版本,点击访问<a href="https://github.com/WillemJiang/acmeair/tree/master/kubernetes">Run Acmeair on Kubernetes</a>获取 。</p>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+  
+
+
+  
+  
+  
+
+  <p class="page__taxonomy">
+    <strong><i class="fa fa-fw fa-tags" aria-hidden="true"></i> 标签: </strong>
+    <span itemprop="keywords">
+    
+      
+      
+      <a href="/tags/#kubernetes" class="page__taxonomy-item" rel="tag">kubernetes</a><span class="sep">, </span>
+    
+      
+      
+      <a href="/tags/#%E9%83%A8%E7%BD%B2" class="page__taxonomy-item" rel="tag">部署</a>
+    
+    </span>
+  </p>
+
+
+
+
+
+        
+          
+            
+              <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> 最新的:</strong> <time datetime="2017-08-21T00:00:00+08:00">2017年8月21日</time></p>
+            
+          
+        
+      </footer>
+
+      <section class="page__share">
+  
+    <h4 class="page__share-title">分享</h4>
+  
+
+  <a href="https://twitter.com/intent/tweet?via=ServiceComb&text=在kubernetes上一键式部署company /cn/docs/company-on-kubernetes/" class="btn btn--twitter" title="分享 Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
+
+  <a href="https://www.facebook.com/sharer/sharer.php?u=/cn/docs/company-on-kubernetes/" class="btn btn--facebook" title="分享 Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
+
+  <a href="https://plus.google.com/share?url=/cn/docs/company-on-kubernetes/" class="btn btn--google-plus" title="分享 Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
+
+  <a href="https://www.linkedin.com/shareArticle?mini=true&url=/cn/docs/company-on-kubernetes/" class="btn btn--linkedin" title="分享 LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
+</section>
+
+
+      
+  <nav class="pagination">
+    
+      <a href="/docs/company-on-kubernetes/" class="pagination--pager" title="One-click Deployment at Kubernetes
+">向前</a>
+    
+    
+      <a href="/docs/autoscale-on-company/" class="pagination--pager" title="On-demand Resource Control for Micro-serviced Company by Autoscale
+">向后</a>
+    
+  </nav>
+
+
+    </div>
+
+    
+      <div class="page__comments">
+  
+  
+    <section id="static-comments">
+      
+        <!-- Start static comments -->
+        <div class="js-comments">
+          
+        </div>
+        <!-- End static comments -->
+
+        <!-- Start new comment form -->
+        <h4 class="page__comments-title">留下评论</h4>
+        <p class="small">您的电子邮箱地址并不会被展示。请填写标记为必须的字段。 <span class="required">*</span></p>
+        <form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/ServiceComb/servicesomb.github.io/master">
+          <div class="form__spinner">
+            <i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
+            <span class="sr-only">正在加载...</span>
+          </div>
+
+          <fieldset>
+            <label for="comment-form-message">评论 <small class="required">*</small></label>
+            <textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
+            <div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">Markdown语法已支持。</a></div>
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-name">姓名 <small class="required">*</small></label>
+            <input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-email">电子邮箱 <small class="required">*</small></label>
+            <input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-url">网站(可选)</label>
+            <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
+          </fieldset>
+          <fieldset class="hidden" style="display: none;">
+            <input type="hidden" name="options[slug]" value="company-on-kubernetes">
+            <label for="comment-form-location">Not used. Leave blank if you are a human.</label>
+            <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
+          </fieldset>
+          <!-- Start comment form alert messaging -->
+          <p class="hidden js-notice">
+            <strong class="js-notice-text"></strong>
+          </p>
+          <!-- End comment form alert messaging -->
+          <fieldset>
+            <button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--large">提交评论</button>
+          </fieldset>
+        </form>
+        <!-- End new comment form -->
+      
+    </section>
+  
+</div>
+
+    
+  </article>
+
+  
+  
+    <div class="page__related">
+      <h4 class="page__related-title">猜您还喜欢</h4>
+      <div class="grid__wrapper">
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/jira_beginner_guide/" rel="permalink">老司机带你刷任务 - ServiceComb JIRA入门指南
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">ServiceComb JIRA入门指南
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/how-to-reform-a-legacy-system/" rel="permalink">最头疼的遗留系统该如何改造?
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+      </div>
+    </div>
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _posts/cn/2017-08-21-company-on-kubernetes.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_posts/cn/2017-08-21-company-on-kubernetes.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  
+  <script>
+    (function ($) {
+    var $comments = $('.js-comments');
+
+    $('#new_comment').submit(function () {
+      var form = this;
+
+      $(form).addClass('disabled');
+      $('#comment-form-submit').html('<i class="fa fa-spinner fa-spin fa-fw"></i> 正在加载...');
+
+      $.ajax({
+        type: $(this).attr('method'),
+        url: $(this).attr('action'),
+        data: $(this).serialize(),
+        contentType: 'application/x-www-form-urlencoded',
+        success: function (data) {
+          $('#comment-form-submit').html('已提交');
+          $('.page__comments-form .js-notice').removeClass('notice--danger');
+          $('.page__comments-form .js-notice').addClass('notice--success');
+          showAlert('感谢您的评论!被批准后它会立即在此站点展示。');
+        },
+        error: function (err) {
+          console.log(err);
+          $('#comment-form-submit').html('提交评论');
+          $('.page__comments-form .js-notice').removeClass('notice--success');
+          $('.page__comments-form .js-notice').addClass('notice--danger');
+          showAlert('很抱歉,您的提交存在错误。请确保所有必填字段都已填写正确,然后再试一次。');
+          $(form).removeClass('disabled');
+        }
+      });
+
+      return false;
+    });
+
+    function showAlert(message) {
+      $('.page__comments-form .js-notice').removeClass('hidden');
+      $('.page__comments-form .js-notice-text').html(message);
+    }
+  })(jQuery);
+  </script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/docs/distributed_saga_1/index.html
----------------------------------------------------------------------
diff --git a/content/cn/docs/distributed_saga_1/index.html b/content/cn/docs/distributed_saga_1/index.html
new file mode 100644
index 0000000..201cd1d
--- /dev/null
+++ b/content/cn/docs/distributed_saga_1/index.html
@@ -0,0 +1,880 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>ServiceComb中的数据最终一致性方案 - part 1 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="在微服务场景下的数据一致性问题背景">
+
+
+
+
+<meta name="author" content="Sean Yin">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="ServiceComb中的数据最终一致性方案 - part 1">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/distributed_saga_1/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/distributed_saga_1/">
+
+
+
+  <meta property="og:description" content="在微服务场景下的数据一致性问题背景">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="ServiceComb中的数据最终一致性方案 - part 1">
+  <meta name="twitter:description" content="在微服务场景下的数据一致性问题背景">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+    <meta name="twitter:creator" content="@seanyinx">
+  
+
+
+
+  
+
+  
+
+
+
+
+
+  <meta property="og:type" content="article">
+  <meta property="article:published_time" content="2017-09-13T00:00:00+08:00">
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/docs/distributed_saga_1/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+
+<div itemscope itemtype="http://schema.org/Person">
+
+  
+
+  <div class="author__content">
+    <h3 class="author__name" itemprop="name">Sean Yin</h3>
+    
+      <p class="author__bio" itemprop="description">
+	    
+	      
+	        Nothing but speed is indestructible
+	      
+	    
+      </p>
+    
+  </div>
+
+  <div class="author__urls-wrapper">
+    <button class="btn btn--inverse">关注</button>
+    <ul class="author__urls social-icons">
+      
+
+      
+        <li>
+          <a href="http://seanyinx.github.io" itemprop="url">
+            <i class="fa fa-fw fa-chain" aria-hidden="true"></i> 网站
+          </a>
+        </li>
+      
+
+      
+        <li>
+          <a href="mailto:seanyinx@gmail.com">
+            <meta itemprop="email" content="seanyinx@gmail.com" />
+            <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> 电子邮箱
+          </a>
+        </li>
+      
+
+      
+
+      
+        <li>
+          <a href="https://twitter.com/seanyinx" itemprop="sameAs">
+            <i class="fa fa-fw fa-twitter-square" aria-hidden="true"></i> Twitter
+          </a>
+        </li>
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      <!--
+  <li>
+    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs">
+      <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link
+    </a>
+  </li>
+-->
+    </ul>
+  </div>
+</div>
+
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="ServiceComb中的数据最终一致性方案 - part 1">
+    <meta itemprop="description" content="在微服务场景下的数据一致性问题背景">
+    <meta itemprop="datePublished" content="September 13, 2017">
+    <meta itemprop="dateModified" content="September 13, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">ServiceComb中的数据最终一致性方案 - part 1
+</h1>
+            
+              <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <p>数据一致性是许多系统的关键部分,特别是在微服务和云的环境下。我们最近在ServiceComb下发布了<a href="https://github.com/ServiceComb/saga">Saga</a>项目,
+以解决数据一致性问题。但为什么数据一致性如此重要?Saga又是什么?</p>
+
+<h2 id="单体应用的数据一致性">单体应用的数据一致性</h2>
+<p>想象一下如果我们经营着一家大型企业,下属有航空公司、租车公司、和连锁酒店。我们为客户提供一站式的旅游行程规划服务,这样客户只需要提供出行目的地,
+我们帮助客户预订机票、租车、以及预订酒店。从业务的角度,我们必须保证<strong>上述三个服务的预订都完成才能满足一个成功的旅游行程,否则不能成行</strong>。</p>
+
+<p>我们的单体应用要满足这个需求非常简单,只需将这个三个服务请求放到同一个数据库事务中,数据库会帮我们保证全部成功或者全部回滚。</p>
+
+<p><img src="/assets/images/saga.monolithic.png" alt="单体应用" class="align-center" /></p>
+
+<p>当这个功能上线以后,公司非常满意,客户也非常高兴。</p>
+
+<h2 id="微服务场景下的数据一致性">微服务场景下的数据一致性</h2>
+<p>这几年中,我们的行程规划服务非常成功,企业蒸蒸日上,用户量也翻了数十倍。企业的下属航空公司、租车公司、和连锁酒店也相继推出了更多服务以满足客户需求,
+我们的应用和开发团队也因此日渐庞大。如今我们的单体应用已变得如此复杂,以至于没人了解整个应用是怎么运作的。更糟的是新功能的上线现在需要所有研发团队合作,
+日夜奋战数周才能完成。看着市场占有率每况愈下,公司高层对研发部门越来越不满意。</p>
+
+<p>经过数轮讨论,我们最终决定将庞大的单体应用一分为四:机票预订服务、租车服务、酒店预订服务、和支付服务。服务各自使用自己的数据库,并通过HTTP协议通信。
+负责各服务的团队根据市场需求按照自己的开发节奏发版上线。如今我们面临新的挑战:如何保证最初<strong>三个服务的预订都完成才能满足一个成功的旅游行程,
+否则不能成行</strong>的业务规则?现在服务有各自的边界,而且数据库选型也不尽相同,通过数据库保证数据一致性的方案已不可行。</p>
+
+<p><img src="/assets/images/saga.service.boundary.png" alt="服务边界" class="align-center" /></p>
+
+<h2 id="sagas">Sagas</h2>
+<p>幸运的是我们在互联网找到一篇精彩的<a href="https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf">论文</a>,文中提出的数据一致性解决方案<em>Saga</em>恰好满足我们的业务要求。</p>
+
+<blockquote>
+  <p>Saga是一个长活事务,可被分解成可以交错运行的子事务集合。其中每个子事务都是一个保持数据库一致性的真实事务。[<a href="https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf">1</a>]</p>
+</blockquote>
+
+<p>在我们的业务场景下,一个行程规划的事务就是一个Saga,其中包含四个子事务:机票预订、租车、酒店预订、和支付。</p>
+
+<p><img src="/assets/images/saga.transactions.png" alt="事务" class="align-center" /></p>
+
+<p><a href="http://www.chrisrichardson.net/">Chris Richardson</a>在他的文章<a href="http://microservices.io/patterns/data/saga.html">Pattern: Saga</a>中对Saga有所描述。
+Caitie McCaffrey也在她的<a href="https://www.youtube.com/watch?v=xDuwrtwYHu8">演讲</a>中提到如何在微软的<a href="https://en.wikipedia.org/wiki/Halo_4">光晕 4</a>游戏中如何应用saga解决数据一致性问题。</p>
+
+<h3 id="saga的运行原理">Saga的运行原理</h3>
+<blockquote>
+  <p>Saga中的事务相互关联,应作为(非原子)单位执行。任何未完全执行的Saga是不满足要求的,如果发生,必须得到补偿。要修正未完全执行的部分,
+每个saga子交易T<sub>1</sub>应提供对应补偿事务C<sub>1</sub>[<a href="https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf">1</a>]</p>
+</blockquote>
+
+<p>我们根据上述规则定义以下事务及其相应的事务补偿:</p>
+
+<table>
+  <thead>
+    <tr>
+      <th style="text-align: center">服务</th>
+      <th style="text-align: center">事务</th>
+      <th style="text-align: center">补偿</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td style="text-align: center">机票预订</td>
+      <td style="text-align: center">预订机票</td>
+      <td style="text-align: center">取消预订</td>
+    </tr>
+    <tr>
+      <td style="text-align: center">租车</td>
+      <td style="text-align: center">租车</td>
+      <td style="text-align: center">取消预订</td>
+    </tr>
+    <tr>
+      <td style="text-align: center">酒店预订</td>
+      <td style="text-align: center">预订房间</td>
+      <td style="text-align: center">取消预订</td>
+    </tr>
+    <tr>
+      <td style="text-align: center">支付</td>
+      <td style="text-align: center">支付</td>
+      <td style="text-align: center">退款</td>
+    </tr>
+  </tbody>
+</table>
+
+<blockquote>
+  <p>当每个saga子事务 T<sub>1</sub>, T<sub>2</sub>, …, T<sub>n</sub> 都有对应的补偿定义 C<sub>1</sub>, C<sub>2</sub>, …, C<sub>n-1</sub>, 
+那么saga系统可以保证 [<a href="https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf">1</a>]</p>
+  <ul>
+    <li>子事务序列 T<sub>1</sub>, T<sub>2</sub>, …, T<sub>n</sub>得以完成 (最佳情况)</li>
+    <li>或者序列 T<sub>1</sub>, T<sub>2</sub>, …, T<sub>j</sub>, C<sub>j</sub>, …, C<sub>2</sub>, C<sub>1</sub>, 0 &lt; j &lt; n, 得以完成</li>
+  </ul>
+</blockquote>
+
+<p>换句话说,通过上述定义的事务/补偿,saga保证满足以下业务规则:</p>
+<ul>
+  <li>所有的预订都被执行成功,如果任何一个失败,都会被取消</li>
+  <li>如果最后一步付款失败,所有预订也将被取消</li>
+</ul>
+
+<h3 id="saga的恢复方式">Saga的恢复方式</h3>
+<p><a href="https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf">原论文</a>中描述了两种类型的Saga恢复方式:</p>
+<ul>
+  <li><strong>向后恢复</strong> <em>补偿</em>所有已完成的事务,如果任一子事务失败</li>
+  <li><strong>向前恢复</strong> <em>重试</em>失败的事务,假设每个子事务最终都会成功</li>
+</ul>
+
+<p>显然,向前恢复没有必要提供补偿事务,如果你的业务中,子事务(最终)总会成功,或补偿事务难以定义或不可能,向前恢复更符合你的需求。</p>
+
+<p>理论上补偿事务永不失败,然而,在分布式世界中,服务器可能会宕机,网络可能会失败,甚至数据中心也可能会停电。在这种情况下我们能做些什么?
+最后的手段是提供回退措施,比如人工干预。</p>
+
+<h3 id="使用saga的条件">使用Saga的条件</h3>
+<p>Saga看起来很有希望满足我们的需求。所有长活事务都可以这样做吗?这里有一些限制:</p>
+<ul>
+  <li>Saga只允许两个层次的嵌套,顶级的Saga和简单子事务 [<a href="https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf">1</a>]</li>
+  <li>在外层,全原子性不能得到满足。也就是说,sagas可能会看到其他sagas的部分结果 [<a href="https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf">1</a>]</li>
+  <li>每个子事务应该是独立的原子行为 [2]</li>
+</ul>
+
+<p>在我们的业务场景下,航班预订、租车、酒店预订和付款是自然独立的行为,而且每个事务都可以用对应服务的数据库保证原子操作。</p>
+
+<p>我们在行程规划事务层面也不需要原子性。一个用户可以预订最后一张机票,而后由于信用卡余额不足而被取消。同时另一个用户可能开始会看到已无余票,
+接着由于前者预订被取消,最后一张机票被释放,而抢到最后一个座位并完成行程规划。</p>
+
+<p>补偿也有需考虑的事项:</p>
+<blockquote>
+  <p>补偿事务从语义角度撤消了事务T<sub>i</sub>的行为,但未必能将数据库返回到执行T<sub>i</sub>时的状态。(例如,如果事务触发导弹发射,
+则可能无法撤消此操作)[<a href="https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf">1</a>]</p>
+</blockquote>
+
+<p>但这对我们的业务来说不是问题。其实难以撤消的行为也有可能被补偿。例如,发送电邮的事务可以通过发送解释问题的另一封电邮来补偿。</p>
+
+<h2 id="总结">总结</h2>
+<p>现在我们有了通过Saga来解决数据一致性问题的方案。它允许我们成功地执行所有事务,或在任何事务失败的情况下,补偿已成功的事务。
+虽然Saga不提供<a href="https://en.wikipedia.org/wiki/ACID">ACID</a>保证,但仍适用于许多数据最终一致性的场景。那我们如何设计一个Saga系统?
+让我们在下一篇博文来回答这个问题。</p>
+
+<h2 id="参考">参考</h2>
+<ol>
+  <li><a href="https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf">Original Paper on Sagas</a> by By Hector Garcia-Molina &amp; Kenneth Salem</li>
+  <li>Gifford, David K and James E Donahue, “Coordinating Independent Atomic Actions”, Proceedings of IEEE COMPCON, San Francisco, CA, February, 1985</li>
+  <li>Chris Richardson: http://www.chrisrichardson.net/</li>
+  <li>ServiceComb Saga Project: https://github.com/ServiceComb/saga</li>
+</ol>
+
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+          
+            
+              <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> 最新的:</strong> <time datetime="2017-09-13">2017年9月13日</time></p>
+            
+          
+        
+      </footer>
+
+      <section class="page__share">
+  
+    <h4 class="page__share-title">分享</h4>
+  
+
+  <a href="https://twitter.com/intent/tweet?via=ServiceComb&text=ServiceComb中的数据最终一致性方案 - part 1 /cn/docs/distributed_saga_1/" class="btn btn--twitter" title="分享 Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
+
+  <a href="https://www.facebook.com/sharer/sharer.php?u=/cn/docs/distributed_saga_1/" class="btn btn--facebook" title="分享 Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
+
+  <a href="https://plus.google.com/share?url=/cn/docs/distributed_saga_1/" class="btn btn--google-plus" title="分享 Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
+
+  <a href="https://www.linkedin.com/shareArticle?mini=true&url=/cn/docs/distributed_saga_1/" class="btn btn--linkedin" title="分享 LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
+</section>
+
+
+      
+  <nav class="pagination">
+    
+      <a href="/docs/distributed_saga_1/" class="pagination--pager" title="Eventual Data Consistency Solution in ServiceComb - part 1
+">向前</a>
+    
+    
+      <a href="/cn/docs/maven_dependency_management/" class="pagination--pager" title="使用maven管理复杂依赖关系的技巧
+">向后</a>
+    
+  </nav>
+
+
+    </div>
+
+    
+      <div class="page__comments">
+  
+  
+    <section id="static-comments">
+      
+        <!-- Start static comments -->
+        <div class="js-comments">
+          
+        </div>
+        <!-- End static comments -->
+
+        <!-- Start new comment form -->
+        <h4 class="page__comments-title">留下评论</h4>
+        <p class="small">您的电子邮箱地址并不会被展示。请填写标记为必须的字段。 <span class="required">*</span></p>
+        <form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/ServiceComb/servicesomb.github.io/master">
+          <div class="form__spinner">
+            <i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
+            <span class="sr-only">正在加载...</span>
+          </div>
+
+          <fieldset>
+            <label for="comment-form-message">评论 <small class="required">*</small></label>
+            <textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
+            <div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">Markdown语法已支持。</a></div>
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-name">姓名 <small class="required">*</small></label>
+            <input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-email">电子邮箱 <small class="required">*</small></label>
+            <input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-url">网站(可选)</label>
+            <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
+          </fieldset>
+          <fieldset class="hidden" style="display: none;">
+            <input type="hidden" name="options[slug]" value="saga-background">
+            <label for="comment-form-location">Not used. Leave blank if you are a human.</label>
+            <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
+          </fieldset>
+          <!-- Start comment form alert messaging -->
+          <p class="hidden js-notice">
+            <strong class="js-notice-text"></strong>
+          </p>
+          <!-- End comment form alert messaging -->
+          <fieldset>
+            <button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--large">提交评论</button>
+          </fieldset>
+        </form>
+        <!-- End new comment form -->
+      
+    </section>
+  
+</div>
+
+    
+  </article>
+
+  
+  
+    <div class="page__related">
+      <h4 class="page__related-title">猜您还喜欢</h4>
+      <div class="grid__wrapper">
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/jira_beginner_guide/" rel="permalink">老司机带你刷任务 - ServiceComb JIRA入门指南
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">ServiceComb JIRA入门指南
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/how-to-reform-a-legacy-system/" rel="permalink">最头疼的遗留系统该如何改造?
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+      </div>
+    </div>
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _posts/cn/2017-09-13-saga-background.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_posts/cn/2017-09-13-saga-background.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  
+  <script>
+    (function ($) {
+    var $comments = $('.js-comments');
+
+    $('#new_comment').submit(function () {
+      var form = this;
+
+      $(form).addClass('disabled');
+      $('#comment-form-submit').html('<i class="fa fa-spinner fa-spin fa-fw"></i> 正在加载...');
+
+      $.ajax({
+        type: $(this).attr('method'),
+        url: $(this).attr('action'),
+        data: $(this).serialize(),
+        contentType: 'application/x-www-form-urlencoded',
+        success: function (data) {
+          $('#comment-form-submit').html('已提交');
+          $('.page__comments-form .js-notice').removeClass('notice--danger');
+          $('.page__comments-form .js-notice').addClass('notice--success');
+          showAlert('感谢您的评论!被批准后它会立即在此站点展示。');
+        },
+        error: function (err) {
+          console.log(err);
+          $('#comment-form-submit').html('提交评论');
+          $('.page__comments-form .js-notice').removeClass('notice--success');
+          $('.page__comments-form .js-notice').addClass('notice--danger');
+          showAlert('很抱歉,您的提交存在错误。请确保所有必填字段都已填写正确,然后再试一次。');
+          $(form).removeClass('disabled');
+        }
+      });
+
+      return false;
+    });
+
+    function showAlert(message) {
+      $('.page__comments-form .js-notice').removeClass('hidden');
+      $('.page__comments-form .js-notice-text').html(message);
+    }
+  })(jQuery);
+  </script>
+
+
+
+
+
+
+
+  </body>
+</html>


[37/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/docs/quick-start-advance/flow-control/index.html
----------------------------------------------------------------------
diff --git a/content/cn/docs/quick-start-advance/flow-control/index.html b/content/cn/docs/quick-start-advance/flow-control/index.html
new file mode 100644
index 0000000..f860b09
--- /dev/null
+++ b/content/cn/docs/quick-start-advance/flow-control/index.html
@@ -0,0 +1,538 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>流量控制 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="介绍如何在体质指数应用中使用ServiceComb框架提供的流量控制能力">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="流量控制">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/quick-start-advance/flow-control/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/quick-start-advance/flow-control/">
+
+
+
+  <meta property="og:description" content="介绍如何在体质指数应用中使用ServiceComb框架提供的流量控制能力">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="流量控制">
+  <meta name="twitter:description" content="介绍如何在体质指数应用中使用ServiceComb框架提供的流量控制能力">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/docs/quick-start-advance/flow-control/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/docs/quick-start/"><span class="nav__sub-title nav__sub-title-with-url">快速入门</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/docs/quick-start-bmi/"><span class="nav__sub-title nav__sub-title-with-url">微服务应用快速开发</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/docs/quick-start-advance/"><span class="nav__sub-title nav__sub-title-with-url">微服务开发进阶</span></a>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/docs/quick-start-advance/load-balance/" class="">负载均衡</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/docs/quick-start-advance/flow-control/" class="active">流量控制</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/docs/quick-start-advance/service-management/" class="">服务治理</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/docs/quick-start-advance/distributed-tracing/" class="">分布式调用链追踪</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/docs/quick-start-dataconsistency/"><span class="nav__sub-title nav__sub-title-with-url">数据一致性解决方案</span></a>
+        
+
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="流量控制">
+    <meta itemprop="description" content="介绍如何在体质指数应用中使用ServiceComb框架提供的流量控制能力">
+    
+    <meta itemprop="dateModified" content="September 03, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">流量控制
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> 在本页上</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#前言" id="markdown-toc-前言">前言</a></li>
+  <li><a href="#开启" id="markdown-toc-开启">开启</a></li>
+  <li><a href="#验证" id="markdown-toc-验证">验证</a></li>
+  <li><a href="#下一步" id="markdown-toc-下一步">下一步</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<p>流量控制机制通过控制数据传输速率来避免微服务过载运行。本指南将展示如何在 <em>体质指数</em> 应用中使用 <strong>ServiceComb</strong> 提供的流量控制能力。</p>
+
+<h2 id="前言">前言</h2>
+
+<p>在您进一步阅读之前,请确保您已阅读了<a href="/cn/docs/quick-start-bmi/">微服务应用快速开发指南</a>,并已成功运行体质指数微服务。</p>
+
+<h2 id="开启">开启</h2>
+
+<ol>
+  <li>
+    <p>在 <em>体质指数计算器</em> 的 <code class="highlighter-rouge">pom.xml</code> 文件中添加依赖项:</p>
+
+    <div class="language-xml highlighter-rouge"><pre class="highlight"><code> <span class="nt">&lt;dependency&gt;</span>
+   <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+   <span class="nt">&lt;artifactId&gt;</span>handler-flowcontrol-qps<span class="nt">&lt;/artifactId&gt;</span>
+ <span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p>在 <em>体质指数计算器</em> 的 <code class="highlighter-rouge">microservice.yaml</code> 文件中指明使用流量控制的处理链及指定流控策略:</p>
+
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">cse</span><span class="pi">:</span>
+  <span class="s">handler</span><span class="pi">:</span>
+    <span class="s">chain</span><span class="pi">:</span>
+      <span class="s">Provider</span><span class="pi">:</span>
+        <span class="s">default</span><span class="pi">:</span> <span class="s">qps-flowcontrol-provider</span>
+  <span class="s">flowcontrol</span><span class="pi">:</span>
+    <span class="s">Provider</span><span class="pi">:</span>
+      <span class="s">qps</span><span class="pi">:</span>
+        <span class="s">limit</span><span class="pi">:</span>
+          <span class="s">gateway</span><span class="pi">:</span> <span class="s">1</span>
+</code></pre>
+    </div>
+  </li>
+</ol>
+
+<p>体质指数应用中已配置好了上述配置项,您只需关闭之前运行的 <strong>体质指数计算器</strong>,然后再用以下指令重新运行即可:</p>
+
+<div class="language-bash highlighter-rouge"><pre class="highlight"><code>mvn spring-boot:run -Drun.jvmArguments<span class="o">=</span><span class="s2">"-Dcse.handler.chain.Provider.default=qps-flowcontrol-provider -Dcse.flowcontrol.Provider.qps.limit.gateway=1"</span>
+</code></pre>
+</div>
+
+<h2 id="验证">验证</h2>
+
+<p>访问 <a>http://localhost:8889</a>,在身高和体重的输入框中输入正数,尝试在1秒内多次点击 <em>Submit</em> 按钮,此时就能看到网页由左侧的正常的界面变成了右侧提示由于流控受限而请求被拒的界面。</p>
+
+<p><img src="/assets/images/flow-control-result.png" alt="流量控制效果图" class="align-center" /></p>
+
+<h2 id="下一步">下一步</h2>
+
+<ul>
+  <li>
+    <p>阅读<a href="/cn/docs/quick-start-advance/service-management/">服务治理快速入门</a></p>
+  </li>
+  <li>
+    <p>了解更多<a href="/cn/users/service-configurations/#限流策略">流量控制</a>的使用方式</p>
+  </li>
+</ul>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _docs/cn/flow-control.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_docs/cn/flow-control.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/docs/quick-start-advance/index.html
----------------------------------------------------------------------
diff --git a/content/cn/docs/quick-start-advance/index.html b/content/cn/docs/quick-start-advance/index.html
new file mode 100644
index 0000000..e81452b
--- /dev/null
+++ b/content/cn/docs/quick-start-advance/index.html
@@ -0,0 +1,493 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>微服务开发进阶 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="介绍如何在体质指数应用中使用ServiceComb的处理链能力">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="微服务开发进阶">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/quick-start-advance/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/quick-start-advance/">
+
+
+
+  <meta property="og:description" content="介绍如何在体质指数应用中使用ServiceComb的处理链能力">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="微服务开发进阶">
+  <meta name="twitter:description" content="介绍如何在体质指数应用中使用ServiceComb的处理链能力">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/docs/quick-start-advance/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/docs/quick-start/"><span class="nav__sub-title nav__sub-title-with-url">快速入门</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/docs/quick-start-bmi/"><span class="nav__sub-title nav__sub-title-with-url">微服务应用快速开发</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/docs/quick-start-advance/"><span class="nav__sub-title nav__sub-title-with-url">微服务开发进阶</span></a>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/docs/quick-start-advance/load-balance/" class="">负载均衡</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/docs/quick-start-advance/flow-control/" class="">流量控制</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/docs/quick-start-advance/service-management/" class="">服务治理</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/docs/quick-start-advance/distributed-tracing/" class="">分布式调用链追踪</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/docs/quick-start-dataconsistency/"><span class="nav__sub-title nav__sub-title-with-url">数据一致性解决方案</span></a>
+        
+
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="微服务开发进阶">
+    <meta itemprop="description" content="介绍如何在体质指数应用中使用ServiceComb的处理链能力">
+    
+    <meta itemprop="dateModified" content="September 03, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">微服务开发进阶
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <p>本指南将带您进入<strong>体质指数</strong>微服务应用开发的进阶之旅。在此旅程,您将能学到 <strong>ServiceComb</strong> 框架如何通过处理链保证微服务的可靠性:</p>
+
+<ul>
+  <li>
+    <p><a href="/cn/docs/quick-start-advance/load-balance/">负载均衡</a>。均衡地将请求分发至多个服务实例中处理。</p>
+  </li>
+  <li>
+    <p><a href="/cn/docs/quick-start-advance/flow-control/">流量控制</a>。限制单位时间内访问某个微服务的请求数量。</p>
+  </li>
+  <li>
+    <p><a href="/cn/docs/quick-start-advance/service-management/">服务治理</a>。在微服务应用中隔离异常服务并阻止异常传递。</p>
+  </li>
+  <li>
+    <p><a href="/cn/docs/quick-start-advance/distributed-tracing">分布式追踪</a>。可视化微服务间的数据流转。</p>
+  </li>
+</ul>
+
+<h2 id="下一步">下一步</h2>
+
+<ul>
+  <li>
+    <p>认识 <a href="/cn/users/"><strong>ServiceComb</strong> 微服务开发框架</a></p>
+  </li>
+  <li>
+    <p>通过 <a href="/cn/docs/linuxcon-workshop-demo/">Company应用</a> 更深入地了解微服务开发</p>
+  </li>
+</ul>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _docs/cn/quick-start-advance.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_docs/cn/quick-start-advance.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/docs/quick-start-advance/load-balance/index.html
----------------------------------------------------------------------
diff --git a/content/cn/docs/quick-start-advance/load-balance/index.html b/content/cn/docs/quick-start-advance/load-balance/index.html
new file mode 100644
index 0000000..aade63a
--- /dev/null
+++ b/content/cn/docs/quick-start-advance/load-balance/index.html
@@ -0,0 +1,513 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>负载均衡 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="介绍如何在体质指数应用中使用ServiceComb框架提供的负载均衡能力">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="负载均衡">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/quick-start-advance/load-balance/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/quick-start-advance/load-balance/">
+
+
+
+  <meta property="og:description" content="介绍如何在体质指数应用中使用ServiceComb框架提供的负载均衡能力">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="负载均衡">
+  <meta name="twitter:description" content="介绍如何在体质指数应用中使用ServiceComb框架提供的负载均衡能力">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/docs/quick-start-advance/load-balance/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/docs/quick-start/"><span class="nav__sub-title nav__sub-title-with-url">快速入门</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/docs/quick-start-bmi/"><span class="nav__sub-title nav__sub-title-with-url">微服务应用快速开发</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/docs/quick-start-advance/"><span class="nav__sub-title nav__sub-title-with-url">微服务开发进阶</span></a>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/docs/quick-start-advance/load-balance/" class="active">负载均衡</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/docs/quick-start-advance/flow-control/" class="">流量控制</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/docs/quick-start-advance/service-management/" class="">服务治理</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/docs/quick-start-advance/distributed-tracing/" class="">分布式调用链追踪</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/docs/quick-start-dataconsistency/"><span class="nav__sub-title nav__sub-title-with-url">数据一致性解决方案</span></a>
+        
+
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="负载均衡">
+    <meta itemprop="description" content="介绍如何在体质指数应用中使用ServiceComb框架提供的负载均衡能力">
+    
+    <meta itemprop="dateModified" content="September 03, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">负载均衡
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> 在本页上</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#前言" id="markdown-toc-前言">前言</a></li>
+  <li><a href="#开启" id="markdown-toc-开启">开启</a></li>
+  <li><a href="#验证" id="markdown-toc-验证">验证</a></li>
+  <li><a href="#下一步" id="markdown-toc-下一步">下一步</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<p>当对体质指数计算器进行水平扩展时,需要将请求均衡地分发到多个体质指数计算器上。本指南将展示如何在 <em>体质指数</em> 应用中使用 <strong>ServiceComb</strong> 提供的负载均衡能力。</p>
+
+<h2 id="前言">前言</h2>
+
+<p>在您进一步阅读之前,请确保您已阅读了<a href="/cn/docs/quick-start-bmi/">微服务应用快速开发指南</a>,并已成功运行体质指数微服务。</p>
+
+<h2 id="开启">开启</h2>
+
+<p>默认情况下会使用内置的一个简单的负载均衡的实现,不需要额外的配置。</p>
+
+<h2 id="验证">验证</h2>
+
+<p>对 <em>体质指数计算器</em> 微服务进行水平扩展,使其运行实例数为2,即新增一个运行实例:</p>
+
+<div class="language-bash highlighter-rouge"><pre class="highlight"><code>mvn spring-boot:run -Drun.jvmArguments<span class="o">=</span><span class="s2">"-Dcse.rest.address=0.0.0.0:7778"</span>
+</code></pre>
+</div>
+
+<p>为了便于区分不同的运行实例,在体质指数计算器的实现中新增了返回实例ID和运行时间的接口,详情可查看<a href="https://github.com/ServiceComb/ServiceComb-Java-Chassis/tree/master/samples/bmi/calculator">体质指数计算器的完整实现代码</a>。而为了避免端口冲突,新的实例在另一个端口上运行。</p>
+
+<p>此时点击 <em>Submit</em> 按钮就可以看到如下两个界面中的实例ID交替出现。</p>
+
+<p><img src="/assets/images/load-balance-result.png" alt="负载均衡效果" class="align-center" /></p>
+
+<h2 id="下一步">下一步</h2>
+
+<ul>
+  <li>
+    <p>阅读<a href="/cn/docs/quick-start-advance/flow-control/">流量控制快速入门</a></p>
+  </li>
+  <li>
+    <p>了解更多<a href="/cn/users/service-configurations/#负载均衡策略">负载均衡</a>的使用方式</p>
+  </li>
+</ul>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _docs/cn/load-balance.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_docs/cn/load-balance.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/docs/quick-start-advance/service-management/index.html
----------------------------------------------------------------------
diff --git a/content/cn/docs/quick-start-advance/service-management/index.html b/content/cn/docs/quick-start-advance/service-management/index.html
new file mode 100644
index 0000000..f895c9a
--- /dev/null
+++ b/content/cn/docs/quick-start-advance/service-management/index.html
@@ -0,0 +1,550 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>服务治理 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="介绍如何在体质指数应用中使用ServiceComb提供的服务治理能力">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="服务治理">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/quick-start-advance/service-management/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/quick-start-advance/service-management/">
+
+
+
+  <meta property="og:description" content="介绍如何在体质指数应用中使用ServiceComb提供的服务治理能力">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="服务治理">
+  <meta name="twitter:description" content="介绍如何在体质指数应用中使用ServiceComb提供的服务治理能力">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/docs/quick-start-advance/service-management/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/docs/quick-start/"><span class="nav__sub-title nav__sub-title-with-url">快速入门</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/docs/quick-start-bmi/"><span class="nav__sub-title nav__sub-title-with-url">微服务应用快速开发</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/docs/quick-start-advance/"><span class="nav__sub-title nav__sub-title-with-url">微服务开发进阶</span></a>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/docs/quick-start-advance/load-balance/" class="">负载均衡</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/docs/quick-start-advance/flow-control/" class="">流量控制</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/docs/quick-start-advance/service-management/" class="active">服务治理</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/docs/quick-start-advance/distributed-tracing/" class="">分布式调用链追踪</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/docs/quick-start-dataconsistency/"><span class="nav__sub-title nav__sub-title-with-url">数据一致性解决方案</span></a>
+        
+
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="服务治理">
+    <meta itemprop="description" content="介绍如何在体质指数应用中使用ServiceComb提供的服务治理能力">
+    
+    <meta itemprop="dateModified" content="September 03, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">服务治理
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> 在本页上</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#前言" id="markdown-toc-前言">前言</a></li>
+  <li><a href="#启用" id="markdown-toc-启用">启用</a></li>
+  <li><a href="#验证" id="markdown-toc-验证">验证</a></li>
+  <li><a href="#下一步" id="markdown-toc-下一步">下一步</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<p>服务治理主要用于解决或缓解服务雪崩的情况,即个别微服务表现异常时,系统能对其进行容错处理,从而避免资源的耗尽。本指南将会展示如何在 <em>体质指数</em> 应用中使用 <strong>ServiceComb</strong> 提供的服务治理能力。</p>
+
+<h2 id="前言">前言</h2>
+
+<p>在您进一步阅读之前,请确保您已阅读了<a href="/cn/docs/quick-start-bmi/">微服务应用快速开发指南</a>,并已成功运行体质指数微服务。</p>
+
+<h2 id="启用">启用</h2>
+
+<ol>
+  <li>
+    <p>在 <em>体质指数计算器</em> 的 <code class="highlighter-rouge">pom.xml</code> 文件中添加依赖项:</p>
+
+    <div class="language-xml highlighter-rouge"><pre class="highlight"><code>    <span class="nt">&lt;dependency&gt;</span>
+      <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+      <span class="nt">&lt;artifactId&gt;</span>handler-bizkeeper<span class="nt">&lt;/artifactId&gt;</span>
+    <span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p>在 <em>体质指数计算器</em> 的 <code class="highlighter-rouge">microservice.yaml</code> 文件中指明使用服务治理的处理链及指定熔断和容错策略:</p>
+
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">cse</span><span class="pi">:</span>
+  <span class="s">handler</span><span class="pi">:</span>
+    <span class="s">chain</span><span class="pi">:</span>
+      <span class="s">Provider</span><span class="pi">:</span>
+        <span class="s">default</span><span class="pi">:</span> <span class="s">bizkeeper-provider</span>
+  <span class="s">circuitBreaker</span><span class="pi">:</span>
+    <span class="s">Provider</span><span class="pi">:</span>
+      <span class="s">calculator</span><span class="pi">:</span>
+        <span class="s">requestVolumeThreshold</span><span class="pi">:</span> <span class="s">3</span>
+  <span class="s">fallbackpolicy</span><span class="pi">:</span>
+    <span class="s">Provider</span><span class="pi">:</span>
+      <span class="s">policy</span><span class="pi">:</span> <span class="s">returnnull</span>
+</code></pre>
+    </div>
+  </li>
+</ol>
+
+<p>体质指数应用中已配置好了上述配置项,您只需重新运行 <strong>体质指数计算器</strong>:</p>
+
+<div class="language-bash highlighter-rouge"><pre class="highlight"><code>mvn spring-boot:run -Drun.jvmArguments<span class="o">=</span><span class="s2">"-Dcse.handler.chain.Provider.default=bizkeeper-provider -Dcse.circuitBreaker.Provider.calculator.requestVolumeThreshold=3 -Dcse.fallbackpolicy.Provider.policy=returnnull"</span>
+</code></pre>
+</div>
+
+<h2 id="验证">验证</h2>
+
+<ol>
+  <li>
+    <p>使服务进入熔断状态。访问 <a>http://localhost:8889</a>,在身高或体重的输入框中输入一个负数,连续点击三次或以上 <em>Submit</em> 按钮,此时在网页下方能看到类似左图的界面。</p>
+  </li>
+  <li>
+    <p>验证服务处于熔断状态。在身高和体重的输入框中输入正数,再次点击 <em>Submit</em> 按钮,此时看到的界面依然是类似左图的界面。同时在 <em>体质指数计算器</em> 运行日志也能看到调用不再抛出异常,而是出现类似 <code class="highlighter-rouge">fallback called</code> 的日志。</p>
+  </li>
+  <li>
+    <p>验证服务恢复正常。约15秒后,在身高和体重的输入框中输入正数,点击 <em>Submit</em> 按钮,此时界面显示正常。</p>
+
+    <p><img src="/assets/images/service-management-result.png" alt="服务治理效果" class="align-center" /></p>
+  </li>
+</ol>
+
+<h2 id="下一步">下一步</h2>
+
+<ul>
+  <li>
+    <p>阅读<a href="/cn/docs/quick-start-advance/distributed-tracing/">分布式追踪快速入门指南</a></p>
+  </li>
+  <li>
+    <p>了解更多<a href="/cn/users/service-configurations/">服务治理</a>的使用方式</p>
+  </li>
+</ul>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _docs/cn/service-management.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_docs/cn/service-management.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>


[18/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/docs/go-to-cloud/index.html
----------------------------------------------------------------------
diff --git a/content/docs/go-to-cloud/index.html b/content/docs/go-to-cloud/index.html
new file mode 100644
index 0000000..0c7912b
--- /dev/null
+++ b/content/docs/go-to-cloud/index.html
@@ -0,0 +1,936 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>单体应用利用ServiceComb实现微服务化和云化之路 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="该文档演示:从已有基于spring boot的单体应用利用ServiceComb实现微服务化和云化之路">
+
+
+
+
+<meta name="author" content="Tank Tian">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="单体应用利用ServiceComb实现微服务化和云化之路">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/go-to-cloud/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/go-to-cloud/">
+
+
+
+  <meta property="og:description" content="该文档演示:从已有基于spring boot的单体应用利用ServiceComb实现微服务化和云化之路">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="单体应用利用ServiceComb实现微服务化和云化之路">
+  <meta name="twitter:description" content="该文档演示:从已有基于spring boot的单体应用利用ServiceComb实现微服务化和云化之路">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+    <meta name="twitter:creator" content="@">
+  
+
+
+
+  
+
+  
+
+
+
+
+
+  <meta property="og:type" content="article">
+  <meta property="article:published_time" content="2017-06-24T00:00:00+08:00">
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/docs/go-to-cloud/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+
+<div itemscope itemtype="http://schema.org/Person">
+
+  
+
+  <div class="author__content">
+    <h3 class="author__name" itemprop="name">Tank Tian</h3>
+    
+      <p class="author__bio" itemprop="description">
+	    
+        How lucky we are. To be free.
+	    
+      </p>
+    
+  </div>
+
+  <div class="author__urls-wrapper">
+    <button class="btn btn--inverse">Follow</button>
+    <ul class="author__urls social-icons">
+      
+
+      
+        <li>
+          <a href="https://tanktian.github.io/" itemprop="url">
+            <i class="fa fa-fw fa-chain" aria-hidden="true"></i> Website
+          </a>
+        </li>
+      
+
+      
+        <li>
+          <a href="mailto:chd.tianming@gmail.com">
+            <meta itemprop="email" content="chd.tianming@gmail.com" />
+            <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> Email
+          </a>
+        </li>
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      <!--
+  <li>
+    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs">
+      <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link
+    </a>
+  </li>
+-->
+    </ul>
+  </div>
+</div>
+
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="单体应用利用ServiceComb实现微服务化和云化之路">
+    <meta itemprop="description" content="该文档演示:从已有基于spring boot的单体应用利用ServiceComb实现微服务化和云化之路">
+    <meta itemprop="datePublished" content="June 24, 2017">
+    <meta itemprop="dateModified" content="June 24, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">单体应用利用ServiceComb实现微服务化和云化之路
+</h1>
+            
+              <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  less than 1 minute read
+
+</p>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <h2 id="背景">背景</h2>
+
+<ol>
+  <li>
+    <p>Service Stage:微服务云应用平台,它是面向企业及开发者的一站式DevOps平台服务,支持基于微服务的应用开发、治理、部署及运维监控的全生命周期管理,并提供大规模容器集群管理及中间件服务等平台能力,帮助用户快速构建云分布式应用。</p>
+  </li>
+  <li>
+    <p>本指导以Acmeair demo为例,演示如何使用ServiceComb (华为微服务框架开源版本)实现应用的微服务化,并利用Service Stage云平台上实现应用的云化。</p>
+  </li>
+</ol>
+
+<h2 id="服务化和云化步骤">服务化和云化步骤</h2>
+
+<ul>
+  <li>
+    <p>环境准备:基于Service Stage完成创建集群、添加节点等资源准备工作</p>
+  </li>
+  <li>
+    <p>微服务开发</p>
+
+    <ol>
+      <li>
+        <p>微服务的拆分设计</p>
+      </li>
+      <li>
+        <p>基于ServiceComb框架快速微服务化</p>
+      </li>
+      <li>
+        <p>制作镜像上传Service Stage软件仓库;</p>
+      </li>
+    </ol>
+  </li>
+  <li>
+    <p>应用上线:通过Service Stage从软件仓库获取版本实现部署上线;</p>
+  </li>
+  <li>
+    <p>应用运维:通过Service Stage对微服务或应用进行生命周期管理(部署-启动-上线-升级-扩容-停止-下线-删除)、告警、监控、调用链分析和治理等。</p>
+  </li>
+</ul>
+
+<h2 id="环境准备创建集群添加节点完成节点自动纳管">环境准备:创建集群、添加节点,完成节点自动纳管</h2>
+<h3 id="创建集群">创建集群</h3>
+<p>请参考<a href="http://support.hwclouds.com/usermanual-servicestage/zh-cn_topic_0053496188.html">创建集群详细指导</a><br />
+<img src="/assets/images/create-group.png" alt="create group" class="align-center" /></p>
+
+<h3 id="添加节点">添加节点</h3>
+<p>请参考<a href="http://support.hwclouds.com/usermanual-servicestage/zh-cn_topic_0053443149.html">为集群添加节点详细指导</a> <br />
+<img src="/assets/images/add-node.png" alt="add node" class="align-center" /></p>
+
+<h2 id="微服务开发">微服务开发</h2>
+<h3 id="应用架构设计划分微服务识别服务依赖关系">应用架构设计,划分微服务,识别服务依赖关系</h3>
+<p><img src="/assets/images/micro-service-design.png" alt="micro service design" class="align-center" /></p>
+
+<h3 id="创建微服务-单体应用微服务应用">创建微服务: 单体应用—&gt;微服务应用</h3>
+<p><img src="/assets/images/micro-service-structure.PNG" alt="micro service structure" class="align-center" /></p>
+
+<h3 id="简单4步servicecomb帮你完成微服务化改造">简单4步ServiceComb帮你完成微服务化改造</h3>
+<p>备注:改造完成的Acmeair Demo如何本地运行,如何本地查看运行效果? 请参考下文“Acmeair本地运行”章节。</p>
+<h4 id="step-1-pom引入对servicecomb和service-stage的依赖">Step 1: POM引入对ServiceComb和Service Stage的依赖</h4>
+<p>对ServiceComb的依赖:
+<img src="/assets/images/pom-dependence.png" alt="pom dependence" class="align-center" /></p>
+
+<p>对Service Stage的依赖: <br />
+<img src="/assets/images/huaweicloud_dependencies.png" alt="huaweicloud dependencies" class="align-center" /></p>
+
+<h4 id="step-2-增加微服务描述文件和spring配置文件">Step 2 增加微服务描述文件和spring配置文件</h4>
+<p><img src="/assets/images/config-file.png" alt="config file" class="align-center" /></p>
+
+<h4 id="step-3-引入servicecomb注解一行代码完成服务发布">Step 3: 引入ServiceComb注解一行代码完成服务发布</h4>
+<p><img src="/assets/images/code-adjust.png" alt="code adjust" class="align-center" /></p>
+
+<h4 id="step-4-使用servicecomb接口简单创建resttemplate完成服务消费也支持注解方式进行消费">Step 4: 使用ServiceComb接口简单创建RestTemplate完成服务消费(也支持注解方式进行消费)</h4>
+<p><img src="/assets/images/service-consumer.png" alt="service consumer" class="align-center" /></p>
+
+<h3 id="制作镜像上传到云镜像中心">制作镜像上传到云镜像中心</h3>
+<p>请参考<a href="http://support.hwclouds.com/usermanual-servicestage/zh-cn_topic_0055101643.html">上传镜像详细指导</a><br />
+<img src="/assets/images/image-upload-1.png" alt="image upload 1" class="align-center" /><br />
+<img src="/assets/images/image-upload-2.png" alt="image upload 2" class="align-center" /></p>
+
+<h2 id="应用上线利用应用管理实现部署上线">应用上线:利用应用管理实现部署上线</h2>
+<p>请参考<a href="http://support.hwclouds.com/usermanual-servicestage/user_deployService.html">部署微服务详细指导</a> <br />
+<img src="/assets/images/service-deploy.png" alt="service deploy" class="align-center" /></p>
+
+<h2 id="应用运维保障应用平稳运行">应用运维:保障应用平稳运行</h2>
+<h3 id="微服务调用链分析">微服务调用链分析</h3>
+<p>请参考<a href="http://support.hwclouds.com/usermanual-servicestage/zh-cn_topic_0053555508.html">应用调用分析详细指导</a><br />
+ <img src="/assets/images/service-monitor-1.png" alt="service monitor 1" class="align-center" /></p>
+
+<h3 id="微服务状态监控">微服务状态监控</h3>
+<p>请参考<a href="http://support.hwclouds.com/usermanual-servicestage/zh-cn_topic_0053555506.html">应用监控详细指导</a><br />
+<img src="/assets/images/service-monitor-2.png" alt="service monitor 2" class="align-center" /></p>
+
+<h3 id="按需弹性伸缩">按需弹性伸缩</h3>
+<p>请参考<a href="http://support.hwclouds.com/usermanual-servicestage/zh-cn_topic_0054051691.html">弹性伸缩详细指导</a><br />
+<img src="/assets/images/scaling.png" alt="scaling" class="align-center" /></p>
+
+<h3 id="微服务可视化治理">微服务可视化治理</h3>
+<p>请参考<a href="http://support.hwclouds.com/usermanual-servicestage/zh-cn_topic_0053560172.html">微服务管理详细指导</a><br />
+<img src="/assets/images/governance.png" alt="governance" class="align-center" /></p>
+
+<h1 id="acmeair本地运行">Acmeair本地运行</h1>
+<p>本章节介绍在windows 64位环境下如何本地运行Acmeair</p>
+
+<h2 id="环境准备">环境准备</h2>
+
+<ul>
+  <li>
+    <p>JDK 1.8</p>
+  </li>
+  <li>
+    <p>maven 3.x</p>
+  </li>
+  <li>
+    <p>eclipse</p>
+  </li>
+  <li>
+    <p>service-center</p>
+  </li>
+</ul>
+
+<p>  下载<a href="https://github.com/ServiceComb/service-center/releases">service-center-x.x.x-x-windows-amd64.zip</a>解压到任意目录</p>
+
+<ul>
+  <li>
+    <p>mongodb(可选)</p>
+  </li>
+  <li>
+    <p>下载<a href="https://github.com/TankTian/acmeair/archive/master.zip">acmeair源码</a></p>
+  </li>
+</ul>
+
+<h2 id="导入项目并构建">导入项目并构建</h2>
+<h3 id="将acmeair项目导入eclipse">将acmeair项目导入eclipse</h3>
+<p>Import - - Maven:Existing Maven Projects,选择代码所在的目录,点击finish完成导入  <br />
+<img src="/assets/images/import-project.png" alt="import project" class="align-center" /></p>
+
+<h3 id="修改微服务描述文件">修改微服务描述文件</h3>
+
+<ol>
+  <li>
+    <p>acmeair-booking-service\src\main\resources\microservice.yaml<br />
+<img src="/assets/images/booking-microservice-yaml.png" alt="booking microservice yaml" class="align-center" /></p>
+  </li>
+  <li>
+    <p>acmeair-customer-service\src\main\resources\microservice.yaml <br />
+<img src="/assets/images/customer-microservice-yaml.png" alt="customer microservice yaml" class="align-center" /></p>
+  </li>
+  <li>
+    <p>acmeair-website\src\main\resources\microservice.yaml<br />
+<img src="/assets/images/website-microservice-yaml.png" alt="website microservice yaml" class="align-center" /></p>
+  </li>
+</ol>
+
+<h3 id="执行-mvn-install-结果-build-success-项目完成构建">执行 mvn install 结果 BUILD SUCCESS ,项目完成构建</h3>
+<p><img src="/assets/images/compile.png" alt="compile" class="align-center" /></p>
+
+<h2 id="启动服务">启动服务</h2>
+<h3 id="service-center">service-center</h3>
+<p>找到service-center-0.1.0-m1-windows-amd64解压目录,双击start.bat<br />
+<img src="/assets/images/servcie-center.png" alt="servcie center" class="align-center" /> <br />
+<img src="/assets/images/service-center-start-success.png" alt="service center start success" class="align-center" /></p>
+
+<h3 id="acmeair-booking">acmeair-booking</h3>
+<p>AcmeairApplication:Run As - - Run Configurations…<br />
+<img src="/assets/images/start-booking.png" alt="start booking" class="align-center" />  <br />
+watching microservice 2 successfully,服务注册成功<br />
+<img src="/assets/images/booking-start-success.png" alt="booking start success" class="align-center" /></p>
+
+<h3 id="acmeair-customer">acmeair-customer</h3>
+<p>CustomerServiceApplication:Run As - - Run Configurations…<br />
+<img src="/assets/images/start-customer.png" alt="start customer" class="align-center" /> <br />
+watching microservice 4 successfully,服务注册成功<br />
+<img src="/assets/images/customer-start-success.png" alt="customer start success" class="align-center" /></p>
+
+<h3 id="acmeair-website">acmeair-website</h3>
+<p>将acmeair-website\target\ROOT.war复制到tomcat webapps文件夹下,启动tomcat<br />
+<img src="/assets/images/start-website.png" alt="start website" class="align-center" /></p>
+
+<h2 id="前台访问">前台访问</h2>
+<p>输入http://localhost:8080<br />
+<img src="/assets/images/home-page.png" alt="home page" class="align-center" /></p>
+
+<p>点击网页最下端Acme航空配置<br />
+<img src="/assets/images/init-data.png" alt="init data" class="align-center" /></p>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+  
+
+
+  
+  
+  
+
+  <p class="page__taxonomy">
+    <strong><i class="fa fa-fw fa-tags" aria-hidden="true"></i> Tags: </strong>
+    <span itemprop="keywords">
+    
+      
+      
+      <a href="/tags/#huawei-cloud" class="page__taxonomy-item" rel="tag">Huawei Cloud</a>
+    
+    </span>
+  </p>
+
+
+
+
+
+        
+          
+            
+              <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> Updated:</strong> <time datetime="2017-06-24">June 24, 2017</time></p>
+            
+          
+        
+      </footer>
+
+      <section class="page__share">
+  
+    <h4 class="page__share-title">Share on</h4>
+  
+
+  <a href="https://twitter.com/intent/tweet?via=ServiceComb&text=单体应用利用ServiceComb实现微服务化和云化之路 /docs/go-to-cloud/" class="btn btn--twitter" title="Share on Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
+
+  <a href="https://www.facebook.com/sharer/sharer.php?u=/docs/go-to-cloud/" class="btn btn--facebook" title="Share on Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
+
+  <a href="https://plus.google.com/share?url=/docs/go-to-cloud/" class="btn btn--google-plus" title="Share on Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
+
+  <a href="https://www.linkedin.com/shareArticle?mini=true&url=/docs/go-to-cloud/" class="btn btn--linkedin" title="Share on LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
+</section>
+
+
+      
+  <nav class="pagination">
+    
+      <a href="/cn/docs/linuxcon-workshop-demo/" class="pagination--pager" title="Linux Con Workshop Demo
+">Previous</a>
+    
+    
+      <a href="/cn/docs/go-to-cloud/" class="pagination--pager" title="单体应用利用ServiceComb实现微服务化和云化之路
+">Next</a>
+    
+  </nav>
+
+
+    </div>
+
+    
+      <div class="page__comments">
+  
+  
+    <section id="static-comments">
+      
+        <!-- Start static comments -->
+        <div class="js-comments">
+          
+        </div>
+        <!-- End static comments -->
+
+        <!-- Start new comment form -->
+        <h4 class="page__comments-title">Leave a Comment</h4>
+        <p class="small">Your email address will not be published. Required fields are marked <span class="required">*</span></p>
+        <form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/ServiceComb/servicesomb.github.io/master">
+          <div class="form__spinner">
+            <i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
+            <span class="sr-only">Loading...</span>
+          </div>
+
+          <fieldset>
+            <label for="comment-form-message">Comment <small class="required">*</small></label>
+            <textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
+            <div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">Markdown is supported.</a></div>
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-name">Name <small class="required">*</small></label>
+            <input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-email">Email address <small class="required">*</small></label>
+            <input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-url">Website (optional)</label>
+            <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
+          </fieldset>
+          <fieldset class="hidden" style="display: none;">
+            <input type="hidden" name="options[slug]" value="go-to-cloud">
+            <label for="comment-form-location">Not used. Leave blank if you are a human.</label>
+            <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
+          </fieldset>
+          <!-- Start comment form alert messaging -->
+          <p class="hidden js-notice">
+            <strong class="js-notice-text"></strong>
+          </p>
+          <!-- End comment form alert messaging -->
+          <fieldset>
+            <button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--large">Submit Comment</button>
+          </fieldset>
+        </form>
+        <!-- End new comment form -->
+      
+    </section>
+  
+</div>
+
+    
+  </article>
+
+  
+  
+    <div class="page__related">
+      <h4 class="page__related-title">You May Also Enjoy</h4>
+      <div class="grid__wrapper">
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/jira_beginner_guide/" rel="permalink">老司机带你刷任务 - ServiceComb JIRA入门指南
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">ServiceComb JIRA入门指南
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  less than 1 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/how-to-reform-a-legacy-system/" rel="permalink">最头疼的遗留系统该如何改造?
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  1 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+      </div>
+    </div>
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _posts/2017-06-24-go-to-cloud.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_posts/2017-06-24-go-to-cloud.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  
+  <script>
+    (function ($) {
+    var $comments = $('.js-comments');
+
+    $('#new_comment').submit(function () {
+      var form = this;
+
+      $(form).addClass('disabled');
+      $('#comment-form-submit').html('<i class="fa fa-spinner fa-spin fa-fw"></i> Loading...');
+
+      $.ajax({
+        type: $(this).attr('method'),
+        url: $(this).attr('action'),
+        data: $(this).serialize(),
+        contentType: 'application/x-www-form-urlencoded',
+        success: function (data) {
+          $('#comment-form-submit').html('Submitted');
+          $('.page__comments-form .js-notice').removeClass('notice--danger');
+          $('.page__comments-form .js-notice').addClass('notice--success');
+          showAlert('Thanks for your comment! It will show on the site once it has been approved.');
+        },
+        error: function (err) {
+          console.log(err);
+          $('#comment-form-submit').html('Submit Comment');
+          $('.page__comments-form .js-notice').removeClass('notice--success');
+          $('.page__comments-form .js-notice').addClass('notice--danger');
+          showAlert('Sorry, there was an error with your submission. Please make sure all required fields have been completed and try again.');
+          $(form).removeClass('disabled');
+        }
+      });
+
+      return false;
+    });
+
+    function showAlert(message) {
+      $('.page__comments-form .js-notice').removeClass('hidden');
+      $('.page__comments-form .js-notice-text').html(message);
+    }
+  })(jQuery);
+  </script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/docs/how-to-reform-a-legacy-system/index.html
----------------------------------------------------------------------
diff --git a/content/docs/how-to-reform-a-legacy-system/index.html b/content/docs/how-to-reform-a-legacy-system/index.html
new file mode 100644
index 0000000..0986e49
--- /dev/null
+++ b/content/docs/how-to-reform-a-legacy-system/index.html
@@ -0,0 +1,1130 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>最头疼的遗留系统该如何改造? - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?">
+
+
+
+
+<meta name="author" content="Wang Lei">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="最头疼的遗留系统该如何改造?">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/how-to-reform-a-legacy-system/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/how-to-reform-a-legacy-system/">
+
+
+
+  <meta property="og:description" content="微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="最头疼的遗留系统该如何改造?">
+  <meta name="twitter:description" content="微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+    <meta name="twitter:creator" content="@">
+  
+
+
+
+  
+
+  
+
+
+
+
+
+  <meta property="og:type" content="article">
+  <meta property="article:published_time" content="2017-10-23T00:00:00+08:00">
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/docs/how-to-reform-a-legacy-system/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+
+<div itemscope itemtype="http://schema.org/Person">
+
+  
+
+  <div class="author__content">
+    <h3 class="author__name" itemprop="name">Wang Lei</h3>
+    
+      <p class="author__bio" itemprop="description">
+	    
+        Happy Coding, Happy Life
+	    
+      </p>
+    
+  </div>
+
+  <div class="author__urls-wrapper">
+    <button class="btn btn--inverse">Follow</button>
+    <ul class="author__urls social-icons">
+      
+
+      
+        <li>
+          <a href="https://wldandan.github.io" itemprop="url">
+            <i class="fa fa-fw fa-chain" aria-hidden="true"></i> Website
+          </a>
+        </li>
+      
+
+      
+        <li>
+          <a href="mailto:wanglei177@huawei.com">
+            <meta itemprop="email" content="wanglei177@huawei.com" />
+            <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> Email
+          </a>
+        </li>
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      <!--
+  <li>
+    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs">
+      <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link
+    </a>
+  </li>
+-->
+    </ul>
+  </div>
+</div>
+
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="最头疼的遗留系统该如何改造?">
+    <meta itemprop="description" content="微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?">
+    <meta itemprop="datePublished" content="October 23, 2017">
+    <meta itemprop="dateModified" content="October 23, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">最头疼的遗留系统该如何改造?
+</h1>
+            
+              <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  less than 1 minute read
+
+</p>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <p>随着RESTful、云计算、DevOps、持续交付等概念的深入人心,微服务(Microservices)逐渐成为系统架构的一个代名词。那么微服务是否是业界期待已久的架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?在该分享中,王磊将通过实际的案例,跟大家探讨使用微服务改造遗留系统的实践之路。</p>
+
+<ul>
+  <li>什么是微服务</li>
+  <li>微服务的诞生背景</li>
+  <li>遗留系统的微服务改造策略</li>
+  <li>微服务改造之路</li>
+</ul>
+
+<h2 id="背景">背景</h2>
+<p>什么是系统架构设计?</p>
+
+<p>一直以来,系统架构设计是IT领域经久不衰的话题之一,是每个系统构建过程中极其关键的一部分,它决定了系统是否能够被正确、有效的构建。架构师们也一直在持续探索,寻找更优秀的架构设计方式来构建系统。</p>
+
+<p>那什么是系统的架构设计?对于这个问题,我相信每个朋友都会有不同的定义,实际上,也并没有一个标准的答案来解释什么是架构设计。</p>
+
+<p>基于我过去的经验和工作方式,我认为系统架构设计的本质,是在应用系统内部找到这样一个动态平衡:平衡业务、技术、团队的同时,考虑系统灵活性、可扩展性以及可维护性等因素,并将应用系统划分成不同的部分,使这些部分彼此之间相互分工、相互协作,从而为用户提供某种特定的价值的方式。</p>
+
+<p>随着RESTful、云计算、DevOps、持续交付等概念的深入人心,<strong>微服务架构逐渐成为系统架构的一个代名词</strong>。</p>
+
+<h2 id="什么是微服务架构">什么是微服务架构</h2>
+<p>2015年,微服务架构这个词,以相当高的频率出现在各种演讲、文章、会议、社区上。这里,我先和大家快速回顾一下,Martin Fowler对微服务的抽象。</p>
+
+<p><img src="/assets/images/microservice_definition_by_martin_folwer.jpeg" alt="" /></p>
+
+<p>如上所示,微服务架构的核心四要素,我用红色标注出来了。如果翻译成中文,大致如下所示:</p>
+
+<blockquote>
+  <p>微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。 每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相协作(通常是基于HTTP协议的RESTful API)。 每个服务都围绕着具体业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。 另外,对具体的服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建。</p>
+</blockquote>
+
+<p>总结成一句话就是<strong>微服务是围绕业务构建的细粒度的分布式系统</strong>。</p>
+
+<h2 id="微服务的诞生背景">微服务的诞生背景</h2>
+<p>2015年,微服务突然火了,为什么?</p>
+
+<p>其实微服务架构并不是技术创新,而是IT发展到现阶段对技术架构的一种阐释。</p>
+
+<p>它要求包括<strong>快速和业务对齐(aligning business)、理解和抽象业务(基于领域建模)、快速开发(Lean、Agile)、快速反馈和交付(CI、CD、DevOps)</strong>。</p>
+
+<p>所以说,微服务并不是技术,而是将化整为零(或称分治)思想换了一种说法,无论是把一个大型系统分割成多个小而自治的系统,还是把一个大型团队分成多个团队,或是把一个复杂的项目分成多个交付阶段都是这种思想的运用。</p>
+
+<p>当然,任何新事物的诞生,总会有一个推动因素。微服务的诞生也并非偶然。它是互联网高速发展,技术日新月异的变化以及传统架构无法适应快速变化等多重因素的推动下所诞生的产物。</p>
+
+<p>基于个人的理解,我将微服务的诞生因素总结为如下几点:</p>
+
+<p><img src="/assets/images/why_microservice_show_up.jpeg" alt="" /></p>
+
+<ol>
+  <li>
+    <p><strong>互联网行业的快速发展</strong></p>
+
+    <p>过去的十年中,互联网对我们的生活产生了翻天覆地的变化,越来越多的传统行业公司也开始依赖互联网技术打造其核心竞争优势。</p>
+
+    <p>在这种情况下,如何从系统架构的角度出发,构建灵活、易扩展的系统,快速应对需求的变化;同时,随着用户量的增加,如何保证系统的可伸缩性、高可用性,成为系统架构面临的挑战。</p>
+  </li>
+  <li>
+    <p><strong>单块架构系统面临的挑战</strong></p>
+
+    <p>随着用户需求个性化、产品生命周期变短、市场需求不稳定等因素的出现,单块架构系统面临着越来越多的挑战。如何找到一种更有效的、更灵活、适应需求的系统架构方式,成为大家关注的焦点。</p>
+  </li>
+  <li>
+    <p><strong>敏捷、精益方法、持续交付的深入人心</strong></p>
+
+    <p>在IT行业发展的过去十年,敏捷、精益、持续交付等价值观、方法论的提出以及实践,让很多组织意识到应变市场变化、提高响应力的重要性,应该构建软件交付周期的闭环(分析、开发、测试、部署、运维、监控、运营),而不仅仅是提高开发阶段的效率。</p>
+
+    <p><strong>精益创业(Lean Startup)</strong>帮助组织分析并建立最小可实行产品(MinimumViableProduct),通过迭代持续改进敏捷方法帮助组织消除浪费,通过反馈不断找到正确的方向。</p>
+
+    <p><strong>持续交付</strong>则帮助组织构建更快、更可靠、可频繁发布的交付机制并构建产品交付闭环。</p>
+
+    <p>大部分组织已经基本上形成了一套可实施的交付体系。包括持续集成、自动化测试、数据管理、自动化部署机制等。</p>
+
+    <p>这时候,大泥球式的单块架构,会逐渐成为影响交付周期进一步优化的瓶颈,因此如何找到灵活性高、扩展性好的架构方式,也成为进一步优化交付周期面临的挑战。</p>
+  </li>
+  <li>
+    <p><strong>Docker等容器虚拟化技术的快速发展</strong></p>
+
+    <p>同传统的虚拟化技术相比,基于容器技术的Docker,不需要复杂的Hypervisor机制支持,具有更高的虚拟化性能和效率。</p>
+
+    <p>同时容器可以很容易的运行在任意的装有DockerEngine的系统上,使得开发人员能够用更低的成本将应用程序部署在不同平台上。</p>
+  </li>
+  <li>
+    <p><strong>DevOps文化</strong></p>
+
+    <p>DevOps文化的推行打破了传统开发与运维之间的壁垒,帮助组织形成开发、运维紧密配合的、全功能化的高效团队,并尽早降低软件交付最后一公里的风险。</p>
+  </li>
+</ol>
+
+<h2 id="遗留系统的微服务改造策略">遗留系统的微服务改造策略</h2>
+<p>聊完什么是微服务架构以及其诞生背景,接下来我们来谈谈如何改造遗留系统。</p>
+
+<p>在过去的10多年间,大部分工作时间我都在和遗留系统打交道。我相信很多朋友也是工作在已经运转多年的遗留系统上。</p>
+
+<p>对于这类系统,当谈论使用微服务对其进行改造时,我认为要谨记一点:</p>
+
+<p><strong>改造不是重做。</strong></p>
+
+<p><strong>在改造的过程中,要始终以保证系统为用户提供的业务价值可用作为首要目标。</strong>从这个点出发,基于我的经验,对微服务改造的策略总结为如下五个步骤:</p>
+
+<p><img src="/assets/images/microservice_reform_strategy.jpeg" alt="" /></p>
+
+<ol>
+  <li>
+    <p>范围定义</p>
+
+    <p>对于遗留系统而言,通常业务运转时间较长(譬如5~8年以上,甚至更长),因此涉及的功能繁杂,代码中存在大量无效或者过时的需求,缺陷修复成本较高。</p>
+
+    <p>另外,系统在演进的过程中,也会持续为用户提供新的功能和价值。因此,划分出清晰的范围非常重要。</p>
+
+    <p>实际上,范围定义主要包括两部分:</p>
+
+    <ol>
+      <li>
+        <p>明确业务改造范围</p>
+
+        <p>所谓改造范围,就是确定我们常说的业务试点。通常,作为初次尝试微服务实践的组织,建议选取业务范围影响较小、非关键功能的试点,这样做也是为了确保在不影响核心业务的情况下快速尝试并获得反馈。</p>
+      </li>
+      <li>
+        <p>明确成员责任范围</p>
+
+        <p>明确成员责任范围,确定由谁来改造,确保改造的目标清晰。</p>
+
+        <p>实际上,对于产品而言,遗留系统的维护和更新,包括缺陷定位、缺陷修复、数据更新、功能实现、测试、交付给运维团队等,通常已经让团队的工作处于高负荷状态。因此,需要确定成员,全身心的投入,以微服务改造作为短期目标。</p>
+      </li>
+    </ol>
+  </li>
+  <li>
+    <p>功能剥离</p>
+
+    <p>有了明确的业务范围,成员也有了清晰的责任,接下来就需要将部分功能点进行剥离。</p>
+
+    <p>所谓剥离,就是将选中的功能从原有的系统中拆分出来,并构建成独立的服务。在这个阶段,主要包括两点:</p>
+
+    <ol>
+      <li>
+        <p>将功能从原有系统拆分出来,并构建新服务</p>
+
+        <p>一提到拆分,很多朋友会纠结,“系统复杂,如何拆分微服务才好?怎么样的拆分才合理?”。其实,从我个人的观点来看,这时候还不是纠结服务到底怎么划分合理的时候。为什么?</p>
+
+        <ol>
+          <li>
+            <p>好的架构是动态演变和迭代出来的,业务在不断改变,技术和工具也在不会的升级换代,没有完美的架构,只有无限逼近完美的动态平衡,所以先小范围、低成本动起来,在运转中找平衡点。</p>
+          </li>
+          <li>
+            <p>微服务的复杂度在于分布式系统本身,以及其生态系统(开发、测试、部署、运维、监控、告警)的搭建。</p>
+          </li>
+          <li>
+            <p>团队文化的形成是一个相对漫长的过程,如果花很大力气关注服务怎么拆,而没有聚焦在生态系统的搭建以及团队文化的形成上,实际上是舍本逐末。即便拆分出了不同的服务,在落地的时候也会遇到诸多问题。所以,找一个功能点先拆,然后搭建持续交付流水线,快速试错,建立好有效的反馈闭环机制,再不断寻找动态平衡,拆分出更细的服务或者将不合理的服务合并。</p>
+          </li>
+        </ol>
+      </li>
+      <li>
+        <p>在原有的系统前端,使用代理机制,并使用遗留系统和新服务组合为用户提供价值</p>
+
+        <p>这一步,目的是使用组合的系统(遗留系统+新的服务)为用户提供价值。</p>
+
+        <p>对于Web系统,通常可以在前端使用直接请求新的服务。也可以在后端使用转发请求,获取新服务提供的数据。</p>
+
+        <p>如下图所示:</p>
+
+        <p><img src="/assets/images/microservice_reform_strategy.jpeg" alt="" /></p>
+      </li>
+    </ol>
+  </li>
+  <li>
+    <p>数据解耦</p>
+
+    <p>在以前的遗留系统构建过程中,通常使用数据库作为集成点,不同功能/系统之间通过数据库完成数据交换。对于某些系统,还大量使用存储过程完成业务逻辑,开发的时候看似效率高,但几年下来,DBA成了IT团队最懂业务的人,维护成为瓶颈。</p>
+
+    <p>而实际上,业务的数据是业务固有的组成部分,应当随着业务的变化而变化。业务拆分出来,数据也应该拆分出来。从而保证访问数据只能通过统一的相关业务API完成。便于在将来的业务和架构演进中,有效的对数据维护、管理和升级。</p>
+  </li>
+  <li>
+    <p>数据同步</p>
+
+    <p>数据同步,是一个价值体现的过渡过程。</p>
+
+    <p>一方面,遗留系统的改造中存在的各种各样的挑战和我们今天认为的不合理(当时的场景也许是合理的)。另一方面,对于大部分遗留的系统,都会使用数据库作为集成点(开发成本低),导致某业务功能的数据与其他功能有着千丝万缕的联系,数据的变化容易对其他功能造成影响。</p>
+
+    <p>因此对于大型的遗留系统,很难在短期的时间内(3~6个月)完成全系统的改造。需要一个相对漫长,循序渐进的过程来完成改造。</p>
+
+    <p>譬如,在电商系统中,商家的后台管理系统中的产品、价格的更新,会发布到面向用户的电商搜索系统中以及其他系统中。如果我们将系统中的产品相关拆分成独立服务,则必须也要拆分数据发布机制,否则的话容易造成数据不一致。但拆分数据发布机制,又需要分析清楚不同数据之间的影响和依赖,需要更大的成本,短期内不易完成。</p>
+
+    <p>这时候,如果将新服务的数据同步回原有的数据库,采用这样一个折中的的过程,既能保障新的服务和数据被独立,又不影响原有的遗留系统功能。</p>
+
+    <p>说白了,这其实也是在保证系统为用户提供的业务价值不被破坏。</p>
+
+    <p>有了之前的尝试,接下来就是通过不断的迭代,完成功能剥离,数据解耦、数据同步,从而将更多的功能拆分成独立的服务。</p>
+  </li>
+</ol>
+
+<p><img src="/assets/images/legacy_system_reform_strategy.jpeg" alt="" /></p>
+
+<p>如上就是我对于遗留系统改造的策略。</p>
+
+<h2 id="遗留系统改造实践">遗留系统改造实践</h2>
+<p>接下来,我和大家分享一个我所经历的遗留系统改造的案例。首先,让我们看看这个系统的背景和一些数据。</p>
+
+<h3 id="客户背景">客户背景</h3>
+
+<p><a href="http://movit-tech.com/">盟拓软件</a>是中国房地产行业IT服务及行业解决方案和产品的领先厂家,其依据市场变化推出全民卖房的新营销模式,正从线下的传统现场售楼模式向线上的房地产电商模式进行转变。</p>
+
+<h3 id="业务痛点">业务痛点</h3>
+
+<p>当今房地产行业呈现短期开盘峰值、后期零星散客的业务特性。其面临着高昂线下运营成本,营销成本占销售额&gt;5%。而由此引入的线上竞价秒杀营销模式,传统IT解决方案的系统资源率、峰值扩容能力将无法满足。</p>
+
+<p><img src="/assets/images/case_mengtuo_traditional_mode.png" alt="" /></p>
+
+<h3 id="系统概览">系统概览</h3>
+
+<p>系统为典型的三层单块架构,使用MySQL数据库存储数据。运行在服务器上的应用处理性能较低,为了应对短暂的访问高峰,额外购置了较多的服务器资源,访问高峰过后,服务器资源闲置造成较大浪费,且需要较多人员维护。</p>
+
+<h3 id="相关数据">相关数据</h3>
+
+<ul>
+  <li>
+    <p>代码约<strong>100万</strong>行,测试覆盖率为<strong>10%</strong>,集成测试时间为<strong>一个月</strong></p>
+
+    <p>代码臃肿,无效遗留代码较多,且业务间紧耦合,测试覆盖率较低,测试出问题了难以定位,导致测试耗时较长。</p>
+  </li>
+  <li>
+    <p>营销预案需<strong>提前1个月</strong>准备资源</p>
+
+    <p>为应对访问高峰,每次都需要预购大量的服务资源,重新部署环境,并运行相关测试。</p>
+  </li>
+  <li>
+    <p>业务耦合紧,新业务上线<strong>&gt;半年</strong></p>
+
+    <p>每次测试都要多个业务团队联合测试,问题定位较耗时,测试效率低。</p>
+  </li>
+  <li>
+    <p>上百种业务,2-3种开发语言</p>
+
+    <p>业务复杂,且语言不一,系统联调时耗时较多且需相互配合,时间周期较长。</p>
+  </li>
+  <li>
+    <p>运维团队<strong>&gt;20人</strong></p>
+
+    <p>臃肿的团队导致问题定位需多方配合,沟通成本高。</p>
+  </li>
+</ul>
+
+<p><strong>基于之前定义的改造策略,我们的改造过程大致如下所示:</strong></p>
+
+<p>范围定义:</p>
+
+<ul>
+  <li>
+    <p>将原房地产CRM平台按业务类别拆分为多个微服务。</p>
+
+    <p><img src="/assets/images/case_mengtuo_reform_before_and_after.png" alt="" /></p>
+  </li>
+</ul>
+
+<p>功能剥离:</p>
+
+<ul>
+  <li>从单体CRM系统中逐步拆分出业务模块(服务网关、客户服务、房源服务、机会服务、积分服务)。</li>
+</ul>
+
+<p>数据解耦</p>
+
+<ul>
+  <li>每个微服务的数据进行独立存储。</li>
+</ul>
+
+<p>数据同步</p>
+
+<ul>
+  <li>在负载较低时,将数据同步回原有的遗留系统中不断迭代,陆续完成后续的服务。</li>
+</ul>
+
+<p>改造过程中,基于ServiceComb,<strong>通过控制请求路由,逐步架空对原单体应用的请求, 平滑过渡系统到微服务架构。</strong></p>
+
+<p><strong>单个服务的构建并没有那么复杂,基于ServiceComb,通过如下的简单4步,即可快速完成改造:</strong></p>
+
+<ol>
+  <li>引入<a href="https://github.com/ServiceComb/ServiceComb-Java-Chassis">ServiceComb Java Chassis</a>框架依赖</li>
+  <li>定义服务接口端点</li>
+  <li>添加服务配置文件</li>
+  <li>注释服务启动入口</li>
+</ol>
+
+<p>另外,通过Company Workshop中提供的Docker插件配置,10分钟内完成了服务容器化,自动生成镜像。</p>
+
+<p>同时,利用ServiceComb开发的微服务应用,可同时无缝接入<a href="https://www.huaweicloud.com/product/servicestage.html">ServiceStage</a>,享受到微服务治理、容器虚机混编、应用拓扑等能力。</p>
+
+<p>为应对短暂的业务高峰,经常需要预购大量的资源来提前部署和验证环境,花费大量的人力物力,且资源利用率极低。因此,进行云化改造后的产品和解决方案需要具备随着参与人数增加而秒级伸缩,支撑业务峰值和资源利用率的能力。盟拓软件基于华为ServiceStage的核心技术容器改造、混编方案、编排调度算法等进行容器虚机混编应用云化改造,实现了应用的秒级部署和弹性伸缩能力,极大地提高了资源的利用率。</p>
+
+<p><strong>改造后效果:</strong></p>
+
+<ul>
+  <li>运维人力<strong>减少80%</strong></li>
+  <li>资源利用率<strong>提升50%</strong>,大幅降低运营成本</li>
+  <li><strong>每秒万级</strong>调用链分析能力</li>
+  <li>传统系统和应用平滑改造上云</li>
+  <li>互联网营销模式,天粒度业务快速创新</li>
+</ul>
+
+<p><img src="/assets/images/case_mengtuo_new_mode.png" alt="" /></p>
+
+<p><strong>理论上,经过不断地迭代,逐渐完成业务功能解耦,新服务构建。那么遗留系统就会被替换掉。</strong></p>
+
+<h2 id="改造要点">改造要点</h2>
+<p>在改造的整个过程中,我认为如下几个实践是非常重要的:</p>
+
+<p><img src="/assets/images/best_practices_for_legacy_system_reform.jpeg" alt="" /></p>
+
+<h3 id="基础设施自动化">基础设施自动化</h3>
+<p>原有的部署发生在数据中心,因此流程上相对复杂,而且存在一定弊端(譬如审批和协作上,起不到实质作用)。对于改造后的服务而言,我们使用更多的自动化方式代替复杂的审批流程。通过使用华为ServiceStage作为基础设施,团队能够更自主的对基础设施进行管理。如资源创建、销毁、更新等。随着服务的增多,基础设施自动化帮助我们节省了大量的时间。当然,从组织层面,也成立了专门的小组研究华为ServiceStage以及相关的DevOps配套工具。</p>
+
+<p>目前,国内外有很多优秀的云平台,可以方便的为用户提供基础设施的自动化机制。</p>
+
+<h3 id="微服务生态系统">微服务生态系统</h3>
+<p>微服务的生态系统是指微服务实施过程相关的协作部分,涉及部分较多,譬如测试机制、持续集成、自动化部署、细粒度监控、日志聚合、告警、持续交付,以及大家非常关注的服务注册、服务发现机制等。</p>
+
+<p>这部分的灵活性比较大,因为目前如上说的每一个领域都有很多优秀的工具。譬如日志聚合目前业界的方案通常为ELK,监控的方案如Zabbix、NewRelic、CloudWatch等,成熟的监控工具都具有告警功能,PagerDuty也提供更专业的告警服务。服务注册和发现有ServiceComb框架的Service Center,Eureka,Consul,Zookeeper。大家可以在各自的团队中自由发挥。</p>
+
+<h3 id="开发框架的演进">开发框架的演进</h3>
+<p>开发框架是团队在构建微服务的过程中,不断总结,梳理出的快速开发微服务的相关工具和框架。</p>
+
+<p>我们基于ServiceComb构建了快速开发框架,主要包括四部分,如下图所示:</p>
+
+<p><img src="/assets/images/rapid_development_framework.png" alt="" /></p>
+
+<ol>
+  <li>
+    <p>微服务工程示例</p>
+
+    <p>提供微服务改造架构最佳实践参考工程Company,使能微服务改造或开发能复用其架构设计和配置,同时指导实现服务容器化和后续服务性能测试等提高服务可靠性。</p>
+  </li>
+  <li>
+    <p>契约生成工具</p>
+
+    <p>ServiceComb采用了基于OpenAPI的服务契约,使业务逻辑与编程语言解耦,并可使用Swagger工具定义服务契约,自动生成契约对应的代码和文档。</p>
+  </li>
+  <li>
+    <p>持续集成</p>
+
+    <p>持续集成使用了Jenkins,通过其配置文件定义主要的阶段:</p>
+
+    <blockquote>
+      <p>验证:运行单元测试,集成测试</p>
+
+      <p>构建:构建可执行的jar部署包</p>
+
+      <p>部署:基于指定版本制作镜像,并推送到测试或生产环境下</p>
+    </blockquote>
+
+    <p>利用这样的持续集成模板工程,花费很少的时间,就可以针对新建的微服务应用,快速配置其对应的持续集成环境。</p>
+  </li>
+  <li>
+    <p>Kubernetes集群一键部署</p>
+
+    <p>Kubernetes是谷歌开源的一个容器集群管理工具。基于Kubernetes,可实现微服务的快速部署及弹性伸缩。我们提供了一键部署脚本,部署时只需稍作修改即可通过一条命令,自动完成资源的创建、部署、弹性伸缩、金丝雀发布等。</p>
+  </li>
+</ol>
+
+<h3 id="团队运维自管理">团队运维自管理</h3>
+
+<p>这一部分是关于团队的文化管理。也是对DevOPS的延伸,我们称为TMI(Team Managed Infrastructure)。</p>
+
+<p>目的是将分析、开发、测试以及资源创建、销毁、自动化部署的权利交给团队,由团队按需完成部署(加上看板的流程管理,而非Scrum的固定迭代,可以做到一天部署多次)。</p>
+
+<p>当然,这个环节非常依赖于成熟的监控以及告警机制,当出现问题时,能够有效的通知到责任人,快速反馈,快速修复。团队内部也会定期轮换Pager(出问题救火的人),培养团队以服务可用作为大家的共同目标,培养产品观念,而非项目观念。</p>
+
+<p>再回顾一下这个图:</p>
+
+<p><img src="/assets/images/best_practices_for_legacy_system_reform.jpeg" alt="" /></p>
+
+<p>最后,和大家分享一下,我个人在微服务实施过程中总结的4句方针:</p>
+
+<p><strong>由大到小,由粗到细</strong></p>
+
+<p><strong>关注运维,关注监控</strong></p>
+
+<p><strong>快速反馈,快速修复</strong></p>
+
+<p><strong>循序渐进,增量实现</strong></p>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+  
+
+
+  
+  
+  
+
+  <p class="page__taxonomy">
+    <strong><i class="fa fa-fw fa-tags" aria-hidden="true"></i> Tags: </strong>
+    <span itemprop="keywords">
+    
+      
+      
+      <a href="/tags/#reform-legacy-system" class="page__taxonomy-item" rel="tag">Reform legacy system</a>
+    
+    </span>
+  </p>
+
+
+
+
+
+        
+          
+            
+              <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> Updated:</strong> <time datetime="2017-10-23">October 23, 2017</time></p>
+            
+          
+        
+      </footer>
+
+      <section class="page__share">
+  
+    <h4 class="page__share-title">Share on</h4>
+  
+
+  <a href="https://twitter.com/intent/tweet?via=ServiceComb&text=最头疼的遗留系统该如何改造? /docs/how-to-reform-a-legacy-system/" class="btn btn--twitter" title="Share on Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
+
+  <a href="https://www.facebook.com/sharer/sharer.php?u=/docs/how-to-reform-a-legacy-system/" class="btn btn--facebook" title="Share on Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
+
+  <a href="https://plus.google.com/share?url=/docs/how-to-reform-a-legacy-system/" class="btn btn--google-plus" title="Share on Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
+
+  <a href="https://www.linkedin.com/shareArticle?mini=true&url=/docs/how-to-reform-a-legacy-system/" class="btn btn--linkedin" title="Share on LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
+</section>
+
+
+      
+  <nav class="pagination">
+    
+      <a href="/cn/docs/distributed_saga_3/" class="pagination--pager" title="ServiceComb中的数据最终一致性方案 - part 3
+">Previous</a>
+    
+    
+      <a href="/cn/docs/how-to-reform-a-legacy-system/" class="pagination--pager" title="最头疼的遗留系统该如何改造?
+">Next</a>
+    
+  </nav>
+
+
+    </div>
+
+    
+      <div class="page__comments">
+  
+  
+    <section id="static-comments">
+      
+        <!-- Start static comments -->
+        <div class="js-comments">
+          
+        </div>
+        <!-- End static comments -->
+
+        <!-- Start new comment form -->
+        <h4 class="page__comments-title">Leave a Comment</h4>
+        <p class="small">Your email address will not be published. Required fields are marked <span class="required">*</span></p>
+        <form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/ServiceComb/servicesomb.github.io/master">
+          <div class="form__spinner">
+            <i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
+            <span class="sr-only">Loading...</span>
+          </div>
+
+          <fieldset>
+            <label for="comment-form-message">Comment <small class="required">*</small></label>
+            <textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
+            <div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">Markdown is supported.</a></div>
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-name">Name <small class="required">*</small></label>
+            <input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-email">Email address <small class="required">*</small></label>
+            <input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-url">Website (optional)</label>
+            <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
+          </fieldset>
+          <fieldset class="hidden" style="display: none;">
+            <input type="hidden" name="options[slug]" value="how-to-reform-a-legacy-system">
+            <label for="comment-form-location">Not used. Leave blank if you are a human.</label>
+            <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
+          </fieldset>
+          <!-- Start comment form alert messaging -->
+          <p class="hidden js-notice">
+            <strong class="js-notice-text"></strong>
+          </p>
+          <!-- End comment form alert messaging -->
+          <fieldset>
+            <button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--large">Submit Comment</button>
+          </fieldset>
+        </form>
+        <!-- End new comment form -->
+      
+    </section>
+  
+</div>
+
+    
+  </article>
+
+  
+  
+    <div class="page__related">
+      <h4 class="page__related-title">You May Also Enjoy</h4>
+      <div class="grid__wrapper">
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/jira_beginner_guide/" rel="permalink">老司机带你刷任务 - ServiceComb JIRA入门指南
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">ServiceComb JIRA入门指南
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  less than 1 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/how-to-reform-a-legacy-system/" rel="permalink">最头疼的遗留系统该如何改造?
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  1 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+      </div>
+    </div>
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _posts/2017-10-23-how-to-reform-a-legacy-system.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_posts/2017-10-23-how-to-reform-a-legacy-system.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  
+  <script>
+    (function ($) {
+    var $comments = $('.js-comments');
+
+    $('#new_comment').submit(function () {
+      var form = this;
+
+      $(form).addClass('disabled');
+      $('#comment-form-submit').html('<i class="fa fa-spinner fa-spin fa-fw"></i> Loading...');
+
+      $.ajax({
+        type: $(this).attr('method'),
+        url: $(this).attr('action'),
+        data: $(this).serialize(),
+        contentType: 'application/x-www-form-urlencoded',
+        success: function (data) {
+          $('#comment-form-submit').html('Submitted');
+          $('.page__comments-form .js-notice').removeClass('notice--danger');
+          $('.page__comments-form .js-notice').addClass('notice--success');
+          showAlert('Thanks for your comment! It will show on the site once it has been approved.');
+        },
+        error: function (err) {
+          console.log(err);
+          $('#comment-form-submit').html('Submit Comment');
+          $('.page__comments-form .js-notice').removeClass('notice--success');
+          $('.page__comments-form .js-notice').addClass('notice--danger');
+          showAlert('Sorry, there was an error with your submission. Please make sure all required fields have been completed and try again.');
+          $(form).removeClass('disabled');
+        }
+      });
+
+      return false;
+    });
+
+    function showAlert(message) {
+      $('.page__comments-form .js-notice').removeClass('hidden');
+      $('.page__comments-form .js-notice-text').html(message);
+    }
+  })(jQuery);
+  </script>
+
+
+
+
+
+
+
+  </body>
+</html>


[04/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/users/invoke-control/index.html
----------------------------------------------------------------------
diff --git a/content/users/invoke-control/index.html b/content/users/invoke-control/index.html
new file mode 100644
index 0000000..bbef822
--- /dev/null
+++ b/content/users/invoke-control/index.html
@@ -0,0 +1,816 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>调用控制 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="调用控制">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="调用控制">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/users/invoke-control/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/users/invoke-control/">
+
+
+
+  <meta property="og:description" content="调用控制">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="调用控制">
+  <meta name="twitter:description" content="调用控制">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/users/invoke-control/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">User Guide</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/" class="">Java Chassis Architecture</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/setup-environment/" class="">Setup Environment</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Provider</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-definition/" class="">Service Definition</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-contract/" class="">Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-springmvc/" class="">Develop Microservice with SpringMVC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-jax-rs/" class="">Develop Microservice with JAX-RS</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-transparent-rpc/" class="">Develop Microservice with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-interface-constraints/" class="">Service Interface Constraints</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-configurations/" class="">Service Configurations</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/communicate-protocol/" class="">Communicate Protocol</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/application-boot-process/" class="">Application Boot Up Process</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-heartbeat/" class="">Service Heartbeat</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Consumer</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rest-template/" class="">Develop with Rest Template</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rpc/" class="">Develop with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-service-contract/" class="">Use Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/invoke-control/" class="active">Invoke Control</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">General Development</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/local-develop-test/" class="">Develop and Test in Local Environment</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-servicecomb-in-spring-boot/" class="">Use ServiceComb in Spring Boot</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/distributed-tracing/" class="">Distributed Tracing</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/customized-tracing/" class="">Customized Tracing</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Edging Service</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/nginx/" class="">confd and Nginx</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/zuul/" class="">Zuul</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">Metrics</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Deployment</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/run-mode/" class="">Run Mode</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Security</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-tls/" class="">Use TLS</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="调用控制">
+    <meta itemprop="description" content="调用控制">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">调用控制
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> On This Page</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#实例级故障隔离" id="markdown-toc-实例级故障隔离">实例级故障隔离</a>    <ul>
+      <li><a href="#场景描述" id="markdown-toc-场景描述">场景描述</a></li>
+      <li><a href="#配置说明" id="markdown-toc-配置说明">配置说明</a></li>
+    </ul>
+  </li>
+  <li><a href="#熔断策略" id="markdown-toc-熔断策略">熔断策略</a>    <ul>
+      <li><a href="#场景描述-1" id="markdown-toc-场景描述-1">场景描述</a></li>
+      <li><a href="#配置说明-1" id="markdown-toc-配置说明-1">配置说明</a></li>
+    </ul>
+  </li>
+  <li><a href="#限流策略" id="markdown-toc-限流策略">限流策略</a>    <ul>
+      <li><a href="#场景描述-2" id="markdown-toc-场景描述-2">场景描述</a></li>
+      <li><a href="#注意事项" id="markdown-toc-注意事项">注意事项</a></li>
+      <li><a href="#配置说明-2" id="markdown-toc-配置说明-2">配置说明</a></li>
+    </ul>
+  </li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="实例级故障隔离">实例级故障隔离</h2>
+
+<h3 id="场景描述">场景描述</h3>
+
+<p>实例级故障隔离功能允许在微服务的部分实例调用失败时,停止向故障实例发送请求,从而达到隔离故障实例的功能。</p>
+
+<h3 id="配置说明">配置说明</h3>
+
+<p>实例级故障隔离功能集成在负载均衡功能中,负载均衡策略的配置见<a href="/users/service-configurations/#负载均衡策略">负载均衡策略</a>。负载均衡策略中,与实例级故障隔离相关的配置项见下表。</p>
+
+<table>
+  <thead>
+    <tr>
+      <th style="text-align: left">配置项</th>
+      <th style="text-align: left">默认值</th>
+      <th style="text-align: left">取值范围</th>
+      <th style="text-align: left">是否必选</th>
+      <th style="text-align: left">含义</th>
+      <th style="text-align: left">注意</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td style="text-align: left">cse.loadbalance.isolation.enabled</td>
+      <td style="text-align: left">false</td>
+      <td style="text-align: left">Boolean</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">是否开启故障实例隔离功能</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.loadbalance.isolation.enableRequestThreshold</td>
+      <td style="text-align: left">20</td>
+      <td style="text-align: left">Integer</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">当实例的调用总次数达到该值时开始进入隔离逻辑门槛</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.loadbalance.isolation.errorThresholdPercentage</td>
+      <td style="text-align: left">20</td>
+      <td style="text-align: left">Integer,区间为(0,100]</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">实例故障隔离错误百分比</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.loadbalance.isolation.singleTestTime</td>
+      <td style="text-align: left">10000</td>
+      <td style="text-align: left">Integer</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">故障实例单点测试时间</td>
+      <td style="text-align: left"> </td>
+    </tr>
+  </tbody>
+</table>
+
+<h2 id="熔断策略">熔断策略</h2>
+<h3 id="场景描述-1">场景描述</h3>
+
+<p>熔断策略是对ServiceComb熔断功能的设置,用户通过配置熔断策略可以指定在何种条件下ServiceComb框架将终止发送请求。</p>
+
+<h3 id="配置说明-1">配置说明</h3>
+
+<p>熔断作为异常反应机制是降级策略的一部分,相关概念还有隔离和容错。三者的关系以及配置方式参见<a href="/users/service-configurations/#降级策略">降级策略</a>。</p>
+
+<h2 id="限流策略">限流策略</h2>
+<h3 id="场景描述-2">场景描述</h3>
+
+<p>用户在consumer端使用限流策略,可以限制发往指定微服务的请求的频率。</p>
+
+<h3 id="注意事项">注意事项</h3>
+
+<p>参考服务提供者处<a href="/users/service-configurations/#限流策略">限流策略注意事项</a>。</p>
+
+<h3 id="配置说明-2">配置说明</h3>
+
+<p>限流策略配置在microservice.yaml文件中,相关配置项见下表。要开启服务消费者端的限流策略,还需要在处理链中配置消费端限流handler,配置示例如下:</p>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">cse</span><span class="pi">:</span>
+  <span class="s">handler</span><span class="pi">:</span>
+    <span class="s">chain</span><span class="pi">:</span>
+      <span class="s">Consumer</span><span class="pi">:</span>
+        <span class="s">default</span><span class="pi">:</span> <span class="s">qps-flowcontrol-consumer</span>
+</code></pre>
+</div>
+
+<p>QPS流控配置项说明</p>
+
+<table>
+  <thead>
+    <tr>
+      <th style="text-align: left">配置项</th>
+      <th style="text-align: left">默认值</th>
+      <th style="text-align: left">取值范围</th>
+      <th style="text-align: left">是否必选</th>
+      <th style="text-align: left">含义</th>
+      <th style="text-align: left">注意</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td style="text-align: left">cse.flowcontrol.Consumer.qps.enabled</td>
+      <td style="text-align: left">true</td>
+      <td style="text-align: left">Boolean</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">是否启用Consumer流控</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.flowcontrol.Consumer.qps.limit.[ServiceName].[Schema].[operation]</td>
+      <td style="text-align: left">2147483647  (max int)</td>
+      <td style="text-align: left">(0,2147483647],整形</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">每秒钟允许的请求数</td>
+      <td style="text-align: left">支持microservice、schema、operation三个级别的配置</td>
+    </tr>
+  </tbody>
+</table>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/invoke-control.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/invoke-control.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/users/local-develop-test/index.html
----------------------------------------------------------------------
diff --git a/content/users/local-develop-test/index.html b/content/users/local-develop-test/index.html
new file mode 100644
index 0000000..2ca4301
--- /dev/null
+++ b/content/users/local-develop-test/index.html
@@ -0,0 +1,759 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>本地开发与测试 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="本地开发与测试">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="本地开发与测试">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/users/local-develop-test/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/users/local-develop-test/">
+
+
+
+  <meta property="og:description" content="本地开发与测试">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="本地开发与测试">
+  <meta name="twitter:description" content="本地开发与测试">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/users/local-develop-test/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">User Guide</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/" class="">Java Chassis Architecture</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/setup-environment/" class="">Setup Environment</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Provider</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-definition/" class="">Service Definition</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-contract/" class="">Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-springmvc/" class="">Develop Microservice with SpringMVC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-jax-rs/" class="">Develop Microservice with JAX-RS</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-transparent-rpc/" class="">Develop Microservice with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-interface-constraints/" class="">Service Interface Constraints</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-configurations/" class="">Service Configurations</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/communicate-protocol/" class="">Communicate Protocol</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/application-boot-process/" class="">Application Boot Up Process</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-heartbeat/" class="">Service Heartbeat</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Consumer</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rest-template/" class="">Develop with Rest Template</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rpc/" class="">Develop with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-service-contract/" class="">Use Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/invoke-control/" class="">Invoke Control</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">General Development</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/local-develop-test/" class="active">Develop and Test in Local Environment</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-servicecomb-in-spring-boot/" class="">Use ServiceComb in Spring Boot</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/distributed-tracing/" class="">Distributed Tracing</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/customized-tracing/" class="">Customized Tracing</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Edging Service</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/nginx/" class="">confd and Nginx</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/zuul/" class="">Zuul</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">Metrics</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Deployment</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/run-mode/" class="">Run Mode</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Security</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-tls/" class="">Use TLS</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="本地开发与测试">
+    <meta itemprop="description" content="本地开发与测试">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">本地开发与测试
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> On This Page</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#概念阐述" id="markdown-toc-概念阐述">概念阐述</a></li>
+  <li><a href="#启动本地服务中心" id="markdown-toc-启动本地服务中心">启动本地服务中心</a></li>
+  <li><a href="#mock机制启动服务中心" id="markdown-toc-mock机制启动服务中心">Mock机制启动服务中心</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="概念阐述">概念阐述</h2>
+
+<p>本小节介绍如何在开发者本地进行消费者/提供者应用的开发调试。开发服务提供者请参考<a href="/users/service-definition/">开发服务提供者章节</a>,开发服务消费者请参考<a href="/users/develop-with-rest-template/">开发服务消费者章节</a>。服务提供者和消费提供者均需要连接到在远程的服务中心,为了本地微服务的开发和调试,本小节介绍了两种搭建本地服务中心的方法进行本地微服务调试:</p>
+
+<ul>
+  <li>
+    <p><a href="#启动本地服务中心">启动本地服务中心</a>。</p>
+  </li>
+  <li>
+    <p><a href="#mock机制启动服务中心">通过local file模拟启动服务中心Mock机制</a>。</p>
+  </li>
+</ul>
+
+<p>服务中心是微服务框架中的重要组件,用于服务元数据以及服务实例元数据的管理和处理注册、发现。服务中心与微服务提供/消费者的逻辑关系下图所示:</p>
+
+<p><img src="/assets/images/local_develop_test.png" alt="" /></p>
+
+<h2 id="启动本地服务中心">启动本地服务中心</h2>
+
+<ul>
+  <li>
+    <p><strong>步骤1</strong> 启动本地服务中心,可参考<a href="/users/setup-environment/#运行service-center">运行Service Center指南</a>。</p>
+  </li>
+  <li>
+    <p><strong>步骤 2</strong> 启动本地轻量服务中心后,在服务提供/消费者的microservice.yaml文件中配置ServerCenter的地址和端口,示例代码:</p>
+
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code> <span class="s">cse</span><span class="pi">:</span>
+   <span class="s">service</span><span class="pi">:</span>
+     <span class="s">registry</span><span class="pi">:</span>
+       <span class="s">address</span><span class="pi">:</span> <span class="s">http://127.0.0.1:30100</span> <span class="c1">#服务中心地址及端口</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>步骤 3</strong> 开发服务提供/消费者,启动微服务进行本地测试。</p>
+  </li>
+</ul>
+
+<h2 id="mock机制启动服务中心">Mock机制启动服务中心</h2>
+
+<ul>
+  <li>
+    <p><strong>步骤 1</strong>新建本地服务中心定义文件registry.yaml,内容如下:</p>
+
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code> <span class="s">springmvctest</span><span class="pi">:</span>
+   <span class="pi">-</span> <span class="s">id</span><span class="pi">:</span> <span class="s2">"</span><span class="s">001"</span>
+     <span class="s">version</span><span class="pi">:</span> <span class="s2">"</span><span class="s">1.0"</span>
+     <span class="s">appid</span><span class="pi">:</span> <span class="s">myapp</span> <span class="c1">#调试的服务id</span>
+     <span class="s">instances</span><span class="pi">:</span> 
+       <span class="s">endpoints</span><span class="pi">:</span>
+         <span class="s">rest://127.0.0.1:8080</span>
+</code></pre>
+    </div>
+
+    <p>注意:mock机制需要自己准备契约,并且当前只支持在本地进行服务消费端(consumer)侧的调试,不支持服务提供者(provider)</p>
+  </li>
+  <li>
+    <p><strong>步骤 2</strong>在服务消费者Main函数首末添加如下代码:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="kd">public</span> <span class="kd">class</span> <span class="nc">xxxClient</span> <span class="o">{</span>
+ <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
+   <span class="n">System</span><span class="o">.</span><span class="na">setProperty</span><span class="o">(</span><span class="s">"local.registry.file"</span><span class="o">,</span> <span class="s">"/path/registry.yaml"</span><span class="o">);</span>
+   <span class="c1">//your code</span>
+   <span class="n">System</span><span class="o">.</span><span class="na">clearProperty</span><span class="o">(</span><span class="s">"local.registry.file"</span><span class="o">);</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+  </li>
+</ul>
+
+<p>setProperty第二个参数填写registry.yaml的系统绝对路径,注意区分在不同系统下使用对应的路径分隔符。</p>
+
+<ul>
+  <li><strong>步骤 3</strong>开发服务消费者,启动微服务进行本地测试。</li>
+</ul>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/local-develop-test.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/local-develop-test.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/users/metrics/index.html
----------------------------------------------------------------------
diff --git a/content/users/metrics/index.html b/content/users/metrics/index.html
new file mode 100644
index 0000000..0fc8250
--- /dev/null
+++ b/content/users/metrics/index.html
@@ -0,0 +1,748 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>Metrics Monitor - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="Metrics Monitor">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="Metrics Monitor">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/users/metrics/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/users/metrics/">
+
+
+
+  <meta property="og:description" content="Metrics Monitor">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="Metrics Monitor">
+  <meta name="twitter:description" content="Metrics Monitor">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/users/metrics/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">User Guide</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/" class="">Java Chassis Architecture</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/setup-environment/" class="">Setup Environment</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Provider</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-definition/" class="">Service Definition</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-contract/" class="">Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-springmvc/" class="">Develop Microservice with SpringMVC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-jax-rs/" class="">Develop Microservice with JAX-RS</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-transparent-rpc/" class="">Develop Microservice with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-interface-constraints/" class="">Service Interface Constraints</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-configurations/" class="">Service Configurations</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/communicate-protocol/" class="">Communicate Protocol</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/application-boot-process/" class="">Application Boot Up Process</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-heartbeat/" class="">Service Heartbeat</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Consumer</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rest-template/" class="">Develop with Rest Template</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rpc/" class="">Develop with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-service-contract/" class="">Use Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/invoke-control/" class="">Invoke Control</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">General Development</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/local-develop-test/" class="">Develop and Test in Local Environment</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-servicecomb-in-spring-boot/" class="">Use ServiceComb in Spring Boot</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/distributed-tracing/" class="">Distributed Tracing</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/customized-tracing/" class="">Customized Tracing</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Edging Service</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/nginx/" class="">confd and Nginx</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/zuul/" class="">Zuul</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">Metrics</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Deployment</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/run-mode/" class="">Run Mode</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Security</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-tls/" class="">Use TLS</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="Metrics Monitor">
+    <meta itemprop="description" content="Metrics Monitor">
+    
+    <meta itemprop="dateModified" content="November 29, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">Metrics Monitor
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> On This Page</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#如何配置" id="markdown-toc-如何配置">如何配置</a></li>
+  <li><a href="#注意事项" id="markdown-toc-注意事项">注意事项</a></li>
+  <li><a href="#文件输出" id="markdown-toc-文件输出">文件输出</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<p>微服务框架从0.4.1版本开始支持监控功能Metrics,请注意这个功能还处于开发(Preview)阶段,请不要部署到生产环境,并且我们未来会做较大的调整,更多讨论会持续发布在<a href="https://groups.google.com/forum/#!forum/servicecomb-developers">Google Group</a>中。</p>
+<h2 id="如何配置">如何配置</h2>
+<p>请在microservice.yaml中添加如下配置项:</p>
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">APPLICATION_ID</span><span class="pi">:</span> <span class="s">demo</span>
+<span class="s">service_description</span><span class="pi">:</span>
+  <span class="s">name</span><span class="pi">:</span> <span class="s">demoService</span>
+  <span class="s">version</span><span class="pi">:</span> <span class="s">0.0.1</span>
+
+<span class="s">servicecomb</span><span class="pi">:</span>
+  <span class="s">metrics</span><span class="pi">:</span>
+    <span class="c1">#metrics数据采集时间(同样是写文件间隔),单位秒</span>
+    <span class="s">polltime</span><span class="pi">:</span> <span class="s">5</span>
+    <span class="c1">#如果metric是浮点数,输出结果保留几位小数,默认为1</span>
+    <span class="s">round_places</span><span class="pi">:</span> <span class="s">1</span>
+    <span class="s">file</span><span class="pi">:</span>
+      <span class="c1">#是否启用文件输出</span>
+      <span class="s">enabled</span><span class="pi">:</span> <span class="s">true</span>
+      <span class="c1">#输出文件的根目录</span>
+      <span class="s">root_path</span><span class="pi">:</span> <span class="s">D:/Temp</span>
+      <span class="c1">#metrics文件的前缀</span>
+      <span class="s">name_prefix</span><span class="pi">:</span> <span class="s">demo.demoService</span>
+      <span class="c1">#metrics文件Rolling最大大小,默认10MB,例如10KB,10MB,10GB</span>
+      <span class="s">max_rolling_size</span><span class="pi">:</span> <span class="s">10MB</span>
+      <span class="c1">#metrics文件Rolling文件保存数量,默认10个</span>
+      <span class="s">max_rolling_count</span><span class="pi">:</span> <span class="s">10</span>
+</code></pre>
+</div>
+
+<h2 id="注意事项">注意事项</h2>
+<ul>
+  <li>如果使用ServiceComb Spring Boot Start快速构建项目,需要排除log4j-over-slf4j依赖
+    <div class="language-xml highlighter-rouge"><pre class="highlight"><code> <span class="nt">&lt;dependency&gt;</span>
+   <span class="nt">&lt;groupId&gt;</span>org.springframework.boot<span class="nt">&lt;/groupId&gt;</span>
+   <span class="nt">&lt;artifactId&gt;</span>spring-boot-starter<span class="nt">&lt;/artifactId&gt;</span>
+   <span class="c">&lt;!--Metric使用log4j输出,屏蔽掉spring-boot-starter中的log4j-over-slf4j--&gt;</span>
+   <span class="nt">&lt;exclusions&gt;</span>
+     <span class="nt">&lt;exclusion&gt;</span>
+       <span class="nt">&lt;groupId&gt;</span>org.slf4j<span class="nt">&lt;/groupId&gt;</span>
+       <span class="nt">&lt;artifactId&gt;</span>log4j-over-slf4j<span class="nt">&lt;/artifactId&gt;</span>
+     <span class="nt">&lt;/exclusion&gt;</span>
+   <span class="nt">&lt;/exclusions&gt;</span>
+ <span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+    </div>
+  </li>
+  <li>需要在provider治理链中添加bizkeeper-provider,否则TPS和Latency无数据
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code> <span class="s">APPLICATION_ID</span><span class="pi">:</span> <span class="s">demo</span>
+ <span class="s">service_description</span><span class="pi">:</span>
+   <span class="s">name</span><span class="pi">:</span> <span class="s">demoService</span>
+   <span class="s">version</span><span class="pi">:</span> <span class="s">0.0.1</span>
+ <span class="s">cse</span><span class="pi">:</span>
+   <span class="s">handler</span><span class="pi">:</span>
+     <span class="s">chain</span><span class="pi">:</span>
+       <span class="s">Provider</span><span class="pi">:</span>
+         <span class="s">default</span><span class="pi">:</span> <span class="s">bizkeeper-provider</span>
+</code></pre>
+    </div>
+  </li>
+</ul>
+
+<h2 id="文件输出">文件输出</h2>
+<p>每一个文件就是一个微服务示例级别的metrics数据输出:</p>
+
+<p><img src="/assets/images/metrics-output.png" alt="Metrics图片" /></p>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/Metrics.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/Metrics.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/users/run-mode/index.html
----------------------------------------------------------------------
diff --git a/content/users/run-mode/index.html b/content/users/run-mode/index.html
new file mode 100644
index 0000000..e5c3578
--- /dev/null
+++ b/content/users/run-mode/index.html
@@ -0,0 +1,771 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>运行模式 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="运行模式">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="运行模式">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/users/run-mode/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/users/run-mode/">
+
+
+
+  <meta property="og:description" content="运行模式">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="运行模式">
+  <meta name="twitter:description" content="运行模式">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/users/run-mode/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">User Guide</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/" class="">Java Chassis Architecture</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/setup-environment/" class="">Setup Environment</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Provider</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-definition/" class="">Service Definition</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-contract/" class="">Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-springmvc/" class="">Develop Microservice with SpringMVC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-jax-rs/" class="">Develop Microservice with JAX-RS</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-transparent-rpc/" class="">Develop Microservice with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-interface-constraints/" class="">Service Interface Constraints</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-configurations/" class="">Service Configurations</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/communicate-protocol/" class="">Communicate Protocol</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/application-boot-process/" class="">Application Boot Up Process</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-heartbeat/" class="">Service Heartbeat</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Consumer</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rest-template/" class="">Develop with Rest Template</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rpc/" class="">Develop with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-service-contract/" class="">Use Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/invoke-control/" class="">Invoke Control</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">General Development</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/local-develop-test/" class="">Develop and Test in Local Environment</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-servicecomb-in-spring-boot/" class="">Use ServiceComb in Spring Boot</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/distributed-tracing/" class="">Distributed Tracing</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/customized-tracing/" class="">Customized Tracing</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Edging Service</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/nginx/" class="">confd and Nginx</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/zuul/" class="">Zuul</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">Metrics</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Deployment</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/run-mode/" class="active">Run Mode</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Security</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-tls/" class="">Use TLS</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="运行模式">
+    <meta itemprop="description" content="运行模式">
+    
+    <meta itemprop="dateModified" content="June 06, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">运行模式
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> On This Page</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#standalone模式" id="markdown-toc-standalone模式">standalone模式</a>    <ul>
+      <li><a href="#操作步骤" id="markdown-toc-操作步骤">操作步骤</a></li>
+    </ul>
+  </li>
+  <li><a href="#web容器模式" id="markdown-toc-web容器模式">WEB容器模式</a>    <ul>
+      <li><a href="#开发示例" id="markdown-toc-开发示例">开发示例</a></li>
+    </ul>
+  </li>
+</ul>
+
+  </nav>
+</aside>
+
+<p>微服务框架当前提供了两种部署运行模式:standalone模式和web容器模式。推荐使用<strong>standalone模式</strong>拉起服务进程。</p>
+<h2 id="standalone模式">standalone模式</h2>
+<p>一个Standalone的容器,以简单的Main加载Spring启动,因为服务通常不需要Tomcat/JBoss等Web容器的特性,没必要用Web容器去加载服务。微框架提供了standalone部署运行模式,服务容器只是一个简单的Main方法,并加载一个简单的Spring容器,用于暴露服务。</p>
+
+<h3 id="操作步骤">操作步骤</h3>
+
+<ul>
+  <li>
+    <p><strong>步骤1</strong> 编写Main函数,初始化日志和加载服务配置,内容如下:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="kn">import</span> <span class="nn">io.servicecomb.foundation.common.utils.BeanUtils</span><span class="o">;</span>
+ <span class="kn">import</span> <span class="nn">io.servicecomb.foundation.common.utils.Log4jUtils</span><span class="o">;</span>
+ <span class="kd">public</span> <span class="kd">class</span> <span class="nc">MainServer</span> <span class="o">{</span>
+   <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span>
+   <span class="err"> </span><span class="n">Log4jUtils</span><span class="o">.</span><span class="na">init</span><span class="o">();</span> <span class="err">#日志初始化</span>
+   <span class="err"> </span><span class="n">BeanUtils</span><span class="o">.</span><span class="na">init</span><span class="o">();</span> <span class="err">#</span> <span class="n">Spring</span> <span class="n">bean</span><span class="err">初始化</span>
+     <span class="c1">// other codes omitted</span>
+   <span class="o">}</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>步骤2</strong> 运行MainServer即可启动该微服务进程,向外暴露服务。</p>
+
+    <p>注意:如果使用的是rest网络通道,需要将pom中的transport改为使用cse-transport-rest-vertx包。</p>
+  </li>
+</ul>
+
+<h2 id="web容器模式">WEB容器模式</h2>
+<p>如果需要将该微服务加载到web容器中启动运行时,需要新建一个servlet工程包装一下,该servlet工程,根据需要,可以不写或写少量的引导代码即可。</p>
+
+<h3 id="开发示例">开发示例</h3>
+
+<div class="language-xml highlighter-rouge"><pre class="highlight"><code><span class="nt">&lt;web-app&gt;</span>
+    <span class="nt">&lt;context-param&gt;</span>
+        <span class="nt">&lt;param-name&gt;</span>contextConfigLocation<span class="nt">&lt;/param-name&gt;</span>
+        <span class="nt">&lt;param-value&gt;</span>
+            classpath*:META-INF/spring/*.bean.xml
+            classpath*:app-config.xml
+        <span class="nt">&lt;/param-value&gt;</span>
+    <span class="nt">&lt;/context-param&gt;</span>
+    <span class="nt">&lt;listener&gt;</span>
+        <span class="nt">&lt;listener-class&gt;</span>io.servicecomb.transport.rest.servlet.RestServletContextListener<span class="nt">&lt;/listener-class&gt;</span>
+    <span class="nt">&lt;/listener&gt;</span>
+
+    <span class="nt">&lt;servlet&gt;</span>
+        <span class="nt">&lt;servlet-name&gt;</span>RestServlet<span class="nt">&lt;/servlet-name&gt;</span>
+        <span class="nt">&lt;servlet-class&gt;</span>io.servicecomb.transport.rest.servlet.RestServlet<span class="nt">&lt;/servlet-class&gt;</span>
+        <span class="nt">&lt;load-on-startup&gt;</span>1<span class="nt">&lt;/load-on-startup&gt;</span>
+        <span class="nt">&lt;async-supported&gt;</span>true<span class="nt">&lt;/async-supported&gt;</span>
+    <span class="nt">&lt;/servlet&gt;</span>
+    <span class="nt">&lt;servlet-mapping&gt;</span>
+        <span class="nt">&lt;servlet-name&gt;</span>RestServlet<span class="nt">&lt;/servlet-name&gt;</span>
+        <span class="nt">&lt;url-pattern&gt;</span>/rest/*<span class="nt">&lt;/url-pattern&gt;</span>
+    <span class="nt">&lt;/servlet-mapping&gt;</span>
+<span class="nt">&lt;/web-app&gt;</span>
+</code></pre>
+</div>
+
+<ul>
+  <li><strong>步骤2 修改pom文件</strong></li>
+</ul>
+
+<div class="language-xml highlighter-rouge"><pre class="highlight"><code><span class="nt">&lt;dependencies&gt;</span>
+    <span class="nt">&lt;dependency&gt;</span>
+        <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+        <span class="nt">&lt;artifactId&gt;</span>transport-rest-servlet<span class="nt">&lt;/artifactId&gt;</span>
+    <span class="nt">&lt;/dependency&gt;</span>
+<span class="nt">&lt;/dependencies&gt;</span>
+<span class="nt">&lt;build&gt;</span>
+    <span class="nt">&lt;finalName&gt;</span>test<span class="nt">&lt;/finalName&gt;</span>
+<span class="nt">&lt;/build&gt;</span>
+</code></pre>
+</div>
+
+<p><strong>注意事项:</strong></p>
+<ol>
+  <li>RESTful调用应该与web容器中其他静态资源调用(比如html、js等等)隔离开来,所以webroot后一段应该还有一层关键字,比如上面web.xml中举的例子(/test/rest)中的rest。</li>
+  <li>以tomcat为例,默认每个war包都有不同的webroot,这个webroot需要是basePath的前缀,比如webroot为test,则该微服务所有的契约都必须以/test打头。</li>
+  <li>当微服务加载在web容器中,并直接使用web容器开的http、https端口时,因为是使用的web容器的通信通道,所以需要满足web容器的规则。</li>
+</ol>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/deployment.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/deployment.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>


[29/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/users/develop-with-jax-rs/index.html
----------------------------------------------------------------------
diff --git a/content/cn/users/develop-with-jax-rs/index.html b/content/cn/users/develop-with-jax-rs/index.html
new file mode 100644
index 0000000..d13d0ee
--- /dev/null
+++ b/content/cn/users/develop-with-jax-rs/index.html
@@ -0,0 +1,844 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>用JAX-RS开发微服务 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="用JAX-RS开发微服务">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="用JAX-RS开发微服务">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/develop-with-jax-rs/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/develop-with-jax-rs/">
+
+
+
+  <meta property="og:description" content="用JAX-RS开发微服务">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="用JAX-RS开发微服务">
+  <meta name="twitter:description" content="用JAX-RS开发微服务">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/users/develop-with-jax-rs/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">用户手册</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/" class="">Java Chassis系统架构</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/setup-environment/" class="">环境配置</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务提供者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-definition/" class="">服务定义</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-contract/" class="">服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-springmvc/" class="">用SpringMVC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-jax-rs/" class="active">用JAX-RS开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-transparent-rpc/" class="">用透明RPC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-interface-constraints/" class="">服务接口约束</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-configurations/" class="">服务配置</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/communicate-protocol/" class="">通信协议</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/application-boot-process/" class="">程序启动逻辑</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-heartbeat/" class="">服务心跳</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务消费者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rest-template/" class="">使用Rest Template方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rpc/" class="">使用RPC方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-service-contract/" class="">使用服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/invoke-control/" class="">调用控制</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">通用开发</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/local-develop-test/" class="">本地开发与测试</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-servicecomb-in-spring-boot/" class="">在Spring Boot中使用ServiceComb</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/distributed-tracing/" class="">分布式调用链追踪</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/customized-tracing/" class="">自定义调用链打点</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">服务能力开放</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/nginx/" class="">使用confd和Nginx做边缘服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/zuul/" class="">使用Zuul做边缘服务</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">监控</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">部署</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/run-mode/" class="">运行模式</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">微服务安全</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-tls/" class="">使用TLS通信</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="用JAX-RS开发微服务">
+    <meta itemprop="description" content="用JAX-RS开发微服务">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">用JAX-RS开发微服务
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> 在本页上</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#概念阐述" id="markdown-toc-概念阐述">概念阐述</a></li>
+  <li><a href="#开发示例" id="markdown-toc-开发示例">开发示例</a></li>
+  <li><a href="#涉及api" id="markdown-toc-涉及api">涉及API</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="概念阐述">概念阐述</h2>
+
+<p>ServiceComb支持开发者使用JAX-RS注解,使用JAX-RS模式开发服务。</p>
+
+<h2 id="开发示例">开发示例</h2>
+
+<ul>
+  <li>
+    <p><strong>步骤 1</strong> 定义服务接口。</p>
+
+    <p>根据开发之前定义好的契约,编写Java业务接口,代码如下:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="kd">public</span> <span class="kd">interface</span> <span class="nc">Hello</span> <span class="o">{</span>
+  <span class="err"> </span><span class="n">String</span> <span class="nf">sayHi</span><span class="o">(</span><span class="n">String</span> <span class="n">name</span><span class="o">);</span>
+  <span class="err"> </span><span class="n">String</span> <span class="nf">sayHello</span><span class="o">(</span><span class="n">Person</span> <span class="n">person</span><span class="o">);</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+
+    <blockquote>
+      <p><strong>说明</strong>:
+ 该接口的位置需要与契约中x-java-interface所指定的路径一致。</p>
+    </blockquote>
+  </li>
+  <li>
+    <p><strong>步骤 2</strong> 实现服务。</p>
+
+    <p>使用JAX-RS注解开发业务代码,Hello的服务实现如下:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="kn">import</span> <span class="nn">javax.ws.rs.POST</span><span class="o">;</span>
+ <span class="kn">import</span> <span class="nn">javax.ws.rs.Path</span><span class="o">;</span>
+ <span class="kn">import</span> <span class="nn">javax.ws.rs.Produces</span><span class="o">;</span>
+ <span class="kn">import</span> <span class="nn">javax.ws.rs.core.MediaType</span><span class="o">;</span>
+ <span class="kn">import</span> <span class="nn">io.servicecomb.samples.common.schema.Hello</span><span class="o">;</span>
+ <span class="kn">import</span> <span class="nn">io.servicecomb.samples.common.schema.models.Person</span><span class="o">;</span>
+
+ <span class="nd">@Path</span><span class="o">(</span><span class="s">"/jaxrshello"</span><span class="o">)</span>
+ <span class="nd">@Produces</span><span class="o">(</span><span class="n">MediaType</span><span class="o">.</span><span class="na">APPLICATION_JSON</span><span class="o">)</span>
+ <span class="kd">public</span> <span class="kd">class</span> <span class="nc">JaxrsHelloImpl</span> <span class="kd">implements</span> <span class="n">Hello</span> <span class="o">{</span>
+   <span class="nd">@Path</span><span class="o">(</span><span class="s">"/sayhi"</span><span class="o">)</span>
+   <span class="nd">@POST</span>
+   <span class="nd">@Override</span>
+   <span class="kd">public</span> <span class="n">String</span> <span class="nf">sayHi</span><span class="o">(</span><span class="n">String</span> <span class="n">name</span><span class="o">)</span> <span class="o">{</span>
+   <span class="err"> </span><span class="k">return</span> <span class="s">"Hello "</span> <span class="o">+</span> <span class="n">name</span><span class="o">;</span>
+   <span class="o">}</span>
+
+   <span class="nd">@Path</span><span class="o">(</span><span class="s">"/sayhello"</span><span class="o">)</span>
+   <span class="nd">@POST</span>
+   <span class="nd">@Override</span>
+   <span class="kd">public</span> <span class="n">String</span> <span class="nf">sayHello</span><span class="o">(</span><span class="n">Person</span> <span class="n">person</span><span class="o">)</span> <span class="o">{</span>
+     <span class="k">return</span> <span class="s">"Hello person "</span> <span class="o">+</span> <span class="n">person</span><span class="o">.</span><span class="na">getName</span><span class="o">();</span>
+   <span class="o">}</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>步骤 3</strong> 发布服务。</p>
+
+    <p>在服务的实现类上打上注解<code class="highlighter-rouge">@RestSchema</code>,指定schemaId,表示该实现作为当前微服务的一个schema发布,代码如下:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="kn">import</span> <span class="nn">io.servicecomb.provider.rest.common.RestSchema</span><span class="o">;</span>
+ <span class="c1">// other code omitted</span>
+ <span class="nd">@RestSchema</span><span class="o">(</span><span class="n">schemaId</span> <span class="o">=</span> <span class="s">"jaxrsHello"</span><span class="o">)</span>
+ <span class="kd">public</span> <span class="kd">class</span> <span class="nc">JaxrsHelloImpl</span> <span class="kd">implements</span> <span class="n">Hello</span> <span class="o">{</span>
+   <span class="c1">// other code omitted</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+
+    <p>然后在resources/META-INF/spring目录下创建jaxrsHello.bean.xml文件,配置spring进行服务扫描的base-package,文件内容如下:</p>
+
+    <div class="language-xml highlighter-rouge"><pre class="highlight"><code> <span class="cp">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span>
+ <span class="nt">&lt;beans</span> <span class="na">xmlns=</span><span class="s">" http://www.springframework.org/schema/beans "</span> <span class="na">xmlns:xsi=</span><span class="s">" http://www.w3.org/2001/XMLSchema-instance "</span>
+        <span class="na">xmlns:p=</span><span class="s">" http://www.springframework.org/schema/p "</span> <span class="na">xmlns:util=</span><span class="s">" http://www.springframework.org/schema/util "</span>
+        <span class="na">xmlns:cse=</span><span class="s">" http://www.huawei.com/schema/paas/cse/rpc "</span>
+        <span class="na">xmlns:context=</span><span class="s">" http://www.springframework.org/schema/context "</span>
+        <span class="na">xsi:schemaLocation=</span><span class="s">" http://www.springframework.org/schema/beans classpath:org/springframework/beans/factory/xml/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.huawei.com/schema/paas/cse/rpc classpath:META-INF/spring/spring-paas-cse-rpc.xsd"</span><span class="nt">&gt;</span>
+   
+     <span class="nt">&lt;context:component-scan</span> <span class="na">base-package=</span><span class="s">"io.servicecomb.samples.jaxrs.provider"</span><span class="nt">/&gt;</span>
+ <span class="nt">&lt;/beans&gt;</span>
+</code></pre>
+    </div>
+  </li>
+</ul>
+
+<h2 id="涉及api">涉及API</h2>
+
+<p>JAX-RS开发模式当前支持如下注解,所有注解的使用方法参考<a href="https://jax-rs-spec.java.net/nonav/2.0-rev-a/apidocs/index.html">JAX-RS官方文档</a>。</p>
+
+<table>
+  <thead>
+    <tr>
+      <th style="text-align: left">注解</th>
+      <th style="text-align: left">位置</th>
+      <th style="text-align: left">描述</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td style="text-align: left">javax.ws.rs.Path</td>
+      <td style="text-align: left">schema/operation</td>
+      <td style="text-align: left">URL路径</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">javax.ws.rs.Produces</td>
+      <td style="text-align: left">schema/operation</td>
+      <td style="text-align: left">方法支持的编解码能力</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">javax.ws.rs.DELETE</td>
+      <td style="text-align: left">operation</td>
+      <td style="text-align: left">http method</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">javax.ws.rs.GET</td>
+      <td style="text-align: left">operation</td>
+      <td style="text-align: left">http method</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">javax.ws.rs.POST</td>
+      <td style="text-align: left">operation</td>
+      <td style="text-align: left">http method</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">javax.ws.rs.PUT</td>
+      <td style="text-align: left">operation</td>
+      <td style="text-align: left">http method</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">javax.ws.rs.QueryParam</td>
+      <td style="text-align: left">parameter</td>
+      <td style="text-align: left">从query string中获取参数</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">javax.ws.rs.PathParam</td>
+      <td style="text-align: left">parameter</td>
+      <td style="text-align: left">从path中获取参数,必须在path中定义该参数</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">javax.ws.rs.HeaderParam</td>
+      <td style="text-align: left">parameter</td>
+      <td style="text-align: left">从header中获取参数</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">javax.ws.rs.CookieParam</td>
+      <td style="text-align: left">parameter</td>
+      <td style="text-align: left">从cookie中获取参数</td>
+    </tr>
+  </tbody>
+</table>
+
+<blockquote>
+  <p><strong>说明</strong>:</p>
+  <ul>
+    <li>当方法参数没有注解,且不为HttpServletRequest类型参数时,默认为body类型参数,一个方法只支持最多一个body类型参数。</li>
+    <li>打在参数上面的注解建议显式定义出value值,否则将直接使用契约中的参数名,例如应该使用<code class="highlighter-rouge">@QueryParam\("name"\) String name</code>,而不是<code class="highlighter-rouge">@QueryParam String name</code>。</li>
+  </ul>
+</blockquote>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/cn/develop-with-jax-rs.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/cn/develop-with-jax-rs.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/users/develop-with-rest-template/index.html
----------------------------------------------------------------------
diff --git a/content/cn/users/develop-with-rest-template/index.html b/content/cn/users/develop-with-rest-template/index.html
new file mode 100644
index 0000000..56ed1b2
--- /dev/null
+++ b/content/cn/users/develop-with-rest-template/index.html
@@ -0,0 +1,736 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>使用Rest Template方式开发 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="使用Rest Template方式开发">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="使用Rest Template方式开发">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/develop-with-rest-template/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/develop-with-rest-template/">
+
+
+
+  <meta property="og:description" content="使用Rest Template方式开发">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="使用Rest Template方式开发">
+  <meta name="twitter:description" content="使用Rest Template方式开发">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/users/develop-with-rest-template/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">用户手册</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/" class="">Java Chassis系统架构</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/setup-environment/" class="">环境配置</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务提供者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-definition/" class="">服务定义</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-contract/" class="">服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-springmvc/" class="">用SpringMVC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-jax-rs/" class="">用JAX-RS开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-transparent-rpc/" class="">用透明RPC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-interface-constraints/" class="">服务接口约束</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-configurations/" class="">服务配置</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/communicate-protocol/" class="">通信协议</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/application-boot-process/" class="">程序启动逻辑</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-heartbeat/" class="">服务心跳</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务消费者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rest-template/" class="active">使用Rest Template方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rpc/" class="">使用RPC方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-service-contract/" class="">使用服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/invoke-control/" class="">调用控制</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">通用开发</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/local-develop-test/" class="">本地开发与测试</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-servicecomb-in-spring-boot/" class="">在Spring Boot中使用ServiceComb</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/distributed-tracing/" class="">分布式调用链追踪</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/customized-tracing/" class="">自定义调用链打点</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">服务能力开放</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/nginx/" class="">使用confd和Nginx做边缘服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/zuul/" class="">使用Zuul做边缘服务</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">监控</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">部署</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/run-mode/" class="">运行模式</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">微服务安全</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-tls/" class="">使用TLS通信</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="使用Rest Template方式开发">
+    <meta itemprop="description" content="使用Rest Template方式开发">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">使用Rest Template方式开发
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> 在本页上</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#概念阐述" id="markdown-toc-概念阐述">概念阐述</a></li>
+  <li><a href="#场景描述" id="markdown-toc-场景描述">场景描述</a></li>
+  <li><a href="#示例代码" id="markdown-toc-示例代码">示例代码</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="概念阐述">概念阐述</h2>
+
+<p>  Rest Template是Spring提供的RESTful访问接口,ServiceComb提供该接口的实现类用于服务的调用。</p>
+
+<h2 id="场景描述">场景描述</h2>
+
+<p>  用户使用ServiceComb提供的Rest Template实例,可以使用自定义的URL进行服务调用,而不用关心服务的具体地址。</p>
+
+<h2 id="示例代码">示例代码</h2>
+
+<p>  Rest Template实例通过调用<code class="highlighter-rouge">RestTemplateBuilder.create()</code>方法获取,再使用该实例通过自定义的URL进行服务调用,代码如下:</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">org.springframework.stereotype.Component</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">org.springframework.web.client.RestTemplate</span><span class="o">;</span>
+
+<span class="kn">import</span> <span class="nn">io.servicecomb.foundation.common.utils.BeanUtils</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">io.servicecomb.foundation.common.utils.Log4jUtils</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">io.servicecomb.provider.springmvc.reference.RestTemplateBuilder</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">io.servicecomb.samples.common.schema.models.Person</span><span class="o">;</span>
+
+<span class="nd">@Component</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">SpringmvcConsumerMain</span> <span class="o">{</span>
+    <span class="kd">private</span> <span class="kd">static</span> <span class="n">RestTemplate</span> <span class="n">restTemplate</span> <span class="o">=</span> <span class="n">RestTemplateBuilder</span><span class="o">.</span><span class="na">create</span><span class="o">();</span>
+
+    <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span>
+        <span class="n">init</span><span class="o">();</span>
+        <span class="n">Person</span> <span class="n">person</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Person</span><span class="o">();</span>
+        <span class="n">person</span><span class="o">.</span><span class="na">setName</span><span class="o">(</span><span class="s">"ServiceComb/Java Chassis"</span><span class="o">);</span>
+        <span class="n">String</span> <span class="n">sayHiResult</span> <span class="o">=</span> <span class="n">restTemplate</span>
+                <span class="o">.</span><span class="na">postForObject</span><span class="o">(</span><span class="s">"cse://springmvc/springmvchello/sayhi?name=Java Chassis"</span><span class="o">,</span> <span class="kc">null</span><span class="o">,</span> <span class="n">String</span><span class="o">.</span><span class="na">class</span><span class="o">);</span>
+        <span class="n">String</span> <span class="n">sayHelloResult</span> <span class="o">=</span> <span class="n">restTemplate</span>
+                <span class="o">.</span><span class="na">postForObject</span><span class="o">(</span><span class="s">"cse://springmvc/springmvchello/sayhello"</span><span class="o">,</span> <span class="n">person</span><span class="o">,</span> <span class="n">String</span><span class="o">.</span><span class="na">class</span><span class="o">);</span>
+        <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"RestTemplate consumer sayhi services: "</span> <span class="o">+</span> <span class="n">sayHiResult</span><span class="o">);</span>
+        <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"RestTemplate consumer sayhello services: "</span> <span class="o">+</span> <span class="n">sayHelloResult</span><span class="o">);</span>
+    <span class="o">}</span>
+
+    <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">init</span><span class="o">()</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span>
+        <span class="n">Log4jUtils</span><span class="o">.</span><span class="na">init</span><span class="o">();</span>
+        <span class="n">BeanUtils</span><span class="o">.</span><span class="na">init</span><span class="o">();</span>
+    <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<blockquote>
+  <p>说明:</p>
+  <ul>
+    <li>URL格式为:<code class="highlighter-rouge">cse://microserviceName/path?querystring</code>。以<a href="/cn/users/develop-with-springmvc/">用SpringMVC开发微服务</a>中定义的服务提供者为例,其微服务名称是<code class="highlighter-rouge">springmvc</code>,basePath是<code class="highlighter-rouge">/springmvchello</code>,那么URL中的microserviceName是<code class="highlighter-rouge">springmvc</code>,请求sayhi时的path是<code class="highlighter-rouge">springmvchello/sayhi</code>,所以示例代码中请求sayhi的URL是<code class="highlighter-rouge">cse://springmvc/springmvchello/sayhi?name=Java Chassis</code>。</li>
+    <li>使用这种URL格式,ServiceComb框架会在内部进行服务发现、熔断容错等处理并最终将请求发送到服务提供者。</li>
+  </ul>
+</blockquote>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/cn/develop-with-rest-template.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/cn/develop-with-rest-template.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/users/develop-with-rpc/index.html
----------------------------------------------------------------------
diff --git a/content/cn/users/develop-with-rpc/index.html b/content/cn/users/develop-with-rpc/index.html
new file mode 100644
index 0000000..0caff3b
--- /dev/null
+++ b/content/cn/users/develop-with-rpc/index.html
@@ -0,0 +1,722 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>使用RPC方式开发 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="使用RPC方式开发">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="使用RPC方式开发">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/develop-with-rpc/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/develop-with-rpc/">
+
+
+
+  <meta property="og:description" content="使用RPC方式开发">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="使用RPC方式开发">
+  <meta name="twitter:description" content="使用RPC方式开发">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/users/develop-with-rpc/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">用户手册</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/" class="">Java Chassis系统架构</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/setup-environment/" class="">环境配置</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务提供者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-definition/" class="">服务定义</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-contract/" class="">服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-springmvc/" class="">用SpringMVC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-jax-rs/" class="">用JAX-RS开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-transparent-rpc/" class="">用透明RPC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-interface-constraints/" class="">服务接口约束</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-configurations/" class="">服务配置</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/communicate-protocol/" class="">通信协议</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/application-boot-process/" class="">程序启动逻辑</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-heartbeat/" class="">服务心跳</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务消费者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rest-template/" class="">使用Rest Template方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rpc/" class="active">使用RPC方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-service-contract/" class="">使用服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/invoke-control/" class="">调用控制</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">通用开发</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/local-develop-test/" class="">本地开发与测试</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-servicecomb-in-spring-boot/" class="">在Spring Boot中使用ServiceComb</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/distributed-tracing/" class="">分布式调用链追踪</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/customized-tracing/" class="">自定义调用链打点</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">服务能力开放</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/nginx/" class="">使用confd和Nginx做边缘服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/zuul/" class="">使用Zuul做边缘服务</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">监控</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">部署</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/run-mode/" class="">运行模式</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">微服务安全</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-tls/" class="">使用TLS通信</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="使用RPC方式开发">
+    <meta itemprop="description" content="使用RPC方式开发">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">使用RPC方式开发
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> 在本页上</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#概念阐述" id="markdown-toc-概念阐述">概念阐述</a></li>
+  <li><a href="#示例代码" id="markdown-toc-示例代码">示例代码</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="概念阐述">概念阐述</h2>
+
+<p>RPC开发方式允许用户通过在服务接口上标注注解来生成服务提供者代理,从而进行服务的调用。</p>
+
+<h2 id="示例代码">示例代码</h2>
+
+<p>只需要声明一个服务接口类型的成员,并且使用<code class="highlighter-rouge">@RpcReference</code>标注该成员,声明依赖的微服务及schemaId,即可进行服务调用,示例代码如下:</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">org.springframework.stereotype.Component</span><span class="o">;</span>
+
+<span class="kn">import</span> <span class="nn">io.servicecomb.foundation.common.utils.BeanUtils</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">io.servicecomb.foundation.common.utils.Log4jUtils</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">io.servicecomb.provider.pojo.RpcReference</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">io.servicecomb.samples.common.schema.Hello</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">io.servicecomb.samples.common.schema.models.Person</span><span class="o">;</span>
+
+<span class="nd">@Component</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">CodeFirstConsumerMain</span> <span class="o">{</span>
+    <span class="nd">@RpcReference</span><span class="o">(</span><span class="n">microserviceName</span> <span class="o">=</span> <span class="s">"codefirst"</span><span class="o">,</span> <span class="n">schemaId</span> <span class="o">=</span> <span class="s">"codeFirstHello"</span><span class="o">)</span>
+    <span class="kd">private</span> <span class="kd">static</span> <span class="n">Hello</span> <span class="n">hello</span><span class="o">;</span>
+
+    <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span>
+        <span class="n">init</span><span class="o">();</span>
+        <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">hello</span><span class="o">.</span><span class="na">sayHi</span><span class="o">(</span><span class="s">"Java Chassis"</span><span class="o">));</span>
+        <span class="n">Person</span> <span class="n">person</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Person</span><span class="o">();</span>
+        <span class="n">person</span><span class="o">.</span><span class="na">setName</span><span class="o">(</span><span class="s">"ServiceComb/Java Chassis"</span><span class="o">);</span>
+        <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">hello</span><span class="o">.</span><span class="na">sayHello</span><span class="o">(</span><span class="n">person</span><span class="o">));</span>
+    <span class="o">}</span>
+
+    <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">init</span><span class="o">()</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span>
+        <span class="n">Log4jUtils</span><span class="o">.</span><span class="na">init</span><span class="o">();</span>
+        <span class="n">BeanUtils</span><span class="o">.</span><span class="na">init</span><span class="o">();</span>
+    <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<p>在以上代码中,服务消费者已经取得了服务提供者的服务接口<code class="highlighter-rouge">Hello</code>,并在代码中声明一个<code class="highlighter-rouge">Hello</code>类型的成员。通过在<code class="highlighter-rouge">hello</code>上使用<code class="highlighter-rouge">@RPCReference</code>注解指明微服务名称和schemaId,ServiceComb框架可以在程序启动时从服务中心获取到对应的服务提供者实例信息,并且生成一个代理注入到hello中,用户可以像调用本地类一样调用远程服务。</p>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/cn/develop-with-rpc.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/cn/develop-with-rpc.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>


[36/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/docs/quick-start-bmi/index.html
----------------------------------------------------------------------
diff --git a/content/cn/docs/quick-start-bmi/index.html b/content/cn/docs/quick-start-bmi/index.html
new file mode 100644
index 0000000..9dddbe2
--- /dev/null
+++ b/content/cn/docs/quick-start-bmi/index.html
@@ -0,0 +1,682 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>体质指数微服务应用快速开发 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="以体质指数应用为例介绍如何基于Java Chassis快速开发微服务应用">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="体质指数微服务应用快速开发">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/quick-start-bmi/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/quick-start-bmi/">
+
+
+
+  <meta property="og:description" content="以体质指数应用为例介绍如何基于Java Chassis快速开发微服务应用">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="体质指数微服务应用快速开发">
+  <meta name="twitter:description" content="以体质指数应用为例介绍如何基于Java Chassis快速开发微服务应用">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/docs/quick-start-bmi/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/docs/quick-start/"><span class="nav__sub-title nav__sub-title-with-url">快速入门</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/docs/quick-start-bmi/"><span class="nav__sub-title nav__sub-title-with-url">微服务应用快速开发</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/docs/quick-start-advance/"><span class="nav__sub-title nav__sub-title-with-url">微服务开发进阶</span></a>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/docs/quick-start-advance/load-balance/" class="">负载均衡</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/docs/quick-start-advance/flow-control/" class="">流量控制</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/docs/quick-start-advance/service-management/" class="">服务治理</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/docs/quick-start-advance/distributed-tracing/" class="">分布式调用链追踪</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/docs/quick-start-dataconsistency/"><span class="nav__sub-title nav__sub-title-with-url">数据一致性解决方案</span></a>
+        
+
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="体质指数微服务应用快速开发">
+    <meta itemprop="description" content="以体质指数应用为例介绍如何基于Java Chassis快速开发微服务应用">
+    
+    <meta itemprop="dateModified" content="September 04, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">体质指数微服务应用快速开发
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> 在本页上</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#前言" id="markdown-toc-前言">前言</a></li>
+  <li><a href="#快速开发微服务应用" id="markdown-toc-快速开发微服务应用">快速开发微服务应用</a>    <ul>
+      <li><a href="#体质指数计算器实现" id="markdown-toc-体质指数计算器实现">体质指数计算器实现</a></li>
+      <li><a href="#体质指数界面实现" id="markdown-toc-体质指数界面实现">体质指数界面实现</a></li>
+    </ul>
+  </li>
+  <li><a href="#下一步" id="markdown-toc-下一步">下一步</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="前言">前言</h2>
+<p>在您进一步阅读之前,请确保您已阅读了<a href="/cn/docs/quick-start/">快速入门指南</a>,并已成功运行<strong>体质指数</strong>微服务。接下来将进入<strong>体质指数</strong>微服务应用的开发之旅。</p>
+
+<h2 id="快速开发微服务应用">快速开发微服务应用</h2>
+<p>在<a href="/cn/docs/quick-start/">快速入门指南</a>中已对<strong>体质指数</strong>微服务的架构进行了说明,其主要由两个微服务组成:</p>
+
+<ul>
+  <li>
+    <p><strong>体质指数计算器</strong>:负责处理运算事务。</p>
+  </li>
+  <li>
+    <p><strong>体质指数界面</strong>:提供用户界面及网关服务。</p>
+  </li>
+</ul>
+
+<p>下面将对这两个微服务的实现进行介绍,其代码已托管于<a href="https://github.com/ServiceComb/ServiceComb-Java-Chassis/tree/master/samples/bmi">github</a>上。</p>
+<h3 id="体质指数计算器实现">体质指数计算器实现</h3>
+<p>体质指数计算器提供运算服务,其实现分为三部分:</p>
+
+<ul>
+  <li>
+    <p>具体运算实现</p>
+  </li>
+  <li>
+    <p>服务端点定义</p>
+  </li>
+  <li>
+    <p>服务启动入口</p>
+  </li>
+</ul>
+
+<h4 id="具体运算实现">具体运算实现</h4>
+<p>本模块负责计算体质指数,根据公式 \(体质指数=\frac{体重}{身高^2}\) 进行实现,代码如下:</p>
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">interface</span> <span class="nc">CalculatorService</span> <span class="o">{</span>
+  <span class="kt">double</span> <span class="nf">calculate</span><span class="o">(</span><span class="kt">double</span> <span class="n">height</span><span class="o">,</span> <span class="kt">double</span> <span class="n">weight</span><span class="o">);</span>
+<span class="o">}</span>
+
+<span class="nd">@Service</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">CalculatorServiceImpl</span> <span class="kd">implements</span> <span class="n">CalculatorService</span> <span class="o">{</span>
+  <span class="nd">@Override</span>
+  <span class="kd">public</span> <span class="kt">double</span> <span class="nf">calculate</span><span class="o">(</span><span class="kt">double</span> <span class="n">height</span><span class="o">,</span> <span class="kt">double</span> <span class="n">weight</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">if</span> <span class="o">(</span><span class="n">height</span> <span class="o">&lt;=</span> <span class="mi">0</span> <span class="o">||</span> <span class="n">weight</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="o">)</span> <span class="o">{</span>
+      <span class="k">throw</span> <span class="k">new</span> <span class="nf">IllegalArgumentException</span><span class="o">(</span><span class="s">"Arguments must be above 0"</span><span class="o">);</span>
+    <span class="o">}</span>
+    <span class="kt">double</span> <span class="n">heightInMeter</span> <span class="o">=</span> <span class="n">height</span> <span class="o">/</span> <span class="mi">100</span><span class="o">;</span>
+    <span class="k">return</span> <span class="n">weight</span> <span class="o">/</span> <span class="o">(</span><span class="n">heightInMeter</span> <span class="o">*</span> <span class="n">heightInMeter</span><span class="o">);</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<h4 id="服务端点定义">服务端点定义</h4>
+<p>服务端点用于生成服务契约,使得服务间能无缝进行通信。首先定义端点接口:</p>
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">interface</span> <span class="nc">CalculatorEndpoint</span> <span class="o">{</span>
+  <span class="kt">double</span> <span class="nf">calculate</span><span class="o">(</span><span class="kt">double</span> <span class="n">height</span><span class="o">,</span> <span class="kt">double</span> <span class="n">weight</span><span class="o">);</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+<p>引入 <strong>ServiceComb</strong> 依赖:</p>
+<div class="language-xml highlighter-rouge"><pre class="highlight"><code>    <span class="nt">&lt;dependency&gt;</span>
+      <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+      <span class="nt">&lt;artifactId&gt;</span>spring-boot-starter-provider<span class="nt">&lt;/artifactId&gt;</span>
+    <span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+</div>
+<p>暴露运算服务的Restful端点:</p>
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@RestSchema</span><span class="o">(</span><span class="n">schemaId</span> <span class="o">=</span> <span class="s">"calculatorRestEndpoint"</span><span class="o">)</span>
+<span class="nd">@RequestMapping</span><span class="o">(</span><span class="s">"/"</span><span class="o">)</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">CalculatorRestEndpoint</span> <span class="kd">implements</span> <span class="n">CalculatorEndpoint</span> <span class="o">{</span>
+
+  <span class="kd">private</span> <span class="kd">final</span> <span class="n">CalculatorService</span> <span class="n">calculatorService</span><span class="o">;</span>
+
+  <span class="nd">@Autowired</span>
+  <span class="kd">public</span> <span class="nf">CalculatorRestEndpoint</span><span class="o">(</span><span class="n">CalculatorService</span> <span class="n">calculatorService</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">this</span><span class="o">.</span><span class="na">calculatorService</span> <span class="o">=</span> <span class="n">calculatorService</span><span class="o">;</span>
+  <span class="o">}</span>
+
+  <span class="nd">@Override</span>
+  <span class="nd">@GetMapping</span><span class="o">(</span><span class="s">"/bmi"</span><span class="o">)</span>
+  <span class="kd">public</span> <span class="kt">double</span> <span class="nf">calculate</span><span class="o">(</span><span class="kt">double</span> <span class="n">height</span><span class="o">,</span> <span class="kt">double</span> <span class="n">weight</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">return</span> <span class="n">calculatorService</span><span class="o">.</span><span class="na">calculate</span><span class="o">(</span><span class="n">height</span><span class="o">,</span> <span class="n">weight</span><span class="o">);</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<p class="notice--info">ServiceComb从0.3.0版本之后提供了对SpringMvc中简化注解(即<code class="highlighter-rouge">GetMapping</code>等)的支持。</p>
+
+<p>这里用<code class="highlighter-rouge">@RestSchema</code>注释端点后, <strong>ServiceComb</strong> 微服务框架会自动生成对应的服务端点契约,并根据
+如下的 <code class="highlighter-rouge">microservice.yaml</code> 文件中的定义来配置端点端口,将契约和服务一起注册到服务注册中心。</p>
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">APPLICATION_ID</span><span class="pi">:</span> <span class="s">bmi</span>
+<span class="s">service_description</span><span class="pi">:</span>
+  <span class="s">name</span><span class="pi">:</span> <span class="s">calculator</span>
+  <span class="s">version</span><span class="pi">:</span> <span class="s">0.0.1</span>
+<span class="s">cse</span><span class="pi">:</span>
+  <span class="s">service</span><span class="pi">:</span>
+    <span class="s">registry</span><span class="pi">:</span>
+      <span class="s">address</span><span class="pi">:</span> <span class="s">http://127.0.0.1:30100</span>
+  <span class="s">rest</span><span class="pi">:</span>
+    <span class="s">address</span><span class="pi">:</span> <span class="s">0.0.0.0:7777</span>
+</code></pre>
+</div>
+
+<h4 id="服务启动入口">服务启动入口</h4>
+<p>服务启动入口中只需添加 <code class="highlighter-rouge">@EnableServiceComb</code> 的注解即可启用 <em>ServiceComb</em> 微服务框架,代码如下:</p>
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@SpringBootApplication</span>
+<span class="nd">@EnableServiceComb</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">CalculatorApplication</span> <span class="o">{</span>
+  <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
+    <span class="n">SpringApplication</span><span class="o">.</span><span class="na">run</span><span class="o">(</span><span class="n">CalculatorApplication</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">args</span><span class="o">);</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<h3 id="体质指数界面实现">体质指数界面实现</h3>
+<p>本模块负责提供用户界面及网关服务。其实现主要分为三部分:</p>
+
+<ul>
+  <li>
+    <p>前端界面</p>
+  </li>
+  <li>
+    <p>网关及路由规则</p>
+  </li>
+  <li>
+    <p>服务启动入口</p>
+  </li>
+</ul>
+
+<p>其中,前端界面的组件使用了<a href="http://getbootstrap.com/">Bootstrap</a>来开发。</p>
+
+<h4 id="网关及路由规则">网关及路由规则</h4>
+<p>网关服务主要用到了业界有名的<a href="https://github.com/Netflix/zuul/wiki">Netflix Zuul</a>来实现。</p>
+
+<p>引入依赖:</p>
+<div class="language-xml highlighter-rouge"><pre class="highlight"><code>    <span class="nt">&lt;dependency&gt;</span>
+      <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+      <span class="nt">&lt;artifactId&gt;</span>spring-boot-starter-discovery<span class="nt">&lt;/artifactId&gt;</span>
+    <span class="nt">&lt;/dependency&gt;</span>
+    <span class="nt">&lt;dependency&gt;</span>
+      <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+      <span class="nt">&lt;artifactId&gt;</span>spring-boot-starter-servicecomb<span class="nt">&lt;/artifactId&gt;</span>
+    <span class="nt">&lt;/dependency&gt;</span>
+    <span class="nt">&lt;dependency&gt;</span>
+      <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+      <span class="nt">&lt;artifactId&gt;</span>spring-cloud-zuul<span class="nt">&lt;/artifactId&gt;</span>
+    <span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+</div>
+
+<p class="notice--info">ServiceComb从0.4.0-SNAPSHOT版本之后新增了<code class="highlighter-rouge">spring-cloud-zuul</code>模块使能提供对zuul的兼容。</p>
+
+<p>在 <code class="highlighter-rouge">application.yaml</code> 文件中配置路由规则及服务端口信息:</p>
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">zuul</span><span class="pi">:</span>
+  <span class="s">routes</span><span class="pi">:</span>
+    <span class="s">calculator</span><span class="pi">:</span> <span class="s">/calculator/**</span>
+
+<span class="c1"># disable netflix eurkea since it's not used for service discovery</span>
+<span class="s">ribbon</span><span class="pi">:</span>
+  <span class="s">eureka</span><span class="pi">:</span>
+    <span class="s">enabled</span><span class="pi">:</span> <span class="s">false</span>
+
+<span class="s">server</span><span class="pi">:</span>
+  <span class="s">port</span><span class="pi">:</span> <span class="s">8889</span>
+</code></pre>
+</div>
+<p>在 <code class="highlighter-rouge">microservice.yaml</code> 文件中配置网关服务的信息和服务注册中心的地址。</p>
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">APPLICATION_ID</span><span class="pi">:</span> <span class="s">bmi</span>
+<span class="s">service_description</span><span class="pi">:</span>
+  <span class="s">name</span><span class="pi">:</span> <span class="s">gateway</span>
+  <span class="s">version</span><span class="pi">:</span> <span class="s">0.0.1</span>
+<span class="s">cse</span><span class="pi">:</span>
+  <span class="s">service</span><span class="pi">:</span>
+    <span class="s">registry</span><span class="pi">:</span>
+      <span class="s">address</span><span class="pi">:</span> <span class="s">http://127.0.0.1:30100</span>
+</code></pre>
+</div>
+<p>此处将服务注册中心和Zuul相结合使能服务发现。</p>
+
+<h4 id="服务启动入口-1">服务启动入口</h4>
+<p>服务启动入口也只需要声明启用 <code class="highlighter-rouge">ServiceComb</code> 和 <code class="highlighter-rouge">Zuul</code> 即可。</p>
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@SpringBootApplication</span>
+<span class="nd">@EnableZuulProxy</span>
+<span class="nd">@EnableServiceComb</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">GatewayApplication</span> <span class="o">{</span>
+  <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
+    <span class="n">SpringApplication</span><span class="o">.</span><span class="na">run</span><span class="o">(</span><span class="n">GatewayApplication</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">args</span><span class="o">);</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<p>至此,<strong>体质指数</strong>应用已开发完毕,您可以通过<a href="/cn/docs/quick-start/#运行微服务应用">快速入门指南</a>中的步骤对其进行验证。</p>
+
+<h2 id="下一步">下一步</h2>
+
+<ul>
+  <li>阅读 <a href="/cn/docs/quick-start-advance/">微服务开发进阶</a></li>
+</ul>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _docs/cn/quick-start-bmi.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_docs/cn/quick-start-bmi.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>


[19/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/docs/distributed_saga_2/index.html
----------------------------------------------------------------------
diff --git a/content/docs/distributed_saga_2/index.html b/content/docs/distributed_saga_2/index.html
new file mode 100644
index 0000000..c8fe578
--- /dev/null
+++ b/content/docs/distributed_saga_2/index.html
@@ -0,0 +1,868 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>Eventual Data Consistency Solution in ServiceComb - part 2 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="The design of distributed saga in ServiceComb">
+
+
+
+
+<meta name="author" content="Sean Yin">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="Eventual Data Consistency Solution in ServiceComb - part 2">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/distributed_saga_2/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/distributed_saga_2/">
+
+
+
+  <meta property="og:description" content="The design of distributed saga in ServiceComb">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="Eventual Data Consistency Solution in ServiceComb - part 2">
+  <meta name="twitter:description" content="The design of distributed saga in ServiceComb">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+    <meta name="twitter:creator" content="@seanyinx">
+  
+
+
+
+  
+
+  
+
+
+
+
+
+  <meta property="og:type" content="article">
+  <meta property="article:published_time" content="2017-09-16T00:00:00+08:00">
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/docs/distributed_saga_2/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+
+<div itemscope itemtype="http://schema.org/Person">
+
+  
+
+  <div class="author__content">
+    <h3 class="author__name" itemprop="name">Sean Yin</h3>
+    
+      <p class="author__bio" itemprop="description">
+	    
+        Nothing but speed is indestructible
+	    
+      </p>
+    
+  </div>
+
+  <div class="author__urls-wrapper">
+    <button class="btn btn--inverse">Follow</button>
+    <ul class="author__urls social-icons">
+      
+
+      
+        <li>
+          <a href="http://seanyinx.github.io" itemprop="url">
+            <i class="fa fa-fw fa-chain" aria-hidden="true"></i> Website
+          </a>
+        </li>
+      
+
+      
+        <li>
+          <a href="mailto:seanyinx@gmail.com">
+            <meta itemprop="email" content="seanyinx@gmail.com" />
+            <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> Email
+          </a>
+        </li>
+      
+
+      
+
+      
+        <li>
+          <a href="https://twitter.com/seanyinx" itemprop="sameAs">
+            <i class="fa fa-fw fa-twitter-square" aria-hidden="true"></i> Twitter
+          </a>
+        </li>
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      <!--
+  <li>
+    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs">
+      <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link
+    </a>
+  </li>
+-->
+    </ul>
+  </div>
+</div>
+
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="Eventual Data Consistency Solution in ServiceComb - part 2">
+    <meta itemprop="description" content="The design of distributed saga in ServiceComb">
+    <meta itemprop="datePublished" content="September 16, 2017">
+    <meta itemprop="dateModified" content="September 16, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">Eventual Data Consistency Solution in ServiceComb - part 2
+</h1>
+            
+              <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  4 minute read
+
+</p>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <p>In my <a href="/docs/distributed_saga_1/">previous post</a>, I talked about how <a href="https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf">Saga</a> can 
+be used to solve the data consistency issue of our trip planning application. Now let's gather the requirements to design
+a saga.</p>
+
+<h2 id="saga-log">Saga Log</h2>
+<p>Saga guarantees either all sub-transactions are committed or compensated for, but the saga system itself may crash. There
+are a few states that a saga may be in on crash:</p>
+<ul>
+  <li>Saga received a request, but no transaction started yet. States of services involved in sub-transactions are not modified
+by saga, nothing has been done.</li>
+  <li>Some sub-transactions were done. When restarted, saga has to resume from the last completed transaction.</li>
+  <li>A sub-transaction was started, but not completed yet. Since we are not sure if the remote service completed the transaction, 
+failed the transaction, or the request to remote service timed out, saga has to redo the sub-transaction on restart. That also
+means sub-transactions have to be idempotent.</li>
+  <li>A sub-transaction failed and its compensating transaction has not started yet. Saga has to resume from the compensating
+transaction on restart.</li>
+  <li>A compensating transaction started but not completed yet. The solution is basically the same as the previous one. That means
+compensating transactions have to idempotent too.</li>
+  <li>All sub-transactions or compensating transactions were done, which is the same as the first case.</li>
+</ul>
+
+<p>In order for saga to recover to the states mentioned above, we have to keep track of each step of sub-transactions and
+compensating transactions. We decided to achieve that by saving the following events in a persistent store called saga log:</p>
+<ul>
+  <li><strong>Saga started event</strong> stores the entire saga request, which includes multiple transaction/compensation requests</li>
+  <li><strong>Transaction started event</strong> stores individual transaction request</li>
+  <li><strong>Transaction ended event</strong> stores individual transaction request and its response</li>
+  <li><strong>Transaction aborted event</strong> stores individual transaction request and the cause of failure</li>
+  <li><strong>Transaction compensated event</strong> stores individual compensation request and its response</li>
+  <li><strong>Saga ended event</strong> marks the end of a saga request and stores nothing</li>
+</ul>
+
+<p><img src="/assets/images/saga.events.png" alt="Events" class="align-center" /></p>
+
+<p>By persisting these events in saga log, a crashed saga can be recovered to any states above.</p>
+
+<p>Since saga only needs persistence of events and the event contents are stored as JSON, the implementation of the saga log 
+is very flexible. Databases (SQL or NoSQL), durable message queues, or even plain files can be used as event storage, but
+some are faster for saga to recover.</p>
+
+<h2 id="request-data-structure-of-saga">Request Data Structure of Saga</h2>
+<p>In our case, flight booking, car rental, and hotel reservation have no dependency among each other at all and they can be
+processed in parallel. However, it's more user friendly for our customers to only charge their credit cards once, when all 
+the bookings are done successfully. That means the transactions of the four services look like the graph below.</p>
+
+<p><img src="/assets/images/saga.transactions.png" alt="Transactions" class="align-center" /></p>
+
+<p>It makes sense to implement the data structure of trip planning request as a <a href="https://en.wikipedia.org/wiki/Directed_acyclic_graph">Directed Acyclic Graph</a>.
+The root of the graph is saga start task and the leaf is saga end task.</p>
+
+<p><img src="/assets/images/saga.graph.png" alt="Request Graph" class="align-center" /></p>
+
+<h2 id="parallel-saga">Parallel Saga</h2>
+<p>As mentioned above, flight booking, car rental, and hotel reservation can be processed in parallel. But doing so creates
+another problem: what if flight booking failed while car rental is being processed? We can't keep waiting for the response
+from car rental service, because we have no idea how long it will take.</p>
+
+<p>THe best thing we can do is to send the car rental request again and hope we get a response so that we can continue our 
+backward recovery. If car rental service never responds, we may have to fallback with manual intervention.</p>
+
+<p>The delayed booking request may still be received by the remote car rental service. When it does, the service has already
+processed the same booking and its cancellation request.</p>
+
+<p><img src="/assets/images/saga.commutative.png" alt="Network Latency" class="align-center" /></p>
+
+<p>Therefore, services have to implement transactions and compensations in such a way that transaction request received after
+its compensation request takes no effect. Caitie McCaffrey called this <strong>commutative compensating request</strong> in her talk 
+on <a href="https://www.youtube.com/watch?v=1H6tounpnG8">Distributed Sagas: A Protocol for Coordinating Microservices</a>.</p>
+
+<h2 id="acid-and-saga">ACID and Saga</h2>
+<p><a href="https://en.wikipedia.org/wiki/ACID">ACID</a> is consistency model with the following properties:</p>
+<ul>
+  <li>Atomicity</li>
+  <li>Consistency</li>
+  <li>Isolation</li>
+  <li>Durability</li>
+</ul>
+
+<p>Saga does not provide ACID guarantee, because atomicity and isolation are not satisfied according to the <a href="https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf">paper</a></p>
+<blockquote>
+  <p>full atomicity is not provided. That is, sagas may view the partial results of other sagas [<a href="https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf">1</a>]</p>
+</blockquote>
+
+<p>With durable saga log, saga guarantees consistency and durability.</p>
+
+<h2 id="saga-architecture">Saga Architecture</h2>
+<p>Finally, the architecture of our saga looks like this</p>
+
+<p><img src="/assets/images/saga.design.png" alt="Saga Architecture" class="align-center" /></p>
+
+<ul>
+  <li>Saga execution component parses the request JSON and builds a graph of requests</li>
+  <li>TaskRunner ensures the execution order of requests with task queue</li>
+  <li>TaskConsumer processes tasks to write events to saga log and send requests to remote services</li>
+</ul>
+
+<h2 id="summary">Summary</h2>
+<p>In this article, we talked about how saga can be implemented with a saga log to persist transaction/compensation events 
+and request graph. A crashed saga can also be recovered from all the persisted events in saga log on restart. However,
+there are a few requirements on design of microservices to ensure saga consistency guarantee:</p>
+<ul>
+  <li>transaction and compensation requests must be idempotent</li>
+  <li>compensation requests must be commutative</li>
+</ul>
+
+<h2 id="references">References</h2>
+<ol>
+  <li><a href="https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf">Original Paper on Sagas</a> by By Hector Garcia-Molina &amp; Kenneth Salem</li>
+</ol>
+
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+  
+
+
+  
+  
+  
+
+  <p class="page__taxonomy">
+    <strong><i class="fa fa-fw fa-tags" aria-hidden="true"></i> Tags: </strong>
+    <span itemprop="keywords">
+    
+      
+      
+      <a href="/tags/#saga" class="page__taxonomy-item" rel="tag">saga</a>
+    
+    </span>
+  </p>
+
+
+
+
+
+        
+          
+            
+              <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> Updated:</strong> <time datetime="2017-09-16">September 16, 2017</time></p>
+            
+          
+        
+      </footer>
+
+      <section class="page__share">
+  
+    <h4 class="page__share-title">Share on</h4>
+  
+
+  <a href="https://twitter.com/intent/tweet?via=ServiceComb&text=Eventual Data Consistency Solution in ServiceComb - part 2 /docs/distributed_saga_2/" class="btn btn--twitter" title="Share on Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
+
+  <a href="https://www.facebook.com/sharer/sharer.php?u=/docs/distributed_saga_2/" class="btn btn--facebook" title="Share on Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
+
+  <a href="https://plus.google.com/share?url=/docs/distributed_saga_2/" class="btn btn--google-plus" title="Share on Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
+
+  <a href="https://www.linkedin.com/shareArticle?mini=true&url=/docs/distributed_saga_2/" class="btn btn--linkedin" title="Share on LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
+</section>
+
+
+      
+  <nav class="pagination">
+    
+      <a href="/cn/docs/performance-test-on-seckill-with-jmeter/" class="pagination--pager" title="使用JMeter对秒杀示例进行性能测试
+">Previous</a>
+    
+    
+      <a href="/cn/docs/distributed_saga_2/" class="pagination--pager" title="ServiceComb中的数据最终一致性方案 - part 2
+">Next</a>
+    
+  </nav>
+
+
+    </div>
+
+    
+      <div class="page__comments">
+  
+  
+    <section id="static-comments">
+      
+        <!-- Start static comments -->
+        <div class="js-comments">
+          
+        </div>
+        <!-- End static comments -->
+
+        <!-- Start new comment form -->
+        <h4 class="page__comments-title">Leave a Comment</h4>
+        <p class="small">Your email address will not be published. Required fields are marked <span class="required">*</span></p>
+        <form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/ServiceComb/servicesomb.github.io/master">
+          <div class="form__spinner">
+            <i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
+            <span class="sr-only">Loading...</span>
+          </div>
+
+          <fieldset>
+            <label for="comment-form-message">Comment <small class="required">*</small></label>
+            <textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
+            <div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">Markdown is supported.</a></div>
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-name">Name <small class="required">*</small></label>
+            <input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-email">Email address <small class="required">*</small></label>
+            <input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-url">Website (optional)</label>
+            <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
+          </fieldset>
+          <fieldset class="hidden" style="display: none;">
+            <input type="hidden" name="options[slug]" value="saga-design">
+            <label for="comment-form-location">Not used. Leave blank if you are a human.</label>
+            <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
+          </fieldset>
+          <!-- Start comment form alert messaging -->
+          <p class="hidden js-notice">
+            <strong class="js-notice-text"></strong>
+          </p>
+          <!-- End comment form alert messaging -->
+          <fieldset>
+            <button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--large">Submit Comment</button>
+          </fieldset>
+        </form>
+        <!-- End new comment form -->
+      
+    </section>
+  
+</div>
+
+    
+  </article>
+
+  
+  
+    <div class="page__related">
+      <h4 class="page__related-title">You May Also Enjoy</h4>
+      <div class="grid__wrapper">
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/jira_beginner_guide/" rel="permalink">老司机带你刷任务 - ServiceComb JIRA入门指南
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">ServiceComb JIRA入门指南
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  less than 1 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/how-to-reform-a-legacy-system/" rel="permalink">最头疼的遗留系统该如何改造?
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  1 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+      </div>
+    </div>
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _posts/2017-09-16-saga-design.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_posts/2017-09-16-saga-design.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  
+  <script>
+    (function ($) {
+    var $comments = $('.js-comments');
+
+    $('#new_comment').submit(function () {
+      var form = this;
+
+      $(form).addClass('disabled');
+      $('#comment-form-submit').html('<i class="fa fa-spinner fa-spin fa-fw"></i> Loading...');
+
+      $.ajax({
+        type: $(this).attr('method'),
+        url: $(this).attr('action'),
+        data: $(this).serialize(),
+        contentType: 'application/x-www-form-urlencoded',
+        success: function (data) {
+          $('#comment-form-submit').html('Submitted');
+          $('.page__comments-form .js-notice').removeClass('notice--danger');
+          $('.page__comments-form .js-notice').addClass('notice--success');
+          showAlert('Thanks for your comment! It will show on the site once it has been approved.');
+        },
+        error: function (err) {
+          console.log(err);
+          $('#comment-form-submit').html('Submit Comment');
+          $('.page__comments-form .js-notice').removeClass('notice--success');
+          $('.page__comments-form .js-notice').addClass('notice--danger');
+          showAlert('Sorry, there was an error with your submission. Please make sure all required fields have been completed and try again.');
+          $(form).removeClass('disabled');
+        }
+      });
+
+      return false;
+    });
+
+    function showAlert(message) {
+      $('.page__comments-form .js-notice').removeClass('hidden');
+      $('.page__comments-form .js-notice-text').html(message);
+    }
+  })(jQuery);
+  </script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/docs/distributed_saga_3/index.html
----------------------------------------------------------------------
diff --git a/content/docs/distributed_saga_3/index.html b/content/docs/distributed_saga_3/index.html
new file mode 100644
index 0000000..81931ed
--- /dev/null
+++ b/content/docs/distributed_saga_3/index.html
@@ -0,0 +1,901 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>Eventual Data Consistency Solution in ServiceComb - part 3 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="How is distributed saga in ServiceComb comparing with other consistency solutions?">
+
+
+
+
+<meta name="author" content="Sean Yin">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="Eventual Data Consistency Solution in ServiceComb - part 3">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/distributed_saga_3/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/distributed_saga_3/">
+
+
+
+  <meta property="og:description" content="How is distributed saga in ServiceComb comparing with other consistency solutions?">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="Eventual Data Consistency Solution in ServiceComb - part 3">
+  <meta name="twitter:description" content="How is distributed saga in ServiceComb comparing with other consistency solutions?">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+    <meta name="twitter:creator" content="@seanyinx">
+  
+
+
+
+  
+
+  
+
+
+
+
+
+  <meta property="og:type" content="article">
+  <meta property="article:published_time" content="2017-09-18T00:00:00+08:00">
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/docs/distributed_saga_3/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+
+<div itemscope itemtype="http://schema.org/Person">
+
+  
+
+  <div class="author__content">
+    <h3 class="author__name" itemprop="name">Sean Yin</h3>
+    
+      <p class="author__bio" itemprop="description">
+	    
+        Nothing but speed is indestructible
+	    
+      </p>
+    
+  </div>
+
+  <div class="author__urls-wrapper">
+    <button class="btn btn--inverse">Follow</button>
+    <ul class="author__urls social-icons">
+      
+
+      
+        <li>
+          <a href="http://seanyinx.github.io" itemprop="url">
+            <i class="fa fa-fw fa-chain" aria-hidden="true"></i> Website
+          </a>
+        </li>
+      
+
+      
+        <li>
+          <a href="mailto:seanyinx@gmail.com">
+            <meta itemprop="email" content="seanyinx@gmail.com" />
+            <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> Email
+          </a>
+        </li>
+      
+
+      
+
+      
+        <li>
+          <a href="https://twitter.com/seanyinx" itemprop="sameAs">
+            <i class="fa fa-fw fa-twitter-square" aria-hidden="true"></i> Twitter
+          </a>
+        </li>
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      <!--
+  <li>
+    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs">
+      <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link
+    </a>
+  </li>
+-->
+    </ul>
+  </div>
+</div>
+
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="Eventual Data Consistency Solution in ServiceComb - part 3">
+    <meta itemprop="description" content="How is distributed saga in ServiceComb comparing with other consistency solutions?">
+    <meta itemprop="datePublished" content="September 18, 2017">
+    <meta itemprop="dateModified" content="September 18, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">Eventual Data Consistency Solution in ServiceComb - part 3
+</h1>
+            
+              <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  5 minute read
+
+</p>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <p>In my <a href="/docs/distributed_saga_2/">previous post</a>, I talked about how <a href="https://en.wikipedia.org/wiki/Two-phase_commit_protocol">Saga</a> in
+ServiceComb is designed. However, there are quite a few data consistency solutions such as Two-Phase Commit (2PC) 
+and Try-Confirm/Cancel (TCC). What makes saga special?</p>
+
+<h2 id="two-phase-commit-2pc">Two-Phase Commit (2PC)</h2>
+<blockquote>
+  <p>Two-phase commit protocol is a distributed algorithm that coordinates all the processes that participate in a distributed 
+atomic transaction on whether to commit or abort (roll back) the transaction. <a href="https://en.wikipedia.org/wiki/Two-phase_commit_protocol">1</a></p>
+</blockquote>
+
+<p>It has two phases:</p>
+<ul>
+  <li><strong>voting phase</strong> coordinator sends vote request to all services and services respond with either yes or no. If any service
+refuse with no or timeout, coordinator sends abort message in the next phase.</li>
+</ul>
+
+<p><img src="/assets/images/saga.2pc.phase1.png" alt="voting phase" class="align-center" /></p>
+
+<ul>
+  <li><strong>decision phase</strong> if all services say yes, coordinator sends commit message to services and services acknowledge either
+transaction done or failed. If any service fails to commit, coordinator will initiate additional rounds to abort the transaction.</li>
+</ul>
+
+<p><img src="/assets/images/saga.2pc.phase2.png" alt="decision phase" class="align-center" /></p>
+
+<p>Between the end of voting phase and the end of decision phase, services are in <strong>uncertain</strong> state, because they are not sure
+if the transaction is going to proceed or not. When a service is in uncertain state and loses connection with coordinator,
+it may either wait for coordinator's recovery, or consult other services in certain state for coordinator's decision.
+In the worst case, n uncertain services broadcasting messages to other n - 1 services will incur <strong>O(n<sup>2</sup>)</strong> messages.</p>
+
+<p>Another disadvantage of 2PC is that it is a blocking protocol. A service will block and lock resources, while waiting for
+decision from coordinator after voting. 2PC does not scale well when the number of services involved in a transaction grows,
+because of its blocking mechanism and worst case time complexity.</p>
+
+<p>More details on implementation of 2PC can be found at <a href="https://cs.nyu.edu/courses/spring03/G22.2631-001/lecture8.pdf">2</a> and <a href="http://courses.cs.vt.edu/~cs5204/fall00/distributedDBMS/duckett/tpcp.html">3</a>.</p>
+
+<h2 id="try-confirmcancel-tcc">Try-Confirm/Cancel (TCC)</h2>
+<p>TCC is a compensating transaction pattern for business model that is two-phased.</p>
+<ul>
+  <li><strong>try phase</strong> puts a service in pending state. For example, a try request in our flight booking service will reserve a
+seat for the customer and insert a customer reservation record with reserved state into database. If any service fails to
+make a reservation or times out, the coordinator will send a cancel request in the next phase.</li>
+</ul>
+
+<p><img src="/assets/images/saga.tcc.try.png" alt="try phase" class="align-center" /></p>
+
+<ul>
+  <li><strong>confirm phase</strong> moves the service to confirmed state. A confirm request will confirm that a seat is booked for the 
+customer and he or she will be billed. The customer reservation record in database will be updated to confirmed state.
+If any service fails to confirm or times out, the coordinator will either retry confirmation until success or involve manual
+intervention after it retries a certain number of times.</li>
+</ul>
+
+<p><img src="/assets/images/saga.tcc.confirm.png" alt="confirm phase" class="align-center" /></p>
+
+<p>Comparing with saga, TCC has an advantage in that try phase transitions services into pending state instead of final
+state, which makes cancellation trivial to design.</p>
+
+<p>For example, a try request for an email service may mark an email as ready to send and the email is only sent on confirm 
+request. Its corresponding cancel request needs only to mark the email as obsolete. However, in case of using saga, a transaction
+will send the email and its corresponding compensating transaction may have to send another email to explain the problem.</p>
+
+<p>The disadvantage of TCC, comparing with saga, is that its two-phased protocol requires services to be designed with additional
+pending state and interface to handle try request. And it may take twice the time to complete a TCC request than a saga request,
+because TCC communicates with each service twice and the confirm phase can only be started when responses of try request
+are received from all services.</p>
+
+<p>More detailed explanation of TCC can be found at <a href="https://www.infoq.com/presentations/Transactions-HTTP-REST">Transactions for the REST of Us</a>.</p>
+
+<h2 id="event-driven-architecture">Event Driven Architecture</h2>
+<p>In event driven architecture, just like TCC, an extra pending status is required for each service involved in a long live transaction.
+Services receiving transaction request insert a new record into its database with pending status and send a new event to
+the next service in the transaction sequence.</p>
+
+<p>Because it's possible that a service crashes after inserting the record and we are not sure if the new event is sent,
+an extra event table is required for each service to keep track of which step the current long live transaction is in.</p>
+
+<p><img src="/assets/images/saga.event.driven.request.png" alt="event driven architecture - request" class="align-center" /></p>
+
+<p>Once the last service in the long live transaction completes its job, it notifies the previous service in the transaction.
+Services receiving completion event set its record status to done in its database.</p>
+
+<p><img src="/assets/images/saga.event.driven.response.png" alt="event driven architecture - response" class="align-center" /></p>
+
+<p>If you look closer, event driven architecture is just like a decentralized implementation of event driven TCC. If we remove
+the pending state for each service, this architecture looks like a decentralized and event driven saga.
+Being decentralized is good, but it creates much tighter coupling between services. Let's assume a new business requirement adds a new
+process D between B and C. With event driven architecture, service B and C have to change their code to accommodate the new 
+process D.</p>
+
+<p><img src="/assets/images/saga.event.coupling.png" alt="event driven architecture - coupling" class="align-center" /></p>
+
+<p>On the contrary, all these coupling is in saga and no change is required for existing services when a new process is added
+to the long live transaction.</p>
+
+<p>More details can be found at <a href="https://www.nginx.com/blog/event-driven-data-management-microservices/">Event-Driven Data Management for Microservices</a>.</p>
+
+<h2 id="centralized-vs-decentralized">Centralized vs Decentralized</h2>
+<p>This blog series have been talked about centralized saga. But saga can be implemented as decentralized solution too. 
+How does the decentralized version look like?</p>
+
+<p>The decentralized version of saga does not have a dedicated coordinator. Whoever calling the next service
+in the transaction becomes the current coordinator instead. For example,</p>
+<ul>
+  <li>service A receives a request requiring data consistency across service A, B, and C.</li>
+  <li>A does its job and passes the request to the next service in the request, service B.</li>
+  <li>B completes its part and passes the request to C, and so on.</li>
+  <li>If C fails to process the request, it is B's responsibility to initiate its compensating transaction and asks A to rollback.</li>
+</ul>
+
+<p><img src="/assets/images/saga.decentralized.png" alt="decentralized saga" class="align-center" /></p>
+
+<p>Comparing with centralized one, the decentralized version has the advantage of service autonomy. But each service is
+coupled with data consistency protocol, which may require additional persistence infrastructure.</p>
+
+<p>We love services implementing business rules to be autonomous, but there are many application related complexity such as
+data consistency, service monitoring, and message passing, that are better to be centralized, so that business services
+are able to focus on dealing with business complexity instead of application complexity. That's why we designed centralized saga.</p>
+
+<p>In addition, the relationship among services in a long live transaction becomes harder and harder to understand, as the 
+number of services grows. It may quickly grow into a death star like the image below.</p>
+
+<p class="figure-caption"><img src="/assets/images/saga.death.star.png" alt="death star architecture" class="align-center" />
+Image source: http://www.slideshare.net/BruceWong3/the-case-for-chaos (s12)</p>
+
+<p>Meanwhile, locating the root cause of a problem in a long live transaction also becomes more troublesome, since the 
+service logs are spread all over cluster nodes.</p>
+
+<h2 id="summary">Summary</h2>
+<p>In this article, we compared saga with other data consistency solutions. Saga is more scalable than two-phase commit and
+is preferable to TCC in scenarios where compensating transactions are feasible and minimal changes to business logic is
+required. Centralized saga decouples services from data consistency logic and its persistence infrastructure
+and allows easier troubleshooting of any problem occurred in transactions.</p>
+
+<h2 id="references">References</h2>
+<ol>
+  <li><a href="https://en.wikipedia.org/wiki/Two-phase_commit_protocol">https://en.wikipedia.org/wiki/Two-phase_commit_protocol</a></li>
+  <li><a href="https://cs.nyu.edu/courses/spring03/G22.2631-001/lecture8.pdf">https://cs.nyu.edu/courses/spring03/G22.2631-001/lecture8.pdf</a></li>
+  <li><a href="http://courses.cs.vt.edu/~cs5204/fall00/distributedDBMS/duckett/tpcp.html">http://courses.cs.vt.edu/~cs5204/fall00/distributedDBMS/duckett/tpcp.html</a></li>
+  <li><a href="https://www.infoq.com/presentations/Transactions-HTTP-REST">https://www.infoq.com/presentations/Transactions-HTTP-REST</a></li>
+  <li><a href="https://www.nginx.com/blog/event-driven-data-management-microservices/">https://www.nginx.com/blog/event-driven-data-management-microservices/</a></li>
+</ol>
+
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+  
+
+
+  
+  
+  
+
+  <p class="page__taxonomy">
+    <strong><i class="fa fa-fw fa-tags" aria-hidden="true"></i> Tags: </strong>
+    <span itemprop="keywords">
+    
+      
+      
+      <a href="/tags/#saga" class="page__taxonomy-item" rel="tag">saga</a>
+    
+    </span>
+  </p>
+
+
+
+
+
+        
+          
+            
+              <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> Updated:</strong> <time datetime="2017-09-18">September 18, 2017</time></p>
+            
+          
+        
+      </footer>
+
+      <section class="page__share">
+  
+    <h4 class="page__share-title">Share on</h4>
+  
+
+  <a href="https://twitter.com/intent/tweet?via=ServiceComb&text=Eventual Data Consistency Solution in ServiceComb - part 3 /docs/distributed_saga_3/" class="btn btn--twitter" title="Share on Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
+
+  <a href="https://www.facebook.com/sharer/sharer.php?u=/docs/distributed_saga_3/" class="btn btn--facebook" title="Share on Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
+
+  <a href="https://plus.google.com/share?url=/docs/distributed_saga_3/" class="btn btn--google-plus" title="Share on Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
+
+  <a href="https://www.linkedin.com/shareArticle?mini=true&url=/docs/distributed_saga_3/" class="btn btn--linkedin" title="Share on LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
+</section>
+
+
+      
+  <nav class="pagination">
+    
+      <a href="/cn/docs/distributed_saga_2/" class="pagination--pager" title="ServiceComb中的数据最终一致性方案 - part 2
+">Previous</a>
+    
+    
+      <a href="/cn/docs/distributed_saga_3/" class="pagination--pager" title="ServiceComb中的数据最终一致性方案 - part 3
+">Next</a>
+    
+  </nav>
+
+
+    </div>
+
+    
+      <div class="page__comments">
+  
+  
+    <section id="static-comments">
+      
+        <!-- Start static comments -->
+        <div class="js-comments">
+          
+        </div>
+        <!-- End static comments -->
+
+        <!-- Start new comment form -->
+        <h4 class="page__comments-title">Leave a Comment</h4>
+        <p class="small">Your email address will not be published. Required fields are marked <span class="required">*</span></p>
+        <form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/ServiceComb/servicesomb.github.io/master">
+          <div class="form__spinner">
+            <i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
+            <span class="sr-only">Loading...</span>
+          </div>
+
+          <fieldset>
+            <label for="comment-form-message">Comment <small class="required">*</small></label>
+            <textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
+            <div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">Markdown is supported.</a></div>
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-name">Name <small class="required">*</small></label>
+            <input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-email">Email address <small class="required">*</small></label>
+            <input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-url">Website (optional)</label>
+            <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
+          </fieldset>
+          <fieldset class="hidden" style="display: none;">
+            <input type="hidden" name="options[slug]" value="saga-and-others">
+            <label for="comment-form-location">Not used. Leave blank if you are a human.</label>
+            <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
+          </fieldset>
+          <!-- Start comment form alert messaging -->
+          <p class="hidden js-notice">
+            <strong class="js-notice-text"></strong>
+          </p>
+          <!-- End comment form alert messaging -->
+          <fieldset>
+            <button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--large">Submit Comment</button>
+          </fieldset>
+        </form>
+        <!-- End new comment form -->
+      
+    </section>
+  
+</div>
+
+    
+  </article>
+
+  
+  
+    <div class="page__related">
+      <h4 class="page__related-title">You May Also Enjoy</h4>
+      <div class="grid__wrapper">
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/jira_beginner_guide/" rel="permalink">老司机带你刷任务 - ServiceComb JIRA入门指南
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">ServiceComb JIRA入门指南
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  less than 1 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/how-to-reform-a-legacy-system/" rel="permalink">最头疼的遗留系统该如何改造?
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  1 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+      </div>
+    </div>
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _posts/2017-09-18-saga-and-others.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_posts/2017-09-18-saga-and-others.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  
+  <script>
+    (function ($) {
+    var $comments = $('.js-comments');
+
+    $('#new_comment').submit(function () {
+      var form = this;
+
+      $(form).addClass('disabled');
+      $('#comment-form-submit').html('<i class="fa fa-spinner fa-spin fa-fw"></i> Loading...');
+
+      $.ajax({
+        type: $(this).attr('method'),
+        url: $(this).attr('action'),
+        data: $(this).serialize(),
+        contentType: 'application/x-www-form-urlencoded',
+        success: function (data) {
+          $('#comment-form-submit').html('Submitted');
+          $('.page__comments-form .js-notice').removeClass('notice--danger');
+          $('.page__comments-form .js-notice').addClass('notice--success');
+          showAlert('Thanks for your comment! It will show on the site once it has been approved.');
+        },
+        error: function (err) {
+          console.log(err);
+          $('#comment-form-submit').html('Submit Comment');
+          $('.page__comments-form .js-notice').removeClass('notice--success');
+          $('.page__comments-form .js-notice').addClass('notice--danger');
+          showAlert('Sorry, there was an error with your submission. Please make sure all required fields have been completed and try again.');
+          $(form).removeClass('disabled');
+        }
+      });
+
+      return false;
+    });
+
+    function showAlert(message) {
+      $('.page__comments-form .js-notice').removeClass('hidden');
+      $('.page__comments-form .js-notice-text').html(message);
+    }
+  })(jQuery);
+  </script>
+
+
+
+
+
+
+
+  </body>
+</html>


[52/57] incubator-servicecomb-website git commit: updated service center version in setup environment page

Posted by ni...@apache.org.
updated service center version in setup environment page


Project: http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/commit/434d794b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/tree/434d794b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/diff/434d794b

Branch: refs/heads/asf-site
Commit: 434d794b99a1e4eeebc0c6c7888ca0ad5d315926
Parents: d18d3e6
Author: linqingxiang <li...@163.com>
Authored: Tue Dec 12 14:47:19 2017 +0800
Committer: Eric Lee <da...@huawei.com>
Committed: Tue Dec 12 15:36:42 2017 +0800

----------------------------------------------------------------------
 _faqs/cn/faq.md                | 6 +++++-
 _users/cn/setup-environment.md | 8 ++++----
 _users/setup-environment.md    | 8 ++++----
 3 files changed, 13 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/434d794b/_faqs/cn/faq.md
----------------------------------------------------------------------
diff --git a/_faqs/cn/faq.md b/_faqs/cn/faq.md
index 38b28e8..fcd923f 100755
--- a/_faqs/cn/faq.md
+++ b/_faqs/cn/faq.md
@@ -521,4 +521,8 @@ redirect_from:
       System.out.println(args);
     }
   }
-  ```
\ No newline at end of file
+  ```
+  
+* **Q: 微服务运行时抛出异常:` java.lang.Error:not support def type:calss io.swagger.models.properties BaseIntegerProperty`?**
+
+   A: 可将Service Center升级至0.4.0+版本来解决,[Service Center最新版本传送门](https://github.com/ServiceComb/service-center/releases)。

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/434d794b/_users/cn/setup-environment.md
----------------------------------------------------------------------
diff --git a/_users/cn/setup-environment.md b/_users/cn/setup-environment.md
index 27930f5..589ad03 100644
--- a/_users/cn/setup-environment.md
+++ b/_users/cn/setup-environment.md
@@ -31,19 +31,19 @@ last_modified_at: 2017-09-03T10:01:43-04:00
    
    <div class="tab-content">
      <div id="windows" class="tab-pane active" markdown="1">
-   1. 下载[服务注册中心可执行文件压缩包](https://github.com/ServiceComb/service-center/releases/download/0.1.1/service-center-0.1.1-windows-amd64.zip)
+   1. 下载[服务注册中心可执行文件压缩包](https://github.com/ServiceComb/service-center/releases/download/0.5.0/service-center-0.5.0-windows-amd64.zip)
    2. 解压缩到当前文件夹
    3. 进入解压缩后的目录,然后双击运行**start**文件
      </div>
      <div id="linux" class="tab-pane fade" markdown="1">
    1. 下载服务注册中心可执行文件压缩包并解压缩
    ```bash
-   wget https://github.com/ServiceComb/service-center/releases/download/0.1.1/service-center-0.1.1-linux-amd64.tar.gz
-   tar xvf service-center-0.1.1-linux-amd64.tar.gz
+   wget https://github.com/ServiceComb/service-center/releases/download/0.5.0/service-center-0.5.0-linux-amd64.tar.gz
+   tar xvf service-center-0.5.0-linux-amd64.tar.gz
    ```
    2. 运行服务注册中心
    ```bash
-   bash service-center-0.1.1-linux-amd64/start.sh
+   bash service-center-0.5.0-linux-amd64/start.sh
    ```
     </div>
    </div>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/434d794b/_users/setup-environment.md
----------------------------------------------------------------------
diff --git a/_users/setup-environment.md b/_users/setup-environment.md
index e9f1ffd..af72ea2 100644
--- a/_users/setup-environment.md
+++ b/_users/setup-environment.md
@@ -31,19 +31,19 @@ last_modified_at: 2017-09-03T10:01:43-04:00
    
    <div class="tab-content">
      <div id="windows" class="tab-pane active" markdown="1">
-   1. 下载[服务注册中心可执行文件压缩包](https://github.com/ServiceComb/service-center/releases/download/0.1.1/service-center-0.1.1-windows-amd64.zip)
+   1. 下载[服务注册中心可执行文件压缩包](https://github.com/ServiceComb/service-center/releases/download/0.5.0/service-center-0.5.0-windows-amd64.zip)
    2. 解压缩到当前文件夹
    3. 进入解压缩后的目录,然后双击运行**start**文件
      </div>
      <div id="linux" class="tab-pane fade" markdown="1">
    1. 下载服务注册中心可执行文件压缩包并解压缩
    ```bash
-   wget https://github.com/ServiceComb/service-center/releases/download/0.1.1/service-center-0.1.1-linux-amd64.tar.gz
-   tar xvf service-center-0.1.1-linux-amd64.tar.gz
+   wget https://github.com/ServiceComb/service-center/releases/download/0.5.0/service-center-0.5.0-linux-amd64.tar.gz
+   tar xvf service-center-0.5.0-linux-amd64.tar.gz
    ```
    2. 运行服务注册中心
    ```bash
-   bash service-center-0.1.1-linux-amd64/start.sh
+   bash service-center-0.5.0-linux-amd64/start.sh
    ```
     </div>
    </div>


[20/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/docs/company-on-kubernetes/index.html
----------------------------------------------------------------------
diff --git a/content/docs/company-on-kubernetes/index.html b/content/docs/company-on-kubernetes/index.html
new file mode 100644
index 0000000..bc2abc0
--- /dev/null
+++ b/content/docs/company-on-kubernetes/index.html
@@ -0,0 +1,887 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>One-click Deployment at Kubernetes - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="This blog will introduce how to deploy company based on ServiceComb in the kubernetes cluster, and intercom communication of company">
+
+
+
+
+<meta name="author" content="Zen Lin">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="One-click Deployment at Kubernetes">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/company-on-kubernetes/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/company-on-kubernetes/">
+
+
+
+  <meta property="og:description" content="This blog will introduce how to deploy company based on ServiceComb in the kubernetes cluster, and intercom communication of company">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="One-click Deployment at Kubernetes">
+  <meta name="twitter:description" content="This blog will introduce how to deploy company based on ServiceComb in the kubernetes cluster, and intercom communication of company">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+    <meta name="twitter:creator" content="@">
+  
+
+
+
+  
+
+  
+
+
+
+
+
+  <meta property="og:type" content="article">
+  <meta property="article:published_time" content="2017-08-21T00:00:00+08:00">
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/docs/company-on-kubernetes/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+
+<div itemscope itemtype="http://schema.org/Person">
+
+  
+
+  <div class="author__content">
+    <h3 class="author__name" itemprop="name">Zen Lin</h3>
+    
+      <p class="author__bio" itemprop="description">
+	    
+        To enjoy in opensource community.
+	    
+      </p>
+    
+  </div>
+
+  <div class="author__urls-wrapper">
+    <button class="btn btn--inverse">Follow</button>
+    <ul class="author__urls social-icons">
+      
+
+      
+        <li>
+          <a href="http://zenlintechnofreak.github.io" itemprop="url">
+            <i class="fa fa-fw fa-chain" aria-hidden="true"></i> Website
+          </a>
+        </li>
+      
+
+      
+        <li>
+          <a href="mailto:zenlintechnofreak@gmail.com">
+            <meta itemprop="email" content="zenlintechnofreak@gmail.com" />
+            <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> Email
+          </a>
+        </li>
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      <!--
+  <li>
+    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs">
+      <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link
+    </a>
+  </li>
+-->
+    </ul>
+  </div>
+</div>
+
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="One-click Deployment at Kubernetes">
+    <meta itemprop="description" content="This blog will introduce how to deploy company based on ServiceComb in the kubernetes cluster, and intercom communication of company">
+    <meta itemprop="datePublished" content="August 21, 2017">
+    
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">One-click Deployment at Kubernetes
+</h1>
+            
+              <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  3 minute read
+
+</p>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <p>Blog <a href="/docs/linuxcon-workshop-demo/">Linux Con Workshop Demo</a> describes how to use the ServiceComb rapid development company example, the typical enterprise application company example for fast micro-serviced.</p>
+
+<p>Now, <a href="https://github.com/ServiceComb/ServiceComb-Company-WorkShop.git">github</a> already provides a one-click deployment on the kubernetes cluster. This article is going to focus on the corresponding yaml file and service communication, which will be useful for developers develop and deploy micro-serviced application to the cloud based on the Company model.</p>
+
+<h2 id="one-click-deployment">One-click Deployment</h2>
+
+<p><a href="https://github.com/ServiceComb/ServiceComb-Company-WorkShop/blob/master/kubernetes/README.md">Run Company on Kubernetes Cluster</a> Provides a detailed user guide, company can be deployed in the kubernetes cluster easily thourgh the following three instructions,</p>
+
+<div class="language-shell highlighter-rouge"><pre class="highlight"><code>git clone https://github.com/ServiceComb/ServiceComb-Company-WorkShop.git
+
+<span class="nb">cd </span>ServiceComb-Company-WorkShop/kubernetes/
+
+bash start.sh
+</code></pre>
+</div>
+
+<h2 id="yaml-file-interpretation">Yaml File Interpretation</h2>
+
+<p>Take the author’s actual environment as an example:</p>
+
+<div class="language-shell highlighter-rouge"><pre class="highlight"><code><span class="gp">root@zenlin:~/src/LinuxCon-Beijing-WorkShop/kubernetes# </span>kubectl get pod -owide
+NAME                                      READY     STATUS    RESTARTS   AGE       IP            NODE
+company-beekeeper-3737555734-48sxf        1/1       Running   0          17s       10.244.2.49   zenlinnode2
+company-bulletin-board-4113647782-th91w   1/1       Running   0          17s       10.244.1.53   zenlinnode1
+company-doorman-3391375245-g0p8c          1/1       Running   0          17s       10.244.1.55   zenlinnode1
+company-manager-454733969-0c1g8           1/1       Running   0          16s       10.244.2.50   zenlinnode2
+company-worker-1085546725-x7zl4           1/1       Running   0          17s       10.244.1.54   zenlinnode1
+zipkin-508217170-0khr3                    1/1       Running   0          17s       10.244.2.48   zenlinnode2
+</code></pre>
+</div>
+<p>Total of six pods, company manager, company-doorman, company-bulletin-board, company-worker, company-beekeeper, and zipkin, K8S cluster assigns the corresponding cluster IP to them.</p>
+
+<div class="language-bash highlighter-rouge"><pre class="highlight"><code><span class="gp">root@zenlin:~/src/LinuxCon-Beijing-WorkShop/kubernetes# </span>kubectl get svc -owide
+NAME                     CLUSTER-IP      EXTERNAL-IP   PORT<span class="o">(</span>S<span class="o">)</span>          AGE       SELECTOR
+company-bulletin-board   10.99.70.46     &lt;none&gt;        30100/TCP        12m       io.kompose.service<span class="o">=</span>company-bulletin-board
+company-manager          10.100.61.227   &lt;nodes&gt;       8083:30301/TCP   12m       io.kompose.service<span class="o">=</span>company-manager
+zipkin                   10.104.92.198   &lt;none&gt;        9411/TCP         12m       io.kompose.service<span class="o">=</span>zipkin
+</code></pre>
+</div>
+
+<p>Only three services are started, zipkin, bulletin-board, and  company-manager, that is because the address of call chain and the bulletin-board need to be passed in the cluster to be called by other services, and the manager is the api gateway nedd to be visited outside the cluster.</p>
+
+<p>Read company-bulletin-board-service.yaml,</p>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code>    <span class="s">apiVersion</span><span class="pi">:</span> <span class="s">v1</span>
+    <span class="s">kind</span><span class="pi">:</span> <span class="s">Service</span>
+    <span class="s">metadata</span><span class="pi">:</span>
+      <span class="s">creationTimestamp</span><span class="pi">:</span> <span class="s">null</span>
+      <span class="s">labels</span><span class="pi">:</span>
+<span class="err">    	</span><span class="s">io.kompose.service</span><span class="pi">:</span> <span class="s">company-bulletin-board</span>
+      <span class="s">name</span><span class="pi">:</span> <span class="s">company-bulletin-board</span>
+    <span class="s">spec</span><span class="pi">:</span>
+      <span class="s">ports</span><span class="pi">:</span>
+<span class="err">    </span><span class="pi">-</span> <span class="s">name</span><span class="pi">:</span> <span class="s2">"</span><span class="s">30100"</span>
+      <span class="s">port</span><span class="pi">:</span> <span class="s">30100</span>
+      <span class="s">targetPort</span><span class="pi">:</span> <span class="s">30100</span>
+        <span class="s">selector</span><span class="pi">:</span>
+      <span class="s">io.kompose.service</span><span class="pi">:</span> <span class="s">company-bulletin-board</span>
+      <span class="s">status</span><span class="pi">:</span>
+        <span class="s">loadBalancer</span><span class="pi">:</span> <span class="pi">{}</span>
+</code></pre>
+</div>
+<p>The file defines the service of bulletin-board, and defines the name, port, and targetPort for the service, which is created by ‘kubectl expose’ to keep DNS capability in the cluster. Thus, other services can access the bulletin board and registry themselves.</p>
+
+<p>To the label and selector, it is useful to the situation of one-service to multiple-pods,When a pod dies, it is automatically removed from the endpoints, and new pods matching the Service’s selector will automatically get added to the endpoints.</p>
+
+<p>Read company-worker-deployment.yaml,</p>
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">apiVersion</span><span class="pi">:</span> <span class="s">extensions/v1beta1</span>
+<span class="s">kind</span><span class="pi">:</span> <span class="s">Deployment</span>
+<span class="s">metadata</span><span class="pi">:</span>
+  <span class="s">creationTimestamp</span><span class="pi">:</span> <span class="s">null</span>
+  <span class="s">labels</span><span class="pi">:</span>
+<span class="err">	</span><span class="s">io.kompose.service</span><span class="pi">:</span> <span class="s">company-worker</span>
+  <span class="s">name</span><span class="pi">:</span> <span class="s">company-worker</span>
+<span class="s">spec</span><span class="pi">:</span>
+  <span class="s">replicas</span><span class="pi">:</span> <span class="s">1</span>
+  <span class="s">strategy</span><span class="pi">:</span> <span class="pi">{}</span>
+  <span class="s">template</span><span class="pi">:</span>
+<span class="err">	</span><span class="s">metadata</span><span class="pi">:</span>
+<span class="err">  	</span><span class="s">creationTimestamp</span><span class="pi">:</span> <span class="s">null</span>
+  <span class="err">	</span><span class="s">labels</span><span class="pi">:</span>
+<span class="err">    	</span><span class="s">io.kompose.service</span><span class="pi">:</span> <span class="s">company-worker</span>
+<span class="s">spec</span><span class="pi">:</span>
+  <span class="s">containers</span><span class="pi">:</span>
+  <span class="pi">-</span> <span class="s">env</span><span class="pi">:</span>
+    <span class="pi">-</span> <span class="s">name</span><span class="pi">:</span> <span class="s">ARTIFACT_ID</span>
+      <span class="s">value</span><span class="pi">:</span> <span class="s">worker</span>
+    <span class="pi">-</span> <span class="s">name</span><span class="pi">:</span> <span class="s">JAVA_OPTS</span>
+      <span class="s">value</span><span class="pi">:</span> <span class="s">-Dcse.service.registry.address=http://company-bulletin-board:30100 -Dservicecomb.tracing.collector.adress=http://zipkin:9411</span>
+    <span class="s">image</span><span class="pi">:</span> <span class="s">servicecomb/worker:0.0.1-SNAPSHOT</span>
+    <span class="s">name</span><span class="pi">:</span> <span class="s">company-worker</span>
+    <span class="s">ports</span><span class="pi">:</span>
+    <span class="pi">-</span> <span class="s">containerPort</span><span class="pi">:</span> <span class="s">7070</span>
+    <span class="pi">-</span> <span class="s">containerPort</span><span class="pi">:</span> <span class="s">8080</span>
+    <span class="s">resources</span><span class="pi">:</span> <span class="pi">{}</span>
+  <span class="s">restartPolicy</span><span class="pi">:</span> <span class="s">Always</span>
+<span class="s">status</span><span class="pi">:</span> <span class="pi">{}</span>
+</code></pre>
+</div>
+<p>The yaml defines a pod with one replica (replicas: 1), which can be modified to control the number of replicas of the pod(Anyway, the flexibility of the K8S scalability to achieve on-demand dynamic horizontal expansion to reach the purpose, material of K8S scalability will be provided later in the website). We mentioned that the company-bulletin-board is a DNS name, it is used as the value of cse.service.registry.address and passed to the service within the pod, such as: -Dcse.service. Registry.address = http: // company-bulletin-board: 30100, <a href="https://github.com/kubernetes/kubernetes/blob/master/cluster/addons/dns/README.md">kube-dns</a> Automatically resolve the servicename.</p>
+
+<p>Read <a href="https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/">connect-applications-service</a> to understanding the communication of services in K8S cluster.</p>
+
+<p>Other deployment.yaml and service.yaml are similar to the above except manager service, nodePort is defined in the company-manager-service.yaml to provide External-IP and Service-Port, as follows,</p>
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">spec</span><span class="pi">:</span>
+  <span class="s">ports</span><span class="pi">:</span>
+  <span class="pi">-</span> <span class="s">name</span><span class="pi">:</span> <span class="s2">"</span><span class="s">8083"</span>
+<span class="err">  	</span><span class="s">port</span><span class="pi">:</span> <span class="s">8083</span>
+  <span class="err">	</span><span class="s">targetPort</span><span class="pi">:</span> <span class="s">8080</span>
+  <span class="err">	</span><span class="s">nodePort</span><span class="pi">:</span> <span class="s">30301</span>
+  <span class="err">	</span><span class="s">protocol</span><span class="pi">:</span> <span class="s">TCP</span>
+  <span class="s">type</span><span class="pi">:</span> <span class="s">NodePort</span>
+</code></pre>
+</div>
+
+<p>Get the External-IP and Service-Port by commands,</p>
+
+<div class="language-shell highlighter-rouge"><pre class="highlight"><code>kubectl get svc company-manager -o yaml | grep ExternalIP -C 1
+kubectl get svc company-manager -o yaml | grep nodePort -C 1
+</code></pre>
+</div>
+
+<p>Now, you can use the External-IP and nodePort to visit company, Read <a href="https://github.com/ServiceComb/ServiceComb-Company-WorkShop/blob/master/kubernetes/README.md">github.com/ServiceComb/ServiceComb-Company-WorkShop/kubernetes</a> to get details about how to visit it inside or outside the cluster.</p>
+
+<h2 id="model-induction">Model induction</h2>
+
+<p>You can sort out the following model by reading all the deployment.yaml and service.yaml in detail,</p>
+
+<p><img src="/assets/images/kubernetes-company.png" alt="kubernetes-company" class="align-center" /></p>
+
+<p>In addition, the classic air ticketing system ‘Acmeair’ has also been supported <a href="https://github.com/WillemJiang/acmeair/tree/master/kubernetes">one-click-deployment-at-kubernetes</a> based on the version developed by the ServiceComb framework.</p>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+  
+
+
+  
+  
+  
+
+  <p class="page__taxonomy">
+    <strong><i class="fa fa-fw fa-tags" aria-hidden="true"></i> Tags: </strong>
+    <span itemprop="keywords">
+    
+      
+      
+      <a href="/tags/#deployment" class="page__taxonomy-item" rel="tag">deployment</a><span class="sep">, </span>
+    
+      
+      
+      <a href="/tags/#kubernetes" class="page__taxonomy-item" rel="tag">kubernetes</a>
+    
+    </span>
+  </p>
+
+
+
+
+
+        
+          
+            
+              <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> Updated:</strong> <time datetime="2017-08-21T00:00:00+08:00">August 21, 2017</time></p>
+            
+          
+        
+      </footer>
+
+      <section class="page__share">
+  
+    <h4 class="page__share-title">Share on</h4>
+  
+
+  <a href="https://twitter.com/intent/tweet?via=ServiceComb&text=One-click Deployment at Kubernetes /docs/company-on-kubernetes/" class="btn btn--twitter" title="Share on Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
+
+  <a href="https://www.facebook.com/sharer/sharer.php?u=/docs/company-on-kubernetes/" class="btn btn--facebook" title="Share on Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
+
+  <a href="https://plus.google.com/share?url=/docs/company-on-kubernetes/" class="btn btn--google-plus" title="Share on Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
+
+  <a href="https://www.linkedin.com/shareArticle?mini=true&url=/docs/company-on-kubernetes/" class="btn btn--linkedin" title="Share on LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
+</section>
+
+
+      
+  <nav class="pagination">
+    
+      <a href="/cn/docs/communication-btw-sc-ms/" class="pagination--pager" title="Communication Between Service-Center and MicroServices
+">Previous</a>
+    
+    
+      <a href="/cn/docs/company-on-kubernetes/" class="pagination--pager" title="在kubernetes上一键式部署company
+">Next</a>
+    
+  </nav>
+
+
+    </div>
+
+    
+      <div class="page__comments">
+  
+  
+    <section id="static-comments">
+      
+        <!-- Start static comments -->
+        <div class="js-comments">
+          
+        </div>
+        <!-- End static comments -->
+
+        <!-- Start new comment form -->
+        <h4 class="page__comments-title">Leave a Comment</h4>
+        <p class="small">Your email address will not be published. Required fields are marked <span class="required">*</span></p>
+        <form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/ServiceComb/servicesomb.github.io/master">
+          <div class="form__spinner">
+            <i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
+            <span class="sr-only">Loading...</span>
+          </div>
+
+          <fieldset>
+            <label for="comment-form-message">Comment <small class="required">*</small></label>
+            <textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
+            <div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">Markdown is supported.</a></div>
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-name">Name <small class="required">*</small></label>
+            <input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-email">Email address <small class="required">*</small></label>
+            <input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-url">Website (optional)</label>
+            <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
+          </fieldset>
+          <fieldset class="hidden" style="display: none;">
+            <input type="hidden" name="options[slug]" value="company-on-kubernetes">
+            <label for="comment-form-location">Not used. Leave blank if you are a human.</label>
+            <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
+          </fieldset>
+          <!-- Start comment form alert messaging -->
+          <p class="hidden js-notice">
+            <strong class="js-notice-text"></strong>
+          </p>
+          <!-- End comment form alert messaging -->
+          <fieldset>
+            <button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--large">Submit Comment</button>
+          </fieldset>
+        </form>
+        <!-- End new comment form -->
+      
+    </section>
+  
+</div>
+
+    
+  </article>
+
+  
+  
+    <div class="page__related">
+      <h4 class="page__related-title">You May Also Enjoy</h4>
+      <div class="grid__wrapper">
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/jira_beginner_guide/" rel="permalink">老司机带你刷任务 - ServiceComb JIRA入门指南
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">ServiceComb JIRA入门指南
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  less than 1 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/how-to-reform-a-legacy-system/" rel="permalink">最头疼的遗留系统该如何改造?
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  1 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+      </div>
+    </div>
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _posts/2017-08-21-company-on-kubernetes.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_posts/2017-08-21-company-on-kubernetes.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  
+  <script>
+    (function ($) {
+    var $comments = $('.js-comments');
+
+    $('#new_comment').submit(function () {
+      var form = this;
+
+      $(form).addClass('disabled');
+      $('#comment-form-submit').html('<i class="fa fa-spinner fa-spin fa-fw"></i> Loading...');
+
+      $.ajax({
+        type: $(this).attr('method'),
+        url: $(this).attr('action'),
+        data: $(this).serialize(),
+        contentType: 'application/x-www-form-urlencoded',
+        success: function (data) {
+          $('#comment-form-submit').html('Submitted');
+          $('.page__comments-form .js-notice').removeClass('notice--danger');
+          $('.page__comments-form .js-notice').addClass('notice--success');
+          showAlert('Thanks for your comment! It will show on the site once it has been approved.');
+        },
+        error: function (err) {
+          console.log(err);
+          $('#comment-form-submit').html('Submit Comment');
+          $('.page__comments-form .js-notice').removeClass('notice--success');
+          $('.page__comments-form .js-notice').addClass('notice--danger');
+          showAlert('Sorry, there was an error with your submission. Please make sure all required fields have been completed and try again.');
+          $(form).removeClass('disabled');
+        }
+      });
+
+      return false;
+    });
+
+    function showAlert(message) {
+      $('.page__comments-form .js-notice').removeClass('hidden');
+      $('.page__comments-form .js-notice-text').html(message);
+    }
+  })(jQuery);
+  </script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/docs/distributed_saga_1/index.html
----------------------------------------------------------------------
diff --git a/content/docs/distributed_saga_1/index.html b/content/docs/distributed_saga_1/index.html
new file mode 100644
index 0000000..55c0a40
--- /dev/null
+++ b/content/docs/distributed_saga_1/index.html
@@ -0,0 +1,922 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>Eventual Data Consistency Solution in ServiceComb - part 1 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="The background of data consistency problem in the scenario of microservice architecture">
+
+
+
+
+<meta name="author" content="Sean Yin">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="Eventual Data Consistency Solution in ServiceComb - part 1">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/distributed_saga_1/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/distributed_saga_1/">
+
+
+
+  <meta property="og:description" content="The background of data consistency problem in the scenario of microservice architecture">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="Eventual Data Consistency Solution in ServiceComb - part 1">
+  <meta name="twitter:description" content="The background of data consistency problem in the scenario of microservice architecture">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+    <meta name="twitter:creator" content="@seanyinx">
+  
+
+
+
+  
+
+  
+
+
+
+
+
+  <meta property="og:type" content="article">
+  <meta property="article:published_time" content="2017-09-13T00:00:00+08:00">
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/docs/distributed_saga_1/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+
+<div itemscope itemtype="http://schema.org/Person">
+
+  
+
+  <div class="author__content">
+    <h3 class="author__name" itemprop="name">Sean Yin</h3>
+    
+      <p class="author__bio" itemprop="description">
+	    
+        Nothing but speed is indestructible
+	    
+      </p>
+    
+  </div>
+
+  <div class="author__urls-wrapper">
+    <button class="btn btn--inverse">Follow</button>
+    <ul class="author__urls social-icons">
+      
+
+      
+        <li>
+          <a href="http://seanyinx.github.io" itemprop="url">
+            <i class="fa fa-fw fa-chain" aria-hidden="true"></i> Website
+          </a>
+        </li>
+      
+
+      
+        <li>
+          <a href="mailto:seanyinx@gmail.com">
+            <meta itemprop="email" content="seanyinx@gmail.com" />
+            <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> Email
+          </a>
+        </li>
+      
+
+      
+
+      
+        <li>
+          <a href="https://twitter.com/seanyinx" itemprop="sameAs">
+            <i class="fa fa-fw fa-twitter-square" aria-hidden="true"></i> Twitter
+          </a>
+        </li>
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      <!--
+  <li>
+    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs">
+      <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link
+    </a>
+  </li>
+-->
+    </ul>
+  </div>
+</div>
+
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="Eventual Data Consistency Solution in ServiceComb - part 1">
+    <meta itemprop="description" content="The background of data consistency problem in the scenario of microservice architecture">
+    <meta itemprop="datePublished" content="September 13, 2017">
+    <meta itemprop="dateModified" content="September 13, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">Eventual Data Consistency Solution in ServiceComb - part 1
+</h1>
+            
+              <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  5 minute read
+
+</p>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <p>Data consistency is a critical aspect of many systems, especially in cloud and microservice environment. We recently
+released <a href="https://github.com/ServiceComb/saga">Saga</a> project under ServiceComb to address data consistency issue. 
+But why is data consistency so important and what is Saga?</p>
+
+<h2 id="data-consistency-of-monolithic-applications">Data Consistency of Monolithic Applications</h2>
+<p>Imagine we are a giant corporation who runs an airline, a car rental company, and a hotel chain. We provide one-stop trip 
+planning experience for our customers, so that they only have to provide a destination and we will book a flight, rent a 
+car, and reserve a hotel room for them. From the business point of view, we have to make sure <strong>bookings with all the three
+are successful to make a successful trip plan, or there will be no plan</strong>.</p>
+
+<p>This requirement is easily satisfied with our current monolithic application. We just had to wrap all the three bookings 
+in a single database transaction and they would all be done successfully or none was done.</p>
+
+<p><img src="/assets/images/saga.monolithic.png" alt="Monolithic Application" class="align-center" /></p>
+
+<p>When this feature released, our business was happy, and our customer was happy.</p>
+
+<h2 id="data-consistency-in-the-microservice-scenario">Data Consistency in the Microservice Scenario</h2>
+<p>In a few years, our corporation is doing so well on this trip planning business and our customers grow over tenfold. As 
+more services provided by our airline, car rental company, and hotel chain, our application and development teams also 
+grow. Now our monolith is so big and complex that not a single person understands how everything works together. What's
+even worse is that it takes weeks for all the development teams to put together their changes for a new release. Our business
+is not happy, since our market share is dropping due to the delay of our new features.</p>
+
+<p>We decide to split our monolith into four microservices, flight booking, car rental, hotel reservation, and payment, after 
+several rounds of discussions. Services use their own database and communicate through HTTP requests. They are released
+according to their own schedule to meet the market needs. But we face a new problem: how do we ensure the original business 
+rule of bookings with all three services must be successful to make a trip plan? A service cannot just access another's
+database, because it violates the service boundary and services may not use the same database technology.</p>
+
+<p><img src="/assets/images/saga.service.boundary.png" alt="Service Boundary" class="align-center" /></p>
+
+<h2 id="sagas">Sagas</h2>
+<p>We found a <a href="https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf">great paper</a> by Hector &amp; Kenneth on the Internet talking about data consistency issues and this paper mentioned 
+a terminology named Saga.</p>
+
+<blockquote>
+  <p>A saga refers to a long live transaction that can be broken into a collection of sub-transactions that can be interleaved
+in any way with other transactions. Each sub transactions in this case is a real transaction in the sense that it preserves 
+database consistency. [<a href="https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf">1</a>]</p>
+</blockquote>
+
+<p>In case of our business, a trip transaction is a saga which consists of four sub-transactions: flight booking, car rental, 
+hotel reservation, and payment.</p>
+
+<p><img src="/assets/images/saga.transactions.png" alt="Transactions" class="align-center" /></p>
+
+<p>Saga is also described in <a href="http://www.chrisrichardson.net/">Chris Richardson</a>'s article: <a href="http://microservices.io/patterns/data/saga.html">Pattern: Saga</a>.</p>
+<blockquote>
+  <p>Chris Richardson is an experienced software architect, author of POJOs in Action and the creator of the original CloudFoundry.com. [3]</p>
+</blockquote>
+
+<p>Caitie McCaffrey also showed how she applied saga pattern in <a href="https://en.wikipedia.org/wiki/Halo_4">Halo 4</a> by Microsoft in <a href="https://www.youtube.com/watch?v=xDuwrtwYHu8">her talk</a>.</p>
+
+<h3 id="how-saga-works">How Saga Works</h3>
+<blockquote>
+  <p>The transactions in a saga are related to each other and should be executed as a (non-atomic) unit. Any partial executions 
+of the saga are undesirable, and if they occur, must be compensated for. To amend partial executions, each saga transaction 
+T<sub>1</sub> should be provided with a compensating transaction C<sub>1</sub>.[<a href="https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf">1</a>]</p>
+</blockquote>
+
+<p>We define the following transactions and their corresponding compensations for our services according to the rule above:</p>
+
+<table>
+  <thead>
+    <tr>
+      <th style="text-align: center">Service</th>
+      <th style="text-align: center">Transaction</th>
+      <th style="text-align: center">Compensation</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td style="text-align: center">flight booking</td>
+      <td style="text-align: center">book flight</td>
+      <td style="text-align: center">cancel booking</td>
+    </tr>
+    <tr>
+      <td style="text-align: center">car rental</td>
+      <td style="text-align: center">rent car</td>
+      <td style="text-align: center">cancel booking</td>
+    </tr>
+    <tr>
+      <td style="text-align: center">hotel reservation</td>
+      <td style="text-align: center">reserve room</td>
+      <td style="text-align: center">cancel reservation</td>
+    </tr>
+    <tr>
+      <td style="text-align: center">payment</td>
+      <td style="text-align: center">pay</td>
+      <td style="text-align: center">refund</td>
+    </tr>
+  </tbody>
+</table>
+
+<blockquote>
+  <p>Once compensating transactions C<sub>1</sub>, C<sub>2</sub>, …, C<sub>n-1</sub> are defined for saga T<sub>1</sub>, T<sub>2</sub>, …, T<sub>n</sub>, 
+then the system can make the following guarantee [<a href="https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf">1</a>]</p>
+  <ul>
+    <li>either the sequence T<sub>1</sub>, T<sub>2</sub>, …, T<sub>n</sub> (which is the preferable one)</li>
+    <li>or the sequence T<sub>1</sub>, T<sub>2</sub>, …, T<sub>j</sub>, C<sub>j</sub>, …, C<sub>2</sub>, C<sub>1</sub>, for some 0 &lt; j &lt; n, will be executed</li>
+  </ul>
+</blockquote>
+
+<p>In another word, with the above defined transaction/compensation pairs, saga guarantees the following business rules are met:</p>
+<ul>
+  <li>all the bookings are either executed successfully, or cancelled if any of them fails</li>
+  <li>if the payment fails in the last step, all bookings are cancelled too</li>
+</ul>
+
+<h3 id="saga-recovery">Saga Recovery</h3>
+<p>Two types of saga recovery were described in the <a href="https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf">original paper</a>:</p>
+<ul>
+  <li><strong>backward recovery</strong> <em>compensates</em> all completed transactions if one failed</li>
+  <li><strong>forward recovery</strong> <em>retries</em> failed transactions, assuming every sub-transaction will eventually succeed</li>
+</ul>
+
+<p>Apparently there is no need for compensating transactions in forward recovery, which is useful if sub-transactions will
+always succeed (eventually) or compensations are very hard or impossible for your business.</p>
+
+<p>Theoretically compensating transactions shall never fail. However, in the distributed world, servers may go down, network 
+can fail, and even data centers may go dark. What can we do in such situations? The last resort is to have fallbacks which
+may involve manual intervention.</p>
+
+<h3 id="the-restrictions-of-saga">The Restrictions of Saga</h3>
+<p>That looks promising. Are all long live transactions can be done this way? There are a few restrictions:</p>
+<ul>
+  <li>A saga only permits two levels of nesting, the top level saga and simple transactions [<a href="https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf">1</a>]</li>
+  <li>At the outer level, full atomicity is not provided. That is, sagas may view the partial results of other sagas [<a href="https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf">1</a>]</li>
+  <li>Each sub-transaction should be an independent atomic action [2]</li>
+</ul>
+
+<p>In our case, flight booking, car rental, hotel reservation, and payment are naturally independent actions and transaction
+of each can be performed atomically with their corresponding databases.</p>
+
+<p>We don't need atomicity at the trip transaction level either. One user may book the last seat on a flight which gets 
+cancelled later due to insufficient balance in credit card. Another user may see the flight fully booked and one seat freed
+up for booking due to the cancellation. He/she can grab the last flight seat and complete the trip plan. It does not really
+matter to our business.</p>
+
+<p>There are also things to consider on compensations.</p>
+<blockquote>
+  <p>The compensating transaction undoes, from a semantic point of view, any of the actions performed by T<sub>i</sub>, but 
+does not necessarily return the database to the state that existed when the execution of T<sub>i</sub> began. (For instance,
+if a transaction fires a missile, it may not be possible to undo this action) [<a href="https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf">1</a>]</p>
+</blockquote>
+
+<p>However, this is not a problem at all for our business. And it is still possible to compensate for actions hard to undo. For
+example, a transaction sending an email can be compensated by sending another email explaining the problem.</p>
+
+<h2 id="summary">Summary</h2>
+<p>Now we have a solution to tackle our data consistency issue with saga. It allows us to either successfully perform all
+transactions or compensate succeeded ones in case any fails. Although saga does not provide <a href="https://en.wikipedia.org/wiki/ACID">ACID</a> guarantee, it still suits
+many scenarios where eventual data consistency is enough. How do we design a saga system? Let's address the question in our
+next blog post.</p>
+
+<h2 id="references">References</h2>
+<ol>
+  <li><a href="https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf">Original Paper on Sagas</a> by By Hector Garcia-Molina &amp; Kenneth Salem</li>
+  <li>Gifford, David K and James E Donahue, “Coordinating Independent Atomic Actions”, Proceedings of IEEE COMPCON, San Francisco, CA, February, 1985</li>
+  <li>Chris Richardson: http://www.chrisrichardson.net/</li>
+  <li>ServiceComb Saga Project: https://github.com/ServiceComb/saga</li>
+</ol>
+
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+  
+
+
+  
+  
+  
+
+  <p class="page__taxonomy">
+    <strong><i class="fa fa-fw fa-tags" aria-hidden="true"></i> Tags: </strong>
+    <span itemprop="keywords">
+    
+      
+      
+      <a href="/tags/#saga" class="page__taxonomy-item" rel="tag">saga</a>
+    
+    </span>
+  </p>
+
+
+
+
+
+        
+          
+            
+              <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> Updated:</strong> <time datetime="2017-09-13">September 13, 2017</time></p>
+            
+          
+        
+      </footer>
+
+      <section class="page__share">
+  
+    <h4 class="page__share-title">Share on</h4>
+  
+
+  <a href="https://twitter.com/intent/tweet?via=ServiceComb&text=Eventual Data Consistency Solution in ServiceComb - part 1 /docs/distributed_saga_1/" class="btn btn--twitter" title="Share on Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
+
+  <a href="https://www.facebook.com/sharer/sharer.php?u=/docs/distributed_saga_1/" class="btn btn--facebook" title="Share on Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
+
+  <a href="https://plus.google.com/share?url=/docs/distributed_saga_1/" class="btn btn--google-plus" title="Share on Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
+
+  <a href="https://www.linkedin.com/shareArticle?mini=true&url=/docs/distributed_saga_1/" class="btn btn--linkedin" title="Share on LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
+</section>
+
+
+      
+  <nav class="pagination">
+    
+      <a href="/cn/docs/seckill-development-journey-part-III/" class="pagination--pager" title="秒杀开发历程(三)
+">Previous</a>
+    
+    
+      <a href="/cn/docs/distributed_saga_1/" class="pagination--pager" title="ServiceComb中的数据最终一致性方案 - part 1
+">Next</a>
+    
+  </nav>
+
+
+    </div>
+
+    
+      <div class="page__comments">
+  
+  
+    <section id="static-comments">
+      
+        <!-- Start static comments -->
+        <div class="js-comments">
+          
+        </div>
+        <!-- End static comments -->
+
+        <!-- Start new comment form -->
+        <h4 class="page__comments-title">Leave a Comment</h4>
+        <p class="small">Your email address will not be published. Required fields are marked <span class="required">*</span></p>
+        <form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/ServiceComb/servicesomb.github.io/master">
+          <div class="form__spinner">
+            <i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
+            <span class="sr-only">Loading...</span>
+          </div>
+
+          <fieldset>
+            <label for="comment-form-message">Comment <small class="required">*</small></label>
+            <textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
+            <div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">Markdown is supported.</a></div>
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-name">Name <small class="required">*</small></label>
+            <input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-email">Email address <small class="required">*</small></label>
+            <input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-url">Website (optional)</label>
+            <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
+          </fieldset>
+          <fieldset class="hidden" style="display: none;">
+            <input type="hidden" name="options[slug]" value="saga-background">
+            <label for="comment-form-location">Not used. Leave blank if you are a human.</label>
+            <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
+          </fieldset>
+          <!-- Start comment form alert messaging -->
+          <p class="hidden js-notice">
+            <strong class="js-notice-text"></strong>
+          </p>
+          <!-- End comment form alert messaging -->
+          <fieldset>
+            <button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--large">Submit Comment</button>
+          </fieldset>
+        </form>
+        <!-- End new comment form -->
+      
+    </section>
+  
+</div>
+
+    
+  </article>
+
+  
+  
+    <div class="page__related">
+      <h4 class="page__related-title">You May Also Enjoy</h4>
+      <div class="grid__wrapper">
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/jira_beginner_guide/" rel="permalink">老司机带你刷任务 - ServiceComb JIRA入门指南
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">ServiceComb JIRA入门指南
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  less than 1 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/how-to-reform-a-legacy-system/" rel="permalink">最头疼的遗留系统该如何改造?
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  1 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+      </div>
+    </div>
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _posts/2017-09-13-saga-background.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_posts/2017-09-13-saga-background.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  
+  <script>
+    (function ($) {
+    var $comments = $('.js-comments');
+
+    $('#new_comment').submit(function () {
+      var form = this;
+
+      $(form).addClass('disabled');
+      $('#comment-form-submit').html('<i class="fa fa-spinner fa-spin fa-fw"></i> Loading...');
+
+      $.ajax({
+        type: $(this).attr('method'),
+        url: $(this).attr('action'),
+        data: $(this).serialize(),
+        contentType: 'application/x-www-form-urlencoded',
+        success: function (data) {
+          $('#comment-form-submit').html('Submitted');
+          $('.page__comments-form .js-notice').removeClass('notice--danger');
+          $('.page__comments-form .js-notice').addClass('notice--success');
+          showAlert('Thanks for your comment! It will show on the site once it has been approved.');
+        },
+        error: function (err) {
+          console.log(err);
+          $('#comment-form-submit').html('Submit Comment');
+          $('.page__comments-form .js-notice').removeClass('notice--success');
+          $('.page__comments-form .js-notice').addClass('notice--danger');
+          showAlert('Sorry, there was an error with your submission. Please make sure all required fields have been completed and try again.');
+          $(form).removeClass('disabled');
+        }
+      });
+
+      return false;
+    });
+
+    function showAlert(message) {
+      $('.page__comments-form .js-notice').removeClass('hidden');
+      $('.page__comments-form .js-notice-text').html(message);
+    }
+  })(jQuery);
+  </script>
+
+
+
+
+
+
+
+  </body>
+</html>


[30/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/users/application-boot-process/index.html
----------------------------------------------------------------------
diff --git a/content/cn/users/application-boot-process/index.html b/content/cn/users/application-boot-process/index.html
new file mode 100644
index 0000000..f781947
--- /dev/null
+++ b/content/cn/users/application-boot-process/index.html
@@ -0,0 +1,697 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>程序启动逻辑 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="程序启动逻辑">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="程序启动逻辑">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/application-boot-process/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/application-boot-process/">
+
+
+
+  <meta property="og:description" content="程序启动逻辑">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="程序启动逻辑">
+  <meta name="twitter:description" content="程序启动逻辑">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/users/application-boot-process/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">用户手册</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/" class="">Java Chassis系统架构</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/setup-environment/" class="">环境配置</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务提供者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-definition/" class="">服务定义</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-contract/" class="">服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-springmvc/" class="">用SpringMVC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-jax-rs/" class="">用JAX-RS开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-transparent-rpc/" class="">用透明RPC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-interface-constraints/" class="">服务接口约束</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-configurations/" class="">服务配置</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/communicate-protocol/" class="">通信协议</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/application-boot-process/" class="active">程序启动逻辑</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-heartbeat/" class="">服务心跳</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务消费者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rest-template/" class="">使用Rest Template方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rpc/" class="">使用RPC方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-service-contract/" class="">使用服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/invoke-control/" class="">调用控制</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">通用开发</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/local-develop-test/" class="">本地开发与测试</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-servicecomb-in-spring-boot/" class="">在Spring Boot中使用ServiceComb</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/distributed-tracing/" class="">分布式调用链追踪</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/customized-tracing/" class="">自定义调用链打点</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">服务能力开放</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/nginx/" class="">使用confd和Nginx做边缘服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/zuul/" class="">使用Zuul做边缘服务</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">监控</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">部署</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/run-mode/" class="">运行模式</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">微服务安全</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-tls/" class="">使用TLS通信</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="程序启动逻辑">
+    <meta itemprop="description" content="程序启动逻辑">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">程序启动逻辑
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <p>服务提供者的启动过程分为初始化Log4j、bean加载(包括配置加载)和服务注册三部分。</p>
+
+<ul>
+  <li>
+    <p>初始化Log4j</p>
+
+    <p><code class="highlighter-rouge">Log4jUtils</code>默认会从<code class="highlighter-rouge">classpath\*:config/base/log4j.properties</code>和<code class="highlighter-rouge">classpath\*:config/log4j.properties</code>两个路径读取log4j配置并合并,将其传递给Log4j的<code class="highlighter-rouge">PropertyConfigurator</code>方法初始化Log4j。如果优先级最高的配置文件是在磁盘上,且其所在目录有写权限,则将合并的配置输出到该目录,以便于维护时观察生效的参数。</p>
+  </li>
+  <li>
+    <p>bean加载</p>
+
+    <p><code class="highlighter-rouge">BeanUtils</code>默认会从<code class="highlighter-rouge">classpath\*:META-INF/spring/\*.bean.xml</code>路径加载配置文件,并将其传递给Spring框架的<code class="highlighter-rouge">ClassPathXmlApplicationContext</code>完成应用上下文加载。在这个过程中会加载foundation-config模块的bean,完成配置加载。</p>
+  </li>
+  <li>
+    <p>服务注册</p>
+
+    <p>在Spring context加载完成后,<code class="highlighter-rouge">io.servicecomb.core.CseApplicationListener</code>会加载handler配置、加载provider的schema信息,最后将微服务信息注册到服务中心。</p>
+  </li>
+</ul>
+
+<blockquote>
+  <p><strong>说明:</strong>
+ServiceComb的配置项分为三个层次:配置中心、环境变量、本地文件,三者优先级依次递减,高优先级中的配置项覆盖低优先级同名配置项。存放在配置中心的配置项可以在运行时修改。</p>
+</blockquote>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/cn/application-boot-process.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/cn/application-boot-process.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/users/communicate-protocol/index.html
----------------------------------------------------------------------
diff --git a/content/cn/users/communicate-protocol/index.html b/content/cn/users/communicate-protocol/index.html
new file mode 100644
index 0000000..5eb1a49
--- /dev/null
+++ b/content/cn/users/communicate-protocol/index.html
@@ -0,0 +1,1110 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>通信协议 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="通信协议">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="通信协议">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/communicate-protocol/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/communicate-protocol/">
+
+
+
+  <meta property="og:description" content="通信协议">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="通信协议">
+  <meta name="twitter:description" content="通信协议">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/users/communicate-protocol/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">用户手册</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/" class="">Java Chassis系统架构</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/setup-environment/" class="">环境配置</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务提供者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-definition/" class="">服务定义</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-contract/" class="">服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-springmvc/" class="">用SpringMVC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-jax-rs/" class="">用JAX-RS开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-transparent-rpc/" class="">用透明RPC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-interface-constraints/" class="">服务接口约束</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-configurations/" class="">服务配置</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/communicate-protocol/" class="active">通信协议</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/application-boot-process/" class="">程序启动逻辑</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-heartbeat/" class="">服务心跳</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务消费者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rest-template/" class="">使用Rest Template方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rpc/" class="">使用RPC方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-service-contract/" class="">使用服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/invoke-control/" class="">调用控制</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">通用开发</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/local-develop-test/" class="">本地开发与测试</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-servicecomb-in-spring-boot/" class="">在Spring Boot中使用ServiceComb</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/distributed-tracing/" class="">分布式调用链追踪</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/customized-tracing/" class="">自定义调用链打点</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">服务能力开放</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/nginx/" class="">使用confd和Nginx做边缘服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/zuul/" class="">使用Zuul做边缘服务</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">监控</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">部署</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/run-mode/" class="">运行模式</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">微服务安全</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-tls/" class="">使用TLS通信</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="通信协议">
+    <meta itemprop="description" content="通信协议">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">通信协议
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> 在本页上</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#通信协议" id="markdown-toc-通信协议">通信协议</a>    <ul>
+      <li><a href="#概念阐述" id="markdown-toc-概念阐述">概念阐述</a></li>
+      <li><a href="#注意事项" id="markdown-toc-注意事项">注意事项</a></li>
+    </ul>
+  </li>
+  <li><a href="#线程模型" id="markdown-toc-线程模型">线程模型</a>    <ul>
+      <li><a href="#概念阐述-1" id="markdown-toc-概念阐述-1">概念阐述</a></li>
+      <li><a href="#完整线程" id="markdown-toc-完整线程">完整线程</a></li>
+    </ul>
+  </li>
+  <li><a href="#rest-over-servlet" id="markdown-toc-rest-over-servlet">REST over Servlet</a>    <ul>
+      <li><a href="#配置说明" id="markdown-toc-配置说明">配置说明</a></li>
+      <li><a href="#示例代码" id="markdown-toc-示例代码">示例代码</a></li>
+    </ul>
+  </li>
+  <li><a href="#rest-over-vertx" id="markdown-toc-rest-over-vertx">REST over Vertx</a>    <ul>
+      <li><a href="#配置说明-1" id="markdown-toc-配置说明-1">配置说明</a></li>
+      <li><a href="#示例代码-1" id="markdown-toc-示例代码-1">示例代码</a></li>
+    </ul>
+  </li>
+  <li><a href="#highway-rpc协议" id="markdown-toc-highway-rpc协议">Highway RPC协议</a>    <ul>
+      <li><a href="#概念阐述-2" id="markdown-toc-概念阐述-2">概念阐述</a></li>
+      <li><a href="#配置说明-2" id="markdown-toc-配置说明-2">配置说明</a></li>
+      <li><a href="#示例代码-2" id="markdown-toc-示例代码-2">示例代码</a></li>
+    </ul>
+  </li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="通信协议">通信协议</h2>
+<h3 id="概念阐述">概念阐述</h3>
+
+<p>ServiceComb实现了两种网络通道,包括REST和Highway,均支持TLS加密传输。其中,REST网络通道将服务以标准RESTful形式发布,调用端兼容直接使用http client使用标准RESTful形式进行调用。</p>
+
+<h3 id="注意事项">注意事项</h3>
+
+<p>参数和返回值的序列化:</p>
+
+<p>当前REST通道的body参数只支持application/json序列化方式,如果要向服务端发送form类型的参数,那么需要在调用端构造好application/json格式的body,不能直接以multipart/form-data格式传递form类型参数。</p>
+
+<p>当前REST通道返回值支持application/json和text/plain两种格式,服务提供者通过produces声明可提供序列化能力,服务消费者通过请求的Accept头指明返回值序列化方式,默认返回application/json格式的数据。</p>
+
+<h2 id="线程模型">线程模型</h2>
+<h3 id="概念阐述-1">概念阐述</h3>
+
+<p>本小节主要介绍ServiceComb微服务的完整线程模型,介绍IO线程和业务线程之间的关系</p>
+
+<h3 id="完整线程">完整线程</h3>
+
+<p>ServicecComb微服务的完整线程模型如下图所示:</p>
+
+<p><img src="/assets/images/thread-model.png" alt="" /></p>
+
+<blockquote>
+  <ol>
+    <li>业务线程在第一次调用时会绑定某一个网络线程,避免在不同网络线程之间切换,无谓地增加线程冲突的概率</li>
+    <li>业务线程绑定网络线程后,会再绑定该网络线程内部的某个连接,同样是为了避免线程冲突</li>
+  </ol>
+</blockquote>
+
+<ul>
+  <li>客户端和服务器都可以配置多个网络线程(eventloop),默认为CPU核数的两倍,每个网络线程可以配置多个连接,默认为1,支持Rest和Highway两种网络通道,具体配置请查看如下章节:
+    <ul>
+      <li><a href="/cn/users/communicate-protocol#rest-over-servlet">REST over Servlet</a></li>
+      <li><a href="/cn/users/communicate-protocol/#rest-over-vertx">REST over Vertx</a></li>
+      <li><a href="/cn/users/communicate-protocol/#highway-rpc协议">Highway RPC协议</a></li>
+    </ul>
+  </li>
+  <li>客户端可配置业务线程池executor,线程粒度可细化至schemaId:operation,配置如下:</li>
+</ul>
+
+<p>在microservice.yaml中添加executors配置,为schemaId:operation配置单独的业务线程池:</p>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">cse</span><span class="pi">:</span> 
+  <span class="s">executors</span><span class="pi">:</span> 
+    <span class="s">Provider</span><span class="pi">:</span> 
+      <span class="pi">[</span><span class="nv">schemaId</span><span class="pi">]</span><span class="s">.[operation]</span>
+</code></pre>
+</div>
+
+<h2 id="rest-over-servlet">REST over Servlet</h2>
+<h3 id="配置说明">配置说明</h3>
+
+<p>  REST over Servlet对应使用web容器模式部署运行,需要新建一个servlet工程将微服务包装起来,加载到web容器中启动运行,包装微服务的方法有两种,一种完全使用web.xml配置文件配置,另一种仅在web.xml文件中配置listener,在microservice.yaml文件中配置urlPattern,两种方式如下所示:</p>
+
+<ul>
+  <li>
+    <p>在web.xml文件中完成全部配置</p>
+
+    <p>web.xml文件配置在项目的src/main/webapp/WEB_INF目录,配置内容如下:</p>
+
+    <div class="language-xml highlighter-rouge"><pre class="highlight"><code> <span class="nt">&lt;web-app</span> <span class="na">xmlns=</span><span class="s">"http://java.sun.com/xml/ns/javaee"</span> <span class="na">xmlns:xsi=</span><span class="s">"http://www.w3.org/2001/XMLSchema-instance"</span> <span class="na">xsi:schemaLocation=</span><span class="s">"http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"</span> <span class="na">version=</span><span class="s">"3.0"</span><span class="nt">&gt;</span>  
+   <span class="nt">&lt;context-param&gt;</span> 
+     <span class="nt">&lt;param-name&gt;</span>contextConfigLocation<span class="nt">&lt;/param-name&gt;</span>  
+     <span class="nt">&lt;param-value&gt;</span>classpath*:META-INF/spring/*.bean.xml classpath*:app-config.xml<span class="nt">&lt;/param-value&gt;</span> 
+   <span class="nt">&lt;/context-param&gt;</span>  
+   <span class="nt">&lt;listener&gt;</span> 
+     <span class="nt">&lt;listener-class&gt;</span>io.servicecomb.transport.rest.servlet.RestServletContextListener<span class="nt">&lt;/listener-class&gt;</span> 
+   <span class="nt">&lt;/listener&gt;</span>  
+   <span class="nt">&lt;servlet&gt;</span> 
+     <span class="nt">&lt;servlet-name&gt;</span>RestServlet<span class="nt">&lt;/servlet-name&gt;</span>  
+     <span class="nt">&lt;servlet-class&gt;</span>io.servicecomb.transport.rest.servlet.RestServlet<span class="nt">&lt;/servlet-class&gt;</span>  
+     <span class="nt">&lt;load-on-startup&gt;</span>1<span class="nt">&lt;/load-on-startup&gt;</span>  
+     <span class="nt">&lt;async-supported&gt;</span>true<span class="nt">&lt;/async-supported&gt;</span> 
+   <span class="nt">&lt;/servlet&gt;</span>  
+   <span class="nt">&lt;servlet-mapping&gt;</span> 
+     <span class="nt">&lt;servlet-name&gt;</span>RestServlet<span class="nt">&lt;/servlet-name&gt;</span>  
+     <span class="nt">&lt;url-pattern&gt;</span>/rest/*<span class="nt">&lt;/url-pattern&gt;</span> 
+   <span class="nt">&lt;/servlet-mapping&gt;</span> 
+ <span class="nt">&lt;/web-app&gt;</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p>在web.xml文件中仅配置listener,在microservice.yaml文件中配置urlPattern</p>
+
+    <div class="language-xml highlighter-rouge"><pre class="highlight"><code> <span class="nt">&lt;web-app</span> <span class="na">xmlns=</span><span class="s">"http://java.sun.com/xml/ns/javaee"</span> <span class="na">xmlns:xsi=</span><span class="s">"http://www.w3.org/2001/XMLSchema-instance"</span> <span class="na">xsi:schemaLocation=</span><span class="s">"http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"</span> <span class="na">version=</span><span class="s">"3.0"</span><span class="nt">&gt;</span>  
+   <span class="nt">&lt;context-param&gt;</span> 
+     <span class="nt">&lt;param-name&gt;</span>contextConfigLocation<span class="nt">&lt;/param-name&gt;</span>  
+     <span class="nt">&lt;param-value&gt;</span>classpath*:META-INF/spring/*.bean.xml classpath*:app-config.xml<span class="nt">&lt;/param-value&gt;</span> 
+   <span class="nt">&lt;/context-param&gt;</span>  
+   <span class="nt">&lt;listener&gt;</span> 
+     <span class="nt">&lt;listener-class&gt;</span>io.servicecomb.transport.rest.servlet.RestServletContextListener<span class="nt">&lt;/listener-class&gt;</span> 
+   <span class="nt">&lt;/listener&gt;</span> 
+ <span class="nt">&lt;/web-app&gt;</span>
+</code></pre>
+    </div>
+
+    <p>在microservice.yaml文件中需要增加一行配置来指定urlPattern:</p>
+
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code> <span class="s">servicecomb.rest.servlet.urlPattern</span><span class="pi">:</span> <span class="s">/rest/*</span>
+</code></pre>
+    </div>
+  </li>
+</ul>
+
+<p>以上两种方式是等效的,两种方式都需要在maven pom文件中添加如下依赖:</p>
+
+<div class="language-xml highlighter-rouge"><pre class="highlight"><code><span class="nt">&lt;dependency&gt;</span> 
+  <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>  
+  <span class="nt">&lt;artifactId&gt;</span>transport-rest-servlet<span class="nt">&lt;/artifactId&gt;</span> 
+<span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+</div>
+
+<p>REST over Servlet在microservice.yaml文件中的配置项见下表:</p>
+
+<p>表1 REST over Servlet配置项说明</p>
+
+<table>
+  <thead>
+    <tr>
+      <th style="text-align: left">配置项</th>
+      <th style="text-align: left">默认值</th>
+      <th style="text-align: left">取值范围</th>
+      <th style="text-align: left">是否必选</th>
+      <th style="text-align: left">含义</th>
+      <th style="text-align: left">注意</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td style="text-align: left">cse.rest.address</td>
+      <td style="text-align: left">0.0.0.0:8080</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">服务监听地址</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.rest.timeout</td>
+      <td style="text-align: left">3000</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">超时时间</td>
+      <td style="text-align: left">单位为毫秒</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.request.timeout</td>
+      <td style="text-align: left">30000</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">请求超时时间</td>
+      <td style="text-align: left">同REST over Vertx的配置</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.references.[服务名].transport</td>
+      <td style="text-align: left">rest</td>
+      <td style="text-align: left"> </td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">访问的transport类型</td>
+      <td style="text-align: left">同REST over Vertx的配置</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.references.[服务名].version-rule</td>
+      <td style="text-align: left">latest</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">访问实例的版本号</td>
+      <td style="text-align: left">同REST over Vertx的配置</td>
+    </tr>
+  </tbody>
+</table>
+
+<h3 id="示例代码">示例代码</h3>
+
+<p>microservice.yaml文件中的配置示例如下:</p>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">cse</span><span class="pi">:</span>
+  <span class="s">rest</span><span class="pi">:</span>
+    <span class="s">address</span><span class="pi">:</span> <span class="s">0.0.0.0:8080</span>
+    <span class="s">timeout</span><span class="pi">:</span> <span class="s">3000</span>
+</code></pre>
+</div>
+
+<h2 id="rest-over-vertx">REST over Vertx</h2>
+<h3 id="配置说明-1">配置说明</h3>
+
+<p>REST over Vertx通信通道对应使用standalone部署运行模式,可直接通过main函数拉起。main函数中需要初始化日志和加载服务配置,代码如下:</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">io.servicecomb.foundation.common.utils.BeanUtils</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">io.servicecomb.foundation.common.utils.Log4jUtils</span><span class="o">;</span>
+
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">MainServer</span> <span class="o">{</span>
+  <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span>
+  <span class="err"> </span><span class="n">Log4jUtils</span><span class="o">.</span><span class="na">init</span><span class="o">();</span><span class="c1">//日志初始化</span>
+  <span class="err"> </span><span class="n">BeanUtils</span><span class="o">.</span><span class="na">init</span><span class="o">();</span> <span class="c1">// Spring bean初始化</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<p>使用REST over Vertx网络通道需要在maven pom文件中添加如下依赖:</p>
+
+<div class="language-xml highlighter-rouge"><pre class="highlight"><code><span class="nt">&lt;dependency&gt;</span>
+  <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+  <span class="nt">&lt;artifactId&gt;</span>transport-rest-vertx<span class="nt">&lt;/artifactId&gt;</span>
+<span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+</div>
+
+<p>REST over Vertx通道在microservice.yaml文件中有以下配置项:</p>
+
+<p>表2 REST over Vertx配置项说明</p>
+
+<table>
+  <thead>
+    <tr>
+      <th style="text-align: left">配置项</th>
+      <th style="text-align: left">默认值</th>
+      <th style="text-align: left">取值范围</th>
+      <th style="text-align: left">是否必选</th>
+      <th style="text-align: left">含义</th>
+      <th style="text-align: left">注意</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td style="text-align: left">cse.rest.address</td>
+      <td style="text-align: left">0.0.0.0:8080</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">服务监听地址</td>
+      <td style="text-align: left">仅服务提供者需要配置</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.rest.server.thread-count</td>
+      <td style="text-align: left">1</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">服务端线程数</td>
+      <td style="text-align: left">仅服务提供者需要配置</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.rest.client.thread-count</td>
+      <td style="text-align: left">1</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">客户端网络线程数</td>
+      <td style="text-align: left">仅服务消费者需要配置</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.rest.client.connection-pool-per-thread</td>
+      <td style="text-align: left">1</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">客户端每个网络线程中的连接池的个数</td>
+      <td style="text-align: left">仅服务消费者需要配置</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.request.timeout</td>
+      <td style="text-align: left">30000</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">请求超时时间</td>
+      <td style="text-align: left"> </td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.references.[服务名].transport</td>
+      <td style="text-align: left">rest</td>
+      <td style="text-align: left"> </td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">访问的transport类型</td>
+      <td style="text-align: left">仅服务消费者需要配置</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.references.[服务名].version-rule</td>
+      <td style="text-align: left">latest</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">访问实例的版本号</td>
+      <td style="text-align: left">仅服务消费者需要配置支持latest,1.0.0+,1.0.0-2.0.2,精确版本。详细参考服务中心的接口描述。</td>
+    </tr>
+  </tbody>
+</table>
+
+<h3 id="示例代码-1">示例代码</h3>
+
+<p>microservice.yaml文件中的配置示例:</p>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">cse</span><span class="pi">:</span>
+  <span class="s">rest</span><span class="pi">:</span>
+    <span class="s">address</span><span class="pi">:</span> <span class="s">0.0.0.0:8080</span>
+    <span class="s">thread-count</span><span class="pi">:</span> <span class="s">1</span>
+  <span class="s">references</span><span class="pi">:</span>
+    <span class="s">hello</span><span class="pi">:</span>
+      <span class="s">transport</span><span class="pi">:</span> <span class="s">rest</span>
+      <span class="s">version-rule</span><span class="pi">:</span> <span class="s">0.0.1</span>
+</code></pre>
+</div>
+
+<h2 id="highway-rpc协议">Highway RPC协议</h2>
+<h3 id="概念阐述-2">概念阐述</h3>
+
+<p>Highway是ServiceComb的高性能私有协议,用户可在有特殊性能需求的场景下选用。</p>
+
+<h3 id="配置说明-2">配置说明</h3>
+
+<p>使用Highway网络通道需要在maven pom文件中添加如下依赖:</p>
+
+<div class="language-xml highlighter-rouge"><pre class="highlight"><code><span class="nt">&lt;dependency&gt;</span> 
+  <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>  
+  <span class="nt">&lt;artifactId&gt;</span>transport-highway<span class="nt">&lt;/artifactId&gt;</span> 
+<span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+</div>
+
+<p>Highway通道在microservice.yaml文件中的配置项如下表所示:</p>
+
+<p>表3 Highway配置项说明</p>
+
+<table>
+  <thead>
+    <tr>
+      <th style="text-align: left">配置项</th>
+      <th style="text-align: left">默认值</th>
+      <th style="text-align: left">取值范围</th>
+      <th style="text-align: left">是否必选</th>
+      <th style="text-align: left">含义</th>
+      <th style="text-align: left">注意</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td style="text-align: left">cse.highway.address</td>
+      <td style="text-align: left">0.0.0.0:7070</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">服务监听地址</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.highway.server.thread-count</td>
+      <td style="text-align: left">1</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">服务端网络线程个数</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.highway.client.thread-count</td>
+      <td style="text-align: left">1</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">客户端网络线程个数</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.highway.client.connection-pool-per-thread</td>
+      <td style="text-align: left">1</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">客户端每个网络线程的连接池个数</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.request.timeout</td>
+      <td style="text-align: left">30000</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">请求超时时间</td>
+      <td style="text-align: left">同REST over Vertx的配置</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.references.[服务名].transport</td>
+      <td style="text-align: left">rest</td>
+      <td style="text-align: left"> </td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">访问的transport类型</td>
+      <td style="text-align: left">同REST over Vertx的配置</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.references.[服务名].version-rule</td>
+      <td style="text-align: left">latest</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">访问实例的版本号</td>
+      <td style="text-align: left">同REST over Vertx的配置</td>
+    </tr>
+  </tbody>
+</table>
+
+<h3 id="示例代码-2">示例代码</h3>
+
+<p>microservice.yaml文件中的配置示例:</p>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">cse</span><span class="pi">:</span>
+  <span class="s">highway</span><span class="pi">:</span>
+    <span class="s">address</span><span class="pi">:</span> <span class="s">0.0.0.0:7070</span>
+</code></pre>
+</div>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/cn/communicate-protocol.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/cn/communicate-protocol.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/users/customized-tracing/index.html
----------------------------------------------------------------------
diff --git a/content/cn/users/customized-tracing/index.html b/content/cn/users/customized-tracing/index.html
new file mode 100644
index 0000000..02778e5
--- /dev/null
+++ b/content/cn/users/customized-tracing/index.html
@@ -0,0 +1,804 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>自定义调用链打点 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="自定义调用链打点">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="自定义调用链打点">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/customized-tracing/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/customized-tracing/">
+
+
+
+  <meta property="og:description" content="自定义调用链打点">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="自定义调用链打点">
+  <meta name="twitter:description" content="自定义调用链打点">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/users/customized-tracing/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">用户手册</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/" class="">Java Chassis系统架构</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/setup-environment/" class="">环境配置</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务提供者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-definition/" class="">服务定义</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-contract/" class="">服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-springmvc/" class="">用SpringMVC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-jax-rs/" class="">用JAX-RS开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-transparent-rpc/" class="">用透明RPC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-interface-constraints/" class="">服务接口约束</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-configurations/" class="">服务配置</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/communicate-protocol/" class="">通信协议</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/application-boot-process/" class="">程序启动逻辑</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-heartbeat/" class="">服务心跳</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务消费者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rest-template/" class="">使用Rest Template方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rpc/" class="">使用RPC方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-service-contract/" class="">使用服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/invoke-control/" class="">调用控制</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">通用开发</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/local-develop-test/" class="">本地开发与测试</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-servicecomb-in-spring-boot/" class="">在Spring Boot中使用ServiceComb</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/distributed-tracing/" class="">分布式调用链追踪</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/customized-tracing/" class="active">自定义调用链打点</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">服务能力开放</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/nginx/" class="">使用confd和Nginx做边缘服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/zuul/" class="">使用Zuul做边缘服务</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">监控</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">部署</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/run-mode/" class="">运行模式</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">微服务安全</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-tls/" class="">使用TLS通信</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="自定义调用链打点">
+    <meta itemprop="description" content="自定义调用链打点">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">自定义调用链打点
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> 在本页上</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#概念阐述" id="markdown-toc-概念阐述">概念阐述</a></li>
+  <li><a href="#前提条件" id="markdown-toc-前提条件">前提条件</a></li>
+  <li><a href="#注意事项" id="markdown-toc-注意事项">注意事项</a></li>
+  <li><a href="#自定义调用链打点" id="markdown-toc-自定义调用链打点">自定义调用链打点</a></li>
+  <li><a href="#使用步骤" id="markdown-toc-使用步骤">使用步骤:</a>    <ul>
+      <li><a href="#添加依赖" id="markdown-toc-添加依赖">添加依赖</a></li>
+      <li><a href="#启用自定义打点功能" id="markdown-toc-启用自定义打点功能">启用自定义打点功能</a></li>
+      <li><a href="#定制打点" id="markdown-toc-定制打点">定制打点</a></li>
+    </ul>
+  </li>
+  <li><a href="#定制上报的数据" id="markdown-toc-定制上报的数据">定制上报的数据</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="概念阐述">概念阐述</h2>
+
+<p>分布式调用链追踪提供了服务间调用的时序信息,但服务内部的链路调用信息对开发者同样重要,如果能将两者合二为一,就能提供更完整的调用链,更容易定位错误和潜在性能问题。</p>
+
+<h2 id="前提条件">前提条件</h2>
+
+<ul>
+  <li>使用自定义打点功能需要首先配置并启用Java Chassis微服务调用链。</li>
+</ul>
+
+<h2 id="注意事项">注意事项</h2>
+
+<ul>
+  <li>使用<code class="highlighter-rouge">@Span</code>注释的自定义打点功能只支持和Java Chassis调用请求同一线程的方法调用。</li>
+  <li>添加<code class="highlighter-rouge">@Span</code>注释的方法必须是Spring管理的Bean,否则需要按这里<a href="https://stackoverflow.com/questions/41383941/load-time-weaving-for-non-spring-beans-in-a-spring-application">提到的方法</a>配置。</li>
+</ul>
+
+<h2 id="自定义调用链打点">自定义调用链打点</h2>
+
+<p>该功能集成了Zipkin,提供<code class="highlighter-rouge">@Span</code>注释为需要追踪的方法自定义打点。Java Chassis将自动追踪所有添加<code class="highlighter-rouge">@Span</code>注释的方法,把每个方法的本地调用信息与服务间调用信息连接起来。</p>
+
+<h2 id="使用步骤">使用步骤:</h2>
+
+<h3 id="添加依赖">添加依赖</h3>
+
+<p>基于 ServiceComb Java Chassis 的微服务只需要添加如下依赖到 pom.xml:</p>
+
+<div class="language-xml highlighter-rouge"><pre class="highlight"><code>    <span class="nt">&lt;dependency&gt;</span>
+      <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+      <span class="nt">&lt;artifactId&gt;</span>tracing-zipkin<span class="nt">&lt;/artifactId&gt;</span>
+    <span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+</div>
+
+<h3 id="启用自定义打点功能">启用自定义打点功能</h3>
+
+<p>在应用入口或Spring配置类上添加<code class="highlighter-rouge">@EnableZipkinTracing</code>注释:</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@SpringBootApplication</span>
+<span class="nd">@EnableZipkinTracing</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">ZipkinSpanTestApplication</span> <span class="o">{</span>
+  <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
+    <span class="n">SpringApplication</span><span class="o">.</span><span class="na">run</span><span class="o">(</span><span class="n">ZipkinSpanTestApplication</span><span class="o">.</span><span class="na">class</span><span class="o">);</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<h3 id="定制打点">定制打点</h3>
+
+<p>在需要定制打点的方法上添加<code class="highlighter-rouge">@Span</code>注释:</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@Component</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">SlowRepoImpl</span> <span class="kd">implements</span> <span class="n">SlowRepo</span> <span class="o">{</span>
+  <span class="kd">private</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">Logger</span> <span class="n">logger</span> <span class="o">=</span> <span class="n">LoggerFactory</span><span class="o">.</span><span class="na">getLogger</span><span class="o">(</span><span class="n">SlowRepoImpl</span><span class="o">.</span><span class="na">class</span><span class="o">);</span>
+
+  <span class="kd">private</span> <span class="kd">final</span> <span class="n">Random</span> <span class="n">random</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Random</span><span class="o">();</span>
+
+  <span class="nd">@Span</span>
+  <span class="nd">@Override</span>
+  <span class="kd">public</span> <span class="n">String</span> <span class="nf">crawl</span><span class="o">()</span> <span class="kd">throws</span> <span class="n">InterruptedException</span> <span class="o">{</span>
+    <span class="n">logger</span><span class="o">.</span><span class="na">info</span><span class="o">(</span><span class="s">"in /crawl"</span><span class="o">);</span>
+    <span class="n">Thread</span><span class="o">.</span><span class="na">sleep</span><span class="o">(</span><span class="n">random</span><span class="o">.</span><span class="na">nextInt</span><span class="o">(</span><span class="mi">200</span><span class="o">));</span>
+    <span class="k">return</span> <span class="s">"crawled"</span><span class="o">;</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<p>就这样,通过使用<code class="highlighter-rouge">@Span</code>注释,我们启动了基于 Zipkin 的自定义打点功能。</p>
+
+<h2 id="定制上报的数据">定制上报的数据</h2>
+
+<p>通过自定义打点上报的调用链包含两条数据:</p>
+
+<ul>
+  <li><strong>span name</strong> 默认为当前注释的方法全名。</li>
+  <li><strong>call.path</strong> 默认为当前注释的方法签名。</li>
+</ul>
+
+<p>例如,上述例子<code class="highlighter-rouge">SlowRepoImp</code>里上报的数据如下:</p>
+
+<table>
+  <thead>
+    <tr>
+      <th style="text-align: left">key</th>
+      <th style="text-align: left">value</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td style="text-align: left">span name</td>
+      <td style="text-align: left">crawl</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">call.path</td>
+      <td style="text-align: left">public abstract java.lang.String io.servicecomb.tests.tracing.SlowRepo.crawl() throws java.lang.InterruptedException</td>
+    </tr>
+  </tbody>
+</table>
+
+<p>如果需要定制上报的数据内容,可以传入自定义的参数:</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code>  <span class="kd">public</span> <span class="kd">static</span> <span class="kd">class</span> <span class="nc">CustomSpanTask</span> <span class="o">{</span>
+    <span class="nd">@Span</span><span class="o">(</span><span class="n">spanName</span> <span class="o">=</span> <span class="s">"transaction1"</span><span class="o">,</span> <span class="n">callPath</span> <span class="o">=</span> <span class="s">"startA"</span><span class="o">)</span>
+    <span class="kd">public</span> <span class="n">String</span> <span class="nf">invoke</span><span class="o">()</span> <span class="o">{</span>
+      <span class="k">return</span> <span class="s">"invoke the method"</span><span class="o">;</span>
+    <span class="o">}</span>
+  <span class="o">}</span>
+</code></pre>
+</div>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/cn/customized-tracing.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/cn/customized-tracing.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>


[56/57] incubator-servicecomb-website git commit: Merge branch 'master' into asf-site

Posted by ni...@apache.org.
Merge branch 'master' into asf-site


Project: http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/commit/e0c6d4f8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/tree/e0c6d4f8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/diff/e0c6d4f8

Branch: refs/heads/asf-site
Commit: e0c6d4f833b3035b09cb669f209a2b96f6b75b80
Parents: 1b79449 ac28d1c
Author: Willem Jiang <ji...@huawei.com>
Authored: Tue Dec 12 16:08:22 2017 +0800
Committer: Willem Jiang <ji...@huawei.com>
Committed: Tue Dec 12 16:08:22 2017 +0800

----------------------------------------------------------------------
 _docs/flow-control.md                       | 2 +-
 _faqs/cn/faq.md                             | 6 +++---
 _pages/home.md                              | 2 +-
 _posts/cn/2017-06-24-go-to-cloud.md         | 2 +-
 _users/cn/communicate-protocol.md           | 2 +-
 _users/cn/develop-with-springmvc.md         | 2 +-
 _users/cn/service-configurations.md         | 2 +-
 _users/cn/use-servicecomb-in-spring-boot.md | 2 +-
 _users/cn/use-tls.md                        | 2 +-
 _users/communicate-protocol.md              | 2 +-
 _users/develop-with-springmvc.md            | 2 +-
 _users/service-configurations.md            | 2 +-
 _users/use-servicecomb-in-spring-boot.md    | 2 +-
 _users/use-tls.md                           | 2 +-
 14 files changed, 16 insertions(+), 16 deletions(-)
----------------------------------------------------------------------



[26/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/users/invoke-control/index.html
----------------------------------------------------------------------
diff --git a/content/cn/users/invoke-control/index.html b/content/cn/users/invoke-control/index.html
new file mode 100644
index 0000000..ea3d274
--- /dev/null
+++ b/content/cn/users/invoke-control/index.html
@@ -0,0 +1,817 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>调用控制 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="调用控制">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="调用控制">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/invoke-control/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/invoke-control/">
+
+
+
+  <meta property="og:description" content="调用控制">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="调用控制">
+  <meta name="twitter:description" content="调用控制">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/users/invoke-control/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">用户手册</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/" class="">Java Chassis系统架构</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/setup-environment/" class="">环境配置</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务提供者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-definition/" class="">服务定义</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-contract/" class="">服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-springmvc/" class="">用SpringMVC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-jax-rs/" class="">用JAX-RS开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-transparent-rpc/" class="">用透明RPC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-interface-constraints/" class="">服务接口约束</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-configurations/" class="">服务配置</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/communicate-protocol/" class="">通信协议</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/application-boot-process/" class="">程序启动逻辑</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-heartbeat/" class="">服务心跳</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务消费者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rest-template/" class="">使用Rest Template方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rpc/" class="">使用RPC方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-service-contract/" class="">使用服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/invoke-control/" class="active">调用控制</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">通用开发</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/local-develop-test/" class="">本地开发与测试</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-servicecomb-in-spring-boot/" class="">在Spring Boot中使用ServiceComb</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/distributed-tracing/" class="">分布式调用链追踪</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/customized-tracing/" class="">自定义调用链打点</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">服务能力开放</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/nginx/" class="">使用confd和Nginx做边缘服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/zuul/" class="">使用Zuul做边缘服务</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">监控</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">部署</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/run-mode/" class="">运行模式</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">微服务安全</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-tls/" class="">使用TLS通信</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="调用控制">
+    <meta itemprop="description" content="调用控制">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">调用控制
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> 在本页上</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#实例级故障隔离" id="markdown-toc-实例级故障隔离">实例级故障隔离</a>    <ul>
+      <li><a href="#场景描述" id="markdown-toc-场景描述">场景描述</a></li>
+      <li><a href="#配置说明" id="markdown-toc-配置说明">配置说明</a></li>
+    </ul>
+  </li>
+  <li><a href="#熔断策略" id="markdown-toc-熔断策略">熔断策略</a>    <ul>
+      <li><a href="#场景描述-1" id="markdown-toc-场景描述-1">场景描述</a></li>
+      <li><a href="#配置说明-1" id="markdown-toc-配置说明-1">配置说明</a></li>
+    </ul>
+  </li>
+  <li><a href="#限流策略" id="markdown-toc-限流策略">限流策略</a>    <ul>
+      <li><a href="#场景描述-2" id="markdown-toc-场景描述-2">场景描述</a></li>
+      <li><a href="#注意事项" id="markdown-toc-注意事项">注意事项</a></li>
+      <li><a href="#配置说明-2" id="markdown-toc-配置说明-2">配置说明</a></li>
+    </ul>
+  </li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="实例级故障隔离">实例级故障隔离</h2>
+
+<h3 id="场景描述">场景描述</h3>
+
+<p>实例级故障隔离功能允许在微服务的部分实例调用失败时,停止向故障实例发送请求,从而达到隔离故障实例的功能。</p>
+
+<h3 id="配置说明">配置说明</h3>
+
+<p>实例级故障隔离功能集成在负载均衡功能中,负载均衡策略的配置见<a href="/cn/users/service-configurations/#负载均衡策略">负载均衡策略</a>。负载均衡策略中,与实例级故障隔离相关的配置项见下表。</p>
+
+<table>
+  <thead>
+    <tr>
+      <th style="text-align: left">配置项</th>
+      <th style="text-align: left">默认值</th>
+      <th style="text-align: left">取值范围</th>
+      <th style="text-align: left">是否必选</th>
+      <th style="text-align: left">含义</th>
+      <th style="text-align: left">注意</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td style="text-align: left">cse.loadbalance.isolation.enabled</td>
+      <td style="text-align: left">false</td>
+      <td style="text-align: left">Boolean</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">是否开启故障实例隔离功能</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.loadbalance.isolation.enableRequestThreshold</td>
+      <td style="text-align: left">20</td>
+      <td style="text-align: left">Integer</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">当实例的调用总次数达到该值时开始进入隔离逻辑门槛</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.loadbalance.isolation.errorThresholdPercentage</td>
+      <td style="text-align: left">20</td>
+      <td style="text-align: left">Integer,区间为(0,100]</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">实例故障隔离错误百分比</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.loadbalance.isolation.singleTestTime</td>
+      <td style="text-align: left">10000</td>
+      <td style="text-align: left">Integer</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">故障实例单点测试时间</td>
+      <td style="text-align: left"> </td>
+    </tr>
+  </tbody>
+</table>
+
+<h2 id="熔断策略">熔断策略</h2>
+<h3 id="场景描述-1">场景描述</h3>
+
+<p>熔断策略是对ServiceComb熔断功能的设置,用户通过配置熔断策略可以指定在何种条件下ServiceComb框架将终止发送请求。</p>
+
+<h3 id="配置说明-1">配置说明</h3>
+
+<p>熔断作为异常反应机制是降级策略的一部分,相关概念还有隔离和容错。三者的关系以及配置方式参见<a href="/cn/users/service-configurations/#降级策略">降级策略</a>。</p>
+
+<h2 id="限流策略">限流策略</h2>
+<h3 id="场景描述-2">场景描述</h3>
+
+<p>用户在consumer端使用限流策略,可以限制发往指定微服务的请求的频率。</p>
+
+<h3 id="注意事项">注意事项</h3>
+
+<p>参考服务提供者处<a href="/cn/users/service-configurations/#限流策略">限流策略注意事项</a>。</p>
+
+<h3 id="配置说明-2">配置说明</h3>
+
+<p>限流策略配置在microservice.yaml文件中,相关配置项见下表。要开启服务消费者端的限流策略,还需要在处理链中配置消费端限流handler,配置示例如下:</p>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">cse</span><span class="pi">:</span>
+  <span class="s">handler</span><span class="pi">:</span>
+    <span class="s">chain</span><span class="pi">:</span>
+      <span class="s">Consumer</span><span class="pi">:</span>
+        <span class="s">default</span><span class="pi">:</span> <span class="s">qps-flowcontrol-consumer</span>
+</code></pre>
+</div>
+
+<p>QPS流控配置项说明</p>
+
+<table>
+  <thead>
+    <tr>
+      <th style="text-align: left">配置项</th>
+      <th style="text-align: left">默认值</th>
+      <th style="text-align: left">取值范围</th>
+      <th style="text-align: left">是否必选</th>
+      <th style="text-align: left">含义</th>
+      <th style="text-align: left">注意</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td style="text-align: left">cse.flowcontrol.Consumer.qps.enabled</td>
+      <td style="text-align: left">true</td>
+      <td style="text-align: left">Boolean</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">是否启用Consumer流控</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.flowcontrol.Consumer.qps.limit.[ServiceName].[Schema].[operation]</td>
+      <td style="text-align: left">2147483647  (max int)</td>
+      <td style="text-align: left">(0,2147483647],整形</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">每秒钟允许的请求数</td>
+      <td style="text-align: left">支持microservice、schema、operation三个级别的配置</td>
+    </tr>
+  </tbody>
+</table>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/cn/invoke-control.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/cn/invoke-control.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/users/local-develop-test/index.html
----------------------------------------------------------------------
diff --git a/content/cn/users/local-develop-test/index.html b/content/cn/users/local-develop-test/index.html
new file mode 100644
index 0000000..edc586e
--- /dev/null
+++ b/content/cn/users/local-develop-test/index.html
@@ -0,0 +1,760 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>本地开发与测试 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="本地开发与测试">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="本地开发与测试">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/local-develop-test/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/local-develop-test/">
+
+
+
+  <meta property="og:description" content="本地开发与测试">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="本地开发与测试">
+  <meta name="twitter:description" content="本地开发与测试">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/users/local-develop-test/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">用户手册</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/" class="">Java Chassis系统架构</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/setup-environment/" class="">环境配置</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务提供者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-definition/" class="">服务定义</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-contract/" class="">服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-springmvc/" class="">用SpringMVC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-jax-rs/" class="">用JAX-RS开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-transparent-rpc/" class="">用透明RPC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-interface-constraints/" class="">服务接口约束</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-configurations/" class="">服务配置</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/communicate-protocol/" class="">通信协议</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/application-boot-process/" class="">程序启动逻辑</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-heartbeat/" class="">服务心跳</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务消费者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rest-template/" class="">使用Rest Template方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rpc/" class="">使用RPC方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-service-contract/" class="">使用服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/invoke-control/" class="">调用控制</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">通用开发</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/local-develop-test/" class="active">本地开发与测试</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-servicecomb-in-spring-boot/" class="">在Spring Boot中使用ServiceComb</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/distributed-tracing/" class="">分布式调用链追踪</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/customized-tracing/" class="">自定义调用链打点</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">服务能力开放</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/nginx/" class="">使用confd和Nginx做边缘服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/zuul/" class="">使用Zuul做边缘服务</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">监控</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">部署</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/run-mode/" class="">运行模式</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">微服务安全</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-tls/" class="">使用TLS通信</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="本地开发与测试">
+    <meta itemprop="description" content="本地开发与测试">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">本地开发与测试
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> 在本页上</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#概念阐述" id="markdown-toc-概念阐述">概念阐述</a></li>
+  <li><a href="#启动本地服务中心" id="markdown-toc-启动本地服务中心">启动本地服务中心</a></li>
+  <li><a href="#mock机制启动服务中心" id="markdown-toc-mock机制启动服务中心">Mock机制启动服务中心</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="概念阐述">概念阐述</h2>
+
+<p>本小节介绍如何在开发者本地进行消费者/提供者应用的开发调试。开发服务提供者请参考<a href="/cn/users/service-definition/">开发服务提供者章节</a>,开发服务消费者请参考<a href="/cn/users/develop-with-rest-template/">开发服务消费者章节</a>。服务提供者和消费提供者均需要连接到在远程的服务中心,为了本地微服务的开发和调试,本小节介绍了两种搭建本地服务中心的方法进行本地微服务调试:</p>
+
+<ul>
+  <li>
+    <p><a href="#启动本地服务中心">启动本地服务中心</a>。</p>
+  </li>
+  <li>
+    <p><a href="#mock机制启动服务中心">通过local file模拟启动服务中心Mock机制</a>。</p>
+  </li>
+</ul>
+
+<p>服务中心是微服务框架中的重要组件,用于服务元数据以及服务实例元数据的管理和处理注册、发现。服务中心与微服务提供/消费者的逻辑关系下图所示:</p>
+
+<p><img src="/assets/images/local_develop_test.png" alt="" /></p>
+
+<h2 id="启动本地服务中心">启动本地服务中心</h2>
+
+<ul>
+  <li>
+    <p><strong>步骤1</strong> 启动本地服务中心,可参考<a href="/cn/users/setup-environment/#运行service-center">运行Service Center指南</a>。</p>
+  </li>
+  <li>
+    <p><strong>步骤 2</strong> 启动本地轻量服务中心后,在服务提供/消费者的microservice.yaml文件中配置ServerCenter的地址和端口,示例代码:</p>
+
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code> <span class="s">cse</span><span class="pi">:</span>
+   <span class="s">service</span><span class="pi">:</span>
+     <span class="s">registry</span><span class="pi">:</span>
+       <span class="s">address</span><span class="pi">:</span> <span class="s">http://127.0.0.1:30100</span> <span class="c1">#服务中心地址及端口</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>步骤 3</strong> 开发服务提供/消费者,启动微服务进行本地测试。</p>
+  </li>
+</ul>
+
+<h2 id="mock机制启动服务中心">Mock机制启动服务中心</h2>
+
+<ul>
+  <li>
+    <p><strong>步骤 1</strong>新建本地服务中心定义文件registry.yaml,内容如下:</p>
+
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code> <span class="s">springmvctest</span><span class="pi">:</span>
+   <span class="pi">-</span> <span class="s">id</span><span class="pi">:</span> <span class="s2">"</span><span class="s">001"</span>
+     <span class="s">version</span><span class="pi">:</span> <span class="s2">"</span><span class="s">1.0"</span>
+     <span class="s">appid</span><span class="pi">:</span> <span class="s">myapp</span> <span class="c1">#调试的服务id</span>
+     <span class="s">instances</span><span class="pi">:</span> 
+       <span class="s">endpoints</span><span class="pi">:</span>
+         <span class="s">rest://127.0.0.1:8080</span>
+</code></pre>
+    </div>
+
+    <p>注意:mock机制需要自己准备契约,并且当前只支持在本地进行服务消费端(consumer)侧的调试,不支持服务提供者(provider)</p>
+  </li>
+  <li>
+    <p><strong>步骤 2</strong>在服务消费者Main函数首末添加如下代码:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="kd">public</span> <span class="kd">class</span> <span class="nc">xxxClient</span> <span class="o">{</span>
+ <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
+   <span class="n">System</span><span class="o">.</span><span class="na">setProperty</span><span class="o">(</span><span class="s">"local.registry.file"</span><span class="o">,</span> <span class="s">"/path/registry.yaml"</span><span class="o">);</span>
+   <span class="c1">//your code</span>
+   <span class="n">System</span><span class="o">.</span><span class="na">clearProperty</span><span class="o">(</span><span class="s">"local.registry.file"</span><span class="o">);</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+  </li>
+</ul>
+
+<p>setProperty第二个参数填写registry.yaml的系统绝对路径,注意区分在不同系统下使用对应的路径分隔符。</p>
+
+<ul>
+  <li><strong>步骤 3</strong>开发服务消费者,启动微服务进行本地测试。</li>
+</ul>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/cn/local-develop-test.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/cn/local-develop-test.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/users/metrics/index.html
----------------------------------------------------------------------
diff --git a/content/cn/users/metrics/index.html b/content/cn/users/metrics/index.html
new file mode 100644
index 0000000..913efbc
--- /dev/null
+++ b/content/cn/users/metrics/index.html
@@ -0,0 +1,749 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>Metrics监控 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="Metrics监控">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="Metrics监控">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/metrics/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/metrics/">
+
+
+
+  <meta property="og:description" content="Metrics监控">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="Metrics监控">
+  <meta name="twitter:description" content="Metrics监控">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/users/metrics/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">用户手册</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/" class="">Java Chassis系统架构</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/setup-environment/" class="">环境配置</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务提供者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-definition/" class="">服务定义</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-contract/" class="">服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-springmvc/" class="">用SpringMVC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-jax-rs/" class="">用JAX-RS开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-transparent-rpc/" class="">用透明RPC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-interface-constraints/" class="">服务接口约束</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-configurations/" class="">服务配置</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/communicate-protocol/" class="">通信协议</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/application-boot-process/" class="">程序启动逻辑</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-heartbeat/" class="">服务心跳</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务消费者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rest-template/" class="">使用Rest Template方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rpc/" class="">使用RPC方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-service-contract/" class="">使用服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/invoke-control/" class="">调用控制</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">通用开发</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/local-develop-test/" class="">本地开发与测试</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-servicecomb-in-spring-boot/" class="">在Spring Boot中使用ServiceComb</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/distributed-tracing/" class="">分布式调用链追踪</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/customized-tracing/" class="">自定义调用链打点</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">服务能力开放</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/nginx/" class="">使用confd和Nginx做边缘服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/zuul/" class="">使用Zuul做边缘服务</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">监控</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">部署</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/run-mode/" class="">运行模式</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">微服务安全</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-tls/" class="">使用TLS通信</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="Metrics监控">
+    <meta itemprop="description" content="Metrics监控">
+    
+    <meta itemprop="dateModified" content="November 29, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">Metrics监控
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> 在本页上</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#如何配置" id="markdown-toc-如何配置">如何配置</a></li>
+  <li><a href="#注意事项" id="markdown-toc-注意事项">注意事项</a></li>
+  <li><a href="#文件输出" id="markdown-toc-文件输出">文件输出</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<p>微服务框架从0.4.1版本开始支持监控功能Metrics,请注意这个功能还处于开发(Preview)阶段,请不要部署到生产环境,并且我们未来会做较大的调整,更多讨论会持续发布在<a href="https://groups.google.com/forum/#!forum/servicecomb-developers">Google Group</a>中。</p>
+<h2 id="如何配置">如何配置</h2>
+<p>请在microservice.yaml中添加如下配置项:</p>
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">APPLICATION_ID</span><span class="pi">:</span> <span class="s">demo</span>
+<span class="s">service_description</span><span class="pi">:</span>
+  <span class="s">name</span><span class="pi">:</span> <span class="s">demoService</span>
+  <span class="s">version</span><span class="pi">:</span> <span class="s">0.0.1</span>
+
+<span class="s">servicecomb</span><span class="pi">:</span>
+  <span class="s">metrics</span><span class="pi">:</span>
+    <span class="c1">#metrics数据采集时间(同样是写文件间隔),单位秒</span>
+    <span class="s">polltime</span><span class="pi">:</span> <span class="s">5</span>
+    <span class="c1">#如果metric是浮点数,输出结果保留几位小数,默认为1</span>
+    <span class="s">round_places</span><span class="pi">:</span> <span class="s">1</span>
+    <span class="s">file</span><span class="pi">:</span>
+      <span class="c1">#是否启用文件输出</span>
+      <span class="s">enabled</span><span class="pi">:</span> <span class="s">true</span>
+      <span class="c1">#输出文件的根目录</span>
+      <span class="s">root_path</span><span class="pi">:</span> <span class="s">D:/Temp</span>
+      <span class="c1">#metrics文件的前缀</span>
+      <span class="s">name_prefix</span><span class="pi">:</span> <span class="s">demo.demoService</span>
+      <span class="c1">#metrics文件Rolling最大大小,默认10MB,例如10KB,10MB,10GB</span>
+      <span class="s">max_rolling_size</span><span class="pi">:</span> <span class="s">10MB</span>
+      <span class="c1">#metrics文件Rolling文件保存数量,默认10个</span>
+      <span class="s">max_rolling_count</span><span class="pi">:</span> <span class="s">10</span>
+</code></pre>
+</div>
+
+<h2 id="注意事项">注意事项</h2>
+<ul>
+  <li>如果使用ServiceComb Spring Boot Start快速构建项目,需要排除log4j-over-slf4j依赖
+    <div class="language-xml highlighter-rouge"><pre class="highlight"><code> <span class="nt">&lt;dependency&gt;</span>
+   <span class="nt">&lt;groupId&gt;</span>org.springframework.boot<span class="nt">&lt;/groupId&gt;</span>
+   <span class="nt">&lt;artifactId&gt;</span>spring-boot-starter<span class="nt">&lt;/artifactId&gt;</span>
+   <span class="c">&lt;!--Metric使用log4j输出,屏蔽掉spring-boot-starter中的log4j-over-slf4j--&gt;</span>
+   <span class="nt">&lt;exclusions&gt;</span>
+     <span class="nt">&lt;exclusion&gt;</span>
+       <span class="nt">&lt;groupId&gt;</span>org.slf4j<span class="nt">&lt;/groupId&gt;</span>
+       <span class="nt">&lt;artifactId&gt;</span>log4j-over-slf4j<span class="nt">&lt;/artifactId&gt;</span>
+     <span class="nt">&lt;/exclusion&gt;</span>
+   <span class="nt">&lt;/exclusions&gt;</span>
+ <span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+    </div>
+  </li>
+  <li>需要在provider治理链中添加bizkeeper-provider,否则TPS和Latency无数据
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code> <span class="s">APPLICATION_ID</span><span class="pi">:</span> <span class="s">demo</span>
+ <span class="s">service_description</span><span class="pi">:</span>
+   <span class="s">name</span><span class="pi">:</span> <span class="s">demoService</span>
+   <span class="s">version</span><span class="pi">:</span> <span class="s">0.0.1</span>
+ <span class="s">cse</span><span class="pi">:</span>
+   <span class="s">handler</span><span class="pi">:</span>
+     <span class="s">chain</span><span class="pi">:</span>
+       <span class="s">Provider</span><span class="pi">:</span>
+         <span class="s">default</span><span class="pi">:</span> <span class="s">bizkeeper-provider</span>
+</code></pre>
+    </div>
+  </li>
+</ul>
+
+<h2 id="文件输出">文件输出</h2>
+<p>每一个文件就是一个微服务示例级别的metrics数据输出:</p>
+
+<p><img src="/assets/images/metrics-output.png" alt="Metrics图片" /></p>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/cn/Metrics.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/cn/Metrics.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/users/run-mode/index.html
----------------------------------------------------------------------
diff --git a/content/cn/users/run-mode/index.html b/content/cn/users/run-mode/index.html
new file mode 100644
index 0000000..38522b9
--- /dev/null
+++ b/content/cn/users/run-mode/index.html
@@ -0,0 +1,772 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>运行模式 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="运行模式">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="运行模式">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/run-mode/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/run-mode/">
+
+
+
+  <meta property="og:description" content="运行模式">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="运行模式">
+  <meta name="twitter:description" content="运行模式">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/users/run-mode/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">用户手册</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/" class="">Java Chassis系统架构</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/setup-environment/" class="">环境配置</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务提供者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-definition/" class="">服务定义</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-contract/" class="">服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-springmvc/" class="">用SpringMVC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-jax-rs/" class="">用JAX-RS开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-transparent-rpc/" class="">用透明RPC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-interface-constraints/" class="">服务接口约束</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-configurations/" class="">服务配置</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/communicate-protocol/" class="">通信协议</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/application-boot-process/" class="">程序启动逻辑</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-heartbeat/" class="">服务心跳</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务消费者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rest-template/" class="">使用Rest Template方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rpc/" class="">使用RPC方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-service-contract/" class="">使用服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/invoke-control/" class="">调用控制</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">通用开发</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/local-develop-test/" class="">本地开发与测试</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-servicecomb-in-spring-boot/" class="">在Spring Boot中使用ServiceComb</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/distributed-tracing/" class="">分布式调用链追踪</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/customized-tracing/" class="">自定义调用链打点</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">服务能力开放</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/nginx/" class="">使用confd和Nginx做边缘服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/zuul/" class="">使用Zuul做边缘服务</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">监控</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">部署</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/run-mode/" class="active">运行模式</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">微服务安全</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-tls/" class="">使用TLS通信</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="运行模式">
+    <meta itemprop="description" content="运行模式">
+    
+    <meta itemprop="dateModified" content="June 06, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">运行模式
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> 在本页上</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#standalone模式" id="markdown-toc-standalone模式">standalone模式</a>    <ul>
+      <li><a href="#操作步骤" id="markdown-toc-操作步骤">操作步骤</a></li>
+    </ul>
+  </li>
+  <li><a href="#web容器模式" id="markdown-toc-web容器模式">WEB容器模式</a>    <ul>
+      <li><a href="#开发示例" id="markdown-toc-开发示例">开发示例</a></li>
+    </ul>
+  </li>
+</ul>
+
+  </nav>
+</aside>
+
+<p>微服务框架当前提供了两种部署运行模式:standalone模式和web容器模式。推荐使用<strong>standalone模式</strong>拉起服务进程。</p>
+<h2 id="standalone模式">standalone模式</h2>
+<p>一个Standalone的容器,以简单的Main加载Spring启动,因为服务通常不需要Tomcat/JBoss等Web容器的特性,没必要用Web容器去加载服务。微框架提供了standalone部署运行模式,服务容器只是一个简单的Main方法,并加载一个简单的Spring容器,用于暴露服务。</p>
+
+<h3 id="操作步骤">操作步骤</h3>
+
+<ul>
+  <li>
+    <p><strong>步骤1</strong> 编写Main函数,初始化日志和加载服务配置,内容如下:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="kn">import</span> <span class="nn">io.servicecomb.foundation.common.utils.BeanUtils</span><span class="o">;</span>
+ <span class="kn">import</span> <span class="nn">io.servicecomb.foundation.common.utils.Log4jUtils</span><span class="o">;</span>
+ <span class="kd">public</span> <span class="kd">class</span> <span class="nc">MainServer</span> <span class="o">{</span>
+   <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span>
+   <span class="err"> </span><span class="n">Log4jUtils</span><span class="o">.</span><span class="na">init</span><span class="o">();</span> <span class="err">#日志初始化</span>
+   <span class="err"> </span><span class="n">BeanUtils</span><span class="o">.</span><span class="na">init</span><span class="o">();</span> <span class="err">#</span> <span class="n">Spring</span> <span class="n">bean</span><span class="err">初始化</span>
+     <span class="c1">// other codes omitted</span>
+   <span class="o">}</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>步骤2</strong> 运行MainServer即可启动该微服务进程,向外暴露服务。</p>
+
+    <p>注意:如果使用的是rest网络通道,需要将pom中的transport改为使用cse-transport-rest-vertx包。</p>
+  </li>
+</ul>
+
+<h2 id="web容器模式">WEB容器模式</h2>
+<p>如果需要将该微服务加载到web容器中启动运行时,需要新建一个servlet工程包装一下,该servlet工程,根据需要,可以不写或写少量的引导代码即可。</p>
+
+<h3 id="开发示例">开发示例</h3>
+
+<div class="language-xml highlighter-rouge"><pre class="highlight"><code><span class="nt">&lt;web-app&gt;</span>
+    <span class="nt">&lt;context-param&gt;</span>
+        <span class="nt">&lt;param-name&gt;</span>contextConfigLocation<span class="nt">&lt;/param-name&gt;</span>
+        <span class="nt">&lt;param-value&gt;</span>
+            classpath*:META-INF/spring/*.bean.xml
+            classpath*:app-config.xml
+        <span class="nt">&lt;/param-value&gt;</span>
+    <span class="nt">&lt;/context-param&gt;</span>
+    <span class="nt">&lt;listener&gt;</span>
+        <span class="nt">&lt;listener-class&gt;</span>io.servicecomb.transport.rest.servlet.RestServletContextListener<span class="nt">&lt;/listener-class&gt;</span>
+    <span class="nt">&lt;/listener&gt;</span>
+
+    <span class="nt">&lt;servlet&gt;</span>
+        <span class="nt">&lt;servlet-name&gt;</span>RestServlet<span class="nt">&lt;/servlet-name&gt;</span>
+        <span class="nt">&lt;servlet-class&gt;</span>io.servicecomb.transport.rest.servlet.RestServlet<span class="nt">&lt;/servlet-class&gt;</span>
+        <span class="nt">&lt;load-on-startup&gt;</span>1<span class="nt">&lt;/load-on-startup&gt;</span>
+        <span class="nt">&lt;async-supported&gt;</span>true<span class="nt">&lt;/async-supported&gt;</span>
+    <span class="nt">&lt;/servlet&gt;</span>
+    <span class="nt">&lt;servlet-mapping&gt;</span>
+        <span class="nt">&lt;servlet-name&gt;</span>RestServlet<span class="nt">&lt;/servlet-name&gt;</span>
+        <span class="nt">&lt;url-pattern&gt;</span>/rest/*<span class="nt">&lt;/url-pattern&gt;</span>
+    <span class="nt">&lt;/servlet-mapping&gt;</span>
+<span class="nt">&lt;/web-app&gt;</span>
+</code></pre>
+</div>
+
+<ul>
+  <li><strong>步骤2 修改pom文件</strong></li>
+</ul>
+
+<div class="language-xml highlighter-rouge"><pre class="highlight"><code><span class="nt">&lt;dependencies&gt;</span>
+    <span class="nt">&lt;dependency&gt;</span>
+        <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+        <span class="nt">&lt;artifactId&gt;</span>transport-rest-servlet<span class="nt">&lt;/artifactId&gt;</span>
+    <span class="nt">&lt;/dependency&gt;</span>
+<span class="nt">&lt;/dependencies&gt;</span>
+<span class="nt">&lt;build&gt;</span>
+    <span class="nt">&lt;finalName&gt;</span>test<span class="nt">&lt;/finalName&gt;</span>
+<span class="nt">&lt;/build&gt;</span>
+</code></pre>
+</div>
+
+<p><strong>注意事项:</strong></p>
+<ol>
+  <li>RESTful调用应该与web容器中其他静态资源调用(比如html、js等等)隔离开来,所以webroot后一段应该还有一层关键字,比如上面web.xml中举的例子(/test/rest)中的rest。</li>
+  <li>以tomcat为例,默认每个war包都有不同的webroot,这个webroot需要是basePath的前缀,比如webroot为test,则该微服务所有的契约都必须以/test打头。</li>
+  <li>当微服务加载在web容器中,并直接使用web容器开的http、https端口时,因为是使用的web容器的通信通道,所以需要满足web容器的规则。</li>
+</ol>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/cn/deployment.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/cn/deployment.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>



[11/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/docs/tracing-with-servicecomb/index.html
----------------------------------------------------------------------
diff --git a/content/docs/tracing-with-servicecomb/index.html b/content/docs/tracing-with-servicecomb/index.html
new file mode 100644
index 0000000..977bd68
--- /dev/null
+++ b/content/docs/tracing-with-servicecomb/index.html
@@ -0,0 +1,878 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>Distributed Tracing with ServiceComb and Zipkin - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="A introduction of how to set up distributed tracing with ServiceComb and Zipkin">
+
+
+
+
+<meta name="author" content="Sean Yin">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="Distributed Tracing with ServiceComb and Zipkin">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/tracing-with-servicecomb/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/tracing-with-servicecomb/">
+
+
+
+  <meta property="og:description" content="A introduction of how to set up distributed tracing with ServiceComb and Zipkin">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="Distributed Tracing with ServiceComb and Zipkin">
+  <meta name="twitter:description" content="A introduction of how to set up distributed tracing with ServiceComb and Zipkin">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+    <meta name="twitter:creator" content="@seanyinx">
+  
+
+
+
+  
+
+  
+
+
+
+
+
+  <meta property="og:type" content="article">
+  <meta property="article:published_time" content="2017-07-17T00:00:00+08:00">
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/docs/tracing-with-servicecomb/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+
+<div itemscope itemtype="http://schema.org/Person">
+
+  
+
+  <div class="author__content">
+    <h3 class="author__name" itemprop="name">Sean Yin</h3>
+    
+      <p class="author__bio" itemprop="description">
+	    
+        Nothing but speed is indestructible
+	    
+      </p>
+    
+  </div>
+
+  <div class="author__urls-wrapper">
+    <button class="btn btn--inverse">Follow</button>
+    <ul class="author__urls social-icons">
+      
+
+      
+        <li>
+          <a href="http://seanyinx.github.io" itemprop="url">
+            <i class="fa fa-fw fa-chain" aria-hidden="true"></i> Website
+          </a>
+        </li>
+      
+
+      
+        <li>
+          <a href="mailto:seanyinx@gmail.com">
+            <meta itemprop="email" content="seanyinx@gmail.com" />
+            <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> Email
+          </a>
+        </li>
+      
+
+      
+
+      
+        <li>
+          <a href="https://twitter.com/seanyinx" itemprop="sameAs">
+            <i class="fa fa-fw fa-twitter-square" aria-hidden="true"></i> Twitter
+          </a>
+        </li>
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      <!--
+  <li>
+    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs">
+      <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link
+    </a>
+  </li>
+-->
+    </ul>
+  </div>
+</div>
+
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="Distributed Tracing with ServiceComb and Zipkin">
+    <meta itemprop="description" content="A introduction of how to set up distributed tracing with ServiceComb and Zipkin">
+    <meta itemprop="datePublished" content="July 17, 2017">
+    <meta itemprop="dateModified" content="July 17, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">Distributed Tracing with ServiceComb and Zipkin
+</h1>
+            
+              <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  3 minute read
+
+</p>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <p>Microservice architecture solves many problems of monolithic applications, but it also comes with costs. Request latencies
+due to network instability is one of the prices we have to pay.</p>
+
+<p>In monolithic applications, modules are all running in one process and there's no such thing as communication issues among 
+modules. However, with microservice architecture, services are communicating through a network and we have to deal with all 
+network related issues, such as delays, timeouts, and partition.</p>
+
+<p>In addition, given more and more services deployed, we can easily lose the sight on how requests flow through
+the web of microservices in our applications. How can we monitor the network latencies and flow of requests through our system?</p>
+
+<h2 id="zipkin">Zipkin</h2>
+<blockquote>
+  <p><a href="http://zipkin.io/">Zipkin</a> is a distributed tracing system. It helps gather timing data needed to troubleshoot latency 
+problems in microservice architectures. It manages both the collection and lookup of this data. Zipkin’s design is based 
+on the Google <a href="http://research.google.com/pubs/pub36356.html">Dapper paper</a>.[1]</p>
+</blockquote>
+
+<p>ServiceComb integrates with Zipkin to provide automatic tracing, so that users can focus on fulfilling their business requirements.</p>
+
+<h2 id="instructions">Instructions</h2>
+<p>We will use the <a href="https://github.com/ServiceComb/LinuxCon-Beijing-WorkShop">workshop demo</a> as an example to illustrate how
+to apply distributed tracing with Zipkin.</p>
+
+<h3 id="adding-dependencies">Adding Dependencies</h3>
+<p>A microservice written with ServiceComb Java Chassis just need to add one dependency below to its pom.xml.</p>
+<div class="language-xml highlighter-rouge"><pre class="highlight"><code>    <span class="nt">&lt;dependency&gt;</span>
+      <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+      <span class="nt">&lt;artifactId&gt;</span>handler-tracing-zipkin<span class="nt">&lt;/artifactId&gt;</span>
+    <span class="nt">&lt;/dependency&gt;</span>
+
+</code></pre>
+</div>
+
+<p>If the microservice is an API gateway with Spring Cloud + Zuul like manager service in the workshop demo, an additional 
+dependency has to be included.</p>
+<div class="language-xml highlighter-rouge"><pre class="highlight"><code>    <span class="nt">&lt;dependency&gt;</span>
+      <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+      <span class="nt">&lt;artifactId&gt;</span>spring-cloud-zuul-zipkin<span class="nt">&lt;/artifactId&gt;</span>
+    <span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+</div>
+
+<h3 id="configuring-tracing-handlers-and-collector">Configuring Tracing Handlers And Collector</h3>
+<p>In the configuration file <code class="highlighter-rouge">microservice.yaml</code> , apply tracing handlers and add tracing collector address.</p>
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">cse</span><span class="pi">:</span>
+  <span class="s">handler</span><span class="pi">:</span>
+    <span class="s">chain</span><span class="pi">:</span>
+      <span class="s">Consumer</span><span class="pi">:</span>
+        <span class="s">default</span><span class="pi">:</span> <span class="s">tracing-consumer</span>
+      <span class="s">Provider</span><span class="pi">:</span>
+        <span class="s">default</span><span class="pi">:</span> <span class="s">tracing-provider</span>
+
+<span class="s">servicecomb</span><span class="pi">:</span>
+  <span class="s">tracing</span><span class="pi">:</span>
+    <span class="s">collector</span><span class="pi">:</span>
+      <span class="s">address</span><span class="pi">:</span> <span class="s">http://zipkin.servicecomb.io:9411</span>
+</code></pre>
+</div>
+
+<p>That's all! After two configuration additions and no change to a single line of code, distributed tracing with Zipkin is 
+enabled for microservices written with Java chassis.</p>
+
+<p><strong>Note</strong> If other dependencies in your project also include zipkin (e.g. Spring Cloud), it may cause runtime error due to
+conflict of incompatible zipkin versions. In such a case, you may need to explicitly declare the compatible zipkin version
+in your pom.</p>
+
+<h2 id="a-quick-demo">A Quick Demo</h2>
+<p>After enabled tracing in the workshop demo, we are able to showcase the tracing capability locally with docker.</p>
+<ol>
+  <li>
+    <p>Build all docker images of services in the workshop demo with command <code class="highlighter-rouge">mvn package -DskipTests -Pdocker</code> or <code class="highlighter-rouge">mvn package -DskipTests -Pdocker -Pdocker-machine</code>
+if you are using <a href="https://www.docker.com/products/docker-toolbox">Docker Toolbox</a></p>
+  </li>
+  <li>
+    <p>Run <code class="highlighter-rouge">docker-compose up</code> under workshop demo folder</p>
+  </li>
+  <li>
+    <p>Send requests to the demo application like what we did in the video below</p>
+  </li>
+  <li>
+    <p>Open Zipkin website in a browser, which is hosted in a docker container started at step 2, eg. http://docker.container.ip:9411</p>
+  </li>
+</ol>
+
+<!-- Courtesy of embedresponsively.com //-->
+<div class="responsive-video-container">
+
+  <iframe src="https://player.youku.com/embed/XMjg1NzQ3NzUzNg" frameborder="0" allowfullscreen=""></iframe>
+
+</div>
+
+<p>Now we should be able to see Zipkin homepage with a few traced services.
+<img src="/assets/images/tracing.1.png" alt="zipkin homepage" class="align-center" /></p>
+
+<p>If we choose manager and click Find Traces button, some traces will be displayed. Please don't mind the system performance
+being not very good, since we are running so many services in docker on a laptop manufactured in 2012.
+<img src="/assets/images/tracing.2.png" alt="traces of manager service" class="align-center" /></p>
+
+<p>We are also able to see the spans of an individual trace by clicking on it.
+<img src="/assets/images/tracing.3.png" alt="trace spans of manager service" class="align-center" /></p>
+
+<p>A more detailed timing information will be displayed if we click on any span in the trace.
+<img src="/assets/images/tracing.4.png" alt="span details of manager service" class="align-center" /></p>
+
+<p>Dependency graph of services can be helpful to gain insight on request flow, if we click on the Dependencies menu.
+<img src="/assets/images/tracing.5.png" alt="service dependencies" class="align-center" /></p>
+
+<h2 id="summary">Summary</h2>
+<p>As we can see, adding distributed tracing capability to microservices using ServiceComb is as easy as following 2 simple 
+steps as shown in the instruction section above. Doing so, we leverage the powerful features provided by Zipkin, such as
+analyzing timing data to troubleshoot network latencies among our microservices and gaining insight on our service dependencies.</p>
+
+<h2 id="references">References</h2>
+<ul>
+  <li>[1] <a href="http://zipkin.io/">Zipkin</a></li>
+</ul>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+  
+
+
+  
+  
+  
+
+  <p class="page__taxonomy">
+    <strong><i class="fa fa-fw fa-tags" aria-hidden="true"></i> Tags: </strong>
+    <span itemprop="keywords">
+    
+      
+      
+      <a href="/tags/#distributed-tracing" class="page__taxonomy-item" rel="tag">distributed tracing</a><span class="sep">, </span>
+    
+      
+      
+      <a href="/tags/#zipkin" class="page__taxonomy-item" rel="tag">zipkin</a>
+    
+    </span>
+  </p>
+
+
+
+
+
+        
+          
+            
+              <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> Updated:</strong> <time datetime="2017-07-17">July 17, 2017</time></p>
+            
+          
+        
+      </footer>
+
+      <section class="page__share">
+  
+    <h4 class="page__share-title">Share on</h4>
+  
+
+  <a href="https://twitter.com/intent/tweet?via=ServiceComb&text=Distributed Tracing with ServiceComb and Zipkin /docs/tracing-with-servicecomb/" class="btn btn--twitter" title="Share on Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
+
+  <a href="https://www.facebook.com/sharer/sharer.php?u=/docs/tracing-with-servicecomb/" class="btn btn--facebook" title="Share on Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
+
+  <a href="https://plus.google.com/share?url=/docs/tracing-with-servicecomb/" class="btn btn--google-plus" title="Share on Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
+
+  <a href="https://www.linkedin.com/shareArticle?mini=true&url=/docs/tracing-with-servicecomb/" class="btn btn--linkedin" title="Share on LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
+</section>
+
+
+      
+  <nav class="pagination">
+    
+      <a href="/cn/docs/go-to-cloud/" class="pagination--pager" title="单体应用利用ServiceComb实现微服务化和云化之路
+">Previous</a>
+    
+    
+      <a href="/cn/docs/tracing-with-servicecomb/" class="pagination--pager" title="基于 ServiceComb 和 Zipkin 的分布式调用链追踪
+">Next</a>
+    
+  </nav>
+
+
+    </div>
+
+    
+      <div class="page__comments">
+  
+  
+    <section id="static-comments">
+      
+        <!-- Start static comments -->
+        <div class="js-comments">
+          
+        </div>
+        <!-- End static comments -->
+
+        <!-- Start new comment form -->
+        <h4 class="page__comments-title">Leave a Comment</h4>
+        <p class="small">Your email address will not be published. Required fields are marked <span class="required">*</span></p>
+        <form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/ServiceComb/servicesomb.github.io/master">
+          <div class="form__spinner">
+            <i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
+            <span class="sr-only">Loading...</span>
+          </div>
+
+          <fieldset>
+            <label for="comment-form-message">Comment <small class="required">*</small></label>
+            <textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
+            <div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">Markdown is supported.</a></div>
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-name">Name <small class="required">*</small></label>
+            <input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-email">Email address <small class="required">*</small></label>
+            <input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-url">Website (optional)</label>
+            <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
+          </fieldset>
+          <fieldset class="hidden" style="display: none;">
+            <input type="hidden" name="options[slug]" value="tracing-with-servicecomb">
+            <label for="comment-form-location">Not used. Leave blank if you are a human.</label>
+            <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
+          </fieldset>
+          <!-- Start comment form alert messaging -->
+          <p class="hidden js-notice">
+            <strong class="js-notice-text"></strong>
+          </p>
+          <!-- End comment form alert messaging -->
+          <fieldset>
+            <button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--large">Submit Comment</button>
+          </fieldset>
+        </form>
+        <!-- End new comment form -->
+      
+    </section>
+  
+</div>
+
+    
+  </article>
+
+  
+  
+    <div class="page__related">
+      <h4 class="page__related-title">You May Also Enjoy</h4>
+      <div class="grid__wrapper">
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/jira_beginner_guide/" rel="permalink">老司机带你刷任务 - ServiceComb JIRA入门指南
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">ServiceComb JIRA入门指南
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  less than 1 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/how-to-reform-a-legacy-system/" rel="permalink">最头疼的遗留系统该如何改造?
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  1 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+      </div>
+    </div>
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _posts/2017-07-17-tracing-with-servicecomb.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_posts/2017-07-17-tracing-with-servicecomb.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  
+  <script>
+    (function ($) {
+    var $comments = $('.js-comments');
+
+    $('#new_comment').submit(function () {
+      var form = this;
+
+      $(form).addClass('disabled');
+      $('#comment-form-submit').html('<i class="fa fa-spinner fa-spin fa-fw"></i> Loading...');
+
+      $.ajax({
+        type: $(this).attr('method'),
+        url: $(this).attr('action'),
+        data: $(this).serialize(),
+        contentType: 'application/x-www-form-urlencoded',
+        success: function (data) {
+          $('#comment-form-submit').html('Submitted');
+          $('.page__comments-form .js-notice').removeClass('notice--danger');
+          $('.page__comments-form .js-notice').addClass('notice--success');
+          showAlert('Thanks for your comment! It will show on the site once it has been approved.');
+        },
+        error: function (err) {
+          console.log(err);
+          $('#comment-form-submit').html('Submit Comment');
+          $('.page__comments-form .js-notice').removeClass('notice--success');
+          $('.page__comments-form .js-notice').addClass('notice--danger');
+          showAlert('Sorry, there was an error with your submission. Please make sure all required fields have been completed and try again.');
+          $(form).removeClass('disabled');
+        }
+      });
+
+      return false;
+    });
+
+    function showAlert(message) {
+      $('.page__comments-form .js-notice').removeClass('hidden');
+      $('.page__comments-form .js-notice-text').html(message);
+    }
+  })(jQuery);
+  </script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/faqs/faqs-huawei-cloud/index.html
----------------------------------------------------------------------
diff --git a/content/faqs/faqs-huawei-cloud/index.html b/content/faqs/faqs-huawei-cloud/index.html
new file mode 100644
index 0000000..76fe6f3
--- /dev/null
+++ b/content/faqs/faqs-huawei-cloud/index.html
@@ -0,0 +1,442 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>Huawei Cloud FAQ - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="Huawei Cloud FAQ">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="Huawei Cloud FAQ">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/faqs/faqs-huawei-cloud/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/faqs/faqs-huawei-cloud/">
+
+
+
+  <meta property="og:description" content="Huawei Cloud FAQ">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="Huawei Cloud FAQ">
+  <meta name="twitter:description" content="Huawei Cloud FAQ">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/faqs/faqs-huawei-cloud/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          
+          
+
+          <a href="/faqs/"><span class="nav__sub-title nav__sub-title-with-url">FAQ</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/faqs/faqs-huawei-cloud/"><span class="nav__sub-title nav__sub-title-with-url">FAQ of Huawei Cloud</span></a>
+        
+
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="Huawei Cloud FAQ">
+    <meta itemprop="description" content="Huawei Cloud FAQ">
+    
+    <meta itemprop="dateModified" content="October 29, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">Huawei Cloud FAQ
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <ol>
+  <li>
+    <p><strong>Q: When we push images to Huawei Public Cloud, what needs to be careful about the image tag?</strong></p>
+
+    <p>A:  It needs to be different with all uploaded images. As Docker does not pull image from remote every time it starts up a container. Hence, the Docker does not know whether the image updated or not. There are two solutions for this:</p>
+
+    <p>(1) Use different image tag every time you upload a image.</p>
+
+    <p>(2) Delete the image in the backend manually.</p>
+
+    <p>P.S. If you use the Huawei Cloud’s orchestration, you can avoid this by setting <em>imagePullPolicy</em> to <em>Always</em>.</p>
+  </li>
+  <li>
+    <p><strong>Q: We encountered this error when using Huawei Public Cloud: <em>WARN com.huaewi.paas.monitor.DataFactory: Upload monitor data error.</em> The configuration we use is as follows:</strong></p>
+
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">cse</span><span class="pi">:</span>
+  <span class="s">monitor</span><span class="pi">:</span>
+    <span class="s">handler</span><span class="pi">:</span>
+      <span class="s">chain</span><span class="pi">:</span>
+        <span class="s">Provider</span><span class="pi">:</span>
+          <span class="s">default</span><span class="pi">:</span> <span class="s">bizkeeper-provider</span>
+</code></pre>
+    </div>
+
+    <p>A: There are mistakes in your configuration files. <code class="highlighter-rouge">handler</code> should be the child of <code class="highlighter-rouge">cse</code> instead of <code class="highlighter-rouge">monitor</code>. The right configuration should be as follows:</p>
+
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">cse</span><span class="pi">:</span>
+  <span class="s">handler</span><span class="pi">:</span>
+    <span class="s">chain</span><span class="pi">:</span>
+      <span class="s">Provider</span><span class="pi">:</span>
+        <span class="s">default</span><span class="pi">:</span> <span class="s">bizkeeper-provider</span>
+</code></pre>
+    </div>
+  </li>
+</ol>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _faqs/huawei-cloud-faq.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_faqs/huawei-cloud-faq.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/faqs/index.html
----------------------------------------------------------------------
diff --git a/content/faqs/index.html b/content/faqs/index.html
new file mode 100644
index 0000000..7407d9a
--- /dev/null
+++ b/content/faqs/index.html
@@ -0,0 +1,469 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>FAQ - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="FAQ">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="FAQ">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/faqs/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/faqs/">
+
+
+
+  <meta property="og:description" content="FAQ">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="FAQ">
+  <meta name="twitter:description" content="FAQ">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/faqs/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          
+          
+
+          <a href="/faqs/"><span class="nav__sub-title nav__sub-title-with-url">FAQ</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/faqs/faqs-huawei-cloud/"><span class="nav__sub-title nav__sub-title-with-url">FAQ of Huawei Cloud</span></a>
+        
+
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="FAQ">
+    <meta itemprop="description" content="FAQ">
+    
+    <meta itemprop="dateModified" content="October 29, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">FAQ
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <ol>
+  <li>
+    <p><strong>Q: What need to be cautious when using Java-Chassis?</strong></p>
+
+    <p>A: There are a few restrictions when using Java-Chassis:</p>
+    <ul>
+      <li>Before version 0.3.0-SNAPSHOT, it does not support annotations like <code class="highlighter-rouge">@GetMapping</code>.</li>
+      <li>When using the same HTTP request method, e.g. GET, the method name need to be unique as it will become operation ID when swagger generates contracts.</li>
+      <li>Class and method name need to be public.</li>
+    </ul>
+  </li>
+  <li>
+    <p><strong>Q: When using the <em>spring-boot-starter-provider</em> dependency, property like <code class="highlighter-rouge">spring.main.web-environment</code> not working in <em>application.yml</em> file.</strong></p>
+
+    <p>A: When you need both the starter provider dependency and the servlet, you need to declare <code class="highlighter-rouge">spring.main.web-environment</code> in <em>application.properties</em> file or declare it in <em>application.yml</em> file and create an empty <em>application.properties</em> file.</p>
+  </li>
+  <li>
+    <p><strong>Q: What’s the dependency differences between gateway and other microservices?</strong></p>
+
+    <div class="language-xml highlighter-rouge"><pre class="highlight"><code><span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+<span class="nt">&lt;artifactId&gt;</span>spring-boot-starter-provider<span class="nt">&lt;/artifactId&gt;</span>
+</code></pre>
+    </div>
+
+    <p>A: Gateway depends on not only the <code class="highlighter-rouge">spring-boot-starter-provider</code>, but also the <code class="highlighter-rouge">spring-boot-starter-discovery</code>. This can refer to the <em>manger</em> implementation of <a href="https://github.com/ServiceComb/LinuxCon-Beijing-WorkShop">LinuxCon-Beijing-Workshop</a>.</p>
+  </li>
+  <li>
+    <p><strong>Q: Do gateway need to configure assembly like the other microservices? Is <em>/maven/gateway</em> the default path of the docker maven plugin?</strong></p>
+
+    <p>A: Yes. Docker maven plugin relies on the assembly files to generate docker image. <em>/maven</em> is the default path of docker maven plugin and <em>/gateway</em> is the path defined in the assembly file.</p>
+  </li>
+  <li>
+    <p><strong>Q: Are there any restrictions of the return type of our API? Should it be the type of ResponseEntity?</strong></p>
+
+    <p>A: No, examples can refer to <a href="https://github.com/ServiceComb/java-chassis/blob/master/integration-tests/springmvc-tests/src/test/java/io/servicecomb/demo/springmvc/tests/SpringMvcIntegrationTestBase.java#L145">the implementation of integration-test</a> in java-chassis.</p>
+  </li>
+  <li>
+    <p><strong>Q: Our API can not be accessed after microservices are up. It just returns <em>404 Not Found</em>. The codes we use is as follows:</strong></p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@RestController</span>
+<span class="nd">@RestSchema</span><span class="o">(</span><span class="n">schemaId</span> <span class="o">=</span> <span class="s">"worker"</span><span class="o">)</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">WorkerController</span> <span class="o">{</span>
+  <span class="nd">@RequestMapping</span><span class="o">(</span><span class="n">value</span><span class="o">=</span><span class="s">"/count"</span><span class="o">,</span> <span class="n">method</span><span class="o">=</span><span class="n">RequestMethod</span><span class="o">.</span><span class="na">GET</span><span class="o">)</span>
+  <span class="kd">public</span> <span class="kt">int</span> <span class="nf">getWorkerNumbers</span><span class="o">()</span> <span class="o">{</span>
+    <span class="o">...</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+    </div>
+
+    <p>A: Without specifying the base path, ServiceComb will use the classname as the base path. Hence, the path should be <code class="highlighter-rouge">/WorkerController/count</code> in the previous code. If you want to access path like <code class="highlighter-rouge">/count</code>, you need to specify base path as <code class="highlighter-rouge">/</code> as follows:</p>
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@RequestMapping</span><span class="o">(</span><span class="n">value</span> <span class="o">=</span> <span class="s">"/"</span><span class="o">)</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">WorkerController</span> <span class="o">{}</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>Q: What's the default base path if I have not declared the value of RequestMapping annotation?</strong></p>
+
+    <p>A: Supposed the class name of your controller is <em>HelloController</em>, the base path is /HelloController.</p>
+  </li>
+</ol>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _faqs/faq.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_faqs/faq.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>


[54/57] incubator-servicecomb-website git commit: updated service center version in setup environment page

Posted by ni...@apache.org.
updated service center version in setup environment page


Project: http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/commit/1b794498
Tree: http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/tree/1b794498
Diff: http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/diff/1b794498

Branch: refs/heads/asf-site
Commit: 1b7944986ababc427f5dfb33df028c9851b950bc
Parents: d467410
Author: linqingxiang <li...@163.com>
Authored: Tue Dec 12 14:47:19 2017 +0800
Committer: Willem Jiang <ji...@huawei.com>
Committed: Tue Dec 12 16:07:40 2017 +0800

----------------------------------------------------------------------
 _faqs/cn/faq.md                | 6 +++++-
 _users/cn/setup-environment.md | 8 ++++----
 _users/setup-environment.md    | 8 ++++----
 3 files changed, 13 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/1b794498/_faqs/cn/faq.md
----------------------------------------------------------------------
diff --git a/_faqs/cn/faq.md b/_faqs/cn/faq.md
index 38b28e8..fcd923f 100755
--- a/_faqs/cn/faq.md
+++ b/_faqs/cn/faq.md
@@ -521,4 +521,8 @@ redirect_from:
       System.out.println(args);
     }
   }
-  ```
\ No newline at end of file
+  ```
+  
+* **Q: 微服务运行时抛出异常:` java.lang.Error:not support def type:calss io.swagger.models.properties BaseIntegerProperty`?**
+
+   A: 可将Service Center升级至0.4.0+版本来解决,[Service Center最新版本传送门](https://github.com/ServiceComb/service-center/releases)。

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/1b794498/_users/cn/setup-environment.md
----------------------------------------------------------------------
diff --git a/_users/cn/setup-environment.md b/_users/cn/setup-environment.md
index 27930f5..589ad03 100644
--- a/_users/cn/setup-environment.md
+++ b/_users/cn/setup-environment.md
@@ -31,19 +31,19 @@ last_modified_at: 2017-09-03T10:01:43-04:00
    
    <div class="tab-content">
      <div id="windows" class="tab-pane active" markdown="1">
-   1. 下载[服务注册中心可执行文件压缩包](https://github.com/ServiceComb/service-center/releases/download/0.1.1/service-center-0.1.1-windows-amd64.zip)
+   1. 下载[服务注册中心可执行文件压缩包](https://github.com/ServiceComb/service-center/releases/download/0.5.0/service-center-0.5.0-windows-amd64.zip)
    2. 解压缩到当前文件夹
    3. 进入解压缩后的目录,然后双击运行**start**文件
      </div>
      <div id="linux" class="tab-pane fade" markdown="1">
    1. 下载服务注册中心可执行文件压缩包并解压缩
    ```bash
-   wget https://github.com/ServiceComb/service-center/releases/download/0.1.1/service-center-0.1.1-linux-amd64.tar.gz
-   tar xvf service-center-0.1.1-linux-amd64.tar.gz
+   wget https://github.com/ServiceComb/service-center/releases/download/0.5.0/service-center-0.5.0-linux-amd64.tar.gz
+   tar xvf service-center-0.5.0-linux-amd64.tar.gz
    ```
    2. 运行服务注册中心
    ```bash
-   bash service-center-0.1.1-linux-amd64/start.sh
+   bash service-center-0.5.0-linux-amd64/start.sh
    ```
     </div>
    </div>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/1b794498/_users/setup-environment.md
----------------------------------------------------------------------
diff --git a/_users/setup-environment.md b/_users/setup-environment.md
index e9f1ffd..af72ea2 100644
--- a/_users/setup-environment.md
+++ b/_users/setup-environment.md
@@ -31,19 +31,19 @@ last_modified_at: 2017-09-03T10:01:43-04:00
    
    <div class="tab-content">
      <div id="windows" class="tab-pane active" markdown="1">
-   1. 下载[服务注册中心可执行文件压缩包](https://github.com/ServiceComb/service-center/releases/download/0.1.1/service-center-0.1.1-windows-amd64.zip)
+   1. 下载[服务注册中心可执行文件压缩包](https://github.com/ServiceComb/service-center/releases/download/0.5.0/service-center-0.5.0-windows-amd64.zip)
    2. 解压缩到当前文件夹
    3. 进入解压缩后的目录,然后双击运行**start**文件
      </div>
      <div id="linux" class="tab-pane fade" markdown="1">
    1. 下载服务注册中心可执行文件压缩包并解压缩
    ```bash
-   wget https://github.com/ServiceComb/service-center/releases/download/0.1.1/service-center-0.1.1-linux-amd64.tar.gz
-   tar xvf service-center-0.1.1-linux-amd64.tar.gz
+   wget https://github.com/ServiceComb/service-center/releases/download/0.5.0/service-center-0.5.0-linux-amd64.tar.gz
+   tar xvf service-center-0.5.0-linux-amd64.tar.gz
    ```
    2. 运行服务注册中心
    ```bash
-   bash service-center-0.1.1-linux-amd64/start.sh
+   bash service-center-0.5.0-linux-amd64/start.sh
    ```
     </div>
    </div>


[33/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/docs/seckill-development-journey-part-III/index.html
----------------------------------------------------------------------
diff --git a/content/cn/docs/seckill-development-journey-part-III/index.html b/content/cn/docs/seckill-development-journey-part-III/index.html
new file mode 100644
index 0000000..875b842
--- /dev/null
+++ b/content/cn/docs/seckill-development-journey-part-III/index.html
@@ -0,0 +1,823 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>秒杀开发历程(三) - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="介绍如何一步一步构建秒杀项目的过程">
+
+
+
+
+<meta name="author" content="Yangyong Zheng">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="秒杀开发历程(三)">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/seckill-development-journey-part-III/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/seckill-development-journey-part-III/">
+
+
+
+  <meta property="og:description" content="介绍如何一步一步构建秒杀项目的过程">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="秒杀开发历程(三)">
+  <meta name="twitter:description" content="介绍如何一步一步构建秒杀项目的过程">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+    <meta name="twitter:creator" content="@">
+  
+
+
+
+  
+
+  
+
+
+
+
+
+  <meta property="og:type" content="article">
+  <meta property="article:published_time" content="2017-09-07T00:00:00+08:00">
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/docs/seckill-development-journey-part-III/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+
+<div itemscope itemtype="http://schema.org/Person">
+
+  
+
+  <div class="author__content">
+    <h3 class="author__name" itemprop="name">Yangyong Zheng</h3>
+    
+      <p class="author__bio" itemprop="description">
+	    
+	      
+	        Fast Action, do not ask
+	      
+	    
+      </p>
+    
+  </div>
+
+  <div class="author__urls-wrapper">
+    <button class="btn btn--inverse">关注</button>
+    <ul class="author__urls social-icons">
+      
+
+      
+        <li>
+          <a href="https://zhengyangyong.github.io" itemprop="url">
+            <i class="fa fa-fw fa-chain" aria-hidden="true"></i> 网站
+          </a>
+        </li>
+      
+
+      
+        <li>
+          <a href="mailto:yangyong.zheng@huawei.com">
+            <meta itemprop="email" content="yangyong.zheng@huawei.com" />
+            <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> 电子邮箱
+          </a>
+        </li>
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      <!--
+  <li>
+    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs">
+      <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link
+    </a>
+  </li>
+-->
+    </ul>
+  </div>
+</div>
+
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="秒杀开发历程(三)">
+    <meta itemprop="description" content="介绍如何一步一步构建秒杀项目的过程">
+    <meta itemprop="datePublished" content="September 07, 2017">
+    <meta itemprop="dateModified" content="September 13, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">秒杀开发历程(三)
+</h1>
+            
+              <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <p>  <a href="/cn/docs/seckill-development-journey-part-II/">上文</a> 中我们已经构建了一个完整功能的秒杀系统,版本定为0.1.0-RELEASE;您应该发现,数据的持久化集中在单一的数据库上,秒杀作为一个高并发压力的场景,这种架构很难适应可扩展的要求,并且正如我们一开始就提到的,微服务推荐拥有独立的存储,所以本篇开始我们将配合Event Sourcing实现CQRS模式,以增强应对大规模并发压力的能力。</p>
+
+<h2 id="cqrs">CQRS</h2>
+<p>  <a href="https://docs.microsoft.com/en-us/azure/architecture/patterns/cqrs">CQRS</a> 的含义是命令查询职责分离(Command Query Responsibility Segregation),是一种常用的程序设计模式,常常与Event Sourcing一起使用,关于CQRS有一张科普的图,来源于Microsoft MSDN:</p>
+
+<p><img src="/assets/images/seckill-develop-course-part-III-cqrs.png" alt="图1 CQRS" class="align-center" /></p>
+
+<h2 id="改进设计">改进设计</h2>
+<p>  <a href="https://docs.microsoft.com/en-us/azure/architecture/patterns/cqrs">CQRS</a>是读写分离以及消息驱动的最佳实践,现在我们把目光聚焦在原来的MySQL数据库上:</p>
+<ol>
+  <li>数据库应该被拆分为ReadDB和WriteDB,分别承载读密集的Query微服务和写密集的Command微服务;</li>
+  <li>ReadDB和WriteDB之间采用Event Message驱动方式完成数据同步,因此我们还需要引进一个新的微服务,我们将它命名为Event(Processor)微服务;</li>
+  <li>Message Broker目前有很多非常棒的方案,例如RabbitMQ、Kafka等,由于我们的秒杀系统基于ServiceComb和Spring Boot,为了能够快速构建这个新特性,我们选用内置的ActiveMQ,它支持内存队列模式,非常容易构建测试,符合我们敏捷开发的方式。<br />
+ 改进完成后的架构如下图:</li>
+</ol>
+
+<p><img src="/assets/images/seckill-develop-course-part-III-arch.png" alt="图2 改进架构" class="align-center" /></p>
+
+<h2 id="功能实现">功能实现</h2>
+<h3 id="数据库拆分">数据库拆分</h3>
+<h4 id="writedb">WriteDB</h4>
+<p>  Admin微服务维护Promotion实体;<br />
+  Command微服务写入Event值对象,当恢复Promotion的时候,Relapy Event。</p>
+<h4 id="readdb">ReadDB</h4>
+<p>  Event微服务写入ActivePromotion值对象和Coupon值对象;<br />
+  Query微服务查询ActivePromotion值对象和Coupon值对象。</p>
+
+<h3 id="command微服务message-publisher组件">Command微服务Message Publisher组件</h3>
+<p>  之前的版本由于没有引入Event Sourcing,Event实体只需要直接写入数据库即可,现在需要将Event发布给Message Broker,为了支持云服务(<a href="http://www.hwclouds.com/">华为云</a>)提供的分布式消息服务,我们定义了通用消息发布接口:</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">interface</span> <span class="nc">SecKillMessagePublisher</span> <span class="o">{</span>
+  <span class="kt">void</span> <span class="nf">publishMessage</span><span class="o">(</span><span class="n">String</span> <span class="n">messageContent</span><span class="o">);</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<h3 id="event微服务的实现">Event微服务的实现</h3>
+<p>  Event微服务订阅Message Broker获取Event Message,然后根据不同的Event类型,转化为对ReadDB中的值对象操作或Coupon值对象操作:</p>
+<ul>
+  <li>Promotion Start Message:创建ActivePromotion值对象;</li>
+  <li>Promotion Finish Message:删除对应PromotionId的ActivePromotion值对象;</li>
+  <li>Coupon Grabbed Message:创建Coupon值对象;</li>
+</ul>
+
+<p>  同样,为了支持云服务(<a href="http://www.hwclouds.com/">华为云</a>)提供的分布式消息服务,我们定义了通用消息订阅接口:</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">interface</span> <span class="nc">SecKillMessageSubscriber</span> <span class="o">{</span>
+  <span class="kt">void</span> <span class="nf">subscribeMessage</span><span class="o">(</span><span class="n">String</span> <span class="n">messageContent</span><span class="o">);</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<h3 id="query微服务的重构">Query微服务的重构</h3>
+<p>  经过了读写分离的改造,现在所有活跃的Promotion都保存在ActivePromotion值对象表中,而客户成功秒杀的Coupon都保存在Coupon值对象表中,因此直接查询即可,不再需要Replay Event。</p>
+
+<h2 id="一键启动">一键启动</h2>
+<p>  现在,我们完成了完整的Event Sourcing架构改造,为了能够方便启动,我们提供了编排好的脚本,使用Docker Compose将所有服务一条指令全部拉起来,具体的操作请参见<a href="https://github.com/ServiceComb/seckill">SecKill</a>。</p>
+
+<h3 id="在docker-toolbox中启动的seckill">在Docker ToolBox中启动的SecKill</h3>
+
+<p><img src="/assets/images/seckill-develop-course-part-III-seckill-all-in-one.png" alt="图3 SecKill All-in-One" class="align-center" /></p>
+
+<h2 id="参考资料">参考资料</h2>
+<ol>
+  <li><a href="https://docs.microsoft.com/en-us/azure/architecture/patterns/cqrs">Command and Query Responsibility Segregation (CQRS) pattern</a> by Microsoft Azure Team</li>
+  <li><a href="https://msdn.microsoft.com/en-us/library/jj591559.aspx">Introducing Event Sourcing</a> by Microsoft patterns &amp; practices Developer Center</li>
+  <li><a href="https://martinfowler.com/eaaDev/EventSourcing.html">Event Sourcing</a> by Martin Fowler</li>
+</ol>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+  
+
+
+  
+  
+  
+
+  <p class="page__taxonomy">
+    <strong><i class="fa fa-fw fa-tags" aria-hidden="true"></i> 标签: </strong>
+    <span itemprop="keywords">
+    
+      
+      
+      <a href="/tags/#%E7%A7%92%E6%9D%80" class="page__taxonomy-item" rel="tag">秒杀</a>
+    
+    </span>
+  </p>
+
+
+
+
+
+        
+          
+            
+              <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> 最新的:</strong> <time datetime="2017-09-13">2017年9月13日</time></p>
+            
+          
+        
+      </footer>
+
+      <section class="page__share">
+  
+    <h4 class="page__share-title">分享</h4>
+  
+
+  <a href="https://twitter.com/intent/tweet?via=ServiceComb&text=秒杀开发历程(三) /cn/docs/seckill-development-journey-part-III/" class="btn btn--twitter" title="分享 Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
+
+  <a href="https://www.facebook.com/sharer/sharer.php?u=/cn/docs/seckill-development-journey-part-III/" class="btn btn--facebook" title="分享 Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
+
+  <a href="https://plus.google.com/share?url=/cn/docs/seckill-development-journey-part-III/" class="btn btn--google-plus" title="分享 Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
+
+  <a href="https://www.linkedin.com/shareArticle?mini=true&url=/cn/docs/seckill-development-journey-part-III/" class="btn btn--linkedin" title="分享 LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
+</section>
+
+
+      
+  <nav class="pagination">
+    
+      <a href="/docs/seckill-development-journey-part-III/" class="pagination--pager" title="SecKill Develop Journey (III)
+">向前</a>
+    
+    
+      <a href="/docs/distributed_saga_1/" class="pagination--pager" title="Eventual Data Consistency Solution in ServiceComb - part 1
+">向后</a>
+    
+  </nav>
+
+
+    </div>
+
+    
+      <div class="page__comments">
+  
+  
+    <section id="static-comments">
+      
+        <!-- Start static comments -->
+        <div class="js-comments">
+          
+        </div>
+        <!-- End static comments -->
+
+        <!-- Start new comment form -->
+        <h4 class="page__comments-title">留下评论</h4>
+        <p class="small">您的电子邮箱地址并不会被展示。请填写标记为必须的字段。 <span class="required">*</span></p>
+        <form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/ServiceComb/servicesomb.github.io/master">
+          <div class="form__spinner">
+            <i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
+            <span class="sr-only">正在加载...</span>
+          </div>
+
+          <fieldset>
+            <label for="comment-form-message">评论 <small class="required">*</small></label>
+            <textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
+            <div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">Markdown语法已支持。</a></div>
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-name">姓名 <small class="required">*</small></label>
+            <input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-email">电子邮箱 <small class="required">*</small></label>
+            <input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-url">网站(可选)</label>
+            <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
+          </fieldset>
+          <fieldset class="hidden" style="display: none;">
+            <input type="hidden" name="options[slug]" value="seckill-develop-course-part-III">
+            <label for="comment-form-location">Not used. Leave blank if you are a human.</label>
+            <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
+          </fieldset>
+          <!-- Start comment form alert messaging -->
+          <p class="hidden js-notice">
+            <strong class="js-notice-text"></strong>
+          </p>
+          <!-- End comment form alert messaging -->
+          <fieldset>
+            <button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--large">提交评论</button>
+          </fieldset>
+        </form>
+        <!-- End new comment form -->
+      
+    </section>
+  
+</div>
+
+    
+  </article>
+
+  
+  
+    <div class="page__related">
+      <h4 class="page__related-title">猜您还喜欢</h4>
+      <div class="grid__wrapper">
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/jira_beginner_guide/" rel="permalink">老司机带你刷任务 - ServiceComb JIRA入门指南
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">ServiceComb JIRA入门指南
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/how-to-reform-a-legacy-system/" rel="permalink">最头疼的遗留系统该如何改造?
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+      </div>
+    </div>
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _posts/cn/2017-09-07-seckill-develop-course-part-III.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_posts/cn/2017-09-07-seckill-develop-course-part-III.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  
+  <script>
+    (function ($) {
+    var $comments = $('.js-comments');
+
+    $('#new_comment').submit(function () {
+      var form = this;
+
+      $(form).addClass('disabled');
+      $('#comment-form-submit').html('<i class="fa fa-spinner fa-spin fa-fw"></i> 正在加载...');
+
+      $.ajax({
+        type: $(this).attr('method'),
+        url: $(this).attr('action'),
+        data: $(this).serialize(),
+        contentType: 'application/x-www-form-urlencoded',
+        success: function (data) {
+          $('#comment-form-submit').html('已提交');
+          $('.page__comments-form .js-notice').removeClass('notice--danger');
+          $('.page__comments-form .js-notice').addClass('notice--success');
+          showAlert('感谢您的评论!被批准后它会立即在此站点展示。');
+        },
+        error: function (err) {
+          console.log(err);
+          $('#comment-form-submit').html('提交评论');
+          $('.page__comments-form .js-notice').removeClass('notice--success');
+          $('.page__comments-form .js-notice').addClass('notice--danger');
+          showAlert('很抱歉,您的提交存在错误。请确保所有必填字段都已填写正确,然后再试一次。');
+          $(form).removeClass('disabled');
+        }
+      });
+
+      return false;
+    });
+
+    function showAlert(message) {
+      $('.page__comments-form .js-notice').removeClass('hidden');
+      $('.page__comments-form .js-notice-text').html(message);
+    }
+  })(jQuery);
+  </script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/docs/stress-test-on-company-with-jmeter-in-k8s/index.html
----------------------------------------------------------------------
diff --git a/content/cn/docs/stress-test-on-company-with-jmeter-in-k8s/index.html b/content/cn/docs/stress-test-on-company-with-jmeter-in-k8s/index.html
new file mode 100644
index 0000000..9f07c82
--- /dev/null
+++ b/content/cn/docs/stress-test-on-company-with-jmeter-in-k8s/index.html
@@ -0,0 +1,921 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>在Kubernetes集群中使用JMeter对Company示例进行压力测试 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="介绍如何在Kubernetes集群上使用JMeter进行压力测试">
+
+
+
+
+<meta name="author" content="Eric Lee">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="在Kubernetes集群中使用JMeter对Company示例进行压力测试">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/stress-test-on-company-with-jmeter-in-k8s/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/stress-test-on-company-with-jmeter-in-k8s/">
+
+
+
+  <meta property="og:description" content="介绍如何在Kubernetes集群上使用JMeter进行压力测试">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="在Kubernetes集群中使用JMeter对Company示例进行压力测试">
+  <meta name="twitter:description" content="介绍如何在Kubernetes集群上使用JMeter进行压力测试">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+    <meta name="twitter:creator" content="@">
+  
+
+
+
+  
+
+  
+
+
+
+
+
+  <meta property="og:type" content="article">
+  <meta property="article:published_time" content="2017-08-25T00:00:00+08:00">
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/docs/stress-test-on-company-with-jmeter-in-k8s/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+
+<div itemscope itemtype="http://schema.org/Person">
+
+  
+
+  <div class="author__content">
+    <h3 class="author__name" itemprop="name">Eric Lee</h3>
+    
+      <p class="author__bio" itemprop="description">
+	    
+	      
+	        Winter is coming, arm ourself with code
+	      
+	    
+      </p>
+    
+  </div>
+
+  <div class="author__urls-wrapper">
+    <button class="btn btn--inverse">关注</button>
+    <ul class="author__urls social-icons">
+      
+
+      
+        <li>
+          <a href="https://eric-lee-ltk.github.io" itemprop="url">
+            <i class="fa fa-fw fa-chain" aria-hidden="true"></i> 网站
+          </a>
+        </li>
+      
+
+      
+        <li>
+          <a href="mailto:eric.lee.ltk@gmail.com">
+            <meta itemprop="email" content="eric.lee.ltk@gmail.com" />
+            <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> 电子邮箱
+          </a>
+        </li>
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      <!--
+  <li>
+    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs">
+      <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link
+    </a>
+  </li>
+-->
+    </ul>
+  </div>
+</div>
+
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="在Kubernetes集群中使用JMeter对Company示例进行压力测试">
+    <meta itemprop="description" content="介绍如何在Kubernetes集群上使用JMeter进行压力测试">
+    <meta itemprop="datePublished" content="August 25, 2017">
+    <meta itemprop="dateModified" content="August 26, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">在Kubernetes集群中使用JMeter对Company示例进行压力测试
+</h1>
+            
+              <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <h2 id="背景">背景</h2>
+
+<p>  压力测试是评估应用性能的一种有效手段。此外,越来越多的应用被拆分为多个微服务而每个微服务的性能不一,有的微服务是计算密集型,有的是IO密集型。</p>
+
+<p>  因此,压力测试在基于微服务架构的网络应用中扮演着越来越重要的角色。本文将在<a href="https://kubernetes.io/">Kubernetes</a>集群中使用<a href="https://www.google.com.hk/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=1&amp;ved=0ahUKEwiv9rjg7u_VAhUkxoMKHfoYDaYQFggvMAA&amp;url=http%3A%2F%2Fjmeter.apache.org%2F&amp;usg=AFQjCNHIHCOA-F9LnhaAn_STCWyPPgOpdw">JMeter 3.2</a>来对<a href="https://github.com/ServiceComb/ServiceComb-Company-WorkShop">Company应用</a>进行性能评估。</p>
+
+<p>  在上文<a href="http://servicecomb.io/cn/docs/autoscale-on-company/">《微服务化后的按需精细化资源控制》</a>中已了解到Manager服务的资源需求最大,本次使用JMeter对Company应用进行精细的性能测试。</p>
+
+<h2 id="制定jmeter测试方案">制定JMeter测试方案</h2>
+<p>  制定的测试方案为:</p>
+
+<ul>
+  <li>
+    <p>由于登录认证会造成较大时延,故在压力测试主体运行前完成用户认证事宜;</p>
+  </li>
+  <li>
+    <p>对Company应用多个接口持续并发访问,QueryWorker, QueryBeekeeperDrone, QueryBeekeeperQueen分别对Company中的服务发起请求压力。</p>
+  </li>
+</ul>
+
+<p>  测试方案文件笔者已托管于github上,可直接获取:</p>
+
+<div class="language-bash highlighter-rouge"><pre class="highlight"><code>git clone https://github.com/ServiceComb/ServiceComb-Company-WorkShop
+<span class="nb">cd </span>ServiceComb-Company-WorkShop/stress-tests
+</code></pre>
+</div>
+
+<p class="figure-caption"><img src="/assets/images/company_test_plan.png" alt="图1 测试计划" /><br />
+图1 测试计划</p>
+
+<p>  在我们测试计划的开始,我们设置了一些在所有线程组都能共享的全局配置。其中,<em>CSV Data Set Config</em>组件从本地csv文件中加载测试服务器的信息。<em>HTTP Request Defaults</em>组件则为每个请求预设了默认的请求服务器信息,如IP和端口。<em>User Defined Variables</em>组件定义了全局共享的变量。<em>HTTP Header Manager</em>组件自动为每个请求添加HTTP的请求头部。</p>
+
+<p>  接着就是<em>setUp</em>线程组了。其作用主要是处理用户认证。由于Cookie在网络应用中得到较广泛的应用,因此JMeter中内置的认证方式是通过<em>HTTP Cookie Manager</em>组件来完成的。然而,我们的Company示例采用的是基于Token的认证方式而不是基于Cookie的认证方式。因此,这给我们在JMeter中处理认证添加了一点难度。<em>Remove header pre processor</em>组件使用了以下的脚本来去掉登录时请求中带有默认的请求头部,即登录请求时并不需要带有鉴权的请求头部。</p>
+<div class="language-shell highlighter-rouge"><pre class="highlight"><code>import org.apache.jmeter.protocol.http.control.Header;
+sampler.getHeaderManager<span class="o">()</span>.removeHeaderNamed<span class="o">(</span><span class="s2">"Authorization"</span><span class="o">)</span>;
+</code></pre>
+</div>
+<p>  然后我们通过<em>Set up Login</em>组件发起一次登录请求来获取用户登录鉴权信息。之后再通过正则表达式提取组件<em>authorization_extractor</em>来提取响应头部中的<em>Authorization</em>对应的值。由于变量无法在不同的线程组中共享和传递,这时候<em>BeanShell PostProcessor</em>组件就派上用场了,它主要工作就是将当前线程组中的目标变量转换为全局属性。</p>
+<div class="language-shell highlighter-rouge"><pre class="highlight"><code><span class="k">${</span><span class="nv">__setProperty</span><span class="p">(Authorization,</span><span class="k">${</span><span class="nv">Authorization</span><span class="k">}</span><span class="p">,)</span><span class="k">}</span>
+</code></pre>
+</div>
+<p>  在测试计划的最后部分就是我们要在Company示例上进行的压力测试。测试所选取的三个接口都是通过经理服务路由至其他两个服务的,即技工服务和养蜂人服务。在我们测试开始之前,我们通过打开<em>StressTest</em>的开关来禁用经理服务提供的缓存能力,从而使得技工服务和养蜂人服务能够处理到用户请求的计算任务。此外,我们通过将请求参数设置为1来简化技工服务和养蜂人服务的计算任务。</p>
+
+<h2 id="启动测试">启动测试</h2>
+
+<ul>
+  <li>
+    <p>在Kubernetes集群中以无资源限制的方式来运行<em>Company应用</em>。</p>
+  </li>
+  <li>
+    <p>修改hosts.csv文件,使其匹配正在Kubernetes集群中运行的Company应用的服务地址。其中,默认的hosts.csv文件内容为:</p>
+
+    <pre><code class="language-csv"> 127.0.0.1,8083
+</code></pre>
+  </li>
+  <li>
+    <p>运行测试,启动200个并发线程发起请求压力,并设置测试时常为600秒。</p>
+
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code> jmeter -n -t workshop.jmx -j workshop.log -l workshop.jtl -Jthreads<span class="o">=</span>200 -Jduration<span class="o">=</span>600
+</code></pre>
+    </div>
+  </li>
+</ul>
+
+<h2 id="测试结果">测试结果</h2>
+<p>  在不同并发度下的测试结果如下图所示:</p>
+
+<p class="figure-caption"><img src="/assets/images/company_concurrency_performance.png" alt="图2 并发不同时的性能比较" class="align-center" />
+图2 并发不同时的性能比较</p>
+
+<p>  可以看出,经理服务的性能在到达瓶颈(15并发度)前非常稳定,保持平均响应时间极低的情况下吞吐量快速上升到<strong>最大约1000请求每秒</strong>的水平。 但随着并发度的进一步提升,平均响应时间开始快速增加。因此,<strong>将响应时间统计数据作为评估熔断超时的设置非常合适</strong>。</p>
+
+<p class="figure-caption"><img src="/assets/images/company_response_time.png" alt="图3 不同服务的平均响应时间" class="align-center" />
+图3 不同服务的平均响应时间</p>
+
+<p>  上图显示了不同服务的平均响应时间。由于养蜂人服务需要调用技工服务,因此其响应时间相对于技工服务的响应时间要稍微久一点。</p>
+
+<p class="figure-caption"><img src="/assets/images/company_cpu_load.png" alt="图4 不同并发度下CPU的负载" class="align-center" />
+图4 不同并发度下CPU的负载</p>
+
+<p>  为了找出性能卡在了15并发度时的原因,我们回看了<a href="https://github.com/kubernetes/heapster">Heapster</a>上的监控数据。如下图所示,显然,<strong>经理服务是当前系统的瓶颈所在</strong>。它在吞吐量为1000 req/s时达到了最大的CPU负载。 相对而言,其它服务对资源的需求的增长速度要慢得多。</p>
+
+<p>  由于经理服务的日志是直接输出到stdout上的,且JMeter的测试端以单机模式运行时可能并不能同时模拟出足够的并发量。依此对在同一并发度(200)下不同log的设置(log4j1 stdout, log4j2 stdout,log4j2 异步,无日志输出)进行测试。其中,异步log在<em>log4j2.xml</em>文件中的设置如下所示:</p>
+
+<div class="language-xml highlighter-rouge"><pre class="highlight"><code><span class="cp">&lt;?xml version="1.0" encoding="UTF-8" ?&gt;</span>
+<span class="nt">&lt;Configuration</span> <span class="na">status=</span><span class="s">"INFO"</span><span class="nt">&gt;</span>
+  <span class="nt">&lt;Appenders&gt;</span>
+    <span class="nt">&lt;RandomAccessFile</span> <span class="na">name=</span><span class="s">"RandomAccessFile"</span> <span class="na">fileName=</span><span class="s">"manager.log"</span> <span class="na">immediateFlush=</span><span class="s">"false"</span> <span class="na">append=</span><span class="s">"false"</span><span class="nt">&gt;</span>
+      <span class="nt">&lt;PatternLayout</span> <span class="na">pattern=</span><span class="s">"%d [%p] %m %l%n"</span><span class="nt">/&gt;</span>
+    <span class="nt">&lt;/RandomAccessFile&gt;</span>
+  <span class="nt">&lt;/Appenders&gt;</span>
+  <span class="nt">&lt;Loggers&gt;</span>
+    <span class="nt">&lt;asyncRoot</span> <span class="na">level=</span><span class="s">"info"</span><span class="nt">&gt;</span>
+      <span class="nt">&lt;AppenderRef</span> <span class="na">ref=</span><span class="s">"RandomAccessFile"</span><span class="nt">/&gt;</span>
+    <span class="nt">&lt;/asyncRoot&gt;</span>
+  <span class="nt">&lt;/Loggers&gt;</span>
+<span class="nt">&lt;/Configuration&gt;</span>
+</code></pre>
+</div>
+<p>此外,还需要添加如下<em>disruptor</em>的依赖项使异步的设置生效:</p>
+
+<div class="language-xml highlighter-rouge"><pre class="highlight"><code><span class="nt">&lt;dependency&gt;</span>
+  <span class="nt">&lt;groupId&gt;</span>com.lmax<span class="nt">&lt;/groupId&gt;</span>
+  <span class="nt">&lt;artifactId&gt;</span>disruptor<span class="nt">&lt;/artifactId&gt;</span>
+  <span class="nt">&lt;version&gt;</span>3.3.6<span class="nt">&lt;/version&gt;</span>
+<span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+</div>
+<p>没有日志输出的设置仅仅是将上述<em>log4j2.xml</em>文件中的日志输出级别从<em>info</em>改为<em>off</em>即可。此外,我们还使用JMeter分布式的模式进行了相关的测试。JMeter中使用分布式的模式来运行主要分两步:</p>
+
+<ol>
+  <li>
+    <p>在每个测试从节点上运行<em>jmeter-server</em>,其运行指令如下:</p>
+
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code>jmeter-server -Djava.rmi.server.hostname<span class="o">=</span><span class="k">$(</span>ifconfig eth0 | grep <span class="s2">"inet addr"</span> | awk <span class="s1">'{print $2}'</span> | cut -d <span class="s2">":"</span> -f2<span class="k">)</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p>在测试主节点上运行<em>jmeter</em>,指令如下:</p>
+
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code>jmeter -n -R host1,host2 -t workshop.jmx -j workshop.log -l workshop.jtl -Gmin<span class="o">=</span>1 -Gmax<span class="o">=</span>2 -Gthreads<span class="o">=</span>200 -Gduration<span class="o">=</span>600
+</code></pre>
+    </div>
+
+    <p class="notice--warning"><em>注意事项</em>:JMeter属性在分布式模式下并不能生效,需要将其声明为全局的属性。因此,此处我们用的是<em>-G</em>的选项而不是之前的<em>-J</em>的选项。</p>
+  </li>
+</ol>
+
+<p>运行结果如下所示:</p>
+
+<p><img src="/assets/images/company_log_and_jmeter.png" alt="不同日志设置不同模式下的性能" class="align-center" /></p>
+
+<p>  从上图可以看出:</p>
+
+<ul>
+  <li>
+    <p>JMeter单机测试和分布式测试的性能都非常接近,说明单机模式的JMeter测试暂时来说是足以模拟出足够的并发数来处理当前的测试场景的。</p>
+  </li>
+  <li>
+    <p>日志的输出的确对系统的性能造成了较大的影响,可以看到,异步输出日志的方式能比同步输出的方式提升接近100%的吞吐量。因此,<strong>在生产环境下使用完全同步输出日志的方式可能并不会有较理想的性能。</strong></p>
+  </li>
+  <li>
+    <p>log4j2的吞吐量相对于log4j1而言大幅提高了约40%,内存使用量也更少了。因此,<strong>推荐使用性能更佳的log4j2替换掉陈旧的log4j1</strong>。</p>
+  </li>
+</ul>
+
+<p class="figure-caption"><img src="/assets/images/company_different_log_memory_usage.png" alt="图5 不同日志设置下的内存使用量" class="align-center" />
+图5 不同日志设置下的内存使用量</p>
+
+<p>  尽管异步日志的方式能极大地提高系统的吞吐量,但它同时也占用了较多的内存,如图5所示。</p>
+
+<p class="figure-caption"><img src="/assets/images/company_memory_used.png" alt="图6 测试过程的内存使用量" class="align-center" />
+图6 测试过程的内存使用量</p>
+
+<p>  图6显示了在测试过程中不同服务的内存使用量。由于Company示例只是一个简单的用例,在测试过程中各个服务的内存使用率都相对稳定。然而,相对<em>告示栏</em>服务(使用go语言编写)的内存使用量而言,其它以Java来编写的服务则占用了较多的内存。</p>
+
+<h2 id="总结">总结</h2>
+
+<p>  对应用进行压力测试往往能在应用投入生产环境前帮助我们找出服务中潜在的问题。压力测试也能模拟生产环境,从而来验证服务是否已达到规定的性能指标。而根据压力测试的结果,我们可以权衡Pod部署时的设置来保证SLA的同时获得最大的系统吞吐能力。</p>
+
+<p>  基于微服务架构的应用不仅在设计、编码及测试方面变得更加灵活,同时也使得部署更加方便。基于微服务架构能够保证资源的弹性伸缩极其迅捷,我们可以根据服务的真实可承受压力设置不同的副本数和资源配置来节约资源。此外,在云上也能借助其弹性伸缩能力使得服务能够应对访问风暴。</p>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+  
+
+
+  
+  
+  
+
+  <p class="page__taxonomy">
+    <strong><i class="fa fa-fw fa-tags" aria-hidden="true"></i> 标签: </strong>
+    <span itemprop="keywords">
+    
+      
+      
+      <a href="/tags/#jmeter" class="page__taxonomy-item" rel="tag">jmeter</a><span class="sep">, </span>
+    
+      
+      
+      <a href="/tags/#%E5%8E%8B%E5%8A%9B%E6%B5%8B%E8%AF%95" class="page__taxonomy-item" rel="tag">压力测试</a>
+    
+    </span>
+  </p>
+
+
+
+
+
+        
+          
+            
+              <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> 最新的:</strong> <time datetime="2017-08-26">2017年8月26日</time></p>
+            
+          
+        
+      </footer>
+
+      <section class="page__share">
+  
+    <h4 class="page__share-title">分享</h4>
+  
+
+  <a href="https://twitter.com/intent/tweet?via=ServiceComb&text=在Kubernetes集群中使用JMeter对Company示例进行压力测试 /cn/docs/stress-test-on-company-with-jmeter-in-k8s/" class="btn btn--twitter" title="分享 Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
+
+  <a href="https://www.facebook.com/sharer/sharer.php?u=/cn/docs/stress-test-on-company-with-jmeter-in-k8s/" class="btn btn--facebook" title="分享 Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
+
+  <a href="https://plus.google.com/share?url=/cn/docs/stress-test-on-company-with-jmeter-in-k8s/" class="btn btn--google-plus" title="分享 Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
+
+  <a href="https://www.linkedin.com/shareArticle?mini=true&url=/cn/docs/stress-test-on-company-with-jmeter-in-k8s/" class="btn btn--linkedin" title="分享 LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
+</section>
+
+
+      
+  <nav class="pagination">
+    
+      <a href="/docs/stress-test-on-company-with-jmeter-in-k8s/" class="pagination--pager" title="Stress test on Company Demo with Jmeter in Kubernetes Cluster
+">向前</a>
+    
+    
+      <a href="/docs/seckill-development-journey-part-I/" class="pagination--pager" title="SecKill Development Journey (I)
+">向后</a>
+    
+  </nav>
+
+
+    </div>
+
+    
+      <div class="page__comments">
+  
+  
+    <section id="static-comments">
+      
+        <!-- Start static comments -->
+        <div class="js-comments">
+          
+        </div>
+        <!-- End static comments -->
+
+        <!-- Start new comment form -->
+        <h4 class="page__comments-title">留下评论</h4>
+        <p class="small">您的电子邮箱地址并不会被展示。请填写标记为必须的字段。 <span class="required">*</span></p>
+        <form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/ServiceComb/servicesomb.github.io/master">
+          <div class="form__spinner">
+            <i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
+            <span class="sr-only">正在加载...</span>
+          </div>
+
+          <fieldset>
+            <label for="comment-form-message">评论 <small class="required">*</small></label>
+            <textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
+            <div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">Markdown语法已支持。</a></div>
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-name">姓名 <small class="required">*</small></label>
+            <input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-email">电子邮箱 <small class="required">*</small></label>
+            <input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-url">网站(可选)</label>
+            <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
+          </fieldset>
+          <fieldset class="hidden" style="display: none;">
+            <input type="hidden" name="options[slug]" value="stress-test-on-company-with-jmeter-in-k8s">
+            <label for="comment-form-location">Not used. Leave blank if you are a human.</label>
+            <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
+          </fieldset>
+          <!-- Start comment form alert messaging -->
+          <p class="hidden js-notice">
+            <strong class="js-notice-text"></strong>
+          </p>
+          <!-- End comment form alert messaging -->
+          <fieldset>
+            <button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--large">提交评论</button>
+          </fieldset>
+        </form>
+        <!-- End new comment form -->
+      
+    </section>
+  
+</div>
+
+    
+  </article>
+
+  
+  
+    <div class="page__related">
+      <h4 class="page__related-title">猜您还喜欢</h4>
+      <div class="grid__wrapper">
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/jira_beginner_guide/" rel="permalink">老司机带你刷任务 - ServiceComb JIRA入门指南
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">ServiceComb JIRA入门指南
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/how-to-reform-a-legacy-system/" rel="permalink">最头疼的遗留系统该如何改造?
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+      </div>
+    </div>
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _posts/cn/2017-08-25-stress-test-on-company-with-jmeter-in-k8s.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_posts/cn/2017-08-25-stress-test-on-company-with-jmeter-in-k8s.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  
+  <script>
+    (function ($) {
+    var $comments = $('.js-comments');
+
+    $('#new_comment').submit(function () {
+      var form = this;
+
+      $(form).addClass('disabled');
+      $('#comment-form-submit').html('<i class="fa fa-spinner fa-spin fa-fw"></i> 正在加载...');
+
+      $.ajax({
+        type: $(this).attr('method'),
+        url: $(this).attr('action'),
+        data: $(this).serialize(),
+        contentType: 'application/x-www-form-urlencoded',
+        success: function (data) {
+          $('#comment-form-submit').html('已提交');
+          $('.page__comments-form .js-notice').removeClass('notice--danger');
+          $('.page__comments-form .js-notice').addClass('notice--success');
+          showAlert('感谢您的评论!被批准后它会立即在此站点展示。');
+        },
+        error: function (err) {
+          console.log(err);
+          $('#comment-form-submit').html('提交评论');
+          $('.page__comments-form .js-notice').removeClass('notice--success');
+          $('.page__comments-form .js-notice').addClass('notice--danger');
+          showAlert('很抱歉,您的提交存在错误。请确保所有必填字段都已填写正确,然后再试一次。');
+          $(form).removeClass('disabled');
+        }
+      });
+
+      return false;
+    });
+
+    function showAlert(message) {
+      $('.page__comments-form .js-notice').removeClass('hidden');
+      $('.page__comments-form .js-notice-text').html(message);
+    }
+  })(jQuery);
+  </script>
+
+
+
+
+
+
+
+  </body>
+</html>


[16/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/docs/quick-start-advance/distributed-tracing/index.html
----------------------------------------------------------------------
diff --git a/content/docs/quick-start-advance/distributed-tracing/index.html b/content/docs/quick-start-advance/distributed-tracing/index.html
new file mode 100644
index 0000000..02a4489
--- /dev/null
+++ b/content/docs/quick-start-advance/distributed-tracing/index.html
@@ -0,0 +1,575 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>Distributed Tracing - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="Introduce how to use distributed tracing with ServiceComb in the BMI application">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="Distributed Tracing">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/quick-start-advance/distributed-tracing/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/quick-start-advance/distributed-tracing/">
+
+
+
+  <meta property="og:description" content="Introduce how to use distributed tracing with ServiceComb in the BMI application">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="Distributed Tracing">
+  <meta name="twitter:description" content="Introduce how to use distributed tracing with ServiceComb in the BMI application">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/docs/quick-start-advance/distributed-tracing/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          
+          
+
+          <a href="/docs/quick-start/"><span class="nav__sub-title nav__sub-title-with-url">Quick Start</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/docs/quick-start-bmi/"><span class="nav__sub-title nav__sub-title-with-url">Develop microservice application in minutes</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/docs/quick-start-advance/"><span class="nav__sub-title nav__sub-title-with-url">Advance microservice development</span></a>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/docs/quick-start-advance/load-balance/" class="">Load Balance</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/docs/quick-start-advance/flow-control/" class="">Flow Control</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/docs/quick-start-advance/service-management/" class="">Service Management</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/docs/quick-start-advance/distributed-tracing/" class="active">Distributed Tracing</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/docs/quick-start-dataconsistency/"><span class="nav__sub-title nav__sub-title-with-url">Data Consistency Solution</span></a>
+        
+
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="Distributed Tracing">
+    <meta itemprop="description" content="Introduce how to use distributed tracing with ServiceComb in the BMI application">
+    
+    <meta itemprop="dateModified" content="September 03, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">Distributed Tracing
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> On This Page</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#before-you-start" id="markdown-toc-before-you-start">Before you start</a></li>
+  <li><a href="#enable" id="markdown-toc-enable">Enable</a></li>
+  <li><a href="#verification" id="markdown-toc-verification">Verification</a></li>
+  <li><a href="#whats-next" id="markdown-toc-whats-next">What’s next</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<p>Distributed handler chain tracing is used to monitor the network latencies and visualize the flow of requests through microservices. This guide shows how to use distributed tracing with <strong>ServiceComb</strong> in the BMI application.</p>
+
+<h2 id="before-you-start">Before you start</h2>
+
+<p>Walk through <a href="/docs/quick-start-bmi/">Develop microservice application in minutes</a> and have <strong>BMI application</strong> running.</p>
+
+<h2 id="enable">Enable</h2>
+
+<ol>
+  <li>
+    <p>Add distributed tracing dependency in <code class="highlighter-rouge">pom.xml</code> of <em>BMI calculator service</em>:</p>
+
+    <div class="language-xml highlighter-rouge"><pre class="highlight"><code>    <span class="nt">&lt;dependency&gt;</span>
+      <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+      <span class="nt">&lt;artifactId&gt;</span>handler-tracing-zipkin<span class="nt">&lt;/artifactId&gt;</span>
+    <span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p>Add handler chain of distributed tracing in <code class="highlighter-rouge">microservice.yaml</code> of <em>BMI calculator service</em>:</p>
+
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">cse</span><span class="pi">:</span>
+  <span class="s">handler</span><span class="pi">:</span>
+    <span class="s">chain</span><span class="pi">:</span>
+      <span class="s">Provider</span><span class="pi">:</span>
+        <span class="s">default</span><span class="pi">:</span> <span class="s">tracing-provider</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p>Add distributed tracing dependency in <code class="highlighter-rouge">pom.xml</code> of <em>BMI web service</em>:</p>
+
+    <div class="language-xml highlighter-rouge"><pre class="highlight"><code>    <span class="nt">&lt;dependency&gt;</span>
+      <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+      <span class="nt">&lt;artifactId&gt;</span>spring-cloud-zuul-zipkin<span class="nt">&lt;/artifactId&gt;</span>
+    <span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+    </div>
+  </li>
+</ol>
+
+<p>The above configurations have already set up in the code. All you need to do is as follows:</p>
+
+<ol>
+  <li>
+    <p>Run <em>Zipkin</em> distributed service inside Docker.</p>
+
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code>docker run -d -p 9411:9411 openzipkin/zipkin
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p>Restart <em>BMI calculator service</em> with the following command:</p>
+
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code>mvn spring-boot:run -Drun.jvmArguments<span class="o">=</span><span class="s2">"-Dcse.handler.chain.Provider.default=tracing-provider"</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p>Restart <em>BMI web service</em> with the following command:</p>
+
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code>mvn spring-boot:run -Drun.jvmArguments<span class="o">=</span><span class="s2">"-Dservicecomb.tracing.enabled=true"</span>
+</code></pre>
+    </div>
+  </li>
+</ol>
+
+<h2 id="verification">Verification</h2>
+
+<ol>
+  <li>
+    <p>Visit <a>http://localhost:8889</a> . Input a positive height and weight and then click <em>Submit</em> button.</p>
+  </li>
+  <li>
+    <p>Visit <a>http://localhost:9411</a> to checkout the status of distributed tracing and get the following figure.</p>
+  </li>
+</ol>
+
+<p><img src="/assets/images/distributed-tracing-result.png" alt="Distributed tracing result" class="align-center" /></p>
+
+<h2 id="whats-next">What’s next</h2>
+
+<ul>
+  <li>
+    <p>Learn more about <a href="/users/distributed-tracing/">Distributed Tracing</a></p>
+  </li>
+  <li>
+    <p>Read <a href="/docs/tracing-with-servicecomb/">Distributed Tracing with ServiceComb and Zipkin</a></p>
+  </li>
+  <li>
+    <p>See <a href="/users/">ServiceComb User Guide</a></p>
+  </li>
+  <li>
+    <p>Learn more from <a href="/docs/linuxcon-workshop-demo/">the Company application</a> for a more complete example of microservice applications integrated with ServiceComb</p>
+  </li>
+</ul>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _docs/distributed-tracing.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_docs/distributed-tracing.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/docs/quick-start-advance/flow-control/index.html
----------------------------------------------------------------------
diff --git a/content/docs/quick-start-advance/flow-control/index.html b/content/docs/quick-start-advance/flow-control/index.html
new file mode 100644
index 0000000..082b585
--- /dev/null
+++ b/content/docs/quick-start-advance/flow-control/index.html
@@ -0,0 +1,537 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>Flow Control - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="Introduce how to use flow control with ServiceComb in the BMI application">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="Flow Control">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/quick-start-advance/flow-control/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/quick-start-advance/flow-control/">
+
+
+
+  <meta property="og:description" content="Introduce how to use flow control with ServiceComb in the BMI application">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="Flow Control">
+  <meta name="twitter:description" content="Introduce how to use flow control with ServiceComb in the BMI application">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/docs/quick-start-advance/flow-control/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          
+          
+
+          <a href="/docs/quick-start/"><span class="nav__sub-title nav__sub-title-with-url">Quick Start</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/docs/quick-start-bmi/"><span class="nav__sub-title nav__sub-title-with-url">Develop microservice application in minutes</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/docs/quick-start-advance/"><span class="nav__sub-title nav__sub-title-with-url">Advance microservice development</span></a>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/docs/quick-start-advance/load-balance/" class="">Load Balance</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/docs/quick-start-advance/flow-control/" class="active">Flow Control</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/docs/quick-start-advance/service-management/" class="">Service Management</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/docs/quick-start-advance/distributed-tracing/" class="">Distributed Tracing</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/docs/quick-start-dataconsistency/"><span class="nav__sub-title nav__sub-title-with-url">Data Consistency Solution</span></a>
+        
+
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="Flow Control">
+    <meta itemprop="description" content="Introduce how to use flow control with ServiceComb in the BMI application">
+    
+    <meta itemprop="dateModified" content="September 03, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">Flow Control
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> On This Page</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#before-you-start" id="markdown-toc-before-you-start">Before you start</a></li>
+  <li><a href="#enable" id="markdown-toc-enable">Enable</a></li>
+  <li><a href="#verification" id="markdown-toc-verification">Verification</a></li>
+  <li><a href="#whats-next" id="markdown-toc-whats-next">What’s next</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<p>Flow control machanism controls the transmission speed to avoid microservices being overloaded. This guide shows how to use flow control with <strong>ServiceComb</strong> in the BMI application.</p>
+
+<h2 id="before-you-start">Before you start</h2>
+
+<p>Walk through <a href="/docs/quick-start-bmi/">Develop microservice application in minutes</a> and have <strong>BMI application</strong> running.</p>
+
+<h2 id="enable">Enable</h2>
+
+<ol>
+  <li>
+    <p>Add flow control dependency in <code class="highlighter-rouge">pom.xml</code> of <em>BMI calculator service</em>:</p>
+
+    <div class="language-xml highlighter-rouge"><pre class="highlight"><code> <span class="nt">&lt;dependency&gt;</span>
+   <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+   <span class="nt">&lt;artifactId&gt;</span>handler-flowcontrol-qps<span class="nt">&lt;/artifactId&gt;</span>
+ <span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p>Add handler chain and configurations of flow control in <code class="highlighter-rouge">microservice.yaml</code> of <em>BMI calculator service</em>:</p>
+
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">cse</span><span class="pi">:</span>
+  <span class="s">handler</span><span class="pi">:</span>
+    <span class="s">chain</span><span class="pi">:</span>
+      <span class="s">Provider</span><span class="pi">:</span>
+        <span class="s">default</span><span class="pi">:</span> <span class="s">qps-flowcontrol-provider</span>
+  <span class="s">flowcontrol</span><span class="pi">:</span>
+    <span class="s">Provider</span><span class="pi">:</span>
+      <span class="s">qps</span><span class="pi">:</span>
+        <span class="s">limit</span><span class="pi">:</span>
+          <span class="s">gateway</span><span class="pi">:</span> <span class="s">1</span>
+</code></pre>
+    </div>
+  </li>
+</ol>
+
+<p>The above configurations have already set up in the code. All you need to do is to stop all <strong>BMI calculator services</strong> and then start a new one with the following command:</p>
+
+<div class="language-bash highlighter-rouge"><pre class="highlight"><code>mvn spring-boot:run -Drun.jvmArguments<span class="o">=</span><span class="s2">"-Dcse.handler.chain.Provider.default=qps-flowcontrol-provider -Dcse.flowcontrol.Provider.qps.limit.gateway=1"</span>
+</code></pre>
+</div>
+
+<h2 id="verification">Verification</h2>
+
+<p>Visit <a>http://localhost:8889</a>. Input a positive height and weight and then click <em>Submit</em> button twice or more in less than one second. You will see the web page change from the left one to the right one.</p>
+
+<p><img src="/assets/images/flow-control-result.png" alt="Flow control result" class="align-center" /></p>
+
+<h2 id="whats-next">What’s next</h2>
+
+<ul>
+  <li>
+    <p>See quick start for <a href="/docs/quick-start-advance/service-management/">Service Management</a></p>
+  </li>
+  <li>
+    <p>Learn more about <a href="/users/service-configurations/#限流策略">Flow Control</a></p>
+  </li>
+</ul>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _docs/flow-control.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_docs/flow-control.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/docs/quick-start-advance/index.html
----------------------------------------------------------------------
diff --git a/content/docs/quick-start-advance/index.html b/content/docs/quick-start-advance/index.html
new file mode 100644
index 0000000..a6563df
--- /dev/null
+++ b/content/docs/quick-start-advance/index.html
@@ -0,0 +1,492 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>Advance microservice development - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="Introduce how to use handler chain with ServiceComb in the BMI application">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="Advance microservice development">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/quick-start-advance/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/quick-start-advance/">
+
+
+
+  <meta property="og:description" content="Introduce how to use handler chain with ServiceComb in the BMI application">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="Advance microservice development">
+  <meta name="twitter:description" content="Introduce how to use handler chain with ServiceComb in the BMI application">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/docs/quick-start-advance/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          
+          
+
+          <a href="/docs/quick-start/"><span class="nav__sub-title nav__sub-title-with-url">Quick Start</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/docs/quick-start-bmi/"><span class="nav__sub-title nav__sub-title-with-url">Develop microservice application in minutes</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/docs/quick-start-advance/"><span class="nav__sub-title nav__sub-title-with-url">Advance microservice development</span></a>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/docs/quick-start-advance/load-balance/" class="">Load Balance</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/docs/quick-start-advance/flow-control/" class="">Flow Control</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/docs/quick-start-advance/service-management/" class="">Service Management</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/docs/quick-start-advance/distributed-tracing/" class="">Distributed Tracing</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/docs/quick-start-dataconsistency/"><span class="nav__sub-title nav__sub-title-with-url">Data Consistency Solution</span></a>
+        
+
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="Advance microservice development">
+    <meta itemprop="description" content="Introduce how to use handler chain with ServiceComb in the BMI application">
+    
+    <meta itemprop="dateModified" content="September 03, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">Advance microservice development
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <p>This guide shows how to reinforce microservices with <strong>ServiceComb</strong>'s handler chain. From here you can learn how to use ServiceComb's handler chain by the following links below:</p>
+
+<ul>
+  <li>
+    <p><a href="/docs/quick-start-advance/load-balance/">Load Balance</a>. Distribute requests equally among service instances.</p>
+  </li>
+  <li>
+    <p><a href="/docs/quick-start-advance/flow-control/">Flow Control</a>. Limit number of requests of a microservice.</p>
+  </li>
+  <li>
+    <p><a href="/docs/quick-start-advance/service-management">Service Management</a>. Isolate abnormal services and stop cascading failure in microservice application.</p>
+  </li>
+  <li>
+    <p><a href="/docs/quick-start-advance/distributed-tracing">Distributed Tracing</a>. Visualize the flow of requests through microservices.</p>
+  </li>
+</ul>
+
+<h2 id="whats-next">What’s next</h2>
+
+<ul>
+  <li>
+    <p>See <a href="/users/">ServiceComb User Guide</a></p>
+  </li>
+  <li>
+    <p>Learn more from <a href="/docs/linuxcon-workshop-demo/">the Company application</a> for a more complete example of microservice applications integrated with ServiceComb</p>
+  </li>
+</ul>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _docs/quick-start-advance.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_docs/quick-start-advance.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/docs/quick-start-advance/load-balance/index.html
----------------------------------------------------------------------
diff --git a/content/docs/quick-start-advance/load-balance/index.html b/content/docs/quick-start-advance/load-balance/index.html
new file mode 100644
index 0000000..9feccfa
--- /dev/null
+++ b/content/docs/quick-start-advance/load-balance/index.html
@@ -0,0 +1,511 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>Load Balance - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="Introduce how to use load balance with ServiceComb in the BMI application">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="Load Balance">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/quick-start-advance/load-balance/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/quick-start-advance/load-balance/">
+
+
+
+  <meta property="og:description" content="Introduce how to use load balance with ServiceComb in the BMI application">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="Load Balance">
+  <meta name="twitter:description" content="Introduce how to use load balance with ServiceComb in the BMI application">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/docs/quick-start-advance/load-balance/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          
+          
+
+          <a href="/docs/quick-start/"><span class="nav__sub-title nav__sub-title-with-url">Quick Start</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/docs/quick-start-bmi/"><span class="nav__sub-title nav__sub-title-with-url">Develop microservice application in minutes</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/docs/quick-start-advance/"><span class="nav__sub-title nav__sub-title-with-url">Advance microservice development</span></a>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/docs/quick-start-advance/load-balance/" class="active">Load Balance</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/docs/quick-start-advance/flow-control/" class="">Flow Control</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/docs/quick-start-advance/service-management/" class="">Service Management</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/docs/quick-start-advance/distributed-tracing/" class="">Distributed Tracing</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/docs/quick-start-dataconsistency/"><span class="nav__sub-title nav__sub-title-with-url">Data Consistency Solution</span></a>
+        
+
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="Load Balance">
+    <meta itemprop="description" content="Introduce how to use load balance with ServiceComb in the BMI application">
+    
+    <meta itemprop="dateModified" content="September 03, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">Load Balance
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> On This Page</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#before-you-start" id="markdown-toc-before-you-start">Before you start</a></li>
+  <li><a href="#enable" id="markdown-toc-enable">Enable</a></li>
+  <li><a href="#verification" id="markdown-toc-verification">Verification</a></li>
+  <li><a href="#whats-next" id="markdown-toc-whats-next">What’s next</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<p>When we scale up <em>BMI calculator service</em>, requests from <em>BMI web service</em> need to distribute equally to each <em>BMI calculator service</em>. This guide shows how to use load balance with <strong>ServiceComb</strong> in the BMI application.</p>
+
+<h2 id="before-you-start">Before you start</h2>
+
+<p>Walk through <a href="/docs/quick-start-bmi/">Develop microservice application in minutes</a> and have <strong>BMI application</strong> running.</p>
+
+<h2 id="enable">Enable</h2>
+
+<p>The simple embedded load balancer will be used by default. No extra configurations needed.</p>
+
+<h2 id="verification">Verification</h2>
+
+<p>Run one more <em>BMI calculator service</em> with the following command:</p>
+<div class="language-bash highlighter-rouge"><pre class="highlight"><code>mvn spring-boot:run -Drun.jvmArguments<span class="o">=</span><span class="s2">"-Dcse.rest.address=0.0.0.0:7778"</span>
+</code></pre>
+</div>
+
+<p>To better distinguish different running instances, we added a new interface that returns instance id in the implementation of BMI calculator, details can refer to <a href="https://github.com/ServiceComb/ServiceComb-Java-Chassis/tree/master/samples/bmi/calculator">the implementation of BMI calculator</a>. Besides, a different service port is needed to avoid port conflict.</p>
+
+<p>Now you can see the instance id in the following figures shows up alternately by clicking the <em>Submit</em> button.</p>
+
+<p><img src="/assets/images/load-balance-result.png" alt="Load balance result" class="align-center" /></p>
+
+<h2 id="whats-next">What’s next</h2>
+
+<ul>
+  <li>
+    <p>See quick start for <a href="/docs/quick-start-advance/flow-control/">Flow Control</a></p>
+  </li>
+  <li>
+    <p>Learn more about <a href="/users/service-configurations/#负载均衡策略">Load Balance</a></p>
+  </li>
+</ul>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _docs/load-balance.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_docs/load-balance.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/docs/quick-start-advance/service-management/index.html
----------------------------------------------------------------------
diff --git a/content/docs/quick-start-advance/service-management/index.html b/content/docs/quick-start-advance/service-management/index.html
new file mode 100644
index 0000000..0084123
--- /dev/null
+++ b/content/docs/quick-start-advance/service-management/index.html
@@ -0,0 +1,550 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>Service Management - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="Introduce how to use service management with ServiceComb in the BMI application">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="Service Management">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/quick-start-advance/service-management/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/quick-start-advance/service-management/">
+
+
+
+  <meta property="og:description" content="Introduce how to use service management with ServiceComb in the BMI application">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="Service Management">
+  <meta name="twitter:description" content="Introduce how to use service management with ServiceComb in the BMI application">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/docs/quick-start-advance/service-management/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          
+          
+
+          <a href="/docs/quick-start/"><span class="nav__sub-title nav__sub-title-with-url">Quick Start</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/docs/quick-start-bmi/"><span class="nav__sub-title nav__sub-title-with-url">Develop microservice application in minutes</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/docs/quick-start-advance/"><span class="nav__sub-title nav__sub-title-with-url">Advance microservice development</span></a>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/docs/quick-start-advance/load-balance/" class="">Load Balance</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/docs/quick-start-advance/flow-control/" class="">Flow Control</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/docs/quick-start-advance/service-management/" class="active">Service Management</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/docs/quick-start-advance/distributed-tracing/" class="">Distributed Tracing</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/docs/quick-start-dataconsistency/"><span class="nav__sub-title nav__sub-title-with-url">Data Consistency Solution</span></a>
+        
+
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="Service Management">
+    <meta itemprop="description" content="Introduce how to use service management with ServiceComb in the BMI application">
+    
+    <meta itemprop="dateModified" content="September 03, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">Service Management
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> On This Page</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#before-you-start" id="markdown-toc-before-you-start">Before you start</a></li>
+  <li><a href="#enable" id="markdown-toc-enable">Enable</a></li>
+  <li><a href="#verification" id="markdown-toc-verification">Verification</a></li>
+  <li><a href="#whats-next" id="markdown-toc-whats-next">What’s next</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<p>Service management is mainly used to solve or ease avalanche effect of microservices. Abnormal microservices will be isolated and stop cascading failure to reduce unnecessary resource. This guide shows how to use service management with <strong>ServiceComb</strong> in the BMI application.</p>
+
+<h2 id="before-you-start">Before you start</h2>
+
+<p>Walk through <a href="/docs/quick-start-bmi/">Develop microservice application in minutes</a> and have <strong>BMI application</strong> running.</p>
+
+<h2 id="enable">Enable</h2>
+
+<ol>
+  <li>
+    <p>Add service management dependency in <code class="highlighter-rouge">pom.xml</code> of <em>BMI calculator service</em>:</p>
+
+    <div class="language-xml highlighter-rouge"><pre class="highlight"><code>    <span class="nt">&lt;dependency&gt;</span>
+      <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+      <span class="nt">&lt;artifactId&gt;</span>handler-bizkeeper<span class="nt">&lt;/artifactId&gt;</span>
+    <span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p>Configure handler chain of service management and fallback strategy:</p>
+
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">cse</span><span class="pi">:</span>
+  <span class="s">handler</span><span class="pi">:</span>
+    <span class="s">chain</span><span class="pi">:</span>
+      <span class="s">Provider</span><span class="pi">:</span>
+        <span class="s">default</span><span class="pi">:</span> <span class="s">bizkeeper-provider</span>
+  <span class="s">circuitBreaker</span><span class="pi">:</span>
+    <span class="s">Provider</span><span class="pi">:</span>
+      <span class="s">calculator</span><span class="pi">:</span>
+        <span class="s">requestVolumeThreshold</span><span class="pi">:</span> <span class="s">3</span>
+  <span class="s">fallbackpolicy</span><span class="pi">:</span>
+    <span class="s">Provider</span><span class="pi">:</span>
+      <span class="s">policy</span><span class="pi">:</span> <span class="s">returnnull</span>
+</code></pre>
+    </div>
+  </li>
+</ol>
+
+<p>The above configurations have already set up in the code. All you need to do is to restart the <em>BMI calculator services</em> with the following command:</p>
+
+<div class="language-bash highlighter-rouge"><pre class="highlight"><code>mvn spring-boot:run -Drun.jvmArguments<span class="o">=</span><span class="s2">"-Dcse.handler.chain.Provider.default=bizkeeper-provider -Dcse.circuitBreaker.Provider.calculator.requestVolumeThreshold=3 -Dcse.fallbackpolicy.Provider.policy=returnnull"</span>
+</code></pre>
+</div>
+
+<h2 id="verification">Verification</h2>
+
+<ol>
+  <li>
+    <p>Circuit-break microservices. Visit <a>http://localhost:8889</a>, enter a negative height or weight and click the <em>Submit</em> button three times or more continuously. Then the web page should look like the left one in fig-1.</p>
+  </li>
+  <li>
+    <p>Verify serivces are in circuit-break status. Enter a positive height and weight, then click <em>Submit</em> button. The web page still looks like the left one in fig-1. In the meanwhile, no exceptions show in the log of <em>BMI calculator service</em>. Instead it shows lines contain “fallback called”.</p>
+  </li>
+  <li>
+    <p>Verify the service back online again. Wait for about 15 seconds, enter a positive height and weight, then click <em>Submit</em> button. You will see the service works fine again like the right one in fig-1.</p>
+  </li>
+</ol>
+
+<p class="figure-caption"><img src="/assets/images/service-management-result.png" alt="Service management result" class="align-center" />
+fig-1 Service management result</p>
+
+<h2 id="whats-next">What’s next</h2>
+
+<ul>
+  <li>
+    <p>See quick start for <a href="/docs/quick-start-advance/distributed-tracing/">Distributed Tracing</a></p>
+  </li>
+  <li>
+    <p>Learn more about <a href="/users/service-configurations/">Service Management</a></p>
+  </li>
+</ul>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _docs/service-management.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_docs/service-management.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>


[17/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/docs/linuxcon-workshop-demo/index.html
----------------------------------------------------------------------
diff --git a/content/docs/linuxcon-workshop-demo/index.html b/content/docs/linuxcon-workshop-demo/index.html
new file mode 100644
index 0000000..3db6f47
--- /dev/null
+++ b/content/docs/linuxcon-workshop-demo/index.html
@@ -0,0 +1,1525 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>Linux Con Workshop Demo - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="A step by step guide on how to use ServiceComb to develop a complete project">
+
+
+
+
+<meta name="author" content="Sean Yin">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="Linux Con Workshop Demo">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/linuxcon-workshop-demo/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/linuxcon-workshop-demo/">
+
+
+
+  <meta property="og:description" content="A step by step guide on how to use ServiceComb to develop a complete project">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="Linux Con Workshop Demo">
+  <meta name="twitter:description" content="A step by step guide on how to use ServiceComb to develop a complete project">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+    <meta name="twitter:creator" content="@seanyinx">
+  
+
+
+
+  
+
+  
+
+
+
+
+
+  <meta property="og:type" content="article">
+  <meta property="article:published_time" content="2017-06-15T00:00:00+08:00">
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/docs/linuxcon-workshop-demo/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+
+<div itemscope itemtype="http://schema.org/Person">
+
+  
+
+  <div class="author__content">
+    <h3 class="author__name" itemprop="name">Sean Yin</h3>
+    
+      <p class="author__bio" itemprop="description">
+	    
+        Nothing but speed is indestructible
+	    
+      </p>
+    
+  </div>
+
+  <div class="author__urls-wrapper">
+    <button class="btn btn--inverse">Follow</button>
+    <ul class="author__urls social-icons">
+      
+
+      
+        <li>
+          <a href="http://seanyinx.github.io" itemprop="url">
+            <i class="fa fa-fw fa-chain" aria-hidden="true"></i> Website
+          </a>
+        </li>
+      
+
+      
+        <li>
+          <a href="mailto:seanyinx@gmail.com">
+            <meta itemprop="email" content="seanyinx@gmail.com" />
+            <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> Email
+          </a>
+        </li>
+      
+
+      
+
+      
+        <li>
+          <a href="https://twitter.com/seanyinx" itemprop="sameAs">
+            <i class="fa fa-fw fa-twitter-square" aria-hidden="true"></i> Twitter
+          </a>
+        </li>
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      <!--
+  <li>
+    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs">
+      <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link
+    </a>
+  </li>
+-->
+    </ul>
+  </div>
+</div>
+
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="Linux Con Workshop Demo">
+    <meta itemprop="description" content="A step by step guide on how to use ServiceComb to develop a complete project">
+    <meta itemprop="datePublished" content="June 15, 2017">
+    <meta itemprop="dateModified" content="June 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">Linux Con Workshop Demo
+</h1>
+            
+              <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  6 minute read
+
+</p>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <p>为了读者能更容易了解ServiceComb微服务框架的功能以及如何用其快速开发微服务,所以提供大家耳熟能详的例子,降低学习曲线的同时,增加趣味性,加深理解。</p>
+
+<p>本文中假设我们成立了一家科研公司,处理复杂的数学运算,以及尖端生物科技研究,并为用户提供如下服务:</p>
+
+<ul>
+  <li>
+    <p>黄金分割数列计算</p>
+  </li>
+  <li>
+    <p>蜜蜂繁殖规律 (计算每只雄蜂/雌蜂的祖先数量)</p>
+  </li>
+</ul>
+
+<p>但是我们如何将公司的这些强大运算能力提供给我们的消费者呢?</p>
+
+<p>首先我们通过认证服务保障公司的计算资源没有被滥用, 同时我们对外提供Rest服务让用户来进行访问。 下面的视频展示具体的服务验证调用的情况。</p>
+
+<!-- Courtesy of embedresponsively.com //-->
+<div class="responsive-video-container">
+
+  <iframe src="https://player.youku.com/embed/XMjg1NzQ3NzUzNg" frameborder="0" allowfullscreen=""></iframe>
+
+</div>
+
+<aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> On This Page</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#业务场景" id="markdown-toc-业务场景">业务场景</a></li>
+  <li><a href="#公司结构-系统架构" id="markdown-toc-公司结构-系统架构">公司结构 (系统架构)</a></li>
+  <li><a href="#技工-worker" id="markdown-toc-技工-worker">技工 (Worker)</a>    <ul>
+      <li><a href="#黄金分割运算服务" id="markdown-toc-黄金分割运算服务">黄金分割运算服务</a></li>
+      <li><a href="#技工服务端点" id="markdown-toc-技工服务端点">技工服务端点</a></li>
+    </ul>
+  </li>
+  <li><a href="#告示栏-bulletin-board" id="markdown-toc-告示栏-bulletin-board">告示栏 (Bulletin Board)</a></li>
+  <li><a href="#养蜂人-beekeeper" id="markdown-toc-养蜂人-beekeeper">养蜂人 (Beekeeper)</a>    <ul>
+      <li><a href="#蜜蜂繁殖规律研究服务" id="markdown-toc-蜜蜂繁殖规律研究服务">蜜蜂繁殖规律研究服务</a></li>
+      <li><a href="#养蜂人服务端点" id="markdown-toc-养蜂人服务端点">养蜂人服务端点</a></li>
+    </ul>
+  </li>
+  <li><a href="#门卫-doorman" id="markdown-toc-门卫-doorman">门卫 (Doorman)</a>    <ul>
+      <li><a href="#门卫认证服务" id="markdown-toc-门卫认证服务">门卫认证服务</a></li>
+      <li><a href="#门卫认证服务端点" id="markdown-toc-门卫认证服务端点">门卫认证服务端点</a></li>
+    </ul>
+  </li>
+  <li><a href="#经理-manager" id="markdown-toc-经理-manager">经理 (Manager)</a>    <ul>
+      <li><a href="#用户认证服务" id="markdown-toc-用户认证服务">用户认证服务</a></li>
+      <li><a href="#请求过滤" id="markdown-toc-请求过滤">请求过滤</a></li>
+    </ul>
+  </li>
+  <li><a href="#项目归档-project-archive" id="markdown-toc-项目归档-project-archive">项目归档 (Project Archive)</a></li>
+  <li><a href="#人力资源-human-resource" id="markdown-toc-人力资源-human-resource">人力资源 (Human Resource)</a></li>
+  <li><a href="#总结" id="markdown-toc-总结">总结</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="业务场景">业务场景</h2>
+<p>让我们先对业务场景进行总结分析</p>
+
+<ol>
+  <li>
+    <p>为了公司持续发展,我们需要对用户消费的运算能力收费,所以我们聘用了<strong>门卫</strong>认证用户,避免不法分子混入</p>
+  </li>
+  <li>
+    <p>为了提供足够的黄金分割数量运算能力,我们需要雇佣相应的<strong>技工</strong></p>
+  </li>
+  <li>
+    <p>为了持续研究蜜蜂繁殖规律,公司建立了自己的蜂场,需要相应的<strong>养蜂人</strong>进行管理研究</p>
+  </li>
+  <li>
+    <p>为了平衡<strong>技工</strong>、<strong>养蜂人</strong>、和<strong>门卫</strong>的工作量和时间,我们建立了<strong>告示栏</strong>机制,让当前有闲暇的人员发布自己的联系方式,以便我们能及时联系技能匹配的人员以服务到来的用户</p>
+  </li>
+  <li>
+    <p>因为运算能力成本高昂,我们将运算项目进行了<strong>归档</strong>,以便未来有相同请求时,我们能直接查询<strong>项目归档</strong>,节省公司运算成本</p>
+  </li>
+  <li>
+    <p>面对上述复杂的场景,我们又聘用了<strong>部门经理</strong>来管理公司成员和设施</p>
+  </li>
+  <li>
+    <p>最后,当公司日益壮大,用户数量暴涨时,我们还需要招聘更多<strong>技工</strong>、<strong>养蜂人</strong>、和<strong>门卫</strong>,所以增加了<strong>人力资源</strong>部门</p>
+  </li>
+</ol>
+
+<h2 id="公司结构-系统架构">公司结构 (系统架构)</h2>
+<p>到现在业务场景已经比较清晰,我们把上述职务部门和设施画成公司组织结构图。
+<img src="/assets/images/workshop-company-structure.png" alt="company structure" class="align-center" /></p>
+
+<p>现在公司组织结构已经完整,让我们着手搭建相应部门。</p>
+
+<h2 id="技工-worker">技工 (Worker)</h2>
+<p>因为技工最为简单,对其他部门人员依赖最少,我们首先搭建这个部门。</p>
+
+<h3 id="黄金分割运算服务">黄金分割运算服务</h3>
+<p>技工的主要工作时提供黄金分割数列计算服务,当用户需要知道第n个黄金分割数时,技工以最快的速度计算出数值并返回给用户。
+我们可以把这个工作简化为如下数学方程:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>value = fibo(n)
+</code></pre>
+</div>
+
+<p>在暂时不考虑性能的情况下,我们可以迅速实现黄金分割数列的计算。</p>
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kd">interface</span> <span class="nc">FibonacciService</span> <span class="o">{</span>
+  <span class="kt">long</span> <span class="nf">term</span><span class="o">(</span><span class="kt">int</span> <span class="n">n</span><span class="o">);</span>
+<span class="o">}</span>
+
+<span class="nd">@Service</span>
+<span class="kd">class</span> <span class="nc">FibonacciServiceImpl</span> <span class="kd">implements</span> <span class="n">FibonacciService</span> <span class="o">{</span>
+  <span class="nd">@Override</span>
+  <span class="kd">public</span> <span class="kt">long</span> <span class="nf">term</span><span class="o">(</span><span class="kt">int</span> <span class="n">n</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">if</span> <span class="o">(</span><span class="n">n</span> <span class="o">==</span> <span class="mi">0</span><span class="o">)</span> <span class="o">{</span>
+      <span class="k">return</span> <span class="mi">0</span><span class="o">;</span>
+    <span class="o">}</span> <span class="k">else</span> <span class="k">if</span> <span class="o">(</span><span class="n">n</span> <span class="o">==</span> <span class="mi">1</span><span class="o">)</span> <span class="o">{</span>
+      <span class="k">return</span> <span class="mi">1</span><span class="o">;</span>
+    <span class="o">}</span>
+
+    <span class="k">return</span> <span class="nf">term</span><span class="o">(</span><span class="n">n</span> <span class="o">-</span> <span class="mi">1</span><span class="o">)</span> <span class="o">+</span> <span class="n">term</span><span class="o">(</span><span class="n">n</span> <span class="o">-</span> <span class="mi">2</span><span class="o">);</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<h3 id="技工服务端点">技工服务端点</h3>
+<p>黄金分割数量运算已经实现,现在我们需要将服务提供给用户,首先我们定义端点接口:</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">interface</span> <span class="nc">FibonacciEndpoint</span> <span class="o">{</span>
+  <span class="kt">long</span> <span class="nf">term</span><span class="o">(</span><span class="kt">int</span> <span class="n">n</span><span class="o">);</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<p>引入 <code class="highlighter-rouge">ServiceComb</code> 依赖:</p>
+
+<div class="language-xml highlighter-rouge"><pre class="highlight"><code>    <span class="nt">&lt;dependency&gt;</span>
+      <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+      <span class="nt">&lt;artifactId&gt;</span>spring-boot-starter-provider<span class="nt">&lt;/artifactId&gt;</span>
+    <span class="nt">&lt;/dependency&gt;</span>
+
+</code></pre>
+</div>
+
+<p>接下来我们同时暴露黄金分割运算服务的<strong>Restful</strong>和<strong>RPC</strong>端点:</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@RestSchema</span><span class="o">(</span><span class="n">schemaId</span> <span class="o">=</span> <span class="s">"fibonacciRestEndpoint"</span><span class="o">)</span>
+<span class="nd">@RequestMapping</span><span class="o">(</span><span class="s">"/fibonacci"</span><span class="o">)</span>
+<span class="nd">@Controller</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">FibonacciRestEndpoint</span> <span class="kd">implements</span> <span class="n">FibonacciEndpoint</span> <span class="o">{</span>
+
+  <span class="kd">private</span> <span class="kd">final</span> <span class="n">FibonacciService</span> <span class="n">fibonacciService</span><span class="o">;</span>
+
+  <span class="nd">@Autowired</span>
+  <span class="n">FibonacciRestEndpoint</span><span class="o">(</span><span class="n">FibonacciService</span> <span class="n">fibonacciService</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">this</span><span class="o">.</span><span class="na">fibonacciService</span> <span class="o">=</span> <span class="n">fibonacciService</span><span class="o">;</span>
+  <span class="o">}</span>
+
+  <span class="nd">@Override</span>
+  <span class="nd">@RequestMapping</span><span class="o">(</span><span class="n">value</span> <span class="o">=</span> <span class="s">"/term"</span><span class="o">,</span> <span class="n">method</span> <span class="o">=</span> <span class="n">RequestMethod</span><span class="o">.</span><span class="na">GET</span><span class="o">)</span>
+  <span class="nd">@ResponseBody</span>
+  <span class="kd">public</span> <span class="kt">long</span> <span class="nf">term</span><span class="o">(</span><span class="kt">int</span> <span class="n">n</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">return</span> <span class="n">fibonacciService</span><span class="o">.</span><span class="na">term</span><span class="o">(</span><span class="n">n</span><span class="o">);</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@RpcSchema</span><span class="o">(</span><span class="n">schemaId</span> <span class="o">=</span> <span class="s">"fibonacciRpcEndpoint"</span><span class="o">)</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">FibonacciRpcEndpoint</span> <span class="kd">implements</span> <span class="n">FibonacciEndpoint</span> <span class="o">{</span>
+
+  <span class="kd">private</span> <span class="kd">final</span> <span class="n">FibonacciService</span> <span class="n">fibonacciService</span><span class="o">;</span>
+
+  <span class="nd">@Autowired</span>
+  <span class="kd">public</span> <span class="nf">FibonacciRpcEndpoint</span><span class="o">(</span><span class="n">FibonacciService</span> <span class="n">fibonacciService</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">this</span><span class="o">.</span><span class="na">fibonacciService</span> <span class="o">=</span> <span class="n">fibonacciService</span><span class="o">;</span>
+  <span class="o">}</span>
+
+  <span class="nd">@Override</span>
+  <span class="kd">public</span> <span class="kt">long</span> <span class="nf">term</span><span class="o">(</span><span class="kt">int</span> <span class="n">n</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">return</span> <span class="n">fibonacciService</span><span class="o">.</span><span class="na">term</span><span class="o">(</span><span class="n">n</span><span class="o">);</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<p>这里用 <code class="highlighter-rouge">@RestSchema</code> 和 <code class="highlighter-rouge">@RpcSchema</code> 注释两个端点后,<code class="highlighter-rouge">ServiceComb</code> 会自动生成对应的服务端点契约,根据如下
+<code class="highlighter-rouge">microsevice.yaml</code> 配置端点端口,并将契约和服务一起注册到<a href="https://github.com/ServiceComb/service-center">Service Center</a>:</p>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="c1"># all interconnected microservices must belong to an application wth the same ID</span>
+<span class="s">APPLICATION_ID</span><span class="pi">:</span> <span class="s">company</span>
+<span class="s">service_description</span><span class="pi">:</span>
+<span class="c1"># name of the declaring microservice</span>
+  <span class="s">name</span><span class="pi">:</span> <span class="s">worker</span>
+  <span class="s">version</span><span class="pi">:</span> <span class="s">0.0.1</span>
+<span class="c1"># service center address</span>
+<span class="s">cse</span><span class="pi">:</span>
+  <span class="s">service</span><span class="pi">:</span>
+    <span class="s">registry</span><span class="pi">:</span>
+      <span class="s">address</span><span class="pi">:</span> <span class="s">http://sc.servicecomb.io:30100</span>
+  <span class="s">highway</span><span class="pi">:</span>
+    <span class="s">address</span><span class="pi">:</span> <span class="s">0.0.0.0:7070</span>
+  <span class="s">rest</span><span class="pi">:</span>
+    <span class="s">address</span><span class="pi">:</span> <span class="s">0.0.0.0:8080</span>
+</code></pre>
+</div>
+
+<p>最后,提供技工服务应用启动入口,并加上 <code class="highlighter-rouge">@EnableServiceComb</code> 注释启用 <code class="highlighter-rouge">ServiceComb</code> :</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@SpringBootApplication</span>
+<span class="nd">@EnableServiceComb</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">WorkerApplication</span> <span class="o">{</span>
+
+  <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
+    <span class="n">SpringApplication</span><span class="o">.</span><span class="na">run</span><span class="o">(</span><span class="n">WorkerApplication</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">args</span><span class="o">);</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<h2 id="告示栏-bulletin-board">告示栏 (Bulletin Board)</h2>
+<p><strong>告示栏</strong>提供为<strong>门卫</strong>、<strong>技工</strong>和<strong>养蜂人</strong>注册联系方式的设施,同时<strong>经理</strong>和<strong>养蜂人</strong>可通过此设施查询注册方的联系方式,以方便匹配能力的提供和消费。</p>
+
+<p><code class="highlighter-rouge">Service Center</code> 提供契约和服务注册、发现功能,而且校验服务提供方和消费方的契约是否匹配,我们可以<a href="https://github.com/ServiceComb/service-center/releases">下载</a>编译好的版本直接运行。</p>
+
+<h2 id="养蜂人-beekeeper">养蜂人 (Beekeeper)</h2>
+<p><strong>养蜂人</strong>研究蜜蜂繁殖规律,计算每只蜜蜂 (雄蜂/雌蜂) 的祖先数量。因为蜜蜂繁殖规律和黄金分割数列相关,所以<strong>养蜂人</strong>同时消费<strong>技工</strong>提供的计算服务。</p>
+
+<p><a href="http://www.dave-cushman.net/bee/fibonacci.html">研究</a>表明,雄蜂(Drone)由未受精卵孵化而生,只有母亲;而雌蜂(Queen)由受精卵孵化而生,既有母又有父。</p>
+
+<p class="figure-caption"><img src="/assets/images/fibonaccitree.gif" alt="fibonacci tree" />
+Credit: <a href="http://www.dave-cushman.net&quot;">Dave Cushman’s website</a></p>
+
+<p>参考上图,蜜蜂的某一代祖先数量符合黄金分割数列的模型,由此我们可以很快实现服务功能。</p>
+
+<h3 id="蜜蜂繁殖规律研究服务">蜜蜂繁殖规律研究服务</h3>
+<p>首先我们定义黄金数列运算接口:</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">interface</span> <span class="nc">FibonacciCalculator</span> <span class="o">{</span>
+
+  <span class="kt">long</span> <span class="nf">term</span><span class="o">(</span><span class="kt">int</span> <span class="n">n</span><span class="o">);</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<p>接下来定义并实现蜜蜂繁殖规律研究服务:</p>
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kd">interface</span> <span class="nc">BeekeeperService</span> <span class="o">{</span>
+  <span class="kt">long</span> <span class="nf">ancestorsOfDroneAt</span><span class="o">(</span><span class="kt">int</span> <span class="n">generation</span><span class="o">);</span>
+
+  <span class="kt">long</span> <span class="nf">ancestorsOfQueenAt</span><span class="o">(</span><span class="kt">int</span> <span class="n">generation</span><span class="o">);</span>
+<span class="o">}</span>
+
+<span class="kd">class</span> <span class="nc">BeekeeperServiceImpl</span> <span class="kd">implements</span> <span class="n">BeekeeperService</span> <span class="o">{</span>
+
+  <span class="kd">private</span> <span class="kd">final</span> <span class="n">FibonacciCalculator</span> <span class="n">fibonacciCalculator</span><span class="o">;</span>
+
+  <span class="n">BeekeeperServiceImpl</span><span class="o">(</span><span class="n">FibonacciCalculator</span> <span class="n">fibonacciCalculator</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">this</span><span class="o">.</span><span class="na">fibonacciCalculator</span> <span class="o">=</span> <span class="n">fibonacciCalculator</span><span class="o">;</span>
+  <span class="o">}</span>
+
+  <span class="nd">@Override</span>
+  <span class="kd">public</span> <span class="kt">long</span> <span class="nf">ancestorsOfDroneAt</span><span class="o">(</span><span class="kt">int</span> <span class="n">generation</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">if</span> <span class="o">(</span><span class="n">generation</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="o">)</span> <span class="o">{</span>
+      <span class="k">return</span> <span class="mi">0</span><span class="o">;</span>
+    <span class="o">}</span>
+    <span class="k">return</span> <span class="n">fibonacciCalculator</span><span class="o">.</span><span class="na">term</span><span class="o">(</span><span class="n">generation</span> <span class="o">+</span> <span class="mi">1</span><span class="o">);</span>
+  <span class="o">}</span>
+
+  <span class="nd">@Override</span>
+  <span class="kd">public</span> <span class="kt">long</span> <span class="nf">ancestorsOfQueenAt</span><span class="o">(</span><span class="kt">int</span> <span class="n">generation</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">if</span> <span class="o">(</span><span class="n">generation</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="o">)</span> <span class="o">{</span>
+      <span class="k">return</span> <span class="mi">0</span><span class="o">;</span>
+    <span class="o">}</span>
+    <span class="k">return</span> <span class="n">fibonacciCalculator</span><span class="o">.</span><span class="na">term</span><span class="o">(</span><span class="n">generation</span> <span class="o">+</span> <span class="mi">2</span><span class="o">);</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<p>这里我们用到之前定义的 <code class="highlighter-rouge">FibonacciCalculator</code> 接口,并希望通过这个接口远程调用<strong>技工</strong>服务端点。<code class="highlighter-rouge">@RpcReference</code>
+注释能帮助我们自动从<a href="https://github.com/ServiceComb/service-center">Service Center</a>中获取
+<code class="highlighter-rouge">microserviceName = "worker", schemaId = "fibonacciRpcEndpoint"</code> , 即服务名为 <code class="highlighter-rouge">worker</code> 已经schema ID为
+<code class="highlighter-rouge">fibonacciRpcEndpoint</code>的端点:</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@Configuration</span>
+<span class="kd">class</span> <span class="nc">BeekeeperConfig</span> <span class="o">{</span>
+
+  <span class="nd">@RpcReference</span><span class="o">(</span><span class="n">microserviceName</span> <span class="o">=</span> <span class="s">"worker"</span><span class="o">,</span> <span class="n">schemaId</span> <span class="o">=</span> <span class="s">"fibonacciRpcEndpoint"</span><span class="o">)</span>
+  <span class="kd">private</span> <span class="n">FibonacciCalculator</span> <span class="n">fibonacciCalculator</span><span class="o">;</span>
+
+  <span class="nd">@Bean</span>
+  <span class="n">BeekeeperService</span> <span class="nf">beekeeperService</span><span class="o">()</span> <span class="o">{</span>
+    <span class="k">return</span> <span class="k">new</span> <span class="nf">BeekeeperServiceImpl</span><span class="o">(</span><span class="n">fibonacciCalculator</span><span class="o">);</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<p>我们在<strong>技工</strong>一节已定义好对应的服务名和schema ID端点,通过上面的配置,<code class="highlighter-rouge">ServiceComb</code> 会自动将远程<strong>技工</strong>服务
+实例和 <code class="highlighter-rouge">FibonacciCalculator</code> 绑定在一起。</p>
+
+<h3 id="养蜂人服务端点">养蜂人服务端点</h3>
+<p>与上一节<strong>技工</strong>服务相似,我们在这里也需要提供养蜂人服务端点,让用户可以进行调用:</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@RestSchema</span><span class="o">(</span><span class="n">schemaId</span> <span class="o">=</span> <span class="s">"beekeeperRestEndpoint"</span><span class="o">)</span>
+<span class="nd">@RequestMapping</span><span class="o">(</span><span class="s">"/rest"</span><span class="o">)</span>
+<span class="nd">@Controller</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">BeekeeperController</span> <span class="o">{</span>
+
+  <span class="kd">private</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">Logger</span> <span class="n">logger</span> <span class="o">=</span> <span class="n">LoggerFactory</span><span class="o">.</span><span class="na">getLogger</span><span class="o">(</span><span class="n">BeekeeperController</span><span class="o">.</span><span class="na">class</span><span class="o">);</span>
+
+  <span class="kd">private</span> <span class="kd">final</span> <span class="n">BeekeeperService</span> <span class="n">beekeeperService</span><span class="o">;</span>
+
+  <span class="nd">@Autowired</span>
+  <span class="n">BeekeeperController</span><span class="o">(</span><span class="n">BeekeeperService</span> <span class="n">beekeeperService</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">this</span><span class="o">.</span><span class="na">beekeeperService</span> <span class="o">=</span> <span class="n">beekeeperService</span><span class="o">;</span>
+  <span class="o">}</span>
+
+  <span class="nd">@RequestMapping</span><span class="o">(</span><span class="n">value</span> <span class="o">=</span> <span class="s">"/drone/ancestors/{generation}"</span><span class="o">,</span> <span class="n">method</span> <span class="o">=</span> <span class="n">GET</span><span class="o">,</span> <span class="n">produces</span> <span class="o">=</span> <span class="n">APPLICATION_JSON_UTF8_VALUE</span><span class="o">)</span>
+  <span class="nd">@ResponseBody</span>
+  <span class="kd">public</span> <span class="n">Ancestor</span> <span class="nf">ancestorsOfDrone</span><span class="o">(</span><span class="nd">@PathVariable</span> <span class="kt">int</span> <span class="n">generation</span><span class="o">)</span> <span class="o">{</span>
+    <span class="n">logger</span><span class="o">.</span><span class="na">info</span><span class="o">(</span>
+        <span class="s">"Received request to find the number of ancestors of drone at generation {}"</span><span class="o">,</span>
+        <span class="n">generation</span><span class="o">);</span>
+
+    <span class="k">return</span> <span class="k">new</span> <span class="nf">Ancestor</span><span class="o">(</span><span class="n">beekeeperService</span><span class="o">.</span><span class="na">ancestorsOfDroneAt</span><span class="o">(</span><span class="n">generation</span><span class="o">));</span>
+  <span class="o">}</span>
+
+  <span class="nd">@RequestMapping</span><span class="o">(</span><span class="n">value</span> <span class="o">=</span> <span class="s">"/queen/ancestors/{generation}"</span><span class="o">,</span> <span class="n">method</span> <span class="o">=</span> <span class="n">GET</span><span class="o">,</span> <span class="n">produces</span> <span class="o">=</span> <span class="n">APPLICATION_JSON_UTF8_VALUE</span><span class="o">)</span>
+  <span class="nd">@ResponseBody</span>
+  <span class="kd">public</span> <span class="n">Ancestor</span> <span class="nf">ancestorsOfQueen</span><span class="o">(</span><span class="nd">@PathVariable</span> <span class="kt">int</span> <span class="n">generation</span><span class="o">)</span> <span class="o">{</span>
+    <span class="n">logger</span><span class="o">.</span><span class="na">info</span><span class="o">(</span>
+        <span class="s">"Received request to find the number of ancestors of queen at generation {}"</span><span class="o">,</span>
+        <span class="n">generation</span><span class="o">);</span>
+
+    <span class="k">return</span> <span class="k">new</span> <span class="nf">Ancestor</span><span class="o">(</span><span class="n">beekeeperService</span><span class="o">.</span><span class="na">ancestorsOfQueenAt</span><span class="o">(</span><span class="n">generation</span><span class="o">));</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+
+<span class="kd">class</span> <span class="nc">Ancestor</span> <span class="o">{</span>
+  <span class="kd">private</span> <span class="kt">long</span> <span class="n">ancestors</span><span class="o">;</span>
+
+  <span class="n">Ancestor</span><span class="o">()</span> <span class="o">{</span>
+  <span class="o">}</span>
+
+  <span class="n">Ancestor</span><span class="o">(</span><span class="kt">long</span> <span class="n">ancestors</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">this</span><span class="o">.</span><span class="na">ancestors</span> <span class="o">=</span> <span class="n">ancestors</span><span class="o">;</span>
+  <span class="o">}</span>
+
+  <span class="kd">public</span> <span class="kt">long</span> <span class="nf">getAncestors</span><span class="o">()</span> <span class="o">{</span>
+    <span class="k">return</span> <span class="n">ancestors</span><span class="o">;</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<p>因为<strong>养蜂人</strong>需要消费<strong>技工</strong>提供的服务,所以其 <code class="highlighter-rouge">microservice.yaml</code> 配置稍有不同:</p>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="c1"># all interconnected microservices must belong to an application wth the same ID</span>
+<span class="s">APPLICATION_ID</span><span class="pi">:</span> <span class="s">company</span>
+<span class="s">service_description</span><span class="pi">:</span>
+<span class="c1"># name of the declaring microservice</span>
+  <span class="s">name</span><span class="pi">:</span> <span class="s">beekeeper</span>
+  <span class="s">version</span><span class="pi">:</span> <span class="s">0.0.1</span>
+<span class="s">cse</span><span class="pi">:</span>
+  <span class="s">service</span><span class="pi">:</span>
+    <span class="s">registry</span><span class="pi">:</span>
+      <span class="s">address</span><span class="pi">:</span> <span class="s">http://sc.servicecomb.io:30100</span>
+  <span class="s">rest</span><span class="pi">:</span>
+    <span class="s">address</span><span class="pi">:</span> <span class="s">0.0.0.0:8090</span>
+  <span class="s">handler</span><span class="pi">:</span>
+    <span class="s">chain</span><span class="pi">:</span>
+      <span class="s">Consumer</span><span class="pi">:</span>
+        <span class="s">default</span><span class="pi">:</span> <span class="s">bizkeeper-consumer,loadbalance</span>
+  <span class="s">references</span><span class="pi">:</span>
+<span class="c1">#  this one below must refer to the microservice name it communicates with</span>
+    <span class="s">worker</span><span class="pi">:</span>
+      <span class="s">version-rule</span><span class="pi">:</span> <span class="s">0.0.1</span>
+</code></pre>
+</div>
+
+<p>这里我们需要定义 <code class="highlighter-rouge">cse.references.worker.version-rule</code> ,让配置名称中指向<strong>技工</strong>服务名 <code class="highlighter-rouge">worker</code> ,并匹配其版本号。</p>
+
+<p>最后定义养蜂人服务应用入口:</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@SpringBootApplication</span>
+<span class="nd">@EnableServiceComb</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">BeekeeperApplication</span> <span class="o">{</span>
+
+  <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
+    <span class="n">SpringApplication</span><span class="o">.</span><span class="na">run</span><span class="o">(</span><span class="n">BeekeeperApplication</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">args</span><span class="o">);</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<h2 id="门卫-doorman">门卫 (Doorman)</h2>
+<p><strong>门卫</strong>为公司提供安全保障,屏蔽非合法用户,防止其骗取免费服务,甚至伤害<strong>技工</strong>和<strong>养蜂人</strong>。</p>
+
+<h3 id="门卫认证服务">门卫认证服务</h3>
+<p>认证功能我们采用<a href="https://jwt.io/introduction/">JSON Web Token (JWT)</a>的机制,具体实现超出了这篇文章的范围,
+细节大家可以查看github上<a href="https://github.com/ServiceComb/LinuxCon-Beijing-WorkShop">workshop</a>的 <code class="highlighter-rouge">doorman</code> 模块代码。</p>
+
+<p>认证服务的接口如下,<code class="highlighter-rouge">authenticate</code> 方法根据用户名和密码查询确认用户存在,并返回对应JWT token。用户登录后的每次
+请求都需要带上返回的JWT token,而 <code class="highlighter-rouge">validate</code> 方法将验证token以确认其有效。</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">interface</span> <span class="nc">AuthenticationService</span> <span class="o">{</span>
+  <span class="n">String</span> <span class="nf">authenticate</span><span class="o">(</span><span class="n">String</span> <span class="n">username</span><span class="o">,</span> <span class="n">String</span> <span class="n">password</span><span class="o">);</span>
+
+  <span class="n">String</span> <span class="nf">validate</span><span class="o">(</span><span class="n">String</span> <span class="n">token</span><span class="o">);</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<h3 id="门卫认证服务端点">门卫认证服务端点</h3>
+
+<p>与前两节的Rest服务端点相似,我们加上 <code class="highlighter-rouge">@RestSchema</code> 注释,以便 <code class="highlighter-rouge">ServiceComb</code> 自动配置端点、生成契约并注册服务。</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@RestSchema</span><span class="o">(</span><span class="n">schemaId</span> <span class="o">=</span> <span class="s">"authenticationRestEndpoint"</span><span class="o">)</span>
+<span class="nd">@Controller</span>
+<span class="nd">@RequestMapping</span><span class="o">(</span><span class="s">"/rest"</span><span class="o">)</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">AuthenticationController</span> <span class="o">{</span>
+
+  <span class="kd">private</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">Logger</span> <span class="n">logger</span> <span class="o">=</span> <span class="n">LoggerFactory</span><span class="o">.</span><span class="na">getLogger</span><span class="o">(</span><span class="n">AuthenticationController</span><span class="o">.</span><span class="na">class</span><span class="o">);</span>
+
+  <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">USERNAME</span> <span class="o">=</span> <span class="s">"username"</span><span class="o">;</span>
+  <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">PASSWORD</span> <span class="o">=</span> <span class="s">"password"</span><span class="o">;</span>
+  <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">TOKEN</span> <span class="o">=</span> <span class="s">"token"</span><span class="o">;</span>
+
+  <span class="kd">private</span> <span class="kd">final</span> <span class="n">AuthenticationService</span> <span class="n">authenticationService</span><span class="o">;</span>
+
+  <span class="nd">@Autowired</span>
+  <span class="n">AuthenticationController</span><span class="o">(</span><span class="n">AuthenticationService</span> <span class="n">authenticationService</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">this</span><span class="o">.</span><span class="na">authenticationService</span> <span class="o">=</span> <span class="n">authenticationService</span><span class="o">;</span>
+  <span class="o">}</span>
+
+  <span class="nd">@RequestMapping</span><span class="o">(</span><span class="n">value</span> <span class="o">=</span> <span class="s">"/login"</span><span class="o">,</span> <span class="n">method</span> <span class="o">=</span> <span class="n">POST</span><span class="o">,</span> <span class="n">produces</span> <span class="o">=</span> <span class="n">TEXT_PLAIN_VALUE</span><span class="o">)</span>
+  <span class="kd">public</span> <span class="n">ResponseEntity</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span> <span class="nf">login</span><span class="o">(</span>
+      <span class="nd">@RequestParam</span><span class="o">(</span><span class="n">USERNAME</span><span class="o">)</span> <span class="n">String</span> <span class="n">username</span><span class="o">,</span>
+      <span class="nd">@RequestParam</span><span class="o">(</span><span class="n">PASSWORD</span><span class="o">)</span> <span class="n">String</span> <span class="n">password</span><span class="o">)</span> <span class="o">{</span>
+
+    <span class="n">logger</span><span class="o">.</span><span class="na">info</span><span class="o">(</span><span class="s">"Received login request from user {}"</span><span class="o">,</span> <span class="n">username</span><span class="o">);</span>
+    <span class="n">String</span> <span class="n">token</span> <span class="o">=</span> <span class="n">authenticationService</span><span class="o">.</span><span class="na">authenticate</span><span class="o">(</span><span class="n">username</span><span class="o">,</span> <span class="n">password</span><span class="o">);</span>
+    <span class="n">HttpHeaders</span> <span class="n">headers</span> <span class="o">=</span> <span class="k">new</span> <span class="n">HttpHeaders</span><span class="o">();</span>
+    <span class="n">headers</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">AUTHORIZATION</span><span class="o">,</span> <span class="n">TOKEN_PREFIX</span> <span class="o">+</span> <span class="n">token</span><span class="o">);</span>
+
+    <span class="n">logger</span><span class="o">.</span><span class="na">info</span><span class="o">(</span><span class="s">"Authenticated user {} successfully"</span><span class="o">,</span> <span class="n">username</span><span class="o">);</span>
+    <span class="k">return</span> <span class="k">new</span> <span class="n">ResponseEntity</span><span class="o">&lt;&gt;(</span><span class="s">"Welcome, "</span> <span class="o">+</span> <span class="n">username</span><span class="o">,</span> <span class="n">headers</span><span class="o">,</span> <span class="n">OK</span><span class="o">);</span>
+  <span class="o">}</span>
+
+  <span class="nd">@RequestMapping</span><span class="o">(</span><span class="n">value</span> <span class="o">=</span> <span class="s">"/validate"</span><span class="o">,</span> <span class="n">method</span> <span class="o">=</span> <span class="n">POST</span><span class="o">,</span> <span class="n">consumes</span> <span class="o">=</span> <span class="n">APPLICATION_JSON_UTF8_VALUE</span><span class="o">,</span> <span class="n">produces</span> <span class="o">=</span> <span class="n">TEXT_PLAIN_VALUE</span><span class="o">)</span>
+  <span class="nd">@ResponseBody</span>
+  <span class="kd">public</span> <span class="n">String</span> <span class="nf">validate</span><span class="o">(</span><span class="nd">@RequestBody</span> <span class="n">Token</span> <span class="n">token</span><span class="o">)</span> <span class="o">{</span>
+    <span class="n">logger</span><span class="o">.</span><span class="na">info</span><span class="o">(</span><span class="s">"Received validation request of token {}"</span><span class="o">,</span> <span class="n">token</span><span class="o">);</span>
+    <span class="k">return</span> <span class="n">authenticationService</span><span class="o">.</span><span class="na">validate</span><span class="o">(</span><span class="n">token</span><span class="o">.</span><span class="na">getToken</span><span class="o">());</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+
+<span class="kd">class</span> <span class="nc">Token</span> <span class="o">{</span>
+  <span class="kd">private</span> <span class="n">String</span> <span class="n">token</span><span class="o">;</span>
+
+  <span class="n">Token</span><span class="o">()</span> <span class="o">{</span>
+  <span class="o">}</span>
+
+  <span class="n">Token</span><span class="o">(</span><span class="n">String</span> <span class="n">token</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">this</span><span class="o">.</span><span class="na">token</span> <span class="o">=</span> <span class="n">token</span><span class="o">;</span>
+  <span class="o">}</span>
+
+  <span class="kd">public</span> <span class="n">String</span> <span class="nf">getToken</span><span class="o">()</span> <span class="o">{</span>
+    <span class="k">return</span> <span class="n">token</span><span class="o">;</span>
+  <span class="o">}</span>
+
+  <span class="nd">@Override</span>
+  <span class="kd">public</span> <span class="n">String</span> <span class="nf">toString</span><span class="o">()</span> <span class="o">{</span>
+    <span class="k">return</span> <span class="s">"Token{"</span> <span class="o">+</span>
+        <span class="s">"token='"</span> <span class="o">+</span> <span class="n">token</span> <span class="o">+</span> <span class="sc">'\''</span> <span class="o">+</span>
+        <span class="sc">'}'</span><span class="o">;</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<p>同样,我们需要提供服务应用启动入口以及 <code class="highlighter-rouge">microservice.yaml</code>:</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@SpringBootApplication</span>
+<span class="nd">@EnableServiceComb</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">DoormanApplication</span> <span class="o">{</span>
+
+  <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
+    <span class="n">SpringApplication</span><span class="o">.</span><span class="na">run</span><span class="o">(</span><span class="n">DoormanApplication</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">args</span><span class="o">);</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="c1"># all interconnected microservices must belong to an application wth the same ID</span>
+<span class="s">APPLICATION_ID</span><span class="pi">:</span> <span class="s">company</span>
+<span class="s">service_description</span><span class="pi">:</span>
+<span class="c1"># name of the declaring microservice</span>
+  <span class="s">name</span><span class="pi">:</span> <span class="s">doorman</span>
+  <span class="s">version</span><span class="pi">:</span> <span class="s">0.0.1</span>
+<span class="s">cse</span><span class="pi">:</span>
+  <span class="s">service</span><span class="pi">:</span>
+    <span class="s">registry</span><span class="pi">:</span>
+      <span class="s">address</span><span class="pi">:</span> <span class="s">http://sc.servicecomb.io:30100</span>
+  <span class="s">rest</span><span class="pi">:</span>
+    <span class="s">address</span><span class="pi">:</span> <span class="s">0.0.0.0:9090</span>
+</code></pre>
+</div>
+
+<h2 id="经理-manager">经理 (Manager)</h2>
+<p>为了管理所有人员和设施,<strong>经理</strong>作为用户唯一接口人,主要功能有:</p>
+
+<ul>
+  <li>
+    <p>联系<strong>门卫</strong>认证用户,保护<strong>技工</strong>和<strong>养蜂人</strong>,以免非法用户骗取服务并逃避服务费用</p>
+  </li>
+  <li>
+    <p>联系能力相符的<strong>技工</strong>和<strong>养蜂人</strong>,平衡工作量,避免单个人员工作超载</p>
+  </li>
+  <li>
+    <p>管理<strong>项目归档</strong>,避免重复工作,保证公司收益最大化</p>
+  </li>
+</ul>
+
+<p>由于<strong>经理</strong>责任重大,我们选取了业界有名的<a href="https://github.com/Netflix/zuul">Netflix Zuul</a>作为候选人并加以培训,
+提升其能力,以保证其能胜任该职位。</p>
+
+<p>首先我们引入依赖:</p>
+
+<div class="language-xml highlighter-rouge"><pre class="highlight"><code>  <span class="nt">&lt;dependency&gt;</span>
+    <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+    <span class="nt">&lt;artifactId&gt;</span>spring-boot-starter-discovery<span class="nt">&lt;/artifactId&gt;</span>
+  <span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+</div>
+
+<h3 id="用户认证服务">用户认证服务</h3>
+<p>当用户发送非登录请求时,我们首先需要验证用户合法,在如下服务中,我们通过<strong>告示栏</strong>获取<strong>门卫</strong>联系方式,
+然后发送用户token给<strong>门卫</strong>进行认证。</p>
+
+<p><code class="highlighter-rouge">ServiceComb</code> 提供了相应 <code class="highlighter-rouge">RestTemplate</code> 实现查询<a href="https://github.com/ServiceComb/service-center">Service Center</a>
+中的服务注册信息,只需在地址中以如下格式包含被调用的服务名</p>
+
+<div class="language-html highlighter-rouge"><pre class="highlight"><code>cse://doorman/path/to/rest/endpoint
+</code></pre>
+</div>
+
+<p><code class="highlighter-rouge">ServiceComb</code> 将自动查询对应服务并发送请求到地址中的服务端点。</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@Service</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">AuthenticationService</span> <span class="o">{</span>
+
+  <span class="kd">private</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">Logger</span> <span class="n">logger</span> <span class="o">=</span> <span class="n">LoggerFactory</span><span class="o">.</span><span class="na">getLogger</span><span class="o">(</span><span class="n">AuthenticationService</span><span class="o">.</span><span class="na">class</span><span class="o">);</span>
+  <span class="kd">private</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">DOORMAN_ADDRESS</span> <span class="o">=</span> <span class="s">"cse://doorman"</span><span class="o">;</span>
+
+  <span class="kd">private</span> <span class="kd">final</span> <span class="n">RestTemplate</span> <span class="n">restTemplate</span><span class="o">;</span>
+
+  <span class="n">AuthenticationService</span><span class="o">()</span> <span class="o">{</span>
+    <span class="k">this</span><span class="o">.</span><span class="na">restTemplate</span> <span class="o">=</span> <span class="n">RestTemplateBuilder</span><span class="o">.</span><span class="na">create</span><span class="o">();</span>
+
+    <span class="k">this</span><span class="o">.</span><span class="na">restTemplate</span><span class="o">.</span><span class="na">setErrorHandler</span><span class="o">(</span><span class="k">new</span> <span class="n">ResponseErrorHandler</span><span class="o">()</span> <span class="o">{</span>
+      <span class="nd">@Override</span>
+      <span class="kd">public</span> <span class="kt">boolean</span> <span class="nf">hasError</span><span class="o">(</span><span class="n">ClientHttpResponse</span> <span class="n">clientHttpResponse</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">IOException</span> <span class="o">{</span>
+        <span class="k">return</span> <span class="kc">false</span><span class="o">;</span>
+      <span class="o">}</span>
+
+      <span class="nd">@Override</span>
+      <span class="kd">public</span> <span class="kt">void</span> <span class="nf">handleError</span><span class="o">(</span><span class="n">ClientHttpResponse</span> <span class="n">clientHttpResponse</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">IOException</span> <span class="o">{</span>
+      <span class="o">}</span>
+    <span class="o">});</span>
+  <span class="o">}</span>
+
+  <span class="nd">@HystrixCommand</span><span class="o">(</span><span class="n">fallbackMethod</span> <span class="o">=</span> <span class="s">"timeout"</span><span class="o">)</span>
+  <span class="kd">public</span> <span class="n">ResponseEntity</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span> <span class="nf">validate</span><span class="o">(</span><span class="n">String</span> <span class="n">token</span><span class="o">)</span> <span class="o">{</span>
+    <span class="n">logger</span><span class="o">.</span><span class="na">info</span><span class="o">(</span><span class="s">"Validating token {}"</span><span class="o">,</span> <span class="n">token</span><span class="o">);</span>
+    <span class="n">ResponseEntity</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span> <span class="n">responseEntity</span> <span class="o">=</span> <span class="n">restTemplate</span><span class="o">.</span><span class="na">postForEntity</span><span class="o">(</span>
+        <span class="n">DOORMAN_ADDRESS</span> <span class="o">+</span> <span class="s">"/rest/validate"</span><span class="o">,</span>
+        <span class="n">validationRequest</span><span class="o">(</span><span class="n">token</span><span class="o">),</span>
+        <span class="n">String</span><span class="o">.</span><span class="na">class</span>
+    <span class="o">);</span>
+
+    <span class="k">if</span> <span class="o">(!</span><span class="n">responseEntity</span><span class="o">.</span><span class="na">getStatusCode</span><span class="o">().</span><span class="na">is2xxSuccessful</span><span class="o">())</span> <span class="o">{</span>
+      <span class="n">logger</span><span class="o">.</span><span class="na">warn</span><span class="o">(</span><span class="s">"No such user found with token {}"</span><span class="o">,</span> <span class="n">token</span><span class="o">);</span>
+    <span class="o">}</span>
+    <span class="n">logger</span><span class="o">.</span><span class="na">info</span><span class="o">(</span><span class="s">"Validated request of token {} to be user {}"</span><span class="o">,</span> <span class="n">token</span><span class="o">,</span> <span class="n">responseEntity</span><span class="o">.</span><span class="na">getBody</span><span class="o">());</span>
+    <span class="k">return</span> <span class="n">responseEntity</span><span class="o">;</span>
+  <span class="o">}</span>
+
+  <span class="kd">private</span> <span class="n">ResponseEntity</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span> <span class="nf">timeout</span><span class="o">(</span><span class="n">String</span> <span class="n">token</span><span class="o">)</span> <span class="o">{</span>
+    <span class="n">logger</span><span class="o">.</span><span class="na">warn</span><span class="o">(</span><span class="s">"Request to validate token {} timed out"</span><span class="o">,</span> <span class="n">token</span><span class="o">);</span>
+    <span class="k">return</span> <span class="k">new</span> <span class="n">ResponseEntity</span><span class="o">&lt;&gt;(</span><span class="n">REQUEST_TIMEOUT</span><span class="o">);</span>
+  <span class="o">}</span>
+
+  <span class="kd">private</span> <span class="n">HttpEntity</span><span class="o">&lt;</span><span class="n">Token</span><span class="o">&gt;</span> <span class="nf">validationRequest</span><span class="o">(</span><span class="n">String</span> <span class="n">token</span><span class="o">)</span> <span class="o">{</span>
+    <span class="n">HttpHeaders</span> <span class="n">headers</span> <span class="o">=</span> <span class="k">new</span> <span class="n">HttpHeaders</span><span class="o">();</span>
+    <span class="n">headers</span><span class="o">.</span><span class="na">setContentType</span><span class="o">(</span><span class="n">MediaType</span><span class="o">.</span><span class="na">APPLICATION_JSON_UTF8</span><span class="o">);</span>
+
+    <span class="k">return</span> <span class="k">new</span> <span class="n">HttpEntity</span><span class="o">&lt;&gt;(</span><span class="k">new</span> <span class="n">Token</span><span class="o">(</span><span class="n">token</span><span class="o">),</span> <span class="n">headers</span><span class="o">);</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<h3 id="请求过滤">请求过滤</h3>
+<p>接下来我们提供 <code class="highlighter-rouge">ZuulFilter</code> 实现过滤用户请求,调用 <code class="highlighter-rouge">authenticationService.validate(token)</code> 认证用户token。
+若用户合法则路由用户请求到对应服务,否则返回 <code class="highlighter-rouge">403 forbidden</code>。</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@Component</span>
+<span class="kd">class</span> <span class="nc">AuthenticationAwareFilter</span> <span class="kd">extends</span> <span class="n">ZuulFilter</span> <span class="o">{</span>
+
+  <span class="kd">private</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">Logger</span> <span class="n">logger</span> <span class="o">=</span> <span class="n">LoggerFactory</span><span class="o">.</span><span class="na">getLogger</span><span class="o">(</span><span class="n">AuthenticationAwareFilter</span><span class="o">.</span><span class="na">class</span><span class="o">);</span>
+
+  <span class="kd">private</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">LOGIN_PATH</span> <span class="o">=</span> <span class="s">"/login"</span><span class="o">;</span>
+
+  <span class="kd">private</span> <span class="kd">final</span> <span class="n">AuthenticationService</span> <span class="n">authenticationService</span><span class="o">;</span>
+  <span class="kd">private</span> <span class="kd">final</span> <span class="n">PathExtractor</span> <span class="n">pathExtractor</span><span class="o">;</span>
+
+  <span class="nd">@Autowired</span>
+  <span class="n">AuthenticationAwareFilter</span><span class="o">(</span>
+      <span class="n">AuthenticationService</span> <span class="n">authenticationService</span><span class="o">,</span>
+      <span class="n">PathExtractor</span> <span class="n">pathExtractor</span><span class="o">)</span> <span class="o">{</span>
+
+    <span class="k">this</span><span class="o">.</span><span class="na">authenticationService</span> <span class="o">=</span> <span class="n">authenticationService</span><span class="o">;</span>
+    <span class="k">this</span><span class="o">.</span><span class="na">pathExtractor</span> <span class="o">=</span> <span class="n">pathExtractor</span><span class="o">;</span>
+  <span class="o">}</span>
+
+  <span class="nd">@Override</span>
+  <span class="kd">public</span> <span class="n">String</span> <span class="nf">filterType</span><span class="o">()</span> <span class="o">{</span>
+    <span class="k">return</span> <span class="s">"pre"</span><span class="o">;</span>
+  <span class="o">}</span>
+
+  <span class="nd">@Override</span>
+  <span class="kd">public</span> <span class="kt">int</span> <span class="nf">filterOrder</span><span class="o">()</span> <span class="o">{</span>
+    <span class="k">return</span> <span class="mi">1</span><span class="o">;</span>
+  <span class="o">}</span>
+
+  <span class="nd">@Override</span>
+  <span class="kd">public</span> <span class="kt">boolean</span> <span class="nf">shouldFilter</span><span class="o">()</span> <span class="o">{</span>
+    <span class="n">String</span> <span class="n">path</span> <span class="o">=</span> <span class="n">pathExtractor</span><span class="o">.</span><span class="na">path</span><span class="o">(</span><span class="n">RequestContext</span><span class="o">.</span><span class="na">getCurrentContext</span><span class="o">());</span>
+    <span class="n">logger</span><span class="o">.</span><span class="na">info</span><span class="o">(</span><span class="s">"Received request with query path: {}"</span><span class="o">,</span> <span class="n">path</span><span class="o">);</span>
+    <span class="k">return</span> <span class="o">!</span><span class="n">path</span><span class="o">.</span><span class="na">endsWith</span><span class="o">(</span><span class="n">LOGIN_PATH</span><span class="o">);</span>
+  <span class="o">}</span>
+
+  <span class="nd">@Override</span>
+  <span class="kd">public</span> <span class="n">Object</span> <span class="nf">run</span><span class="o">()</span> <span class="o">{</span>
+    <span class="n">filter</span><span class="o">();</span>
+    <span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
+  <span class="o">}</span>
+
+  <span class="kd">private</span> <span class="kt">void</span> <span class="nf">filter</span><span class="o">()</span> <span class="o">{</span>
+    <span class="n">RequestContext</span> <span class="n">context</span> <span class="o">=</span> <span class="n">RequestContext</span><span class="o">.</span><span class="na">getCurrentContext</span><span class="o">();</span>
+
+    <span class="k">if</span> <span class="o">(</span><span class="n">doesNotContainToken</span><span class="o">(</span><span class="n">context</span><span class="o">))</span> <span class="o">{</span>
+      <span class="n">logger</span><span class="o">.</span><span class="na">warn</span><span class="o">(</span><span class="s">"No token found in request header"</span><span class="o">);</span>
+      <span class="n">rejectRequest</span><span class="o">(</span><span class="n">context</span><span class="o">);</span>
+    <span class="o">}</span> <span class="k">else</span> <span class="o">{</span>
+      <span class="n">String</span> <span class="n">token</span> <span class="o">=</span> <span class="n">token</span><span class="o">(</span><span class="n">context</span><span class="o">);</span>
+      <span class="n">ResponseEntity</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span> <span class="n">responseEntity</span> <span class="o">=</span> <span class="n">authenticationService</span><span class="o">.</span><span class="na">validate</span><span class="o">(</span><span class="n">token</span><span class="o">);</span>
+      <span class="k">if</span> <span class="o">(!</span><span class="n">responseEntity</span><span class="o">.</span><span class="na">getStatusCode</span><span class="o">().</span><span class="na">is2xxSuccessful</span><span class="o">())</span> <span class="o">{</span>
+        <span class="n">logger</span><span class="o">.</span><span class="na">warn</span><span class="o">(</span><span class="s">"Unauthorized token {} and request rejected"</span><span class="o">,</span> <span class="n">token</span><span class="o">);</span>
+        <span class="n">rejectRequest</span><span class="o">(</span><span class="n">context</span><span class="o">);</span>
+      <span class="o">}</span> <span class="k">else</span> <span class="o">{</span>
+        <span class="n">logger</span><span class="o">.</span><span class="na">info</span><span class="o">(</span><span class="s">"Token {} validated"</span><span class="o">,</span> <span class="n">token</span><span class="o">);</span>
+      <span class="o">}</span>
+    <span class="o">}</span>
+  <span class="o">}</span>
+
+  <span class="kd">private</span> <span class="kt">void</span> <span class="nf">rejectRequest</span><span class="o">(</span><span class="n">RequestContext</span> <span class="n">context</span><span class="o">)</span> <span class="o">{</span>
+    <span class="n">context</span><span class="o">.</span><span class="na">setResponseStatusCode</span><span class="o">(</span><span class="n">SC_FORBIDDEN</span><span class="o">);</span>
+    <span class="n">context</span><span class="o">.</span><span class="na">setSendZuulResponse</span><span class="o">(</span><span class="kc">false</span><span class="o">);</span>
+  <span class="o">}</span>
+
+  <span class="kd">private</span> <span class="kt">boolean</span> <span class="nf">doesNotContainToken</span><span class="o">(</span><span class="n">RequestContext</span> <span class="n">context</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">return</span> <span class="nf">authorizationHeader</span><span class="o">(</span><span class="n">context</span><span class="o">)</span> <span class="o">==</span> <span class="kc">null</span>
+        <span class="o">||</span> <span class="o">!</span><span class="n">authorizationHeader</span><span class="o">(</span><span class="n">context</span><span class="o">).</span><span class="na">startsWith</span><span class="o">(</span><span class="n">TOKEN_PREFIX</span><span class="o">);</span>
+  <span class="o">}</span>
+
+  <span class="kd">private</span> <span class="n">String</span> <span class="nf">token</span><span class="o">(</span><span class="n">RequestContext</span> <span class="n">context</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">return</span> <span class="nf">authorizationHeader</span><span class="o">(</span><span class="n">context</span><span class="o">).</span><span class="na">replace</span><span class="o">(</span><span class="n">TOKEN_PREFIX</span><span class="o">,</span> <span class="s">""</span><span class="o">);</span>
+  <span class="o">}</span>
+
+  <span class="kd">private</span> <span class="n">String</span> <span class="nf">authorizationHeader</span><span class="o">(</span><span class="n">RequestContext</span> <span class="n">context</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">return</span> <span class="n">context</span><span class="o">.</span><span class="na">getRequest</span><span class="o">().</span><span class="na">getHeader</span><span class="o">(</span><span class="n">AUTHORIZATION</span><span class="o">);</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<p>最后提供服务应用入口:</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@SpringBootApplication</span>
+<span class="nd">@EnableCircuitBreaker</span>
+<span class="nd">@EnableZuulProxy</span>
+<span class="nd">@EnableDiscoveryClient</span>
+<span class="nd">@EnableServiceComb</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">ManagerApplication</span> <span class="o">{</span>
+
+  <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
+    <span class="n">SpringApplication</span><span class="o">.</span><span class="na">run</span><span class="o">(</span><span class="n">ManagerApplication</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">args</span><span class="o">);</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<p><code class="highlighter-rouge">application.yaml</code> 中定义路由规则:</p>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">zuul</span><span class="pi">:</span>
+  <span class="s">routes</span><span class="pi">:</span>
+    <span class="s">doorman</span><span class="pi">:</span>
+      <span class="s">serviceId</span><span class="pi">:</span> <span class="s">doorman</span>
+      <span class="s">sensitiveHeaders</span><span class="pi">:</span>
+    <span class="s">worker</span><span class="pi">:</span>
+      <span class="s">serviceId</span><span class="pi">:</span> <span class="s">worker</span>
+    <span class="s">beekeeper</span><span class="pi">:</span>
+      <span class="s">serviceId</span><span class="pi">:</span> <span class="s">beekeeper</span>
+
+<span class="c1"># disable netflix eurkea since it's not used for service discovery</span>
+<span class="s">ribbon</span><span class="pi">:</span>
+  <span class="s">eureka</span><span class="pi">:</span>
+    <span class="s">enabled</span><span class="pi">:</span> <span class="s">false</span>
+</code></pre>
+</div>
+
+<p><code class="highlighter-rouge">microservice.yaml</code> 中定义服务中心地址:</p>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">APPLICATION_ID</span><span class="pi">:</span> <span class="s">company</span>
+<span class="s">service_description</span><span class="pi">:</span>
+  <span class="s">name</span><span class="pi">:</span> <span class="s">manager</span>
+  <span class="s">version</span><span class="pi">:</span> <span class="s">0.0.1</span>
+<span class="s">cse</span><span class="pi">:</span>
+  <span class="s">service</span><span class="pi">:</span>
+    <span class="s">registry</span><span class="pi">:</span>
+      <span class="s">address</span><span class="pi">:</span> <span class="s">http://sc.servicecomb.io:30100</span>
+</code></pre>
+</div>
+
+<h2 id="项目归档-project-archive">项目归档 (Project Archive)</h2>
+<p><strong>经理</strong>在每次用户请求后将项目进行归档,如果将来有内容相同的请求到达,<strong>经理</strong>可以就近获取结果,不必再购买
+<strong>技工</strong>和<strong>养蜂人</strong>提供的计算服务,节省公司开支。</p>
+
+<p>对于归档功能的实现,我们采用了<strong>Spring Cache Abstraction</strong>,具体细节超出了这篇文章的范围,大家如果有兴趣可以
+查看github上<a href="https://github.com/ServiceComb/LinuxCon-Beijing-WorkShop">workshop</a>的 <code class="highlighter-rouge">manager</code> 模块代码。</p>
+
+<h2 id="人力资源-human-resource">人力资源 (Human Resource)</h2>
+
+<p><strong>人力资源</strong>从运维层面保证服务的可靠性,主要功能有</p>
+
+<ul>
+  <li>
+    <p>弹性伸缩,以保证用户请求量超过<strong>技工</strong>或<strong>养蜂人</strong>处理能力后,招聘更多<strong>技工</strong>或<strong>养蜂人</strong>加入项目;当请求量回落后,裁剪<strong>技工</strong>或<strong>养蜂人</strong>以节省公司开支</p>
+  </li>
+  <li>
+    <p>健康检查,以保证<strong>技工</strong>或<strong>养蜂人</strong>告病时,能有替补接手任务</p>
+  </li>
+  <li>
+    <p>滚动升级,以保证项目需要新技能时,能替换、培训<strong>技工</strong>或<strong>养蜂人</strong>,不中断接收用户请求</p>
+  </li>
+</ul>
+
+<p><strong>人力资源</strong>的功能需要云平台提供支持,在后续的文章中会跟大家介绍,我们如何在华为云上轻松实现这些功能。</p>
+
+<h2 id="总结">总结</h2>
+<p>在这篇文章中,我们用一个公司的组织结构作为例子,给大家介绍了微服务的完整架构,以及如何使用微服务框架 <code class="highlighter-rouge">ServiceComb</code>
+快速开发微服务,以及服务间互通、契约认证。</p>
+
+<p><a href="https://github.com/ServiceComb/LinuxCon-Beijing-WorkShop">Workshop demo</a>项目也包含大量完整易懂的测试
+代码,以及使用docker集成微服务,模拟生存环境,同时应用<a href="https://travis-ci.org/">Travis</a>搭建持续集成环境,体现
+DevOps在微服务开发中的实践。希望能对大家有所帮助。</p>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+  
+
+
+  
+  
+  
+
+  <p class="page__taxonomy">
+    <strong><i class="fa fa-fw fa-tags" aria-hidden="true"></i> Tags: </strong>
+    <span itemprop="keywords">
+    
+      
+      
+      <a href="/tags/#demo" class="page__taxonomy-item" rel="tag">demo</a>
+    
+    </span>
+  </p>
+
+
+
+
+
+        
+          
+            
+              <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> Updated:</strong> <time datetime="2017-06-15">June 15, 2017</time></p>
+            
+          
+        
+      </footer>
+
+      <section class="page__share">
+  
+    <h4 class="page__share-title">Share on</h4>
+  
+
+  <a href="https://twitter.com/intent/tweet?via=ServiceComb&text=Linux Con Workshop Demo /docs/linuxcon-workshop-demo/" class="btn btn--twitter" title="Share on Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
+
+  <a href="https://www.facebook.com/sharer/sharer.php?u=/docs/linuxcon-workshop-demo/" class="btn btn--facebook" title="Share on Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
+
+  <a href="https://plus.google.com/share?url=/docs/linuxcon-workshop-demo/" class="btn btn--google-plus" title="Share on Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
+
+  <a href="https://www.linkedin.com/shareArticle?mini=true&url=/docs/linuxcon-workshop-demo/" class="btn btn--linkedin" title="Share on LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
+</section>
+
+
+      
+  <nav class="pagination">
+    
+      <a href="#" class="pagination--pager disabled">Previous</a>
+    
+    
+      <a href="/cn/docs/linuxcon-workshop-demo/" class="pagination--pager" title="Linux Con Workshop Demo
+">Next</a>
+    
+  </nav>
+
+
+    </div>
+
+    
+      <div class="page__comments">
+  
+  
+    <section id="static-comments">
+      
+        <!-- Start static comments -->
+        <div class="js-comments">
+          
+        </div>
+        <!-- End static comments -->
+
+        <!-- Start new comment form -->
+        <h4 class="page__comments-title">Leave a Comment</h4>
+        <p class="small">Your email address will not be published. Required fields are marked <span class="required">*</span></p>
+        <form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/ServiceComb/servicesomb.github.io/master">
+          <div class="form__spinner">
+            <i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
+            <span class="sr-only">Loading...</span>
+          </div>
+
+          <fieldset>
+            <label for="comment-form-message">Comment <small class="required">*</small></label>
+            <textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
+            <div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">Markdown is supported.</a></div>
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-name">Name <small class="required">*</small></label>
+            <input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-email">Email address <small class="required">*</small></label>
+            <input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-url">Website (optional)</label>
+            <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
+          </fieldset>
+          <fieldset class="hidden" style="display: none;">
+            <input type="hidden" name="options[slug]" value="linuxcon-workshop-demo">
+            <label for="comment-form-location">Not used. Leave blank if you are a human.</label>
+            <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
+          </fieldset>
+          <!-- Start comment form alert messaging -->
+          <p class="hidden js-notice">
+            <strong class="js-notice-text"></strong>
+          </p>
+          <!-- End comment form alert messaging -->
+          <fieldset>
+            <button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--large">Submit Comment</button>
+          </fieldset>
+        </form>
+        <!-- End new comment form -->
+      
+    </section>
+  
+</div>
+
+    
+  </article>
+
+  
+  
+    <div class="page__related">
+      <h4 class="page__related-title">You May Also Enjoy</h4>
+      <div class="grid__wrapper">
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/jira_beginner_guide/" rel="permalink">老司机带你刷任务 - ServiceComb JIRA入门指南
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">ServiceComb JIRA入门指南
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  less than 1 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/how-to-reform-a-legacy-system/" rel="permalink">最头疼的遗留系统该如何改造?
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  1 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+      </div>
+    </div>
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _posts/2017-06-15-linuxcon-workshop-demo.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_posts/2017-06-15-linuxcon-workshop-demo.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  
+  <script>
+    (function ($) {
+    var $comments = $('.js-comments');
+
+    $('#new_comment').submit(function () {
+      var form = this;
+
+      $(form).addClass('disabled');
+      $('#comment-form-submit').html('<i class="fa fa-spinner fa-spin fa-fw"></i> Loading...');
+
+      $.ajax({
+        type: $(this).attr('method'),
+        url: $(this).attr('action'),
+        data: $(this).serialize(),
+        contentType: 'application/x-www-form-urlencoded',
+        success: function (data) {
+          $('#comment-form-submit').html('Submitted');
+          $('.page__comments-form .js-notice').removeClass('notice--danger');
+          $('.page__comments-form .js-notice').addClass('notice--success');
+          showAlert('Thanks for your comment! It will show on the site once it has been approved.');
+        },
+        error: function (err) {
+          console.log(err);
+          $('#comment-form-submit').html('Submit Comment');
+          $('.page__comments-form .js-notice').removeClass('notice--success');
+          $('.page__comments-form .js-notice').addClass('notice--danger');
+          showAlert('Sorry, there was an error with your submission. Please make sure all required fields have been completed and try again.');
+          $(form).removeClass('disabled');
+        }
+      });
+
+      return false;
+    });
+
+    function showAlert(message) {
+      $('.page__comments-form .js-notice').removeClass('hidden');
+      $('.page__comments-form .js-notice-text').html(message);
+    }
+  })(jQuery);
+  </script>
+
+
+
+
+
+
+
+  </body>
+</html>



[57/57] incubator-servicecomb-website git commit: Updated the content files

Posted by ni...@apache.org.
Updated the content files


Project: http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/commit/dd9482e3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/tree/dd9482e3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/diff/dd9482e3

Branch: refs/heads/asf-site
Commit: dd9482e3c332fdd86401c8dbae11d6f2100adb5d
Parents: e0c6d4f
Author: Willem Jiang <ji...@huawei.com>
Authored: Tue Dec 12 16:45:36 2017 +0800
Committer: Willem Jiang <ji...@huawei.com>
Committed: Tue Dec 12 16:45:36 2017 +0800

----------------------------------------------------------------------
 content/cn/docs/go-to-cloud/index.html          |  2 +-
 content/cn/faqs/index.html                      | 11 +++++--
 .../cn/users/communicate-protocol/index.html    |  2 +-
 .../cn/users/develop-with-springmvc/index.html  |  2 +-
 .../cn/users/service-configurations/index.html  |  2 +-
 content/cn/users/setup-environment/index.html   |  8 +++---
 .../use-servicecomb-in-spring-boot/index.html   |  2 +-
 content/cn/users/use-tls/index.html             |  2 +-
 .../quick-start-advance/flow-control/index.html |  2 +-
 content/feed.xml                                |  2 +-
 content/index.html                              |  2 +-
 content/users/communicate-protocol/index.html   |  2 +-
 content/users/develop-with-springmvc/index.html |  2 +-
 content/users/service-configurations/index.html |  2 +-
 content/users/setup-environment/index.html      | 30 +++++++++++---------
 .../use-servicecomb-in-spring-boot/index.html   |  2 +-
 content/users/use-tls/index.html                |  2 +-
 17 files changed, 42 insertions(+), 35 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/dd9482e3/content/cn/docs/go-to-cloud/index.html
----------------------------------------------------------------------
diff --git a/content/cn/docs/go-to-cloud/index.html b/content/cn/docs/go-to-cloud/index.html
index ddc8c5c..37b4cc8 100644
--- a/content/cn/docs/go-to-cloud/index.html
+++ b/content/cn/docs/go-to-cloud/index.html
@@ -496,7 +496,7 @@
 <p>该缺少的jar包为商业版本特性,请联系华为公有云 Service Stage 团队获取(此jar上云必选,否则无法使用Service Stage service centerc/config center/调用链等特性;本地调试时huawei商业版本的几个包依赖可以去掉,可以实现本地的服务发现和注册)。<br />
 如果需要将jar包复制到maven本地仓库中,具体包列表如下:<br />
 <img src="/assets/images/jar-list.png" alt="jar-list" class="align-center" /><br />
-eclispe中更新工程:Maven - - Update Project…</p>
+eclipse中更新工程:Maven - - Update Project…</p>
 
 <h3 id="修改微服务描述文件">修改微服务描述文件</h3>
 

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/dd9482e3/content/cn/faqs/index.html
----------------------------------------------------------------------
diff --git a/content/cn/faqs/index.html b/content/cn/faqs/index.html
index c2f5923..c0bfa82 100644
--- a/content/cn/faqs/index.html
+++ b/content/cn/faqs/index.html
@@ -499,7 +499,7 @@
          <span class="s">200</span><span class="pi">:</span>
            <span class="s">description</span><span class="pi">:</span> <span class="s2">"</span><span class="s">response</span><span class="nv"> </span><span class="s">of</span><span class="nv"> </span><span class="s">200"</span>
            <span class="s">schema</span><span class="pi">:</span>
-             <span class="s">$ref</span><span class="pi">:</span> <span class="s2">"</span><span class="s">#/definitions/ReponseImpl"</span>
+             <span class="s">$ref</span><span class="pi">:</span> <span class="s2">"</span><span class="s">#/definitions/ResponseImpl"</span>
 </code></pre>
     </div>
 
@@ -524,7 +524,7 @@
          <span class="s">200</span><span class="pi">:</span>
            <span class="s">description</span><span class="pi">:</span> <span class="s2">"</span><span class="s">response</span><span class="nv"> </span><span class="s">of</span><span class="nv"> </span><span class="s">200"</span>
            <span class="s">schema</span><span class="pi">:</span>
-             <span class="s">$ref</span><span class="pi">:</span> <span class="s2">"</span><span class="s">#/definitions/ReponseImpl"</span>
+             <span class="s">$ref</span><span class="pi">:</span> <span class="s2">"</span><span class="s">#/definitions/ResponseImpl"</span>
 </code></pre>
     </div>
   </li>
@@ -774,7 +774,7 @@
   <li>
     <p><strong>Q: Transport是个什么概念?用来干什么的?</strong></p>
 
-    <p>A: transport负责编解码,以及传输。通信模型有rest和highway两种,highway对应的是私有协议,使用protobuf编码,rest用的是json。hightway和rest都是基于vertx做的,vertx是基于netty的。</p>
+    <p>A: transport负责编解码,以及传输。通信模型有rest和highway两种,highway对应的是私有协议,使用protobuf编码,rest用的是json。highway和rest都是基于vertx做的,vertx是基于netty的。</p>
   </li>
   <li>
     <p><strong>Q: 框架中引入了vertx会有什么好处?</strong></p>
@@ -875,6 +875,11 @@
 </code></pre>
     </div>
   </li>
+  <li>
+    <p><strong>Q: 微服务运行时抛出异常:<code class="highlighter-rouge"> java.lang.Error:not support def type:calss io.swagger.models.properties BaseIntegerProperty</code>?</strong></p>
+
+    <p>A: 可将Service Center升级至0.4.0+版本来解决,<a href="https://github.com/ServiceComb/service-center/releases">Service Center最新版本传送门</a>。</p>
+  </li>
 </ul>
 
         

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/dd9482e3/content/cn/users/communicate-protocol/index.html
----------------------------------------------------------------------
diff --git a/content/cn/users/communicate-protocol/index.html b/content/cn/users/communicate-protocol/index.html
index 5eb1a49..4260eb0 100644
--- a/content/cn/users/communicate-protocol/index.html
+++ b/content/cn/users/communicate-protocol/index.html
@@ -616,7 +616,7 @@
 
 <h3 id="完整线程">完整线程</h3>
 
-<p>ServicecComb微服务的完整线程模型如下图所示:</p>
+<p>ServiceComb微服务的完整线程模型如下图所示:</p>
 
 <p><img src="/assets/images/thread-model.png" alt="" /></p>
 

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/dd9482e3/content/cn/users/develop-with-springmvc/index.html
----------------------------------------------------------------------
diff --git a/content/cn/users/develop-with-springmvc/index.html b/content/cn/users/develop-with-springmvc/index.html
index cf89223..06d40ec 100644
--- a/content/cn/users/develop-with-springmvc/index.html
+++ b/content/cn/users/develop-with-springmvc/index.html
@@ -648,7 +648,7 @@
         <span class="na">xsi:schemaLocation=</span><span class="s">"http://www.springframework.org/schema/beans</span> <span class="err">classpath:org/springframework/beans/factory/xml/spring-beans-3.0.xsd</span>
         <span class="err">http://www.springframework.org/schema/context</span> <span class="err">http://www.springframework.org/schema/context/spring-context-3.0.xsd"</span><span class="nt">&gt;</span>
    
-     <span class="nt">&lt;context:component-scan</span> <span class="na">base-package=</span><span class="s">"io.servicecomb.samples.springmvc.povider"</span><span class="nt">/&gt;</span>
+     <span class="nt">&lt;context:component-scan</span> <span class="na">base-package=</span><span class="s">"io.servicecomb.samples.springmvc.provider"</span><span class="nt">/&gt;</span>
  <span class="nt">&lt;/beans&gt;</span>
 </code></pre>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/dd9482e3/content/cn/users/service-configurations/index.html
----------------------------------------------------------------------
diff --git a/content/cn/users/service-configurations/index.html b/content/cn/users/service-configurations/index.html
index 52c9ce7..5dc38aa 100644
--- a/content/cn/users/service-configurations/index.html
+++ b/content/cn/users/service-configurations/index.html
@@ -597,7 +597,7 @@
 
 <h3 id="配置说明">配置说明</h3>
 
-<p>  负载均衡策略在mocroservice.yaml文件中配置,配置项为<code class="highlighter-rouge">cse.loadbalance.[MicroServiceName].[property name]</code>,其中若省略MicroServiceName,则为全局配置;若指定MicroServiceName,则为针对特定微服务的配置。</p>
+<p>  负载均衡策略在microservice.yaml文件中配置,配置项为<code class="highlighter-rouge">cse.loadbalance.[MicroServiceName].[property name]</code>,其中若省略MicroServiceName,则为全局配置;若指定MicroServiceName,则为针对特定微服务的配置。</p>
 
 <p>  <strong>表1 配置项说明</strong></p>
 

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/dd9482e3/content/cn/users/setup-environment/index.html
----------------------------------------------------------------------
diff --git a/content/cn/users/setup-environment/index.html b/content/cn/users/setup-environment/index.html
index 8d18382..f86fe3c 100644
--- a/content/cn/users/setup-environment/index.html
+++ b/content/cn/users/setup-environment/index.html
@@ -604,7 +604,7 @@
     <div class="tab-content">
   <div id="windows" class="tab-pane active">
         <ol>
-          <li>下载<a href="https://github.com/ServiceComb/service-center/releases/download/0.1.1/service-center-0.1.1-windows-amd64.zip">服务注册中心可执行文件压缩包</a></li>
+          <li>下载<a href="https://github.com/ServiceComb/service-center/releases/download/0.5.0/service-center-0.5.0-windows-amd64.zip">服务注册中心可执行文件压缩包</a></li>
           <li>解压缩到当前文件夹</li>
           <li>进入解压缩后的目录,然后双击运行<strong>start</strong>文件</li>
         </ol>
@@ -612,13 +612,13 @@
   <div id="linux" class="tab-pane fade">
         <ol>
           <li>下载服务注册中心可执行文件压缩包并解压缩
-            <div class="language-bash highlighter-rouge"><pre class="highlight"><code>wget https://github.com/ServiceComb/service-center/releases/download/0.1.1/service-center-0.1.1-linux-amd64.tar.gz
-tar xvf service-center-0.1.1-linux-amd64.tar.gz
+            <div class="language-bash highlighter-rouge"><pre class="highlight"><code>wget https://github.com/ServiceComb/service-center/releases/download/0.5.0/service-center-0.5.0-linux-amd64.tar.gz
+tar xvf service-center-0.5.0-linux-amd64.tar.gz
 </code></pre>
             </div>
           </li>
           <li>运行服务注册中心
-            <div class="language-bash highlighter-rouge"><pre class="highlight"><code>bash service-center-0.1.1-linux-amd64/start.sh
+            <div class="language-bash highlighter-rouge"><pre class="highlight"><code>bash service-center-0.5.0-linux-amd64/start.sh
 </code></pre>
             </div>
           </li>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/dd9482e3/content/cn/users/use-servicecomb-in-spring-boot/index.html
----------------------------------------------------------------------
diff --git a/content/cn/users/use-servicecomb-in-spring-boot/index.html b/content/cn/users/use-servicecomb-in-spring-boot/index.html
index c1c8f39..22281ad 100644
--- a/content/cn/users/use-servicecomb-in-spring-boot/index.html
+++ b/content/cn/users/use-servicecomb-in-spring-boot/index.html
@@ -732,7 +732,7 @@
     </div>
   </li>
   <li>
-    <p><strong>步骤 7</strong> 启动xxxServer,该服务便可注册到ServieComb的Service Center。</p>
+    <p><strong>步骤 7</strong> 启动xxxServer,该服务便可注册到ServiceComb的Service Center。</p>
   </li>
 </ul>
 

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/dd9482e3/content/cn/users/use-tls/index.html
----------------------------------------------------------------------
diff --git a/content/cn/users/use-tls/index.html b/content/cn/users/use-tls/index.html
index d0493fe..29976d5 100644
--- a/content/cn/users/use-tls/index.html
+++ b/content/cn/users/use-tls/index.html
@@ -649,7 +649,7 @@
       <td style="text-align: left">-</td>
       <td style="text-align: left">否</td>
       <td style="text-align: left">是否对证书的CN进行检查</td>
-      <td style="text-align: left">该配置项只对Consumer端,并且使用http协议有效,即Consumser端使用rest通道有效。对于Provider端、highway通道等无效。检查CN的目的是防止服务器被钓鱼,参考标准定义:<a href="https://tools.ietf.org/html/rfc2818。">https://tools.ietf.org/html/rfc2818。</a></td>
+      <td style="text-align: left">该配置项只对Consumer端,并且使用http协议有效,即Consumer端使用rest通道有效。对于Provider端、highway通道等无效。检查CN的目的是防止服务器被钓鱼,参考标准定义:<a href="https://tools.ietf.org/html/rfc2818。">https://tools.ietf.org/html/rfc2818。</a></td>
     </tr>
     <tr>
       <td style="text-align: left">ssl.trustStore</td>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/dd9482e3/content/docs/quick-start-advance/flow-control/index.html
----------------------------------------------------------------------
diff --git a/content/docs/quick-start-advance/flow-control/index.html b/content/docs/quick-start-advance/flow-control/index.html
index 082b585..230d601 100644
--- a/content/docs/quick-start-advance/flow-control/index.html
+++ b/content/docs/quick-start-advance/flow-control/index.html
@@ -366,7 +366,7 @@
   </nav>
 </aside>
 
-<p>Flow control machanism controls the transmission speed to avoid microservices being overloaded. This guide shows how to use flow control with <strong>ServiceComb</strong> in the BMI application.</p>
+<p>Flow control mechanism controls the transmission speed to avoid microservices being overloaded. This guide shows how to use flow control with <strong>ServiceComb</strong> in the BMI application.</p>
 
 <h2 id="before-you-start">Before you start</h2>
 

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/dd9482e3/content/feed.xml
----------------------------------------------------------------------
diff --git a/content/feed.xml b/content/feed.xml
index 89aa367..ac75a96 100644
--- a/content/feed.xml
+++ b/content/feed.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.4.3">Jekyll</generator><link href="/feed.xml" rel="self" type="application/atom+xml" /><link href="/" rel="alternate" type="text/html" /><updated>2017-12-10T21:17:12+08:00</updated><id>/</id><title type="html">Apache incubator ServiceComb</title><subtitle>The homepage of ServiceComb</subtitle><author><name>{&quot;name&quot;=&gt;nil, &quot;avatar&quot;=&gt;&quot;/assets/images/ServiceComb-logo-3.jpg&quot;, &quot;bio&quot;=&gt;&quot;ServiceComb is a microservice framework that provides service registration, discovery, configuration and management utilities.&quot;, &quot;biocn&quot;=&gt;&quot;ServiceComb提供了一套关于服务注册,服务发现,服务配置以及管理功能的微服务框架&quot;, &quot;location&quot;=&gt;&quot;China&quot;, &quot;locationcn&quot;=&gt;&quot;中国&quot;, &quot;email&quot;=&gt;&quot;servicecomb-developers@googlegro
 ups.com&quot;, &quot;uri&quot;=&gt;nil, &quot;bitbucket&quot;=&gt;nil, &quot;codepen&quot;=&gt;nil, &quot;dribbble&quot;=&gt;nil, &quot;flickr&quot;=&gt;nil, &quot;facebook&quot;=&gt;nil, &quot;foursquare&quot;=&gt;nil, &quot;github&quot;=&gt;&quot;ServiceComb&quot;, &quot;google_plus&quot;=&gt;nil, &quot;keybase&quot;=&gt;nil, &quot;instagram&quot;=&gt;nil, &quot;lastfm&quot;=&gt;nil, &quot;linkedin&quot;=&gt;nil, &quot;pinterest&quot;=&gt;nil, &quot;soundcloud&quot;=&gt;nil, &quot;stackoverflow&quot;=&gt;nil, &quot;steam&quot;=&gt;nil, &quot;tumblr&quot;=&gt;nil, &quot;twitter&quot;=&gt;nil, &quot;vine&quot;=&gt;nil, &quot;weibo&quot;=&gt;nil, &quot;xing&quot;=&gt;nil, &quot;youtube&quot;=&gt;nil}</name><email>servicecomb-developers@googlegroups.com</email></author><entry xml:lang="cn"><title type="html">老司机带你刷任务 - ServiceComb JIRA入门指南</title><link href="/cn/docs/jira_beginner_guide/" rel="alternate" type="text/html" title="老司机带你刷任务 - Servic
 eComb JIRA入门指南" /><published>2017-11-16T00:00:00+08:00</published><updated>2017-11-16T11:43:00+08:00</updated><id>/cn/docs/jira-beginner-guide</id><content type="html" xml:base="/cn/docs/jira_beginner_guide/">&lt;p&gt;想参与社区贡献,却感觉老虎咬天,无从下口?不用担心,老司机带你一起刷新手任务!&lt;/p&gt;
+<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.4.3">Jekyll</generator><link href="/feed.xml" rel="self" type="application/atom+xml" /><link href="/" rel="alternate" type="text/html" /><updated>2017-12-12T16:43:37+08:00</updated><id>/</id><title type="html">Apache incubator ServiceComb</title><subtitle>The homepage of ServiceComb</subtitle><author><name>{&quot;name&quot;=&gt;nil, &quot;avatar&quot;=&gt;&quot;/assets/images/ServiceComb-logo-3.jpg&quot;, &quot;bio&quot;=&gt;&quot;ServiceComb is a microservice framework that provides service registration, discovery, configuration and management utilities.&quot;, &quot;biocn&quot;=&gt;&quot;ServiceComb提供了一套关于服务注册,服务发现,服务配置以及管理功能的微服务框架&quot;, &quot;location&quot;=&gt;&quot;China&quot;, &quot;locationcn&quot;=&gt;&quot;中国&quot;, &quot;email&quot;=&gt;&quot;servicecomb-developers@googlegro
 ups.com&quot;, &quot;uri&quot;=&gt;nil, &quot;bitbucket&quot;=&gt;nil, &quot;codepen&quot;=&gt;nil, &quot;dribbble&quot;=&gt;nil, &quot;flickr&quot;=&gt;nil, &quot;facebook&quot;=&gt;nil, &quot;foursquare&quot;=&gt;nil, &quot;github&quot;=&gt;&quot;ServiceComb&quot;, &quot;google_plus&quot;=&gt;nil, &quot;keybase&quot;=&gt;nil, &quot;instagram&quot;=&gt;nil, &quot;lastfm&quot;=&gt;nil, &quot;linkedin&quot;=&gt;nil, &quot;pinterest&quot;=&gt;nil, &quot;soundcloud&quot;=&gt;nil, &quot;stackoverflow&quot;=&gt;nil, &quot;steam&quot;=&gt;nil, &quot;tumblr&quot;=&gt;nil, &quot;twitter&quot;=&gt;nil, &quot;vine&quot;=&gt;nil, &quot;weibo&quot;=&gt;nil, &quot;xing&quot;=&gt;nil, &quot;youtube&quot;=&gt;nil}</name><email>servicecomb-developers@googlegroups.com</email></author><entry xml:lang="cn"><title type="html">老司机带你刷任务 - ServiceComb JIRA入门指南</title><link href="/cn/docs/jira_beginner_guide/" rel="alternate" type="text/html" title="老司机带你刷任务 - Servic
 eComb JIRA入门指南" /><published>2017-11-16T00:00:00+08:00</published><updated>2017-11-16T11:43:00+08:00</updated><id>/cn/docs/jira-beginner-guide</id><content type="html" xml:base="/cn/docs/jira_beginner_guide/">&lt;p&gt;想参与社区贡献,却感觉老虎咬天,无从下口?不用担心,老司机带你一起刷新手任务!&lt;/p&gt;
 
 &lt;p&gt;ServiceComb的所有任务托管在&lt;a href=&quot;https://servicecomb.atlassian.net&quot;&gt;ServiceComb JIRA&lt;/a&gt;上,
 首先你需要&lt;a href=&quot;https://id.atlassian.com/signup?continue=https%3A%2F%2Fservicecomb.atlassian.net%2Flogin%3FredirectCount%3D1&quot;&gt;注册&lt;/a&gt;一个免费JIRA账户。&lt;/p&gt;

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/dd9482e3/content/index.html
----------------------------------------------------------------------
diff --git a/content/index.html b/content/index.html
index 50613e4..6ab9c8f 100644
--- a/content/index.html
+++ b/content/index.html
@@ -319,7 +319,7 @@
 
           
             <div class="archive__item-excerpt">
-              <p>service contract gurantee based on <a href="https://www.openapis.org">OpenAPI</a></p>
+              <p>service contract guarantee based on <a href="https://www.openapis.org">OpenAPI</a></p>
 
             </div>
           

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/dd9482e3/content/users/communicate-protocol/index.html
----------------------------------------------------------------------
diff --git a/content/users/communicate-protocol/index.html b/content/users/communicate-protocol/index.html
index f31311d..4630f02 100644
--- a/content/users/communicate-protocol/index.html
+++ b/content/users/communicate-protocol/index.html
@@ -615,7 +615,7 @@
 
 <h3 id="完整线程">完整线程</h3>
 
-<p>ServicecComb微服务的完整线程模型如下图所示:</p>
+<p>ServiceComb微服务的完整线程模型如下图所示:</p>
 
 <p><img src="/assets/images/thread-model.png" alt="" /></p>
 

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/dd9482e3/content/users/develop-with-springmvc/index.html
----------------------------------------------------------------------
diff --git a/content/users/develop-with-springmvc/index.html b/content/users/develop-with-springmvc/index.html
index 1b06848..6f432d1 100644
--- a/content/users/develop-with-springmvc/index.html
+++ b/content/users/develop-with-springmvc/index.html
@@ -647,7 +647,7 @@
         <span class="na">xsi:schemaLocation=</span><span class="s">"http://www.springframework.org/schema/beans</span> <span class="err">classpath:org/springframework/beans/factory/xml/spring-beans-3.0.xsd</span>
         <span class="err">http://www.springframework.org/schema/context</span> <span class="err">http://www.springframework.org/schema/context/spring-context-3.0.xsd"</span><span class="nt">&gt;</span>
    
-     <span class="nt">&lt;context:component-scan</span> <span class="na">base-package=</span><span class="s">"io.servicecomb.samples.springmvc.povider"</span><span class="nt">/&gt;</span>
+     <span class="nt">&lt;context:component-scan</span> <span class="na">base-package=</span><span class="s">"io.servicecomb.samples.springmvc.provider"</span><span class="nt">/&gt;</span>
  <span class="nt">&lt;/beans&gt;</span>
 </code></pre>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/dd9482e3/content/users/service-configurations/index.html
----------------------------------------------------------------------
diff --git a/content/users/service-configurations/index.html b/content/users/service-configurations/index.html
index c463a29..cd6b661 100644
--- a/content/users/service-configurations/index.html
+++ b/content/users/service-configurations/index.html
@@ -596,7 +596,7 @@
 
 <h3 id="配置说明">配置说明</h3>
 
-<p>  负载均衡策略在mocroservice.yaml文件中配置,配置项为<code class="highlighter-rouge">cse.loadbalance.[MicroServiceName].[property name]</code>,其中若省略MicroServiceName,则为全局配置;若指定MicroServiceName,则为针对特定微服务的配置。</p>
+<p>  负载均衡策略在microservice.yaml文件中配置,配置项为<code class="highlighter-rouge">cse.loadbalance.[MicroServiceName].[property name]</code>,其中若省略MicroServiceName,则为全局配置;若指定MicroServiceName,则为针对特定微服务的配置。</p>
 
 <p>  <strong>表1 配置项说明</strong></p>
 

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/dd9482e3/content/users/setup-environment/index.html
----------------------------------------------------------------------
diff --git a/content/users/setup-environment/index.html b/content/users/setup-environment/index.html
index 93a4fd3..ca4a56c 100644
--- a/content/users/setup-environment/index.html
+++ b/content/users/setup-environment/index.html
@@ -595,41 +595,43 @@
   <li>
     <p>以可执行文件的方式运行</p>
 
-    <details open="">
-   <summary>Windows运行步骤</summary>
-   <div>
+    <ul class="nav nav-tabs">
+  <li data-toggle="tab" class="active"><a data-toggle="tab" href="#windows">Windows</a></li>
+  <li data-toggle="tab"><a data-toggle="tab" href="#linux">Linux</a></li>
+</ul>
+
+    <div class="tab-content">
+  <div id="windows" class="tab-pane active">
         <ol>
-          <li>下载<a href="https://github.com/ServiceComb/service-center/releases/download/0.1.1/service-center-0.1.1-windows-amd64.zip">服务注册中心可执行文件压缩包</a></li>
+          <li>下载<a href="https://github.com/ServiceComb/service-center/releases/download/0.5.0/service-center-0.5.0-windows-amd64.zip">服务注册中心可执行文件压缩包</a></li>
           <li>解压缩到当前文件夹</li>
           <li>进入解压缩后的目录,然后双击运行<strong>start</strong>文件</li>
         </ol>
       </div>
- </details>
-    <details open="">
-   <summary>Linux运行步骤</summary>
-   <div>
+  <div id="linux" class="tab-pane fade">
         <ol>
           <li>下载服务注册中心可执行文件压缩包并解压缩
-            <div class="language-bash highlighter-rouge"><pre class="highlight"><code>wget https://github.com/ServiceComb/service-center/releases/download/0.1.1/service-center-0.1.1-linux-amd64.tar.gz
-tar xvf service-center-0.1.1-linux-amd64.tar.gz
+            <div class="language-bash highlighter-rouge"><pre class="highlight"><code>wget https://github.com/ServiceComb/service-center/releases/download/0.5.0/service-center-0.5.0-linux-amd64.tar.gz
+tar xvf service-center-0.5.0-linux-amd64.tar.gz
 </code></pre>
             </div>
           </li>
           <li>运行服务注册中心
-            <div class="language-bash highlighter-rouge"><pre class="highlight"><code>bash service-center-0.1.1-linux-amd64/start.sh
+            <div class="language-bash highlighter-rouge"><pre class="highlight"><code>bash service-center-0.5.0-linux-amd64/start.sh
 </code></pre>
             </div>
           </li>
         </ol>
       </div>
- </details>
+</div>
 
     <p class="notice--warning">注意:Window和Linux版本均只支持64位系统。</p>
   </li>
+  <li>
+    <p>以Docker的方式运行</p>
+  </li>
 </ol>
 
-<p>2.以Docker的方式运行</p>
-
 <div class="language-bash highlighter-rouge"><pre class="highlight"><code>docker pull servicecomb/service-center
 docker run -d -p 30100:30100 servicecomb/service-center:latest
 </code></pre>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/dd9482e3/content/users/use-servicecomb-in-spring-boot/index.html
----------------------------------------------------------------------
diff --git a/content/users/use-servicecomb-in-spring-boot/index.html b/content/users/use-servicecomb-in-spring-boot/index.html
index a75192a..ac9ceb3 100644
--- a/content/users/use-servicecomb-in-spring-boot/index.html
+++ b/content/users/use-servicecomb-in-spring-boot/index.html
@@ -731,7 +731,7 @@
     </div>
   </li>
   <li>
-    <p><strong>步骤 7</strong> 启动xxxServer,该服务便可注册到ServieComb的Service Center。</p>
+    <p><strong>步骤 7</strong> 启动xxxServer,该服务便可注册到ServiceComb的Service Center。</p>
   </li>
 </ul>
 

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/dd9482e3/content/users/use-tls/index.html
----------------------------------------------------------------------
diff --git a/content/users/use-tls/index.html b/content/users/use-tls/index.html
index 7e0f672..3968592 100644
--- a/content/users/use-tls/index.html
+++ b/content/users/use-tls/index.html
@@ -648,7 +648,7 @@
       <td style="text-align: left">-</td>
       <td style="text-align: left">否</td>
       <td style="text-align: left">是否对证书的CN进行检查</td>
-      <td style="text-align: left">该配置项只对Consumer端,并且使用http协议有效,即Consumser端使用rest通道有效。对于Provider端、highway通道等无效。检查CN的目的是防止服务器被钓鱼,参考标准定义:<a href="https://tools.ietf.org/html/rfc2818。">https://tools.ietf.org/html/rfc2818。</a></td>
+      <td style="text-align: left">该配置项只对Consumer端,并且使用http协议有效,即Consumer端使用rest通道有效。对于Provider端、highway通道等无效。检查CN的目的是防止服务器被钓鱼,参考标准定义:<a href="https://tools.ietf.org/html/rfc2818。">https://tools.ietf.org/html/rfc2818。</a></td>
     </tr>
     <tr>
       <td style="text-align: left">ssl.trustStore</td>


[02/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/users/service-heartbeat/index.html
----------------------------------------------------------------------
diff --git a/content/users/service-heartbeat/index.html b/content/users/service-heartbeat/index.html
new file mode 100644
index 0000000..935cac4
--- /dev/null
+++ b/content/users/service-heartbeat/index.html
@@ -0,0 +1,708 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>服务心跳 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="服务心跳">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="服务心跳">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/users/service-heartbeat/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/users/service-heartbeat/">
+
+
+
+  <meta property="og:description" content="服务心跳">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="服务心跳">
+  <meta name="twitter:description" content="服务心跳">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/users/service-heartbeat/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">User Guide</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/" class="">Java Chassis Architecture</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/setup-environment/" class="">Setup Environment</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Provider</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-definition/" class="">Service Definition</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-contract/" class="">Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-springmvc/" class="">Develop Microservice with SpringMVC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-jax-rs/" class="">Develop Microservice with JAX-RS</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-transparent-rpc/" class="">Develop Microservice with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-interface-constraints/" class="">Service Interface Constraints</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-configurations/" class="">Service Configurations</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/communicate-protocol/" class="">Communicate Protocol</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/application-boot-process/" class="">Application Boot Up Process</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-heartbeat/" class="active">Service Heartbeat</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Consumer</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rest-template/" class="">Develop with Rest Template</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rpc/" class="">Develop with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-service-contract/" class="">Use Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/invoke-control/" class="">Invoke Control</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">General Development</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/local-develop-test/" class="">Develop and Test in Local Environment</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-servicecomb-in-spring-boot/" class="">Use ServiceComb in Spring Boot</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/distributed-tracing/" class="">Distributed Tracing</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/customized-tracing/" class="">Customized Tracing</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Edging Service</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/nginx/" class="">confd and Nginx</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/zuul/" class="">Zuul</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">Metrics</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Deployment</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/run-mode/" class="">Run Mode</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Security</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-tls/" class="">Use TLS</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="服务心跳">
+    <meta itemprop="description" content="服务心跳">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">服务心跳
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> On This Page</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#场景描述" id="markdown-toc-场景描述">场景描述</a></li>
+  <li><a href="#涉及api" id="markdown-toc-涉及api">涉及API</a></li>
+  <li><a href="#配置说明" id="markdown-toc-配置说明">配置说明</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="场景描述">场景描述</h2>
+
+<p>当微服务实例注册到服务中心后,微服务需要定时向服务中心发送心跳。若服务中心在一定时间内没有收到心跳信息,则会注销此实例。</p>
+
+<h2 id="涉及api">涉及API</h2>
+
+<ul>
+  <li><code class="highlighter-rouge">io.servicecomb.serviceregistry.client.ServiceRegistryClient</code>:服务中心客户端</li>
+</ul>
+
+<h2 id="配置说明">配置说明</h2>
+
+<p><code class="highlighter-rouge">ServiceRegistryClient</code>提供了发送心跳的方法<code class="highlighter-rouge">heartbeat</code>,用户直接调用即可,示例代码如下:</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span>
+  <span class="c1">// 首先需要注册微服务和实例</span>
+  <span class="c1">// 发送心跳,不然实例会消失</span>
+  <span class="k">while</span> <span class="o">(</span><span class="kc">true</span><span class="o">)</span> <span class="o">{</span>
+    <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"heartbeat sended:"</span> <span class="o">+</span> <span class="n">client</span><span class="o">.</span><span class="na">heartbeat</span><span class="o">(</span><span class="n">service2</span><span class="o">.</span><span class="na">getServiceId</span><span class="o">(),</span> <span class="n">instance</span><span class="o">.</span><span class="na">getInstanceId</span><span class="o">()));</span>
+    <span class="n">Thread</span><span class="o">.</span><span class="na">sleep</span><span class="o">(</span><span class="mi">3000</span><span class="o">);</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/service-heartbeat.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/service-heartbeat.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/users/service-interface-constraints/index.html
----------------------------------------------------------------------
diff --git a/content/users/service-interface-constraints/index.html b/content/users/service-interface-constraints/index.html
new file mode 100644
index 0000000..2c4ab3c
--- /dev/null
+++ b/content/users/service-interface-constraints/index.html
@@ -0,0 +1,752 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>服务接口约束 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="服务接口约束">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="服务接口约束">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/users/service-interface-constraints/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/users/service-interface-constraints/">
+
+
+
+  <meta property="og:description" content="服务接口约束">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="服务接口约束">
+  <meta name="twitter:description" content="服务接口约束">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/users/service-interface-constraints/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">User Guide</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/" class="">Java Chassis Architecture</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/setup-environment/" class="">Setup Environment</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Provider</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-definition/" class="">Service Definition</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-contract/" class="">Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-springmvc/" class="">Develop Microservice with SpringMVC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-jax-rs/" class="">Develop Microservice with JAX-RS</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-transparent-rpc/" class="">Develop Microservice with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-interface-constraints/" class="active">Service Interface Constraints</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-configurations/" class="">Service Configurations</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/communicate-protocol/" class="">Communicate Protocol</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/application-boot-process/" class="">Application Boot Up Process</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-heartbeat/" class="">Service Heartbeat</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Consumer</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rest-template/" class="">Develop with Rest Template</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rpc/" class="">Develop with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-service-contract/" class="">Use Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/invoke-control/" class="">Invoke Control</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">General Development</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/local-develop-test/" class="">Develop and Test in Local Environment</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-servicecomb-in-spring-boot/" class="">Use ServiceComb in Spring Boot</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/distributed-tracing/" class="">Distributed Tracing</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/customized-tracing/" class="">Customized Tracing</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Edging Service</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/nginx/" class="">confd and Nginx</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/zuul/" class="">Zuul</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">Metrics</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Deployment</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/run-mode/" class="">Run Mode</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Security</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-tls/" class="">Use TLS</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="服务接口约束">
+    <meta itemprop="description" content="服务接口约束">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">服务接口约束
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> On This Page</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#接口约束说明" id="markdown-toc-接口约束说明">接口约束说明</a></li>
+  <li><a href="#详细的约束列表" id="markdown-toc-详细的约束列表">详细的约束列表</a></li>
+  <li><a href="#协议上的差异" id="markdown-toc-协议上的差异">协议上的差异</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="接口约束说明">接口约束说明</h2>
+<p>Java Chassis对于接口的使用约束建立在一个简单的原则上:接口定义即接口使用说明,不用通过查看代码实现,就能识别如何调用这个接口。举个例子:</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="n">Person</span> <span class="nf">query</span><span class="o">(</span><span class="n">String</span> <span class="n">id</span><span class="o">);</span>
+<span class="kd">public</span> <span class="n">Object</span> <span class="nf">query</span><span class="o">(</span><span class="n">String</span> <span class="n">id</span><span class="o">);</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">Person</span> <span class="o">{</span><span class="n">String</span> <span class="n">name</span><span class="o">;}</span>
+</code></pre>
+</div>
+
+<p>显然如果调用接口一,我们知道要传递一个String类型的id参数,返回值是一个Person类型,Person里面存在String类型的name等参数。如果调用接口二,我们不知道怎么处理返回值,必须参考服务提供者的文档说明。可以看出,我们是站在使用者视角这边的,以更容易被使用作为参考。</p>
+
+<p>当我们要将接口发布为REST接口的时候,可以通过使用swagger文件,指定id使用RequestParam或者PathVariable或者RequestBody进行传递,也可以使用SpringMVC或者JAX RS提供的标签来描述。</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="n">Person</span> <span class="nf">query</span><span class="o">(</span><span class="nd">@RequestParam</span> <span class="n">String</span> <span class="n">id</span><span class="o">);</span> 
+<span class="kd">public</span> <span class="n">Person</span> <span class="nf">query</span><span class="o">(</span><span class="nd">@PathVariable</span> <span class="n">String</span> <span class="n">id</span><span class="o">);</span> 
+<span class="kd">public</span> <span class="n">Person</span> <span class="nf">query</span><span class="o">(</span><span class="nd">@RequestBody</span> <span class="n">String</span> <span class="n">id</span><span class="o">);</span> 
+</code></pre>
+</div>
+
+<p>通常,我们会将简单的数据类型,比如String, int等在RequestParam或者PathVariable传递,而把复杂的数据类型使用JSON编码以后在RequestBody传递,以减少HTTP协议限制可能给开发者带来的各种问题。</p>
+
+<h2 id="详细的约束列表">详细的约束列表</h2>
+<p>开发者不能在接口定义的时候使用如下类型:</p>
+
+<ul>
+  <li>比较抽象的数据结构: java.lang.Object, net.sf.json.JsonObject等</li>
+  <li>接口或者抽象类
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="kd">public</span> <span class="kd">interface</span> <span class="nc">IPerson</span> <span class="o">{...}</span>
+ <span class="kd">public</span> <span class="kd">abstract</span> <span class="kd">class</span> <span class="nc">AbstractPerson</span>  <span class="o">{...}</span>
+</code></pre>
+    </div>
+  </li>
+  <li>泛型
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="kd">public</span> <span class="kd">class</span> <span class="nc">PersonHolder</span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;</span> <span class="o">{...}</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p>上述类型的集合类型或者没指定类型的集合,比如:<code class="highlighter-rouge">List&lt;IPerson&gt;, Map&lt;String, PersonHolder&lt;?&gt;&gt;, List, Map</code>等。 <code class="highlighter-rouge">List&lt;String&gt;, List&lt;Person&gt;</code>这些具体类型是支持的。</p>
+  </li>
+  <li>包含上述类型作为属性的类型
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="kd">public</span> <span class="kd">class</span> <span class="nc">GroupOfPerson</span> <span class="o">{</span><span class="n">IPerson</span> <span class="n">master</span> <span class="o">...}</span>
+</code></pre>
+    </div>
+  </li>
+</ul>
+
+<p>开发者不用担心记不住这些约束,程序会在启动的时候检查不支持的类型,并给与错误提示。</p>
+
+<h2 id="协议上的差异">协议上的差异</h2>
+<p>尽管ServiceComb-Java-Chassis实现了不同协议之间开发方式的透明,受限于底层协议的限制,不同的协议存在少量差异。</p>
+
+<ul>
+  <li>
+    <p>map,key只支持string</p>
+  </li>
+  <li>highway (protobuf限制)
+    <ol>
+      <li>不支持在网络上传递null,包括Collection、array中的元素,map的value</li>
+      <li>长度为0的数组、list,不会在网络上传递,接收端解码出来就是默认值</li>
+    </ol>
+  </li>
+  <li>springmvc
+    <ol>
+      <li>不支持Date作为path、query参数。 因为springmvc直接将Date做toString放在path、query中,与swagger的标准不匹配。</li>
+    </ol>
+  </li>
+</ul>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/service-interface-constraints.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/service-interface-constraints.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/users/setup-environment/index.html
----------------------------------------------------------------------
diff --git a/content/users/setup-environment/index.html b/content/users/setup-environment/index.html
new file mode 100644
index 0000000..93a4fd3
--- /dev/null
+++ b/content/users/setup-environment/index.html
@@ -0,0 +1,749 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>环境配置 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="环境配置">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="环境配置">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/users/setup-environment/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/users/setup-environment/">
+
+
+
+  <meta property="og:description" content="环境配置">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="环境配置">
+  <meta name="twitter:description" content="环境配置">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/users/setup-environment/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">User Guide</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/" class="">Java Chassis Architecture</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/setup-environment/" class="active">Setup Environment</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Provider</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-definition/" class="">Service Definition</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-contract/" class="">Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-springmvc/" class="">Develop Microservice with SpringMVC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-jax-rs/" class="">Develop Microservice with JAX-RS</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-transparent-rpc/" class="">Develop Microservice with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-interface-constraints/" class="">Service Interface Constraints</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-configurations/" class="">Service Configurations</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/communicate-protocol/" class="">Communicate Protocol</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/application-boot-process/" class="">Application Boot Up Process</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-heartbeat/" class="">Service Heartbeat</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Consumer</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rest-template/" class="">Develop with Rest Template</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rpc/" class="">Develop with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-service-contract/" class="">Use Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/invoke-control/" class="">Invoke Control</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">General Development</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/local-develop-test/" class="">Develop and Test in Local Environment</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-servicecomb-in-spring-boot/" class="">Use ServiceComb in Spring Boot</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/distributed-tracing/" class="">Distributed Tracing</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/customized-tracing/" class="">Customized Tracing</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Edging Service</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/nginx/" class="">confd and Nginx</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/zuul/" class="">Zuul</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">Metrics</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Deployment</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/run-mode/" class="">Run Mode</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Security</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-tls/" class="">Use TLS</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="环境配置">
+    <meta itemprop="description" content="环境配置">
+    
+    <meta itemprop="dateModified" content="September 03, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">环境配置
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> On This Page</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#安装java开发环境" id="markdown-toc-安装java开发环境">安装Java开发环境</a></li>
+  <li><a href="#运行service-center" id="markdown-toc-运行service-center">运行<em>Service Center</em></a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="安装java开发环境">安装Java开发环境</h2>
+
+<ul>
+  <li>
+    <p>安装git,详情可参考<a href="https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git">git安装教程</a></p>
+  </li>
+  <li>
+    <p>安装JDK 1.8,详情可参考<a href="https://docs.oracle.com/javase/8/docs/technotes/guides/install/install_overview.html" target="_blank">JDK安装教程</a>。</p>
+  </li>
+  <li>
+    <p>安装Maven 3.x,详情可参考<a href="https://maven.apache.org/install.html" target="_blank">Maven安装教程</a>。</p>
+  </li>
+  <li>
+    <p>安装IntelliJ Idea IDE,详情可参考<a href="https://www.jetbrains.com/help/idea/installing-and-launching.html" target="_blank">IntelliJ安装教程</a>。</p>
+  </li>
+</ul>
+
+<h2 id="运行service-center">运行<em>Service Center</em></h2>
+<p>运行Service Center有以下两种方式:</p>
+
+<ol>
+  <li>
+    <p>以可执行文件的方式运行</p>
+
+    <details open="">
+   <summary>Windows运行步骤</summary>
+   <div>
+        <ol>
+          <li>下载<a href="https://github.com/ServiceComb/service-center/releases/download/0.1.1/service-center-0.1.1-windows-amd64.zip">服务注册中心可执行文件压缩包</a></li>
+          <li>解压缩到当前文件夹</li>
+          <li>进入解压缩后的目录,然后双击运行<strong>start</strong>文件</li>
+        </ol>
+      </div>
+ </details>
+    <details open="">
+   <summary>Linux运行步骤</summary>
+   <div>
+        <ol>
+          <li>下载服务注册中心可执行文件压缩包并解压缩
+            <div class="language-bash highlighter-rouge"><pre class="highlight"><code>wget https://github.com/ServiceComb/service-center/releases/download/0.1.1/service-center-0.1.1-linux-amd64.tar.gz
+tar xvf service-center-0.1.1-linux-amd64.tar.gz
+</code></pre>
+            </div>
+          </li>
+          <li>运行服务注册中心
+            <div class="language-bash highlighter-rouge"><pre class="highlight"><code>bash service-center-0.1.1-linux-amd64/start.sh
+</code></pre>
+            </div>
+          </li>
+        </ol>
+      </div>
+ </details>
+
+    <p class="notice--warning">注意:Window和Linux版本均只支持64位系统。</p>
+  </li>
+</ol>
+
+<p>2.以Docker的方式运行</p>
+
+<div class="language-bash highlighter-rouge"><pre class="highlight"><code>docker pull servicecomb/service-center
+docker run -d -p 30100:30100 servicecomb/service-center:latest
+</code></pre>
+</div>
+
+<p class="notice--warning"><strong>注意事项:</strong> 服务注册中心运行后绑定的IP为:<em>http://127.0.0.1:30100</em>。<br />
+如使用Docker Toolbox,可通过 <code class="highlighter-rouge">docker-machine ip</code> 获取服务绑定IP地址。</p>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/setup-environment.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/setup-environment.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/users/use-service-contract/index.html
----------------------------------------------------------------------
diff --git a/content/users/use-service-contract/index.html b/content/users/use-service-contract/index.html
new file mode 100644
index 0000000..3703f89
--- /dev/null
+++ b/content/users/use-service-contract/index.html
@@ -0,0 +1,741 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>使用服务契约 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="使用服务契约">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="使用服务契约">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/users/use-service-contract/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/users/use-service-contract/">
+
+
+
+  <meta property="og:description" content="使用服务契约">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="使用服务契约">
+  <meta name="twitter:description" content="使用服务契约">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/users/use-service-contract/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">User Guide</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/" class="">Java Chassis Architecture</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/setup-environment/" class="">Setup Environment</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Provider</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-definition/" class="">Service Definition</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-contract/" class="">Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-springmvc/" class="">Develop Microservice with SpringMVC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-jax-rs/" class="">Develop Microservice with JAX-RS</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-transparent-rpc/" class="">Develop Microservice with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-interface-constraints/" class="">Service Interface Constraints</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-configurations/" class="">Service Configurations</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/communicate-protocol/" class="">Communicate Protocol</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/application-boot-process/" class="">Application Boot Up Process</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-heartbeat/" class="">Service Heartbeat</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Consumer</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rest-template/" class="">Develop with Rest Template</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rpc/" class="">Develop with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-service-contract/" class="active">Use Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/invoke-control/" class="">Invoke Control</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">General Development</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/local-develop-test/" class="">Develop and Test in Local Environment</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-servicecomb-in-spring-boot/" class="">Use ServiceComb in Spring Boot</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/distributed-tracing/" class="">Distributed Tracing</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/customized-tracing/" class="">Customized Tracing</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Edging Service</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/nginx/" class="">confd and Nginx</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/zuul/" class="">Zuul</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">Metrics</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Deployment</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/run-mode/" class="">Run Mode</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Security</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-tls/" class="">Use TLS</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="使用服务契约">
+    <meta itemprop="description" content="使用服务契约">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">使用服务契约
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> On This Page</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#场景描述" id="markdown-toc-场景描述">场景描述</a></li>
+  <li><a href="#配置说明" id="markdown-toc-配置说明">配置说明</a>    <ul>
+      <li><a href="#配置依赖服务" id="markdown-toc-配置依赖服务">配置依赖服务</a></li>
+      <li><a href="#手工配置服务契约" id="markdown-toc-手工配置服务契约">手工配置服务契约</a></li>
+      <li><a href="#从服务中心自动下载契约" id="markdown-toc-从服务中心自动下载契约">从服务中心自动下载契约</a></li>
+    </ul>
+  </li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="场景描述">场景描述</h2>
+
+<p>当服务消费者调用服务提供者的服务时,需要注册服务契约。消费者有两种方式获取提供者的服务契约,一种是从服务的提供方离线获取契约文件,手工配置到项目中;另一种是从服务中心自动下载契约。</p>
+
+<h2 id="配置说明">配置说明</h2>
+
+<blockquote>
+  <p>说明:服务契约的获取方式与服务消费者的开发方式是无关的,用户可以任意组合使用。</p>
+</blockquote>
+
+<h3 id="配置依赖服务">配置依赖服务</h3>
+
+<p>服务消费者需要在microservice.yaml文件中配置依赖的provider,示例配置如下:</p>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">cse</span><span class="pi">:</span>
+  <span class="c1"># other configurations omitted</span>
+  <span class="s">references</span><span class="pi">:</span>
+    <span class="s">springmvc</span><span class="pi">:</span>
+      <span class="s">version-rule</span><span class="pi">:</span> <span class="s">0.0.1</span>
+</code></pre>
+</div>
+
+<blockquote>
+  <p>version-rule是版本匹配规则,有四种格式:</p>
+
+  <ul>
+    <li>精确版本匹配:例如<code class="highlighter-rouge">version-rule: 0.0.1</code>,表示只匹配版本号为0.0.1的服务提供者</li>
+    <li>后续版本匹配:例如<code class="highlighter-rouge">version-rule: 1.0.0+</code>,表示匹配版本号大于或等于1.0.0的服务提供者</li>
+    <li>最新版本:<code class="highlighter-rouge">version-rule: latest</code>,表示匹配最新版本的服务提供者</li>
+    <li>版本范围:例如<code class="highlighter-rouge">1.0.0-2.0.2</code>,表示匹配版本号在1.0.0至2.0.2之间的服务提供者,包含1.0.0和2.0.2</li>
+  </ul>
+
+  <p>此配置项默认为<code class="highlighter-rouge">latest</code></p>
+</blockquote>
+
+<h3 id="手工配置服务契约">手工配置服务契约</h3>
+
+<p>服务消费者的开发者在线下拿到服务提供者的契约,配置到消费者工程的特定目录下。服务契约在项目中的存放目录与<a href="/users/service-contract/">服务契约</a>的配置说明部分相同。</p>
+
+<p>microservice目录下的每一个目录代表一个微服务,微服务目录下的每一个yaml文件代表一个schema契约,文件名就是schemaId。applications目录下存放需要指明appId的服务契约,用于跨app调用等场景。目录结构如下所示:</p>
+<pre><code class="language-txt">resources
+  - microservices
+      - serviceName            # 微服务名
+          - schemaId.yaml      # schema接口的契约
+  - applications
+      - appId                  # 应用ID
+          - serviceName        # 微服务名
+              - schemaId.yaml  # schema接口的契约
+</code></pre>
+
+<h3 id="从服务中心自动下载契约">从服务中心自动下载契约</h3>
+
+<p>服务消费者也可以不用显式地将契约存放在项目目录中,当程序启动时,ServiceComb框架会自动根据microservice.yaml文件中配置的服务提供者的微服务名称和版本号,从服务中心自动下载契约信息。</p>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/use-service-contract.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/use-service-contract.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>


[39/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/docs/linuxcon-workshop-demo/index.html
----------------------------------------------------------------------
diff --git a/content/cn/docs/linuxcon-workshop-demo/index.html b/content/cn/docs/linuxcon-workshop-demo/index.html
new file mode 100644
index 0000000..10f56c5
--- /dev/null
+++ b/content/cn/docs/linuxcon-workshop-demo/index.html
@@ -0,0 +1,1528 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>Linux Con Workshop Demo - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="A step by step guide on how to use ServiceComb to develop a complete project">
+
+
+
+
+<meta name="author" content="Sean Yin">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="Linux Con Workshop Demo">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/linuxcon-workshop-demo/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/linuxcon-workshop-demo/">
+
+
+
+  <meta property="og:description" content="A step by step guide on how to use ServiceComb to develop a complete project">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="Linux Con Workshop Demo">
+  <meta name="twitter:description" content="A step by step guide on how to use ServiceComb to develop a complete project">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+    <meta name="twitter:creator" content="@seanyinx">
+  
+
+
+
+  
+
+  
+
+
+
+
+
+  <meta property="og:type" content="article">
+  <meta property="article:published_time" content="2017-06-15T00:00:00+08:00">
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/docs/linuxcon-workshop-demo/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+
+<div itemscope itemtype="http://schema.org/Person">
+
+  
+
+  <div class="author__content">
+    <h3 class="author__name" itemprop="name">Sean Yin</h3>
+    
+      <p class="author__bio" itemprop="description">
+	    
+	      
+	        Nothing but speed is indestructible
+	      
+	    
+      </p>
+    
+  </div>
+
+  <div class="author__urls-wrapper">
+    <button class="btn btn--inverse">关注</button>
+    <ul class="author__urls social-icons">
+      
+
+      
+        <li>
+          <a href="http://seanyinx.github.io" itemprop="url">
+            <i class="fa fa-fw fa-chain" aria-hidden="true"></i> 网站
+          </a>
+        </li>
+      
+
+      
+        <li>
+          <a href="mailto:seanyinx@gmail.com">
+            <meta itemprop="email" content="seanyinx@gmail.com" />
+            <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> 电子邮箱
+          </a>
+        </li>
+      
+
+      
+
+      
+        <li>
+          <a href="https://twitter.com/seanyinx" itemprop="sameAs">
+            <i class="fa fa-fw fa-twitter-square" aria-hidden="true"></i> Twitter
+          </a>
+        </li>
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      <!--
+  <li>
+    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs">
+      <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link
+    </a>
+  </li>
+-->
+    </ul>
+  </div>
+</div>
+
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="Linux Con Workshop Demo">
+    <meta itemprop="description" content="A step by step guide on how to use ServiceComb to develop a complete project">
+    <meta itemprop="datePublished" content="June 15, 2017">
+    <meta itemprop="dateModified" content="June 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">Linux Con Workshop Demo
+</h1>
+            
+              <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  6 分钟 阅读
+
+</p>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <p>为了读者能更容易了解ServiceComb微服务框架的功能以及如何用其快速开发微服务,所以提供大家耳熟能详的例子,降低学习曲线的同时,增加趣味性,加深理解。</p>
+
+<p>本文中假设我们成立了一家科研公司,处理复杂的数学运算,以及尖端生物科技研究,并为用户提供如下服务:</p>
+
+<ul>
+  <li>
+    <p>黄金分割数列计算</p>
+  </li>
+  <li>
+    <p>蜜蜂繁殖规律 (计算每只雄蜂/雌蜂的祖先数量)</p>
+  </li>
+</ul>
+
+<p>但是我们如何将公司的这些强大运算能力提供给我们的消费者呢?</p>
+
+<p>首先我们通过认证服务保障公司的计算资源没有被滥用, 同时我们对外提供Rest服务让用户来进行访问。 下面的视频展示具体的服务验证调用的情况。</p>
+
+<!-- Courtesy of embedresponsively.com //-->
+<div class="responsive-video-container">
+
+  <iframe src="https://player.youku.com/embed/XMjg1NzQ3NzUzNg" frameborder="0" allowfullscreen=""></iframe>
+
+</div>
+
+<aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> 在本页上</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#业务场景" id="markdown-toc-业务场景">业务场景</a></li>
+  <li><a href="#公司结构-系统架构" id="markdown-toc-公司结构-系统架构">公司结构 (系统架构)</a></li>
+  <li><a href="#技工-worker" id="markdown-toc-技工-worker">技工 (Worker)</a>    <ul>
+      <li><a href="#黄金分割运算服务" id="markdown-toc-黄金分割运算服务">黄金分割运算服务</a></li>
+      <li><a href="#技工服务端点" id="markdown-toc-技工服务端点">技工服务端点</a></li>
+    </ul>
+  </li>
+  <li><a href="#告示栏-bulletin-board" id="markdown-toc-告示栏-bulletin-board">告示栏 (Bulletin Board)</a></li>
+  <li><a href="#养蜂人-beekeeper" id="markdown-toc-养蜂人-beekeeper">养蜂人 (Beekeeper)</a>    <ul>
+      <li><a href="#蜜蜂繁殖规律研究服务" id="markdown-toc-蜜蜂繁殖规律研究服务">蜜蜂繁殖规律研究服务</a></li>
+      <li><a href="#养蜂人服务端点" id="markdown-toc-养蜂人服务端点">养蜂人服务端点</a></li>
+    </ul>
+  </li>
+  <li><a href="#门卫-doorman" id="markdown-toc-门卫-doorman">门卫 (Doorman)</a>    <ul>
+      <li><a href="#门卫认证服务" id="markdown-toc-门卫认证服务">门卫认证服务</a></li>
+      <li><a href="#门卫认证服务端点" id="markdown-toc-门卫认证服务端点">门卫认证服务端点</a></li>
+    </ul>
+  </li>
+  <li><a href="#经理-manager" id="markdown-toc-经理-manager">经理 (Manager)</a>    <ul>
+      <li><a href="#用户认证服务" id="markdown-toc-用户认证服务">用户认证服务</a></li>
+      <li><a href="#请求过滤" id="markdown-toc-请求过滤">请求过滤</a></li>
+    </ul>
+  </li>
+  <li><a href="#项目归档-project-archive" id="markdown-toc-项目归档-project-archive">项目归档 (Project Archive)</a></li>
+  <li><a href="#人力资源-human-resource" id="markdown-toc-人力资源-human-resource">人力资源 (Human Resource)</a></li>
+  <li><a href="#总结" id="markdown-toc-总结">总结</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="业务场景">业务场景</h2>
+<p>让我们先对业务场景进行总结分析</p>
+
+<ol>
+  <li>
+    <p>为了公司持续发展,我们需要对用户消费的运算能力收费,所以我们聘用了<strong>门卫</strong>认证用户,避免不法分子混入</p>
+  </li>
+  <li>
+    <p>为了提供足够的黄金分割数量运算能力,我们需要雇佣相应的<strong>技工</strong></p>
+  </li>
+  <li>
+    <p>为了持续研究蜜蜂繁殖规律,公司建立了自己的蜂场,需要相应的<strong>养蜂人</strong>进行管理研究</p>
+  </li>
+  <li>
+    <p>为了平衡<strong>技工</strong>、<strong>养蜂人</strong>、和<strong>门卫</strong>的工作量和时间,我们建立了<strong>告示栏</strong>机制,让当前有闲暇的人员发布自己的联系方式,以便我们能及时联系技能匹配的人员以服务到来的用户</p>
+  </li>
+  <li>
+    <p>因为运算能力成本高昂,我们将运算项目进行了<strong>归档</strong>,以便未来有相同请求时,我们能直接查询<strong>项目归档</strong>,节省公司运算成本</p>
+  </li>
+  <li>
+    <p>面对上述复杂的场景,我们又聘用了<strong>部门经理</strong>来管理公司成员和设施</p>
+  </li>
+  <li>
+    <p>最后,当公司日益壮大,用户数量暴涨时,我们还需要招聘更多<strong>技工</strong>、<strong>养蜂人</strong>、和<strong>门卫</strong>,所以增加了<strong>人力资源</strong>部门</p>
+  </li>
+</ol>
+
+<h2 id="公司结构-系统架构">公司结构 (系统架构)</h2>
+<p>到现在业务场景已经比较清晰,我们把上述职务部门和设施画成公司组织结构图。
+<img src="/assets/images/workshop-company-structure.png" alt="company structure" class="align-center" /></p>
+
+<p>现在公司组织结构已经完整,让我们着手搭建相应部门。</p>
+
+<h2 id="技工-worker">技工 (Worker)</h2>
+<p>因为技工最为简单,对其他部门人员依赖最少,我们首先搭建这个部门。</p>
+
+<h3 id="黄金分割运算服务">黄金分割运算服务</h3>
+<p>技工的主要工作时提供黄金分割数列计算服务,当用户需要知道第n个黄金分割数时,技工以最快的速度计算出数值并返回给用户。
+我们可以把这个工作简化为如下数学方程:</p>
+
+<div class="highlighter-rouge"><pre class="highlight"><code>value = fibo(n)
+</code></pre>
+</div>
+
+<p>在暂时不考虑性能的情况下,我们可以迅速实现黄金分割数列的计算。</p>
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kd">interface</span> <span class="nc">FibonacciService</span> <span class="o">{</span>
+  <span class="kt">long</span> <span class="nf">term</span><span class="o">(</span><span class="kt">int</span> <span class="n">n</span><span class="o">);</span>
+<span class="o">}</span>
+
+<span class="nd">@Service</span>
+<span class="kd">class</span> <span class="nc">FibonacciServiceImpl</span> <span class="kd">implements</span> <span class="n">FibonacciService</span> <span class="o">{</span>
+  <span class="nd">@Override</span>
+  <span class="kd">public</span> <span class="kt">long</span> <span class="nf">term</span><span class="o">(</span><span class="kt">int</span> <span class="n">n</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">if</span> <span class="o">(</span><span class="n">n</span> <span class="o">==</span> <span class="mi">0</span><span class="o">)</span> <span class="o">{</span>
+      <span class="k">return</span> <span class="mi">0</span><span class="o">;</span>
+    <span class="o">}</span> <span class="k">else</span> <span class="k">if</span> <span class="o">(</span><span class="n">n</span> <span class="o">==</span> <span class="mi">1</span><span class="o">)</span> <span class="o">{</span>
+      <span class="k">return</span> <span class="mi">1</span><span class="o">;</span>
+    <span class="o">}</span>
+
+    <span class="k">return</span> <span class="nf">term</span><span class="o">(</span><span class="n">n</span> <span class="o">-</span> <span class="mi">1</span><span class="o">)</span> <span class="o">+</span> <span class="n">term</span><span class="o">(</span><span class="n">n</span> <span class="o">-</span> <span class="mi">2</span><span class="o">);</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<h3 id="技工服务端点">技工服务端点</h3>
+<p>黄金分割数量运算已经实现,现在我们需要将服务提供给用户,首先我们定义端点接口:</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">interface</span> <span class="nc">FibonacciEndpoint</span> <span class="o">{</span>
+  <span class="kt">long</span> <span class="nf">term</span><span class="o">(</span><span class="kt">int</span> <span class="n">n</span><span class="o">);</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<p>引入 <code class="highlighter-rouge">ServiceComb</code> 依赖:</p>
+
+<div class="language-xml highlighter-rouge"><pre class="highlight"><code>    <span class="nt">&lt;dependency&gt;</span>
+      <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+      <span class="nt">&lt;artifactId&gt;</span>spring-boot-starter-provider<span class="nt">&lt;/artifactId&gt;</span>
+    <span class="nt">&lt;/dependency&gt;</span>
+
+</code></pre>
+</div>
+
+<p>接下来我们同时暴露黄金分割运算服务的<strong>Restful</strong>和<strong>RPC</strong>端点:</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@RestSchema</span><span class="o">(</span><span class="n">schemaId</span> <span class="o">=</span> <span class="s">"fibonacciRestEndpoint"</span><span class="o">)</span>
+<span class="nd">@RequestMapping</span><span class="o">(</span><span class="s">"/fibonacci"</span><span class="o">)</span>
+<span class="nd">@Controller</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">FibonacciRestEndpoint</span> <span class="kd">implements</span> <span class="n">FibonacciEndpoint</span> <span class="o">{</span>
+
+  <span class="kd">private</span> <span class="kd">final</span> <span class="n">FibonacciService</span> <span class="n">fibonacciService</span><span class="o">;</span>
+
+  <span class="nd">@Autowired</span>
+  <span class="n">FibonacciRestEndpoint</span><span class="o">(</span><span class="n">FibonacciService</span> <span class="n">fibonacciService</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">this</span><span class="o">.</span><span class="na">fibonacciService</span> <span class="o">=</span> <span class="n">fibonacciService</span><span class="o">;</span>
+  <span class="o">}</span>
+
+  <span class="nd">@Override</span>
+  <span class="nd">@RequestMapping</span><span class="o">(</span><span class="n">value</span> <span class="o">=</span> <span class="s">"/term"</span><span class="o">,</span> <span class="n">method</span> <span class="o">=</span> <span class="n">RequestMethod</span><span class="o">.</span><span class="na">GET</span><span class="o">)</span>
+  <span class="nd">@ResponseBody</span>
+  <span class="kd">public</span> <span class="kt">long</span> <span class="nf">term</span><span class="o">(</span><span class="kt">int</span> <span class="n">n</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">return</span> <span class="n">fibonacciService</span><span class="o">.</span><span class="na">term</span><span class="o">(</span><span class="n">n</span><span class="o">);</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@RpcSchema</span><span class="o">(</span><span class="n">schemaId</span> <span class="o">=</span> <span class="s">"fibonacciRpcEndpoint"</span><span class="o">)</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">FibonacciRpcEndpoint</span> <span class="kd">implements</span> <span class="n">FibonacciEndpoint</span> <span class="o">{</span>
+
+  <span class="kd">private</span> <span class="kd">final</span> <span class="n">FibonacciService</span> <span class="n">fibonacciService</span><span class="o">;</span>
+
+  <span class="nd">@Autowired</span>
+  <span class="kd">public</span> <span class="nf">FibonacciRpcEndpoint</span><span class="o">(</span><span class="n">FibonacciService</span> <span class="n">fibonacciService</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">this</span><span class="o">.</span><span class="na">fibonacciService</span> <span class="o">=</span> <span class="n">fibonacciService</span><span class="o">;</span>
+  <span class="o">}</span>
+
+  <span class="nd">@Override</span>
+  <span class="kd">public</span> <span class="kt">long</span> <span class="nf">term</span><span class="o">(</span><span class="kt">int</span> <span class="n">n</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">return</span> <span class="n">fibonacciService</span><span class="o">.</span><span class="na">term</span><span class="o">(</span><span class="n">n</span><span class="o">);</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<p>这里用 <code class="highlighter-rouge">@RestSchema</code> 和 <code class="highlighter-rouge">@RpcSchema</code> 注释两个端点后,<code class="highlighter-rouge">ServiceComb</code> 会自动生成对应的服务端点契约,根据如下
+<code class="highlighter-rouge">microsevice.yaml</code> 配置端点端口,并将契约和服务一起注册到<a href="https://github.com/ServiceComb/service-center">Service Center</a>:</p>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="c1"># all interconnected microservices must belong to an application wth the same ID</span>
+<span class="s">APPLICATION_ID</span><span class="pi">:</span> <span class="s">company</span>
+<span class="s">service_description</span><span class="pi">:</span>
+<span class="c1"># name of the declaring microservice</span>
+  <span class="s">name</span><span class="pi">:</span> <span class="s">worker</span>
+  <span class="s">version</span><span class="pi">:</span> <span class="s">0.0.1</span>
+<span class="c1"># service center address</span>
+<span class="s">cse</span><span class="pi">:</span>
+  <span class="s">service</span><span class="pi">:</span>
+    <span class="s">registry</span><span class="pi">:</span>
+      <span class="s">address</span><span class="pi">:</span> <span class="s">http://sc.servicecomb.io:30100</span>
+  <span class="s">highway</span><span class="pi">:</span>
+    <span class="s">address</span><span class="pi">:</span> <span class="s">0.0.0.0:7070</span>
+  <span class="s">rest</span><span class="pi">:</span>
+    <span class="s">address</span><span class="pi">:</span> <span class="s">0.0.0.0:8080</span>
+</code></pre>
+</div>
+
+<p>最后,提供技工服务应用启动入口,并加上 <code class="highlighter-rouge">@EnableServiceComb</code> 注释启用 <code class="highlighter-rouge">ServiceComb</code> :</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@SpringBootApplication</span>
+<span class="nd">@EnableServiceComb</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">WorkerApplication</span> <span class="o">{</span>
+
+  <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
+    <span class="n">SpringApplication</span><span class="o">.</span><span class="na">run</span><span class="o">(</span><span class="n">WorkerApplication</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">args</span><span class="o">);</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<h2 id="告示栏-bulletin-board">告示栏 (Bulletin Board)</h2>
+<p><strong>告示栏</strong>提供为<strong>门卫</strong>、<strong>技工</strong>和<strong>养蜂人</strong>注册联系方式的设施,同时<strong>经理</strong>和<strong>养蜂人</strong>可通过此设施查询注册方的联系方式,以方便匹配能力的提供和消费。</p>
+
+<p><code class="highlighter-rouge">Service Center</code> 提供契约和服务注册、发现功能,而且校验服务提供方和消费方的契约是否匹配,我们可以<a href="https://github.com/ServiceComb/service-center/releases">下载</a>编译好的版本直接运行。</p>
+
+<h2 id="养蜂人-beekeeper">养蜂人 (Beekeeper)</h2>
+<p><strong>养蜂人</strong>研究蜜蜂繁殖规律,计算每只蜜蜂 (雄蜂/雌蜂) 的祖先数量。因为蜜蜂繁殖规律和黄金分割数列相关,所以<strong>养蜂人</strong>同时消费<strong>技工</strong>提供的计算服务。</p>
+
+<p><a href="http://www.dave-cushman.net/bee/fibonacci.html">研究</a>表明,雄蜂(Drone)由未受精卵孵化而生,只有母亲;而雌蜂(Queen)由受精卵孵化而生,既有母又有父。</p>
+
+<p class="figure-caption"><img src="/assets/images/fibonaccitree.gif" alt="fibonacci tree" />
+Credit: <a href="http://www.dave-cushman.net&quot;">Dave Cushman’s website</a></p>
+
+<p>参考上图,蜜蜂的某一代祖先数量符合黄金分割数列的模型,由此我们可以很快实现服务功能。</p>
+
+<h3 id="蜜蜂繁殖规律研究服务">蜜蜂繁殖规律研究服务</h3>
+<p>首先我们定义黄金数列运算接口:</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">interface</span> <span class="nc">FibonacciCalculator</span> <span class="o">{</span>
+
+  <span class="kt">long</span> <span class="nf">term</span><span class="o">(</span><span class="kt">int</span> <span class="n">n</span><span class="o">);</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<p>接下来定义并实现蜜蜂繁殖规律研究服务:</p>
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kd">interface</span> <span class="nc">BeekeeperService</span> <span class="o">{</span>
+  <span class="kt">long</span> <span class="nf">ancestorsOfDroneAt</span><span class="o">(</span><span class="kt">int</span> <span class="n">generation</span><span class="o">);</span>
+
+  <span class="kt">long</span> <span class="nf">ancestorsOfQueenAt</span><span class="o">(</span><span class="kt">int</span> <span class="n">generation</span><span class="o">);</span>
+<span class="o">}</span>
+
+<span class="kd">class</span> <span class="nc">BeekeeperServiceImpl</span> <span class="kd">implements</span> <span class="n">BeekeeperService</span> <span class="o">{</span>
+
+  <span class="kd">private</span> <span class="kd">final</span> <span class="n">FibonacciCalculator</span> <span class="n">fibonacciCalculator</span><span class="o">;</span>
+
+  <span class="n">BeekeeperServiceImpl</span><span class="o">(</span><span class="n">FibonacciCalculator</span> <span class="n">fibonacciCalculator</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">this</span><span class="o">.</span><span class="na">fibonacciCalculator</span> <span class="o">=</span> <span class="n">fibonacciCalculator</span><span class="o">;</span>
+  <span class="o">}</span>
+
+  <span class="nd">@Override</span>
+  <span class="kd">public</span> <span class="kt">long</span> <span class="nf">ancestorsOfDroneAt</span><span class="o">(</span><span class="kt">int</span> <span class="n">generation</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">if</span> <span class="o">(</span><span class="n">generation</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="o">)</span> <span class="o">{</span>
+      <span class="k">return</span> <span class="mi">0</span><span class="o">;</span>
+    <span class="o">}</span>
+    <span class="k">return</span> <span class="n">fibonacciCalculator</span><span class="o">.</span><span class="na">term</span><span class="o">(</span><span class="n">generation</span> <span class="o">+</span> <span class="mi">1</span><span class="o">);</span>
+  <span class="o">}</span>
+
+  <span class="nd">@Override</span>
+  <span class="kd">public</span> <span class="kt">long</span> <span class="nf">ancestorsOfQueenAt</span><span class="o">(</span><span class="kt">int</span> <span class="n">generation</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">if</span> <span class="o">(</span><span class="n">generation</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="o">)</span> <span class="o">{</span>
+      <span class="k">return</span> <span class="mi">0</span><span class="o">;</span>
+    <span class="o">}</span>
+    <span class="k">return</span> <span class="n">fibonacciCalculator</span><span class="o">.</span><span class="na">term</span><span class="o">(</span><span class="n">generation</span> <span class="o">+</span> <span class="mi">2</span><span class="o">);</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<p>这里我们用到之前定义的 <code class="highlighter-rouge">FibonacciCalculator</code> 接口,并希望通过这个接口远程调用<strong>技工</strong>服务端点。<code class="highlighter-rouge">@RpcReference</code>
+注释能帮助我们自动从<a href="https://github.com/ServiceComb/service-center">Service Center</a>中获取
+<code class="highlighter-rouge">microserviceName = "worker", schemaId = "fibonacciRpcEndpoint"</code> , 即服务名为 <code class="highlighter-rouge">worker</code> 已经schema ID为
+<code class="highlighter-rouge">fibonacciRpcEndpoint</code>的端点:</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@Configuration</span>
+<span class="kd">class</span> <span class="nc">BeekeeperConfig</span> <span class="o">{</span>
+
+  <span class="nd">@RpcReference</span><span class="o">(</span><span class="n">microserviceName</span> <span class="o">=</span> <span class="s">"worker"</span><span class="o">,</span> <span class="n">schemaId</span> <span class="o">=</span> <span class="s">"fibonacciRpcEndpoint"</span><span class="o">)</span>
+  <span class="kd">private</span> <span class="n">FibonacciCalculator</span> <span class="n">fibonacciCalculator</span><span class="o">;</span>
+
+  <span class="nd">@Bean</span>
+  <span class="n">BeekeeperService</span> <span class="nf">beekeeperService</span><span class="o">()</span> <span class="o">{</span>
+    <span class="k">return</span> <span class="k">new</span> <span class="nf">BeekeeperServiceImpl</span><span class="o">(</span><span class="n">fibonacciCalculator</span><span class="o">);</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<p>我们在<strong>技工</strong>一节已定义好对应的服务名和schema ID端点,通过上面的配置,<code class="highlighter-rouge">ServiceComb</code> 会自动将远程<strong>技工</strong>服务
+实例和 <code class="highlighter-rouge">FibonacciCalculator</code> 绑定在一起。</p>
+
+<h3 id="养蜂人服务端点">养蜂人服务端点</h3>
+<p>与上一节<strong>技工</strong>服务相似,我们在这里也需要提供养蜂人服务端点,让用户可以进行调用:</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@RestSchema</span><span class="o">(</span><span class="n">schemaId</span> <span class="o">=</span> <span class="s">"beekeeperRestEndpoint"</span><span class="o">)</span>
+<span class="nd">@RequestMapping</span><span class="o">(</span><span class="s">"/rest"</span><span class="o">)</span>
+<span class="nd">@Controller</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">BeekeeperController</span> <span class="o">{</span>
+
+  <span class="kd">private</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">Logger</span> <span class="n">logger</span> <span class="o">=</span> <span class="n">LoggerFactory</span><span class="o">.</span><span class="na">getLogger</span><span class="o">(</span><span class="n">BeekeeperController</span><span class="o">.</span><span class="na">class</span><span class="o">);</span>
+
+  <span class="kd">private</span> <span class="kd">final</span> <span class="n">BeekeeperService</span> <span class="n">beekeeperService</span><span class="o">;</span>
+
+  <span class="nd">@Autowired</span>
+  <span class="n">BeekeeperController</span><span class="o">(</span><span class="n">BeekeeperService</span> <span class="n">beekeeperService</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">this</span><span class="o">.</span><span class="na">beekeeperService</span> <span class="o">=</span> <span class="n">beekeeperService</span><span class="o">;</span>
+  <span class="o">}</span>
+
+  <span class="nd">@RequestMapping</span><span class="o">(</span><span class="n">value</span> <span class="o">=</span> <span class="s">"/drone/ancestors/{generation}"</span><span class="o">,</span> <span class="n">method</span> <span class="o">=</span> <span class="n">GET</span><span class="o">,</span> <span class="n">produces</span> <span class="o">=</span> <span class="n">APPLICATION_JSON_UTF8_VALUE</span><span class="o">)</span>
+  <span class="nd">@ResponseBody</span>
+  <span class="kd">public</span> <span class="n">Ancestor</span> <span class="nf">ancestorsOfDrone</span><span class="o">(</span><span class="nd">@PathVariable</span> <span class="kt">int</span> <span class="n">generation</span><span class="o">)</span> <span class="o">{</span>
+    <span class="n">logger</span><span class="o">.</span><span class="na">info</span><span class="o">(</span>
+        <span class="s">"Received request to find the number of ancestors of drone at generation {}"</span><span class="o">,</span>
+        <span class="n">generation</span><span class="o">);</span>
+
+    <span class="k">return</span> <span class="k">new</span> <span class="nf">Ancestor</span><span class="o">(</span><span class="n">beekeeperService</span><span class="o">.</span><span class="na">ancestorsOfDroneAt</span><span class="o">(</span><span class="n">generation</span><span class="o">));</span>
+  <span class="o">}</span>
+
+  <span class="nd">@RequestMapping</span><span class="o">(</span><span class="n">value</span> <span class="o">=</span> <span class="s">"/queen/ancestors/{generation}"</span><span class="o">,</span> <span class="n">method</span> <span class="o">=</span> <span class="n">GET</span><span class="o">,</span> <span class="n">produces</span> <span class="o">=</span> <span class="n">APPLICATION_JSON_UTF8_VALUE</span><span class="o">)</span>
+  <span class="nd">@ResponseBody</span>
+  <span class="kd">public</span> <span class="n">Ancestor</span> <span class="nf">ancestorsOfQueen</span><span class="o">(</span><span class="nd">@PathVariable</span> <span class="kt">int</span> <span class="n">generation</span><span class="o">)</span> <span class="o">{</span>
+    <span class="n">logger</span><span class="o">.</span><span class="na">info</span><span class="o">(</span>
+        <span class="s">"Received request to find the number of ancestors of queen at generation {}"</span><span class="o">,</span>
+        <span class="n">generation</span><span class="o">);</span>
+
+    <span class="k">return</span> <span class="k">new</span> <span class="nf">Ancestor</span><span class="o">(</span><span class="n">beekeeperService</span><span class="o">.</span><span class="na">ancestorsOfQueenAt</span><span class="o">(</span><span class="n">generation</span><span class="o">));</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+
+<span class="kd">class</span> <span class="nc">Ancestor</span> <span class="o">{</span>
+  <span class="kd">private</span> <span class="kt">long</span> <span class="n">ancestors</span><span class="o">;</span>
+
+  <span class="n">Ancestor</span><span class="o">()</span> <span class="o">{</span>
+  <span class="o">}</span>
+
+  <span class="n">Ancestor</span><span class="o">(</span><span class="kt">long</span> <span class="n">ancestors</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">this</span><span class="o">.</span><span class="na">ancestors</span> <span class="o">=</span> <span class="n">ancestors</span><span class="o">;</span>
+  <span class="o">}</span>
+
+  <span class="kd">public</span> <span class="kt">long</span> <span class="nf">getAncestors</span><span class="o">()</span> <span class="o">{</span>
+    <span class="k">return</span> <span class="n">ancestors</span><span class="o">;</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<p>因为<strong>养蜂人</strong>需要消费<strong>技工</strong>提供的服务,所以其 <code class="highlighter-rouge">microservice.yaml</code> 配置稍有不同:</p>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="c1"># all interconnected microservices must belong to an application wth the same ID</span>
+<span class="s">APPLICATION_ID</span><span class="pi">:</span> <span class="s">company</span>
+<span class="s">service_description</span><span class="pi">:</span>
+<span class="c1"># name of the declaring microservice</span>
+  <span class="s">name</span><span class="pi">:</span> <span class="s">beekeeper</span>
+  <span class="s">version</span><span class="pi">:</span> <span class="s">0.0.1</span>
+<span class="s">cse</span><span class="pi">:</span>
+  <span class="s">service</span><span class="pi">:</span>
+    <span class="s">registry</span><span class="pi">:</span>
+      <span class="s">address</span><span class="pi">:</span> <span class="s">http://sc.servicecomb.io:30100</span>
+  <span class="s">rest</span><span class="pi">:</span>
+    <span class="s">address</span><span class="pi">:</span> <span class="s">0.0.0.0:8090</span>
+  <span class="s">handler</span><span class="pi">:</span>
+    <span class="s">chain</span><span class="pi">:</span>
+      <span class="s">Consumer</span><span class="pi">:</span>
+        <span class="s">default</span><span class="pi">:</span> <span class="s">bizkeeper-consumer,loadbalance</span>
+  <span class="s">references</span><span class="pi">:</span>
+<span class="c1">#  this one below must refer to the microservice name it communicates with</span>
+    <span class="s">worker</span><span class="pi">:</span>
+      <span class="s">version-rule</span><span class="pi">:</span> <span class="s">0.0.1</span>
+</code></pre>
+</div>
+
+<p>这里我们需要定义 <code class="highlighter-rouge">cse.references.worker.version-rule</code> ,让配置名称中指向<strong>技工</strong>服务名 <code class="highlighter-rouge">worker</code> ,并匹配其版本号。</p>
+
+<p>最后定义养蜂人服务应用入口:</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@SpringBootApplication</span>
+<span class="nd">@EnableServiceComb</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">BeekeeperApplication</span> <span class="o">{</span>
+
+  <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
+    <span class="n">SpringApplication</span><span class="o">.</span><span class="na">run</span><span class="o">(</span><span class="n">BeekeeperApplication</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">args</span><span class="o">);</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<h2 id="门卫-doorman">门卫 (Doorman)</h2>
+<p><strong>门卫</strong>为公司提供安全保障,屏蔽非合法用户,防止其骗取免费服务,甚至伤害<strong>技工</strong>和<strong>养蜂人</strong>。</p>
+
+<h3 id="门卫认证服务">门卫认证服务</h3>
+<p>认证功能我们采用<a href="https://jwt.io/introduction/">JSON Web Token (JWT)</a>的机制,具体实现超出了这篇文章的范围,
+细节大家可以查看github上<a href="https://github.com/ServiceComb/LinuxCon-Beijing-WorkShop">workshop</a>的 <code class="highlighter-rouge">doorman</code> 模块代码。</p>
+
+<p>认证服务的接口如下,<code class="highlighter-rouge">authenticate</code> 方法根据用户名和密码查询确认用户存在,并返回对应JWT token。用户登录后的每次
+请求都需要带上返回的JWT token,而 <code class="highlighter-rouge">validate</code> 方法将验证token以确认其有效。</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">interface</span> <span class="nc">AuthenticationService</span> <span class="o">{</span>
+  <span class="n">String</span> <span class="nf">authenticate</span><span class="o">(</span><span class="n">String</span> <span class="n">username</span><span class="o">,</span> <span class="n">String</span> <span class="n">password</span><span class="o">);</span>
+
+  <span class="n">String</span> <span class="nf">validate</span><span class="o">(</span><span class="n">String</span> <span class="n">token</span><span class="o">);</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<h3 id="门卫认证服务端点">门卫认证服务端点</h3>
+
+<p>与前两节的Rest服务端点相似,我们加上 <code class="highlighter-rouge">@RestSchema</code> 注释,以便 <code class="highlighter-rouge">ServiceComb</code> 自动配置端点、生成契约并注册服务。</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@RestSchema</span><span class="o">(</span><span class="n">schemaId</span> <span class="o">=</span> <span class="s">"authenticationRestEndpoint"</span><span class="o">)</span>
+<span class="nd">@Controller</span>
+<span class="nd">@RequestMapping</span><span class="o">(</span><span class="s">"/rest"</span><span class="o">)</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">AuthenticationController</span> <span class="o">{</span>
+
+  <span class="kd">private</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">Logger</span> <span class="n">logger</span> <span class="o">=</span> <span class="n">LoggerFactory</span><span class="o">.</span><span class="na">getLogger</span><span class="o">(</span><span class="n">AuthenticationController</span><span class="o">.</span><span class="na">class</span><span class="o">);</span>
+
+  <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">USERNAME</span> <span class="o">=</span> <span class="s">"username"</span><span class="o">;</span>
+  <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">PASSWORD</span> <span class="o">=</span> <span class="s">"password"</span><span class="o">;</span>
+  <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">TOKEN</span> <span class="o">=</span> <span class="s">"token"</span><span class="o">;</span>
+
+  <span class="kd">private</span> <span class="kd">final</span> <span class="n">AuthenticationService</span> <span class="n">authenticationService</span><span class="o">;</span>
+
+  <span class="nd">@Autowired</span>
+  <span class="n">AuthenticationController</span><span class="o">(</span><span class="n">AuthenticationService</span> <span class="n">authenticationService</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">this</span><span class="o">.</span><span class="na">authenticationService</span> <span class="o">=</span> <span class="n">authenticationService</span><span class="o">;</span>
+  <span class="o">}</span>
+
+  <span class="nd">@RequestMapping</span><span class="o">(</span><span class="n">value</span> <span class="o">=</span> <span class="s">"/login"</span><span class="o">,</span> <span class="n">method</span> <span class="o">=</span> <span class="n">POST</span><span class="o">,</span> <span class="n">produces</span> <span class="o">=</span> <span class="n">TEXT_PLAIN_VALUE</span><span class="o">)</span>
+  <span class="kd">public</span> <span class="n">ResponseEntity</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span> <span class="nf">login</span><span class="o">(</span>
+      <span class="nd">@RequestParam</span><span class="o">(</span><span class="n">USERNAME</span><span class="o">)</span> <span class="n">String</span> <span class="n">username</span><span class="o">,</span>
+      <span class="nd">@RequestParam</span><span class="o">(</span><span class="n">PASSWORD</span><span class="o">)</span> <span class="n">String</span> <span class="n">password</span><span class="o">)</span> <span class="o">{</span>
+
+    <span class="n">logger</span><span class="o">.</span><span class="na">info</span><span class="o">(</span><span class="s">"Received login request from user {}"</span><span class="o">,</span> <span class="n">username</span><span class="o">);</span>
+    <span class="n">String</span> <span class="n">token</span> <span class="o">=</span> <span class="n">authenticationService</span><span class="o">.</span><span class="na">authenticate</span><span class="o">(</span><span class="n">username</span><span class="o">,</span> <span class="n">password</span><span class="o">);</span>
+    <span class="n">HttpHeaders</span> <span class="n">headers</span> <span class="o">=</span> <span class="k">new</span> <span class="n">HttpHeaders</span><span class="o">();</span>
+    <span class="n">headers</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">AUTHORIZATION</span><span class="o">,</span> <span class="n">TOKEN_PREFIX</span> <span class="o">+</span> <span class="n">token</span><span class="o">);</span>
+
+    <span class="n">logger</span><span class="o">.</span><span class="na">info</span><span class="o">(</span><span class="s">"Authenticated user {} successfully"</span><span class="o">,</span> <span class="n">username</span><span class="o">);</span>
+    <span class="k">return</span> <span class="k">new</span> <span class="n">ResponseEntity</span><span class="o">&lt;&gt;(</span><span class="s">"Welcome, "</span> <span class="o">+</span> <span class="n">username</span><span class="o">,</span> <span class="n">headers</span><span class="o">,</span> <span class="n">OK</span><span class="o">);</span>
+  <span class="o">}</span>
+
+  <span class="nd">@RequestMapping</span><span class="o">(</span><span class="n">value</span> <span class="o">=</span> <span class="s">"/validate"</span><span class="o">,</span> <span class="n">method</span> <span class="o">=</span> <span class="n">POST</span><span class="o">,</span> <span class="n">consumes</span> <span class="o">=</span> <span class="n">APPLICATION_JSON_UTF8_VALUE</span><span class="o">,</span> <span class="n">produces</span> <span class="o">=</span> <span class="n">TEXT_PLAIN_VALUE</span><span class="o">)</span>
+  <span class="nd">@ResponseBody</span>
+  <span class="kd">public</span> <span class="n">String</span> <span class="nf">validate</span><span class="o">(</span><span class="nd">@RequestBody</span> <span class="n">Token</span> <span class="n">token</span><span class="o">)</span> <span class="o">{</span>
+    <span class="n">logger</span><span class="o">.</span><span class="na">info</span><span class="o">(</span><span class="s">"Received validation request of token {}"</span><span class="o">,</span> <span class="n">token</span><span class="o">);</span>
+    <span class="k">return</span> <span class="n">authenticationService</span><span class="o">.</span><span class="na">validate</span><span class="o">(</span><span class="n">token</span><span class="o">.</span><span class="na">getToken</span><span class="o">());</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+
+<span class="kd">class</span> <span class="nc">Token</span> <span class="o">{</span>
+  <span class="kd">private</span> <span class="n">String</span> <span class="n">token</span><span class="o">;</span>
+
+  <span class="n">Token</span><span class="o">()</span> <span class="o">{</span>
+  <span class="o">}</span>
+
+  <span class="n">Token</span><span class="o">(</span><span class="n">String</span> <span class="n">token</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">this</span><span class="o">.</span><span class="na">token</span> <span class="o">=</span> <span class="n">token</span><span class="o">;</span>
+  <span class="o">}</span>
+
+  <span class="kd">public</span> <span class="n">String</span> <span class="nf">getToken</span><span class="o">()</span> <span class="o">{</span>
+    <span class="k">return</span> <span class="n">token</span><span class="o">;</span>
+  <span class="o">}</span>
+
+  <span class="nd">@Override</span>
+  <span class="kd">public</span> <span class="n">String</span> <span class="nf">toString</span><span class="o">()</span> <span class="o">{</span>
+    <span class="k">return</span> <span class="s">"Token{"</span> <span class="o">+</span>
+        <span class="s">"token='"</span> <span class="o">+</span> <span class="n">token</span> <span class="o">+</span> <span class="sc">'\''</span> <span class="o">+</span>
+        <span class="sc">'}'</span><span class="o">;</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<p>同样,我们需要提供服务应用启动入口以及 <code class="highlighter-rouge">microservice.yaml</code>:</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@SpringBootApplication</span>
+<span class="nd">@EnableServiceComb</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">DoormanApplication</span> <span class="o">{</span>
+
+  <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
+    <span class="n">SpringApplication</span><span class="o">.</span><span class="na">run</span><span class="o">(</span><span class="n">DoormanApplication</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">args</span><span class="o">);</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="c1"># all interconnected microservices must belong to an application wth the same ID</span>
+<span class="s">APPLICATION_ID</span><span class="pi">:</span> <span class="s">company</span>
+<span class="s">service_description</span><span class="pi">:</span>
+<span class="c1"># name of the declaring microservice</span>
+  <span class="s">name</span><span class="pi">:</span> <span class="s">doorman</span>
+  <span class="s">version</span><span class="pi">:</span> <span class="s">0.0.1</span>
+<span class="s">cse</span><span class="pi">:</span>
+  <span class="s">service</span><span class="pi">:</span>
+    <span class="s">registry</span><span class="pi">:</span>
+      <span class="s">address</span><span class="pi">:</span> <span class="s">http://sc.servicecomb.io:30100</span>
+  <span class="s">rest</span><span class="pi">:</span>
+    <span class="s">address</span><span class="pi">:</span> <span class="s">0.0.0.0:9090</span>
+</code></pre>
+</div>
+
+<h2 id="经理-manager">经理 (Manager)</h2>
+<p>为了管理所有人员和设施,<strong>经理</strong>作为用户唯一接口人,主要功能有:</p>
+
+<ul>
+  <li>
+    <p>联系<strong>门卫</strong>认证用户,保护<strong>技工</strong>和<strong>养蜂人</strong>,以免非法用户骗取服务并逃避服务费用</p>
+  </li>
+  <li>
+    <p>联系能力相符的<strong>技工</strong>和<strong>养蜂人</strong>,平衡工作量,避免单个人员工作超载</p>
+  </li>
+  <li>
+    <p>管理<strong>项目归档</strong>,避免重复工作,保证公司收益最大化</p>
+  </li>
+</ul>
+
+<p>由于<strong>经理</strong>责任重大,我们选取了业界有名的<a href="https://github.com/Netflix/zuul">Netflix Zuul</a>作为候选人并加以培训,
+提升其能力,以保证其能胜任该职位。</p>
+
+<p>首先我们引入依赖:</p>
+
+<div class="language-xml highlighter-rouge"><pre class="highlight"><code>  <span class="nt">&lt;dependency&gt;</span>
+    <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+    <span class="nt">&lt;artifactId&gt;</span>spring-boot-starter-discovery<span class="nt">&lt;/artifactId&gt;</span>
+  <span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+</div>
+
+<h3 id="用户认证服务">用户认证服务</h3>
+<p>当用户发送非登录请求时,我们首先需要验证用户合法,在如下服务中,我们通过<strong>告示栏</strong>获取<strong>门卫</strong>联系方式,
+然后发送用户token给<strong>门卫</strong>进行认证。</p>
+
+<p><code class="highlighter-rouge">ServiceComb</code> 提供了相应 <code class="highlighter-rouge">RestTemplate</code> 实现查询<a href="https://github.com/ServiceComb/service-center">Service Center</a>
+中的服务注册信息,只需在地址中以如下格式包含被调用的服务名</p>
+
+<div class="language-html highlighter-rouge"><pre class="highlight"><code>cse://doorman/path/to/rest/endpoint
+</code></pre>
+</div>
+
+<p><code class="highlighter-rouge">ServiceComb</code> 将自动查询对应服务并发送请求到地址中的服务端点。</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@Service</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">AuthenticationService</span> <span class="o">{</span>
+
+  <span class="kd">private</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">Logger</span> <span class="n">logger</span> <span class="o">=</span> <span class="n">LoggerFactory</span><span class="o">.</span><span class="na">getLogger</span><span class="o">(</span><span class="n">AuthenticationService</span><span class="o">.</span><span class="na">class</span><span class="o">);</span>
+  <span class="kd">private</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">DOORMAN_ADDRESS</span> <span class="o">=</span> <span class="s">"cse://doorman"</span><span class="o">;</span>
+
+  <span class="kd">private</span> <span class="kd">final</span> <span class="n">RestTemplate</span> <span class="n">restTemplate</span><span class="o">;</span>
+
+  <span class="n">AuthenticationService</span><span class="o">()</span> <span class="o">{</span>
+    <span class="k">this</span><span class="o">.</span><span class="na">restTemplate</span> <span class="o">=</span> <span class="n">RestTemplateBuilder</span><span class="o">.</span><span class="na">create</span><span class="o">();</span>
+
+    <span class="k">this</span><span class="o">.</span><span class="na">restTemplate</span><span class="o">.</span><span class="na">setErrorHandler</span><span class="o">(</span><span class="k">new</span> <span class="n">ResponseErrorHandler</span><span class="o">()</span> <span class="o">{</span>
+      <span class="nd">@Override</span>
+      <span class="kd">public</span> <span class="kt">boolean</span> <span class="nf">hasError</span><span class="o">(</span><span class="n">ClientHttpResponse</span> <span class="n">clientHttpResponse</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">IOException</span> <span class="o">{</span>
+        <span class="k">return</span> <span class="kc">false</span><span class="o">;</span>
+      <span class="o">}</span>
+
+      <span class="nd">@Override</span>
+      <span class="kd">public</span> <span class="kt">void</span> <span class="nf">handleError</span><span class="o">(</span><span class="n">ClientHttpResponse</span> <span class="n">clientHttpResponse</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">IOException</span> <span class="o">{</span>
+      <span class="o">}</span>
+    <span class="o">});</span>
+  <span class="o">}</span>
+
+  <span class="nd">@HystrixCommand</span><span class="o">(</span><span class="n">fallbackMethod</span> <span class="o">=</span> <span class="s">"timeout"</span><span class="o">)</span>
+  <span class="kd">public</span> <span class="n">ResponseEntity</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span> <span class="nf">validate</span><span class="o">(</span><span class="n">String</span> <span class="n">token</span><span class="o">)</span> <span class="o">{</span>
+    <span class="n">logger</span><span class="o">.</span><span class="na">info</span><span class="o">(</span><span class="s">"Validating token {}"</span><span class="o">,</span> <span class="n">token</span><span class="o">);</span>
+    <span class="n">ResponseEntity</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span> <span class="n">responseEntity</span> <span class="o">=</span> <span class="n">restTemplate</span><span class="o">.</span><span class="na">postForEntity</span><span class="o">(</span>
+        <span class="n">DOORMAN_ADDRESS</span> <span class="o">+</span> <span class="s">"/rest/validate"</span><span class="o">,</span>
+        <span class="n">validationRequest</span><span class="o">(</span><span class="n">token</span><span class="o">),</span>
+        <span class="n">String</span><span class="o">.</span><span class="na">class</span>
+    <span class="o">);</span>
+
+    <span class="k">if</span> <span class="o">(!</span><span class="n">responseEntity</span><span class="o">.</span><span class="na">getStatusCode</span><span class="o">().</span><span class="na">is2xxSuccessful</span><span class="o">())</span> <span class="o">{</span>
+      <span class="n">logger</span><span class="o">.</span><span class="na">warn</span><span class="o">(</span><span class="s">"No such user found with token {}"</span><span class="o">,</span> <span class="n">token</span><span class="o">);</span>
+    <span class="o">}</span>
+    <span class="n">logger</span><span class="o">.</span><span class="na">info</span><span class="o">(</span><span class="s">"Validated request of token {} to be user {}"</span><span class="o">,</span> <span class="n">token</span><span class="o">,</span> <span class="n">responseEntity</span><span class="o">.</span><span class="na">getBody</span><span class="o">());</span>
+    <span class="k">return</span> <span class="n">responseEntity</span><span class="o">;</span>
+  <span class="o">}</span>
+
+  <span class="kd">private</span> <span class="n">ResponseEntity</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span> <span class="nf">timeout</span><span class="o">(</span><span class="n">String</span> <span class="n">token</span><span class="o">)</span> <span class="o">{</span>
+    <span class="n">logger</span><span class="o">.</span><span class="na">warn</span><span class="o">(</span><span class="s">"Request to validate token {} timed out"</span><span class="o">,</span> <span class="n">token</span><span class="o">);</span>
+    <span class="k">return</span> <span class="k">new</span> <span class="n">ResponseEntity</span><span class="o">&lt;&gt;(</span><span class="n">REQUEST_TIMEOUT</span><span class="o">);</span>
+  <span class="o">}</span>
+
+  <span class="kd">private</span> <span class="n">HttpEntity</span><span class="o">&lt;</span><span class="n">Token</span><span class="o">&gt;</span> <span class="nf">validationRequest</span><span class="o">(</span><span class="n">String</span> <span class="n">token</span><span class="o">)</span> <span class="o">{</span>
+    <span class="n">HttpHeaders</span> <span class="n">headers</span> <span class="o">=</span> <span class="k">new</span> <span class="n">HttpHeaders</span><span class="o">();</span>
+    <span class="n">headers</span><span class="o">.</span><span class="na">setContentType</span><span class="o">(</span><span class="n">MediaType</span><span class="o">.</span><span class="na">APPLICATION_JSON_UTF8</span><span class="o">);</span>
+
+    <span class="k">return</span> <span class="k">new</span> <span class="n">HttpEntity</span><span class="o">&lt;&gt;(</span><span class="k">new</span> <span class="n">Token</span><span class="o">(</span><span class="n">token</span><span class="o">),</span> <span class="n">headers</span><span class="o">);</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<h3 id="请求过滤">请求过滤</h3>
+<p>接下来我们提供 <code class="highlighter-rouge">ZuulFilter</code> 实现过滤用户请求,调用 <code class="highlighter-rouge">authenticationService.validate(token)</code> 认证用户token。
+若用户合法则路由用户请求到对应服务,否则返回 <code class="highlighter-rouge">403 forbidden</code>。</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@Component</span>
+<span class="kd">class</span> <span class="nc">AuthenticationAwareFilter</span> <span class="kd">extends</span> <span class="n">ZuulFilter</span> <span class="o">{</span>
+
+  <span class="kd">private</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">Logger</span> <span class="n">logger</span> <span class="o">=</span> <span class="n">LoggerFactory</span><span class="o">.</span><span class="na">getLogger</span><span class="o">(</span><span class="n">AuthenticationAwareFilter</span><span class="o">.</span><span class="na">class</span><span class="o">);</span>
+
+  <span class="kd">private</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">LOGIN_PATH</span> <span class="o">=</span> <span class="s">"/login"</span><span class="o">;</span>
+
+  <span class="kd">private</span> <span class="kd">final</span> <span class="n">AuthenticationService</span> <span class="n">authenticationService</span><span class="o">;</span>
+  <span class="kd">private</span> <span class="kd">final</span> <span class="n">PathExtractor</span> <span class="n">pathExtractor</span><span class="o">;</span>
+
+  <span class="nd">@Autowired</span>
+  <span class="n">AuthenticationAwareFilter</span><span class="o">(</span>
+      <span class="n">AuthenticationService</span> <span class="n">authenticationService</span><span class="o">,</span>
+      <span class="n">PathExtractor</span> <span class="n">pathExtractor</span><span class="o">)</span> <span class="o">{</span>
+
+    <span class="k">this</span><span class="o">.</span><span class="na">authenticationService</span> <span class="o">=</span> <span class="n">authenticationService</span><span class="o">;</span>
+    <span class="k">this</span><span class="o">.</span><span class="na">pathExtractor</span> <span class="o">=</span> <span class="n">pathExtractor</span><span class="o">;</span>
+  <span class="o">}</span>
+
+  <span class="nd">@Override</span>
+  <span class="kd">public</span> <span class="n">String</span> <span class="nf">filterType</span><span class="o">()</span> <span class="o">{</span>
+    <span class="k">return</span> <span class="s">"pre"</span><span class="o">;</span>
+  <span class="o">}</span>
+
+  <span class="nd">@Override</span>
+  <span class="kd">public</span> <span class="kt">int</span> <span class="nf">filterOrder</span><span class="o">()</span> <span class="o">{</span>
+    <span class="k">return</span> <span class="mi">1</span><span class="o">;</span>
+  <span class="o">}</span>
+
+  <span class="nd">@Override</span>
+  <span class="kd">public</span> <span class="kt">boolean</span> <span class="nf">shouldFilter</span><span class="o">()</span> <span class="o">{</span>
+    <span class="n">String</span> <span class="n">path</span> <span class="o">=</span> <span class="n">pathExtractor</span><span class="o">.</span><span class="na">path</span><span class="o">(</span><span class="n">RequestContext</span><span class="o">.</span><span class="na">getCurrentContext</span><span class="o">());</span>
+    <span class="n">logger</span><span class="o">.</span><span class="na">info</span><span class="o">(</span><span class="s">"Received request with query path: {}"</span><span class="o">,</span> <span class="n">path</span><span class="o">);</span>
+    <span class="k">return</span> <span class="o">!</span><span class="n">path</span><span class="o">.</span><span class="na">endsWith</span><span class="o">(</span><span class="n">LOGIN_PATH</span><span class="o">);</span>
+  <span class="o">}</span>
+
+  <span class="nd">@Override</span>
+  <span class="kd">public</span> <span class="n">Object</span> <span class="nf">run</span><span class="o">()</span> <span class="o">{</span>
+    <span class="n">filter</span><span class="o">();</span>
+    <span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
+  <span class="o">}</span>
+
+  <span class="kd">private</span> <span class="kt">void</span> <span class="nf">filter</span><span class="o">()</span> <span class="o">{</span>
+    <span class="n">RequestContext</span> <span class="n">context</span> <span class="o">=</span> <span class="n">RequestContext</span><span class="o">.</span><span class="na">getCurrentContext</span><span class="o">();</span>
+
+    <span class="k">if</span> <span class="o">(</span><span class="n">doesNotContainToken</span><span class="o">(</span><span class="n">context</span><span class="o">))</span> <span class="o">{</span>
+      <span class="n">logger</span><span class="o">.</span><span class="na">warn</span><span class="o">(</span><span class="s">"No token found in request header"</span><span class="o">);</span>
+      <span class="n">rejectRequest</span><span class="o">(</span><span class="n">context</span><span class="o">);</span>
+    <span class="o">}</span> <span class="k">else</span> <span class="o">{</span>
+      <span class="n">String</span> <span class="n">token</span> <span class="o">=</span> <span class="n">token</span><span class="o">(</span><span class="n">context</span><span class="o">);</span>
+      <span class="n">ResponseEntity</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span> <span class="n">responseEntity</span> <span class="o">=</span> <span class="n">authenticationService</span><span class="o">.</span><span class="na">validate</span><span class="o">(</span><span class="n">token</span><span class="o">);</span>
+      <span class="k">if</span> <span class="o">(!</span><span class="n">responseEntity</span><span class="o">.</span><span class="na">getStatusCode</span><span class="o">().</span><span class="na">is2xxSuccessful</span><span class="o">())</span> <span class="o">{</span>
+        <span class="n">logger</span><span class="o">.</span><span class="na">warn</span><span class="o">(</span><span class="s">"Unauthorized token {} and request rejected"</span><span class="o">,</span> <span class="n">token</span><span class="o">);</span>
+        <span class="n">rejectRequest</span><span class="o">(</span><span class="n">context</span><span class="o">);</span>
+      <span class="o">}</span> <span class="k">else</span> <span class="o">{</span>
+        <span class="n">logger</span><span class="o">.</span><span class="na">info</span><span class="o">(</span><span class="s">"Token {} validated"</span><span class="o">,</span> <span class="n">token</span><span class="o">);</span>
+      <span class="o">}</span>
+    <span class="o">}</span>
+  <span class="o">}</span>
+
+  <span class="kd">private</span> <span class="kt">void</span> <span class="nf">rejectRequest</span><span class="o">(</span><span class="n">RequestContext</span> <span class="n">context</span><span class="o">)</span> <span class="o">{</span>
+    <span class="n">context</span><span class="o">.</span><span class="na">setResponseStatusCode</span><span class="o">(</span><span class="n">SC_FORBIDDEN</span><span class="o">);</span>
+    <span class="n">context</span><span class="o">.</span><span class="na">setSendZuulResponse</span><span class="o">(</span><span class="kc">false</span><span class="o">);</span>
+  <span class="o">}</span>
+
+  <span class="kd">private</span> <span class="kt">boolean</span> <span class="nf">doesNotContainToken</span><span class="o">(</span><span class="n">RequestContext</span> <span class="n">context</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">return</span> <span class="nf">authorizationHeader</span><span class="o">(</span><span class="n">context</span><span class="o">)</span> <span class="o">==</span> <span class="kc">null</span>
+        <span class="o">||</span> <span class="o">!</span><span class="n">authorizationHeader</span><span class="o">(</span><span class="n">context</span><span class="o">).</span><span class="na">startsWith</span><span class="o">(</span><span class="n">TOKEN_PREFIX</span><span class="o">);</span>
+  <span class="o">}</span>
+
+  <span class="kd">private</span> <span class="n">String</span> <span class="nf">token</span><span class="o">(</span><span class="n">RequestContext</span> <span class="n">context</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">return</span> <span class="nf">authorizationHeader</span><span class="o">(</span><span class="n">context</span><span class="o">).</span><span class="na">replace</span><span class="o">(</span><span class="n">TOKEN_PREFIX</span><span class="o">,</span> <span class="s">""</span><span class="o">);</span>
+  <span class="o">}</span>
+
+  <span class="kd">private</span> <span class="n">String</span> <span class="nf">authorizationHeader</span><span class="o">(</span><span class="n">RequestContext</span> <span class="n">context</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">return</span> <span class="n">context</span><span class="o">.</span><span class="na">getRequest</span><span class="o">().</span><span class="na">getHeader</span><span class="o">(</span><span class="n">AUTHORIZATION</span><span class="o">);</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<p>最后提供服务应用入口:</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@SpringBootApplication</span>
+<span class="nd">@EnableCircuitBreaker</span>
+<span class="nd">@EnableZuulProxy</span>
+<span class="nd">@EnableDiscoveryClient</span>
+<span class="nd">@EnableServiceComb</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">ManagerApplication</span> <span class="o">{</span>
+
+  <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
+    <span class="n">SpringApplication</span><span class="o">.</span><span class="na">run</span><span class="o">(</span><span class="n">ManagerApplication</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">args</span><span class="o">);</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<p><code class="highlighter-rouge">application.yaml</code> 中定义路由规则:</p>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">zuul</span><span class="pi">:</span>
+  <span class="s">routes</span><span class="pi">:</span>
+    <span class="s">doorman</span><span class="pi">:</span>
+      <span class="s">serviceId</span><span class="pi">:</span> <span class="s">doorman</span>
+      <span class="s">sensitiveHeaders</span><span class="pi">:</span>
+    <span class="s">worker</span><span class="pi">:</span>
+      <span class="s">serviceId</span><span class="pi">:</span> <span class="s">worker</span>
+    <span class="s">beekeeper</span><span class="pi">:</span>
+      <span class="s">serviceId</span><span class="pi">:</span> <span class="s">beekeeper</span>
+
+<span class="c1"># disable netflix eurkea since it's not used for service discovery</span>
+<span class="s">ribbon</span><span class="pi">:</span>
+  <span class="s">eureka</span><span class="pi">:</span>
+    <span class="s">enabled</span><span class="pi">:</span> <span class="s">false</span>
+</code></pre>
+</div>
+
+<p><code class="highlighter-rouge">microservice.yaml</code> 中定义服务中心地址:</p>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">APPLICATION_ID</span><span class="pi">:</span> <span class="s">company</span>
+<span class="s">service_description</span><span class="pi">:</span>
+  <span class="s">name</span><span class="pi">:</span> <span class="s">manager</span>
+  <span class="s">version</span><span class="pi">:</span> <span class="s">0.0.1</span>
+<span class="s">cse</span><span class="pi">:</span>
+  <span class="s">service</span><span class="pi">:</span>
+    <span class="s">registry</span><span class="pi">:</span>
+      <span class="s">address</span><span class="pi">:</span> <span class="s">http://sc.servicecomb.io:30100</span>
+</code></pre>
+</div>
+
+<h2 id="项目归档-project-archive">项目归档 (Project Archive)</h2>
+<p><strong>经理</strong>在每次用户请求后将项目进行归档,如果将来有内容相同的请求到达,<strong>经理</strong>可以就近获取结果,不必再购买
+<strong>技工</strong>和<strong>养蜂人</strong>提供的计算服务,节省公司开支。</p>
+
+<p>对于归档功能的实现,我们采用了<strong>Spring Cache Abstraction</strong>,具体细节超出了这篇文章的范围,大家如果有兴趣可以
+查看github上<a href="https://github.com/ServiceComb/LinuxCon-Beijing-WorkShop">workshop</a>的 <code class="highlighter-rouge">manager</code> 模块代码。</p>
+
+<h2 id="人力资源-human-resource">人力资源 (Human Resource)</h2>
+<p><strong>人力资源</strong>从运维层面保证服务的可靠性,主要功能有</p>
+
+<ul>
+  <li>
+    <p>弹性伸缩,以保证用户请求量超过<strong>技工</strong>或<strong>养蜂人</strong>处理能力后,招聘更多<strong>技工</strong>或<strong>养蜂人</strong>加入项目;当请求量回落后,裁剪<strong>技工</strong>或<strong>养蜂人</strong>以节省公司开支</p>
+  </li>
+  <li>
+    <p>健康检查,以保证<strong>技工</strong>或<strong>养蜂人</strong>告病时,能有替补接手任务</p>
+  </li>
+  <li>
+    <p>滚动升级,以保证项目需要新技能时,能替换、培训<strong>技工</strong>或<strong>养蜂人</strong>,不中断接收用户请求</p>
+  </li>
+</ul>
+
+<p><strong>人力资源</strong>的功能需要云平台提供支持,在后续的文章中会跟大家介绍,我们如何在华为云上轻松实现这些功能。</p>
+
+<h2 id="总结">总结</h2>
+<p>在这篇文章中,我们用一个公司的组织结构作为例子,给大家介绍了微服务的完整架构,以及如何使用微服务框架 <code class="highlighter-rouge">ServiceComb</code>
+快速开发微服务,以及服务间互通、契约认证。</p>
+
+<p><a href="https://github.com/ServiceComb/LinuxCon-Beijing-WorkShop">Workshop demo</a>项目也包含大量完整易懂的测试
+代码,以及使用docker集成微服务,模拟生存环境,同时应用<a href="https://travis-ci.org/">Travis</a>搭建持续集成环境,体现
+DevOps在微服务开发中的实践。希望能对大家有所帮助。</p>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+  
+
+
+  
+  
+  
+
+  <p class="page__taxonomy">
+    <strong><i class="fa fa-fw fa-tags" aria-hidden="true"></i> 标签: </strong>
+    <span itemprop="keywords">
+    
+      
+      
+      <a href="/tags/#%E7%A4%BA%E4%BE%8B" class="page__taxonomy-item" rel="tag">示例</a>
+    
+    </span>
+  </p>
+
+
+
+
+
+        
+          
+            
+              <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> 最新的:</strong> <time datetime="2017-06-15">2017年6月15日</time></p>
+            
+          
+        
+      </footer>
+
+      <section class="page__share">
+  
+    <h4 class="page__share-title">分享</h4>
+  
+
+  <a href="https://twitter.com/intent/tweet?via=ServiceComb&text=Linux Con Workshop Demo /cn/docs/linuxcon-workshop-demo/" class="btn btn--twitter" title="分享 Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
+
+  <a href="https://www.facebook.com/sharer/sharer.php?u=/cn/docs/linuxcon-workshop-demo/" class="btn btn--facebook" title="分享 Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
+
+  <a href="https://plus.google.com/share?url=/cn/docs/linuxcon-workshop-demo/" class="btn btn--google-plus" title="分享 Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
+
+  <a href="https://www.linkedin.com/shareArticle?mini=true&url=/cn/docs/linuxcon-workshop-demo/" class="btn btn--linkedin" title="分享 LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
+</section>
+
+
+      
+  <nav class="pagination">
+    
+      <a href="/docs/linuxcon-workshop-demo/" class="pagination--pager" title="Linux Con Workshop Demo
+">向前</a>
+    
+    
+      <a href="/docs/go-to-cloud/" class="pagination--pager" title="单体应用利用ServiceComb实现微服务化和云化之路
+">向后</a>
+    
+  </nav>
+
+
+    </div>
+
+    
+      <div class="page__comments">
+  
+  
+    <section id="static-comments">
+      
+        <!-- Start static comments -->
+        <div class="js-comments">
+          
+        </div>
+        <!-- End static comments -->
+
+        <!-- Start new comment form -->
+        <h4 class="page__comments-title">留下评论</h4>
+        <p class="small">您的电子邮箱地址并不会被展示。请填写标记为必须的字段。 <span class="required">*</span></p>
+        <form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/ServiceComb/servicesomb.github.io/master">
+          <div class="form__spinner">
+            <i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
+            <span class="sr-only">正在加载...</span>
+          </div>
+
+          <fieldset>
+            <label for="comment-form-message">评论 <small class="required">*</small></label>
+            <textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
+            <div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">Markdown语法已支持。</a></div>
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-name">姓名 <small class="required">*</small></label>
+            <input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-email">电子邮箱 <small class="required">*</small></label>
+            <input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-url">网站(可选)</label>
+            <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
+          </fieldset>
+          <fieldset class="hidden" style="display: none;">
+            <input type="hidden" name="options[slug]" value="linuxcon-workshop-demo">
+            <label for="comment-form-location">Not used. Leave blank if you are a human.</label>
+            <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
+          </fieldset>
+          <!-- Start comment form alert messaging -->
+          <p class="hidden js-notice">
+            <strong class="js-notice-text"></strong>
+          </p>
+          <!-- End comment form alert messaging -->
+          <fieldset>
+            <button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--large">提交评论</button>
+          </fieldset>
+        </form>
+        <!-- End new comment form -->
+      
+    </section>
+  
+</div>
+
+    
+  </article>
+
+  
+  
+    <div class="page__related">
+      <h4 class="page__related-title">猜您还喜欢</h4>
+      <div class="grid__wrapper">
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/jira_beginner_guide/" rel="permalink">老司机带你刷任务 - ServiceComb JIRA入门指南
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">ServiceComb JIRA入门指南
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/how-to-reform-a-legacy-system/" rel="permalink">最头疼的遗留系统该如何改造?
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+      </div>
+    </div>
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _posts/cn/2017-06-15-linuxcon-workshop-demo.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_posts/cn/2017-06-15-linuxcon-workshop-demo.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  
+  <script>
+    (function ($) {
+    var $comments = $('.js-comments');
+
+    $('#new_comment').submit(function () {
+      var form = this;
+
+      $(form).addClass('disabled');
+      $('#comment-form-submit').html('<i class="fa fa-spinner fa-spin fa-fw"></i> 正在加载...');
+
+      $.ajax({
+        type: $(this).attr('method'),
+        url: $(this).attr('action'),
+        data: $(this).serialize(),
+        contentType: 'application/x-www-form-urlencoded',
+        success: function (data) {
+          $('#comment-form-submit').html('已提交');
+          $('.page__comments-form .js-notice').removeClass('notice--danger');
+          $('.page__comments-form .js-notice').addClass('notice--success');
+          showAlert('感谢您的评论!被批准后它会立即在此站点展示。');
+        },
+        error: function (err) {
+          console.log(err);
+          $('#comment-form-submit').html('提交评论');
+          $('.page__comments-form .js-notice').removeClass('notice--success');
+          $('.page__comments-form .js-notice').addClass('notice--danger');
+          showAlert('很抱歉,您的提交存在错误。请确保所有必填字段都已填写正确,然后再试一次。');
+          $(form).removeClass('disabled');
+        }
+      });
+
+      return false;
+    });
+
+    function showAlert(message) {
+      $('.page__comments-form .js-notice').removeClass('hidden');
+      $('.page__comments-form .js-notice-text').html(message);
+    }
+  })(jQuery);
+  </script>
+
+
+
+
+
+
+
+  </body>
+</html>



[48/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/fonts/fontawesome-webfont.svg
----------------------------------------------------------------------
diff --git a/content/assets/fonts/fontawesome-webfont.svg b/content/assets/fonts/fontawesome-webfont.svg
new file mode 100644
index 0000000..855c845
--- /dev/null
+++ b/content/assets/fonts/fontawesome-webfont.svg
@@ -0,0 +1,2671 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg>
+<metadata>
+Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016
+ By ,,,
+Copyright Dave Gandy 2016. All rights reserved.
+</metadata>
+<defs>
+<font id="FontAwesome" horiz-adv-x="1536" >
+  <font-face 
+    font-family="FontAwesome"
+    font-weight="400"
+    font-stretch="normal"
+    units-per-em="1792"
+    panose-1="0 0 0 0 0 0 0 0 0 0"
+    ascent="1536"
+    descent="-256"
+    bbox="-1.02083 -256.962 2304.6 1537.02"
+    underline-thickness="0"
+    underline-position="0"
+    unicode-range="U+0020-F500"
+  />
+<missing-glyph horiz-adv-x="896" 
+d="M224 112h448v1312h-448v-1312zM112 0v1536h672v-1536h-672z" />
+    <glyph glyph-name=".notdef" horiz-adv-x="896" 
+d="M224 112h448v1312h-448v-1312zM112 0v1536h672v-1536h-672z" />
+    <glyph glyph-name=".null" horiz-adv-x="0" 
+ />
+    <glyph glyph-name="nonmarkingreturn" horiz-adv-x="597" 
+ />
+    <glyph glyph-name="space" unicode=" " horiz-adv-x="448" 
+ />
+    <glyph glyph-name="dieresis" unicode="&#xa8;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="copyright" unicode="&#xa9;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="registered" unicode="&#xae;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="acute" unicode="&#xb4;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="AE" unicode="&#xc6;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="Oslash" unicode="&#xd8;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="trademark" unicode="&#x2122;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="infinity" unicode="&#x221e;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="notequal" unicode="&#x2260;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="glass" unicode="&#xf000;" horiz-adv-x="1792" 
+d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" />
+    <glyph glyph-name="music" unicode="&#xf001;" 
+d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89
+t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="search" unicode="&#xf002;" horiz-adv-x="1664" 
+d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5
+t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
+    <glyph glyph-name="envelope" unicode="&#xf003;" horiz-adv-x="1792" 
+d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13
+t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z
+M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="heart" unicode="&#xf004;" horiz-adv-x="1792" 
+d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600
+q-18 -18 -44 -18z" />
+    <glyph glyph-name="star" unicode="&#xf005;" horiz-adv-x="1664" 
+d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455
+l502 -73q56 -9 56 -46z" />
+    <glyph glyph-name="star_empty" unicode="&#xf006;" horiz-adv-x="1664" 
+d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500
+l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" />
+    <glyph glyph-name="user" unicode="&#xf007;" horiz-adv-x="1280" 
+d="M1280 137q0 -109 -62.5 -187t-150.5 -78h-854q-88 0 -150.5 78t-62.5 187q0 85 8.5 160.5t31.5 152t58.5 131t94 89t134.5 34.5q131 -128 313 -128t313 128q76 0 134.5 -34.5t94 -89t58.5 -131t31.5 -152t8.5 -160.5zM1024 1024q0 -159 -112.5 -271.5t-271.5 -112.5
+t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
+    <glyph glyph-name="film" unicode="&#xf008;" horiz-adv-x="1920" 
+d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128
+q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45
+t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128
+q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19
+t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="th_large" unicode="&#xf009;" horiz-adv-x="1664" 
+d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38
+h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="th" unicode="&#xf00a;" horiz-adv-x="1792" 
+d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320
+q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28
+h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192
+q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="th_list" unicode="&#xf00b;" horiz-adv-x="1792" 
+d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960
+q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28
+h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="ok" unicode="&#xf00c;" horiz-adv-x="1792" 
+d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" />
+    <glyph glyph-name="remove" unicode="&#xf00d;" horiz-adv-x="1408" 
+d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68
+t-28 -68l-294 -294l294 -294q28 -28 28 -68z" />
+    <glyph glyph-name="zoom_in" unicode="&#xf00e;" horiz-adv-x="1664" 
+d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224
+q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5
+t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
+    <glyph glyph-name="zoom_out" unicode="&#xf010;" horiz-adv-x="1664" 
+d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z
+M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z
+" />
+    <glyph glyph-name="off" unicode="&#xf011;" 
+d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5
+t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" />
+    <glyph glyph-name="signal" unicode="&#xf012;" horiz-adv-x="1792" 
+d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23
+v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="cog" unicode="&#xf013;" 
+d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38
+q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13
+l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22
+q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" />
+    <glyph glyph-name="trash" unicode="&#xf014;" horiz-adv-x="1408" 
+d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576
+q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832
+q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="home" unicode="&#xf015;" horiz-adv-x="1664" 
+d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5
+l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" />
+    <glyph glyph-name="file_alt" unicode="&#xf016;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+" />
+    <glyph glyph-name="time" unicode="&#xf017;" 
+d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="road" unicode="&#xf018;" horiz-adv-x="1920" 
+d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256
+q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" />
+    <glyph glyph-name="download_alt" unicode="&#xf019;" horiz-adv-x="1664" 
+d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136
+q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" />
+    <glyph glyph-name="download" unicode="&#xf01a;" 
+d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273
+t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="upload" unicode="&#xf01b;" 
+d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198
+t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="inbox" unicode="&#xf01c;" 
+d="M1023 576h316q-1 3 -2.5 8.5t-2.5 7.5l-212 496h-708l-212 -496q-1 -3 -2.5 -8.5t-2.5 -7.5h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552
+q25 -61 25 -123z" />
+    <glyph glyph-name="play_circle" unicode="&#xf01d;" 
+d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="repeat" unicode="&#xf01e;" 
+d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q15 0 25 -9
+l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" />
+    <glyph glyph-name="refresh" unicode="&#xf021;" 
+d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117
+q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5
+q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" />
+    <glyph glyph-name="list_alt" unicode="&#xf022;" horiz-adv-x="1792" 
+d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z
+M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5
+t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47
+t47 -113z" />
+    <glyph glyph-name="lock" unicode="&#xf023;" horiz-adv-x="1152" 
+d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="flag" unicode="&#xf024;" horiz-adv-x="1792" 
+d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48
+t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="headphones" unicode="&#xf025;" horiz-adv-x="1664" 
+d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78
+t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5
+t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" />
+    <glyph glyph-name="volume_off" unicode="&#xf026;" horiz-adv-x="768" 
+d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" />
+    <glyph glyph-name="volume_down" unicode="&#xf027;" horiz-adv-x="1152" 
+d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 36
+t12 56.5t-12 56.5t-29 36t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" />
+    <glyph glyph-name="volume_up" unicode="&#xf028;" horiz-adv-x="1664" 
+d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 36
+t12 56.5t-12 56.5t-29 36t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5
+t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289
+t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" />
+    <glyph glyph-name="qrcode" unicode="&#xf029;" horiz-adv-x="1408" 
+d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z
+M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" />
+    <glyph glyph-name="barcode" unicode="&#xf02a;" horiz-adv-x="1792" 
+d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z
+M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" />
+    <glyph glyph-name="tag" unicode="&#xf02b;" 
+d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5
+l715 -714q37 -39 37 -91z" />
+    <glyph glyph-name="tags" unicode="&#xf02c;" horiz-adv-x="1920" 
+d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5
+l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" />
+    <glyph glyph-name="book" unicode="&#xf02d;" horiz-adv-x="1664" 
+d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23
+q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906
+q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5
+t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" />
+    <glyph glyph-name="bookmark" unicode="&#xf02e;" horiz-adv-x="1280" 
+d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
+    <glyph glyph-name="print" unicode="&#xf02f;" horiz-adv-x="1664" 
+d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68
+v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" />
+    <glyph glyph-name="camera" unicode="&#xf030;" horiz-adv-x="1920" 
+d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136
+q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="font" unicode="&#xf031;" horiz-adv-x="1664" 
+d="M725 977l-170 -450q33 0 136.5 -2t160.5 -2q19 0 57 2q-87 253 -184 452zM0 -128l2 79q23 7 56 12.5t57 10.5t49.5 14.5t44.5 29t31 50.5l237 616l280 724h75h53q8 -14 11 -21l205 -480q33 -78 106 -257.5t114 -274.5q15 -34 58 -144.5t72 -168.5q20 -45 35 -57
+q19 -15 88 -29.5t84 -20.5q6 -38 6 -57q0 -5 -0.5 -13.5t-0.5 -12.5q-63 0 -190 8t-191 8q-76 0 -215 -7t-178 -8q0 43 4 78l131 28q1 0 12.5 2.5t15.5 3.5t14.5 4.5t15 6.5t11 8t9 11t2.5 14q0 16 -31 96.5t-72 177.5t-42 100l-450 2q-26 -58 -76.5 -195.5t-50.5 -162.5
+q0 -22 14 -37.5t43.5 -24.5t48.5 -13.5t57 -8.5t41 -4q1 -19 1 -58q0 -9 -2 -27q-58 0 -174.5 10t-174.5 10q-8 0 -26.5 -4t-21.5 -4q-80 -14 -188 -14z" />
+    <glyph glyph-name="bold" unicode="&#xf032;" horiz-adv-x="1408" 
+d="M555 15q74 -32 140 -32q376 0 376 335q0 114 -41 180q-27 44 -61.5 74t-67.5 46.5t-80.5 25t-84 10.5t-94.5 2q-73 0 -101 -10q0 -53 -0.5 -159t-0.5 -158q0 -8 -1 -67.5t-0.5 -96.5t4.5 -83.5t12 -66.5zM541 761q42 -7 109 -7q82 0 143 13t110 44.5t74.5 89.5t25.5 142
+q0 70 -29 122.5t-79 82t-108 43.5t-124 14q-50 0 -130 -13q0 -50 4 -151t4 -152q0 -27 -0.5 -80t-0.5 -79q0 -46 1 -69zM0 -128l2 94q15 4 85 16t106 27q7 12 12.5 27t8.5 33.5t5.5 32.5t3 37.5t0.5 34v35.5v30q0 982 -22 1025q-4 8 -22 14.5t-44.5 11t-49.5 7t-48.5 4.5
+t-30.5 3l-4 83q98 2 340 11.5t373 9.5q23 0 68 -0.5t68 -0.5q70 0 136.5 -13t128.5 -42t108 -71t74 -104.5t28 -137.5q0 -52 -16.5 -95.5t-39 -72t-64.5 -57.5t-73 -45t-84 -40q154 -35 256.5 -134t102.5 -248q0 -100 -35 -179.5t-93.5 -130.5t-138 -85.5t-163.5 -48.5
+t-176 -14q-44 0 -132 3t-132 3q-106 0 -307 -11t-231 -12z" />
+    <glyph glyph-name="italic" unicode="&#xf033;" horiz-adv-x="1024" 
+d="M0 -126l17 85q22 7 61.5 16.5t72 19t59.5 23.5q28 35 41 101q1 7 62 289t114 543.5t52 296.5v25q-24 13 -54.5 18.5t-69.5 8t-58 5.5l19 103q33 -2 120 -6.5t149.5 -7t120.5 -2.5q48 0 98.5 2.5t121 7t98.5 6.5q-5 -39 -19 -89q-30 -10 -101.5 -28.5t-108.5 -33.5
+q-8 -19 -14 -42.5t-9 -40t-7.5 -45.5t-6.5 -42q-27 -148 -87.5 -419.5t-77.5 -355.5q-2 -9 -13 -58t-20 -90t-16 -83.5t-6 -57.5l1 -18q17 -4 185 -31q-3 -44 -16 -99q-11 0 -32.5 -1.5t-32.5 -1.5q-29 0 -87 10t-86 10q-138 2 -206 2q-51 0 -143 -9t-121 -11z" />
+    <glyph glyph-name="text_height" unicode="&#xf034;" horiz-adv-x="1792" 
+d="M1744 128q33 0 42 -18.5t-11 -44.5l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80zM81 1407l54 -27q12 -5 211 -5q44 0 132 2
+t132 2q36 0 107.5 -0.5t107.5 -0.5h293q6 0 21 -0.5t20.5 0t16 3t17.5 9t15 17.5l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 48t-14.5 73.5t-7.5 35.5q-6 8 -12 12.5t-15.5 6t-13 2.5t-18 0.5t-16.5 -0.5
+q-17 0 -66.5 0.5t-74.5 0.5t-64 -2t-71 -6q-9 -81 -8 -136q0 -94 2 -388t2 -455q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27
+q19 42 19 383q0 101 -3 303t-3 303v117q0 2 0.5 15.5t0.5 25t-1 25.5t-3 24t-5 14q-11 12 -162 12q-33 0 -93 -12t-80 -26q-19 -13 -34 -72.5t-31.5 -111t-42.5 -53.5q-42 26 -56 44v383z" />
+    <glyph glyph-name="text_width" unicode="&#xf035;" 
+d="M81 1407l54 -27q12 -5 211 -5q44 0 132 2t132 2q70 0 246.5 1t304.5 0.5t247 -4.5q33 -1 56 31l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 47.5t-15 73.5t-7 36q-10 13 -27 19q-5 2 -66 2q-30 0 -93 1t-103 1
+t-94 -2t-96 -7q-9 -81 -8 -136l1 -152v52q0 -55 1 -154t1.5 -180t0.5 -153q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27
+q7 16 11.5 74t6 145.5t1.5 155t-0.5 153.5t-0.5 89q0 7 -2.5 21.5t-2.5 22.5q0 7 0.5 44t1 73t0 76.5t-3 67.5t-6.5 32q-11 12 -162 12q-41 0 -163 -13.5t-138 -24.5q-19 -12 -34 -71.5t-31.5 -111.5t-42.5 -54q-42 26 -56 44v383zM1310 125q12 0 42 -19.5t57.5 -41.5
+t59.5 -49t36 -30q26 -21 26 -49t-26 -49q-4 -3 -36 -30t-59.5 -49t-57.5 -41.5t-42 -19.5q-13 0 -20.5 10.5t-10 28.5t-2.5 33.5t1.5 33t1.5 19.5h-1024q0 -2 1.5 -19.5t1.5 -33t-2.5 -33.5t-10 -28.5t-20.5 -10.5q-12 0 -42 19.5t-57.5 41.5t-59.5 49t-36 30q-26 21 -26 49
+t26 49q4 3 36 30t59.5 49t57.5 41.5t42 19.5q13 0 20.5 -10.5t10 -28.5t2.5 -33.5t-1.5 -33t-1.5 -19.5h1024q0 2 -1.5 19.5t-1.5 33t2.5 33.5t10 28.5t20.5 10.5z" />
+    <glyph glyph-name="align_left" unicode="&#xf036;" horiz-adv-x="1792" 
+d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45
+t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="align_center" unicode="&#xf037;" horiz-adv-x="1792" 
+d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19
+h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="align_right" unicode="&#xf038;" horiz-adv-x="1792" 
+d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45
+t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="align_justify" unicode="&#xf039;" horiz-adv-x="1792" 
+d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45
+t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="list" unicode="&#xf03a;" horiz-adv-x="1792" 
+d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5
+t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344
+q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5
+t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192
+q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" />
+    <glyph glyph-name="indent_left" unicode="&#xf03b;" horiz-adv-x="1792" 
+d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5
+t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088
+q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
+    <glyph glyph-name="indent_right" unicode="&#xf03c;" horiz-adv-x="1792" 
+d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5
+t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088
+q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
+    <glyph glyph-name="facetime_video" unicode="&#xf03d;" horiz-adv-x="1792" 
+d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5
+q39 -17 39 -59z" />
+    <glyph glyph-name="picture" unicode="&#xf03e;" horiz-adv-x="1920" 
+d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216
+q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="pencil" unicode="&#xf040;" 
+d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38
+q53 0 91 -38l235 -234q37 -39 37 -91z" />
+    <glyph glyph-name="map_marker" unicode="&#xf041;" horiz-adv-x="1024" 
+d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" />
+    <glyph glyph-name="adjust" unicode="&#xf042;" 
+d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="tint" unicode="&#xf043;" horiz-adv-x="1024" 
+d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362
+q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" />
+    <glyph glyph-name="edit" unicode="&#xf044;" horiz-adv-x="1792" 
+d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832
+q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92
+l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" />
+    <glyph glyph-name="share" unicode="&#xf045;" horiz-adv-x="1664" 
+d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832
+q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5
+t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" />
+    <glyph glyph-name="check" unicode="&#xf046;" horiz-adv-x="1664" 
+d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832
+q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110
+q24 -24 24 -57t-24 -57z" />
+    <glyph glyph-name="move" unicode="&#xf047;" horiz-adv-x="1792" 
+d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45
+t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
+    <glyph glyph-name="step_backward" unicode="&#xf048;" horiz-adv-x="1024" 
+d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 10 13 19z" />
+    <glyph glyph-name="fast_backward" unicode="&#xf049;" horiz-adv-x="1792" 
+d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 10 13 19l710 710
+q19 19 32 13t13 -32v-710q4 10 13 19z" />
+    <glyph glyph-name="backward" unicode="&#xf04a;" horiz-adv-x="1664" 
+d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q4 10 13 19z" />
+    <glyph glyph-name="play" unicode="&#xf04b;" horiz-adv-x="1408" 
+d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" />
+    <glyph glyph-name="pause" unicode="&#xf04c;" 
+d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="stop" unicode="&#xf04d;" 
+d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="forward" unicode="&#xf04e;" horiz-adv-x="1664" 
+d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-4 -10 -13 -19z" />
+    <glyph glyph-name="fast_forward" unicode="&#xf050;" horiz-adv-x="1792" 
+d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v710q0 26 13 32t32 -13l710 -710q9 -9 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-4 -10 -13 -19l-710 -710
+q-19 -19 -32 -13t-13 32v710q-4 -10 -13 -19z" />
+    <glyph glyph-name="step_forward" unicode="&#xf051;" horiz-adv-x="1024" 
+d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-4 -10 -13 -19z" />
+    <glyph glyph-name="eject" unicode="&#xf052;" horiz-adv-x="1538" 
+d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" />
+    <glyph glyph-name="chevron_left" unicode="&#xf053;" horiz-adv-x="1280" 
+d="M1171 1235l-531 -531l531 -531q19 -19 19 -45t-19 -45l-166 -166q-19 -19 -45 -19t-45 19l-742 742q-19 19 -19 45t19 45l742 742q19 19 45 19t45 -19l166 -166q19 -19 19 -45t-19 -45z" />
+    <glyph glyph-name="chevron_right" unicode="&#xf054;" horiz-adv-x="1280" 
+d="M1107 659l-742 -742q-19 -19 -45 -19t-45 19l-166 166q-19 19 -19 45t19 45l531 531l-531 531q-19 19 -19 45t19 45l166 166q19 19 45 19t45 -19l742 -742q19 -19 19 -45t-19 -45z" />
+    <glyph glyph-name="plus_sign" unicode="&#xf055;" 
+d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5
+t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="minus_sign" unicode="&#xf056;" 
+d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5
+t103 -385.5z" />
+    <glyph glyph-name="remove_sign" unicode="&#xf057;" 
+d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19
+q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="ok_sign" unicode="&#xf058;" 
+d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
+t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="question_sign" unicode="&#xf059;" 
+d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59
+q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="info_sign" unicode="&#xf05a;" 
+d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23
+t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="screenshot" unicode="&#xf05b;" 
+d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109
+q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143
+q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="remove_circle" unicode="&#xf05c;" 
+d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23
+l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5
+t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="ok_circle" unicode="&#xf05d;" 
+d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198
+t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="ban_circle" unicode="&#xf05e;" 
+d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61
+t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" />
+    <glyph glyph-name="arrow_left" unicode="&#xf060;" 
+d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5
+t32.5 -90.5z" />
+    <glyph glyph-name="arrow_right" unicode="&#xf061;" 
+d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" />
+    <glyph glyph-name="arrow_up" unicode="&#xf062;" horiz-adv-x="1664" 
+d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651
+q37 -39 37 -91z" />
+    <glyph glyph-name="arrow_down" unicode="&#xf063;" horiz-adv-x="1664" 
+d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
+    <glyph glyph-name="share_alt" unicode="&#xf064;" horiz-adv-x="1792" 
+d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22
+t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" />
+    <glyph glyph-name="resize_full" unicode="&#xf065;" 
+d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332
+q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="resize_small" unicode="&#xf066;" 
+d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45
+t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" />
+    <glyph glyph-name="plus" unicode="&#xf067;" horiz-adv-x="1408" 
+d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="minus" unicode="&#xf068;" horiz-adv-x="1408" 
+d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="asterisk" unicode="&#xf069;" horiz-adv-x="1664" 
+d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154
+q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" />
+    <glyph glyph-name="exclamation_sign" unicode="&#xf06a;" 
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192
+q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" />
+    <glyph glyph-name="gift" unicode="&#xf06b;" 
+d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320
+q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5
+t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="leaf" unicode="&#xf06c;" horiz-adv-x="1792" 
+d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268
+q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-43 0 -63.5 17.5t-45.5 59.5q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5
+t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" />
+    <glyph glyph-name="fire" unicode="&#xf06d;" horiz-adv-x="1408" 
+d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1
+q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" />
+    <glyph glyph-name="eye_open" unicode="&#xf06e;" horiz-adv-x="1792" 
+d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5
+t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" />
+    <glyph glyph-name="eye_close" unicode="&#xf070;" horiz-adv-x="1792" 
+d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9
+q-106 -189 -316 -567t-315 -566l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5
+q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z
+" />
+    <glyph glyph-name="warning_sign" unicode="&#xf071;" horiz-adv-x="1792" 
+d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185
+q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" />
+    <glyph glyph-name="plane" unicode="&#xf072;" horiz-adv-x="1408" 
+d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9
+q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" />
+    <glyph glyph-name="calendar" unicode="&#xf073;" horiz-adv-x="1664" 
+d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z
+M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64
+q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47
+h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="random" unicode="&#xf074;" horiz-adv-x="1792" 
+d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1
+t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5
+v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111
+t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
+    <glyph glyph-name="comment" unicode="&#xf075;" horiz-adv-x="1792" 
+d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281
+q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" />
+    <glyph glyph-name="magnet" unicode="&#xf076;" 
+d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384
+q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="chevron_up" unicode="&#xf077;" horiz-adv-x="1792" 
+d="M1683 205l-166 -165q-19 -19 -45 -19t-45 19l-531 531l-531 -531q-19 -19 -45 -19t-45 19l-166 165q-19 19 -19 45.5t19 45.5l742 741q19 19 45 19t45 -19l742 -741q19 -19 19 -45.5t-19 -45.5z" />
+    <glyph glyph-name="chevron_down" unicode="&#xf078;" horiz-adv-x="1792" 
+d="M1683 728l-742 -741q-19 -19 -45 -19t-45 19l-742 741q-19 19 -19 45.5t19 45.5l166 165q19 19 45 19t45 -19l531 -531l531 531q19 19 45 19t45 -19l166 -165q19 -19 19 -45.5t-19 -45.5z" />
+    <glyph glyph-name="retweet" unicode="&#xf079;" horiz-adv-x="1920" 
+d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -10 7 -21
+zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z
+" />
+    <glyph glyph-name="shopping_cart" unicode="&#xf07a;" horiz-adv-x="1664" 
+d="M640 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1536 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1664 1088v-512q0 -24 -16.5 -42.5t-40.5 -21.5l-1044 -122q13 -60 13 -70q0 -16 -24 -64h920q26 0 45 -19t19 -45
+t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 11 8 31.5t16 36t21.5 40t15.5 29.5l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t19.5 -15.5t13 -24.5t8 -26t5.5 -29.5t4.5 -26h1201q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="folder_close" unicode="&#xf07b;" horiz-adv-x="1664" 
+d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
+    <glyph glyph-name="folder_open" unicode="&#xf07c;" horiz-adv-x="1920" 
+d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5
+t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" />
+    <glyph glyph-name="resize_vertical" unicode="&#xf07d;" horiz-adv-x="768" 
+d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" />
+    <glyph glyph-name="resize_horizontal" unicode="&#xf07e;" horiz-adv-x="1792" 
+d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
+    <glyph glyph-name="bar_chart" unicode="&#xf080;" horiz-adv-x="2048" 
+d="M640 640v-512h-256v512h256zM1024 1152v-1024h-256v1024h256zM2048 0v-128h-2048v1536h128v-1408h1920zM1408 896v-768h-256v768h256zM1792 1280v-1152h-256v1152h256z" />
+    <glyph glyph-name="twitter_sign" unicode="&#xf081;" 
+d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4
+q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5
+t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="facebook_sign" unicode="&#xf082;" 
+d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-188v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-532q-119 0 -203.5 84.5t-84.5 203.5v960
+q0 119 84.5 203.5t203.5 84.5h960z" />
+    <glyph glyph-name="camera_retro" unicode="&#xf083;" horiz-adv-x="1792" 
+d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5
+t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280
+q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" />
+    <glyph glyph-name="key" unicode="&#xf084;" horiz-adv-x="1792" 
+d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26
+l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5
+t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" />
+    <glyph glyph-name="cogs" unicode="&#xf085;" horiz-adv-x="1920" 
+d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5
+t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -11 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5
+l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7
+l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -8 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31
+q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20
+t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68
+q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70
+q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" />
+    <glyph glyph-name="comments" unicode="&#xf086;" horiz-adv-x="1792" 
+d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224
+q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7
+q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" />
+    <glyph glyph-name="thumbs_up_alt" unicode="&#xf087;" 
+d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5
+t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769
+q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128
+q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" />
+    <glyph glyph-name="thumbs_down_alt" unicode="&#xf088;" 
+d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 31 18 69q0 37 -17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5
+t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z
+M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5
+h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -73 49 -163z" />
+    <glyph glyph-name="star_half" unicode="&#xf089;" horiz-adv-x="896" 
+d="M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z" />
+    <glyph glyph-name="heart_empty" unicode="&#xf08a;" horiz-adv-x="1792" 
+d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559
+q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5
+q224 0 351 -124t127 -344z" />
+    <glyph glyph-name="signout" unicode="&#xf08b;" horiz-adv-x="1664" 
+d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704
+q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" />
+    <glyph glyph-name="linkedin_sign" unicode="&#xf08c;" 
+d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5
+q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="pushpin" unicode="&#xf08d;" horiz-adv-x="1152" 
+d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38
+t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" />
+    <glyph glyph-name="external_link" unicode="&#xf08e;" horiz-adv-x="1792" 
+d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320
+q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="signin" unicode="&#xf090;" 
+d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5
+q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="trophy" unicode="&#xf091;" horiz-adv-x="1664" 
+d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91
+t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96
+q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="github_sign" unicode="&#xf092;" 
+d="M519 336q4 6 -3 13q-9 7 -14 2q-4 -6 3 -13q9 -7 14 -2zM491 377q-5 7 -12 4q-6 -4 0 -12q7 -8 12 -5q6 4 0 13zM450 417q2 4 -5 8q-7 2 -8 -2q-3 -5 4 -8q8 -2 9 2zM471 394q2 1 1.5 4.5t-3.5 5.5q-6 7 -10 3t1 -11q6 -6 11 -2zM557 319q2 7 -9 11q-9 3 -13 -4
+q-2 -7 9 -11q9 -3 13 4zM599 316q0 8 -12 8q-10 0 -10 -8t11 -8t11 8zM638 323q-2 7 -13 5t-9 -9q2 -8 12 -6t10 10zM1280 640q0 212 -150 362t-362 150t-362 -150t-150 -362q0 -167 98 -300.5t252 -185.5q18 -3 26.5 5t8.5 20q0 52 -1 95q-6 -1 -15.5 -2.5t-35.5 -2t-48 4
+t-43.5 20t-29.5 41.5q-23 59 -57 74q-2 1 -4.5 3.5l-8 8t-7 9.5t4 7.5t19.5 3.5q6 0 15 -2t30 -15.5t33 -35.5q16 -28 37.5 -42t43.5 -14t38 3.5t30 9.5q7 47 33 69q-49 6 -86 18.5t-73 39t-55.5 76t-19.5 119.5q0 79 53 137q-24 62 5 136q19 6 54.5 -7.5t60.5 -29.5l26 -16
+q58 17 128 17t128 -17q11 7 28.5 18t55.5 26t57 9q29 -74 5 -136q53 -58 53 -137q0 -57 -14 -100.5t-35.5 -70t-53.5 -44.5t-62.5 -26t-68.5 -12q35 -31 35 -95q0 -40 -0.5 -89t-0.5 -51q0 -12 8.5 -20t26.5 -5q154 52 252 185.5t98 300.5zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="upload_alt" unicode="&#xf093;" horiz-adv-x="1664" 
+d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92
+t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" />
+    <glyph glyph-name="lemon" unicode="&#xf094;" 
+d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5
+q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44
+q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5
+q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -13 2 -25t3.5 -16.5t7.5 -20.5t8 -20q16 -40 25 -118.5t9 -136.5z" />
+    <glyph glyph-name="phone" unicode="&#xf095;" horiz-adv-x="1408" 
+d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -53 3.5t-57.5 12.5t-47 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-127 79 -264 216t-216 264q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47t-12.5 57.5t-3.5 53q0 92 51 186
+q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174q2 -1 19 -11.5t24 -14
+t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" />
+    <glyph glyph-name="check_empty" unicode="&#xf096;" horiz-adv-x="1408" 
+d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832
+q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="bookmark_empty" unicode="&#xf097;" horiz-adv-x="1280" 
+d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289
+q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
+    <glyph glyph-name="phone_sign" unicode="&#xf098;" 
+d="M1280 343q0 11 -2 16t-18 16.5t-40.5 25t-47.5 26.5t-45.5 25t-28.5 15q-5 3 -19 13t-25 15t-21 5q-15 0 -36.5 -20.5t-39.5 -45t-38.5 -45t-33.5 -20.5q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170 126.5t-127 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5
+t-3.5 16.5q0 13 20.5 33.5t45 38.5t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5
+t320.5 -216.5q6 -2 30 -11t33 -12.5t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z
+" />
+    <glyph glyph-name="twitter" unicode="&#xf099;" horiz-adv-x="1664" 
+d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41
+q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" />
+    <glyph glyph-name="facebook" unicode="&#xf09a;" horiz-adv-x="1024" 
+d="M959 1524v-264h-157q-86 0 -116 -36t-30 -108v-189h293l-39 -296h-254v-759h-306v759h-255v296h255v218q0 186 104 288.5t277 102.5q147 0 228 -12z" />
+    <glyph glyph-name="github" unicode="&#xf09b;" 
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -40 7t-13 30q0 3 0.5 76.5t0.5 134.5q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 119 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24
+q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-85 13.5q-45 -113 -8 -204q-79 -87 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-39 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5
+t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -88.5t0.5 -54.5q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103zM291 305q3 7 -7 12
+q-10 3 -13 -2q-3 -7 7 -12q9 -6 13 2zM322 271q7 5 -2 16q-10 9 -16 3q-7 -5 2 -16q10 -10 16 -3zM352 226q9 7 0 19q-8 13 -17 6q-9 -5 0 -18t17 -7zM394 184q8 8 -4 19q-12 12 -20 3q-9 -8 4 -19q12 -12 20 -3zM451 159q3 11 -13 16q-15 4 -19 -7t13 -15q15 -6 19 6z
+M514 154q0 13 -17 11q-16 0 -16 -11q0 -13 17 -11q16 0 16 11zM572 164q-2 11 -18 9q-16 -3 -14 -15t18 -8t14 14z" />
+    <glyph glyph-name="unlock" unicode="&#xf09c;" horiz-adv-x="1664" 
+d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5
+t316.5 -131.5t131.5 -316.5z" />
+    <glyph glyph-name="credit_card" unicode="&#xf09d;" horiz-adv-x="1920" 
+d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608
+q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" />
+    <glyph glyph-name="rss" unicode="&#xf09e;" horiz-adv-x="1408" 
+d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5
+t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294
+q187 -186 294 -425.5t120 -501.5z" />
+    <glyph glyph-name="hdd" unicode="&#xf0a0;" 
+d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5
+h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75
+l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" />
+    <glyph glyph-name="bullhorn" unicode="&#xf0a1;" horiz-adv-x="1792" 
+d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5
+t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" />
+    <glyph glyph-name="bell" unicode="&#xf0a2;" horiz-adv-x="1792" 
+d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM246 128h1300q-266 300 -266 832q0 51 -24 105t-69 103t-121.5 80.5t-169.5 31.5t-169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -532 -266 -832z
+M1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5
+t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" />
+    <glyph glyph-name="certificate" unicode="&#xf0a3;" 
+d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70
+l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70
+l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" />
+    <glyph glyph-name="hand_right" unicode="&#xf0a4;" horiz-adv-x="1792" 
+d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106
+q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43
+q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5
+t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" />
+    <glyph glyph-name="hand_left" unicode="&#xf0a5;" horiz-adv-x="1792" 
+d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-8 9 -12 14q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576q-50 0 -89 -38.5
+t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45z
+M1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128q0 122 81.5 189t206.5 67
+q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" />
+    <glyph glyph-name="hand_up" unicode="&#xf0a6;" 
+d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576
+q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5
+t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76
+q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" />
+    <glyph glyph-name="hand_down" unicode="&#xf0a7;" 
+d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33
+t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580
+q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100
+q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" />
+    <glyph glyph-name="circle_arrow_left" unicode="&#xf0a8;" 
+d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640
+q0 -2

<TRUNCATED>
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/fonts/fontawesome-webfont.ttf
----------------------------------------------------------------------
diff --git a/content/assets/fonts/fontawesome-webfont.ttf b/content/assets/fonts/fontawesome-webfont.ttf
new file mode 100644
index 0000000..35acda2
Binary files /dev/null and b/content/assets/fonts/fontawesome-webfont.ttf differ



[07/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/users/develop-with-rest-template/index.html
----------------------------------------------------------------------
diff --git a/content/users/develop-with-rest-template/index.html b/content/users/develop-with-rest-template/index.html
new file mode 100644
index 0000000..03067df
--- /dev/null
+++ b/content/users/develop-with-rest-template/index.html
@@ -0,0 +1,735 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>使用Rest Template方式开发 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="使用Rest Template方式开发">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="使用Rest Template方式开发">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/users/develop-with-rest-template/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/users/develop-with-rest-template/">
+
+
+
+  <meta property="og:description" content="使用Rest Template方式开发">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="使用Rest Template方式开发">
+  <meta name="twitter:description" content="使用Rest Template方式开发">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/users/develop-with-rest-template/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">User Guide</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/" class="">Java Chassis Architecture</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/setup-environment/" class="">Setup Environment</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Provider</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-definition/" class="">Service Definition</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-contract/" class="">Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-springmvc/" class="">Develop Microservice with SpringMVC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-jax-rs/" class="">Develop Microservice with JAX-RS</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-transparent-rpc/" class="">Develop Microservice with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-interface-constraints/" class="">Service Interface Constraints</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-configurations/" class="">Service Configurations</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/communicate-protocol/" class="">Communicate Protocol</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/application-boot-process/" class="">Application Boot Up Process</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-heartbeat/" class="">Service Heartbeat</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Consumer</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rest-template/" class="active">Develop with Rest Template</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rpc/" class="">Develop with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-service-contract/" class="">Use Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/invoke-control/" class="">Invoke Control</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">General Development</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/local-develop-test/" class="">Develop and Test in Local Environment</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-servicecomb-in-spring-boot/" class="">Use ServiceComb in Spring Boot</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/distributed-tracing/" class="">Distributed Tracing</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/customized-tracing/" class="">Customized Tracing</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Edging Service</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/nginx/" class="">confd and Nginx</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/zuul/" class="">Zuul</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">Metrics</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Deployment</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/run-mode/" class="">Run Mode</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Security</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-tls/" class="">Use TLS</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="使用Rest Template方式开发">
+    <meta itemprop="description" content="使用Rest Template方式开发">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">使用Rest Template方式开发
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> On This Page</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#概念阐述" id="markdown-toc-概念阐述">概念阐述</a></li>
+  <li><a href="#场景描述" id="markdown-toc-场景描述">场景描述</a></li>
+  <li><a href="#示例代码" id="markdown-toc-示例代码">示例代码</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="概念阐述">概念阐述</h2>
+
+<p>  Rest Template是Spring提供的RESTful访问接口,ServiceComb提供该接口的实现类用于服务的调用。</p>
+
+<h2 id="场景描述">场景描述</h2>
+
+<p>  用户使用ServiceComb提供的Rest Template实例,可以使用自定义的URL进行服务调用,而不用关心服务的具体地址。</p>
+
+<h2 id="示例代码">示例代码</h2>
+
+<p>  Rest Template实例通过调用<code class="highlighter-rouge">RestTemplateBuilder.create()</code>方法获取,再使用该实例通过自定义的URL进行服务调用,代码如下:</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">org.springframework.stereotype.Component</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">org.springframework.web.client.RestTemplate</span><span class="o">;</span>
+
+<span class="kn">import</span> <span class="nn">io.servicecomb.foundation.common.utils.BeanUtils</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">io.servicecomb.foundation.common.utils.Log4jUtils</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">io.servicecomb.provider.springmvc.reference.RestTemplateBuilder</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">io.servicecomb.samples.common.schema.models.Person</span><span class="o">;</span>
+
+<span class="nd">@Component</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">SpringmvcConsumerMain</span> <span class="o">{</span>
+    <span class="kd">private</span> <span class="kd">static</span> <span class="n">RestTemplate</span> <span class="n">restTemplate</span> <span class="o">=</span> <span class="n">RestTemplateBuilder</span><span class="o">.</span><span class="na">create</span><span class="o">();</span>
+
+    <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span>
+        <span class="n">init</span><span class="o">();</span>
+        <span class="n">Person</span> <span class="n">person</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Person</span><span class="o">();</span>
+        <span class="n">person</span><span class="o">.</span><span class="na">setName</span><span class="o">(</span><span class="s">"ServiceComb/Java Chassis"</span><span class="o">);</span>
+        <span class="n">String</span> <span class="n">sayHiResult</span> <span class="o">=</span> <span class="n">restTemplate</span>
+                <span class="o">.</span><span class="na">postForObject</span><span class="o">(</span><span class="s">"cse://springmvc/springmvchello/sayhi?name=Java Chassis"</span><span class="o">,</span> <span class="kc">null</span><span class="o">,</span> <span class="n">String</span><span class="o">.</span><span class="na">class</span><span class="o">);</span>
+        <span class="n">String</span> <span class="n">sayHelloResult</span> <span class="o">=</span> <span class="n">restTemplate</span>
+                <span class="o">.</span><span class="na">postForObject</span><span class="o">(</span><span class="s">"cse://springmvc/springmvchello/sayhello"</span><span class="o">,</span> <span class="n">person</span><span class="o">,</span> <span class="n">String</span><span class="o">.</span><span class="na">class</span><span class="o">);</span>
+        <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"RestTemplate consumer sayhi services: "</span> <span class="o">+</span> <span class="n">sayHiResult</span><span class="o">);</span>
+        <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"RestTemplate consumer sayhello services: "</span> <span class="o">+</span> <span class="n">sayHelloResult</span><span class="o">);</span>
+    <span class="o">}</span>
+
+    <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">init</span><span class="o">()</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span>
+        <span class="n">Log4jUtils</span><span class="o">.</span><span class="na">init</span><span class="o">();</span>
+        <span class="n">BeanUtils</span><span class="o">.</span><span class="na">init</span><span class="o">();</span>
+    <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<blockquote>
+  <p>说明:</p>
+  <ul>
+    <li>URL格式为:<code class="highlighter-rouge">cse://microserviceName/path?querystring</code>。以<a href="/users/develop-with-springmvc/">用SpringMVC开发微服务</a>中定义的服务提供者为例,其微服务名称是<code class="highlighter-rouge">springmvc</code>,basePath是<code class="highlighter-rouge">/springmvchello</code>,那么URL中的microserviceName是<code class="highlighter-rouge">springmvc</code>,请求sayhi时的path是<code class="highlighter-rouge">springmvchello/sayhi</code>,所以示例代码中请求sayhi的URL是<code class="highlighter-rouge">cse://springmvc/springmvchello/sayhi?name=Java Chassis</code>。</li>
+    <li>使用这种URL格式,ServiceComb框架会在内部进行服务发现、熔断容错等处理并最终将请求发送到服务提供者。</li>
+  </ul>
+</blockquote>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/develop-with-rest-template.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/develop-with-rest-template.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/users/develop-with-rpc/index.html
----------------------------------------------------------------------
diff --git a/content/users/develop-with-rpc/index.html b/content/users/develop-with-rpc/index.html
new file mode 100644
index 0000000..d3de2aa
--- /dev/null
+++ b/content/users/develop-with-rpc/index.html
@@ -0,0 +1,721 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>使用RPC方式开发 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="使用RPC方式开发">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="使用RPC方式开发">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/users/develop-with-rpc/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/users/develop-with-rpc/">
+
+
+
+  <meta property="og:description" content="使用RPC方式开发">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="使用RPC方式开发">
+  <meta name="twitter:description" content="使用RPC方式开发">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/users/develop-with-rpc/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">User Guide</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/" class="">Java Chassis Architecture</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/setup-environment/" class="">Setup Environment</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Provider</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-definition/" class="">Service Definition</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-contract/" class="">Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-springmvc/" class="">Develop Microservice with SpringMVC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-jax-rs/" class="">Develop Microservice with JAX-RS</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-transparent-rpc/" class="">Develop Microservice with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-interface-constraints/" class="">Service Interface Constraints</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-configurations/" class="">Service Configurations</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/communicate-protocol/" class="">Communicate Protocol</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/application-boot-process/" class="">Application Boot Up Process</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-heartbeat/" class="">Service Heartbeat</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Consumer</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rest-template/" class="">Develop with Rest Template</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rpc/" class="active">Develop with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-service-contract/" class="">Use Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/invoke-control/" class="">Invoke Control</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">General Development</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/local-develop-test/" class="">Develop and Test in Local Environment</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-servicecomb-in-spring-boot/" class="">Use ServiceComb in Spring Boot</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/distributed-tracing/" class="">Distributed Tracing</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/customized-tracing/" class="">Customized Tracing</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Edging Service</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/nginx/" class="">confd and Nginx</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/zuul/" class="">Zuul</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">Metrics</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Deployment</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/run-mode/" class="">Run Mode</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Security</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-tls/" class="">Use TLS</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="使用RPC方式开发">
+    <meta itemprop="description" content="使用RPC方式开发">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">使用RPC方式开发
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> On This Page</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#概念阐述" id="markdown-toc-概念阐述">概念阐述</a></li>
+  <li><a href="#示例代码" id="markdown-toc-示例代码">示例代码</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="概念阐述">概念阐述</h2>
+
+<p>RPC开发方式允许用户通过在服务接口上标注注解来生成服务提供者代理,从而进行服务的调用。</p>
+
+<h2 id="示例代码">示例代码</h2>
+
+<p>只需要声明一个服务接口类型的成员,并且使用<code class="highlighter-rouge">@RpcReference</code>标注该成员,声明依赖的微服务及schemaId,即可进行服务调用,示例代码如下:</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">org.springframework.stereotype.Component</span><span class="o">;</span>
+
+<span class="kn">import</span> <span class="nn">io.servicecomb.foundation.common.utils.BeanUtils</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">io.servicecomb.foundation.common.utils.Log4jUtils</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">io.servicecomb.provider.pojo.RpcReference</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">io.servicecomb.samples.common.schema.Hello</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">io.servicecomb.samples.common.schema.models.Person</span><span class="o">;</span>
+
+<span class="nd">@Component</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">CodeFirstConsumerMain</span> <span class="o">{</span>
+    <span class="nd">@RpcReference</span><span class="o">(</span><span class="n">microserviceName</span> <span class="o">=</span> <span class="s">"codefirst"</span><span class="o">,</span> <span class="n">schemaId</span> <span class="o">=</span> <span class="s">"codeFirstHello"</span><span class="o">)</span>
+    <span class="kd">private</span> <span class="kd">static</span> <span class="n">Hello</span> <span class="n">hello</span><span class="o">;</span>
+
+    <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span>
+        <span class="n">init</span><span class="o">();</span>
+        <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">hello</span><span class="o">.</span><span class="na">sayHi</span><span class="o">(</span><span class="s">"Java Chassis"</span><span class="o">));</span>
+        <span class="n">Person</span> <span class="n">person</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Person</span><span class="o">();</span>
+        <span class="n">person</span><span class="o">.</span><span class="na">setName</span><span class="o">(</span><span class="s">"ServiceComb/Java Chassis"</span><span class="o">);</span>
+        <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">hello</span><span class="o">.</span><span class="na">sayHello</span><span class="o">(</span><span class="n">person</span><span class="o">));</span>
+    <span class="o">}</span>
+
+    <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">init</span><span class="o">()</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span>
+        <span class="n">Log4jUtils</span><span class="o">.</span><span class="na">init</span><span class="o">();</span>
+        <span class="n">BeanUtils</span><span class="o">.</span><span class="na">init</span><span class="o">();</span>
+    <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<p>在以上代码中,服务消费者已经取得了服务提供者的服务接口<code class="highlighter-rouge">Hello</code>,并在代码中声明一个<code class="highlighter-rouge">Hello</code>类型的成员。通过在<code class="highlighter-rouge">hello</code>上使用<code class="highlighter-rouge">@RPCReference</code>注解指明微服务名称和schemaId,ServiceComb框架可以在程序启动时从服务中心获取到对应的服务提供者实例信息,并且生成一个代理注入到hello中,用户可以像调用本地类一样调用远程服务。</p>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/develop-with-rpc.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/develop-with-rpc.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/users/develop-with-springmvc/index.html
----------------------------------------------------------------------
diff --git a/content/users/develop-with-springmvc/index.html b/content/users/develop-with-springmvc/index.html
new file mode 100644
index 0000000..1b06848
--- /dev/null
+++ b/content/users/develop-with-springmvc/index.html
@@ -0,0 +1,831 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>用SpringMVC开发微服务 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="用SpringMVC开发微服务">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="用SpringMVC开发微服务">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/users/develop-with-springmvc/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/users/develop-with-springmvc/">
+
+
+
+  <meta property="og:description" content="用SpringMVC开发微服务">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="用SpringMVC开发微服务">
+  <meta name="twitter:description" content="用SpringMVC开发微服务">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/users/develop-with-springmvc/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">User Guide</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/" class="">Java Chassis Architecture</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/setup-environment/" class="">Setup Environment</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Provider</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-definition/" class="">Service Definition</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-contract/" class="">Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-springmvc/" class="active">Develop Microservice with SpringMVC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-jax-rs/" class="">Develop Microservice with JAX-RS</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-transparent-rpc/" class="">Develop Microservice with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-interface-constraints/" class="">Service Interface Constraints</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-configurations/" class="">Service Configurations</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/communicate-protocol/" class="">Communicate Protocol</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/application-boot-process/" class="">Application Boot Up Process</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-heartbeat/" class="">Service Heartbeat</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Consumer</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rest-template/" class="">Develop with Rest Template</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rpc/" class="">Develop with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-service-contract/" class="">Use Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/invoke-control/" class="">Invoke Control</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">General Development</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/local-develop-test/" class="">Develop and Test in Local Environment</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-servicecomb-in-spring-boot/" class="">Use ServiceComb in Spring Boot</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/distributed-tracing/" class="">Distributed Tracing</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/customized-tracing/" class="">Customized Tracing</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Edging Service</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/nginx/" class="">confd and Nginx</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/zuul/" class="">Zuul</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">Metrics</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Deployment</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/run-mode/" class="">Run Mode</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Security</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-tls/" class="">Use TLS</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="用SpringMVC开发微服务">
+    <meta itemprop="description" content="用SpringMVC开发微服务">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">用SpringMVC开发微服务
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> On This Page</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#概念阐述" id="markdown-toc-概念阐述">概念阐述</a></li>
+  <li><a href="#开发示例" id="markdown-toc-开发示例">开发示例</a></li>
+  <li><a href="#涉及api" id="markdown-toc-涉及api">涉及API</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="概念阐述">概念阐述</h2>
+
+<p>ServiceComb支持SpringMVC注解,允许使用SpringMVC风格开发微服务。</p>
+
+<h2 id="开发示例">开发示例</h2>
+
+<ul>
+  <li>
+    <p><strong>步骤 1</strong> 定义服务接口。</p>
+
+    <p>根据开发之前定义好的契约,编写Java业务接口,代码如下:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="kd">public</span> <span class="kd">interface</span> <span class="nc">Hello</span> <span class="o">{</span>
+   <span class="n">String</span> <span class="nf">sayHi</span><span class="o">(</span><span class="n">String</span> <span class="n">name</span><span class="o">);</span>
+   <span class="n">String</span> <span class="nf">sayHello</span><span class="o">(</span><span class="n">Person</span> <span class="n">person</span><span class="o">);</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+
+    <p>该接口的位置需要与契约中x-java-interface所指定的路径一致。</p>
+  </li>
+  <li>
+    <p><strong>步骤 2</strong> 实现服务。</p>
+
+    <p>使用Spring MVC注解开发业务代码,Hello的服务实现如下:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="kn">import</span> <span class="nn">javax.ws.rs.core.MediaType</span><span class="o">;</span>
+ <span class="kn">import</span> <span class="nn">org.springframework.web.bind.annotation.RequestBody</span><span class="o">;</span>
+ <span class="kn">import</span> <span class="nn">org.springframework.web.bind.annotation.RequestMapping</span><span class="o">;</span>
+ <span class="kn">import</span> <span class="nn">org.springframework.web.bind.annotation.RequestMethod</span><span class="o">;</span>
+ <span class="kn">import</span> <span class="nn">org.springframework.web.bind.annotation.RequestParam</span><span class="o">;</span>
+ <span class="kn">import</span> <span class="nn">io.servicecomb.samples.common.schema.Hello</span><span class="o">;</span>
+ <span class="kn">import</span> <span class="nn">io.servicecomb.samples.common.schema.models.Person</span><span class="o">;</span>
+   
+ <span class="nd">@RequestMapping</span><span class="o">(</span><span class="n">path</span> <span class="o">=</span> <span class="s">"/springmvchello"</span><span class="o">,</span> <span class="n">produces</span> <span class="o">=</span> <span class="n">MediaType</span><span class="o">.</span><span class="na">APPLICATION_JSON</span><span class="o">)</span>
+ <span class="kd">public</span> <span class="kd">class</span> <span class="nc">SpringmvcHelloImpl</span> <span class="kd">implements</span> <span class="n">Hello</span> <span class="o">{</span>
+   <span class="nd">@Override</span>
+   <span class="nd">@RequestMapping</span><span class="o">(</span><span class="n">path</span> <span class="o">=</span> <span class="s">"/sayhi"</span><span class="o">,</span> <span class="n">method</span> <span class="o">=</span> <span class="n">RequestMethod</span><span class="o">.</span><span class="na">POST</span><span class="o">)</span>
+   <span class="kd">public</span> <span class="n">String</span> <span class="nf">sayHi</span><span class="o">(</span><span class="nd">@RequestParam</span><span class="o">(</span><span class="n">name</span> <span class="o">=</span> <span class="s">"name"</span><span class="o">)</span> <span class="n">String</span> <span class="n">name</span><span class="o">)</span> <span class="o">{</span>
+ <span class="err"> </span>  <span class="k">return</span> <span class="s">"Hello "</span> <span class="o">+</span> <span class="n">name</span><span class="o">;</span>
+   <span class="o">}</span>
+
+   <span class="nd">@Override</span>
+   <span class="nd">@RequestMapping</span><span class="o">(</span><span class="n">path</span> <span class="o">=</span> <span class="s">"/sayhello"</span><span class="o">,</span> <span class="n">method</span> <span class="o">=</span> <span class="n">RequestMethod</span><span class="o">.</span><span class="na">POST</span><span class="o">)</span>
+   <span class="kd">public</span> <span class="n">String</span> <span class="nf">sayHello</span><span class="o">(</span><span class="nd">@RequestBody</span> <span class="n">Person</span> <span class="n">person</span><span class="o">)</span> <span class="o">{</span>
+ <span class="err"> </span>  <span class="k">return</span> <span class="s">"Hello person "</span> <span class="o">+</span> <span class="n">person</span><span class="o">.</span><span class="na">getName</span><span class="o">();</span>
+ <span class="err"> </span><span class="o">}</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>步骤 3</strong> 发布服务</p>
+
+    <p>在服务的实现类上打上注解@RestSchema,指定schemaId,表示该实现作为当前微服务的一个schema发布,代码如下:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="kn">import</span> <span class="nn">io.servicecomb.provider.rest.common.RestSchema</span><span class="o">;</span>
+ <span class="c1">// other code omitted</span>
+ <span class="nd">@RestSchema</span><span class="o">(</span><span class="n">schemaId</span> <span class="o">=</span> <span class="s">"springmvcHello"</span><span class="o">)</span>
+ <span class="kd">public</span> <span class="kd">class</span> <span class="nc">SpringmvcHelloImpl</span> <span class="kd">implements</span> <span class="n">Hello</span> <span class="o">{</span>
+   <span class="c1">// other code omitted</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+
+    <p>然后在<code class="highlighter-rouge">resources/META-INF/spring</code>目录下创建<code class="highlighter-rouge">springmvcHello.bean.xml</code>文件,命名规则为<code class="highlighter-rouge">\*.bean.xml</code>,配置spring进行服务扫描的base-package,文件内容如下:</p>
+
+    <div class="language-xml highlighter-rouge"><pre class="highlight"><code> <span class="cp">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span>
+   
+ <span class="nt">&lt;beans</span> <span class="na">xmlns=</span><span class="s">"http://www.springframework.org/schema/beans"</span>
+        <span class="na">xmlns:xsi=</span><span class="s">"http://www.w3.org/2001/XMLSchema-instance"</span>
+        <span class="na">xmlns:context=</span><span class="s">"http://www.springframework.org/schema/context"</span>
+        <span class="na">xsi:schemaLocation=</span><span class="s">"http://www.springframework.org/schema/beans</span> <span class="err">classpath:org/springframework/beans/factory/xml/spring-beans-3.0.xsd</span>
+        <span class="err">http://www.springframework.org/schema/context</span> <span class="err">http://www.springframework.org/schema/context/spring-context-3.0.xsd"</span><span class="nt">&gt;</span>
+   
+     <span class="nt">&lt;context:component-scan</span> <span class="na">base-package=</span><span class="s">"io.servicecomb.samples.springmvc.povider"</span><span class="nt">/&gt;</span>
+ <span class="nt">&lt;/beans&gt;</span>
+</code></pre>
+    </div>
+  </li>
+</ul>
+
+<h2 id="涉及api">涉及API</h2>
+
+<p>Spring MVC开发模式当前支持org.springframework.web.bind.annotation包下的如下注解,所有注解的使用方法参考<a href="https://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html">Spring MVC官方文档</a>。</p>
+
+<table>
+  <thead>
+    <tr>
+      <th style="text-align: left">注解</th>
+      <th style="text-align: left">位置</th>
+      <th style="text-align: left">描述</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td style="text-align: left">RequestMapping</td>
+      <td style="text-align: left">schema/operation</td>
+      <td style="text-align: left">支持标注path/method/produces三种数据,operation默认继承schema上的produces</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">GetMapping</td>
+      <td style="text-align: left">schema/operation</td>
+      <td style="text-align: left">支持标注path/produces两种数据,operation默认继承schema上的produces</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">PutMapping</td>
+      <td style="text-align: left">schema/operation</td>
+      <td style="text-align: left">支持标注path/produces两种数据,operation默认继承schema上的produces</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">PostMapping</td>
+      <td style="text-align: left">schema/operation</td>
+      <td style="text-align: left">支持标注path/produces两种数据,operation默认继承schema上的produces</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">DeleteMapping</td>
+      <td style="text-align: left">schema/operation</td>
+      <td style="text-align: left">支持标注path/produces两种数据,operation默认继承schema上的produces</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">PatchMapping</td>
+      <td style="text-align: left">schema/operation</td>
+      <td style="text-align: left">支持标注path/produces两种数据,operation默认继承schema上的produces</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">PathVariable</td>
+      <td style="text-align: left">parameter</td>
+      <td style="text-align: left">从path中获取参数</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">RequestParam</td>
+      <td style="text-align: left">parameter</td>
+      <td style="text-align: left">从query中获取参数</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">RequestHeader</td>
+      <td style="text-align: left">parameter</td>
+      <td style="text-align: left">从header中获取参数</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">RequestBody</td>
+      <td style="text-align: left">parameter</td>
+      <td style="text-align: left">从body中获取参数,每个operation只能有一个body参数</td>
+    </tr>
+  </tbody>
+</table>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/develop-with-springmvc.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/develop-with-springmvc.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>


[32/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/docs/tracing-with-servicecomb/index.html
----------------------------------------------------------------------
diff --git a/content/cn/docs/tracing-with-servicecomb/index.html b/content/cn/docs/tracing-with-servicecomb/index.html
new file mode 100644
index 0000000..fa4dd5b
--- /dev/null
+++ b/content/cn/docs/tracing-with-servicecomb/index.html
@@ -0,0 +1,872 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>基于 ServiceComb 和 Zipkin 的分布式调用链追踪 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="本篇将介绍如何使用 ServiceComb 和 Zipkin 实现分布式调用链追踪">
+
+
+
+
+<meta name="author" content="Sean Yin">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="基于 ServiceComb 和 Zipkin 的分布式调用链追踪">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/tracing-with-servicecomb/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/tracing-with-servicecomb/">
+
+
+
+  <meta property="og:description" content="本篇将介绍如何使用 ServiceComb 和 Zipkin 实现分布式调用链追踪">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="基于 ServiceComb 和 Zipkin 的分布式调用链追踪">
+  <meta name="twitter:description" content="本篇将介绍如何使用 ServiceComb 和 Zipkin 实现分布式调用链追踪">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+    <meta name="twitter:creator" content="@seanyinx">
+  
+
+
+
+  
+
+  
+
+
+
+
+
+  <meta property="og:type" content="article">
+  <meta property="article:published_time" content="2017-07-17T00:00:00+08:00">
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/docs/tracing-with-servicecomb/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+
+<div itemscope itemtype="http://schema.org/Person">
+
+  
+
+  <div class="author__content">
+    <h3 class="author__name" itemprop="name">Sean Yin</h3>
+    
+      <p class="author__bio" itemprop="description">
+	    
+	      
+	        Nothing but speed is indestructible
+	      
+	    
+      </p>
+    
+  </div>
+
+  <div class="author__urls-wrapper">
+    <button class="btn btn--inverse">关注</button>
+    <ul class="author__urls social-icons">
+      
+
+      
+        <li>
+          <a href="http://seanyinx.github.io" itemprop="url">
+            <i class="fa fa-fw fa-chain" aria-hidden="true"></i> 网站
+          </a>
+        </li>
+      
+
+      
+        <li>
+          <a href="mailto:seanyinx@gmail.com">
+            <meta itemprop="email" content="seanyinx@gmail.com" />
+            <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> 电子邮箱
+          </a>
+        </li>
+      
+
+      
+
+      
+        <li>
+          <a href="https://twitter.com/seanyinx" itemprop="sameAs">
+            <i class="fa fa-fw fa-twitter-square" aria-hidden="true"></i> Twitter
+          </a>
+        </li>
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      <!--
+  <li>
+    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs">
+      <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link
+    </a>
+  </li>
+-->
+    </ul>
+  </div>
+</div>
+
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="基于 ServiceComb 和 Zipkin 的分布式调用链追踪">
+    <meta itemprop="description" content="本篇将介绍如何使用 ServiceComb 和 Zipkin 实现分布式调用链追踪">
+    <meta itemprop="datePublished" content="July 17, 2017">
+    <meta itemprop="dateModified" content="July 17, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">基于 ServiceComb 和 Zipkin 的分布式调用链追踪
+</h1>
+            
+              <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <p>微服务架构解决了很多单体应用带来的问题,但同时也需要我们付出额外的代价。由于网络的不稳定性带来的请求处理延迟就是代价之一。</p>
+
+<p>在单体应用中,所有模块都在同一个进程中运行,所以并没有模块间互通的问题。但微服务架构中,服务间通过网络沟通,因此我们不得不处理和网络有关的
+问题,例如:延迟、超时、网络分区等。</p>
+
+<p>另外,随着业务的扩展服务增多,我们很难洞察数据如何在蛛网般复杂的服务结构中流转。我们如何才能有效的监控网络延迟并且可视化服务中的数据流转呢?</p>
+
+<h2 id="zipkin">Zipkin</h2>
+<blockquote>
+  <p><a href="http://zipkin.io/">Zipkin</a> 是一个分布式调用链追踪系统。 它能帮助用户收集时序数据用以定位微服务中的延迟问题,它同时管理追踪数据的收集
+和查询。Zipkin 的设计基于 Google <a href="http://research.google.com/pubs/pub36356.html">Dapper paper</a>。[1]</p>
+</blockquote>
+
+<p>ServiceComb 集成了 Zipkin 提供自动调用链追踪能力,如此一来用户只需要专注实现其业务需求。</p>
+
+<h2 id="使用步骤">使用步骤</h2>
+<p>我们将以 <a href="https://github.com/ServiceComb/LinuxCon-Beijing-WorkShop">workshop demo</a> 为例演示如何用 Zipkin 实施调用链追踪。</p>
+
+<h3 id="添加依赖">添加依赖</h3>
+<p>基于 ServiceComb Java Chassis 的微服务只需要添加如下依赖到 pom.xml。</p>
+<div class="language-xml highlighter-rouge"><pre class="highlight"><code>    <span class="nt">&lt;dependency&gt;</span>
+      <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+      <span class="nt">&lt;artifactId&gt;</span>handler-tracing-zipkin<span class="nt">&lt;/artifactId&gt;</span>
+    <span class="nt">&lt;/dependency&gt;</span>
+
+</code></pre>
+</div>
+
+<p>如果微服务是基于 Spring Cloud + Zuul 的 API 网关,例如 workshop demo 中的 manager service ,我们还需要加入如下的额外依赖。</p>
+<div class="language-xml highlighter-rouge"><pre class="highlight"><code>    <span class="nt">&lt;dependency&gt;</span>
+      <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+      <span class="nt">&lt;artifactId&gt;</span>spring-cloud-zuul-zipkin<span class="nt">&lt;/artifactId&gt;</span>
+    <span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+</div>
+
+<h3 id="配置追踪处理和数据收集">配置追踪处理和数据收集</h3>
+<p>在微服务的 <code class="highlighter-rouge">microservice.yaml</code> 配置文件中,设置追踪处理器和数据收集服务地址。</p>
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">cse</span><span class="pi">:</span>
+  <span class="s">handler</span><span class="pi">:</span>
+    <span class="s">chain</span><span class="pi">:</span>
+      <span class="s">Consumer</span><span class="pi">:</span>
+        <span class="s">default</span><span class="pi">:</span> <span class="s">tracing-consumer</span>
+      <span class="s">Provider</span><span class="pi">:</span>
+        <span class="s">default</span><span class="pi">:</span> <span class="s">tracing-provider</span>
+
+<span class="s">servicecomb</span><span class="pi">:</span>
+  <span class="s">tracing</span><span class="pi">:</span>
+    <span class="s">collector</span><span class="pi">:</span>
+      <span class="s">address</span><span class="pi">:</span> <span class="s">http://zipkin.servicecomb.io:9411</span>
+</code></pre>
+</div>
+
+<p>就这样,在加了两个配置项,没改动一行代码的情况下,我们启动了基于 Zipkin 和 Java chassis 的分布式调用链追踪的功能。</p>
+
+<p><strong>注意</strong> 如果项目中的其他依赖也引入了 zipkin (例如 Spring Cloud),可能导致 zipkin 版本不一致而运行出错,这时需要在项目 pom 中声明 zipkin
+版本。</p>
+
+<h2 id="快速演示">快速演示</h2>
+<p>在 workshop demo 中启动追踪后,我们接下来在 docker 环境中演示一下调用链追踪功能。</p>
+<ol>
+  <li>
+    <p>在 workshop demo 目录下,使用命令 <code class="highlighter-rouge">mvn package -DskipTests -Pdocker</code> 或 <code class="highlighter-rouge">mvn package -DskipTests -Pdocker -Pdocker-machine</code>
+(如果你使用 <a href="https://www.docker.com/products/docker-toolbox">Docker Toolbox</a>),创建所有服务的 docker 镜像</p>
+  </li>
+  <li>
+    <p>运行 <code class="highlighter-rouge">docker-compose up</code></p>
+  </li>
+  <li>
+    <p>按照下面视频中的操作步骤,给运行在 docker 容器中的服务发送请求</p>
+  </li>
+  <li>
+    <p>用浏览器打开运行在 docker 容器中的 Zipkin 网站,地址应为 docker 容器IP:<code class="highlighter-rouge">http://docker.container.ip:9411</code></p>
+  </li>
+</ol>
+
+<!-- Courtesy of embedresponsively.com //-->
+<div class="responsive-video-container">
+
+  <iframe src="https://player.youku.com/embed/XMjg1NzQ3NzUzNg" frameborder="0" allowfullscreen=""></iframe>
+
+</div>
+
+<p>现在我们应该可以看到 Zipkin 首页上显示的几个被追踪的服务。
+<img src="/assets/images/tracing.1.png" alt="zipkin homepage" class="align-center" /></p>
+
+<p>如果我们选择 manager 并点击 Find Traces 按钮,就能看到一些调用链数据。请别介意服务性能可能不太好,因为我们是在一台2012年产的笔记本上
+运行这么多服务。
+<img src="/assets/images/tracing.2.png" alt="traces of manager service" class="align-center" /></p>
+
+<p>如果点击某一个调用链,我们能看到对应的所有时间跨度信息。
+<img src="/assets/images/tracing.3.png" alt="trace spans of manager service" class="align-center" /></p>
+
+<p>点击某个时间跨度,可以获取更详细的调用时间信息。
+<img src="/assets/images/tracing.4.png" alt="span details of manager service" class="align-center" /></p>
+
+<p>同时我们也可以点击 Dependencies 按钮,查看服务的依赖关系图。
+<img src="/assets/images/tracing.5.png" alt="service dependencies" class="align-center" /></p>
+
+<h2 id="总结">总结</h2>
+<p>从以上的示例可以看出,通过 ServiceComb 实现分布式调用链追踪功能只需简单的两步配置,但我们却基于 Zipkin 展示了强大的功能,如分析服务间
+调用的时间数据以定位网络延迟,并提供可视化界面以洞察服务间的调用链和依赖关系。</p>
+
+<h2 id="参考">参考</h2>
+<ul>
+  <li>[1] <a href="http://zipkin.io/">Zipkin</a></li>
+</ul>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+  
+
+
+  
+  
+  
+
+  <p class="page__taxonomy">
+    <strong><i class="fa fa-fw fa-tags" aria-hidden="true"></i> 标签: </strong>
+    <span itemprop="keywords">
+    
+      
+      
+      <a href="/tags/#zipkin" class="page__taxonomy-item" rel="tag">zipkin</a><span class="sep">, </span>
+    
+      
+      
+      <a href="/tags/#%E5%88%86%E5%B8%83%E5%BC%8F%E8%BF%BD%E8%B8%AA" class="page__taxonomy-item" rel="tag">分布式追踪</a>
+    
+    </span>
+  </p>
+
+
+
+
+
+        
+          
+            
+              <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> 最新的:</strong> <time datetime="2017-07-17">2017年7月17日</time></p>
+            
+          
+        
+      </footer>
+
+      <section class="page__share">
+  
+    <h4 class="page__share-title">分享</h4>
+  
+
+  <a href="https://twitter.com/intent/tweet?via=ServiceComb&text=基于 ServiceComb 和 Zipkin 的分布式调用链追踪 /cn/docs/tracing-with-servicecomb/" class="btn btn--twitter" title="分享 Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
+
+  <a href="https://www.facebook.com/sharer/sharer.php?u=/cn/docs/tracing-with-servicecomb/" class="btn btn--facebook" title="分享 Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
+
+  <a href="https://plus.google.com/share?url=/cn/docs/tracing-with-servicecomb/" class="btn btn--google-plus" title="分享 Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
+
+  <a href="https://www.linkedin.com/shareArticle?mini=true&url=/cn/docs/tracing-with-servicecomb/" class="btn btn--linkedin" title="分享 LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
+</section>
+
+
+      
+  <nav class="pagination">
+    
+      <a href="/docs/tracing-with-servicecomb/" class="pagination--pager" title="Distributed Tracing with ServiceComb and Zipkin
+">向前</a>
+    
+    
+      <a href="/docs/communication-btw-sc-ms/" class="pagination--pager" title="Communication Between Service-Center and MicroServices
+">向后</a>
+    
+  </nav>
+
+
+    </div>
+
+    
+      <div class="page__comments">
+  
+  
+    <section id="static-comments">
+      
+        <!-- Start static comments -->
+        <div class="js-comments">
+          
+        </div>
+        <!-- End static comments -->
+
+        <!-- Start new comment form -->
+        <h4 class="page__comments-title">留下评论</h4>
+        <p class="small">您的电子邮箱地址并不会被展示。请填写标记为必须的字段。 <span class="required">*</span></p>
+        <form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/ServiceComb/servicesomb.github.io/master">
+          <div class="form__spinner">
+            <i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
+            <span class="sr-only">正在加载...</span>
+          </div>
+
+          <fieldset>
+            <label for="comment-form-message">评论 <small class="required">*</small></label>
+            <textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
+            <div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">Markdown语法已支持。</a></div>
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-name">姓名 <small class="required">*</small></label>
+            <input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-email">电子邮箱 <small class="required">*</small></label>
+            <input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-url">网站(可选)</label>
+            <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
+          </fieldset>
+          <fieldset class="hidden" style="display: none;">
+            <input type="hidden" name="options[slug]" value="tracing-with-servicecomb">
+            <label for="comment-form-location">Not used. Leave blank if you are a human.</label>
+            <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
+          </fieldset>
+          <!-- Start comment form alert messaging -->
+          <p class="hidden js-notice">
+            <strong class="js-notice-text"></strong>
+          </p>
+          <!-- End comment form alert messaging -->
+          <fieldset>
+            <button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--large">提交评论</button>
+          </fieldset>
+        </form>
+        <!-- End new comment form -->
+      
+    </section>
+  
+</div>
+
+    
+  </article>
+
+  
+  
+    <div class="page__related">
+      <h4 class="page__related-title">猜您还喜欢</h4>
+      <div class="grid__wrapper">
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/jira_beginner_guide/" rel="permalink">老司机带你刷任务 - ServiceComb JIRA入门指南
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">ServiceComb JIRA入门指南
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/how-to-reform-a-legacy-system/" rel="permalink">最头疼的遗留系统该如何改造?
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+      </div>
+    </div>
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _posts/cn/2017-07-17-tracing-with-servicecomb.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_posts/cn/2017-07-17-tracing-with-servicecomb.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  
+  <script>
+    (function ($) {
+    var $comments = $('.js-comments');
+
+    $('#new_comment').submit(function () {
+      var form = this;
+
+      $(form).addClass('disabled');
+      $('#comment-form-submit').html('<i class="fa fa-spinner fa-spin fa-fw"></i> 正在加载...');
+
+      $.ajax({
+        type: $(this).attr('method'),
+        url: $(this).attr('action'),
+        data: $(this).serialize(),
+        contentType: 'application/x-www-form-urlencoded',
+        success: function (data) {
+          $('#comment-form-submit').html('已提交');
+          $('.page__comments-form .js-notice').removeClass('notice--danger');
+          $('.page__comments-form .js-notice').addClass('notice--success');
+          showAlert('感谢您的评论!被批准后它会立即在此站点展示。');
+        },
+        error: function (err) {
+          console.log(err);
+          $('#comment-form-submit').html('提交评论');
+          $('.page__comments-form .js-notice').removeClass('notice--success');
+          $('.page__comments-form .js-notice').addClass('notice--danger');
+          showAlert('很抱歉,您的提交存在错误。请确保所有必填字段都已填写正确,然后再试一次。');
+          $(form).removeClass('disabled');
+        }
+      });
+
+      return false;
+    });
+
+    function showAlert(message) {
+      $('.page__comments-form .js-notice').removeClass('hidden');
+      $('.page__comments-form .js-notice-text').html(message);
+    }
+  })(jQuery);
+  </script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/faqs/faqs-huawei-cloud/index.html
----------------------------------------------------------------------
diff --git a/content/cn/faqs/faqs-huawei-cloud/index.html b/content/cn/faqs/faqs-huawei-cloud/index.html
new file mode 100644
index 0000000..adfc189
--- /dev/null
+++ b/content/cn/faqs/faqs-huawei-cloud/index.html
@@ -0,0 +1,448 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>华为公有云常见问题 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="华为公有云常见问题">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="华为公有云常见问题">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/faqs/faqs-huawei-cloud/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/faqs/faqs-huawei-cloud/">
+
+
+
+  <meta property="og:description" content="华为公有云常见问题">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="华为公有云常见问题">
+  <meta name="twitter:description" content="华为公有云常见问题">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/faqs/faqs-huawei-cloud/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/faqs/"><span class="nav__sub-title nav__sub-title-with-url">常见问题</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/faqs/faqs-huawei-cloud/"><span class="nav__sub-title nav__sub-title-with-url">华为公有云常见问题</span></a>
+        
+
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="华为公有云常见问题">
+    <meta itemprop="description" content="华为公有云常见问题">
+    
+    <meta itemprop="dateModified" content="October 29, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">华为公有云常见问题
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <ul>
+  <li>
+    <p><strong>Q: 在使用华为公有云时,设置镜像的标签只需要和上一次的标签不一样还是要和之前的都不一样?</strong></p>
+
+    <p>A: 由于Docker本身的机制中并没有实现每次都从远端拉取镜像的功能,因此,只要本地中有一个版本的镜像存在而且每次都通过该版本的标签来访问镜像时,读取的镜像则为最开始上传的镜像,后续对该标签镜像的更新并不会在本地生效。因此现有两种解决方案:</p>
+
+    <p>(1) 新上传的镜像的标签和之前的都不一样。</p>
+
+    <p>(2) 登录到后台去将原版本标签的镜像删除。</p>
+
+    <p>拓展:如果使用了华为公有云上面的编排功能,则可以通过设置imagePullPolicy为Always避免该问题。</p>
+  </li>
+  <li>
+    <p><strong>Q: 华为公有云运行时报错:WARN com.huawei.paas.monitor.DataFactory: Upload monitor data error. 使用的配置为:</strong></p>
+
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code> <span class="s">cse</span><span class="pi">:</span>
+   <span class="s">monitor</span><span class="pi">:</span>
+     <span class="s">handler</span><span class="pi">:</span>
+       <span class="s">chain</span><span class="pi">:</span>
+         <span class="s">Provider</span><span class="pi">:</span>
+           <span class="s">default</span><span class="pi">:</span> <span class="s">bizkeeper-provider</span>
+</code></pre>
+    </div>
+
+    <p>A: 这个是配置文件的错误,handler应该是在cse的下一级而不是monitor的下一级,正确的配置是:</p>
+
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code> <span class="s">cse</span><span class="pi">:</span>
+   <span class="s">handler</span><span class="pi">:</span>
+     <span class="s">chain</span><span class="pi">:</span>
+       <span class="s">Provider</span><span class="pi">:</span>
+         <span class="s">default</span><span class="pi">:</span> <span class="s">bizkeeper-provider</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>Q: 微服务引擎CSE和ServiceComb有什么关系?</strong></p>
+
+    <p>A:  CSE(Cloud Service Engine)是ServiceComb的商业版,其中除了ServiceComb还包含了安全增强以及服务管控界面。 CSE的核心模块以及相关的开发框架都是和ServiceComb同源的。 基于ServiceComb开发的应用可以不修改代码,很方便地部署CSE环境中。</p>
+  </li>
+</ul>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _faqs/cn/huawei-cloud-faq.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_faqs/cn/huawei-cloud-faq.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>



[27/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/users/edging-service/nginx/index.html
----------------------------------------------------------------------
diff --git a/content/cn/users/edging-service/nginx/index.html b/content/cn/users/edging-service/nginx/index.html
new file mode 100644
index 0000000..d4baaa6
--- /dev/null
+++ b/content/cn/users/edging-service/nginx/index.html
@@ -0,0 +1,810 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>使用confd和Nginx做边缘服务 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="使用confd和Nginx做边缘服务">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="使用confd和Nginx做边缘服务">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/edging-service/nginx/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/edging-service/nginx/">
+
+
+
+  <meta property="og:description" content="使用confd和Nginx做边缘服务">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="使用confd和Nginx做边缘服务">
+  <meta name="twitter:description" content="使用confd和Nginx做边缘服务">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/users/edging-service/nginx/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">用户手册</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/" class="">Java Chassis系统架构</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/setup-environment/" class="">环境配置</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务提供者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-definition/" class="">服务定义</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-contract/" class="">服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-springmvc/" class="">用SpringMVC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-jax-rs/" class="">用JAX-RS开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-transparent-rpc/" class="">用透明RPC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-interface-constraints/" class="">服务接口约束</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-configurations/" class="">服务配置</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/communicate-protocol/" class="">通信协议</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/application-boot-process/" class="">程序启动逻辑</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-heartbeat/" class="">服务心跳</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务消费者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rest-template/" class="">使用Rest Template方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rpc/" class="">使用RPC方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-service-contract/" class="">使用服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/invoke-control/" class="">调用控制</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">通用开发</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/local-develop-test/" class="">本地开发与测试</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-servicecomb-in-spring-boot/" class="">在Spring Boot中使用ServiceComb</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/distributed-tracing/" class="">分布式调用链追踪</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/customized-tracing/" class="">自定义调用链打点</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">服务能力开放</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/nginx/" class="active">使用confd和Nginx做边缘服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/zuul/" class="">使用Zuul做边缘服务</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">监控</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">部署</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/run-mode/" class="">运行模式</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">微服务安全</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-tls/" class="">使用TLS通信</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="使用confd和Nginx做边缘服务">
+    <meta itemprop="description" content="使用confd和Nginx做边缘服务">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">使用confd和Nginx做边缘服务
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> 在本页上</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#概念阐述" id="markdown-toc-概念阐述">概念阐述</a>    <ul>
+      <li><a href="#confd" id="markdown-toc-confd"><strong>confd</strong></a></li>
+      <li><a href="#nginx" id="markdown-toc-nginx"><strong>Nginx</strong></a></li>
+    </ul>
+  </li>
+  <li><a href="#场景描述" id="markdown-toc-场景描述">场景描述</a></li>
+  <li><a href="#对接服务中心" id="markdown-toc-对接服务中心">对接服务中心</a>    <ul>
+      <li><a href="#方法一http调用" id="markdown-toc-方法一http调用"><strong>方法一:http调用</strong></a></li>
+      <li><a href="#方法二使用servicecomb开源代码接口" id="markdown-toc-方法二使用servicecomb开源代码接口"><strong>方法二:使用servicecomb开源代码接口</strong></a></li>
+    </ul>
+  </li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="概念阐述">概念阐述</h2>
+
+<h3 id="confd"><strong>confd</strong></h3>
+
+<p>confd是一个轻量级的配置管理工具,源码地址:<a href="https://github.com/kelseyhightower/confd">https://github.com/kelseyhightower/confd</a>,它可以将配置信息存储在etcd、consul、dynamodb、redis以及zookeeper等。confd定期会从这些存储节点pull最新的配置,然后重新加载服务,完成配置文件的更新。</p>
+
+<h3 id="nginx"><strong>Nginx</strong></h3>
+
+<p>Nginx (engine x)是一个高性能的HTTP和反向代理服务器,具有负载均衡的功能。详情请参考<a href="http://www.nginx.cn/doc/">http://www.nginx.cn/doc/</a>。本小节介绍的服务主要使用到的是Nginx的http代理功能。</p>
+
+<h2 id="场景描述">场景描述</h2>
+
+<p>本小节介绍的技术是使用nginx+confd做边缘服务,同时可以对接ServiceComb微服务框架中的服务中心,从服务中心中拉去服务信息通过confd动态更新nginx的配置。</p>
+
+<p>使用nginx+confd动态反向代理的实现步骤可参考文章<a href="http://www.cnblogs.com/Anker/p/6112022.html">http://www.cnblogs.com/Anker/p/6112022.html</a>,本节主要介绍confd如何对接ServiceComb框架的服务中心。</p>
+
+<h2 id="对接服务中心">对接服务中心</h2>
+
+<p>本节介绍的技术核心在于如何使得confd获取到服务中心的服务信息,服务中心开放了以下接口供外部调用:</p>
+
+<h3 id="方法一http调用"><strong>方法一:http调用</strong></h3>
+
+<p>服务中心开放http接口均需要添加租户头部信息:“X-Tenant-Name:tenantName”,tenameName为租户名,默认为default,例如”X-Tenant-Name:default”。</p>
+
+<ul>
+  <li>
+    <p>检查服务中心健康状态</p>
+
+    <div class="language-http highlighter-rouge"><pre class="highlight"><code><span class="err"> GET 127.0.0.1:9980/health
+</span></code></pre>
+    </div>
+  </li>
+  <li>
+    <p>获取所有微服务信息</p>
+
+    <div class="language-http highlighter-rouge"><pre class="highlight"><code><span class="err"> GET 127.0.0.1:9980/registry/v3/microservices
+</span></code></pre>
+    </div>
+  </li>
+  <li>
+    <p>获取指定id的微服务信息</p>
+  </li>
+</ul>
+
+<blockquote>
+  <ol>
+    <li>
+      <p>首先根据微服务信息获取serviceId</p>
+
+      <div class="language-http highlighter-rouge"><pre class="highlight"><code><span class="err">GET 127.0.0.1:9980/registry/v3/existence?type=microservice&amp;appId={appId}&amp;serviceName={serviceName}&amp;version={version}
+</span></code></pre>
+      </div>
+    </li>
+    <li>
+      <p>根据上述接口返回的serviceId获取微服务完整信息</p>
+
+      <div class="language-http highlighter-rouge"><pre class="highlight"><code><span class="err">GET 127.0.0.1:9980/registry/v3/microservices/{serviceId}
+</span></code></pre>
+      </div>
+    </li>
+  </ol>
+</blockquote>
+
+<ul>
+  <li>
+    <p>获取指定微服务的所有实例信息</p>
+
+    <div class="language-http highlighter-rouge"><pre class="highlight"><code><span class="err"> GET 127.0.0.1:9980/registry/v3/microservices/{serviceId}/instances
+</span></code></pre>
+    </div>
+    <p>需要在header中添加:”X-ConsumerId:{serviceId}”。</p>
+  </li>
+  <li>
+    <p>查找微服务实例信息</p>
+
+    <div class="language-http highlighter-rouge"><pre class="highlight"><code><span class="err"> GET 127.0.0.1:9980/registry/v3/instances?appId={appId}&amp;serviceName={serviceName}&amp;version={version}
+</span></code></pre>
+    </div>
+    <p>需要在header中添加”X-ConsumerId:{serviceId}”。</p>
+  </li>
+</ul>
+
+<p>注意:在实际开发中请访问实际的service-center访问地址,并将上述url中{}的变量替换成具体值,http返回的数据均为json格式</p>
+
+<h3 id="方法二使用servicecomb开源代码接口"><strong>方法二:使用servicecomb开源代码接口</strong></h3>
+
+<p>在开发微服务应用,只需要调用servicecomb框架代码中的工具类RegistryUtil.java中提供的接口,即可获取服务中心的信息,接口描述如下:</p>
+
+<ul>
+  <li>获取所有微服务信息
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="n">List</span><span class="o">&lt;</span><span class="n">Microservice</span><span class="o">&gt;</span> <span class="nf">getAllMicroservices</span><span class="o">();</span>
+</code></pre>
+    </div>
+  </li>
+  <li>获取微服务唯一标识
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="n">String</span> <span class="nf">getMicroserviceId</span><span class="o">(</span><span class="n">String</span> <span class="n">appId</span><span class="o">,</span> <span class="n">String</span> <span class="n">microserviceName</span><span class="o">,</span> <span class="n">String</span> <span class="n">versionRule</span><span class="o">);</span>
+</code></pre>
+    </div>
+  </li>
+  <li>根据微服务唯一标识查询微服务静态信息
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="n">Microservice</span> <span class="nf">getMicroservice</span><span class="o">(</span><span class="n">String</span> <span class="n">microserviceId</span><span class="o">);</span>
+</code></pre>
+    </div>
+  </li>
+  <li>根据多个微服务唯一标识查询所有微服务实例信息
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="n">List</span><span class="o">&lt;</span><span class="n">MicroserviceInstance</span><span class="o">&gt;</span> <span class="nf">getMicroserviceInstance</span><span class="o">(</span><span class="n">String</span> <span class="n">consumerId</span><span class="o">,</span> <span class="n">String</span> <span class="n">providerId</span><span class="o">);</span>
+</code></pre>
+    </div>
+  </li>
+  <li>按照app+interface+version查询实例endpoints信息
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="n">List</span><span class="o">&lt;</span><span class="n">MicroserviceInstance</span><span class="o">&gt;</span> <span class="nf">findServiceInstance</span><span class="o">(</span><span class="n">String</span> <span class="n">consumerId</span><span class="o">,</span> <span class="n">String</span> <span class="n">appId</span><span class="o">,</span> <span class="n">String</span> <span class="n">serviceName</span><span class="o">,</span><span class="n">String</span> <span class="n">versionRule</span><span class="o">);</span>
+</code></pre>
+    </div>
+  </li>
+</ul>
+
+<p>通过上述http接口可获取到服务中心的微服务和其实例的信息,从而通过confd动态更新nginx配置。</p>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/cn/nginx.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/cn/nginx.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/users/edging-service/zuul/index.html
----------------------------------------------------------------------
diff --git a/content/cn/users/edging-service/zuul/index.html b/content/cn/users/edging-service/zuul/index.html
new file mode 100644
index 0000000..ce3dca4
--- /dev/null
+++ b/content/cn/users/edging-service/zuul/index.html
@@ -0,0 +1,840 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>使用Zuul做边缘服务 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="使用Zuul做边缘服务">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="使用Zuul做边缘服务">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/edging-service/zuul/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/edging-service/zuul/">
+
+
+
+  <meta property="og:description" content="使用Zuul做边缘服务">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="使用Zuul做边缘服务">
+  <meta name="twitter:description" content="使用Zuul做边缘服务">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/users/edging-service/zuul/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">用户手册</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/" class="">Java Chassis系统架构</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/setup-environment/" class="">环境配置</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务提供者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-definition/" class="">服务定义</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-contract/" class="">服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-springmvc/" class="">用SpringMVC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-jax-rs/" class="">用JAX-RS开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-transparent-rpc/" class="">用透明RPC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-interface-constraints/" class="">服务接口约束</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-configurations/" class="">服务配置</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/communicate-protocol/" class="">通信协议</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/application-boot-process/" class="">程序启动逻辑</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-heartbeat/" class="">服务心跳</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务消费者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rest-template/" class="">使用Rest Template方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rpc/" class="">使用RPC方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-service-contract/" class="">使用服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/invoke-control/" class="">调用控制</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">通用开发</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/local-develop-test/" class="">本地开发与测试</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-servicecomb-in-spring-boot/" class="">在Spring Boot中使用ServiceComb</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/distributed-tracing/" class="">分布式调用链追踪</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/customized-tracing/" class="">自定义调用链打点</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">服务能力开放</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/nginx/" class="">使用confd和Nginx做边缘服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/zuul/" class="active">使用Zuul做边缘服务</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">监控</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">部署</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/run-mode/" class="">运行模式</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">微服务安全</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-tls/" class="">使用TLS通信</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="使用Zuul做边缘服务">
+    <meta itemprop="description" content="使用Zuul做边缘服务">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">使用Zuul做边缘服务
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> 在本页上</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#概念阐述" id="markdown-toc-概念阐述">概念阐述</a>    <ul>
+      <li><a href="#api-gateway" id="markdown-toc-api-gateway">API Gateway:</a></li>
+      <li><a href="#zuul" id="markdown-toc-zuul">Zuul</a></li>
+    </ul>
+  </li>
+  <li><a href="#场景描述" id="markdown-toc-场景描述">场景描述</a></li>
+  <li><a href="#注意事项" id="markdown-toc-注意事项">注意事项</a></li>
+  <li><a href="#启动zuul-proxy" id="markdown-toc-启动zuul-proxy">启动Zuul Proxy</a></li>
+  <li><a href="#使用zuul-proxy" id="markdown-toc-使用zuul-proxy">使用Zuul Proxy</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="概念阐述">概念阐述</h2>
+
+<h3 id="api-gateway">API Gateway:</h3>
+
+<p>API Gateway是一个服务器,也可以说是进入系统的唯一节点。API Gateway封装内部系统的架构,并且提供API给各个客户端。</p>
+
+<h3 id="zuul">Zuul</h3>
+
+<p>Zuul是Netflix的基于JVM的路由器和服务器端负载均衡器,可以使用Zuul进行以下操作:</p>
+
+<ul>
+  <li>认证</li>
+  <li>洞察</li>
+  <li>压力测试</li>
+  <li>金丝雀测试</li>
+  <li>动态路由</li>
+  <li>服务迁移</li>
+  <li>负载脱落</li>
+  <li>安全</li>
+  <li>静态相响应处理</li>
+  <li>主动/被动流量管理</li>
+</ul>
+
+<p>本小节主要介绍在SpringBoot应用中使用Zuul做API Gateway。关于Zuul的详细功能介绍请参考文档<a href="https://springcloud.cc/spring-cloud-dalston.html#_router_and_filter_zuul">路由器和过滤器:Zuul</a>。</p>
+
+<h2 id="场景描述">场景描述</h2>
+
+<p>Zuul做API Gateway,即建立一个Zuul Proxy应用,在该Proxy应用中统一定义所有的微服务访问入口,通过使用不同的前缀(stripped)来区分各个微服务。本小节通过建立一个ZuulProxy SpringBoot应用来演示Zuul的API Gateway功能。</p>
+
+<h2 id="注意事项">注意事项</h2>
+
+<p>本小节介绍的ZuulProxy和ZuulServer等demo都是基于SpringBoot和ServiceComb框架的应用,具体请参考<a href="/cn/users/use-servicecomb-in-spring-boot/">在ServiceComb框架中集成SpringBoot框架</a>。</p>
+
+<h2 id="启动zuul-proxy">启动Zuul Proxy</h2>
+
+<p>本节介绍如何启动一个zuul proxy应用作为API Gateway。步骤如下:</p>
+
+<ul>
+  <li>
+    <p><strong>步骤 1</strong>在pom文件中添加依赖:</p>
+
+    <div class="language-xml highlighter-rouge"><pre class="highlight"><code> <span class="nt">&lt;dependency&gt;</span> 
+   <span class="nt">&lt;groupId&gt;</span>org.springframework.cloud<span class="nt">&lt;/groupId&gt;</span>  
+   <span class="nt">&lt;artifactId&gt;</span>spring-cloud-starter-zuul<span class="nt">&lt;/artifactId&gt;</span> 
+ <span class="nt">&lt;/dependency&gt;</span>
+ <span class="nt">&lt;dependency&gt;</span> 
+   <span class="nt">&lt;groupId&gt;</span>org.springframework.cloud<span class="nt">&lt;/groupId&gt;</span>  
+   <span class="nt">&lt;artifactId&gt;</span>spring-cloud-starter-ribbon<span class="nt">&lt;/artifactId&gt;</span> 
+ <span class="nt">&lt;/dependency&gt;&lt;dependency&gt;</span> 
+   <span class="nt">&lt;groupId&gt;</span>org.springframework.cloud<span class="nt">&lt;/groupId&gt;</span>  
+   <span class="nt">&lt;artifactId&gt;</span>spring-cloud-starter-hystrix<span class="nt">&lt;/artifactId&gt;</span> 
+ <span class="nt">&lt;/dependency&gt;</span>
+ <span class="nt">&lt;dependency&gt;</span> 
+   <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>  
+   <span class="nt">&lt;artifactId&gt;</span>spring-boot-starter-discovery<span class="nt">&lt;/artifactId&gt;</span> 
+ <span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>步骤 2</strong>在SpringBoot主类添加注解:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="nd">@SpringBootApplication</span>
+ <span class="nd">@EnableServiceComb</span>
+ <span class="nd">@EnableZuulProxy</span><span class="c1">//新增注解</span>
+ <span class="kd">public</span> <span class="kd">class</span> <span class="nc">ZuulMain</span><span class="o">{</span>
+ <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span><span class="o">{</span>
+     <span class="n">SpringApplication</span><span class="o">.</span><span class="na">run</span><span class="o">(</span><span class="n">ZuulMain</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">args</span><span class="o">);</span>
+   <span class="o">}</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>步骤 3</strong>在application.yml文件中定义路由策略:</p>
+
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code> <span class="s">server</span><span class="pi">:</span>
+   <span class="s">port</span><span class="pi">:</span> <span class="s">8754</span> <span class="c1">#api gateway服务端口</span>
+ <span class="s">zuul</span><span class="pi">:</span>
+   <span class="s">routes</span><span class="pi">:</span> <span class="c1">#路由策略</span>
+     <span class="s">discoveryServer</span><span class="pi">:</span> <span class="s">/myServer/**</span> <span class="c1">#路由规则</span>
+</code></pre>
+    </div>
+
+    <p>上述的配置项可以根据实际开发环境进行配置。关于zuul.routers的路由策略的详细定义规则,请参考官方文献:<a href="https://springcloud.cc/spring-cloud-dalston.html#_router_and_filter_zuul">路由器和过滤器:Zuul</a>,可更细粒度地对路由进行控制。</p>
+  </li>
+  <li>
+    <p><strong>步骤 4</strong>在microservice.yaml定义微服务属性:</p>
+
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code> <span class="s">APPLICATION_ID</span><span class="pi">:</span> <span class="s">discoverytest</span> <span class="c1">#服务ID</span>
+ <span class="s">service_description</span><span class="pi">:</span>
+   <span class="s">name</span><span class="pi">:</span> <span class="s">discoveryGateway</span> <span class="c1">#服务名称</span>
+   <span class="s">version</span><span class="pi">:</span> <span class="s">0.0.2</span> <span class="c1">#服务版本号</span>
+ <span class="s">cse</span><span class="pi">:</span>
+   <span class="s">service</span><span class="pi">:</span>
+     <span class="s">registry</span><span class="pi">:</span>
+       <span class="s">address</span><span class="pi">:</span> <span class="s">http://127.0.0.1:30100</span>  <span class="c1">#服务注册中心地址</span>
+   <span class="s">rest</span><span class="pi">:</span>
+     <span class="s">address</span><span class="pi">:</span> <span class="s">0.0.0.0:8082</span> <span class="c1">#微服务端口,可不写</span>
+</code></pre>
+    </div>
+  </li>
+</ul>
+
+<p>本小节所有服务使用的都是本地的服务中心,具体的服务中心启动流程请参考<a href="/cn/users/setup-environment/#运行service-center">启动本地服务中心</a>。</p>
+
+<ul>
+  <li><strong>步骤 5 </strong>运行ZuulMain 应用</li>
+</ul>
+
+<h2 id="使用zuul-proxy">使用Zuul Proxy</h2>
+
+<p>在使用zuul做的API Gateway前,首先要启动在zuul.routers中定义的微服务提供者。</p>
+
+<p>开发服务提供者,开发流程请参考<a href="/cn/users/service-definition/">开发服务提供者</a>。在微服务microservice.yaml文件中需注意以下两点:</p>
+
+<ul>
+  <li>
+    <p>APPLICATION_ID需要于zuul proxy中定义的保持一致。</p>
+  </li>
+  <li>
+    <p>service_description.name需要于zuul.routers中相对应。</p>
+  </li>
+</ul>
+
+<p>示例如下:</p>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">APPLICATION_ID</span><span class="pi">:</span> <span class="s">discoverytest</span> <span class="c1">#与zuul proxy一致</span>
+  <span class="s">service_description</span><span class="pi">:</span>
+    <span class="s">name</span><span class="pi">:</span> <span class="s">discoveryServer</span> <span class="c1">#服务名称,与zuul.routers对应</span>
+    <span class="s">version</span><span class="pi">:</span> <span class="s">0.0.2</span>
+<span class="s">cse</span><span class="pi">:</span>
+  <span class="s">service</span><span class="pi">:</span>
+    <span class="s">registry</span><span class="pi">:</span>
+      <span class="s">address</span><span class="pi">:</span> <span class="s">http://127.0.0.1:30100</span> <span class="c1">#服务注册中心地址</span>
+  <span class="s">rest</span><span class="pi">:</span>
+    <span class="s">address</span><span class="pi">:</span> <span class="s">0.0.0.0:8080</span>
+</code></pre>
+</div>
+
+<p>API Gateway的访问入口为:<a href="http://127.0.0.1:8754">http://127.0.0.1:8754</a>,所有在zuul.routers中定义的服务都可通过这个访问入口进行代理访问,访问规则如下:</p>
+
+<p>http://127.0.0.1:8754/myServer/***](http://127.0.0.1:8754/myServer/***)</p>
+
+<p>这表示,Http调用<a href="http://127.0.0.1:8754/myServer/***">http://127.0.0.1:8754/myServer/***</a>,会转到discoveryServer服务(例如:”/myServer/101”跳转到discoveryServer 服务下的”/101”)</p>
+
+<blockquote>
+  <p>如果在服务中心同时存在多个discoveryServer服务(版本不同),zuul默认采用Ribbon策略对请求进行转发。</p>
+</blockquote>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/cn/zuul.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/cn/zuul.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/users/index.html
----------------------------------------------------------------------
diff --git a/content/cn/users/index.html b/content/cn/users/index.html
new file mode 100644
index 0000000..1f0b945
--- /dev/null
+++ b/content/cn/users/index.html
@@ -0,0 +1,766 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>Java Chassis系统架构 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="Java Chassis系统架构">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="Java Chassis系统架构">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/">
+
+
+
+  <meta property="og:description" content="Java Chassis系统架构">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="Java Chassis系统架构">
+  <meta name="twitter:description" content="Java Chassis系统架构">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/users/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">用户手册</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/" class="active">Java Chassis系统架构</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/setup-environment/" class="">环境配置</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务提供者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-definition/" class="">服务定义</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-contract/" class="">服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-springmvc/" class="">用SpringMVC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-jax-rs/" class="">用JAX-RS开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-transparent-rpc/" class="">用透明RPC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-interface-constraints/" class="">服务接口约束</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-configurations/" class="">服务配置</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/communicate-protocol/" class="">通信协议</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/application-boot-process/" class="">程序启动逻辑</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-heartbeat/" class="">服务心跳</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务消费者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rest-template/" class="">使用Rest Template方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rpc/" class="">使用RPC方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-service-contract/" class="">使用服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/invoke-control/" class="">调用控制</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">通用开发</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/local-develop-test/" class="">本地开发与测试</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-servicecomb-in-spring-boot/" class="">在Spring Boot中使用ServiceComb</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/distributed-tracing/" class="">分布式调用链追踪</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/customized-tracing/" class="">自定义调用链打点</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">服务能力开放</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/nginx/" class="">使用confd和Nginx做边缘服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/zuul/" class="">使用Zuul做边缘服务</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">监控</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">部署</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/run-mode/" class="">运行模式</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">微服务安全</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-tls/" class="">使用TLS通信</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="Java Chassis系统架构">
+    <meta itemprop="description" content="Java Chassis系统架构">
+    
+    <meta itemprop="dateModified" content="June 14, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">Java Chassis系统架构
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> 在本页上</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#框架概述" id="markdown-toc-框架概述">框架概述</a></li>
+  <li><a href="#主要设计意图" id="markdown-toc-主要设计意图">主要设计意图</a></li>
+  <li><a href="#模块说明" id="markdown-toc-模块说明">模块说明</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="框架概述">框架概述</h2>
+<p><img src="/assets/images/servicecomb-models.png" alt="ServiceComb Model" class="align-center" /></p>
+
+<h2 id="主要设计意图">主要设计意图</h2>
+
+<p>1.编程模型和通信模型分离,不同的编程模型可以灵活组合不同的通信模型。应用开发者在开发阶段只关注接口开发,部署阶段灵活切换通信方式;支持legacy系统的切换,legacy系统只需要修改服务发布的配置文件(或者annotation),而不需要修改代码。</p>
+
+<p>现阶段支持SpringMVC、JAX-RS和透明RPC三种开发方式。</p>
+
+<p>2.内建API-first支持。通过契约规范化微服务开发,实现跨语言的通信,并支持配套的软件工具链(契约生成代码、代码生成契约等)开发,构建完整的开发生态。</p>
+
+<p>3.定义了常用的微服务运行模型,将微服务从发现到交互过程中的各种容错手段都封装起来。该运行模型支持自定义和扩展。</p>
+
+<h2 id="模块说明">模块说明</h2>
+
+<table>
+  <thead>
+    <tr>
+      <th style="text-align: left">类型</th>
+      <th style="text-align: left">artifact id</th>
+      <th style="text-align: left">是否可选</th>
+      <th style="text-align: left">功能说明</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td style="text-align: left">编程模型</td>
+      <td style="text-align: left">provider-pojo</td>
+      <td style="text-align: left">是</td>
+      <td style="text-align: left">提供RPC开发模式</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">编程模型</td>
+      <td style="text-align: left">provider-jaxrs</td>
+      <td style="text-align: left">是</td>
+      <td style="text-align: left">提供JAX RS开发模式</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">编程模型</td>
+      <td style="text-align: left">provider-springmvc</td>
+      <td style="text-align: left">是</td>
+      <td style="text-align: left">提供Spring MVC开发模式</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">通信模型</td>
+      <td style="text-align: left">transport-rest-vertx</td>
+      <td style="text-align: left">是</td>
+      <td style="text-align: left">运行于HTTP之上的开发框架,不依赖WEB容器,应用打包为可执行jar</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">通信模型</td>
+      <td style="text-align: left">transport-rest-servlet</td>
+      <td style="text-align: left">是</td>
+      <td style="text-align: left">运行于WEB容器的开发框架,应用打包为war包</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">通信模型</td>
+      <td style="text-align: left">transport-highway</td>
+      <td style="text-align: left">是</td>
+      <td style="text-align: left">提供高性能的私有通信协议,仅用于java之间互通。</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">运行模型</td>
+      <td style="text-align: left">handler-loadbalance</td>
+      <td style="text-align: left">是</td>
+      <td style="text-align: left">负载均衡模块。提供各种路由策略和配置方法。一般客户端使用。</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">运行模型</td>
+      <td style="text-align: left">handler-bizkeeper</td>
+      <td style="text-align: left">是</td>
+      <td style="text-align: left">和服务治理相关的功能,比如隔离、熔断、容错。</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">运行模型</td>
+      <td style="text-align: left">handler-tracing</td>
+      <td style="text-align: left">是</td>
+      <td style="text-align: left">调用链跟踪模块,对接监控系统,吐出打点数据。</td>
+    </tr>
+  </tbody>
+</table>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/cn/servicecomb-introduction.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/cn/servicecomb-introduction.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>


[40/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/docs/jira_beginner_guide/index.html
----------------------------------------------------------------------
diff --git a/content/cn/docs/jira_beginner_guide/index.html b/content/cn/docs/jira_beginner_guide/index.html
new file mode 100644
index 0000000..ed9c307
--- /dev/null
+++ b/content/cn/docs/jira_beginner_guide/index.html
@@ -0,0 +1,789 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>老司机带你刷任务 - ServiceComb JIRA入门指南 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="ServiceComb JIRA入门指南">
+
+
+
+
+<meta name="author" content="Sean Yin">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="老司机带你刷任务 - ServiceComb JIRA入门指南">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/jira_beginner_guide/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/jira_beginner_guide/">
+
+
+
+  <meta property="og:description" content="ServiceComb JIRA入门指南">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="老司机带你刷任务 - ServiceComb JIRA入门指南">
+  <meta name="twitter:description" content="ServiceComb JIRA入门指南">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+    <meta name="twitter:creator" content="@seanyinx">
+  
+
+
+
+  
+
+  
+
+
+
+
+
+  <meta property="og:type" content="article">
+  <meta property="article:published_time" content="2017-11-16T00:00:00+08:00">
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/docs/jira_beginner_guide/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+
+<div itemscope itemtype="http://schema.org/Person">
+
+  
+
+  <div class="author__content">
+    <h3 class="author__name" itemprop="name">Sean Yin</h3>
+    
+      <p class="author__bio" itemprop="description">
+	    
+	      
+	        Nothing but speed is indestructible
+	      
+	    
+      </p>
+    
+  </div>
+
+  <div class="author__urls-wrapper">
+    <button class="btn btn--inverse">关注</button>
+    <ul class="author__urls social-icons">
+      
+
+      
+        <li>
+          <a href="http://seanyinx.github.io" itemprop="url">
+            <i class="fa fa-fw fa-chain" aria-hidden="true"></i> 网站
+          </a>
+        </li>
+      
+
+      
+        <li>
+          <a href="mailto:seanyinx@gmail.com">
+            <meta itemprop="email" content="seanyinx@gmail.com" />
+            <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> 电子邮箱
+          </a>
+        </li>
+      
+
+      
+
+      
+        <li>
+          <a href="https://twitter.com/seanyinx" itemprop="sameAs">
+            <i class="fa fa-fw fa-twitter-square" aria-hidden="true"></i> Twitter
+          </a>
+        </li>
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      <!--
+  <li>
+    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs">
+      <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link
+    </a>
+  </li>
+-->
+    </ul>
+  </div>
+</div>
+
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="老司机带你刷任务 - ServiceComb JIRA入门指南">
+    <meta itemprop="description" content="ServiceComb JIRA入门指南">
+    <meta itemprop="datePublished" content="November 16, 2017">
+    <meta itemprop="dateModified" content="November 16, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">老司机带你刷任务 - ServiceComb JIRA入门指南
+</h1>
+            
+              <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <p>想参与社区贡献,却感觉老虎咬天,无从下口?不用担心,老司机带你一起刷新手任务!</p>
+
+<p>ServiceComb的所有任务托管在<a href="https://servicecomb.atlassian.net">ServiceComb JIRA</a>上,
+首先你需要<a href="https://id.atlassian.com/signup?continue=https%3A%2F%2Fservicecomb.atlassian.net%2Flogin%3FredirectCount%3D1">注册</a>一个免费JIRA账户。</p>
+
+<p><img src="/assets/images/jira/jira.signup.png" alt="jira sign up" class="align-center" /></p>
+
+<p>登陆后请首先花几分钟上传自己的个性头像,让大家可以一眼看出哪些任务在你的掌控之下。</p>
+
+<p><img src="/assets/images/jira/jira.board.profile.png" alt="jira profile" class="align-center" /></p>
+
+<p>接下来在菜单栏点击Boards,选择ServiceComb转到如下Kanban board。</p>
+
+<p><img src="/assets/images/jira/jira.board.selection.png" alt="jira board selection" class="align-center" /></p>
+
+<p>ServiceComb Kanban board页面分为三列:</p>
+<ul>
+  <li>To Do:还未开始的任务</li>
+  <li>In Progress:进行中的任务</li>
+  <li>Done:已完成的任务</li>
+</ul>
+
+<p><img src="/assets/images/jira/jira.board.png" alt="jira board" class="align-center" /></p>
+
+<p>To Do列的任务卡上如果没有头像,代表这个任务无人领取,但作为新手,我怎么知道哪个任务容易上手呢?
+我们很细心的为新手任务加上了绿色竖线标记,这个标记对应所有打了 <code class="highlighter-rouge">good-first-issue</code> 标签的任务,
+以便大家一眼识别,立即上手。</p>
+
+<p><img src="/assets/images/jira/jira.good.first.issue.png" alt="jira good first issue" class="align-center" /></p>
+
+<p><img src="/assets/images/jira/jira.story.png" alt="jira story" class="align-center" /></p>
+
+<p>另外,任务还按照功能模块划分了epic,这样大家可以在自己擅长的领域大显身手,或者在全新的模块挑战自己。</p>
+
+<p><img src="/assets/images/jira/jira.epic.png" alt="jira epic" class="align-center" /></p>
+
+<p>选到心仪的任务后,记得讲任务分配给自己,以免被别人抢走。</p>
+
+<p><img src="/assets/images/jira/jira.story.assignment.png" alt="jira story assignment" class="align-center" /></p>
+
+<p>另外别忘了根据自己的进度,更新对应任务的状态,你可以直接拖动任务卡到对应状态列。</p>
+
+<p><img src="/assets/images/jira/jira.status.update.png" alt="jira status update" class="align-center" /></p>
+
+<p>最后,在完成任务后,咨询项目带队老司机,将自己的贡献添加到对应的发布版本中。</p>
+
+<p><img src="/assets/images/jira/jira.fix.version.png" alt="jira fix.version" class="align-center" /></p>
+
+<p>看到现在相信你已经跃跃欲试,赶紧加入我们一起刷任务升级吧!</p>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+          
+            
+              <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> 最新的:</strong> <time datetime="2017-11-16">2017年11月16日</time></p>
+            
+          
+        
+      </footer>
+
+      <section class="page__share">
+  
+    <h4 class="page__share-title">分享</h4>
+  
+
+  <a href="https://twitter.com/intent/tweet?via=ServiceComb&text=老司机带你刷任务 - ServiceComb JIRA入门指南 /cn/docs/jira_beginner_guide/" class="btn btn--twitter" title="分享 Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
+
+  <a href="https://www.facebook.com/sharer/sharer.php?u=/cn/docs/jira_beginner_guide/" class="btn btn--facebook" title="分享 Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
+
+  <a href="https://plus.google.com/share?url=/cn/docs/jira_beginner_guide/" class="btn btn--google-plus" title="分享 Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
+
+  <a href="https://www.linkedin.com/shareArticle?mini=true&url=/cn/docs/jira_beginner_guide/" class="btn btn--linkedin" title="分享 LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
+</section>
+
+
+      
+  <nav class="pagination">
+    
+      <a href="/docs/service-center-ui/" class="pagination--pager" title="Service-Center Management UI Console
+">向前</a>
+    
+    
+      <a href="#" class="pagination--pager disabled">向后</a>
+    
+  </nav>
+
+
+    </div>
+
+    
+      <div class="page__comments">
+  
+  
+    <section id="static-comments">
+      
+        <!-- Start static comments -->
+        <div class="js-comments">
+          
+        </div>
+        <!-- End static comments -->
+
+        <!-- Start new comment form -->
+        <h4 class="page__comments-title">留下评论</h4>
+        <p class="small">您的电子邮箱地址并不会被展示。请填写标记为必须的字段。 <span class="required">*</span></p>
+        <form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/ServiceComb/servicesomb.github.io/master">
+          <div class="form__spinner">
+            <i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
+            <span class="sr-only">正在加载...</span>
+          </div>
+
+          <fieldset>
+            <label for="comment-form-message">评论 <small class="required">*</small></label>
+            <textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
+            <div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">Markdown语法已支持。</a></div>
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-name">姓名 <small class="required">*</small></label>
+            <input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-email">电子邮箱 <small class="required">*</small></label>
+            <input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-url">网站(可选)</label>
+            <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
+          </fieldset>
+          <fieldset class="hidden" style="display: none;">
+            <input type="hidden" name="options[slug]" value="jira-beginner-guide">
+            <label for="comment-form-location">Not used. Leave blank if you are a human.</label>
+            <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
+          </fieldset>
+          <!-- Start comment form alert messaging -->
+          <p class="hidden js-notice">
+            <strong class="js-notice-text"></strong>
+          </p>
+          <!-- End comment form alert messaging -->
+          <fieldset>
+            <button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--large">提交评论</button>
+          </fieldset>
+        </form>
+        <!-- End new comment form -->
+      
+    </section>
+  
+</div>
+
+    
+  </article>
+
+  
+  
+    <div class="page__related">
+      <h4 class="page__related-title">猜您还喜欢</h4>
+      <div class="grid__wrapper">
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/how-to-reform-a-legacy-system/" rel="permalink">最头疼的遗留系统该如何改造?
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/how-to-reform-a-legacy-system/" rel="permalink">最头疼的遗留系统该如何改造?
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+      </div>
+    </div>
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _posts/cn/2017-11-16-jira-beginner-guide.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_posts/cn/2017-11-16-jira-beginner-guide.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  
+  <script>
+    (function ($) {
+    var $comments = $('.js-comments');
+
+    $('#new_comment').submit(function () {
+      var form = this;
+
+      $(form).addClass('disabled');
+      $('#comment-form-submit').html('<i class="fa fa-spinner fa-spin fa-fw"></i> 正在加载...');
+
+      $.ajax({
+        type: $(this).attr('method'),
+        url: $(this).attr('action'),
+        data: $(this).serialize(),
+        contentType: 'application/x-www-form-urlencoded',
+        success: function (data) {
+          $('#comment-form-submit').html('已提交');
+          $('.page__comments-form .js-notice').removeClass('notice--danger');
+          $('.page__comments-form .js-notice').addClass('notice--success');
+          showAlert('感谢您的评论!被批准后它会立即在此站点展示。');
+        },
+        error: function (err) {
+          console.log(err);
+          $('#comment-form-submit').html('提交评论');
+          $('.page__comments-form .js-notice').removeClass('notice--success');
+          $('.page__comments-form .js-notice').addClass('notice--danger');
+          showAlert('很抱歉,您的提交存在错误。请确保所有必填字段都已填写正确,然后再试一次。');
+          $(form).removeClass('disabled');
+        }
+      });
+
+      return false;
+    });
+
+    function showAlert(message) {
+      $('.page__comments-form .js-notice').removeClass('hidden');
+      $('.page__comments-form .js-notice-text').html(message);
+    }
+  })(jQuery);
+  </script>
+
+
+
+
+
+
+
+  </body>
+</html>


[49/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/css/prism.css
----------------------------------------------------------------------
diff --git a/content/assets/css/prism.css b/content/assets/css/prism.css
new file mode 100644
index 0000000..2e72935
--- /dev/null
+++ b/content/assets/css/prism.css
@@ -0,0 +1,367 @@
+/* http://prismjs.com/download.html?themes=prism-coy&languages=markup+clike+javascript+bash+batch+c+csharp+cpp+docker+git+go+java+json+markdown+protobuf+yaml&plugins=line-highlight+line-numbers+file-highlight+toolbar+highlight-keywords+copy-to-clipboard */
+/**
+ * prism.js Coy theme for JavaScript, CoffeeScript, CSS and HTML
+ * Based on https://github.com/tshedor/workshop-wp-theme (Example: http://workshop.kansan.com/category/sessions/basics or http://workshop.timshedor.com/category/sessions/basics);
+ * @author Tim  Shedor
+ */
+
+code[class*="language-"],
+pre[class*="language-"] {
+	color: black;
+	background: none;
+	font-family: 'PingFangSC', 'Source Code Pro', 'Droid Sans Mono', Consolas, 'Andale Mono', 'Ubuntu Mono', monospace;
+	text-align: left;
+	white-space: pre;
+	word-spacing: normal;
+	word-break: normal;
+	word-wrap: normal;
+	line-height: 1.5;
+
+	-moz-tab-size: 4;
+	-o-tab-size: 4;
+	tab-size: 4;
+
+	-webkit-hyphens: none;
+	-moz-hyphens: none;
+	-ms-hyphens: none;
+	hyphens: none;
+}
+
+/* Code blocks */
+pre[class*="language-"] {
+	position: relative;
+	margin: .5em 0;
+	box-shadow: -1px 0px 0px 0px #358ccb, 0px 0px 0px 1px #dfdfdf;
+	border-left: 10px solid #358ccb;
+	background-color: #fdfdfd;
+	background-image: linear-gradient(transparent 50%, rgba(69, 142, 209, 0.04) 50%);
+	background-size: 3em 3em;
+	background-origin: content-box;
+	overflow: visible;
+	padding: 0;
+}
+
+code[class*="language"] {
+	max-height: inherit;
+	height: 100%;
+	padding: 0 1em;
+	display: block;
+	overflow: auto;
+}
+
+/* Margin bottom to accomodate shadow */
+:not(pre) > code[class*="language-"],
+pre[class*="language-"] {
+	background-color: #fdfdfd;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	margin-bottom: 1em;
+}
+
+/* Inline code */
+:not(pre) > code[class*="language-"] {
+	position: relative;
+	padding: .2em;
+	border-radius: 0.3em;
+	color: #c92c2c;
+	border: 1px solid rgba(0, 0, 0, 0.1);
+	display: inline;
+	white-space: normal;
+}
+
+pre[class*="language-"]:before,
+pre[class*="language-"]:after {
+	content: '';
+	z-index: -2;
+	display: block;
+	position: absolute;
+	bottom: 0.75em;
+	left: 0.18em;
+	width: 40%;
+	height: 20%;
+	max-height: 13em;
+	box-shadow: 0px 13px 8px #979797;
+	-webkit-transform: rotate(-2deg);
+	-moz-transform: rotate(-2deg);
+	-ms-transform: rotate(-2deg);
+	-o-transform: rotate(-2deg);
+	transform: rotate(-2deg);
+}
+
+:not(pre) > code[class*="language-"]:after,
+pre[class*="language-"]:after {
+	right: 0.75em;
+	left: auto;
+	-webkit-transform: rotate(2deg);
+	-moz-transform: rotate(2deg);
+	-ms-transform: rotate(2deg);
+	-o-transform: rotate(2deg);
+	transform: rotate(2deg);
+}
+
+.token.comment,
+.token.block-comment,
+.token.prolog,
+.token.doctype,
+.token.cdata {
+	color: #7D8B99;
+}
+
+.token.punctuation {
+	color: #5F6364;
+}
+
+.token.property,
+.token.tag,
+.token.boolean,
+.token.number,
+.token.function-name,
+.token.constant,
+.token.symbol,
+.token.deleted {
+	color: #c92c2c;
+}
+
+.token.selector,
+.token.attr-name,
+.token.string,
+.token.char,
+.token.function,
+.token.builtin,
+.token.inserted {
+	color: #2f9c0a;
+}
+
+.token.operator,
+.token.entity,
+.token.url,
+.token.variable {
+	color: #a67f59;
+	background: rgba(255, 255, 255, 0.5);
+}
+
+.token.atrule,
+.token.attr-value,
+.token.keyword,
+.token.class-name {
+	color: #1990b8;
+}
+
+.token.regex,
+.token.important {
+	color: #e90;
+}
+
+.language-css .token.string,
+.style .token.string {
+	color: #a67f59;
+	background: rgba(255, 255, 255, 0.5);
+}
+
+.token.important {
+	font-weight: normal;
+}
+
+.token.bold {
+	font-weight: bold;
+}
+.token.italic {
+	font-style: italic;
+}
+
+.token.entity {
+	cursor: help;
+}
+
+.namespace {
+	opacity: .7;
+}
+
+@media screen and (max-width: 767px) {
+	pre[class*="language-"]:before,
+	pre[class*="language-"]:after {
+		bottom: 14px;
+		box-shadow: none;
+	}
+
+}
+
+/* Plugin styles */
+.token.tab:not(:empty):before,
+.token.cr:before,
+.token.lf:before {
+	color: #e0d7d1;
+}
+
+/* Plugin styles: Line Numbers */
+pre[class*="language-"].line-numbers {
+	padding-left: 0;
+}
+
+pre[class*="language-"].line-numbers code {
+	padding-left: 3.8em;
+}
+
+pre[class*="language-"].line-numbers .line-numbers-rows {
+	left: 0;
+}
+
+/* Plugin styles: Line Highlight */
+pre[class*="language-"][data-line] {
+	padding-top: 0;
+	padding-bottom: 0;
+	padding-left: 0;
+}
+pre[data-line] code {
+	position: relative;
+	padding-left: 4em;
+}
+pre .line-highlight {
+	margin-top: 0;
+}
+
+pre[data-line] {
+	position: relative;
+	padding: 1em 0 1em 3em;
+}
+
+.line-highlight {
+	position: absolute;
+	left: 0;
+	right: 0;
+	padding: inherit 0;
+	margin-top: 1em; /* Same as .prism’s padding-top */
+
+	background: hsla(24, 20%, 50%,.08);
+	background: linear-gradient(to right, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0));
+
+	pointer-events: none;
+
+	line-height: inherit;
+	white-space: pre;
+}
+
+	.line-highlight:before,
+	.line-highlight[data-end]:after {
+		content: attr(data-start);
+		position: absolute;
+		top: .4em;
+		left: .6em;
+		min-width: 1em;
+		padding: 0 .5em;
+		background-color: hsla(24, 20%, 50%,.4);
+		color: hsl(24, 20%, 95%);
+		font: bold 65%/1.5 sans-serif;
+		text-align: center;
+		vertical-align: .3em;
+		border-radius: 999px;
+		text-shadow: none;
+		box-shadow: 0 1px white;
+	}
+
+	.line-highlight[data-end]:after {
+		content: attr(data-end);
+		top: auto;
+		bottom: .4em;
+	}
+
+pre.line-numbers {
+	position: relative;
+	padding-left: 3.8em;
+	counter-reset: linenumber;
+}
+
+pre.line-numbers > code {
+	position: relative;
+}
+
+.line-numbers .line-numbers-rows {
+	position: absolute;
+	pointer-events: none;
+	top: 0;
+	font-size: 100%;
+	left: -3.8em;
+	width: 3em; /* works for line-numbers below 1000 lines */
+	letter-spacing: -1px;
+	border-right: 1px solid #999;
+
+	-webkit-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+
+}
+
+	.line-numbers-rows > span {
+		pointer-events: none;
+		display: block;
+		counter-increment: linenumber;
+	}
+
+		.line-numbers-rows > span:before {
+			content: counter(linenumber);
+			color: #999;
+			display: block;
+			padding-right: 0.8em;
+			text-align: right;
+		}
+pre.code-toolbar {
+	position: relative;
+}
+
+pre.code-toolbar > .toolbar {
+	position: absolute;
+	top: .3em;
+	right: .2em;
+	transition: opacity 0.3s ease-in-out;
+	opacity: 0;
+}
+
+pre.code-toolbar:hover > .toolbar {
+	opacity: 1;
+}
+
+pre.code-toolbar > .toolbar .toolbar-item {
+	display: inline-block;
+}
+
+pre.code-toolbar > .toolbar a {
+	cursor: pointer;
+}
+
+pre.code-toolbar > .toolbar button {
+	background: none;
+	border: 0;
+	color: inherit;
+	font: inherit;
+	line-height: normal;
+	overflow: visible;
+	padding: 0;
+	-webkit-user-select: none; /* for button */
+	-moz-user-select: none;
+	-ms-user-select: none;
+}
+
+pre.code-toolbar > .toolbar a,
+pre.code-toolbar > .toolbar button,
+pre.code-toolbar > .toolbar span {
+	color: #bbb;
+	font-size: .8em;
+	padding: 0 .5em;
+	background: #f5f2f0;
+	background: rgba(224, 224, 224, 0.2);
+	box-shadow: 0 2px 0 0 rgba(0,0,0,0.2);
+	border-radius: .5em;
+}
+
+pre.code-toolbar > .toolbar a:hover,
+pre.code-toolbar > .toolbar a:focus,
+pre.code-toolbar > .toolbar button:hover,
+pre.code-toolbar > .toolbar button:focus,
+pre.code-toolbar > .toolbar span:hover,
+pre.code-toolbar > .toolbar span:focus {
+	color: inherit;
+	text-decoration: none;
+}
+

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/fonts/FontAwesome.otf
----------------------------------------------------------------------
diff --git a/content/assets/fonts/FontAwesome.otf b/content/assets/fonts/FontAwesome.otf
new file mode 100644
index 0000000..401ec0f
Binary files /dev/null and b/content/assets/fonts/FontAwesome.otf differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/fonts/fontawesome-webfont.eot
----------------------------------------------------------------------
diff --git a/content/assets/fonts/fontawesome-webfont.eot b/content/assets/fonts/fontawesome-webfont.eot
new file mode 100644
index 0000000..e9f60ca
Binary files /dev/null and b/content/assets/fonts/fontawesome-webfont.eot differ


[46/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/js/main.min.js
----------------------------------------------------------------------
diff --git a/content/assets/js/main.min.js b/content/assets/js/main.min.js
new file mode 100644
index 0000000..adf91f5
--- /dev/null
+++ b/content/assets/js/main.min.js
@@ -0,0 +1,9 @@
+/*!
+ * Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+ * Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+ * Licensed under MIT
+ */
+!function(e,t){"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){function n(e){var t=!!e&&"length"in e&&e.length,n=pe.type(e);return"function"===n||pe.isWindow(e)?!1:"array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e}function r(e,t,n){if(pe.isFunction(t))return pe.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return pe.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(Te.test(t))return pe.filter(t,e,n);t=pe.filter(t,e)}return pe.grep(e,function(e){return pe.inArray(e,t)>-1!==n})}function i(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}function o(e){var t={};return pe.each(e.match(je)||[],function(e,n){t[n]=!0}),t}function a(){re.addEventListener?(re.removeEventListener("DOMContentLoaded",s),e.removeEventListener("load",s)):(re.detachEvent("onreadysta
 techange",s),e.detachEvent("onload",s))}function s(){(re.addEventListener||"load"===e.event.type||"complete"===re.readyState)&&(a(),pe.ready())}function l(e,t,n){if(void 0===n&&1===e.nodeType){var r="data-"+t.replace(He,"-$1").toLowerCase();if(n=e.getAttribute(r),"string"==typeof n){try{n="true"===n?!0:"false"===n?!1:"null"===n?null:+n+""===n?+n:_e.test(n)?pe.parseJSON(n):n}catch(i){}pe.data(e,t,n)}else n=void 0}return n}function u(e){var t;for(t in e)if(("data"!==t||!pe.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}function c(e,t,n,r){if(Ie(e)){var i,o,a=pe.expando,s=e.nodeType,l=s?pe.cache:e,u=s?e[a]:e[a]&&a;if(u&&l[u]&&(r||l[u].data)||void 0!==n||"string"!=typeof t)return u||(u=s?e[a]=ne.pop()||pe.guid++:a),l[u]||(l[u]=s?{}:{toJSON:pe.noop}),"object"!=typeof t&&"function"!=typeof t||(r?l[u]=pe.extend(l[u],t):l[u].data=pe.extend(l[u].data,t)),o=l[u],r||(o.data||(o.data={}),o=o.data),void 0!==n&&(o[pe.camelCase(t)]=n),"string"==typeof t?(i=o[t],null==i&&(i=o[pe.camelCase(t)]
 )):i=o,i}}function d(e,t,n){if(Ie(e)){var r,i,o=e.nodeType,a=o?pe.cache:e,s=o?e[pe.expando]:pe.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){pe.isArray(t)?t=t.concat(pe.map(t,pe.camelCase)):t in r?t=[t]:(t=pe.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;for(;i--;)delete r[t[i]];if(n?!u(r):!pe.isEmptyObject(r))return}(n||(delete a[s].data,u(a[s])))&&(o?pe.cleanData([e],!0):de.deleteExpando||a!=a.window?delete a[s]:a[s]=void 0)}}}function f(e,t,n,r){var i,o=1,a=20,s=r?function(){return r.cur()}:function(){return pe.css(e,t,"")},l=s(),u=n&&n[3]||(pe.cssNumber[t]?"":"px"),c=(pe.cssNumber[t]||"px"!==u&&+l)&&Me.exec(pe.css(e,t));if(c&&c[3]!==u){u=u||c[3],n=n||[],c=+l||1;do o=o||".5",c/=o,pe.style(e,t,c+u);while(o!==(o=s()/l)&&1!==o&&--a)}return n&&(c=+c||+l||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=u,r.start=c,r.end=i)),i}function p(e){var t=$e.split("|"),n=e.createDocumentFragment();if(n.createElement)for(;t.length;)n.createElement(t.pop());return n}function h(e,t){var n,r,i=0,o="u
 ndefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):void 0;if(!o)for(o=[],n=e.childNodes||e;null!=(r=n[i]);i++)!t||pe.nodeName(r,t)?o.push(r):pe.merge(o,h(r,t));return void 0===t||t&&pe.nodeName(e,t)?pe.merge([e],o):o}function m(e,t){for(var n,r=0;null!=(n=e[r]);r++)pe._data(n,"globalEval",!t||pe._data(t[r],"globalEval"))}function g(e){Be.test(e.type)&&(e.defaultChecked=e.checked)}function v(e,t,n,r,i){for(var o,a,s,l,u,c,d,f=e.length,v=p(t),y=[],b=0;f>b;b++)if(a=e[b],a||0===a)if("object"===pe.type(a))pe.merge(y,a.nodeType?[a]:a);else if(Ue.test(a)){for(l=l||v.appendChild(t.createElement("div")),u=(ze.exec(a)||["",""])[1].toLowerCase(),d=Xe[u]||Xe._default,l.innerHTML=d[1]+pe.htmlPrefilter(a)+d[2],o=d[0];o--;)l=l.lastChild;if(!de.leadingWhitespace&&We.test(a)&&y.push(t.createTextNode(We.exec(a)[0])),!de.tbody)for(a="table"!==u||Ye.test(a)?"<table>"!==d[1]||Ye.test(a)?0:l:l.firstChild,o=a&&a.childNo
 des.length;o--;)pe.nodeName(c=a.childNodes[o],"tbody")&&!c.childNodes.length&&a.removeChild(c);for(pe.merge(y,l.childNodes),l.textContent="";l.firstChild;)l.removeChild(l.firstChild);l=v.lastChild}else y.push(t.createTextNode(a));for(l&&v.removeChild(l),de.appendChecked||pe.grep(h(y,"input"),g),b=0;a=y[b++];)if(r&&pe.inArray(a,r)>-1)i&&i.push(a);else if(s=pe.contains(a.ownerDocument,a),l=h(v.appendChild(a),"script"),s&&m(l),n)for(o=0;a=l[o++];)Re.test(a.type||"")&&n.push(a);return l=null,v}function y(){return!0}function b(){return!1}function x(){try{return re.activeElement}catch(e){}}function w(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)w(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),i===!1)i=b;else if(!i)return e;return 1===o&&(a=i,i=function(e){return pe().off(e),a.apply(this,arguments)},i.guid=a.guid||(a.guid=pe.guid++)),e.each(function(){pe.event.add(
 this,t,i,r,n)})}function C(e,t){return pe.nodeName(e,"table")&&pe.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function T(e){return e.type=(null!==pe.find.attr(e,"type"))+"/"+e.type,e}function k(e){var t=it.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function E(e,t){if(1===t.nodeType&&pe.hasData(e)){var n,r,i,o=pe._data(e),a=pe._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)pe.event.add(t,n,s[n][r])}a.data&&(a.data=pe.extend({},a.data))}}function S(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!de.noCloneEvent&&t[pe.expando]){i=pe._data(t);for(r in i.events)pe.removeEvent(t,r,i.handle);t.removeAttribute(pe.expando)}"script"===n&&t.text!==e.text?(T(t).text=e.text,k(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),de.html5Clone&&e.innerHTML&&!pe.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"==
 =n&&Be.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:"input"!==n&&"textarea"!==n||(t.defaultValue=e.defaultValue)}}function N(e,t,n,r){t=oe.apply([],t);var i,o,a,s,l,u,c=0,d=e.length,f=d-1,p=t[0],m=pe.isFunction(p);if(m||d>1&&"string"==typeof p&&!de.checkClone&&rt.test(p))return e.each(function(i){var o=e.eq(i);m&&(t[0]=p.call(this,i,o.html())),N(o,t,n,r)});if(d&&(u=v(t,e[0].ownerDocument,!1,e,r),i=u.firstChild,1===u.childNodes.length&&(u=i),i||r)){for(s=pe.map(h(u,"script"),T),a=s.length;d>c;c++)o=u,c!==f&&(o=pe.clone(o,!0,!0),a&&pe.merge(s,h(o,"script"))),n.call(e[c],o,c);if(a)for(l=s[s.length-1].ownerDocument,pe.map(s,k),c=0;a>c;c++)o=s[c],Re.test(o.type||"")&&!pe._data(o,"globalEval")&&pe.contains(l,o)&&(o.src?pe._evalUrl&&pe._evalUrl(o.src):pe.globalEval((o.text||o.textContent||o.innerHTML||"").replace(ot,"")));u=i=null}return e}function A(e,t,n){for(var r,i=t?pe.filter(t,e):e
 ,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||pe.cleanData(h(r)),r.parentNode&&(n&&pe.contains(r.ownerDocument,r)&&m(h(r,"script")),r.parentNode.removeChild(r));return e}function j(e,t){var n=pe(t.createElement(e)).appendTo(t.body),r=pe.css(n[0],"display");return n.detach(),r}function L(e){var t=re,n=ut[e];return n||(n=j(e,t),"none"!==n&&n||(lt=(lt||pe("<iframe frameborder='0' width='0' height='0'/>")).appendTo(t.documentElement),t=(lt[0].contentWindow||lt[0].contentDocument).document,t.write(),t.close(),n=j(e,t),lt.detach()),ut[e]=n),n}function D(e,t){return{get:function(){return e()?void delete this.get:(this.get=t).apply(this,arguments)}}}function I(e){if(e in kt)return e;for(var t=e.charAt(0).toUpperCase()+e.slice(1),n=Tt.length;n--;)if(e=Tt[n]+t,e in kt)return e}function _(e,t){for(var n,r,i,o=[],a=0,s=e.length;s>a;a++)r=e[a],r.style&&(o[a]=pe._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&qe(r)&&(o[a]=pe._data(r,"olddisplay
 ",L(r.nodeName)))):(i=qe(r),(n&&"none"!==n||!i)&&pe._data(r,"olddisplay",i?n:pe.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}function H(e,t,n){var r=xt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function O(e,t,n,r,i){for(var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;4>o;o+=2)"margin"===n&&(a+=pe.css(e,n+Pe[o],!0,i)),r?("content"===n&&(a-=pe.css(e,"padding"+Pe[o],!0,i)),"margin"!==n&&(a-=pe.css(e,"border"+Pe[o]+"Width",!0,i))):(a+=pe.css(e,"padding"+Pe[o],!0,i),"padding"!==n&&(a+=pe.css(e,"border"+Pe[o]+"Width",!0,i)));return a}function M(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=ht(e),a=de.boxSizing&&"border-box"===pe.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=mt(e,t,o),(0>i||null==i)&&(i=e.style[t]),dt.test(i))return i;r=a&&(de.boxSizingReliable()||i===e.style[t]),i=parseFloat(i)||0}return i+O(e,t,n||(a?"border":"content"),r,o)+"px"}f
 unction P(e,t,n,r,i){return new P.prototype.init(e,t,n,r,i)}function q(){return e.setTimeout(function(){Et=void 0}),Et=pe.now()}function F(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Pe[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}function B(e,t,n){for(var r,i=(W.tweeners[t]||[]).concat(W.tweeners["*"]),o=0,a=i.length;a>o;o++)if(r=i[o].call(n,t,e))return r}function z(e,t,n){var r,i,o,a,s,l,u,c,d=this,f={},p=e.style,h=e.nodeType&&qe(e),m=pe._data(e,"fxshow");n.queue||(s=pe._queueHooks(e,"fx"),null==s.unqueued&&(s.unqueued=0,l=s.empty.fire,s.empty.fire=function(){s.unqueued||l()}),s.unqueued++,d.always(function(){d.always(function(){s.unqueued--,pe.queue(e,"fx").length||s.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],u=pe.css(e,"display"),c="none"===u?pe._data(e,"olddisplay")||L(e.nodeName):u,"inline"===c&&"none"===pe.css(e,"float")&&(de.inlineBlockNeedsLayout&&"inline"!==L(e.nodeName)?p.
 zoom=1:p.display="inline-block")),n.overflow&&(p.overflow="hidden",de.shrinkWrapBlocks()||d.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t)if(i=t[r],Nt.exec(i)){if(delete t[r],o=o||"toggle"===i,i===(h?"hide":"show")){if("show"!==i||!m||void 0===m[r])continue;h=!0}f[r]=m&&m[r]||pe.style(e,r)}else u=void 0;if(pe.isEmptyObject(f))"inline"===("none"===u?L(e.nodeName):u)&&(p.display=u);else{m?"hidden"in m&&(h=m.hidden):m=pe._data(e,"fxshow",{}),o&&(m.hidden=!h),h?pe(e).show():d.done(function(){pe(e).hide()}),d.done(function(){var t;pe._removeData(e,"fxshow");for(t in f)pe.style(e,t,f[t])});for(r in f)a=B(h?m[r]:0,r,d),r in m||(m[r]=a.start,h&&(a.end=a.start,a.start="width"===r||"height"===r?1:0))}}function R(e,t){var n,r,i,o,a;for(n in e)if(r=pe.camelCase(n),i=t[r],o=e[n],pe.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),a=pe.cssHooks[r],a&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n
 ]=i)}else t[r]=i}function W(e,t,n){var r,i,o=0,a=W.prefilters.length,s=pe.Deferred().always(function(){delete l.elem}),l=function(){if(i)return!1;for(var t=Et||q(),n=Math.max(0,u.startTime+u.duration-t),r=n/u.duration||0,o=1-r,a=0,l=u.tweens.length;l>a;a++)u.tweens[a].run(o);return s.notifyWith(e,[u,o,n]),1>o&&l?n:(s.resolveWith(e,[u]),!1)},u=s.promise({elem:e,props:pe.extend({},t),opts:pe.extend(!0,{specialEasing:{},easing:pe.easing._default},n),originalProperties:t,originalOptions:n,startTime:Et||q(),duration:n.duration,tweens:[],createTween:function(t,n){var r=pe.Tween(e,u.opts,t,n,u.opts.specialEasing[t]||u.opts.easing);return u.tweens.push(r),r},stop:function(t){var n=0,r=t?u.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)u.tweens[n].run(1);return t?(s.notifyWith(e,[u,1,0]),s.resolveWith(e,[u,t])):s.rejectWith(e,[u,t]),this}}),c=u.props;for(R(c,u.opts.specialEasing);a>o;o++)if(r=W.prefilters[o].call(u,e,c,u.opts))return pe.isFunction(r.stop)&&(pe._queueHooks(u.elem,u.opts.qu
 eue).stop=pe.proxy(r.stop,r)),r;return pe.map(c,B,u),pe.isFunction(u.opts.start)&&u.opts.start.call(e,u),pe.fx.timer(pe.extend(l,{elem:e,anim:u,queue:u.opts.queue})),u.progress(u.opts.progress).done(u.opts.done,u.opts.complete).fail(u.opts.fail).always(u.opts.always)}function $(e){return pe.attr(e,"class")||""}function X(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(je)||[];if(pe.isFunction(n))for(;r=o[i++];)"+"===r.charAt(0)?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function U(e,t,n,r){function i(s){var l;return o[s]=!0,pe.each(e[s]||[],function(e,s){var u=s(t,n,r);return"string"!=typeof u||a||o[u]?a?!(l=u):void 0:(t.dataTypes.unshift(u),i(u),!1)}),l}var o={},a=e===Kt;return i(t.dataTypes[0])||!o["*"]&&i("*")}function Y(e,t){var n,r,i=pe.ajaxSettings.flatOptions||{};for(r in t)void 0!==t[r]&&((i[r]?e:n||(n={}))[r]=t[r]);return n&&pe.extend(!0,e,n),e}function V(e,t,n){for(var r,i,o,a,s=e.contents,l=e.dataTypes
 ;"*"===l[0];)l.shift(),void 0===i&&(i=e.mimeType||t.getResponseHeader("Content-Type"));if(i)for(a in s)if(s[a]&&s[a].test(i)){l.unshift(a);break}if(l[0]in n)o=l[0];else{for(a in n){if(!l[0]||e.converters[a+" "+l[0]]){o=a;break}r||(r=a)}o=o||r}return o?(o!==l[0]&&l.unshift(o),n[o]):void 0}function G(e,t,n,r){var i,o,a,s,l,u={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)u[a.toLowerCase()]=e.converters[a];for(o=c.shift();o;)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!l&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=o,o=c.shift())if("*"===o)o=l;else if("*"!==l&&l!==o){if(a=u[l+" "+o]||u["* "+o],!a)for(i in u)if(s=i.split(" "),s[1]===o&&(a=u[l+" "+s[0]]||u["* "+s[0]])){a===!0?a=u[i]:u[i]!==!0&&(o=s[0],c.unshift(s[1]));break}if(a!==!0)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(d){return{state:"parsererror",error:a?d:"No conversion from "+l+" to "+o}}}return{state:"success",data:t}}function Z(e){return e.style&&e.style.display||pe.css(e,"display")}function J(e){if(
 !pe.contains(e.ownerDocument||re,e))return!0;for(;e&&1===e.nodeType;){if("none"===Z(e)||"hidden"===e.type)return!0;e=e.parentNode}return!1}function K(e,t,n,r){var i;if(pe.isArray(t))pe.each(t,function(t,i){n||rn.test(e)?r(e,i):K(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==pe.type(t))r(e,t);else for(i in t)K(e+"["+i+"]",t[i],n,r)}function Q(){try{return new e.XMLHttpRequest}catch(t){}}function ee(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}function te(e){return pe.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}var ne=[],re=e.document,ie=ne.slice,oe=ne.concat,ae=ne.push,se=ne.indexOf,le={},ue=le.toString,ce=le.hasOwnProperty,de={},fe="1.12.4",pe=function(e,t){return new pe.fn.init(e,t)},he=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,me=/^-ms-/,ge=/-([\da-z])/gi,ve=function(e,t){return t.toUpperCase()};pe.fn=pe.prototype={jquery:fe,constructor:pe,selector:"",length:0,toArray:function(){return ie.call(this)},get:function(e){re
 turn null!=e?0>e?this[e+this.length]:this[e]:ie.call(this)},pushStack:function(e){var t=pe.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e){return pe.each(this,e)},map:function(e){return this.pushStack(pe.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(ie.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:ae,sort:ne.sort,splice:ne.splice},pe.extend=pe.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,l=arguments.length,u=!1;for("boolean"==typeof a&&(u=a,a=arguments[s]||{},s++),"object"==typeof a||pe.isFunction(a)||(a={}),s===l&&(a=this,s--);l>s;s++)if(null!=(i=arguments[s]))for(r in i)e=a[r],n=i[r],a!==n&&(u&&n&&(pe.isPlainObject(n)||(t=pe.isArray(n)))?(t?(t=!1,o=e&&pe.isArray(e)?e:[]):o=
 e&&pe.isPlainObject(e)?e:{},a[r]=pe.extend(u,o,n)):void 0!==n&&(a[r]=n));return a},pe.extend({expando:"jQuery"+(fe+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isFunction:function(e){return"function"===pe.type(e)},isArray:Array.isArray||function(e){return"array"===pe.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){var t=e&&e.toString();return!pe.isArray(e)&&t-parseFloat(t)+1>=0},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},isPlainObject:function(e){var t;if(!e||"object"!==pe.type(e)||e.nodeType||pe.isWindow(e))return!1;try{if(e.constructor&&!ce.call(e,"constructor")&&!ce.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}if(!de.ownFirst)for(t in e)return ce.call(e,t);for(t in e);return void 0===t||ce.call(e,t)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?le[ue.call(e)]||"object":typeof e},globalEval:function(t){t&&pe.trim(t)
 &&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(me,"ms-").replace(ge,ve)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t){var r,i=0;if(n(e))for(r=e.length;r>i&&t.call(e[i],i,e[i])!==!1;i++);else for(i in e)if(t.call(e[i],i,e[i])===!1)break;return e},trim:function(e){return null==e?"":(e+"").replace(he,"")},makeArray:function(e,t){var r=t||[];return null!=e&&(n(Object(e))?pe.merge(r,"string"==typeof e?[e]:e):ae.call(r,e)),r},inArray:function(e,t,n){var r;if(t){if(se)return se.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;n>r;)e[i++]=t[r++];if(n!==n)for(;void 0!==t[r];)e[i++]=t[r++];return e.length=i,e},grep:function(e,t,n){for(var r,i=[],o=0,a=e.length,s=!n;a>o;o++)r=!t(e[o],o),r!==s&&i.push(e[o]);return i},map:function(e,t,r){var i,o,a=0,s=[];if(n(e))for(i=e.length;i>a;a++)o=
 t(e[a],a,r),null!=o&&s.push(o);else for(a in e)o=t(e[a],a,r),null!=o&&s.push(o);return oe.apply([],s)},guid:1,proxy:function(e,t){var n,r,i;return"string"==typeof t&&(i=e[t],t=e,e=i),pe.isFunction(e)?(n=ie.call(arguments,2),r=function(){return e.apply(t||this,n.concat(ie.call(arguments)))},r.guid=e.guid=e.guid||pe.guid++,r):void 0},now:function(){return+new Date},support:de}),"function"==typeof Symbol&&(pe.fn[Symbol.iterator]=ne[Symbol.iterator]),pe.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){le["[object "+t+"]"]=t.toLowerCase()});var ye=function(e){function t(e,t,n,r){var i,o,a,s,l,u,d,p,h=t&&t.ownerDocument,m=t?t.nodeType:9;if(n=n||[],"string"!=typeof e||!e||1!==m&&9!==m&&11!==m)return n;if(!r&&((t?t.ownerDocument||t:B)!==I&&D(t),t=t||I,H)){if(11!==m&&(u=ve.exec(e)))if(i=u[1]){if(9===m){if(!(a=t.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(h&&(a=h.getElementById(i))&&q(t,a)&&a.id===i)return n.push(a),n}
 else{if(u[2])return K.apply(n,t.getElementsByTagName(e)),n;if((i=u[3])&&w.getElementsByClassName&&t.getElementsByClassName)return K.apply(n,t.getElementsByClassName(i)),n}if(w.qsa&&!X[e+" "]&&(!O||!O.test(e))){if(1!==m)h=t,p=e;else if("object"!==t.nodeName.toLowerCase()){for((s=t.getAttribute("id"))?s=s.replace(be,"\\$&"):t.setAttribute("id",s=F),d=E(e),o=d.length,l=fe.test(s)?"#"+s:"[id='"+s+"']";o--;)d[o]=l+" "+f(d[o]);p=d.join(","),h=ye.test(e)&&c(t.parentNode)||t}if(p)try{return K.apply(n,h.querySelectorAll(p)),n}catch(g){}finally{s===F&&t.removeAttribute("id")}}}return N(e.replace(se,"$1"),t,n,r)}function n(){function e(n,r){return t.push(n+" ")>C.cacheLength&&delete e[t.shift()],e[n+" "]=r}var t=[];return e}function r(e){return e[F]=!0,e}function i(e){var t=I.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function o(e,t){for(var n=e.split("|"),r=n.length;r--;)C.attrHandle[n[r]]=t}function a(e,t){var n=t&&e,r=n&
 &1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||Y)-(~e.sourceIndex||Y);if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function s(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function l(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function u(e){return r(function(t){return t=+t,r(function(n,r){for(var i,o=e([],n.length,t),a=o.length;a--;)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function c(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function d(){}function f(e){for(var t=0,n=e.length,r="";n>t;t++)r+=e[t].value;return r}function p(e,t,n){var r=t.dir,i=n&&"parentNode"===r,o=R++;return t.first?function(t,n,o){for(;t=t[r];)if(1===t.nodeType||i)return e(t,n,o)}:function(t,n,a){var s,l,u,c=[z,o];if(a){for(;t=t[r];)if((1===t.nodeType||i)&&e(t,n,a))return!0}else for(;t=t[r];)if(1===t.nodeType||i){if(u=t[F]||(t[F]={}),l=u[t.uniqueID]||(u[t.uniqueID]={}),(s=l[r])&&s[0
 ]===z&&s[1]===o)return c[2]=s[2];if(l[r]=c,c[2]=e(t,n,a))return!0}}}function h(e){return e.length>1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function m(e,n,r){for(var i=0,o=n.length;o>i;i++)t(e,n[i],r);return r}function g(e,t,n,r,i){for(var o,a=[],s=0,l=e.length,u=null!=t;l>s;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),u&&t.push(s)));return a}function v(e,t,n,i,o,a){return i&&!i[F]&&(i=v(i)),o&&!o[F]&&(o=v(o,a)),r(function(r,a,s,l){var u,c,d,f=[],p=[],h=a.length,v=r||m(t||"*",s.nodeType?[s]:s,[]),y=!e||!r&&t?v:g(v,f,e,s,l),b=n?o||(r?e:h||i)?[]:a:y;if(n&&n(y,b,s,l),i)for(u=g(b,p),i(u,[],s,l),c=u.length;c--;)(d=u[c])&&(b[p[c]]=!(y[p[c]]=d));if(r){if(o||e){if(o){for(u=[],c=b.length;c--;)(d=b[c])&&u.push(y[c]=d);o(null,b=[],u,l)}for(c=b.length;c--;)(d=b[c])&&(u=o?ee(r,d):f[c])>-1&&(r[u]=!(a[u]=d))}}else b=g(b===a?b.splice(h,b.length):b),o?o(null,a,b,l):K.apply(a,b)})}function y(e){for(var t,n,r,i=e.length,o=C.relative[e[0].type],a=o||C.relative[" "],s=
 o?1:0,l=p(function(e){return e===t},a,!0),u=p(function(e){return ee(t,e)>-1},a,!0),c=[function(e,n,r){var i=!o&&(r||n!==A)||((t=n).nodeType?l(e,n,r):u(e,n,r));return t=null,i}];i>s;s++)if(n=C.relative[e[s].type])c=[p(h(c),n)];else{if(n=C.filter[e[s].type].apply(null,e[s].matches),n[F]){for(r=++s;i>r&&!C.relative[e[r].type];r++);return v(s>1&&h(c),s>1&&f(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(se,"$1"),n,r>s&&y(e.slice(s,r)),i>r&&y(e=e.slice(r)),i>r&&f(e))}c.push(n)}return h(c)}function b(e,n){var i=n.length>0,o=e.length>0,a=function(r,a,s,l,u){var c,d,f,p=0,h="0",m=r&&[],v=[],y=A,b=r||o&&C.find.TAG("*",u),x=z+=null==y?1:Math.random()||.1,w=b.length;for(u&&(A=a===I||a||u);h!==w&&null!=(c=b[h]);h++){if(o&&c){for(d=0,a||c.ownerDocument===I||(D(c),s=!H);f=e[d++];)if(f(c,a||I,s)){l.push(c);break}u&&(z=x)}i&&((c=!f&&c)&&p--,r&&m.push(c))}if(p+=h,i&&h!==p){for(d=0;f=n[d++];)f(m,v,a,s);if(r){if(p>0)for(;h--;)m[h]||v[h]||(v[h]=Z.call(l));v=g(v)}K.apply(l,v),u&&!r&&v.
 length>0&&p+n.length>1&&t.uniqueSort(l)}return u&&(z=x,A=y),m};return i?r(a):a}var x,w,C,T,k,E,S,N,A,j,L,D,I,_,H,O,M,P,q,F="sizzle"+1*new Date,B=e.document,z=0,R=0,W=n(),$=n(),X=n(),U=function(e,t){return e===t&&(L=!0),0},Y=1<<31,V={}.hasOwnProperty,G=[],Z=G.pop,J=G.push,K=G.push,Q=G.slice,ee=function(e,t){for(var n=0,r=e.length;r>n;n++)if(e[n]===t)return n;return-1},te="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",ne="[\\x20\\t\\r\\n\\f]",re="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",ie="\\["+ne+"*("+re+")(?:"+ne+"*([*^$|!~]?=)"+ne+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+re+"))|)"+ne+"*\\]",oe=":("+re+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+ie+")*)|.*)\\)|)",ae=new RegExp(ne+"+","g"),se=new RegExp("^"+ne+"+|((?:^|[^\\\\])(?:\\\\.)*)"+ne+"+$","g"),le=new RegExp("^"+ne+"*,"+ne+"*"),ue=new RegExp("^"+ne+"*([>+~]|"+ne+")"+ne+"*"),ce=new RegExp("="+ne
 +"*([^\\]'\"]*?)"+ne+"*\\]","g"),de=new RegExp(oe),fe=new RegExp("^"+re+"$"),pe={ID:new RegExp("^#("+re+")"),CLASS:new RegExp("^\\.("+re+")"),TAG:new RegExp("^("+re+"|[*])"),ATTR:new RegExp("^"+ie),PSEUDO:new RegExp("^"+oe),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ne+"*(even|odd|(([+-]|)(\\d*)n|)"+ne+"*(?:([+-]|)"+ne+"*(\\d+)|))"+ne+"*\\)|)","i"),bool:new RegExp("^(?:"+te+")$","i"),needsContext:new RegExp("^"+ne+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ne+"*((?:-\\d)?\\d*)"+ne+"*\\)|)(?=[^-]|$)","i")},he=/^(?:input|select|textarea|button)$/i,me=/^h\d$/i,ge=/^[^{]+\{\s*\[native \w/,ve=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ye=/[+~]/,be=/'|\\/g,xe=new RegExp("\\\\([\\da-f]{1,6}"+ne+"?|("+ne+")|.)","ig"),we=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},Ce=function(){D()};try{K.apply(G=Q.call(B.childNodes),B.childNodes),G[B.childNodes.length].nodeType}catch(Te){K
 ={apply:G.length?function(e,t){J.apply(e,Q.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}w=t.support={},k=t.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},D=t.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:B;return r!==I&&9===r.nodeType&&r.documentElement?(I=r,_=I.documentElement,H=!k(I),(n=I.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",Ce,!1):n.attachEvent&&n.attachEvent("onunload",Ce)),w.attributes=i(function(e){return e.className="i",!e.getAttribute("className")}),w.getElementsByTagName=i(function(e){return e.appendChild(I.createComment("")),!e.getElementsByTagName("*").length}),w.getElementsByClassName=ge.test(I.getElementsByClassName),w.getById=i(function(e){return _.appendChild(e).id=F,!I.getElementsByName||!I.getElementsByName(F).length}),w.getById?(C.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&H){var n=t.getElementById(e);return n?[n]:[]}},
 C.filter.ID=function(e){var t=e.replace(xe,we);return function(e){return e.getAttribute("id")===t}}):(delete C.find.ID,C.filter.ID=function(e){var t=e.replace(xe,we);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}}),C.find.TAG=w.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):w.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},C.find.CLASS=w.getElementsByClassName&&function(e,t){return"undefined"!=typeof t.getElementsByClassName&&H?t.getElementsByClassName(e):void 0},M=[],O=[],(w.qsa=ge.test(I.querySelectorAll))&&(i(function(e){_.appendChild(e).innerHTML="<a id='"+F+"'></a><select id='"+F+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&O.push("[*^$]="+ne+"*(?:''|\"\")"),e.querySe
 lectorAll("[selected]").length||O.push("\\["+ne+"*(?:value|"+te+")"),e.querySelectorAll("[id~="+F+"-]").length||O.push("~="),e.querySelectorAll(":checked").length||O.push(":checked"),e.querySelectorAll("a#"+F+"+*").length||O.push(".#.+[+~]")}),i(function(e){var t=I.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&O.push("name"+ne+"*[*^$|!~]?="),e.querySelectorAll(":enabled").length||O.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),O.push(",.*:")})),(w.matchesSelector=ge.test(P=_.matches||_.webkitMatchesSelector||_.mozMatchesSelector||_.oMatchesSelector||_.msMatchesSelector))&&i(function(e){w.disconnectedMatch=P.call(e,"div"),P.call(e,"[s!='']:x"),M.push("!=",oe)}),O=O.length&&new RegExp(O.join("|")),M=M.length&&new RegExp(M.join("|")),t=ge.test(_.compareDocumentPosition),q=t||ge.test(_.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1
 !==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},U=t?function(e,t){if(e===t)return L=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n?n:(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&n||!w.sortDetached&&t.compareDocumentPosition(e)===n?e===I||e.ownerDocument===B&&q(B,e)?-1:t===I||t.ownerDocument===B&&q(B,t)?1:j?ee(j,e)-ee(j,t):0:4&n?-1:1)}:function(e,t){if(e===t)return L=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,s=[e],l=[t];if(!i||!o)return e===I?-1:t===I?1:i?-1:o?1:j?ee(j,e)-ee(j,t):0;if(i===o)return a(e,t);for(n=e;n=n.parentNode;)s.unshift(n);for(n=t;n=n.parentNode;)l.unshift(n);for(;s[r]===l[r];)r++;return r?a(s[r],l[r]):s[r]===B?-1:l[r]===B?1:0},I):I},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==I&&D(e),n=n.replace(ce,"='$1']"),w.matches
 Selector&&H&&!X[n+" "]&&(!M||!M.test(n))&&(!O||!O.test(n)))try{var r=P.call(e,n);if(r||w.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(i){}return t(n,I,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==I&&D(e),q(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==I&&D(e);var n=C.attrHandle[t.toLowerCase()],r=n&&V.call(C.attrHandle,t.toLowerCase())?n(e,t,!H):void 0;return void 0!==r?r:w.attributes||!H?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},t.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},t.uniqueSort=function(e){var t,n=[],r=0,i=0;if(L=!w.detectDuplicates,j=!w.sortStable&&e.slice(0),e.sort(U),L){for(;t=e[i++];)t===e[i]&&(r=n.push(i));for(;r--;)e.splice(n[r],1)}return j=null,e},T=t.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=T(e)}else if(3===i||4=
 ==i)return e.nodeValue}else for(;t=e[r++];)n+=T(t);return n},C=t.selectors={cacheLength:50,createPseudo:r,match:pe,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(xe,we),e[3]=(e[3]||e[4]||e[5]||"").replace(xe,we),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||t.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&t.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return pe.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&de.test(n)&&(t=E(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(xe,we).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCa
 se()===t}},CLASS:function(e){var t=W[e+" "];return t||(t=new RegExp("(^|"+ne+")"+e+"("+ne+"|$)"))&&W(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,n,r){return function(i){var o=t.attr(i,e);return null==o?"!="===n:n?(o+="","="===n?o===r:"!="===n?o!==r:"^="===n?r&&0===o.indexOf(r):"*="===n?r&&o.indexOf(r)>-1:"$="===n?r&&o.slice(-r.length)===r:"~="===n?(" "+o.replace(ae," ")+" ").indexOf(r)>-1:"|="===n?o===r||o.slice(0,r.length+1)===r+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,d,f,p,h,m=o!==a?"nextSibling":"previousSibling",g=t.parentNode,v=s&&t.nodeName.toLowerCase(),y=!l&&!s,b=!1;if(g){if(o){for(;m;){for(f=t;f=f[m];)if(s?f.nodeName.toLowerCase()===v:1===f.nodeType)return!1;h=m="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?g.firstChild:g.l
 astChild],a&&y){for(f=g,d=f[F]||(f[F]={}),c=d[f.uniqueID]||(d[f.uniqueID]={}),u=c[e]||[],p=u[0]===z&&u[1],
+b=p&&u[2],f=p&&g.childNodes[p];f=++p&&f&&f[m]||(b=p=0)||h.pop();)if(1===f.nodeType&&++b&&f===t){c[e]=[z,p,b];break}}else if(y&&(f=t,d=f[F]||(f[F]={}),c=d[f.uniqueID]||(d[f.uniqueID]={}),u=c[e]||[],p=u[0]===z&&u[1],b=p),b===!1)for(;(f=++p&&f&&f[m]||(b=p=0)||h.pop())&&((s?f.nodeName.toLowerCase()!==v:1!==f.nodeType)||!++b||(y&&(d=f[F]||(f[F]={}),c=d[f.uniqueID]||(d[f.uniqueID]={}),c[e]=[z,b]),f!==t)););return b-=i,b===r||b%r===0&&b/r>=0}}},PSEUDO:function(e,n){var i,o=C.pseudos[e]||C.setFilters[e.toLowerCase()]||t.error("unsupported pseudo: "+e);return o[F]?o(n):o.length>1?(i=[e,e,"",n],C.setFilters.hasOwnProperty(e.toLowerCase())?r(function(e,t){for(var r,i=o(e,n),a=i.length;a--;)r=ee(e,i[a]),e[r]=!(t[r]=i[a])}):function(e){return o(e,0,i)}):o}},pseudos:{not:r(function(e){var t=[],n=[],i=S(e.replace(se,"$1"));return i[F]?r(function(e,t,n,r){for(var o,a=i(e,null,r,[]),s=e.length;s--;)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,r,o){return t[0]=e,i(t,null,o,n),t[0]=null,!n.pop()}}),has:r(f
 unction(e){return function(n){return t(e,n).length>0}}),contains:r(function(e){return e=e.replace(xe,we),function(t){return(t.textContent||t.innerText||T(t)).indexOf(e)>-1}}),lang:r(function(e){return fe.test(e||"")||t.error("unsupported lang: "+e),e=e.replace(xe,we).toLowerCase(),function(t){var n;do if(n=H?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===_},focus:function(e){return e===I.activeElement&&(!I.hasFocus||I.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e)
 {for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!C.pseudos.empty(e)},header:function(e){return me.test(e.nodeName)},input:function(e){return he.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:u(function(){return[0]}),last:u(function(e,t){return[t-1]}),eq:u(function(e,t,n){return[0>n?n+t:n]}),even:u(function(e,t){for(var n=0;t>n;n+=2)e.push(n);return e}),odd:u(function(e,t){for(var n=1;t>n;n+=2)e.push(n);return e}),lt:u(function(e,t,n){for(var r=0>n?n+t:n;--r>=0;)e.push(r);return e}),gt:u(function(e,t,n){for(var r=0>n?n+t:n;++r<t;)e.push(r);return e})}},C.pseudos.nth=C.pseudos.eq;for(x in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})C.pseudos[x]=s(x);for(x in{submit:!0,reset:!0})C.pseudos[x]=l(x);return d.proto
 type=C.filters=C.pseudos,C.setFilters=new d,E=t.tokenize=function(e,n){var r,i,o,a,s,l,u,c=$[e+" "];if(c)return n?0:c.slice(0);for(s=e,l=[],u=C.preFilter;s;){r&&!(i=le.exec(s))||(i&&(s=s.slice(i[0].length)||s),l.push(o=[])),r=!1,(i=ue.exec(s))&&(r=i.shift(),o.push({value:r,type:i[0].replace(se," ")}),s=s.slice(r.length));for(a in C.filter)!(i=pe[a].exec(s))||u[a]&&!(i=u[a](i))||(r=i.shift(),o.push({value:r,type:a,matches:i}),s=s.slice(r.length));if(!r)break}return n?s.length:s?t.error(e):$(e,l).slice(0)},S=t.compile=function(e,t){var n,r=[],i=[],o=X[e+" "];if(!o){for(t||(t=E(e)),n=t.length;n--;)o=y(t[n]),o[F]?r.push(o):i.push(o);o=X(e,b(i,r)),o.selector=e}return o},N=t.select=function(e,t,n,r){var i,o,a,s,l,u="function"==typeof e&&e,d=!r&&E(e=u.selector||e);if(n=n||[],1===d.length){if(o=d[0]=d[0].slice(0),o.length>2&&"ID"===(a=o[0]).type&&w.getById&&9===t.nodeType&&H&&C.relative[o[1].type]){if(t=(C.find.ID(a.matches[0].replace(xe,we),t)||[])[0],!t)return n;u&&(t=t.parentNode),e=e.sl
 ice(o.shift().value.length)}for(i=pe.needsContext.test(e)?0:o.length;i--&&(a=o[i],!C.relative[s=a.type]);)if((l=C.find[s])&&(r=l(a.matches[0].replace(xe,we),ye.test(o[0].type)&&c(t.parentNode)||t))){if(o.splice(i,1),e=r.length&&f(o),!e)return K.apply(n,r),n;break}}return(u||S(e,d))(r,t,!H,n,!t||ye.test(e)&&c(t.parentNode)||t),n},w.sortStable=F.split("").sort(U).join("")===F,w.detectDuplicates=!!L,D(),w.sortDetached=i(function(e){return 1&e.compareDocumentPosition(I.createElement("div"))}),i(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||o("type|href|height|width",function(e,t,n){return n?void 0:e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),w.attributes&&i(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||o("value",function(e,t,n){return n||"input"!==e.nodeName.toLowerCase()?void 0:e.defaultValue}),i(function(e){return null==e.getAttribute("disabled")})||o(te,func
 tion(e,t,n){var r;return n?void 0:e[t]===!0?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),t}(e);pe.find=ye,pe.expr=ye.selectors,pe.expr[":"]=pe.expr.pseudos,pe.uniqueSort=pe.unique=ye.uniqueSort,pe.text=ye.getText,pe.isXMLDoc=ye.isXML,pe.contains=ye.contains;var be=function(e,t,n){for(var r=[],i=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(i&&pe(e).is(n))break;r.push(e)}return r},xe=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},we=pe.expr.match.needsContext,Ce=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,Te=/^.[^:#\[\.,]*$/;pe.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?pe.find.matchesSelector(r,e)?[r]:[]:pe.find.matches(e,pe.grep(t,function(e){return 1===e.nodeType}))},pe.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(pe(e).filter(function(){for(t=0;i>t;t++)if(pe.contains(r[t],this))return!0}));for(t=0;i>t;t++)pe.fin
 d(e,r[t],n);return n=this.pushStack(i>1?pe.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},filter:function(e){return this.pushStack(r(this,e||[],!1))},not:function(e){return this.pushStack(r(this,e||[],!0))},is:function(e){return!!r(this,"string"==typeof e&&we.test(e)?pe(e):e||[],!1).length}});var ke,Ee=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,Se=pe.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||ke,"string"==typeof e){if(r="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:Ee.exec(e),!r||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof pe?t[0]:t,pe.merge(this,pe.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:re,!0)),Ce.test(r[1])&&pe.isPlainObject(t))for(r in t)pe.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}if(i=re.getElementById(r[2]),i&&i.parentNode){if(i.id!==r[2])return ke.find(e);this.length=1,this[0]=i}return this.context=re,this.selector=e,this}return e.nodeType?
 (this.context=this[0]=e,this.length=1,this):pe.isFunction(e)?"undefined"!=typeof n.ready?n.ready(e):e(pe):(void 0!==e.selector&&(this.selector=e.selector,this.context=e.context),pe.makeArray(e,this))};Se.prototype=pe.fn,ke=pe(re);var Ne=/^(?:parents|prev(?:Until|All))/,Ae={children:!0,contents:!0,next:!0,prev:!0};pe.fn.extend({has:function(e){var t,n=pe(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(pe.contains(this,n[t]))return!0})},closest:function(e,t){for(var n,r=0,i=this.length,o=[],a=we.test(e)||"string"!=typeof e?pe(e,t||this.context):0;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?a.index(n)>-1:1===n.nodeType&&pe.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?pe.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?pe.inArray(this[0],pe(e)):pe.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(pe.uniqueSort(pe.merg
 e(this.get(),pe(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),pe.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return be(e,"parentNode")},parentsUntil:function(e,t,n){return be(e,"parentNode",n)},next:function(e){return i(e,"nextSibling")},prev:function(e){return i(e,"previousSibling")},nextAll:function(e){return be(e,"nextSibling")},prevAll:function(e){return be(e,"previousSibling")},nextUntil:function(e,t,n){return be(e,"nextSibling",n)},prevUntil:function(e,t,n){return be(e,"previousSibling",n)},siblings:function(e){return xe((e.parentNode||{}).firstChild,e)},children:function(e){return xe(e.firstChild)},contents:function(e){return pe.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:pe.merge([],e.childNodes)}},function(e,t){pe.fn[e]=function(n,r){var i=pe.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=pe.filter(r,i)),this.length>1&&(
 Ae[e]||(i=pe.uniqueSort(i)),Ne.test(e)&&(i=i.reverse())),this.pushStack(i)}});var je=/\S+/g;pe.Callbacks=function(e){e="string"==typeof e?o(e):pe.extend({},e);var t,n,r,i,a=[],s=[],l=-1,u=function(){for(i=e.once,r=t=!0;s.length;l=-1)for(n=s.shift();++l<a.length;)a[l].apply(n[0],n[1])===!1&&e.stopOnFalse&&(l=a.length,n=!1);e.memory||(n=!1),t=!1,i&&(a=n?[]:"")},c={add:function(){return a&&(n&&!t&&(l=a.length-1,s.push(n)),function r(t){pe.each(t,function(t,n){pe.isFunction(n)?e.unique&&c.has(n)||a.push(n):n&&n.length&&"string"!==pe.type(n)&&r(n)})}(arguments),n&&!t&&u()),this},remove:function(){return pe.each(arguments,function(e,t){for(var n;(n=pe.inArray(t,a,n))>-1;)a.splice(n,1),l>=n&&l--}),this},has:function(e){return e?pe.inArray(e,a)>-1:a.length>0},empty:function(){return a&&(a=[]),this},disable:function(){return i=s=[],a=n="",this},disabled:function(){return!a},lock:function(){return i=!0,n||c.disable(),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=n||[]
 ,n=[e,n.slice?n.slice():n],s.push(n),t||u()),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},pe.extend({Deferred:function(e){var t=[["resolve","done",pe.Callbacks("once memory"),"resolved"],["reject","fail",pe.Callbacks("once memory"),"rejected"],["notify","progress",pe.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return pe.Deferred(function(n){pe.each(t,function(t,o){var a=pe.isFunction(e[t])&&e[t];i[o[1]](function(){var e=a&&a.apply(this,arguments);e&&pe.isFunction(e.promise)?e.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[o[0]+"With"](this===r?n.promise():this,a?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?pe.extend(e,r):r}},i={};return r.pipe=r.then,pe.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=
 function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t,n,r,i=0,o=ie.call(arguments),a=o.length,s=1!==a||e&&pe.isFunction(e.promise)?a:0,l=1===s?e:pe.Deferred(),u=function(e,n,r){return function(i){n[e]=this,r[e]=arguments.length>1?ie.call(arguments):i,r===t?l.notifyWith(n,r):--s||l.resolveWith(n,r)}};if(a>1)for(t=new Array(a),n=new Array(a),r=new Array(a);a>i;i++)o[i]&&pe.isFunction(o[i].promise)?o[i].promise().progress(u(i,n,t)).done(u(i,r,o)).fail(l.reject):--s;return s||l.resolveWith(r,o),l.promise()}});var Le;pe.fn.ready=function(e){return pe.ready.promise().done(e),this},pe.extend({isReady:!1,readyWait:1,holdReady:function(e){e?pe.readyWait++:pe.ready(!0)},ready:function(e){(e===!0?--pe.readyWait:pe.isReady)||(pe.isReady=!0,e!==!0&&--pe.readyWait>0||(Le.resolveWith(re,[pe]),pe.fn.triggerHandler&&(pe(re).triggerHandler("ready"),pe(re).off("ready"))))}}),pe.ready.promise=function(t){if(!L
 e)if(Le=pe.Deferred(),"complete"===re.readyState||"loading"!==re.readyState&&!re.documentElement.doScroll)e.setTimeout(pe.ready);else if(re.addEventListener)re.addEventListener("DOMContentLoaded",s),e.addEventListener("load",s);else{re.attachEvent("onreadystatechange",s),e.attachEvent("onload",s);var n=!1;try{n=null==e.frameElement&&re.documentElement}catch(r){}n&&n.doScroll&&!function i(){if(!pe.isReady){try{n.doScroll("left")}catch(t){return e.setTimeout(i,50)}a(),pe.ready()}}()}return Le.promise(t)},pe.ready.promise();var De;for(De in pe(de))break;de.ownFirst="0"===De,de.inlineBlockNeedsLayout=!1,pe(function(){var e,t,n,r;n=re.getElementsByTagName("body")[0],n&&n.style&&(t=re.createElement("div"),r=re.createElement("div"),r.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",n.appendChild(r).appendChild(t),"undefined"!=typeof t.style.zoom&&(t.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",de.inlineBlockNeedsLayout=e=3===t.
 offsetWidth,e&&(n.style.zoom=1)),n.removeChild(r))}),function(){var e=re.createElement("div");de.deleteExpando=!0;try{delete e.test}catch(t){de.deleteExpando=!1}e=null}();var Ie=function(e){var t=pe.noData[(e.nodeName+" ").toLowerCase()],n=+e.nodeType||1;return 1!==n&&9!==n?!1:!t||t!==!0&&e.getAttribute("classid")===t},_e=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,He=/([A-Z])/g;pe.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?pe.cache[e[pe.expando]]:e[pe.expando],!!e&&!u(e)},data:function(e,t,n){return c(e,t,n)},removeData:function(e,t){return d(e,t)},_data:function(e,t,n){return c(e,t,n,!0)},_removeData:function(e,t){return d(e,t,!0)}}),pe.fn.extend({data:function(e,t){var n,r,i,o=this[0],a=o&&o.attributes;if(void 0===e){if(this.length&&(i=pe.data(o),1===o.nodeType&&!pe._data(o,"parsedAttrs"))){for(n=a.length;n--;)a[n]&&(r=a[n].name,0===r.indexOf("data-")&&(r=pe.camelCase(r.slice(5)),l(o,r,i[r]
 )));pe._data(o,"parsedAttrs",!0)}return i}return"object"==typeof e?this.each(function(){pe.data(this,e)}):arguments.length>1?this.each(function(){pe.data(this,e,t)}):o?l(o,e,pe.data(o,e)):void 0},removeData:function(e){return this.each(function(){pe.removeData(this,e)})}}),pe.extend({queue:function(e,t,n){var r;return e?(t=(t||"fx")+"queue",r=pe._data(e,t),n&&(!r||pe.isArray(n)?r=pe._data(e,t,pe.makeArray(n)):r.push(n)),r||[]):void 0},dequeue:function(e,t){t=t||"fx";var n=pe.queue(e,t),r=n.length,i=n.shift(),o=pe._queueHooks(e,t),a=function(){pe.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return pe._data(e,n)||pe._data(e,n,{empty:pe.Callbacks("once memory").add(function(){pe._removeData(e,t+"queue"),pe._removeData(e,n)})})}}),pe.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length<n?pe.queue(this[
 0],e):void 0===t?this:this.each(function(){var n=pe.queue(this,e,t);pe._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&pe.dequeue(this,e)})},dequeue:function(e){return this.each(function(){pe.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=pe.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};for("string"!=typeof e&&(t=e,e=void 0),e=e||"fx";a--;)n=pe._data(o[a],e+"queueHooks"),n&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}}),function(){var e;de.shrinkWrapBlocks=function(){if(null!=e)return e;e=!1;var t,n,r;return n=re.getElementsByTagName("body")[0],n&&n.style?(t=re.createElement("div"),r=re.createElement("div"),r.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",n.appendChild(r).appendChild(t),"undefined"!=typeof t.style.zoom&&(t.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padd
 ing:1px;width:1px;zoom:1",t.appendChild(re.createElement("div")).style.width="5px",e=3!==t.offsetWidth),n.removeChild(r),e):void 0}}();var Oe=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,Me=new RegExp("^(?:([+-])=|)("+Oe+")([a-z%]*)$","i"),Pe=["Top","Right","Bottom","Left"],qe=function(e,t){return e=t||e,"none"===pe.css(e,"display")||!pe.contains(e.ownerDocument,e)},Fe=function(e,t,n,r,i,o,a){var s=0,l=e.length,u=null==n;if("object"===pe.type(n)){i=!0;for(s in n)Fe(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,pe.isFunction(r)||(a=!0),u&&(a?(t.call(e,r),t=null):(u=t,t=function(e,t,n){return u.call(pe(e),n)})),t))for(;l>s;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:u?t.call(e):l?t(e[0],n):o},Be=/^(?:checkbox|radio)$/i,ze=/<([\w:-]+)/,Re=/^$|\/(?:java|ecma)script/i,We=/^\s+/,$e="abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video";!function(){var
  e=re.createElement("div"),t=re.createDocumentFragment(),n=re.createElement("input");e.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",de.leadingWhitespace=3===e.firstChild.nodeType,de.tbody=!e.getElementsByTagName("tbody").length,de.htmlSerialize=!!e.getElementsByTagName("link").length,de.html5Clone="<:nav></:nav>"!==re.createElement("nav").cloneNode(!0).outerHTML,n.type="checkbox",n.checked=!0,t.appendChild(n),de.appendChecked=n.checked,e.innerHTML="<textarea>x</textarea>",de.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue,t.appendChild(e),n=re.createElement("input"),n.setAttribute("type","radio"),n.setAttribute("checked","checked"),n.setAttribute("name","t"),e.appendChild(n),de.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,de.noCloneEvent=!!e.addEventListener,e[pe.expando]=1,de.attributes=!e.getAttribute(pe.expando)}();var Xe={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<m
 ap>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:de.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]};Xe.optgroup=Xe.option,Xe.tbody=Xe.tfoot=Xe.colgroup=Xe.caption=Xe.thead,Xe.th=Xe.td;var Ue=/<|&#?\w+;/,Ye=/<tbody/i;!function(){var t,n,r=re.createElement("div");for(t in{submit:!0,change:!0,focusin:!0})n="on"+t,(de[t]=n in e)||(r.setAttribute(n,"t"),de[t]=r.attributes[n].expando===!1);r=null}();var Ve=/^(?:input|select|textarea)$/i,Ge=/^key/,Ze=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Je=/^(?:focusinfocus|focusoutblur)$/,Ke=/^([^.]*)(?:\.(.+)|)/;pe.event={global:{},add:function(e,t,n,r,i){var o,a,s,l,u,c,d,f,p,h,m,g=pe._data(e);if(g){for(n.handler&&(l=n,n=l.handler,i=l.selector),n.guid||(n.guid=pe.guid++),(a=g.events)||(a=g.events={}),(c=g.handle)||(c=g.handle=function(e){return"un
 defined"==typeof pe||e&&pe.event.triggered===e.type?void 0:pe.event.dispatch.apply(c.elem,arguments)},c.elem=e),t=(t||"").match(je)||[""],s=t.length;s--;)o=Ke.exec(t[s])||[],p=m=o[1],h=(o[2]||"").split(".").sort(),p&&(u=pe.event.special[p]||{},p=(i?u.delegateType:u.bindType)||p,u=pe.event.special[p]||{},d=pe.extend({type:p,origType:m,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&pe.expr.match.needsContext.test(i),namespace:h.join(".")},l),(f=a[p])||(f=a[p]=[],f.delegateCount=0,u.setup&&u.setup.call(e,r,h,c)!==!1||(e.addEventListener?e.addEventListener(p,c,!1):e.attachEvent&&e.attachEvent("on"+p,c))),u.add&&(u.add.call(e,d),d.handler.guid||(d.handler.guid=n.guid)),i?f.splice(f.delegateCount++,0,d):f.push(d),pe.event.global[p]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,d,f,p,h,m,g=pe.hasData(e)&&pe._data(e);if(g&&(c=g.events)){for(t=(t||"").match(je)||[""],u=t.length;u--;)if(s=Ke.exec(t[u])||[],p=m=s[1],h=(s[2]||"").split(".").sort(),p){for(d=pe.event.special[p]
 ||{},p=(r?d.delegateType:d.bindType)||p,f=c[p]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=f.length;o--;)a=f[o],!i&&m!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,d.remove&&d.remove.call(e,a));l&&!f.length&&(d.teardown&&d.teardown.call(e,h,g.handle)!==!1||pe.removeEvent(e,p,g.handle),delete c[p])}else for(p in c)pe.event.remove(e,p+t[u],n,r,!0);pe.isEmptyObject(c)&&(delete g.handle,pe._removeData(e,"events"))}},trigger:function(t,n,r,i){var o,a,s,l,u,c,d,f=[r||re],p=ce.call(t,"type")?t.type:t,h=ce.call(t,"namespace")?t.namespace.split("."):[];if(s=c=r=r||re,3!==r.nodeType&&8!==r.nodeType&&!Je.test(p+pe.event.triggered)&&(p.indexOf(".")>-1&&(h=p.split("."),p=h.shift(),h.sort()),a=p.indexOf(":")<0&&"on"+p,t=t[pe.expando]?t:new pe.Event(p,"object"==typeof t&&t),t.isTrigger=i?2:3,t.namespace=h.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+h.join("\
 \.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=r),n=null==n?[t]:pe.makeArray(n,[t]),u=pe.event.special[p]||{},i||!u.trigger||u.trigger.apply(r,n)!==!1)){if(!i&&!u.noBubble&&!pe.isWindow(r)){for(l=u.delegateType||p,Je.test(l+p)||(s=s.parentNode);s;s=s.parentNode)f.push(s),c=s;c===(r.ownerDocument||re)&&f.push(c.defaultView||c.parentWindow||e)}for(d=0;(s=f[d++])&&!t.isPropagationStopped();)t.type=d>1?l:u.bindType||p,o=(pe._data(s,"events")||{})[t.type]&&pe._data(s,"handle"),o&&o.apply(s,n),o=a&&s[a],o&&o.apply&&Ie(s)&&(t.result=o.apply(s,n),t.result===!1&&t.preventDefault());if(t.type=p,!i&&!t.isDefaultPrevented()&&(!u._default||u._default.apply(f.pop(),n)===!1)&&Ie(r)&&a&&r[p]&&!pe.isWindow(r)){c=r[a],c&&(r[a]=null),pe.event.triggered=p;try{r[p]()}catch(m){}pe.event.triggered=void 0,c&&(r[a]=c)}return t.result}},dispatch:function(e){e=pe.event.fix(e);var t,n,r,i,o,a=[],s=ie.call(arguments),l=(pe._data(this,"events")||{})[e.type]||[],u=pe.event.special[e.type]||{};
 if(s[0]=e,e.delegateTarget=this,!u.preDispatch||u.preDispatch.call(this,e)!==!1){for(a=pe.event.handlers.call(this,e,l),t=0;(i=a[t++])&&!e.isPropagationStopped();)for(e.currentTarget=i.elem,n=0;(o=i.handlers[n++])&&!e.isImmediatePropagationStopped();)e.rnamespace&&!e.rnamespace.test(o.namespace)||(e.handleObj=o,e.data=o.data,r=((pe.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s),void 0!==r&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()));return u.postDispatch&&u.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,r,i,o,a=[],s=t.delegateCount,l=e.target;if(s&&l.nodeType&&("click"!==e.type||isNaN(e.button)||e.button<1))for(;l!=this;l=l.parentNode||this)if(1===l.nodeType&&(l.disabled!==!0||"click"!==e.type)){for(r=[],n=0;s>n;n++)o=t[n],i=o.selector+" ",void 0===r[i]&&(r[i]=o.needsContext?pe(i,this).index(l)>-1:pe.find(i,this,null,[l]).length),r[i]&&r.push(o);r.length&&a.push({elem:l,handlers:r})}return s<t.length&&a.push({elem:this,handlers:
 t.slice(s)}),a},fix:function(e){if(e[pe.expando])return e;var t,n,r,i=e.type,o=e,a=this.fixHooks[i];for(a||(this.fixHooks[i]=a=Ze.test(i)?this.mouseHooks:Ge.test(i)?this.keyHooks:{}),r=a.props?this.props.concat(a.props):this.props,e=new pe.Event(o),t=r.length;t--;)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||re),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,a.filter?a.filter(e,o):e},props:"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,t){var n,r,i,o=t.button,a=t.fromElement;return null==e.pageX&&null!=t.clientX&&(r=e.target.ownerDocument||re,i=r.doc
 umentElement,n=r.body,e.pageX=t.clientX+(i&&i.scrollLeft||n&&n.scrollLeft||0)-(i&&i.clientLeft||n&&n.clientLeft||0),e.pageY=t.clientY+(i&&i.scrollTop||n&&n.scrollTop||0)-(i&&i.clientTop||n&&n.clientTop||0)),!e.relatedTarget&&a&&(e.relatedTarget=a===e.target?t.toElement:a),e.which||void 0===o||(e.which=1&o?1:2&o?3:4&o?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==x()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===x()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return pe.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(e){return pe.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n){var r=pe.extend(new pe.Event,n,{type:e,isSimulated:!0});pe.event.trigger(r,null,t),r.isDefaultPrevented
 ()&&n.preventDefault()}},pe.removeEvent=re.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)}:function(e,t,n){var r="on"+t;e.detachEvent&&("undefined"==typeof e[r]&&(e[r]=null),e.detachEvent(r,n))},pe.Event=function(e,t){return this instanceof pe.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&e.returnValue===!1?y:b):this.type=e,t&&pe.extend(this,t),this.timeStamp=e&&e.timeStamp||pe.now(),void(this[pe.expando]=!0)):new pe.Event(e,t)},pe.Event.prototype={constructor:pe.Event,isDefaultPrevented:b,isPropagationStopped:b,isImmediatePropagationStopped:b,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=y,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=y,e&&!this.isSimulated&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:fu
 nction(){var e=this.originalEvent;this.isImmediatePropagationStopped=y,e&&e.stopImmediatePropagation&&e.stopImmediatePropagation(),this.stopPropagation()}},pe.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,t){pe.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return i&&(i===r||pe.contains(r,i))||(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),de.submit||(pe.event.special.submit={setup:function(){return pe.nodeName(this,"form")?!1:void pe.event.add(this,"click._submit keypress._submit",function(e){var t=e.target,n=pe.nodeName(t,"input")||pe.nodeName(t,"button")?pe.prop(t,"form"):void 0;n&&!pe._data(n,"submit")&&(pe.event.add(n,"submit._submit",function(e){e._submitBubble=!0}),pe._data(n,"submit",!0))})},postDispatch:function(e){e._submitBubble&&(delete e._submitBubble,this.parentNode&&!e.isTrigger&&pe.event.simulate("submit",this.parent
 Node,e))},teardown:function(){return pe.nodeName(this,"form")?!1:void pe.event.remove(this,"._submit")}}),de.change||(pe.event.special.change={setup:function(){return Ve.test(this.nodeName)?("checkbox"!==this.type&&"radio"!==this.type||(pe.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._justChanged=!0)}),pe.event.add(this,"click._change",function(e){this._justChanged&&!e.isTrigger&&(this._justChanged=!1),pe.event.simulate("change",this,e)})),!1):void pe.event.add(this,"beforeactivate._change",function(e){var t=e.target;Ve.test(t.nodeName)&&!pe._data(t,"change")&&(pe.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||pe.event.simulate("change",this.parentNode,e)}),pe._data(t,"change",!0))})},handle:function(e){var t=e.target;return this!==t||e.isSimulated||e.isTrigger||"radio"!==t.type&&"checkbox"!==t.type?e.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return pe.event.remov
 e(this,"._change"),!Ve.test(this.nodeName)}}),de.focusin||pe.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){pe.event.simulate(t,e.target,pe.event.fix(e))};pe.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=pe._data(r,t);i||r.addEventListener(e,n,!0),pe._data(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=pe._data(r,t)-1;i?pe._data(r,t,i):(r.removeEventListener(e,n,!0),pe._removeData(r,t))}}}),pe.fn.extend({on:function(e,t,n,r){return w(this,e,t,n,r)},one:function(e,t,n,r){return w(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,pe(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return t!==!1&&"function"!=typeof t||(n=t,t=void 0),n===!1&&(n=b),this.each(function(){pe.event.remove(this,e,n,t)})},trigger:function(e,t){return this.each(function(){pe.event.
 trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];return n?pe.event.trigger(e,t,n,!0):void 0}});var Qe=/ jQuery\d+="(?:null|\d+)"/g,et=new RegExp("<(?:"+$e+")[\\s/>]","i"),tt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,nt=/<script|<style|<link/i,rt=/checked\s*(?:[^=]|=\s*.checked.)/i,it=/^true\/(.*)/,ot=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,at=p(re),st=at.appendChild(re.createElement("div"));pe.extend({htmlPrefilter:function(e){return e.replace(tt,"<$1></$2>")},clone:function(e,t,n){var r,i,o,a,s,l=pe.contains(e.ownerDocument,e);if(de.html5Clone||pe.isXMLDoc(e)||!et.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(st.innerHTML=e.outerHTML,st.removeChild(o=st.firstChild)),!(de.noCloneEvent&&de.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||pe.isXMLDoc(e)))for(r=h(o),s=h(e),a=0;null!=(i=s[a]);++a)r[a]&&S(i,r[a]);if(t)if(n)for(s=s||h(e),r=r||h(o),a=0;null!=(i=s[a]);a++)E(i,r[a]);else E(e,o);return r=h(o,"script"),r.length>0&&m(r,!l&&h(e,"s
 cript")),r=s=i=null,o},cleanData:function(e,t){for(var n,r,i,o,a=0,s=pe.expando,l=pe.cache,u=de.attributes,c=pe.event.special;null!=(n=e[a]);a++)if((t||Ie(n))&&(i=n[s],o=i&&l[i])){if(o.events)for(r in o.events)c[r]?pe.event.remove(n,r):pe.removeEvent(n,r,o.handle);l[i]&&(delete l[i],u||"undefined"==typeof n.removeAttribute?n[s]=void 0:n.removeAttribute(s),ne.push(i))}}}),pe.fn.extend({domManip:N,detach:function(e){return A(this,e,!0)},remove:function(e){return A(this,e)},text:function(e){return Fe(this,function(e){return void 0===e?pe.text(this):this.empty().append((this[0]&&this[0].ownerDocument||re).createTextNode(e))},null,e,arguments.length)},append:function(){return N(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=C(this,e);t.appendChild(e)}})},prepend:function(){return N(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=C(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){retur
 n N(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return N(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++){for(1===e.nodeType&&pe.cleanData(h(e,!1));e.firstChild;)e.removeChild(e.firstChild);e.options&&pe.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return pe.clone(this,e,t)})},html:function(e){return Fe(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e)return 1===t.nodeType?t.innerHTML.replace(Qe,""):void 0;if("string"==typeof e&&!nt.test(e)&&(de.htmlSerialize||!et.test(e))&&(de.leadingWhitespace||!We.test(e))&&!Xe[(ze.exec(e)||["",""])[1].toLowerCase()]){e=pe.htmlPrefilter(e);try{for(;r>n;n++)t=this[n]||{},1===t.nodeType&&(pe.cleanData(h(t,!1)),t.innerHTML=e);t=0}catch(i){}}t&&this.empty().append(e)},null,e,arguments.length)
 },replaceWith:function(){var e=[];return N(this,arguments,function(t){var n=this.parentNode;pe.inArray(this,e)<0&&(pe.cleanData(h(this)),
+n&&n.replaceChild(t,this))},e)}}),pe.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){pe.fn[e]=function(e){for(var n,r=0,i=[],o=pe(e),a=o.length-1;a>=r;r++)n=r===a?this:this.clone(!0),pe(o[r])[t](n),ae.apply(i,n.get());return this.pushStack(i)}});var lt,ut={HTML:"block",BODY:"block"},ct=/^margin/,dt=new RegExp("^("+Oe+")(?!px)[a-z%]+$","i"),ft=function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i},pt=re.documentElement;!function(){function t(){var t,c,d=re.documentElement;d.appendChild(l),u.style.cssText="-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",n=i=s=!1,r=a=!0,e.getComputedStyle&&(c=e.getComputedStyle(u),n="1%"!==(c||{}).top,s="2px"===(c||{}).marginLeft,i="4px"===(c||{width:"4px"}).width,u.style.marginRight="50%",r="4px"===(c||{marginRigh
 t:"4px"}).marginRight,t=u.appendChild(re.createElement("div")),t.style.cssText=u.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",t.style.marginRight=t.style.width="0",u.style.width="1px",a=!parseFloat((e.getComputedStyle(t)||{}).marginRight),u.removeChild(t)),u.style.display="none",o=0===u.getClientRects().length,o&&(u.style.display="",u.innerHTML="<table><tr><td></td><td>t</td></tr></table>",u.childNodes[0].style.borderCollapse="separate",t=u.getElementsByTagName("td"),t[0].style.cssText="margin:0;border:0;padding:0;display:none",o=0===t[0].offsetHeight,o&&(t[0].style.display="",t[1].style.display="none",o=0===t[0].offsetHeight)),d.removeChild(l)}var n,r,i,o,a,s,l=re.createElement("div"),u=re.createElement("div");u.style&&(u.style.cssText="float:left;opacity:.5",de.opacity="0.5"===u.style.opacity,de.cssFloat=!!u.style.cssFloat,u.style.backgroundClip="content-box",u.cloneNode(!0).style.backgr
 oundClip="",de.clearCloneStyle="content-box"===u.style.backgroundClip,l=re.createElement("div"),l.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",u.innerHTML="",l.appendChild(u),de.boxSizing=""===u.style.boxSizing||""===u.style.MozBoxSizing||""===u.style.WebkitBoxSizing,pe.extend(de,{reliableHiddenOffsets:function(){return null==n&&t(),o},boxSizingReliable:function(){return null==n&&t(),i},pixelMarginRight:function(){return null==n&&t(),r},pixelPosition:function(){return null==n&&t(),n},reliableMarginRight:function(){return null==n&&t(),a},reliableMarginLeft:function(){return null==n&&t(),s}}))}();var ht,mt,gt=/^(top|right|bottom|left)$/;e.getComputedStyle?(ht=function(t){var n=t.ownerDocument.defaultView;return n&&n.opener||(n=e),n.getComputedStyle(t)},mt=function(e,t,n){var r,i,o,a,s=e.style;return n=n||ht(e),a=n?n.getPropertyValue(t)||n[t]:void 0,""!==a&&void 0!==a||pe.contains(e.ownerDocument,e)||(a=pe.style(e,t)),n&&!de.
 pixelMarginRight()&&dt.test(a)&&ct.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o),void 0===a?a:a+""}):pt.currentStyle&&(ht=function(e){return e.currentStyle},mt=function(e,t,n){var r,i,o,a,s=e.style;return n=n||ht(e),a=n?n[t]:void 0,null==a&&s&&s[t]&&(a=s[t]),dt.test(a)&&!gt.test(t)&&(r=s.left,i=e.runtimeStyle,o=i&&i.left,o&&(i.left=e.currentStyle.left),s.left="fontSize"===t?"1em":a,a=s.pixelLeft+"px",s.left=r,o&&(i.left=o)),void 0===a?a:a+""||"auto"});var vt=/alpha\([^)]*\)/i,yt=/opacity\s*=\s*([^)]*)/i,bt=/^(none|table(?!-c[ea]).+)/,xt=new RegExp("^("+Oe+")(.*)$","i"),wt={position:"absolute",visibility:"hidden",display:"block"},Ct={letterSpacing:"0",fontWeight:"400"},Tt=["Webkit","O","Moz","ms"],kt=re.createElement("div").style;pe.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=mt(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,
 flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":de.cssFloat?"cssFloat":"styleFloat"},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=pe.camelCase(t),l=e.style;if(t=pe.cssProps[s]||(pe.cssProps[s]=I(s)||s),a=pe.cssHooks[t]||pe.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];if(o=typeof n,"string"===o&&(i=Me.exec(n))&&i[1]&&(n=f(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(pe.cssNumber[s]?"":"px")),de.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),!(a&&"set"in a&&void 0===(n=a.set(e,n,r)))))try{l[t]=n}catch(u){}}},css:function(e,t,n,r){var i,o,a,s=pe.camelCase(t);return t=pe.cssProps[s]||(pe.cssProps[s]=I(s)||s),a=pe.cssHooks[t]||pe.cssHooks[s],a&&"get"in a&&(o=a.get(e,!0,n)),void 0===o&&(o=mt(e,t,r)),"normal"===o&&t in Ct&&(o=Ct[t]),""===n||n?(i=parseFloat(o),n===!0||isFinite(i)?i||0:o):o}}),pe.each(["heigh
 t","width"],function(e,t){pe.cssHooks[t]={get:function(e,n,r){return n?bt.test(pe.css(e,"display"))&&0===e.offsetWidth?ft(e,wt,function(){return M(e,t,r)}):M(e,t,r):void 0},set:function(e,n,r){var i=r&&ht(e);return H(e,n,r?O(e,t,r,de.boxSizing&&"border-box"===pe.css(e,"boxSizing",!1,i),i):0)}}}),de.opacity||(pe.cssHooks.opacity={get:function(e,t){return yt.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=pe.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===pe.trim(o.replace(vt,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=vt.test(o)?o.replace(vt,i):o+" "+i)}}),pe.cssHooks.marginRight=D(de.reliableMarginRight,function(e,t){return t?ft(e,{display:"inline-block"},mt,[e,"marginRight"]):void 0}),pe.cssHooks.marginLeft=D(de.reliableMarginLeft,function(e,t){return t?(parseFloat(mt(e,"marginLef
 t"))||(pe.contains(e.ownerDocument,e)?e.getBoundingClientRect().left-ft(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}):0))+"px":void 0}),pe.each({margin:"",padding:"",border:"Width"},function(e,t){pe.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];4>r;r++)i[e+Pe[r]+t]=o[r]||o[r-2]||o[0];return i}},ct.test(e)||(pe.cssHooks[e+t].set=H)}),pe.fn.extend({css:function(e,t){return Fe(this,function(e,t,n){var r,i,o={},a=0;if(pe.isArray(t)){for(r=ht(e),i=t.length;i>a;a++)o[t[a]]=pe.css(e,t[a],!1,r);return o}return void 0!==n?pe.style(e,t,n):pe.css(e,t)},e,t,arguments.length>1)},show:function(){return _(this,!0)},hide:function(){return _(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){qe(this)?pe(this).show():pe(this).hide()})}}),pe.Tween=P,P.prototype={constructor:P,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||pe.easing._default,this.options=t,this.start=this.
 now=this.cur(),this.end=r,this.unit=o||(pe.cssNumber[n]?"":"px")},cur:function(){var e=P.propHooks[this.prop];return e&&e.get?e.get(this):P.propHooks._default.get(this)},run:function(e){var t,n=P.propHooks[this.prop];return this.options.duration?this.pos=t=pe.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):P.propHooks._default.set(this),this}},P.prototype.init.prototype=P.prototype,P.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=pe.css(e.elem,e.prop,""),t&&"auto"!==t?t:0)},set:function(e){pe.fx.step[e.prop]?pe.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[pe.cssProps[e.prop]]&&!pe.cssHooks[e.prop]?e.elem[e.prop]=e.now:pe.style(e.elem,e.prop,e.now+e.unit)}}},P.propHooks.scrollTop=P.propHooks.scrollLeft={set:functi
 on(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},pe.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},pe.fx=P.prototype.init,pe.fx.step={};var Et,St,Nt=/^(?:toggle|show|hide)$/,At=/queueHooks$/;pe.Animation=pe.extend(W,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return f(n.elem,e,Me.exec(t),n),n}]},tweener:function(e,t){pe.isFunction(e)?(t=e,e=["*"]):e=e.match(je);for(var n,r=0,i=e.length;i>r;r++)n=e[r],W.tweeners[n]=W.tweeners[n]||[],W.tweeners[n].unshift(t)},prefilters:[z],prefilter:function(e,t){t?W.prefilters.unshift(e):W.prefilters.push(e)}}),pe.speed=function(e,t,n){var r=e&&"object"==typeof e?pe.extend({},e):{complete:n||!n&&t||pe.isFunction(e)&&e,duration:e,easing:n&&t||t&&!pe.isFunction(t)&&t};return r.duration=pe.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in pe.fx.speeds?pe.fx.speeds[r.duration]:pe.fx.speeds._default,null!=r.queue&&r.queue!==!0||(r.queue="fx"),r.old=r.com
 plete,r.complete=function(){pe.isFunction(r.old)&&r.old.call(this),r.queue&&pe.dequeue(this,r.queue)},r},pe.fn.extend({fadeTo:function(e,t,n,r){return this.filter(qe).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=pe.isEmptyObject(e),o=pe.speed(t,n,r),a=function(){var t=W(this,pe.extend({},e),o);(i||pe._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return"string"!=typeof e&&(n=t,t=e,e=void 0),t&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,i=null!=e&&e+"queueHooks",o=pe.timers,a=pe._data(this);if(i)a[i]&&a[i].stop&&r(a[i]);else for(i in a)a[i]&&a[i].stop&&At.test(i)&&r(a[i]);for(i=o.length;i--;)o[i].elem!==this||null!=e&&o[i].queue!==e||(o[i].anim.stop(n),t=!1,o.splice(i,1));!t&&n||pe.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=pe._data(this),r=n[e
 +"queue"],i=n[e+"queueHooks"],o=pe.timers,a=r?r.length:0;for(n.finish=!0,pe.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),pe.each(["toggle","show","hide"],function(e,t){var n=pe.fn[t];pe.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(F(t,!0),e,r,i)}}),pe.each({slideDown:F("show"),slideUp:F("hide"),slideToggle:F("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){pe.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),pe.timers=[],pe.fx.tick=function(){var e,t=pe.timers,n=0;for(Et=pe.now();n<t.length;n++)e=t[n],e()||t[n]!==e||t.splice(n--,1);t.length||pe.fx.stop(),Et=void 0},pe.fx.timer=function(e){pe.timers.push(e),e()?pe.fx.start():pe.timers.pop()},pe.fx.interval=13,pe.fx.start=function(){St||(St=e.setInterval(pe.fx.ti
 ck,pe.fx.interval))},pe.fx.stop=function(){e.clearInterval(St),St=null},pe.fx.speeds={slow:600,fast:200,_default:400},pe.fn.delay=function(t,n){return t=pe.fx?pe.fx.speeds[t]||t:t,n=n||"fx",this.queue(n,function(n,r){var i=e.setTimeout(n,t);r.stop=function(){e.clearTimeout(i)}})},function(){var e,t=re.createElement("input"),n=re.createElement("div"),r=re.createElement("select"),i=r.appendChild(re.createElement("option"));n=re.createElement("div"),n.setAttribute("className","t"),n.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",e=n.getElementsByTagName("a")[0],t.setAttribute("type","checkbox"),n.appendChild(t),e=n.getElementsByTagName("a")[0],e.style.cssText="top:1px",de.getSetAttribute="t"!==n.className,de.style=/top/.test(e.getAttribute("style")),de.hrefNormalized="/a"===e.getAttribute("href"),de.checkOn=!!t.value,de.optSelected=i.selected,de.enctype=!!re.createElement("form").enctype,r.disabled=!0,de.optDisabled=!i.disabled,t=re.createElement("input"
 ),t.setAttribute("value",""),de.input=""===t.getAttribute("value"),t.value="t",t.setAttribute("type","radio"),de.radioValue="t"===t.value}();var jt=/\r/g,Lt=/[\x20\t\r\n\f]+/g;pe.fn.extend({val:function(e){var t,n,r,i=this[0];return arguments.length?(r=pe.isFunction(e),this.each(function(n){var i;1===this.nodeType&&(i=r?e.call(this,n,pe(this).val()):e,null==i?i="":"number"==typeof i?i+="":pe.isArray(i)&&(i=pe.map(i,function(e){return null==e?"":e+""})),t=pe.valHooks[this.type]||pe.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))})):i?(t=pe.valHooks[i.type]||pe.valHooks[i.nodeName.toLowerCase()],t&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:(n=i.value,"string"==typeof n?n.replace(jt,""):null==n?"":n)):void 0}}),pe.extend({valHooks:{option:{get:function(e){var t=pe.find.attr(e,"value");return null!=t?t:pe.trim(pe.text(e)).replace(Lt," ")}},select:{get:function(e){for(var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a
 =o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;s>l;l++)if(n=r[l],(n.selected||l===i)&&(de.optDisabled?!n.disabled:null===n.getAttribute("disabled"))&&(!n.parentNode.disabled||!pe.nodeName(n.parentNode,"optgroup"))){if(t=pe(n).val(),o)return t;a.push(t)}return a},set:function(e,t){for(var n,r,i=e.options,o=pe.makeArray(t),a=i.length;a--;)if(r=i[a],pe.inArray(pe.valHooks.option.get(r),o)>-1)try{r.selected=n=!0}catch(s){r.scrollHeight}else r.selected=!1;return n||(e.selectedIndex=-1),i}}}}),pe.each(["radio","checkbox"],function(){pe.valHooks[this]={set:function(e,t){return pe.isArray(t)?e.checked=pe.inArray(pe(e).val(),t)>-1:void 0}},de.checkOn||(pe.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Dt,It,_t=pe.expr.attrHandle,Ht=/^(?:checked|selected)$/i,Ot=de.getSetAttribute,Mt=de.input;pe.fn.extend({attr:function(e,t){return Fe(this,pe.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){pe.removeAttr(this,e)})}}),pe.exte
 nd({attr:function(e,t,n){var r,i,o=e.nodeType;return 3!==o&&8!==o&&2!==o?"undefined"==typeof e.getAttribute?pe.prop(e,t,n):(1===o&&pe.isXMLDoc(e)||(t=t.toLowerCase(),i=pe.attrHooks[t]||(pe.expr.match.bool.test(t)?It:Dt)),void 0!==n?null===n?void pe.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:(r=pe.find.attr(e,t),null==r?void 0:r)):void 0},attrHooks:{type:{set:function(e,t){if(!de.radioValue&&"radio"===t&&pe.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(je);if(o&&1===e.nodeType)for(;n=o[i++];)r=pe.propFix[n]||n,pe.expr.match.bool.test(n)?Mt&&Ot||!Ht.test(n)?e[r]=!1:e[pe.camelCase("default-"+n)]=e[r]=!1:pe.attr(e,n,""),e.removeAttribute(Ot?n:r)}}),It={set:function(e,t,n){return t===!1?pe.removeAttr(e,n):Mt&&Ot||!Ht.test(n)?e.setAttribute(!Ot&&pe.propFix[n]||n,n):e[pe.camelCase("default-"+n)]=e[n]=!0,n}},pe.each(pe.ex
 pr.match.bool.source.match(/\w+/g),function(e,t){var n=_t[t]||pe.find.attr;Mt&&Ot||!Ht.test(t)?_t[t]=function(e,t,r){var i,o;return r||(o=_t[t],_t[t]=i,i=null!=n(e,t,r)?t.toLowerCase():null,_t[t]=o),i}:_t[t]=function(e,t,n){return n?void 0:e[pe.camelCase("default-"+t)]?t.toLowerCase():null}}),Mt&&Ot||(pe.attrHooks.value={set:function(e,t,n){return pe.nodeName(e,"input")?void(e.defaultValue=t):Dt&&Dt.set(e,t,n)}}),Ot||(Dt={set:function(e,t,n){var r=e.getAttributeNode(n);return r||e.setAttributeNode(r=e.ownerDocument.createAttribute(n)),r.value=t+="","value"===n||t===e.getAttribute(n)?t:void 0}},_t.id=_t.name=_t.coords=function(e,t,n){var r;return n?void 0:(r=e.getAttributeNode(t))&&""!==r.value?r.value:null},pe.valHooks.button={get:function(e,t){var n=e.getAttributeNode(t);return n&&n.specified?n.value:void 0},set:Dt.set},pe.attrHooks.contenteditable={set:function(e,t,n){Dt.set(e,""===t?!1:t,n)}},pe.each(["width","height"],function(e,t){pe.attrHooks[t]={set:function(e,n){return""===n
 ?(e.setAttribute(t,"auto"),n):void 0}}})),de.style||(pe.attrHooks.style={get:function(e){return e.style.cssText||void 0},set:function(e,t){return e.style.cssText=t+""}});var Pt=/^(?:input|select|textarea|button|object)$/i,qt=/^(?:a|area)$/i;pe.fn.extend({prop:function(e,t){return Fe(this,pe.prop,e,t,arguments.length>1)},removeProp:function(e){return e=pe.propFix[e]||e,this.each(function(){try{this[e]=void 0,delete this[e]}catch(t){}})}}),pe.extend({prop:function(e,t,n){var r,i,o=e.nodeType;return 3!==o&&8!==o&&2!==o?(1===o&&pe.isXMLDoc(e)||(t=pe.propFix[t]||t,i=pe.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]):void 0},propHooks:{tabIndex:{get:function(e){var t=pe.find.attr(e,"tabindex");return t?parseInt(t,10):Pt.test(e.nodeName)||qt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),de.hrefNormalized||pe.each(["href","src"],function(e,t){pe.propHooks[t]={get:function(e){return e.get
 Attribute(t,4)}}}),de.optSelected||(pe.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),pe.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){pe.propFix[this.toLowerCase()]=this}),de.enctype||(pe.propFix.enctype="encoding");var Ft=/[\t\r\n\f]/g;pe.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,l=0;if(pe.isFunction(e))return this.each(function(t){pe(this).addClass(e.call(this,t,$(this)))});if("string"==typeof e&&e)for(t=e.match(je)||[];n=this[l++];)if(i=$(n),r=1===n.nodeType&&(" "+i+" ").replace(Ft," ")){for(a=0;o=t[a++];)r.indexOf(" "+o+" ")<0&&(r+=o+" ");s=pe.trim(r),i!==s&&pe.attr(n,"class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,l=0;if(pe.isFunction(e))return this.each(function(t){pe(this).rem
 oveClass(e.call(this,t,$(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof e&&e)for(t=e.match(je)||[];n=this[l++];)if(i=$(n),r=1===n.nodeType&&(" "+i+" ").replace(Ft," ")){for(a=0;o=t[a++];)for(;r.indexOf(" "+o+" ")>-1;)r=r.replace(" "+o+" "," ");s=pe.trim(r),i!==s&&pe.attr(n,"class",s)}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):pe.isFunction(e)?this.each(function(n){pe(this).toggleClass(e.call(this,n,$(this),t),t)}):this.each(function(){var t,r,i,o;if("string"===n)for(r=0,i=pe(this),o=e.match(je)||[];t=o[r++];)i.hasClass(t)?i.removeClass(t):i.addClass(t);else void 0!==e&&"boolean"!==n||(t=$(this),t&&pe._data(this,"__className__",t),pe.attr(this,"class",t||e===!1?"":pe._data(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;for(t=" "+e+" ";n=this[r++];)if(1===n.nodeType&&(" "+$(n)+" ").replace(Ft," ").indexOf(t)>-1)return!0;return!1}}),pe.each("blur f
 ocus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){pe.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),pe.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}});var Bt=e.location,zt=pe.now(),Rt=/\?/,Wt=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;pe.parseJSON=function(t){if(e.JSON&&e.JSON.parse)return e.JSON.parse(t+"");var n,r=null,i=pe.trim(t+"");return i&&!pe.trim(i.replace(Wt,function(e,t,i,o){return n&&t&&(r=0),0===r?e:(n=i||t,r+=!o-!i,"")}))?Function("return "+i)():pe.error("Invalid JSON: "+t)},pe.parseXML=function(t){var n,r;if(!t||"string"!=typeof t)return null;try{e.DOMParser?(r=new e.DOMParser,n=r.parseFromString(t,"text/xml")):(n=new e.ActiveXObject("Microsoft.XMLD
 OM"),n.async="false",n.loadXML(t))}catch(i){n=void 0}return n&&n.documentElement&&!n.getElementsByTagName("parsererror").length||pe.error("Invalid XML: "+t),n};var $t=/#.*$/,Xt=/([?&])_=[^&]*/,Ut=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Yt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Vt=/^(?:GET|HEAD)$/,Gt=/^\/\//,Zt=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Jt={},Kt={},Qt="*/".concat("*"),en=Bt.href,tn=Zt.exec(en.toLowerCase())||[];pe.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:en,type:"GET",isLocal:Yt.test(tn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Qt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":pe.parseJSON,"text xml":pe.par
 seXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Y(Y(e,pe.ajaxSettings),t):Y(pe.ajaxSettings,e)},ajaxPrefilter:X(Jt),ajaxTransport:X(Kt),ajax:function(t,n){function r(t,n,r,i){var o,d,y,b,w,T=n;2!==x&&(x=2,l&&e.clearTimeout(l),c=void 0,s=i||"",C.readyState=t>0?4:0,o=t>=200&&300>t||304===t,r&&(b=V(f,C,r)),b=G(f,b,C,o),o?(f.ifModified&&(w=C.getResponseHeader("Last-Modified"),w&&(pe.lastModified[a]=w),w=C.getResponseHeader("etag"),w&&(pe.etag[a]=w)),204===t||"HEAD"===f.type?T="nocontent":304===t?T="notmodified":(T=b.state,d=b.data,y=b.error,o=!y)):(y=T,!t&&T||(T="error",0>t&&(t=0))),C.status=t,C.statusText=(n||T)+"",o?m.resolveWith(p,[d,T,C]):m.rejectWith(p,[C,T,y]),C.statusCode(v),v=void 0,u&&h.trigger(o?"ajaxSuccess":"ajaxError",[C,f,o?d:y]),g.fireWith(p,[C,T]),u&&(h.trigger("ajaxComplete",[C,f]),--pe.active||pe.event.trigger("ajaxStop")))}"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,l,u,c,d,f=pe.ajaxSetup({},n),p=f.context||f,h=f.context&&(p.nodeTyp
 e||p.jquery)?pe(p):pe.event,m=pe.Deferred(),g=pe.Callbacks("once memory"),v=f.statusCode||{},y={},b={},x=0,w="canceled",C={readyState:0,getResponseHeader:function(e){var t;if(2===x){if(!d)for(d={};t=Ut.exec(s);)d[t[1].toLowerCase()]=t[2];t=d[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===x?s:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return x||(e=b[n]=b[n]||e,y[e]=t),this},overrideMimeType:function(e){return x||(f.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>x)for(t in e)v[t]=[v[t],e[t]];else C.always(e[C.status]);return this},abort:function(e){var t=e||w;return c&&c.abort(t),r(0,t),this}};if(m.promise(C).complete=g.add,C.success=C.done,C.error=C.fail,f.url=((t||f.url||en)+"").replace($t,"").replace(Gt,tn[1]+"//"),f.type=n.method||n.type||f.method||f.type,f.dataTypes=pe.trim(f.dataType||"*").toLowerCase().match(je)||[""],null==f.crossDomain&&(i=Zt.exec(f.url.toLowerCase()),f.crossDomain=!(!i||i[1]===tn[1]&&i[2]===tn[2]
 &&(i[3]||("http:"===i[1]?"80":"443"))===(tn[3]||("http:"===tn[1]?"80":"443")))),f.data&&f.processData&&"string"!=typeof f.data&&(f.data=pe.param(f.data,f.traditional)),U(Jt,f,n,C),2===x)return C;u=pe.event&&f.global,u&&0===pe.active++&&pe.event.trigger("ajaxStart"),f.type=f.type.toUpperCase(),f.hasContent=!Vt.test(f.type),a=f.url,f.hasContent||(f.data&&(a=f.url+=(Rt.test(a)?"&":"?")+f.data,delete f.data),f.cache===!1&&(f.url=Xt.test(a)?a.replace(Xt,"$1_="+zt++):a+(Rt.test(a)?"&":"?")+"_="+zt++)),f.ifModified&&(pe.lastModified[a]&&C.setRequestHeader("If-Modified-Since",pe.lastModified[a]),pe.etag[a]&&C.setRequestHeader("If-None-Match",pe.etag[a])),(f.data&&f.hasContent&&f.contentType!==!1||n.contentType)&&C.setRequestHeader("Content-Type",f.contentType),C.setRequestHeader("Accept",f.dataTypes[0]&&f.accepts[f.dataTypes[0]]?f.accepts[f.dataTypes[0]]+("*"!==f.dataTypes[0]?", "+Qt+"; q=0.01":""):f.accepts["*"]);for(o in f.headers)C.setRequestHeader(o,f.headers[o]);if(f.beforeSend&&(f.bef
 oreSend.call(p,C,f)===!1||2===x))return C.abort();w="abort";for(o in{success:1,error:1,complete:1})C[o](f[o]);if(c=U(Kt,f,n,C)){if(C.readyState=1,u&&h.trigger("ajaxSend",[C,f]),2===x)return C;f.async&&f.timeout>0&&(l=e.setTimeout(function(){C.abort("timeout")},f.timeout));try{x=1,c.send(y,r)}catch(T){if(!(2>x))throw T;r(-1,T)}}else r(-1,"No Transport");return C},getJSON:function(e,t,n){return pe.get(e,t,n,"json")},getScript:function(e,t){return pe.get(e,void 0,t,"script")}}),pe.each(["get","post"],function(e,t){pe[t]=function(e,n,r,i){return pe.isFunction(n)&&(i=i||r,r=n,n=void 0),pe.ajax(pe.extend({url:e,type:t,dataType:i,data:n,success:r},pe.isPlainObject(e)&&e))}}),pe._evalUrl=function(e){return pe.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},pe.fn.extend({wrapAll:function(e){if(pe.isFunction(e))return this.each(function(t){pe(this).wrapAll(e.call(this,t))});if(this[0]){var t=pe(e,this[0].ownerDocument).eq(0).clone(!0);this[0]

<TRUNCATED>


[03/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/users/service-configurations/index.html
----------------------------------------------------------------------
diff --git a/content/users/service-configurations/index.html b/content/users/service-configurations/index.html
new file mode 100644
index 0000000..c463a29
--- /dev/null
+++ b/content/users/service-configurations/index.html
@@ -0,0 +1,1094 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>服务配置 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="服务配置">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="服务配置">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/users/service-configurations/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/users/service-configurations/">
+
+
+
+  <meta property="og:description" content="服务配置">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="服务配置">
+  <meta name="twitter:description" content="服务配置">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/users/service-configurations/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">User Guide</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/" class="">Java Chassis Architecture</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/setup-environment/" class="">Setup Environment</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Provider</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-definition/" class="">Service Definition</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-contract/" class="">Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-springmvc/" class="">Develop Microservice with SpringMVC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-jax-rs/" class="">Develop Microservice with JAX-RS</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-transparent-rpc/" class="">Develop Microservice with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-interface-constraints/" class="">Service Interface Constraints</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-configurations/" class="active">Service Configurations</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/communicate-protocol/" class="">Communicate Protocol</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/application-boot-process/" class="">Application Boot Up Process</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-heartbeat/" class="">Service Heartbeat</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Consumer</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rest-template/" class="">Develop with Rest Template</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rpc/" class="">Develop with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-service-contract/" class="">Use Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/invoke-control/" class="">Invoke Control</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">General Development</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/local-develop-test/" class="">Develop and Test in Local Environment</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-servicecomb-in-spring-boot/" class="">Use ServiceComb in Spring Boot</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/distributed-tracing/" class="">Distributed Tracing</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/customized-tracing/" class="">Customized Tracing</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Edging Service</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/nginx/" class="">confd and Nginx</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/zuul/" class="">Zuul</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">Metrics</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Deployment</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/run-mode/" class="">Run Mode</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Security</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-tls/" class="">Use TLS</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="服务配置">
+    <meta itemprop="description" content="服务配置">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">服务配置
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> On This Page</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#负载均衡策略" id="markdown-toc-负载均衡策略">负载均衡策略</a>    <ul>
+      <li><a href="#场景描述" id="markdown-toc-场景描述">场景描述</a></li>
+      <li><a href="#配置说明" id="markdown-toc-配置说明">配置说明</a></li>
+      <li><a href="#示例代码" id="markdown-toc-示例代码">示例代码</a></li>
+    </ul>
+  </li>
+  <li><a href="#自定义路由策略" id="markdown-toc-自定义路由策略">自定义路由策略</a></li>
+  <li><a href="#限流策略" id="markdown-toc-限流策略">限流策略</a>    <ul>
+      <li><a href="#场景描述-1" id="markdown-toc-场景描述-1">场景描述</a></li>
+      <li><a href="#注意事项" id="markdown-toc-注意事项">注意事项</a></li>
+      <li><a href="#配置说明-1" id="markdown-toc-配置说明-1">配置说明</a></li>
+    </ul>
+  </li>
+  <li><a href="#降级策略" id="markdown-toc-降级策略">降级策略</a>    <ul>
+      <li><a href="#概念阐述" id="markdown-toc-概念阐述">概念阐述</a></li>
+      <li><a href="#场景描述-2" id="markdown-toc-场景描述-2">场景描述</a></li>
+      <li><a href="#配置说明-2" id="markdown-toc-配置说明-2">配置说明</a></li>
+    </ul>
+  </li>
+  <li><a href="#示例代码-1" id="markdown-toc-示例代码-1">示例代码</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="负载均衡策略">负载均衡策略</h2>
+<h3 id="场景描述">场景描述</h3>
+
+<p>  ServiceComb提供了基于Ribbon的负载均衡方案,用户可以通过配置文件配置负载均衡策略,当前支持随机、顺序、基于响应时间的权值等多种负载均衡路由策略。</p>
+
+<h3 id="配置说明">配置说明</h3>
+
+<p>  负载均衡策略在mocroservice.yaml文件中配置,配置项为<code class="highlighter-rouge">cse.loadbalance.[MicroServiceName].[property name]</code>,其中若省略MicroServiceName,则为全局配置;若指定MicroServiceName,则为针对特定微服务的配置。</p>
+
+<p>  <strong>表1 配置项说明</strong></p>
+
+<table>
+  <thead>
+    <tr>
+      <th style="text-align: left">配置项</th>
+      <th style="text-align: left">默认值</th>
+      <th style="text-align: left">取值范围</th>
+      <th style="text-align: left">是否必选</th>
+      <th style="text-align: left">含义</th>
+      <th style="text-align: left">注意</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td style="text-align: left">cse.loadbalance.NFLoadBalancerRuleClassName</td>
+      <td style="text-align: left">com.netflix.loadbalancer.RoundRobinRule</td>
+      <td style="text-align: left">com.netflix.loadbalancer.RoundRobinRule(轮询)com.netflix.loadbalancer.RandomRule(随机)com.netflix.loadbalancer.WeightedResponseTimeRule(服务器响应时间权值)io.servicecomb.loadbalance.SessionStickinessRule(会话保持)</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">负载均衡路由策略</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.loadbalance.SessionStickinessRule.sessionTimeoutInSeconds</td>
+      <td style="text-align: left">30</td>
+      <td style="text-align: left">Integer</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">客户端闲置时间,超过限制后选择后面的服务器。</td>
+      <td style="text-align: left">暂不支持微服务配置。e.g. cse.loadbalance.SessionStickinessRule.sessionTimeoutInSeconds,不能配置为cse.loadbalance.DemoService.SessionStickinessRule.sessionTimeoutInSeconds</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.loadbalance.SessionStickinessRule.successiveFailedTimes</td>
+      <td style="text-align: left">5</td>
+      <td style="text-align: left">Integer</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">客户端失败次数,超过后会切换服务器</td>
+      <td style="text-align: left">暂不支持微服务配置</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.loadbalance.retryEnabled</td>
+      <td style="text-align: left">FALSE</td>
+      <td style="text-align: left">Boolean</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">负载均衡捕获到服务调用异常,是否进行重试</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.loadbalance.retryOnNext</td>
+      <td style="text-align: left">0</td>
+      <td style="text-align: left">Integer</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">尝试新的服务器的次数</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.loadbalance.retryOnSame</td>
+      <td style="text-align: left">0</td>
+      <td style="text-align: left">Integer</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">同一个服务器尝试的次数</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.loadbalance.isolation.enabled</td>
+      <td style="text-align: left">FALSE</td>
+      <td style="text-align: left">Boolean</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">是否开启故障实例隔离功能</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.loadbalance.isolation.enableRequestThreshold</td>
+      <td style="text-align: left">20</td>
+      <td style="text-align: left">Integer</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">当实例的调用总次数达到该值时开始进入隔离逻辑门槛</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.loadbalance.isolation.errorThresholdPercentage</td>
+      <td style="text-align: left">20</td>
+      <td style="text-align: left">Integer,区间为(0,100]</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">实例故障隔离错误百分比</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.loadbalance.isolation.singleTestTime</td>
+      <td style="text-align: left">10000</td>
+      <td style="text-align: left">Integer</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">故障实例单点测试时间</td>
+      <td style="text-align: left">单位为ms</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.loadbalance.transactionControl.policy</td>
+      <td style="text-align: left">io.servicecomb.loadbalance.filter.SimpleTransactionControlFilter</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">动态路由分流策略</td>
+      <td style="text-align: left">框架提供了简单的分流机制,开发者也可以实现自定义的分流过滤策略</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.loadbalance.transactionControl.options</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">key/value pairs</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">针对SimpleTransactionControlFilter分流策略的配置项,可添加任意项过滤标签</td>
+      <td style="text-align: left">-</td>
+    </tr>
+  </tbody>
+</table>
+
+<h3 id="示例代码">示例代码</h3>
+
+<p>  负载均衡策略配置在src/main/resources/microservice.yaml文件中。</p>
+
+<p>  配置处理链:</p>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">cse</span><span class="pi">:</span>
+  <span class="c1"># other configurations omitted</span>
+  <span class="s">handler</span><span class="pi">:</span>
+    <span class="s">chain</span><span class="pi">:</span>
+      <span class="s">Consumer</span><span class="pi">:</span>
+        <span class="s">default</span><span class="pi">:</span> <span class="s">loadbalance</span>
+  <span class="c1"># other configurations omitted</span>
+</code></pre>
+</div>
+
+<p>  增加路由策略:</p>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">cse:</span>
+  <span class="s"># other configurations omitted</span>
+  <span class="s">loadbalance</span><span class="pi">:</span>
+    <span class="s">NFLoadBalancerRuleClassName</span><span class="pi">:</span> <span class="s">com.netflix.loadbalancer.RoundRobinRule</span>
+  <span class="c1"># other configurations omitted</span>
+</code></pre>
+</div>
+
+<h2 id="自定义路由策略">自定义路由策略</h2>
+
+<p>  用户可以在ServiceComb提供的路由策略框架下根据业务需要,通过编程的方式来开发路由策略。实施步骤如下:</p>
+
+<ul>
+  <li>
+    <p>实现接口<code class="highlighter-rouge">com.netflix.loadbalancer.IRule</code>中定义的接口方法。
+路由选择逻辑在public Server choose(Object key)方法中实现。LoadBalancerStats是一个封装了负载均衡器当前运行状态的一个结构。通过获取stats中各个实例的运行指标,在choose方法中,判定将当前请求路由到哪个实例上进行处理。处理风格可以参照<code class="highlighter-rouge">io.servicecomb.loadbalance.SessionStickinessRule</code>。</p>
+  </li>
+  <li>
+    <p>编译开发的策略,保证生成的class在classpath下。</p>
+  </li>
+  <li>
+    <p>通过SDK配置该路由策略,假如是<code class="highlighter-rouge">AbcRule</code>。则配置如下:       <code class="highlighter-rouge">cse.loadbalance.NFLoadBalancerRuleClassName=io.servicecomb.ribbon.rule.AbcRule</code></p>
+  </li>
+</ul>
+
+<h2 id="限流策略">限流策略</h2>
+<h3 id="场景描述-1">场景描述</h3>
+
+<p>用户在provider端使用限流策略,可以限制指定微服务向其发送请求的频率,达到限制每秒钟最大请求数量的效果。</p>
+
+<h3 id="注意事项">注意事项</h3>
+
+<ol>
+  <li>限流策略的控制并不是绝对精确的,可能会有少量误差。</li>
+  <li>provider端的流量控制是业务层面的功能,不是安全意义上的流量控制,如需防止DDoS攻击,需要结合其他的一系列措施。</li>
+  <li>流量控制是微服务级的,不是进程级的。</li>
+</ol>
+
+<h3 id="配置说明-1">配置说明</h3>
+
+<p>  限流策略配置在microservice.yaml文件中,相关配置项见下表。要开启服务提供者端的限流策略,还需要在处理链中配置服务端限流handler,配置示例如下:</p>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">cse</span><span class="pi">:</span>
+  <span class="s">handler</span><span class="pi">:</span>
+    <span class="s">chain</span><span class="pi">:</span>
+      <span class="s">Consumer</span><span class="pi">:</span>
+        <span class="s">default</span><span class="pi">:</span> <span class="s">qps-flowcontrol-provider</span>
+</code></pre>
+</div>
+
+<p>  <strong>表2 QPS流控配置项说明</strong></p>
+
+<table>
+  <thead>
+    <tr>
+      <th style="text-align: left">配置项</th>
+      <th style="text-align: left">默认值</th>
+      <th style="text-align: left">取值范围</th>
+      <th style="text-align: left">是否必选</th>
+      <th style="text-align: left">含义</th>
+      <th style="text-align: left">注意</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td style="text-align: left">cse.flowcontrol.Provider.qps.enabled</td>
+      <td style="text-align: left">true</td>
+      <td style="text-align: left">true/false</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">是否启用Provider流控</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.flowcontrol.Provider.qps.limit.[ServiceName]</td>
+      <td style="text-align: left">2147483647(max int)</td>
+      <td style="text-align: left">(0,2147483647],整形</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">每秒钟允许的请求数</td>
+      <td style="text-align: left">仅支持microservice一个级别的配置</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.flowcontrol.Provider.qps.global.limit</td>
+      <td style="text-align: left">2147483647(max int)</td>
+      <td style="text-align: left">(0,2147483647],整形</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">provider接受请求流量的全局配置</td>
+      <td style="text-align: left">没有具体到微服务的配置时,此配置生效</td>
+    </tr>
+  </tbody>
+</table>
+
+<h2 id="降级策略">降级策略</h2>
+<h3 id="概念阐述">概念阐述</h3>
+
+<p>降级策略是当服务请求异常时,微服务所采用的异常处理策略。降级策略有三个相关的技术概念:“隔离”、“熔断”、“容错”:</p>
+
+<p>降级策略有三个相关的技术概念:“隔离”、“熔断”、“容错”:</p>
+<ul>
+  <li>“隔离”是一种异常检测机制,常用的检测方法是请求超时、流量过大等。一般的设置参数包括超时时间、同时并发请求个数等。</li>
+  <li>“熔断”是一种异常反应机制,“熔断”依赖于“隔离”。熔断通常基于错误率来实现。一般的设置参数包括统计请求的个数、错误率等。</li>
+  <li>“容错”是一种异常处理机制,“容错”依赖于“熔断”。熔断以后,会调用“容错”的方法。一般的设置参数包括调用容错方法的次数等。</li>
+</ul>
+
+<p>把这些概念联系起来:当”隔离”措施检测到N次请求中共有M次错误的时候,”熔断”不再发送后续请求,调用”容错”处理函数。这个技术上的定义,是和Netflix Hystrix一致的,通过这个定义,非常容易理解它提供的配置项,参考:<a href="https://github.com/Netflix/Hystrix/wiki/Configuration">https://github.com/Netflix/Hystrix/wiki/Configuration</a>。当前ServiceComb提供两种容错方式,分别为返回null值和抛出异常。</p>
+
+<h3 id="场景描述-2">场景描述</h3>
+
+<p>用户通过配置降级策略,可以设置微服务的异常处理策略。</p>
+
+<h3 id="配置说明-2">配置说明</h3>
+
+<p>  配置项如表所示。</p>
+
+<p>  <strong>表3 降级策略相关配置项说明</strong></p>
+
+<table>
+  <thead>
+    <tr>
+      <th style="text-align: left">配置项</th>
+      <th style="text-align: left">默认值</th>
+      <th style="text-align: left">取值范围</th>
+      <th style="text-align: left">是否必选</th>
+      <th style="text-align: left">含义</th>
+      <th style="text-align: left">注意</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td style="text-align: left">cse.isolation.timeout.enabled</td>
+      <td style="text-align: left">FALSE</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">是否启用超时检测</td>
+      <td style="text-align: left"> </td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.isolation.timeoutInMilliseconds</td>
+      <td style="text-align: left">30000</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">超时时间阈值</td>
+      <td style="text-align: left"> </td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.isolation.maxConcurrentRequests</td>
+      <td style="text-align: left">10</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">最大并发数阈值</td>
+      <td style="text-align: left"> </td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.circuitBreaker.enabled</td>
+      <td style="text-align: left">TRUE</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">是否启用熔断措施</td>
+      <td style="text-align: left"> </td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.circuitBreaker.forceOpen</td>
+      <td style="text-align: left">FALSE</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">不管失败次数,都进行熔断</td>
+      <td style="text-align: left"> </td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.circuitBreaker.forceClosed</td>
+      <td style="text-align: left">FALSE</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">任何时候都不熔断</td>
+      <td style="text-align: left">当与forceOpen同时配置时,forceOpen优先。</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.circuitBreaker.sleepWindowInMilliseconds</td>
+      <td style="text-align: left">15000</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">熔断后,多长时间恢复</td>
+      <td style="text-align: left">恢复后,会重新计算失败情况。注意:如果恢复后的调用立即失败,那么会立即重新进入熔断。</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.circuitBreaker.requestVolumeThreshold</td>
+      <td style="text-align: left">20</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">10s内统计错误发生次数阈值,超过阈值则触发熔断</td>
+      <td style="text-align: left">由于10秒还会被划分为10个1秒的统计周期,经过1s中后才会开始计算错误率,因此从调用开始至少经过1s,才会发生熔断。</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.circuitBreaker.errorThresholdPercentage</td>
+      <td style="text-align: left">50</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">错误率阈值,达到阈值则触发熔断</td>
+      <td style="text-align: left"> </td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.fallback.enabled</td>
+      <td style="text-align: left">TRUE</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">是否启用出错后的故障处理措施</td>
+      <td style="text-align: left"> </td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.fallback.maxConcurrentRequests</td>
+      <td style="text-align: left">10</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">并发调用容错处理措施(cse.fallbackpolicy.policy)的请求数,超过这个值则不再调用处理措施,直接返回异常</td>
+      <td style="text-align: left"> </td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.fallbackpolicy.policy</td>
+      <td style="text-align: left">throwexception</td>
+      <td style="text-align: left">returnnulll | throwexception</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">出错后的处理策略</td>
+      <td style="text-align: left"> </td>
+    </tr>
+  </tbody>
+</table>
+
+<p class="notice--warning"><strong>注意:</strong> 谨慎使用cse.isolation.timeout.enabled=true。因为系统处理链都是异步执行,中间处理链的返回,会导致后面处理链的逻辑处理效果丢失。尽可能将cse.isolation.timeout.enabled保持默认值false,并且正确设置网络层超时时间cse.request.timeout=30000。</p>
+
+<h2 id="示例代码-1">示例代码</h2>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">cse</span><span class="pi">:</span>
+  <span class="s">handler</span><span class="pi">:</span>
+    <span class="s">chain</span><span class="pi">:</span>
+      <span class="s">Consumer</span><span class="pi">:</span>
+        <span class="s">default</span><span class="pi">:</span> <span class="s">bizkeeper-consumer</span>
+  <span class="s">isolation</span><span class="pi">:</span>
+    <span class="s">Consumer</span><span class="pi">:</span>
+      <span class="s">timeout</span><span class="pi">:</span>
+        <span class="s">enabled</span><span class="pi">:</span> <span class="s">true</span>
+      <span class="s">timeoutInMilliseconds</span><span class="pi">:</span> <span class="s">30000</span>
+  <span class="s">circuitBreaker</span><span class="pi">:</span>
+    <span class="s">sleepWindowInMilliseconds</span><span class="pi">:</span> <span class="s">15000</span>
+    <span class="s">requestVolumeThreshold</span><span class="pi">:</span> <span class="s">20</span>
+  <span class="s">fallback</span><span class="pi">:</span>
+    <span class="s">enabled</span><span class="pi">:</span> <span class="s">true</span>
+    <span class="s">policy</span><span class="pi">:</span> <span class="s">throwexception</span>
+</code></pre>
+</div>
+
+<blockquote>
+  <p><strong>说明:</strong>
+降级策略需要启用服务治理能力,对应的服务提供者的handler是<code class="highlighter-rouge">bizkeeper-provider</code>,服务消费者的handler是<code class="highlighter-rouge">bizkeeper-consumer</code>。</p>
+</blockquote>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/service-configurations.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/service-configurations.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/users/service-contract/index.html
----------------------------------------------------------------------
diff --git a/content/users/service-contract/index.html b/content/users/service-contract/index.html
new file mode 100644
index 0000000..179d19d
--- /dev/null
+++ b/content/users/service-contract/index.html
@@ -0,0 +1,801 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>服务契约 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="服务契约">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="服务契约">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/users/service-contract/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/users/service-contract/">
+
+
+
+  <meta property="og:description" content="服务契约">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="服务契约">
+  <meta name="twitter:description" content="服务契约">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/users/service-contract/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">User Guide</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/" class="">Java Chassis Architecture</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/setup-environment/" class="">Setup Environment</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Provider</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-definition/" class="">Service Definition</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-contract/" class="active">Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-springmvc/" class="">Develop Microservice with SpringMVC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-jax-rs/" class="">Develop Microservice with JAX-RS</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-transparent-rpc/" class="">Develop Microservice with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-interface-constraints/" class="">Service Interface Constraints</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-configurations/" class="">Service Configurations</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/communicate-protocol/" class="">Communicate Protocol</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/application-boot-process/" class="">Application Boot Up Process</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-heartbeat/" class="">Service Heartbeat</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Consumer</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rest-template/" class="">Develop with Rest Template</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rpc/" class="">Develop with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-service-contract/" class="">Use Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/invoke-control/" class="">Invoke Control</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">General Development</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/local-develop-test/" class="">Develop and Test in Local Environment</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-servicecomb-in-spring-boot/" class="">Use ServiceComb in Spring Boot</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/distributed-tracing/" class="">Distributed Tracing</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/customized-tracing/" class="">Customized Tracing</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Edging Service</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/nginx/" class="">confd and Nginx</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/zuul/" class="">Zuul</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">Metrics</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Deployment</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/run-mode/" class="">Run Mode</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Security</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-tls/" class="">Use TLS</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="服务契约">
+    <meta itemprop="description" content="服务契约">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">服务契约
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> On This Page</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#概念阐述" id="markdown-toc-概念阐述">概念阐述</a></li>
+  <li><a href="#场景描述" id="markdown-toc-场景描述">场景描述</a></li>
+  <li><a href="#显式契约" id="markdown-toc-显式契约">显式契约</a>    <ul>
+      <li><a href="#配置说明" id="markdown-toc-配置说明">配置说明</a></li>
+      <li><a href="#示例代码" id="markdown-toc-示例代码">示例代码</a></li>
+    </ul>
+  </li>
+  <li><a href="#隐式契约" id="markdown-toc-隐式契约">隐式契约</a>    <ul>
+      <li><a href="#概念阐述-1" id="markdown-toc-概念阐述-1">概念阐述</a></li>
+      <li><a href="#场景描述-1" id="markdown-toc-场景描述-1">场景描述</a></li>
+      <li><a href="#涉及api" id="markdown-toc-涉及api">涉及API</a></li>
+    </ul>
+  </li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="概念阐述">概念阐述</h2>
+
+<p>服务契约,指基于OpenAPI规范的微服务接口契约,是服务端与消费端对于接口的定义。</p>
+
+<h2 id="场景描述">场景描述</h2>
+
+<p>服务契约用于服务端和消费端的解耦,服务端围绕契约进行服务的实现,消费端根据契约进行服务的调用,可支持服务端和消费端采用不同的编程语言实现。</p>
+
+<h2 id="显式契约">显式契约</h2>
+
+<h3 id="配置说明">配置说明</h3>
+
+<p>ServiceComb使用yaml文件格式定义服务契约,推荐使用<a href="http://editor.swagger.io/#/">Swagger Editor</a>工具来编写契约,可检查语法格式及自动生成API文档。详细的契约文件格式请参考<a href="https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md">OpenAPI官方文档</a>。</p>
+
+<p>契约文件放置在”resources/microservices”或者”resources/applications”目录下,目录结构如下所示。</p>
+
+<pre><code class="language-txt">resources
+  - microservices
+    - serviceName #微服务名
+      - schemaId.yaml #schema接口的契约
+  - applications
+    - appId #应用ID
+      - serviceName #微服务名
+        - schemaId.yaml #schema接口的契约
+</code></pre>
+
+<h3 id="示例代码">示例代码</h3>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">swagger</span><span class="pi">:</span> <span class="s1">'</span><span class="s">2.0'</span>
+<span class="s">info</span><span class="pi">:</span>
+  <span class="s">title</span><span class="pi">:</span> <span class="s">hello</span>
+  <span class="s">version</span><span class="pi">:</span> <span class="s">1.0.0</span>
+  <span class="s">x-java-interface</span><span class="pi">:</span> <span class="s">io.servicecomb.samples.common.schema.Hello</span>
+<span class="s">basePath</span><span class="pi">:</span> <span class="s">/springmvchello</span>
+<span class="s">produces</span><span class="pi">:</span>
+  <span class="pi">-</span> <span class="s">application/json</span>
+
+<span class="s">paths</span><span class="pi">:</span>
+  <span class="s">/sayhi</span><span class="pi">:</span>
+    <span class="s">post</span><span class="pi">:</span>
+      <span class="s">operationId</span><span class="pi">:</span> <span class="s">sayHi</span>
+      <span class="s">parameters</span><span class="pi">:</span>
+        <span class="pi">-</span> <span class="s">name</span><span class="pi">:</span> <span class="s">name</span>
+          <span class="s">in</span><span class="pi">:</span> <span class="s">query</span>
+          <span class="s">required</span><span class="pi">:</span> <span class="s">true</span>
+          <span class="s">type</span><span class="pi">:</span> <span class="s">string</span>
+      <span class="s">responses</span><span class="pi">:</span>
+        <span class="s">200</span><span class="pi">:</span>
+          <span class="s">description</span><span class="pi">:</span> <span class="s">正确返回</span>
+          <span class="s">schema</span><span class="pi">:</span>
+            <span class="s">type</span><span class="pi">:</span> <span class="s">string</span>
+        <span class="s">default</span><span class="pi">:</span>
+          <span class="s">description</span><span class="pi">:</span> <span class="s">默认返回</span>
+          <span class="s">schema</span><span class="pi">:</span>
+            <span class="s">type</span><span class="pi">:</span> <span class="s">string</span>
+  <span class="s">/sayhello</span><span class="pi">:</span>
+    <span class="s">post</span><span class="pi">:</span>
+      <span class="s">operationId</span><span class="pi">:</span> <span class="s">sayHello</span>
+      <span class="s">parameters</span><span class="pi">:</span>
+        <span class="pi">-</span> <span class="s">name</span><span class="pi">:</span> <span class="s">person</span>
+          <span class="s">in</span><span class="pi">:</span> <span class="s">body</span>
+          <span class="s">required</span><span class="pi">:</span> <span class="s">true</span>
+          <span class="s">schema</span><span class="pi">:</span>
+            <span class="s">$ref</span><span class="pi">:</span> <span class="s2">"</span><span class="s">#/definitions/Person"</span>
+      <span class="s">responses</span><span class="pi">:</span>
+        <span class="s">200</span><span class="pi">:</span>
+          <span class="s">description</span><span class="pi">:</span> <span class="s">正确返回</span>
+          <span class="s">schema</span><span class="pi">:</span>
+            <span class="s">type</span><span class="pi">:</span> <span class="s">string</span>
+        <span class="s">default</span><span class="pi">:</span>
+          <span class="s">description</span><span class="pi">:</span> <span class="s">默认返回</span>
+          <span class="s">schema</span><span class="pi">:</span>
+            <span class="s">type</span><span class="pi">:</span> <span class="s">string</span>
+<span class="s">definitions</span><span class="pi">:</span>
+  <span class="s">Person</span><span class="pi">:</span>
+    <span class="s">type</span><span class="pi">:</span> <span class="s2">"</span><span class="s">object"</span>
+    <span class="s">properties</span><span class="pi">:</span>
+      <span class="s">name</span><span class="pi">:</span>
+        <span class="s">type</span><span class="pi">:</span> <span class="s2">"</span><span class="s">string"</span>
+        <span class="s">description</span><span class="pi">:</span> <span class="s2">"</span><span class="s">person</span><span class="nv"> </span><span class="s">name"</span>
+    <span class="s">xml</span><span class="pi">:</span>
+      <span class="s">name</span><span class="pi">:</span> <span class="s2">"</span><span class="s">Person"</span>
+</code></pre>
+</div>
+
+<blockquote>
+  <p><strong>注意</strong>:</p>
+  <ul>
+    <li>根据swagger标准,basePath配置的路径需要包括web server的webroot。</li>
+    <li>info.x-java-interface需要标明具体的接口路径,根据项目实际情况而定。</li>
+  </ul>
+</blockquote>
+
+<h2 id="隐式契约">隐式契约</h2>
+<h3 id="概念阐述-1">概念阐述</h3>
+
+<p>  隐式契约是指ServiceComb根据服务实现类自动生成的服务契约。</p>
+
+<h3 id="场景描述-1">场景描述</h3>
+
+<p>  用户通过隐式契约功能,可以不预先定义契约和接口,直接定义实现类,在服务启动时,根据实现类自动生成契约,并注册到服务中心。</p>
+
+<h3 id="涉及api">涉及API</h3>
+
+<p>  隐式契约可用于Spring MVC、JAX-RS、透明RPC三种开发模式,具体使用参见<a href="/users/develop-with-springmvc/">用SpringMVC开发微服务</a>、<a href="/users/develop-with-jax-rs/">用JAX-RS开发微服务</a>和<a href="/users/develop-with-transparent-rpc/">用透明RPC开发微服务</a>。</p>
+
+<p>  使用透明RPC模式开发微服务时,由于从代码上无法分辨微服务开发人员期望如何定义契约,所以生成的契约全是POST方法,所有method的入参被包装为一个class,作为body参数传递,所以建议使用隐式契约开发provider时,选择SpringMVC或JAX-RS开发模式,可以得到完整的RESTful声明。</p>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/define-service-contract.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/define-service-contract.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/users/service-definition/index.html
----------------------------------------------------------------------
diff --git a/content/users/service-definition/index.html b/content/users/service-definition/index.html
new file mode 100644
index 0000000..3469fbb
--- /dev/null
+++ b/content/users/service-definition/index.html
@@ -0,0 +1,793 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>服务定义 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="服务定义">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="服务定义">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/users/service-definition/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/users/service-definition/">
+
+
+
+  <meta property="og:description" content="服务定义">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="服务定义">
+  <meta name="twitter:description" content="服务定义">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/users/service-definition/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">User Guide</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/" class="">Java Chassis Architecture</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/setup-environment/" class="">Setup Environment</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Provider</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-definition/" class="active">Service Definition</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-contract/" class="">Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-springmvc/" class="">Develop Microservice with SpringMVC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-jax-rs/" class="">Develop Microservice with JAX-RS</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-transparent-rpc/" class="">Develop Microservice with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-interface-constraints/" class="">Service Interface Constraints</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-configurations/" class="">Service Configurations</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/communicate-protocol/" class="">Communicate Protocol</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/application-boot-process/" class="">Application Boot Up Process</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-heartbeat/" class="">Service Heartbeat</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Consumer</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rest-template/" class="">Develop with Rest Template</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rpc/" class="">Develop with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-service-contract/" class="">Use Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/invoke-control/" class="">Invoke Control</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">General Development</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/local-develop-test/" class="">Develop and Test in Local Environment</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-servicecomb-in-spring-boot/" class="">Use ServiceComb in Spring Boot</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/distributed-tracing/" class="">Distributed Tracing</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/customized-tracing/" class="">Customized Tracing</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Edging Service</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/nginx/" class="">confd and Nginx</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/zuul/" class="">Zuul</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">Metrics</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Deployment</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/run-mode/" class="">Run Mode</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Security</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-tls/" class="">Use TLS</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="服务定义">
+    <meta itemprop="description" content="服务定义">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">服务定义
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> On This Page</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#概念阐述" id="markdown-toc-概念阐述">概念阐述</a></li>
+  <li><a href="#场景描述" id="markdown-toc-场景描述">场景描述</a></li>
+  <li><a href="#配置说明" id="markdown-toc-配置说明">配置说明</a></li>
+  <li><a href="#示例代码" id="markdown-toc-示例代码">示例代码</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="概念阐述">概念阐述</h2>
+
+<p>服务定义信息是微服务的身份标识,它定义了服务从属于哪个应用,以及名字和版本。服务定义信息中也可以有扩展信息,用于定义服务的属性元数据。</p>
+
+<h2 id="场景描述">场景描述</h2>
+
+<p>当用户定义新的微服务或修改微服务的基本信息时,会涉及到服务定义信息的创建和修改操作。</p>
+
+<h2 id="配置说明">配置说明</h2>
+
+<p>介绍涉及microservice.yaml文件的以下配置项,文件在项目中的存放路径为src/main/resources/microservice.yaml。</p>
+
+<table>
+  <thead>
+    <tr>
+      <th style="text-align: left">配置项</th>
+      <th style="text-align: left">默认值</th>
+      <th style="text-align: left">取值范围</th>
+      <th style="text-align: left">是否必选</th>
+      <th style="text-align: left">含义</th>
+      <th style="text-align: left">注意</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td style="text-align: left">APPLICATION_ID</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">是</td>
+      <td style="text-align: left">应用名</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">service_description.name</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">是</td>
+      <td style="text-align: left">微服务名</td>
+      <td style="text-align: left">应确保app内部唯一。微服务名支持数字、大小写字母和”-“、”_“、”.”三个特殊字符,但是不能以特殊字符作为首尾字符,命名规范为:^[a-zA-Z0-9]+$|^[a-zA-Z0-9][a-zA-Z0-9_-.]*[a-zA-Z0-9]$。</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">service_description.version</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">是</td>
+      <td style="text-align: left">微服务版本号</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">service_description.properties</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">微服务元数据配置(通过microservice.yaml文件进行配置)</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">service_description.propertyExtendedClass</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">微服务元数据配置(通过实现接口PropertyExtended进行配置)</td>
+      <td style="text-align: left">接口返回的配置会覆盖配置文件中key相同的配置。</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">instance_description.properties</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">服务实例元数据配置(通过microservice.yaml文件进行配置)</td>
+      <td style="text-align: left"> </td>
+    </tr>
+    <tr>
+      <td style="text-align: left">instance_description.propertyExtendedClass</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">微服务元数据配置(通过实现接口PropertyExtended进行配置)</td>
+      <td style="text-align: left">同service_description.propertyExtendedClass</td>
+    </tr>
+  </tbody>
+</table>
+
+<blockquote>
+  <p>说明:</p>
+  <ul>
+    <li>服务的元数据会随服务一同注册到服务中心,如需修改,则要连同服务version一起变更。若想保持服务version不变,则需要通过服务管理中心统一变更元数据。</li>
+    <li>默认情况下,微服务只支持同一个app内部的服务调用。可在微服务的properties中配置allowCrossApp=true属性,开启可被跨app访问权限。</li>
+  </ul>
+</blockquote>
+
+<h2 id="示例代码">示例代码</h2>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">APPLICATION_ID</span><span class="pi">:</span> <span class="s">helloTest</span> <span class="c1">#应用名</span>
+<span class="s">service_description</span><span class="pi">:</span> <span class="c1">#服务描述</span>
+  <span class="s">name</span><span class="pi">:</span> <span class="s">helloServer</span> <span class="c1">#微服务名称</span>
+  <span class="s">version</span><span class="pi">:</span> <span class="s">0.0.1</span> <span class="c1">#服务版本号</span>
+  <span class="s">properties</span><span class="pi">:</span> <span class="c1">#元数据</span>
+<span class="err"> </span><span class="s">   allowCrossApp</span><span class="pi">:</span> <span class="s">false</span>
+ <span class="s">   key1</span><span class="pi">:</span> <span class="s">value1</span>
+    <span class="s">key2</span><span class="pi">:</span> <span class="s">value2</span>
+  <span class="s">propertyExtentedClass</span><span class="pi">:</span> <span class="s">io.servicecomb.serviceregistry.MicroServicePropertyExtendedStub</span>
+<span class="s">instance_description</span><span class="pi">:</span> <span class="c1">#实例描述</span>
+  <span class="s">properties</span><span class="pi">:</span> <span class="c1">#元数据</span>
+    <span class="s">key3</span><span class="pi">:</span> <span class="s">value3</span>
+  <span class="s">propertyExtentedClass</span><span class="pi">:</span> <span class="s">io.servicecomb.serviceregistry.MicroServicePropertyExtendedStub</span>
+</code></pre>
+</div>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/service-definition.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/service-definition.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>


[05/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/users/edging-service/zuul/index.html
----------------------------------------------------------------------
diff --git a/content/users/edging-service/zuul/index.html b/content/users/edging-service/zuul/index.html
new file mode 100644
index 0000000..732cf1c
--- /dev/null
+++ b/content/users/edging-service/zuul/index.html
@@ -0,0 +1,839 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>使用Zuul做边缘服务 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="使用Zuul做边缘服务">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="使用Zuul做边缘服务">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/users/edging-service/zuul/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/users/edging-service/zuul/">
+
+
+
+  <meta property="og:description" content="使用Zuul做边缘服务">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="使用Zuul做边缘服务">
+  <meta name="twitter:description" content="使用Zuul做边缘服务">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/users/edging-service/zuul/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">User Guide</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/" class="">Java Chassis Architecture</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/setup-environment/" class="">Setup Environment</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Provider</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-definition/" class="">Service Definition</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-contract/" class="">Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-springmvc/" class="">Develop Microservice with SpringMVC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-jax-rs/" class="">Develop Microservice with JAX-RS</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-transparent-rpc/" class="">Develop Microservice with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-interface-constraints/" class="">Service Interface Constraints</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-configurations/" class="">Service Configurations</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/communicate-protocol/" class="">Communicate Protocol</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/application-boot-process/" class="">Application Boot Up Process</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-heartbeat/" class="">Service Heartbeat</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Consumer</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rest-template/" class="">Develop with Rest Template</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rpc/" class="">Develop with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-service-contract/" class="">Use Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/invoke-control/" class="">Invoke Control</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">General Development</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/local-develop-test/" class="">Develop and Test in Local Environment</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-servicecomb-in-spring-boot/" class="">Use ServiceComb in Spring Boot</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/distributed-tracing/" class="">Distributed Tracing</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/customized-tracing/" class="">Customized Tracing</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Edging Service</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/nginx/" class="">confd and Nginx</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/zuul/" class="active">Zuul</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">Metrics</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Deployment</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/run-mode/" class="">Run Mode</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Security</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-tls/" class="">Use TLS</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="使用Zuul做边缘服务">
+    <meta itemprop="description" content="使用Zuul做边缘服务">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">使用Zuul做边缘服务
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> On This Page</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#概念阐述" id="markdown-toc-概念阐述">概念阐述</a>    <ul>
+      <li><a href="#api-gateway" id="markdown-toc-api-gateway">API Gateway:</a></li>
+      <li><a href="#zuul" id="markdown-toc-zuul">Zuul</a></li>
+    </ul>
+  </li>
+  <li><a href="#场景描述" id="markdown-toc-场景描述">场景描述</a></li>
+  <li><a href="#注意事项" id="markdown-toc-注意事项">注意事项</a></li>
+  <li><a href="#启动zuul-proxy" id="markdown-toc-启动zuul-proxy">启动Zuul Proxy</a></li>
+  <li><a href="#使用zuul-proxy" id="markdown-toc-使用zuul-proxy">使用Zuul Proxy</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="概念阐述">概念阐述</h2>
+
+<h3 id="api-gateway">API Gateway:</h3>
+
+<p>API Gateway是一个服务器,也可以说是进入系统的唯一节点。API Gateway封装内部系统的架构,并且提供API给各个客户端。</p>
+
+<h3 id="zuul">Zuul</h3>
+
+<p>Zuul是Netflix的基于JVM的路由器和服务器端负载均衡器,可以使用Zuul进行以下操作:</p>
+
+<ul>
+  <li>认证</li>
+  <li>洞察</li>
+  <li>压力测试</li>
+  <li>金丝雀测试</li>
+  <li>动态路由</li>
+  <li>服务迁移</li>
+  <li>负载脱落</li>
+  <li>安全</li>
+  <li>静态相响应处理</li>
+  <li>主动/被动流量管理</li>
+</ul>
+
+<p>本小节主要介绍在SpringBoot应用中使用Zuul做API Gateway。关于Zuul的详细功能介绍请参考文档<a href="https://springcloud.cc/spring-cloud-dalston.html#_router_and_filter_zuul">路由器和过滤器:Zuul</a>。</p>
+
+<h2 id="场景描述">场景描述</h2>
+
+<p>Zuul做API Gateway,即建立一个Zuul Proxy应用,在该Proxy应用中统一定义所有的微服务访问入口,通过使用不同的前缀(stripped)来区分各个微服务。本小节通过建立一个ZuulProxy SpringBoot应用来演示Zuul的API Gateway功能。</p>
+
+<h2 id="注意事项">注意事项</h2>
+
+<p>本小节介绍的ZuulProxy和ZuulServer等demo都是基于SpringBoot和ServiceComb框架的应用,具体请参考<a href="/users/use-servicecomb-in-spring-boot/">在ServiceComb框架中集成SpringBoot框架</a>。</p>
+
+<h2 id="启动zuul-proxy">启动Zuul Proxy</h2>
+
+<p>本节介绍如何启动一个zuul proxy应用作为API Gateway。步骤如下:</p>
+
+<ul>
+  <li>
+    <p><strong>步骤 1</strong>在pom文件中添加依赖:</p>
+
+    <div class="language-xml highlighter-rouge"><pre class="highlight"><code> <span class="nt">&lt;dependency&gt;</span> 
+   <span class="nt">&lt;groupId&gt;</span>org.springframework.cloud<span class="nt">&lt;/groupId&gt;</span>  
+   <span class="nt">&lt;artifactId&gt;</span>spring-cloud-starter-zuul<span class="nt">&lt;/artifactId&gt;</span> 
+ <span class="nt">&lt;/dependency&gt;</span>
+ <span class="nt">&lt;dependency&gt;</span> 
+   <span class="nt">&lt;groupId&gt;</span>org.springframework.cloud<span class="nt">&lt;/groupId&gt;</span>  
+   <span class="nt">&lt;artifactId&gt;</span>spring-cloud-starter-ribbon<span class="nt">&lt;/artifactId&gt;</span> 
+ <span class="nt">&lt;/dependency&gt;&lt;dependency&gt;</span> 
+   <span class="nt">&lt;groupId&gt;</span>org.springframework.cloud<span class="nt">&lt;/groupId&gt;</span>  
+   <span class="nt">&lt;artifactId&gt;</span>spring-cloud-starter-hystrix<span class="nt">&lt;/artifactId&gt;</span> 
+ <span class="nt">&lt;/dependency&gt;</span>
+ <span class="nt">&lt;dependency&gt;</span> 
+   <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>  
+   <span class="nt">&lt;artifactId&gt;</span>spring-boot-starter-discovery<span class="nt">&lt;/artifactId&gt;</span> 
+ <span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>步骤 2</strong>在SpringBoot主类添加注解:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="nd">@SpringBootApplication</span>
+ <span class="nd">@EnableServiceComb</span>
+ <span class="nd">@EnableZuulProxy</span><span class="c1">//新增注解</span>
+ <span class="kd">public</span> <span class="kd">class</span> <span class="nc">ZuulMain</span><span class="o">{</span>
+ <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span><span class="o">{</span>
+     <span class="n">SpringApplication</span><span class="o">.</span><span class="na">run</span><span class="o">(</span><span class="n">ZuulMain</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">args</span><span class="o">);</span>
+   <span class="o">}</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>步骤 3</strong>在application.yml文件中定义路由策略:</p>
+
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code> <span class="s">server</span><span class="pi">:</span>
+   <span class="s">port</span><span class="pi">:</span> <span class="s">8754</span> <span class="c1">#api gateway服务端口</span>
+ <span class="s">zuul</span><span class="pi">:</span>
+   <span class="s">routes</span><span class="pi">:</span> <span class="c1">#路由策略</span>
+     <span class="s">discoveryServer</span><span class="pi">:</span> <span class="s">/myServer/**</span> <span class="c1">#路由规则</span>
+</code></pre>
+    </div>
+
+    <p>上述的配置项可以根据实际开发环境进行配置。关于zuul.routers的路由策略的详细定义规则,请参考官方文献:<a href="https://springcloud.cc/spring-cloud-dalston.html#_router_and_filter_zuul">路由器和过滤器:Zuul</a>,可更细粒度地对路由进行控制。</p>
+  </li>
+  <li>
+    <p><strong>步骤 4</strong>在microservice.yaml定义微服务属性:</p>
+
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code> <span class="s">APPLICATION_ID</span><span class="pi">:</span> <span class="s">discoverytest</span> <span class="c1">#服务ID</span>
+ <span class="s">service_description</span><span class="pi">:</span>
+   <span class="s">name</span><span class="pi">:</span> <span class="s">discoveryGateway</span> <span class="c1">#服务名称</span>
+   <span class="s">version</span><span class="pi">:</span> <span class="s">0.0.2</span> <span class="c1">#服务版本号</span>
+ <span class="s">cse</span><span class="pi">:</span>
+   <span class="s">service</span><span class="pi">:</span>
+     <span class="s">registry</span><span class="pi">:</span>
+       <span class="s">address</span><span class="pi">:</span> <span class="s">http://127.0.0.1:30100</span>  <span class="c1">#服务注册中心地址</span>
+   <span class="s">rest</span><span class="pi">:</span>
+     <span class="s">address</span><span class="pi">:</span> <span class="s">0.0.0.0:8082</span> <span class="c1">#微服务端口,可不写</span>
+</code></pre>
+    </div>
+  </li>
+</ul>
+
+<p>本小节所有服务使用的都是本地的服务中心,具体的服务中心启动流程请参考<a href="/users/setup-environment/#运行service-center">启动本地服务中心</a>。</p>
+
+<ul>
+  <li><strong>步骤 5 </strong>运行ZuulMain 应用</li>
+</ul>
+
+<h2 id="使用zuul-proxy">使用Zuul Proxy</h2>
+
+<p>在使用zuul做的API Gateway前,首先要启动在zuul.routers中定义的微服务提供者。</p>
+
+<p>开发服务提供者,开发流程请参考<a href="/users/service-definition/">开发服务提供者</a>。在微服务microservice.yaml文件中需注意以下两点:</p>
+
+<ul>
+  <li>
+    <p>APPLICATION_ID需要于zuul proxy中定义的保持一致。</p>
+  </li>
+  <li>
+    <p>service_description.name需要于zuul.routers中相对应。</p>
+  </li>
+</ul>
+
+<p>示例如下:</p>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">APPLICATION_ID</span><span class="pi">:</span> <span class="s">discoverytest</span> <span class="c1">#与zuul proxy一致</span>
+  <span class="s">service_description</span><span class="pi">:</span>
+    <span class="s">name</span><span class="pi">:</span> <span class="s">discoveryServer</span> <span class="c1">#服务名称,与zuul.routers对应</span>
+    <span class="s">version</span><span class="pi">:</span> <span class="s">0.0.2</span>
+<span class="s">cse</span><span class="pi">:</span>
+  <span class="s">service</span><span class="pi">:</span>
+    <span class="s">registry</span><span class="pi">:</span>
+      <span class="s">address</span><span class="pi">:</span> <span class="s">http://127.0.0.1:30100</span> <span class="c1">#服务注册中心地址</span>
+  <span class="s">rest</span><span class="pi">:</span>
+    <span class="s">address</span><span class="pi">:</span> <span class="s">0.0.0.0:8080</span>
+</code></pre>
+</div>
+
+<p>API Gateway的访问入口为:<a href="http://127.0.0.1:8754">http://127.0.0.1:8754</a>,所有在zuul.routers中定义的服务都可通过这个访问入口进行代理访问,访问规则如下:</p>
+
+<p>http://127.0.0.1:8754/myServer/***](http://127.0.0.1:8754/myServer/***)</p>
+
+<p>这表示,Http调用<a href="http://127.0.0.1:8754/myServer/***">http://127.0.0.1:8754/myServer/***</a>,会转到discoveryServer服务(例如:”/myServer/101”跳转到discoveryServer 服务下的”/101”)</p>
+
+<blockquote>
+  <p>如果在服务中心同时存在多个discoveryServer服务(版本不同),zuul默认采用Ribbon策略对请求进行转发。</p>
+</blockquote>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/zuul.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/zuul.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/users/faq/index.html
----------------------------------------------------------------------
diff --git a/content/users/faq/index.html b/content/users/faq/index.html
new file mode 100644
index 0000000..5c02588
--- /dev/null
+++ b/content/users/faq/index.html
@@ -0,0 +1,734 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>FAQ - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="FAQ">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="FAQ">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/users/faq/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/users/faq/">
+
+
+
+  <meta property="og:description" content="FAQ">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="FAQ">
+  <meta name="twitter:description" content="FAQ">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/users/faq/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">User Guide</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/" class="">Java Chassis Architecture</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/setup-environment/" class="">Setup Environment</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Provider</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-definition/" class="">Service Definition</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-contract/" class="">Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-springmvc/" class="">Develop Microservice with SpringMVC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-jax-rs/" class="">Develop Microservice with JAX-RS</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-transparent-rpc/" class="">Develop Microservice with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-interface-constraints/" class="">Service Interface Constraints</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-configurations/" class="">Service Configurations</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/communicate-protocol/" class="">Communicate Protocol</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/application-boot-process/" class="">Application Boot Up Process</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-heartbeat/" class="">Service Heartbeat</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Consumer</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rest-template/" class="">Develop with Rest Template</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rpc/" class="">Develop with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-service-contract/" class="">Use Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/invoke-control/" class="">Invoke Control</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">General Development</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/local-develop-test/" class="">Develop and Test in Local Environment</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-servicecomb-in-spring-boot/" class="">Use ServiceComb in Spring Boot</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/distributed-tracing/" class="">Distributed Tracing</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/customized-tracing/" class="">Customized Tracing</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Edging Service</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/nginx/" class="">confd and Nginx</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/zuul/" class="">Zuul</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">Metrics</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Deployment</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/run-mode/" class="">Run Mode</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Security</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-tls/" class="">Use TLS</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="FAQ">
+    <meta itemprop="description" content="FAQ">
+    
+    <meta itemprop="dateModified" content="June 06, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">FAQ
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <ol>
+  <li>
+    <p><strong>Q: What need to be cautious when using Java-Chassis?</strong></p>
+
+    <p>A: There are a few restrictions when using Java-Chassis:</p>
+    <ul>
+      <li>Before version 0.3.0-SNAPSHOT, it does not support annotations like <code class="highlighter-rouge">@GetMapping</code>.</li>
+      <li>When using the same HTTP request method, e.g. GET, the method name need to be unique as it will become operation ID when swagger generates contracts.</li>
+      <li>Class and method name need to be public.</li>
+    </ul>
+  </li>
+  <li>
+    <p><strong>Q: When using the <em>spring-boot-starter-provider</em> dependency, property like <code class="highlighter-rouge">spring.main.web-environment</code> not working in <em>application.yml</em> file.</strong></p>
+
+    <p>A: When you need both the starter provider dependency and the servlet, you need to declare <code class="highlighter-rouge">spring.main.web-environment</code> in <em>application.properties</em> file or declare it in <em>application.yml</em> file and create an empty <em>application.properties</em> file.</p>
+  </li>
+  <li>
+    <p><strong>Q: What’s the dependency differences between gateway and other microservices?</strong></p>
+
+    <div class="language-xml highlighter-rouge"><pre class="highlight"><code><span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+<span class="nt">&lt;artifactId&gt;</span>spring-boot-starter-provider<span class="nt">&lt;/artifactId&gt;</span>
+</code></pre>
+    </div>
+
+    <p>A: Gateway depends on not only the <code class="highlighter-rouge">spring-boot-starter-provider</code>, but also the <code class="highlighter-rouge">spring-boot-starter-discovery</code>. This can refer to the <em>manger</em> implementation of <a href="https://github.com/ServiceComb/LinuxCon-Beijing-WorkShop">LinuxCon-Beijing-Workshop</a>.</p>
+  </li>
+  <li>
+    <p><strong>Q: Do gateway need to configure assembly like the other microservices? Is <em>/maven/gateway</em> the default path of the docker maven plugin?</strong></p>
+
+    <p>A: Yes. Docker maven plugin relies on the assembly files to generate docker image. <em>/maven</em> is the default path of docker maven plugin and <em>/gateway</em> is the path defined in the assembly file.</p>
+  </li>
+  <li>
+    <p><strong>Q: Are there any restrictions of the return type of our API? Should it be the type of ResponseEntity?</strong></p>
+
+    <p>A: No, examples can refer to <a href="https://github.com/ServiceComb/java-chassis/blob/master/integration-tests/springmvc-tests/src/test/java/io/servicecomb/demo/springmvc/tests/SpringMvcIntegrationTestBase.java#L145">the implementation of integration-test</a> in java-chassis.</p>
+  </li>
+  <li>
+    <p><strong>Q: Our API can not be accessed after microservices are up. It just returns <em>404 Not Found</em>. The codes we use is as follows:</strong></p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@RestController</span>
+<span class="nd">@RestSchema</span><span class="o">(</span><span class="n">schemaId</span> <span class="o">=</span> <span class="s">"worker"</span><span class="o">)</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">WorkerController</span> <span class="o">{</span>
+  <span class="nd">@RequestMapping</span><span class="o">(</span><span class="n">value</span><span class="o">=</span><span class="s">"/count"</span><span class="o">,</span> <span class="n">method</span><span class="o">=</span><span class="n">RequestMethod</span><span class="o">.</span><span class="na">GET</span><span class="o">)</span>
+  <span class="kd">public</span> <span class="kt">int</span> <span class="nf">getWorkerNumbers</span><span class="o">()</span> <span class="o">{</span>
+    <span class="o">...</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+    </div>
+
+    <p>A: Without specifying the base path, ServiceComb will use the classname as the base path. Hence, the path should be <code class="highlighter-rouge">/WorkerController/count</code> in the previous code. If you want to access path like <code class="highlighter-rouge">/count</code>, you need to specify base path as <code class="highlighter-rouge">/</code> as follows:</p>
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@RequestMapping</span><span class="o">(</span><span class="n">value</span> <span class="o">=</span> <span class="s">"/"</span><span class="o">)</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">WorkerController</span> <span class="o">{}</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>Q: What's the default base path if I have not declared the value of RequestMapping annotation?</strong></p>
+
+    <p>A: Supposed the class name of your controller is <em>HelloController</em>, the base path is /HelloController.</p>
+  </li>
+</ol>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/faq.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/faq.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/users/huawei-cloud-faq/index.html
----------------------------------------------------------------------
diff --git a/content/users/huawei-cloud-faq/index.html b/content/users/huawei-cloud-faq/index.html
new file mode 100644
index 0000000..ebd1378
--- /dev/null
+++ b/content/users/huawei-cloud-faq/index.html
@@ -0,0 +1,707 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>Huawei Cloud FAQ - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="Huawei Cloud FAQ">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="Huawei Cloud FAQ">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/users/huawei-cloud-faq/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/users/huawei-cloud-faq/">
+
+
+
+  <meta property="og:description" content="Huawei Cloud FAQ">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="Huawei Cloud FAQ">
+  <meta name="twitter:description" content="Huawei Cloud FAQ">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/users/huawei-cloud-faq/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">User Guide</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/" class="">Java Chassis Architecture</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/setup-environment/" class="">Setup Environment</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Provider</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-definition/" class="">Service Definition</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-contract/" class="">Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-springmvc/" class="">Develop Microservice with SpringMVC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-jax-rs/" class="">Develop Microservice with JAX-RS</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-transparent-rpc/" class="">Develop Microservice with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-interface-constraints/" class="">Service Interface Constraints</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-configurations/" class="">Service Configurations</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/communicate-protocol/" class="">Communicate Protocol</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/application-boot-process/" class="">Application Boot Up Process</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-heartbeat/" class="">Service Heartbeat</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Consumer</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rest-template/" class="">Develop with Rest Template</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rpc/" class="">Develop with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-service-contract/" class="">Use Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/invoke-control/" class="">Invoke Control</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">General Development</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/local-develop-test/" class="">Develop and Test in Local Environment</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-servicecomb-in-spring-boot/" class="">Use ServiceComb in Spring Boot</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/distributed-tracing/" class="">Distributed Tracing</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/customized-tracing/" class="">Customized Tracing</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Edging Service</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/nginx/" class="">confd and Nginx</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/zuul/" class="">Zuul</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">Metrics</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Deployment</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/run-mode/" class="">Run Mode</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Security</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-tls/" class="">Use TLS</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="Huawei Cloud FAQ">
+    <meta itemprop="description" content="Huawei Cloud FAQ">
+    
+    <meta itemprop="dateModified" content="June 06, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">Huawei Cloud FAQ
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <ol>
+  <li>
+    <p><strong>Q: When we push images to Huawei Public Cloud, what needs to be careful about the image tag?</strong></p>
+
+    <p>A:  It needs to be different with all uploaded images. As Docker does not pull image from remote every time it starts up a container. Hence, the Docker does not know whether the image updated or not. There are two solutions for this:</p>
+
+    <p>(1) Use different image tag every time you upload a image.</p>
+
+    <p>(2) Delete the image in the backend manually.</p>
+
+    <p>P.S. If you use the Huawei Cloud’s orchestration, you can avoid this by setting <em>imagePullPolicy</em> to <em>Always</em>.</p>
+  </li>
+  <li>
+    <p><strong>Q: We encountered this error when using Huawei Public Cloud: <em>WARN com.huaewi.paas.monitor.DataFactory: Upload monitor data error.</em> The configuration we use is as follows:</strong></p>
+
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">cse</span><span class="pi">:</span>
+  <span class="s">monitor</span><span class="pi">:</span>
+    <span class="s">handler</span><span class="pi">:</span>
+      <span class="s">chain</span><span class="pi">:</span>
+        <span class="s">Provider</span><span class="pi">:</span>
+          <span class="s">default</span><span class="pi">:</span> <span class="s">bizkeeper-provider</span>
+</code></pre>
+    </div>
+
+    <p>A: There are mistakes in your configuration files. <code class="highlighter-rouge">handler</code> should be the child of <code class="highlighter-rouge">cse</code> instead of <code class="highlighter-rouge">monitor</code>. The right configuration should be as follows:</p>
+
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">cse</span><span class="pi">:</span>
+  <span class="s">handler</span><span class="pi">:</span>
+    <span class="s">chain</span><span class="pi">:</span>
+      <span class="s">Provider</span><span class="pi">:</span>
+        <span class="s">default</span><span class="pi">:</span> <span class="s">bizkeeper-provider</span>
+</code></pre>
+    </div>
+  </li>
+</ol>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/huawei-cloud-faq.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/huawei-cloud-faq.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/users/index.html
----------------------------------------------------------------------
diff --git a/content/users/index.html b/content/users/index.html
new file mode 100644
index 0000000..21f9ca6
--- /dev/null
+++ b/content/users/index.html
@@ -0,0 +1,765 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>Java Chassis系统架构 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="Java Chassis系统架构">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="Java Chassis系统架构">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/users/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/users/">
+
+
+
+  <meta property="og:description" content="Java Chassis系统架构">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="Java Chassis系统架构">
+  <meta name="twitter:description" content="Java Chassis系统架构">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/users/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">User Guide</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/" class="active">Java Chassis Architecture</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/setup-environment/" class="">Setup Environment</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Provider</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-definition/" class="">Service Definition</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-contract/" class="">Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-springmvc/" class="">Develop Microservice with SpringMVC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-jax-rs/" class="">Develop Microservice with JAX-RS</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-transparent-rpc/" class="">Develop Microservice with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-interface-constraints/" class="">Service Interface Constraints</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-configurations/" class="">Service Configurations</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/communicate-protocol/" class="">Communicate Protocol</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/application-boot-process/" class="">Application Boot Up Process</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-heartbeat/" class="">Service Heartbeat</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Consumer</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rest-template/" class="">Develop with Rest Template</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rpc/" class="">Develop with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-service-contract/" class="">Use Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/invoke-control/" class="">Invoke Control</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">General Development</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/local-develop-test/" class="">Develop and Test in Local Environment</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-servicecomb-in-spring-boot/" class="">Use ServiceComb in Spring Boot</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/distributed-tracing/" class="">Distributed Tracing</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/customized-tracing/" class="">Customized Tracing</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Edging Service</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/nginx/" class="">confd and Nginx</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/zuul/" class="">Zuul</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">Metrics</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Deployment</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/run-mode/" class="">Run Mode</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Security</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-tls/" class="">Use TLS</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="Java Chassis系统架构">
+    <meta itemprop="description" content="Java Chassis系统架构">
+    
+    <meta itemprop="dateModified" content="June 14, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">Java Chassis系统架构
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> On This Page</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#框架概述" id="markdown-toc-框架概述">框架概述</a></li>
+  <li><a href="#主要设计意图" id="markdown-toc-主要设计意图">主要设计意图</a></li>
+  <li><a href="#模块说明" id="markdown-toc-模块说明">模块说明</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="框架概述">框架概述</h2>
+<p><img src="/assets/images/servicecomb-models.png" alt="ServiceComb Model" class="align-center" /></p>
+
+<h2 id="主要设计意图">主要设计意图</h2>
+
+<p>1.编程模型和通信模型分离,不同的编程模型可以灵活组合不同的通信模型。应用开发者在开发阶段只关注接口开发,部署阶段灵活切换通信方式;支持legacy系统的切换,legacy系统只需要修改服务发布的配置文件(或者annotation),而不需要修改代码。</p>
+
+<p>现阶段支持SpringMVC、JAX-RS和透明RPC三种开发方式。</p>
+
+<p>2.内建API-first支持。通过契约规范化微服务开发,实现跨语言的通信,并支持配套的软件工具链(契约生成代码、代码生成契约等)开发,构建完整的开发生态。</p>
+
+<p>3.定义了常用的微服务运行模型,将微服务从发现到交互过程中的各种容错手段都封装起来。该运行模型支持自定义和扩展。</p>
+
+<h2 id="模块说明">模块说明</h2>
+
+<table>
+  <thead>
+    <tr>
+      <th style="text-align: left">类型</th>
+      <th style="text-align: left">artifact id</th>
+      <th style="text-align: left">是否可选</th>
+      <th style="text-align: left">功能说明</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td style="text-align: left">编程模型</td>
+      <td style="text-align: left">provider-pojo</td>
+      <td style="text-align: left">是</td>
+      <td style="text-align: left">提供RPC开发模式</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">编程模型</td>
+      <td style="text-align: left">provider-jaxrs</td>
+      <td style="text-align: left">是</td>
+      <td style="text-align: left">提供JAX RS开发模式</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">编程模型</td>
+      <td style="text-align: left">provider-springmvc</td>
+      <td style="text-align: left">是</td>
+      <td style="text-align: left">提供Spring MVC开发模式</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">通信模型</td>
+      <td style="text-align: left">transport-rest-vertx</td>
+      <td style="text-align: left">是</td>
+      <td style="text-align: left">运行于HTTP之上的开发框架,不依赖WEB容器,应用打包为可执行jar</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">通信模型</td>
+      <td style="text-align: left">transport-rest-servlet</td>
+      <td style="text-align: left">是</td>
+      <td style="text-align: left">运行于WEB容器的开发框架,应用打包为war包</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">通信模型</td>
+      <td style="text-align: left">transport-highway</td>
+      <td style="text-align: left">是</td>
+      <td style="text-align: left">提供高性能的私有通信协议,仅用于java之间互通。</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">运行模型</td>
+      <td style="text-align: left">handler-loadbalance</td>
+      <td style="text-align: left">是</td>
+      <td style="text-align: left">负载均衡模块。提供各种路由策略和配置方法。一般客户端使用。</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">运行模型</td>
+      <td style="text-align: left">handler-bizkeeper</td>
+      <td style="text-align: left">是</td>
+      <td style="text-align: left">和服务治理相关的功能,比如隔离、熔断、容错。</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">运行模型</td>
+      <td style="text-align: left">handler-tracing</td>
+      <td style="text-align: left">是</td>
+      <td style="text-align: left">调用链跟踪模块,对接监控系统,吐出打点数据。</td>
+    </tr>
+  </tbody>
+</table>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/servicecomb-introduction.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/servicecomb-introduction.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>


[31/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/faqs/index.html
----------------------------------------------------------------------
diff --git a/content/cn/faqs/index.html b/content/cn/faqs/index.html
new file mode 100644
index 0000000..c2f5923
--- /dev/null
+++ b/content/cn/faqs/index.html
@@ -0,0 +1,988 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>常见问题 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="常见问题">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="常见问题">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/faqs/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/faqs/">
+
+
+
+  <meta property="og:description" content="常见问题">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="常见问题">
+  <meta name="twitter:description" content="常见问题">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/faqs/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/faqs/"><span class="nav__sub-title nav__sub-title-with-url">常见问题</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/faqs/faqs-huawei-cloud/"><span class="nav__sub-title nav__sub-title-with-url">华为公有云常见问题</span></a>
+        
+
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="常见问题">
+    <meta itemprop="description" content="常见问题">
+    
+    <meta itemprop="dateModified" content="October 29, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">常见问题
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <ul>
+  <li>
+    <p><strong>Q: ServiceComb和SpringCloud是什么关系,具体的应用场景是什么?</strong></p>
+
+    <p>A: ServiceComb是华为基于内部多个大型IT系统实践提炼出来的一套微服务开发框架,在开发态基于最佳实践封装了一套微服务运行模型,这些能力对用户完全透明,可以通过配置引入功能和对其进行调整。在运维阶段充分考虑了微服务运维,提供了丰富的监控指标和动态治理能力。    <br />
+ B: ServiceComb的这套能力可以作为一个单独的开发框架,在需要轻量级微服务解决方案的的场景中单独使用,也可以建立在SpringCloud上,与SpringCloud提供的其他组件一起工作,在重量级场景中和SpringCloud一起产生 “1+1大于2”的效果。</p>
+  </li>
+  <li>
+    <p><strong>Q: 用IntelliJ的免费版开发,有什么问题?</strong></p>
+
+    <p>A: 没有问题,使用IntelliJ 开发,可参考 <a href="/cn/developers/setup-develop-environment/">Setup Developer Environment</a> 进行相应的环境配置。</p>
+  </li>
+  <li>
+    <p><strong>Q: 使用Java-Chassis这个框架时有什么需要注意的地方?</strong></p>
+
+    <p>A: 使用Java-Chassis有以下这些限制:
+ (1) 0.3.0-SNAPSHOT之前的版本不支持类似<code class="highlighter-rouge">@GetMapping</code>这样的标注。
+ (2) 所用到的HTTP请求方法一样时,如GET,则方法名不能重载。这是由于生成契约时方法名会作为其Operation ID,所以要保证其唯一性。
+ (3) 方法和类必须是public的。</p>
+  </li>
+  <li>
+    <p><strong>Q: 使用<em>spring-boot-starter-provider</em>这个依赖时,在<em>application.yml</em>文件中声明的<code class="highlighter-rouge">spring.main.web-application</code>属性并没有生效?</strong></p>
+
+    <p>A: 使用<em>starter-provider</em>这个依赖时,如果用到了servlet这种方式时,需要在<em>application.properties</em>这个文件引入<code class="highlighter-rouge">spring.main.web-application=true</code>这样的属性或者在<em>application.yml</em>文件中声明,但是此时需要新建一个<em>application.properties</em>的文件,其内容可以为空。</p>
+  </li>
+  <li>
+    <p><strong>Q: 网关依赖的jar和其他微服务的一样吗?</strong></p>
+
+    <div class="language-xml highlighter-rouge"><pre class="highlight"><code> <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+ <span class="nt">&lt;artifactId&gt;</span>spring-boot-starter-provider<span class="nt">&lt;/artifactId&gt;</span>
+</code></pre>
+    </div>
+
+    <p>A: 网关除了要依赖<code class="highlighter-rouge">spring-boot-starter-provider</code>之外还要依赖<code class="highlighter-rouge">spring-boot-starter-discovery</code>,可以参考<a href="https://github.com/ServiceComb/LinuxCon-Beijing-WorkShop">LinuxCon-Beijing-Workshop</a>中manager的实现。</p>
+  </li>
+  <li>
+    <p><strong>Q: 网关需要像其他微服务一样配置assembly吗?其中的/maven/gateway这个路径是docker maven plugin默认的吗?</strong></p>
+
+    <p>A: 需要,由于项目现在使用的是spring-boot的打包方式,docker maven plugin也是依赖打包生成的文件来生成docker镜像的。/maven这个路径是docker maven plugin指定的,而gateway这个路径是在assembly中指定的。</p>
+  </li>
+  <li>
+    <p><strong>Q: 服务接口的返回类型可以是任意类型吗?还是必须是responseEntity?</strong></p>
+
+    <p>A: 可以,具体可以参考java-chassis的<a href="https://github.com/ServiceComb/java-chassis/blob/master/integration-tests/springmvc-tests/src/test/java/io/servicecomb/demo/springmvc/tests/SpringMvcIntegrationTestBase.java#L145">integration-test的实现</a>。</p>
+  </li>
+  <li>
+    <p><strong>Q: 微服务启动后,无法正确调用接口,使用的代码为:</strong></p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="nd">@RestController</span>
+ <span class="nd">@RestSchema</span><span class="o">(</span><span class="n">schemaId</span> <span class="o">=</span> <span class="s">"worker"</span><span class="o">)</span>
+ <span class="kd">public</span> <span class="kd">class</span> <span class="nc">WorkerController</span> <span class="o">{</span>
+   <span class="nd">@RequestMapping</span><span class="o">(</span><span class="n">value</span><span class="o">=</span><span class="s">"/count"</span><span class="o">,</span> <span class="n">method</span><span class="o">=</span><span class="n">RequestMethod</span><span class="o">.</span><span class="na">GET</span><span class="o">)</span>
+   <span class="kd">public</span> <span class="kt">int</span> <span class="nf">getWorkerNumbers</span><span class="o">()</span> <span class="o">{</span>
+     <span class="o">...</span>
+   <span class="o">}</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+
+    <p>A: 在没有指明根路径的情况下,默认会使用类名作为其根路径,即上述代码中可访问的路径应为<code class="highlighter-rouge">/WorkerController/count</code>。如果想要实现<code class="highlighter-rouge">/count</code>这样的访问,则要指明根路径:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="nd">@RequestMapping</span><span class="o">(</span><span class="n">value</span> <span class="o">=</span> <span class="s">"/"</span><span class="o">)</span>
+ <span class="kd">public</span> <span class="kd">class</span> <span class="nc">WorkerController</span> <span class="o">{}</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>Q: 如果没有指定RequestMapping这个标注的value时,默认的基本路径是什么?</strong></p>
+
+    <p>A: 假设你的Controller类名为<em>HelloController</em>,那么基本路径就是/HelloController。</p>
+  </li>
+  <li>
+    <p><strong>Q: 在eclipse下修改了microservice.yaml配置文件下的端口号,启动程序后,端口号没生效?</strong></p>
+
+    <p>A: 需要单独导入sample项目,如果导入整个ServiceComb-Java-Chassis项目,由于sample目录不在ServiceComb-Java-Chassis模块中,IDE不会对sample进行编译,eclipse下并没有提示错误信息,IDEA下会有提示信息。因此eclipse启动sample的demo会发现修改了端口没有生效。</p>
+  </li>
+  <li>
+    <p><strong>Q: 如何自定义某个Java方法对应的REST接口里的HTTP Status Code?</strong></p>
+
+    <p>A: 对于正常的返回值,可以通过SwaggerAnnotation实现,例如:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="nd">@ApiResponse</span><span class="o">(</span><span class="n">code</span> <span class="o">=</span> <span class="mi">300</span><span class="o">,</span> <span class="n">response</span> <span class="o">=</span> <span class="n">String</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">message</span> <span class="o">=</span> <span class="s">""</span><span class="o">)</span>
+ <span class="kd">public</span> <span class="kt">int</span> <span class="nf">test</span><span class="o">(</span><span class="kt">int</span> <span class="n">x</span><span class="o">)</span> <span class="o">{</span>
+   <span class="k">return</span> <span class="mi">100</span><span class="o">;</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+
+    <p>对于异常的返回值,可以通过抛出自定义的InvocationException实现,例如:、</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="kd">public</span> <span class="n">String</span> <span class="nf">testException</span><span class="o">(</span><span class="kt">int</span> <span class="n">code</span><span class="o">)</span> <span class="o">{</span>
+   <span class="n">String</span> <span class="n">strCode</span> <span class="o">=</span> <span class="n">String</span><span class="o">.</span><span class="na">valueOf</span><span class="o">(</span><span class="n">code</span><span class="o">);</span>
+     <span class="k">switch</span> <span class="o">(</span><span class="n">code</span><span class="o">)</span> <span class="o">{</span>
+       <span class="k">case</span> <span class="mi">200</span><span class="o">:</span>
+         <span class="k">return</span> <span class="n">strCode</span><span class="o">;</span>
+       <span class="k">case</span> <span class="mi">456</span><span class="o">:</span>
+         <span class="k">throw</span> <span class="k">new</span> <span class="nf">InvocationException</span><span class="o">(</span><span class="n">code</span><span class="o">,</span> <span class="n">strCode</span><span class="o">,</span> <span class="n">strCode</span> <span class="o">+</span> <span class="s">" error"</span><span class="o">);</span>
+       <span class="k">case</span> <span class="mi">556</span><span class="o">:</span>
+         <span class="k">throw</span> <span class="k">new</span> <span class="nf">InvocationException</span><span class="o">(</span><span class="n">code</span><span class="o">,</span> <span class="n">strCode</span><span class="o">,</span> <span class="n">Arrays</span><span class="o">.</span><span class="na">asList</span><span class="o">(</span><span class="n">strCode</span> <span class="o">+</span> <span class="s">" error"</span><span class="o">));</span>
+       <span class="k">case</span> <span class="mi">557</span><span class="o">:</span>
+         <span class="k">throw</span> <span class="k">new</span> <span class="nf">InvocationException</span><span class="o">(</span><span class="n">code</span><span class="o">,</span> <span class="n">strCode</span><span class="o">,</span> <span class="n">Arrays</span><span class="o">.</span><span class="na">asList</span><span class="o">(</span><span class="n">Arrays</span><span class="o">.</span><span class="na">asList</span><span class="o">(</span><span class="n">strCode</span> <span class="o">+</span> <span class="s">" error"</span><span class="o">)));</span>
+       <span class="k">default</span><span class="o">:</span>
+         <span class="k">break</span><span class="o">;</span>
+     <span class="o">}</span>
+   
+   <span class="k">return</span> <span class="s">"not expected"</span><span class="o">;</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>Q: 如何定制自己微服务的日志配置?</strong></p>
+
+    <p>A: ServiceComb不绑定日志器,只是使用了slf4j,用户可以自由选择log4j/log4j2/logback等等。ServiceComb提供了一个log4j的扩展,在标准log4j的基础上,支持log4j的properties文件的增量配置。</p>
+    <ul>
+      <li>默认以规则:”classpath*:config/log4j.properties”加载配置文件</li>
+      <li>实际会搜索出classpath中所有的<code class="highlighter-rouge">config/log4j.properties和config/log4j.*.properties</code>, 从搜索出的文件中切出<code class="highlighter-rouge">\*</code>的部分,进行alpha排序,然后按顺序加载,最后合成的文件作为log4j的配置文件。</li>
+      <li>如果要使用ServiceComb的log4j扩展,则需要调用Log4jUtils.init,否则完全按标准的日志器的规则使用。</li>
+    </ul>
+  </li>
+  <li>
+    <p><strong>Q: 当服务配置了多个transport的时候,在运行时是怎么选择使用哪个transport的?</strong></p>
+
+    <p>A:</p>
+    <ul>
+      <li>
+        <p>ServiceComb的consumer、transport、handler、producer之间是解耦的,各功能之间通过契约定义联合在一起工作的,即:
+ consumer使用透明rpc,还是springmvc开发与使用highway,还是RESTful在网络上传输没有关系与producer是使用透明rpc,还是jaxrs,或者是springmvc开发,也没有关系handler也不感知,业务开发方式以及传输方式</p>
+      </li>
+      <li>
+        <p>consumer访问producer,在运行时的transport选择上,总规则为:
+ consumer的transport与producer的endpoint取交集,如果交集后,还有多个transport可选择,则轮流使用</p>
+
+        <p>分解开来,存在以下场景:</p>
+      </li>
+      <li>当一个微服务producer同时开放了highway以及RESTful的endpoint
+        <ul>
+          <li>consumer进程中只部署了highway transport jar,则只会访问producer的highway endpoint</li>
+          <li>consumer进程中只部署了RESTful transport jar,则只会访问producer的RESTful endpoint</li>
+          <li>consumer进程中,同时部署了highway和RESTful transport jar,则会轮流访问producer的highway、RESTful endpoint</li>
+        </ul>
+
+        <p>如果,此时consumer想固定使用某个transport访问producer,可以在consumer进程的microservice.yaml中配置,指定transport的名称:</p>
+
+        <div class="language-yaml highlighter-rouge"><pre class="highlight"><code> <span class="s">servicecomb</span><span class="pi">:</span>
+   <span class="s">references</span><span class="pi">:</span>
+     <span class="s">&lt;service_name&gt;</span><span class="pi">:</span>
+       <span class="s">transport</span><span class="pi">:</span> <span class="s">highway</span>
+</code></pre>
+        </div>
+      </li>
+      <li>当一个微服务producer只开放了highway的endpoint
+        <ul>
+          <li>consumer进程只部署了highway transport jar,则正常使用highway访问</li>
+          <li>consumer进程只部署了RESTful transport jar,则无法访问</li>
+          <li>consumer进程同时部署了highway和RESTful transport jar,则正常使用highway访问</li>
+        </ul>
+      </li>
+      <li>当一个微服务producer只开放了RESTful的endpoint
+        <ul>
+          <li>consumer进程只部署了highway transport jar,则无法访问</li>
+          <li>consumer进程只部署了RESTful transport jar,则正常使用RESTful访问</li>
+          <li>consumer进程同时部署了highway和RESTful transport jar,则正常使用RESTful访问</li>
+        </ul>
+      </li>
+    </ul>
+  </li>
+  <li>
+    <p><strong>Q: swagger body参数类型定义错误,导致服务中心注册的内容没有类型信息</strong></p>
+
+    <p><strong>现象描述:</strong></p>
+
+    <p>定义如下接口,将参数放到body传递</p>
+
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code> <span class="s">/testInherate</span><span class="pi">:</span>
+     <span class="s">post</span><span class="pi">:</span>
+       <span class="s">operationId</span><span class="pi">:</span> <span class="s2">"</span><span class="s">testInherate"</span>
+       <span class="s">parameters</span><span class="pi">:</span>
+       <span class="pi">-</span> <span class="s">in</span><span class="pi">:</span> <span class="s2">"</span><span class="s">body"</span>
+         <span class="s">name</span><span class="pi">:</span> <span class="s2">"</span><span class="s">xxxxx"</span>
+         <span class="s">required</span><span class="pi">:</span> <span class="s">false</span>
+         <span class="s">type</span><span class="pi">:</span> <span class="s">string</span>
+       <span class="s">responses</span><span class="pi">:</span>
+         <span class="s">200</span><span class="pi">:</span>
+           <span class="s">description</span><span class="pi">:</span> <span class="s2">"</span><span class="s">response</span><span class="nv"> </span><span class="s">of</span><span class="nv"> </span><span class="s">200"</span>
+           <span class="s">schema</span><span class="pi">:</span>
+             <span class="s">$ref</span><span class="pi">:</span> <span class="s2">"</span><span class="s">#/definitions/ReponseImpl"</span>
+</code></pre>
+    </div>
+
+    <p>采用上面方式定义接口。在服务注册以后,从服务中心查询下来的接口type: string 丢失,变成了:</p>
+
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code> <span class="s">/testInherate</span><span class="pi">:</span>
+     <span class="s">post</span><span class="pi">:</span>
+       <span class="s">operationId</span><span class="pi">:</span> <span class="s2">"</span><span class="s">testInherate"</span>
+       <span class="s">parameters</span><span class="pi">:</span>
+       <span class="pi">-</span> <span class="s">in</span><span class="pi">:</span> <span class="s2">"</span><span class="s">body"</span>
+         <span class="s">name</span><span class="pi">:</span> <span class="s2">"</span><span class="s">xxxxx"</span>
+         <span class="s">required</span><span class="pi">:</span> <span class="s">false</span>
+       <span class="s">responses</span><span class="pi">:</span>
+         <span class="s">200</span><span class="pi">:</span>
+           <span class="s">description</span><span class="pi">:</span> <span class="s2">"</span><span class="s">response</span><span class="nv"> </span><span class="s">of</span><span class="nv"> </span><span class="s">200"</span>
+           <span class="s">schema</span><span class="pi">:</span>
+             <span class="s">$ref</span><span class="pi">:</span> <span class="s2">"</span><span class="s">#/definitions/ReponseImpl"</span>
+</code></pre>
+    </div>
+
+    <p>如果客户端没有放置swagger,还会报告如下异常:</p>
+
+    <div class="language-text highlighter-rouge"><pre class="highlight"><code>    Caused by: java.lang.ClassFormatError: Method "testInherate" in class ? has illegal signature "
+</code></pre>
+    </div>
+
+    <p>A:定义body参数的类型的时候,需要使用schema,不能直接使用type。</p>
+
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code> <span class="s">/testInherate</span><span class="pi">:</span>
+     <span class="s">post</span><span class="pi">:</span>
+       <span class="s">operationId</span><span class="pi">:</span> <span class="s2">"</span><span class="s">testInherate"</span>
+       <span class="s">parameters</span><span class="pi">:</span>
+       <span class="pi">-</span> <span class="s">in</span><span class="pi">:</span> <span class="s2">"</span><span class="s">body"</span>
+         <span class="s">name</span><span class="pi">:</span> <span class="s2">"</span><span class="s">request"</span>
+         <span class="s">required</span><span class="pi">:</span> <span class="s">false</span>
+         <span class="s">schema</span><span class="pi">:</span>
+           <span class="s">type</span><span class="pi">:</span> <span class="s">string</span>
+       <span class="s">responses</span><span class="pi">:</span>
+         <span class="s">200</span><span class="pi">:</span>
+           <span class="s">description</span><span class="pi">:</span> <span class="s2">"</span><span class="s">response</span><span class="nv"> </span><span class="s">of</span><span class="nv"> </span><span class="s">200"</span>
+           <span class="s">schema</span><span class="pi">:</span>
+             <span class="s">$ref</span><span class="pi">:</span> <span class="s2">"</span><span class="s">#/definitions/ReponseImpl"</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>Q: ServiceComb微服务框架服务调用是否使用长连接?</strong></p>
+
+    <p>A: http使用的是长连接(有超时时间),highway方式使用的是长连接(一直保持)。</p>
+  </li>
+  <li>
+    <p><strong>Q: 服务断连服务中心注册信息是否自动删除</strong></p>
+
+    <p>A: 服务中心心跳检测到服务实例不可用,只会移除服务实例信息,服务的静态数据不会移除。</p>
+  </li>
+  <li>
+    <p><strong>Q: 如果使用tomcat方式集成ServiceComb微服务框架,如何实现服务注册</strong></p>
+
+    <p>A: 如果使用cse sdk servlet方式(使用transport-rest-servlet依赖)制作为war包部署到tomcat,需要保证,服务描述文件(microservice.yaml)中rest端口配置和外置容器一致才能实现该服务的正确注册。否则无法感知tomcat开放端口。</p>
+  </li>
+  <li>
+    <p><strong>Q: 如果使用tomcat方式集成CSE微服务框架,服务注册的时候如何将war包部署的上下文注册到服务中心</strong></p>
+
+    <p>A: 发布服务接口的时候需要将war包部署的上下文(context)放在baseurl最前面,这样才能保证注册到服务中心的路径是完整的路径(包含了上下文)。实例:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="nd">@path</span><span class="o">(/{</span><span class="n">context</span><span class="o">}/</span><span class="n">xxx</span><span class="o">)</span>
+ <span class="kd">class</span> <span class="nc">ServiceA</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>Q: ServiceComb微服务框架如何实现数据多个微服务间透传</strong></p>
+
+    <p>A:
+ 透传数据塞入:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="n">CseHttpEntity</span><span class="o">&lt;</span><span class="n">xxxx</span><span class="o">.</span><span class="na">class</span><span class="o">&gt;</span> <span class="n">httpEntity</span> <span class="o">=</span> <span class="k">new</span> <span class="n">CseHttpEntity</span><span class="o">&lt;&gt;(</span><span class="n">xxx</span><span class="o">);</span>
+ <span class="c1">//透传内容</span>
+ <span class="n">httpEntity</span><span class="o">.</span><span class="na">addContext</span><span class="o">(</span><span class="s">"contextKey"</span><span class="o">,</span><span class="s">"contextValue"</span><span class="o">);</span>
+ <span class="n">ResponseEntity</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span> <span class="n">responseEntity</span> <span class="o">=</span> <span class="n">RestTemplateBuilder</span><span class="o">.</span><span class="na">create</span><span class="o">().</span><span class="na">exchange</span><span class="o">(</span><span class="s">"cse://springmvc/springmvchello/sayhello"</span><span class="o">,</span><span class="n">HttpMethod</span><span class="o">.</span><span class="na">POST</span><span class="o">,</span><span class="n">httpEntity</span><span class="o">,</span><span class="n">String</span><span class="o">.</span><span class="na">class</span><span class="o">);</span>
+</code></pre>
+    </div>
+
+    <p>透传数据获取:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="nd">@Override</span>
+ <span class="nd">@RequestMapping</span><span class="o">(</span><span class="n">path</span><span class="o">=</span><span class="s">"/sayhello"</span><span class="o">,</span><span class="n">method</span> <span class="o">=</span> <span class="n">RequestMethod</span><span class="o">.</span><span class="na">POST</span><span class="o">)</span>
+ <span class="kd">public</span> <span class="n">String</span> <span class="nf">sayHello</span><span class="o">(</span><span class="nd">@RequestBody</span> <span class="n">Person</span> <span class="n">person</span><span class="o">,</span><span class="n">InvocationContext</span> <span class="n">context</span><span class="o">){</span>
+   <span class="c1">//透传数据获取</span>
+   <span class="n">context</span><span class="o">.</span><span class="na">getContext</span><span class="o">();</span>
+   <span class="k">return</span> <span class="s">"Hello person "</span> <span class="o">+</span> <span class="n">person</span><span class="o">.</span><span class="na">getName</span><span class="o">();</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>Q: ServiceComb微服务框架服务如何自定义返回状态码?</strong></p>
+
+    <p>A:</p>
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="nd">@Override</span>
+ <span class="nd">@RequestMapping</span><span class="o">(</span><span class="n">path</span> <span class="o">=</span> <span class="s">"/sayhello"</span><span class="o">,</span><span class="n">method</span> <span class="o">=</span> <span class="n">RequestMethod</span><span class="o">.</span><span class="na">POST</span><span class="o">)</span>
+ <span class="kd">public</span> <span class="n">String</span> <span class="nf">sayHello</span><span class="o">(</span><span class="nd">@RequestBody</span> <span class="n">Person</span> <span class="n">person</span><span class="o">){</span>
+   <span class="n">InvocationContext</span> <span class="n">context</span> <span class="o">=</span> <span class="n">ContextUtils</span><span class="o">.</span><span class="na">getInvocationContext</span><span class="o">();</span>
+   <span class="c1">//自定义状态码</span>
+   <span class="n">context</span><span class="o">.</span><span class="na">setStatus</span><span class="o">(</span><span class="n">Status</span><span class="o">.</span><span class="na">CREATED</span><span class="o">);</span>
+   <span class="k">return</span> <span class="s">"Hello person "</span><span class="o">+</span><span class="n">person</span><span class="o">.</span><span class="na">getName</span><span class="o">();</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>Q: ServiceComb body Model部分暴露</strong></p>
+
+    <p>A: 一个接口对应的body对象中,可能有一些属性是内部的,不想开放出去,生成schema的时候不要带出去,使用:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="nd">@ApiModelProperty</span><span class="o">(</span><span class="n">hidden</span> <span class="o">=</span> <span class="kc">true</span><span class="o">)</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>Q: ServiceComb框架获取远端consumer的地址</strong></p>
+
+    <p>A: 如果使用http rest方式(使用transport-rest-vertx依赖)可以用下面这种方式获取:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="n">AbstractProducerContextArgMapper</span> <span class="n">httpRequestCreator</span> <span class="o">=</span> <span class="o">(</span><span class="n">AbstractProducerContextArgMapper</span><span class="o">)</span><span class="n">invocation</span><span class="o">.</span><span class="na">getHandlerContext</span><span class="o">().</span><span class="na">get</span><span class="o">(</span><span class="n">RestConst</span><span class="o">.</span><span class="na">HTTP_REQUEST_CREATOR</span><span class="o">);</span>
+ <span class="k">if</span><span class="o">(</span><span class="n">httpRequestCreator</span> <span class="o">!=</span> <span class="kc">null</span><span class="o">){</span>
+   <span class="n">HttpServletRequest</span> <span class="n">req</span> <span class="o">=</span> <span class="o">(</span><span class="n">HttpServletRequest</span><span class="o">)</span><span class="n">httpRequestCreator</span><span class="o">.</span><span class="na">createContextArg</span><span class="o">(</span><span class="n">invocation</span><span class="o">);</span>
+   <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">req</span><span class="o">.</span><span class="na">getRemoteHost</span><span class="o">());</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+
+    <p>实际场景是拿最外层的地址,所以应该是LB传入到edgeservice,edgeService再放到context外下传递。</p>
+  </li>
+  <li>
+    <p><strong>Q: ServiceComb不支持泛型</strong></p>
+
+    <p>A: 明确不支持,需要修改接口,接口修改后需要修改版本号,以免consumer还是使用旧的版本。</p>
+  </li>
+  <li>
+    <p><strong>Q: ServiceComb对handler描述</strong></p>
+
+    <p>A: consumer默认的handler是simpleLB,没有配置的时候handler链会使用这个,如果配置了handler,里面一定要包含lb的handler,否则调用报错,需要在文档里面进行说明。</p>
+  </li>
+  <li>
+    <p><strong>Q: ServiceComb日志替换</strong></p>
+
+    <p>A: CSE java-chassis日志推荐方式是在启动的时候使用Log4jUtils.init(),直接使用推荐的Log4j来做日志管理,但是有些场景不想用log4j,比如想使用log4j2或者logback,下面以log4j2为例简单介绍下步骤:</p>
+
+    <ol>
+      <li>在代码里面不要使用Log4jUtils.init();</li>
+      <li>去掉log4j的配置文件(不删掉也没关系,因为不会使用);</li>
+      <li>exclude掉CSE框架引入的log4j,例如:
+        <div class="language-xml highlighter-rouge"><pre class="highlight"><code><span class="nt">&lt;dependency&gt;</span>
+    <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+    <span class="nt">&lt;artifactId&gt;</span>provider-springmvc<span class="nt">&lt;/artifactId&gt;</span>
+    <span class="nt">&lt;exclusions&gt;</span>
+        <span class="nt">&lt;exclusion&gt;</span>
+            <span class="nt">&lt;groupId&gt;</span>log4j<span class="nt">&lt;/groupId&gt;</span>
+            <span class="nt">&lt;artifactId&gt;</span>log4j<span class="nt">&lt;/artifactId&gt;</span>
+        <span class="nt">&lt;/exclusion&gt;</span>
+    <span class="nt">&lt;/exclusions&gt;</span>
+<span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+        </div>
+      </li>
+      <li>
+        <p>引入log4j2的依赖</p>
+
+        <div class="language-xml highlighter-rouge"><pre class="highlight"><code><span class="nt">&lt;dependency&gt;</span>    
+    <span class="nt">&lt;groupId&gt;</span>org.apache.logging.log4j<span class="nt">&lt;/groupId&gt;</span>
+    <span class="nt">&lt;artifactId&gt;</span>log4j-slf4j-impl<span class="nt">&lt;/artifactId&gt;</span>
+<span class="nt">&lt;/dependency&gt;</span>
+<span class="nt">&lt;dependency&gt;</span>
+    <span class="nt">&lt;groupId&gt;</span>org.apache.logging.log4j<span class="nt">&lt;/groupId&gt;</span>
+    <span class="nt">&lt;artifactId&gt;</span>log4j-api<span class="nt">&lt;/artifactId&gt;</span>
+<span class="nt">&lt;/dependency&gt;</span>
+<span class="nt">&lt;dependency&gt;</span>
+    <span class="nt">&lt;groupId&gt;</span>org.apache.logging.log4j<span class="nt">&lt;/groupId&gt;</span>
+    <span class="nt">&lt;artifactId&gt;</span>log4j-core<span class="nt">&lt;/artifactId&gt;</span>
+<span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+        </div>
+
+        <p>如果没有版本依赖管理,还需要填写上版本号。</p>
+      </li>
+      <li>
+        <p>加入log4j2的配置文件log4j2.xml,关于这个请查看官方说明,例如:</p>
+
+        <div class="language-xml highlighter-rouge"><pre class="highlight"><code> <span class="cp">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span>
+ <span class="c">&lt;!--日志级别以及优先级排序: OFF &gt; FATAL &gt; ERROR &gt; WARN &gt; INFO &gt; DEBUG &gt; TRACE &gt; ALL --&gt;</span>
+ <span class="c">&lt;!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出--&gt;</span>
+ <span class="c">&lt;!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数--&gt;</span>
+ <span class="nt">&lt;configuration</span> <span class="na">status=</span><span class="s">"WARN"</span> <span class="na">monitorInterval=</span><span class="s">"30"</span><span class="nt">&gt;</span>
+     <span class="c">&lt;!--先定义所有的appender--&gt;</span>
+     <span class="nt">&lt;appenders&gt;</span>
+     <span class="c">&lt;!--这个输出控制台的配置--&gt;</span>
+         <span class="nt">&lt;console</span> <span class="na">name=</span><span class="s">"Console"</span> <span class="na">target=</span><span class="s">"SYSTEM_OUT"</span><span class="nt">&gt;</span>
+         <span class="c">&lt;!--输出日志的格式--&gt;</span>
+             <span class="nt">&lt;PatternLayout</span> <span class="na">pattern=</span><span class="s">"[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"</span><span class="nt">/&gt;</span>
+         <span class="nt">&lt;/console&gt;</span>
+         <span class="c">&lt;!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用--&gt;</span>
+         <span class="nt">&lt;File</span> <span class="na">name=</span><span class="s">"log"</span> <span class="na">fileName=</span><span class="s">"log/test.log"</span> <span class="na">append=</span><span class="s">"false"</span><span class="nt">&gt;</span>
+            <span class="nt">&lt;PatternLayout</span> <span class="na">pattern=</span><span class="s">"%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"</span><span class="nt">/&gt;</span>
+         <span class="nt">&lt;/File&gt;</span>
+         <span class="c">&lt;!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档--&gt;</span>
+         <span class="nt">&lt;RollingFile</span> <span class="na">name=</span><span class="s">"RollingFileInfo"</span> <span class="na">fileName=</span><span class="s">"${sys:user.home}/logs/info.log"</span>
+                      <span class="na">filePattern=</span><span class="s">"${sys:user.home}/logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log"</span><span class="nt">&gt;</span>
+             <span class="c">&lt;!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--&gt;</span>
+             <span class="nt">&lt;ThresholdFilter</span> <span class="na">level=</span><span class="s">"info"</span> <span class="na">onMatch=</span><span class="s">"ACCEPT"</span> <span class="na">onMismatch=</span><span class="s">"DENY"</span><span class="nt">/&gt;</span>
+             <span class="nt">&lt;PatternLayout</span> <span class="na">pattern=</span><span class="s">"[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"</span><span class="nt">/&gt;</span>
+             <span class="nt">&lt;Policies&gt;</span>
+                 <span class="nt">&lt;TimeBasedTriggeringPolicy/&gt;</span>
+                 <span class="nt">&lt;SizeBasedTriggeringPolicy</span> <span class="na">size=</span><span class="s">"100 MB"</span><span class="nt">/&gt;</span>
+             <span class="nt">&lt;/Policies&gt;</span>
+         <span class="nt">&lt;/RollingFile&gt;</span>
+         <span class="nt">&lt;RollingFile</span> <span class="na">name=</span><span class="s">"RollingFileWarn"</span> <span class="na">fileName=</span><span class="s">"${sys:user.home}/logs/warn.log"</span>
+                      <span class="na">filePattern=</span><span class="s">"${sys:user.home}/logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log"</span><span class="nt">&gt;</span>
+             <span class="nt">&lt;ThresholdFilter</span> <span class="na">level=</span><span class="s">"warn"</span> <span class="na">onMatch=</span><span class="s">"ACCEPT"</span> <span class="na">onMismatch=</span><span class="s">"DENY"</span><span class="nt">/&gt;</span>
+             <span class="nt">&lt;PatternLayout</span> <span class="na">pattern=</span><span class="s">"[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"</span><span class="nt">/&gt;</span>
+             <span class="nt">&lt;Policies&gt;</span>
+                 <span class="nt">&lt;TimeBasedTriggeringPolicy/&gt;</span>
+                 <span class="nt">&lt;SizeBasedTriggeringPolicy</span> <span class="na">size=</span><span class="s">"100 MB"</span><span class="nt">/&gt;</span>
+             <span class="nt">&lt;/Policies&gt;</span>
+             <span class="c">&lt;!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 --&gt;</span>
+             <span class="nt">&lt;DefaultRolloverStrategy</span> <span class="na">max=</span><span class="s">"20"</span><span class="nt">/&gt;</span>
+         <span class="nt">&lt;/RollingFile&gt;</span>
+         <span class="nt">&lt;RollingFile</span> <span class="na">name=</span><span class="s">"RollingFileError"</span> <span class="na">fileName=</span><span class="s">"${sys:user.home}/logs/error.log"</span>
+                      <span class="na">filePattern=</span><span class="s">"${sys:user.home}/logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log"</span><span class="nt">&gt;</span>
+             <span class="nt">&lt;ThresholdFilter</span> <span class="na">level=</span><span class="s">"error"</span> <span class="na">onMatch=</span><span class="s">"ACCEPT"</span> <span class="na">onMismatch=</span><span class="s">"DENY"</span><span class="nt">/&gt;</span>
+             <span class="nt">&lt;PatternLayout</span> <span class="na">pattern=</span><span class="s">"[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"</span><span class="nt">/&gt;</span>
+             <span class="nt">&lt;Policies&gt;</span>
+                 <span class="nt">&lt;TimeBasedTriggeringPolicy/&gt;</span>
+                 <span class="nt">&lt;SizeBasedTriggeringPolicy</span> <span class="na">size=</span><span class="s">"100 MB"</span><span class="nt">/&gt;</span>
+             <span class="nt">&lt;/Policies&gt;</span>
+         <span class="nt">&lt;/RollingFile&gt;</span>
+     <span class="nt">&lt;/appenders&gt;</span>
+     <span class="c">&lt;!--然后定义logger,只有定义了logger并引入的appender,appender才会生效--&gt;</span>
+     <span class="nt">&lt;loggers&gt;</span>
+         <span class="c">&lt;!--过滤掉spring和mybatis的一些无用的DEBUG信息--&gt;</span>
+         <span class="nt">&lt;logger</span> <span class="na">name=</span><span class="s">"org.springframework"</span> <span class="na">level=</span><span class="s">"INFO"</span><span class="nt">&gt;&lt;/logger&gt;</span>
+         <span class="nt">&lt;logger</span> <span class="na">name=</span><span class="s">"org.mybatis"</span> <span class="na">level=</span><span class="s">"INFO"</span><span class="nt">&gt;&lt;/logger&gt;</span>
+         <span class="nt">&lt;root</span> <span class="na">level=</span><span class="s">"all"</span><span class="nt">&gt;</span>
+             <span class="nt">&lt;appender-ref</span> <span class="na">ref=</span><span class="s">"Console"</span><span class="nt">/&gt;</span>
+             <span class="nt">&lt;appender-ref</span> <span class="na">ref=</span><span class="s">"RollingFileInfo"</span><span class="nt">/&gt;</span>
+             <span class="nt">&lt;appender-ref</span> <span class="na">ref=</span><span class="s">"RollingFileWarn"</span><span class="nt">/&gt;</span>
+             <span class="nt">&lt;appender-ref</span> <span class="na">ref=</span><span class="s">"RollingFileError"</span><span class="nt">/&gt;</span>
+         <span class="nt">&lt;/root&gt;</span>
+     <span class="nt">&lt;/loggers&gt;</span>
+ <span class="nt">&lt;/configuration&gt;</span>
+</code></pre>
+        </div>
+      </li>
+      <li>启动服务进行验证</li>
+    </ol>
+  </li>
+  <li>
+    <p><strong>Q: netty版本问题</strong></p>
+
+    <p>A: netty3和netty4是完全不同的三方件,因为坐标跟package都不相同,所以可以共存,但是要注意小版本问题,小版本必须使用CSE的版本。</p>
+  </li>
+  <li>
+    <p><strong>Q: 服务超时设置</strong></p>
+
+    <p>A: 在微服务描述文件(microservice.yaml)中添加如下配置:</p>
+
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code> <span class="s">cse</span><span class="pi">:</span>
+   <span class="s">request</span><span class="pi">:</span>
+     <span class="s">timeout</span><span class="pi">:</span> <span class="s">30000</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>Q: URL 地址就可以唯一定位,为什么要加上一个schema?</strong></p>
+
+    <p>A:</p>
+    <ol>
+      <li>schema 是用来匹配服务契约的,用来保证服务端和消费端契约兼容,每个契约需要一个唯一ID,在服务中心存储。</li>
+      <li>schema映射到java的interface概念,在consumer使用透明rpc模式开发时,可以找到是微服务里的哪个operation。schema之间的方法名是没有唯一性要求的。</li>
+      <li>operation qualified name是治理的key,而URL 因为path参数的存在,没办法直接查找,而qualified name是不会变的。治理是不区分传输的,如果治理按URL 走,那么highway调进来时,还得根据参数反向构造出url,再来正则表达式匹配,太折腾了。</li>
+      <li>http只是一种传输通道,还有别的传输通道不需要映射到URL的。</li>
+    </ol>
+  </li>
+  <li>
+    <p><strong>Q: rest客户端调用的时候,实际上只带上了服务名和URL,并不需要指定schema id的, 而实际上根据这个URL也能找到具体契约的,所以指定schema id作用何在?</strong></p>
+
+    <p>A: 由于透明rpc是接口式调用,并没有URL,内部实际都归一化到operation来描述的,这样就可以结合schema id唯一定位到具体的请求处理中。</p>
+  </li>
+  <li>
+    <p><strong>Q: Transport是个什么概念?用来干什么的?</strong></p>
+
+    <p>A: transport负责编解码,以及传输。通信模型有rest和highway两种,highway对应的是私有协议,使用protobuf编码,rest用的是json。hightway和rest都是基于vertx做的,vertx是基于netty的。</p>
+  </li>
+  <li>
+    <p><strong>Q: 框架中引入了vertx会有什么好处?</strong></p>
+
+    <p>A: 启用vertx的标准工作模式更强大,不过对业务人员要求就有些高了,目前还没开放业务接口出来。vertx标准的reactive工作模式,要求业务代码中不能有任何的block wait,sleep,大循环,总之,不能停下来。做到这一点,可以用少很多的CPU,提供更多的服务。</p>
+  </li>
+  <li>
+    <p><strong>Q: 一个服务提供者里面会有多个 appid 和微服务吗?什么场景会出现这种情况?</strong></p>
+
+    <p>A: 会,这里表达的是一个merge的概念。microservice.yaml文件,可能同时存在于jar,磁盘,命令行参数指定这几个地方,此时他们按优先级合并,是用于增加灵活性的。在jar里的是默认值,在此之外,还有环境变量,命令行参数,配置中心覆盖,提供多层定制。</p>
+  </li>
+  <li>
+    <p><strong>Q: ServiceComb和服务中心是怎么交互的?</strong></p>
+
+    <p>A: 走rest,主要负责注册,取数据和心跳等;watch事件走websocket,watch事件是观察服务中心实例信息有没有变更。</p>
+  </li>
+  <li>
+    <p><strong>Q: 有类似dubbo那种治理中心吗?</strong></p>
+
+    <p>A: bizkeeper是一个handler,是治理的其中一个内容。治理可以通过handler扩展。</p>
+  </li>
+  <li>
+    <p><strong>Q: service path怎么理解?</strong></p>
+
+    <p>A: 每个微服务有一个servicePathManager,每一个schema将自己的path注册进去。</p>
+
+    <p><strong>Q: 这样浏览器能访问到吗?</strong></p>
+
+    <p>A: 可以,restful的URL路由,都是由service path搞定。</p>
+  </li>
+  <li>
+    <p><strong>Q: 契约生成时,需要强制带上版本号和语言吗?</strong></p>
+
+    <p>A: 契约是属于微服务的,微服务本来就有版本,但语言是不应该带上版本号的。应该契约要求与语言无关。契约“没有版本”,契约的版本体现在微服务上,实例能找到所属的微服务的版本,就能找到一个确定的契约。</p>
+  </li>
+  <li>
+    <p><strong>Q: ServiceRegistry里的设计代码和Eureka很类似?</strong></p>
+
+    <p>A: 我们第一个版本就是在Spring Cloud的基础上做的 后来随着发展发现不够用了才逐渐自己做的一套,所以的确是在充分参考Eureka后设计的。</p>
+  </li>
+  <li>
+    <p><strong>Q: 有些rpc是netty调用redis实现,比直接netty转发优势在哪里?</strong></p>
+
+    <p>A: 可能是想用redis解决订阅发布吧。但这样意义也不大,之前也尝试过这么用,但后来都改成ServiceComb了。</p>
+  </li>
+  <li>
+    <p><strong>Q: 如果同时引入了<code class="highlighter-rouge">transport-rest-servlet</code>和<code class="highlighter-rouge">transport-rest-vertx</code>的依赖,那么它怎么决定采用哪一个?</strong></p>
+
+    <p>A: 如果端口没被占用,就用vertx;如果被占用了,就用servlet。</p>
+  </li>
+  <li>
+    <p><strong>Q: qps流控设计时是出于什么场景考虑的?</strong></p>
+
+    <p>A: 限流有两个主要作用,第一通过给不同的消费者限流保证对一些重点服务的服务效果,第二防止雪崩效应。可根据服务的重要性来决定水管的粗细,ServiceComb是支持消费端限流和服务端限流两种限流方式的,消费端限流可以做到比较精细的控制。</p>
+  </li>
+  <li>
+    <p><strong>Q: 如果服务端是链式调用,即类似a-&gt;b-&gt;c,那设置了qps 流控会不会造成水管粗细不均的事情?</strong></p>
+
+    <p>A: 一般采取的模式是先测量再设置。qps设置最终是结合整体业务需求来进行调控的,而不是就单个节点来进行设置。</p>
+  </li>
+  <li>
+    <p><strong>Q: 通过cse://serviceName/appPath调用服务失败,报错:java.lang.Error:not support def type:class io.swagger.models.properties xxx</strong></p>
+
+    <p>A: 检查consumer和provider依赖的java-chassis版本是否一致,如果不一致请修改并使用较新版本。</p>
+  </li>
+  <li>
+    <p><strong>Q: 发送rest请求时,出现如下报错:Bad Request,description:http:request body too large</strong></p>
+
+    <p>A: 检查Service Center是否老版本,如果是,则升级到最新版本。</p>
+  </li>
+  <li>
+    <p><strong>Q: 如何在Json序列化忽略Bean中的指定属性</strong></p>
+
+    <p>A: 使用@JsonIgnore注解标记需要忽略的属性,注意修改完成后需重启Service Center。例如:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">class</span> <span class="nc">OutputForTest</span><span class="o">{</span>
+<span class="nd">@JsonIgnore</span>
+<span class="kd">private</span> <span class="n">String</span> <span class="n">outputId</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
+<span class="kd">private</span> <span class="n">String</span> <span class="n">inputId</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
+<span class="o">...</span>
+<span class="o">}</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>Q: 如何在用户自定义的handler中获取header中某个字段的值</strong></p>
+
+    <p>A: 在用户自定义的handler使用@ApiImplicitParams注解声明,使用invocation.getArgs()获取header的值。例如:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">class</span> <span class="nc">MyHandler</span> <span class="kd">implements</span> <span class="n">Handler</span> <span class="o">{</span>
+  <span class="nd">@ApiImplicitParams</span><span class="o">({</span><span class="nd">@ApiImplicitParam</span><span class="o">(</span><span class="n">name</span> <span class="o">=</span> <span class="s">"tester"</span><span class="o">,</span> <span class="n">dataType</span> <span class="o">=</span> <span class="s">"string"</span><span class="o">,</span> <span class="n">paramType</span> <span class="o">=</span> <span class="s">"header"</span><span class="o">)})</span>
+  <span class="nd">@Override</span>
+  <span class="kd">public</span> <span class="kt">void</span> <span class="nf">handle</span><span class="o">(</span><span class="n">Invocation</span> <span class="n">invocation</span><span class="o">,</span> <span class="n">AsyncResponse</span> <span class="n">asyncResp</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span>
+    <span class="n">Object</span><span class="o">[]</span> <span class="n">args</span> <span class="o">=</span> <span class="n">invocation</span><span class="o">.</span><span class="na">getArgs</span><span class="o">();</span>
+    <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">args</span><span class="o">);</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+    </div>
+  </li>
+</ul>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _faqs/cn/faq.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_faqs/cn/faq.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/index.html
----------------------------------------------------------------------
diff --git a/content/cn/index.html b/content/cn/index.html
new file mode 100644
index 0000000..f5ab67e
--- /dev/null
+++ b/content/cn/index.html
@@ -0,0 +1,480 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="ServiceComb提供了一套包含代码框架生成,服务注册发现,负载均衡,服务可靠性(容错熔断,限流降级,调用链追踪)等功能的微服务框架。最新发布版本: Java开发包 v0.5.0 服务中心 v0.5.0 Saga v0.0.2 ">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="Apache incubator ServiceComb">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/">
+
+
+
+  <meta property="og:description" content="ServiceComb提供了一套包含代码框架生成,服务注册发现,负载均衡,服务可靠性(容错熔断,限流降级,调用链追踪)等功能的微服务框架。最新发布版本: Java开发包 v0.5.0 服务中心 v0.5.0 Saga v0.0.2 ">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="Apache incubator ServiceComb">
+  <meta name="twitter:description" content="ServiceComb提供了一套包含代码框架生成,服务注册发现,负载均衡,服务可靠性(容错熔断,限流降级,调用链追踪)等功能的微服务框架。最新发布版本: Java开发包 v0.5.0 服务中心 v0.5.0 Saga v0.0.2 ">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+  <meta property="og:image" content="/assets/images/servicecomb-banner-s.png">
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--splash">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+  
+
+
+
+
+
+
+
+<div class="page__hero--overlay"
+  style=" background-image: url('/assets/images/servicecomb-banner-s.png');"
+>
+  
+    <div class="wrapper">
+      <h1 class="page__title" itemprop="headline">
+        
+          Apache incubator ServiceComb
+
+        
+      </h1>
+      
+        <p class="page__lead">ServiceComb提供了一套包含代码框架生成,服务注册发现,负载均衡,服务可靠性(容错熔断,限流降级,调用链追踪)等功能的微服务框架。
+
+<div class="excerpt-label">最新发布版本:</div>
+<div class="button-group"> <a href="https://github.com/ServiceComb/java-chassis/releases/tag/0.5.0" class="home-button btn--info">Java开发包 v0.5.0</a> <a href="https://github.com/ServiceComb/service-center/releases/tag/0.5.0" class="home-button btn--info">服务中心 v0.5.0</a> <a href="https://github.com/ServiceComb/ServiceComb-Saga/releases/tag/saga-0.0.2" class="home-button btn--info">Saga v0.0.2</a> </div>
+</p>
+      
+      
+      
+    </div>
+  
+  
+</div>
+
+
+
+<div role="main" class="home-page">
+  <article class="splash" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <meta itemprop="description" content="ServiceComb提供了一套包含代码框架生成,服务注册发现,负载均衡,服务可靠性(容错熔断,限流降级,调用链追踪)等功能的微服务框架。最新发布版本: Java开发包 v0.5.0 服务中心 v0.5.0 Saga v0.0.2 ">
+    
+    
+
+    <section class="page__content" itemprop="text">
+      
+<div class="feature__wrapper">
+
+  
+
+    
+
+    <div class="feature__item--center">
+      <div class="archive__item">
+        
+
+        <div class="archive__item-body">
+          
+
+          
+            <div class="archive__item-excerpt">
+              <div class="excerpt-title">最新新闻</div>
+<ul> <li> <a href="/cn/docs/quick-start-dataconsistency/">号外: 现在ServiceComb提供了微服务场景下的数据一致性解决方案Saga!</a> </li> <li class="line-end"> <a href="/cn/docs/linuxcon-workshop-demo/">在新近结束的LinuxCon Beijing 2017大会上,ServiceComb举办了一次 workshop向大家展示如何使用ServiceComb构建一个云化应用。</a> </li> </ul>
+
+            </div>
+          
+        </div>
+      </div>
+    </div>
+  
+
+</div>
+
+<div class="normal-feature-row">
+
+
+<div class="feature__wrapper">
+
+  
+
+    
+
+    <div class="feature__item">
+      <div class="archive__item">
+        
+          <div class="archive__item-teaser">
+            <a href="/cn/users/service-contract/">
+            <img src="/assets/images/servicecomb-feature-openapi.png" alt="标准" />
+            </a>
+          </div>
+        
+
+        <div class="archive__item-body">
+          
+            <a class="archive__item-title" href="/cn/users/service-contract/">服务契约</a>
+          
+
+          
+            <div class="archive__item-excerpt">
+              <p>基于 <a href="https://www.openapis.org">OpenAPI</a> 的服务契约保障。</p>
+
+            </div>
+          
+        </div>
+      </div>
+    </div>
+  
+
+    
+
+    <div class="feature__item">
+      <div class="archive__item">
+        
+          <div class="archive__item-teaser">
+            <a href="/cn/docs/quick-start/">
+            <img src="/assets/images/servicecomb-feature-quickstart.png" alt="高效" />
+            </a>
+          </div>
+        
+
+        <div class="archive__item-body">
+          
+            <a class="archive__item-title" href="/cn/docs/quick-start/">快速开发</a>
+          
+
+          
+            <div class="archive__item-excerpt">
+              <p>支持多种服务框架,快速构建云化应用。</p>
+
+            </div>
+          
+        </div>
+      </div>
+    </div>
+  
+
+    
+
+    <div class="feature__item">
+      <div class="archive__item">
+        
+          <div class="archive__item-teaser">
+            
+            <img src="/assets/images/servicecomb-feature-multiLanguage.png" alt="多语言" />
+            
+          </div>
+        
+
+        <div class="archive__item-body">
+          
+            <a class="archive__item-title">多语言</a>
+          
+
+          
+            <div class="archive__item-excerpt">
+              <p>Java/Go框架级别支持。</p>
+
+            </div>
+          
+        </div>
+      </div>
+    </div>
+  
+
+</div>
+</div>
+
+    </section>
+  </article>
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _pages/cn/home.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_pages/cn/home.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/slides/index.html
----------------------------------------------------------------------
diff --git a/content/cn/slides/index.html b/content/cn/slides/index.html
new file mode 100644
index 0000000..3398493
--- /dev/null
+++ b/content/cn/slides/index.html
@@ -0,0 +1,423 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>Workshop资料 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="The homepage of ServiceComb">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="Workshop资料">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/slides/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/slides/">
+
+
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="Workshop资料">
+  <meta name="twitter:description" content="The homepage of ServiceComb">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+  <meta property="og:type" content="article">
+  <meta property="article:published_time" content="2017-06-20T11:02:20+08:00">
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/slides/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="Workshop资料">
+    
+    <meta itemprop="datePublished" content="June 20, 2017">
+    
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">Workshop资料
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <h2 id="linuxcon-beijing-2017-workshop">LinuxCon Beijing 2017 Workshop</h2>
+<ul>
+  <li><a href="/assets/slides/20170619/MSAPrinciple&amp;EcoSystem.pdf">微服务设计原则与生态系统</a></li>
+  <li><a href="/assets/slides/20170619/ServiceCombRoadMap.pdf">ServiceComb RoadMap</a></li>
+  <li><a href="/assets/slides/20170619/LinuxCon-Workshop-company.pdf">ServiceComb Workshop</a></li>
+</ul>
+
+<h2 id="arch-submit-20171209-北京">Arch Submit, 20171209, 北京</h2>
+<ul>
+  <li><a href="/assets/slides/20171209/PracticeOfServiceMeshOnHuaweiPublicCloud.pdf">Service Mesh在华为公有云的实践</a></li>
+</ul>
+
+<h2 id="servicecomb直播第一期-20171026"><a href="http://www.itdks.com/liveevent/detail/6618">ServiceComb直播第一期</a>, 20171026</h2>
+<ul>
+  <li><a href="/assets/slides/20171026/ServiceCombIntroduce1026.pdf">ServiceComb开源项目介绍</a></li>
+</ul>
+
+<h2 id="servicecomb直播第二期-20171102"><a href="http://www.itdks.com/liveevent/detail/6620">ServiceComb直播第二期</a>, 20171102</h2>
+<ul>
+  <li><a href="/assets/slides/20171102/ServiceComb_PastAndPresent.pdf">ServiceComb前世今生</a></li>
+</ul>
+
+<h2 id="servicecomb直播第三期-20171109"><a href="http://www.itdks.com/liveevent/detail/6621">ServiceComb直播第三期</a>, 20171109</h2>
+<ul>
+  <li><a href="/assets/slides/20171109/MicroservicePracticeOfHuaweiConsumerCloudBasedOnServiceComb.pdf">消费者云ServiceComb微服务实践</a></li>
+</ul>
+
+<h2 id="servicecomb-直播第四期-20171124"><a href="http://www.itdks.com/liveevent/detail/6622">ServiceComb 直播第四期</a>, 20171124</h2>
+<ul>
+  <li><a href="/assets/slides/20171124/LiveCodingServiceCombQuickStart.zip">ServiceComb快速入门&amp;&amp;在线Coding</a></li>
+</ul>
+
+<h2 id="servicecomb-直播第五期-20171207"><a href="http://www.itdks.com/liveevent/detail/6623">ServiceComb 直播第五期</a>, 20171207</h2>
+<ul>
+  <li><a href="/assets/slides/20171207/Uncover_ServiceComb_Design.pdf">ServiceComb设计揭秘</a></li>
+</ul>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _pages/cn/about-slides.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_pages/cn/about-slides.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>


[55/57] incubator-servicecomb-website git commit: make behavior of environment setup page consistent

Posted by ni...@apache.org.
make behavior of environment setup page consistent


Project: http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/commit/d4674105
Tree: http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/tree/d4674105
Diff: http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/diff/d4674105

Branch: refs/heads/asf-site
Commit: d46741051d19bb85a34245e2e46a00f27602d352
Parents: 08e1b43
Author: zhangshuaitao <17...@qq.com>
Authored: Tue Dec 12 14:25:02 2017 +0800
Committer: Willem Jiang <ji...@huawei.com>
Committed: Tue Dec 12 16:07:40 2017 +0800

----------------------------------------------------------------------
 _users/setup-environment.md | 41 ++++++++++++++++++++--------------------
 1 file changed, 21 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/d4674105/_users/setup-environment.md
----------------------------------------------------------------------
diff --git a/_users/setup-environment.md b/_users/setup-environment.md
index 36aeb06..e9f1ffd 100644
--- a/_users/setup-environment.md
+++ b/_users/setup-environment.md
@@ -24,33 +24,34 @@ last_modified_at: 2017-09-03T10:01:43-04:00
 
 1. 以可执行文件的方式运行
 
-    <details open>
-      <summary>Windows运行步骤</summary>
-      <div markdown="1">
-      1. 下载[服务注册中心可执行文件压缩包](https://github.com/ServiceComb/service-center/releases/download/0.1.1/service-center-0.1.1-windows-amd64.zip)
-      2. 解压缩到当前文件夹
-      3. 进入解压缩后的目录,然后双击运行**start**文件
-      </div>
-    </details>
-    <details open>
-      <summary>Linux运行步骤</summary>
-      <div markdown="1">
-      1. 下载服务注册中心可执行文件压缩包并解压缩
-      ```bash
+   <ul class="nav nav-tabs">
+     <li data-toggle="tab" class="active"><a data-toggle="tab" href="#windows">Windows</a></li>
+     <li data-toggle="tab"><a data-toggle="tab" href="#linux">Linux</a></li>
+   </ul>
+   
+   <div class="tab-content">
+     <div id="windows" class="tab-pane active" markdown="1">
+   1. 下载[服务注册中心可执行文件压缩包](https://github.com/ServiceComb/service-center/releases/download/0.1.1/service-center-0.1.1-windows-amd64.zip)
+   2. 解压缩到当前文件夹
+   3. 进入解压缩后的目录,然后双击运行**start**文件
+     </div>
+     <div id="linux" class="tab-pane fade" markdown="1">
+   1. 下载服务注册中心可执行文件压缩包并解压缩
+   ```bash
    wget https://github.com/ServiceComb/service-center/releases/download/0.1.1/service-center-0.1.1-linux-amd64.tar.gz
    tar xvf service-center-0.1.1-linux-amd64.tar.gz
-      ```
-      2. 运行服务注册中心
-      ```bash
+   ```
+   2. 运行服务注册中心
+   ```bash
    bash service-center-0.1.1-linux-amd64/start.sh
-      ```
-      </div>
-    </details>
+   ```
+    </div>
+   </div>
 
    注意:Window和Linux版本均只支持64位系统。
    {: .notice--warning}
 
-2.以Docker的方式运行
+2. 以Docker的方式运行
 
 ```bash
 docker pull servicecomb/service-center


[10/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/feed.xml
----------------------------------------------------------------------
diff --git a/content/feed.xml b/content/feed.xml
new file mode 100644
index 0000000..89aa367
--- /dev/null
+++ b/content/feed.xml
@@ -0,0 +1,1476 @@
+<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.4.3">Jekyll</generator><link href="/feed.xml" rel="self" type="application/atom+xml" /><link href="/" rel="alternate" type="text/html" /><updated>2017-12-10T21:17:12+08:00</updated><id>/</id><title type="html">Apache incubator ServiceComb</title><subtitle>The homepage of ServiceComb</subtitle><author><name>{&quot;name&quot;=&gt;nil, &quot;avatar&quot;=&gt;&quot;/assets/images/ServiceComb-logo-3.jpg&quot;, &quot;bio&quot;=&gt;&quot;ServiceComb is a microservice framework that provides service registration, discovery, configuration and management utilities.&quot;, &quot;biocn&quot;=&gt;&quot;ServiceComb提供了一套关于服务注册,服务发现,服务配置以及管理功能的微服务框架&quot;, &quot;location&quot;=&gt;&quot;China&quot;, &quot;locationcn&quot;=&gt;&quot;中国&quot;, &quot;email&quot;=&gt;&quot;servicecomb-developers@googlegro
 ups.com&quot;, &quot;uri&quot;=&gt;nil, &quot;bitbucket&quot;=&gt;nil, &quot;codepen&quot;=&gt;nil, &quot;dribbble&quot;=&gt;nil, &quot;flickr&quot;=&gt;nil, &quot;facebook&quot;=&gt;nil, &quot;foursquare&quot;=&gt;nil, &quot;github&quot;=&gt;&quot;ServiceComb&quot;, &quot;google_plus&quot;=&gt;nil, &quot;keybase&quot;=&gt;nil, &quot;instagram&quot;=&gt;nil, &quot;lastfm&quot;=&gt;nil, &quot;linkedin&quot;=&gt;nil, &quot;pinterest&quot;=&gt;nil, &quot;soundcloud&quot;=&gt;nil, &quot;stackoverflow&quot;=&gt;nil, &quot;steam&quot;=&gt;nil, &quot;tumblr&quot;=&gt;nil, &quot;twitter&quot;=&gt;nil, &quot;vine&quot;=&gt;nil, &quot;weibo&quot;=&gt;nil, &quot;xing&quot;=&gt;nil, &quot;youtube&quot;=&gt;nil}</name><email>servicecomb-developers@googlegroups.com</email></author><entry xml:lang="cn"><title type="html">老司机带你刷任务 - ServiceComb JIRA入门指南</title><link href="/cn/docs/jira_beginner_guide/" rel="alternate" type="text/html" title="老司机带你刷任务 - Servic
 eComb JIRA入门指南" /><published>2017-11-16T00:00:00+08:00</published><updated>2017-11-16T11:43:00+08:00</updated><id>/cn/docs/jira-beginner-guide</id><content type="html" xml:base="/cn/docs/jira_beginner_guide/">&lt;p&gt;想参与社区贡献,却感觉老虎咬天,无从下口?不用担心,老司机带你一起刷新手任务!&lt;/p&gt;
+
+&lt;p&gt;ServiceComb的所有任务托管在&lt;a href=&quot;https://servicecomb.atlassian.net&quot;&gt;ServiceComb JIRA&lt;/a&gt;上,
+首先你需要&lt;a href=&quot;https://id.atlassian.com/signup?continue=https%3A%2F%2Fservicecomb.atlassian.net%2Flogin%3FredirectCount%3D1&quot;&gt;注册&lt;/a&gt;一个免费JIRA账户。&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/jira/jira.signup.png&quot; alt=&quot;jira sign up&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;登陆后请首先花几分钟上传自己的个性头像,让大家可以一眼看出哪些任务在你的掌控之下。&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/jira/jira.board.profile.png&quot; alt=&quot;jira profile&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;接下来在菜单栏点击Boards,选择ServiceComb转到如下Kanban board。&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/jira/jira.board.selection.png&quot; alt=&quot;jira board selection&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;ServiceComb Kanban board页面分为三列:&lt;/p&gt;
+&lt;ul&gt;
+  &lt;li&gt;To Do:还未开始的任务&lt;/li&gt;
+  &lt;li&gt;In Progress:进行中的任务&lt;/li&gt;
+  &lt;li&gt;Done:已完成的任务&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/jira/jira.board.png&quot; alt=&quot;jira board&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;To Do列的任务卡上如果没有头像,代表这个任务无人领取,但作为新手,我怎么知道哪个任务容易上手呢?
+我们很细心的为新手任务加上了绿色竖线标记,这个标记对应所有打了 &lt;code class=&quot;highlighter-rouge&quot;&gt;good-first-issue&lt;/code&gt; 标签的任务,
+以便大家一眼识别,立即上手。&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/jira/jira.good.first.issue.png&quot; alt=&quot;jira good first issue&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/jira/jira.story.png&quot; alt=&quot;jira story&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;另外,任务还按照功能模块划分了epic,这样大家可以在自己擅长的领域大显身手,或者在全新的模块挑战自己。&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/jira/jira.epic.png&quot; alt=&quot;jira epic&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;选到心仪的任务后,记得讲任务分配给自己,以免被别人抢走。&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/jira/jira.story.assignment.png&quot; alt=&quot;jira story assignment&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;另外别忘了根据自己的进度,更新对应任务的状态,你可以直接拖动任务卡到对应状态列。&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/jira/jira.status.update.png&quot; alt=&quot;jira status update&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;最后,在完成任务后,咨询项目带队老司机,将自己的贡献添加到对应的发布版本中。&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/jira/jira.fix.version.png&quot; alt=&quot;jira fix.version&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;看到现在相信你已经跃跃欲试,赶紧加入我们一起刷任务升级吧!&lt;/p&gt;</content><author><name>Sean Yin</name><email>seanyinx@gmail.com</email><uri>http://seanyinx.github.io</uri></author><summary type="html">ServiceComb JIRA入门指南</summary></entry><entry xml:lang="cn"><title type="html">Service-Center Management UI Console</title><link href="/docs/service-center-ui/" rel="alternate" type="text/html" title="Service-Center Management UI Console" /><published>2017-10-28T00:00:00+08:00</published><updated>2017-10-30T09:18:43+08:00</updated><id>/docs/service-center-ui</id><content type="html" xml:base="/docs/service-center-ui/">&lt;p&gt;Service-Center Management UI Console enables user to view the list of MicroServices registered in SC.
+Users can view the detailed information of their MicroServices, Instances and Schemas.
+Service-Center UI also offers a unique feature of testing the Schemas of their MicroServices from UI, Users 
+can also download the html client for their Schemas.&lt;/p&gt;
+
+&lt;h3 id=&quot;preview-of-management-console&quot;&gt;Preview of Management Console&lt;/h3&gt;
+&lt;p&gt;&lt;img src=&quot;/assets/images/Service-Center-UI-Preview.gif&quot; alt=&quot;Preview&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;h3 id=&quot;features&quot;&gt;Features&lt;/h3&gt;
+&lt;p&gt;Service-Center Management console offers very useful features which makes users easy to use and manage service-center.&lt;/p&gt;
+
+&lt;h3 id=&quot;dashboard&quot;&gt;Dashboard&lt;/h3&gt;
+&lt;p&gt;This is the place where you can get the overall information about the services which are registered in your service-center like total number of services, providers, consumers and total instances. You can also get a list of Services which based on their current status.&lt;br /&gt;
+&lt;img src=&quot;/assets/images/Dashboard.PNG&quot; alt=&quot;Dashboard&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;h3 id=&quot;micro-service-list&quot;&gt;Micro-Service List&lt;/h3&gt;
+&lt;p&gt;This is the place where you can see the basic details of all the services which are registered in Service-Center. You can see the details like MicroService Name, Application Name, Status, Version, Creation time and Instance count. You can also un-register the microservice from Operations Tab if there is no running instances for the microservice.&lt;br /&gt;
+&lt;img src=&quot;/assets/images/ServiceList.PNG&quot; alt=&quot;ServiceList&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;h3 id=&quot;instance-details&quot;&gt;Instance Details&lt;/h3&gt;
+&lt;p&gt;This is the place where you can see all the current running instances for the MicroService, you can get the list of endpoints and their protocols.&lt;br /&gt;
+&lt;img src=&quot;/assets/images/InstanceList.PNG&quot; alt=&quot;InstanceList&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;h3 id=&quot;provider-list&quot;&gt;Provider List&lt;/h3&gt;
+&lt;p&gt;This is the place where you can get the list of all the providers for the MicroService.&lt;br /&gt;
+&lt;img src=&quot;/assets/images/ProviderList.PNG&quot; alt=&quot;Provider List&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;h3 id=&quot;consumer-list&quot;&gt;Consumer List&lt;/h3&gt;
+&lt;p&gt;This is the place where you can get the list of all the consumers for the MicroService&lt;br /&gt;
+&lt;img src=&quot;/assets/images/ConsumerList.PNG&quot; alt=&quot;Consumer List&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;h3 id=&quot;schema-list&quot;&gt;Schema List&lt;/h3&gt;
+&lt;p&gt;This is the place where we can get the list of all the Schema's for your MicroService, here you get options of viewing the Schema in Swagger form or Test the Schema on some particular instance. Here you also get an option to Download the Schema file in Html Client form.&lt;br /&gt;
+&lt;img src=&quot;/assets/images/SchemaList.PNG&quot; alt=&quot;Schema List&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;For Viewing the Schema in Swagger form you can click on Test Schema button and you can view the complete details of Schema in Swagger form.&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/SchemaView.PNG&quot; alt=&quot;View Swagger&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;If you wish to test the Schema on some particular Instance then you can click on Test Schema and select the instance on which you want to test the Schema and then select the endpoints for that instance.&lt;br /&gt;
+&lt;img src=&quot;/assets/images/SelectInstance.PNG&quot; alt=&quot;Select Instance&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;Once you selected the instance then you are ready for testing the Schema, you can input the required parameters for the Schema and hit on ‘Try it Out’ Button.&lt;br /&gt;
+&lt;img src=&quot;/assets/images/Schematest.PNG&quot; alt=&quot;Schema Test&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;h5 id=&quot;you-can-have-a-look-at-the-quick-start-guide-to-know-about-how-to-bring-up-the-management-console&quot;&gt;You can have a look at the &lt;a href=&quot;https://github.com/ServiceComb/service-center/tree/master/frontend#quickstart-guide&quot;&gt;Quick Start Guide&lt;/a&gt; to know about how to bring up the Management Console.&lt;/h5&gt;</content><author><name>Asif Siddiqui</name><email>mohammad.asif.siddiqui1@huawei.com</email><uri>http://asifdxtreme.github.io</uri></author><category term="service center" /><summary type="html">An introduction Service-Center Management Console</summary></entry><entry xml:lang="en"><title type="html">Service-Center Management UI Console</title><link href="/docs/service-center-ui/" rel="alternate" type="text/html" title="Service-Center Management UI Console" /><published>2017-10-28T00:00:00+08:00</published><updated>2017-10-30T09:18:43+08:00</updated><id>/docs/service-center-ui</id><content type="html" xml:base="/docs/service-center-ui/"
 >&lt;p&gt;Service-Center Management UI Console enables user to view the list of MicroServices registered in SC.
+Users can view the detailed information of their MicroServices, Instances and Schemas.
+Service-Center UI also offers a unique feature of testing the Schemas of their MicroServices from UI, Users 
+can also download the html client for their Schemas.&lt;/p&gt;
+
+&lt;h3 id=&quot;preview-of-management-console&quot;&gt;Preview of Management Console&lt;/h3&gt;
+&lt;p&gt;&lt;img src=&quot;/assets/images/Service-Center-UI-Preview.gif&quot; alt=&quot;Preview&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;h3 id=&quot;features&quot;&gt;Features&lt;/h3&gt;
+&lt;p&gt;Service-Center Management console offers very useful features which makes users easy to use and manage service-center.&lt;/p&gt;
+
+&lt;h3 id=&quot;dashboard&quot;&gt;Dashboard&lt;/h3&gt;
+&lt;p&gt;This is the place where you can get the overall information about the services which are registered in your service-center like total number of services, providers, consumers and total instances. You can also get a list of Services which based on their current status.&lt;br /&gt;
+&lt;img src=&quot;/assets/images/Dashboard.PNG&quot; alt=&quot;Dashboard&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;h3 id=&quot;micro-service-list&quot;&gt;Micro-Service List&lt;/h3&gt;
+&lt;p&gt;This is the place where you can see the basic details of all the services which are registered in Service-Center. You can see the details like MicroService Name, Application Name, Status, Version, Creation time and Instance count. You can also un-register the microservice from Operations Tab if there is no running instances for the microservice.&lt;br /&gt;
+&lt;img src=&quot;/assets/images/ServiceList.PNG&quot; alt=&quot;ServiceList&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;h3 id=&quot;instance-details&quot;&gt;Instance Details&lt;/h3&gt;
+&lt;p&gt;This is the place where you can see all the current running instances for the MicroService, you can get the list of endpoints and their protocols.&lt;br /&gt;
+&lt;img src=&quot;/assets/images/InstanceList.PNG&quot; alt=&quot;InstanceList&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;h3 id=&quot;provider-list&quot;&gt;Provider List&lt;/h3&gt;
+&lt;p&gt;This is the place where you can get the list of all the providers for the MicroService.&lt;br /&gt;
+&lt;img src=&quot;/assets/images/ProviderList.PNG&quot; alt=&quot;Provider List&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;h3 id=&quot;consumer-list&quot;&gt;Consumer List&lt;/h3&gt;
+&lt;p&gt;This is the place where you can get the list of all the consumers for the MicroService&lt;br /&gt;
+&lt;img src=&quot;/assets/images/ConsumerList.PNG&quot; alt=&quot;Consumer List&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;h3 id=&quot;schema-list&quot;&gt;Schema List&lt;/h3&gt;
+&lt;p&gt;This is the place where we can get the list of all the Schema's for your MicroService, here you get options of viewing the Schema in Swagger form or Test the Schema on some particular instance. Here you also get an option to Download the Schema file in Html Client form.&lt;br /&gt;
+&lt;img src=&quot;/assets/images/SchemaList.PNG&quot; alt=&quot;Schema List&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;For Viewing the Schema in Swagger form you can click on Test Schema button and you can view the complete details of Schema in Swagger form.&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/SchemaView.PNG&quot; alt=&quot;View Swagger&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;If you wish to test the Schema on some particular Instance then you can click on Test Schema and select the instance on which you want to test the Schema and then select the endpoints for that instance.&lt;br /&gt;
+&lt;img src=&quot;/assets/images/SelectInstance.PNG&quot; alt=&quot;Select Instance&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;Once you selected the instance then you are ready for testing the Schema, you can input the required parameters for the Schema and hit on ‘Try it Out’ Button.&lt;br /&gt;
+&lt;img src=&quot;/assets/images/Schematest.PNG&quot; alt=&quot;Schema Test&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;h5 id=&quot;you-can-have-a-look-at-the-quick-start-guide-to-know-about-how-to-bring-up-the-management-console&quot;&gt;You can have a look at the &lt;a href=&quot;https://github.com/ServiceComb/service-center/tree/master/frontend#quickstart-guide&quot;&gt;Quick Start Guide&lt;/a&gt; to know about how to bring up the Management Console.&lt;/h5&gt;</content><author><name>Asif Siddiqui</name><email>mohammad.asif.siddiqui1@huawei.com</email><uri>http://asifdxtreme.github.io</uri></author><category term="service center" /><summary type="html">An introduction Service-Center Management Console</summary></entry><entry xml:lang="cn"><title type="html">最头疼的遗留系统该如何改造?</title><link href="/cn/docs/how-to-reform-a-legacy-system/" rel="alternate" type="text/html" title="最头疼的遗留系统该如何改造?" /><published>2017-10-23T00:00:00+08:00</published><updated>2017-10-23T15:22:00+08:00</updated><id>/cn/docs/how-to-reform-a-legacy-system</id><content type=
 "html" xml:base="/cn/docs/how-to-reform-a-legacy-system/">&lt;p&gt;随着RESTful、云计算、DevOps、持续交付等概念的深入人心,微服务(Microservices)逐渐成为系统架构的一个代名词。那么微服务是否是业界期待已久的架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?在该分享中,王磊将通过实际的案例,跟大家探讨使用微服务改造遗留系统的实践之路。&lt;/p&gt;
+
+&lt;ul&gt;
+  &lt;li&gt;什么是微服务&lt;/li&gt;
+  &lt;li&gt;微服务的诞生背景&lt;/li&gt;
+  &lt;li&gt;遗留系统的微服务改造策略&lt;/li&gt;
+  &lt;li&gt;微服务改造之路&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;h2 id=&quot;背景&quot;&gt;背景&lt;/h2&gt;
+&lt;p&gt;什么是系统架构设计?&lt;/p&gt;
+
+&lt;p&gt;一直以来,系统架构设计是IT领域经久不衰的话题之一,是每个系统构建过程中极其关键的一部分,它决定了系统是否能够被正确、有效的构建。架构师们也一直在持续探索,寻找更优秀的架构设计方式来构建系统。&lt;/p&gt;
+
+&lt;p&gt;那什么是系统的架构设计?对于这个问题,我相信每个朋友都会有不同的定义,实际上,也并没有一个标准的答案来解释什么是架构设计。&lt;/p&gt;
+
+&lt;p&gt;基于我过去的经验和工作方式,我认为系统架构设计的本质,是在应用系统内部找到这样一个动态平衡:平衡业务、技术、团队的同时,考虑系统灵活性、可扩展性以及可维护性等因素,并将应用系统划分成不同的部分,使这些部分彼此之间相互分工、相互协作,从而为用户提供某种特定的价值的方式。&lt;/p&gt;
+
+&lt;p&gt;随着RESTful、云计算、DevOps、持续交付等概念的深入人心,&lt;strong&gt;微服务架构逐渐成为系统架构的一个代名词&lt;/strong&gt;。&lt;/p&gt;
+
+&lt;h2 id=&quot;什么是微服务架构&quot;&gt;什么是微服务架构&lt;/h2&gt;
+&lt;p&gt;2015年,微服务架构这个词,以相当高的频率出现在各种演讲、文章、会议、社区上。这里,我先和大家快速回顾一下,Martin Fowler对微服务的抽象。&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/microservice_definition_by_martin_folwer.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;如上所示,微服务架构的核心四要素,我用红色标注出来了。如果翻译成中文,大致如下所示:&lt;/p&gt;
+
+&lt;blockquote&gt;
+  &lt;p&gt;微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。 每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相协作(通常是基于HTTP协议的RESTful API)。 每个服务都围绕着具体业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。 另外,对具体的服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建。&lt;/p&gt;
+&lt;/blockquote&gt;
+
+&lt;p&gt;总结成一句话就是&lt;strong&gt;微服务是围绕业务构建的细粒度的分布式系统&lt;/strong&gt;。&lt;/p&gt;
+
+&lt;h2 id=&quot;微服务的诞生背景&quot;&gt;微服务的诞生背景&lt;/h2&gt;
+&lt;p&gt;2015年,微服务突然火了,为什么?&lt;/p&gt;
+
+&lt;p&gt;其实微服务架构并不是技术创新,而是IT发展到现阶段对技术架构的一种阐释。&lt;/p&gt;
+
+&lt;p&gt;它要求包括&lt;strong&gt;快速和业务对齐(aligning business)、理解和抽象业务(基于领域建模)、快速开发(Lean、Agile)、快速反馈和交付(CI、CD、DevOps)&lt;/strong&gt;。&lt;/p&gt;
+
+&lt;p&gt;所以说,微服务并不是技术,而是将化整为零(或称分治)思想换了一种说法,无论是把一个大型系统分割成多个小而自治的系统,还是把一个大型团队分成多个团队,或是把一个复杂的项目分成多个交付阶段都是这种思想的运用。&lt;/p&gt;
+
+&lt;p&gt;当然,任何新事物的诞生,总会有一个推动因素。微服务的诞生也并非偶然。它是互联网高速发展,技术日新月异的变化以及传统架构无法适应快速变化等多重因素的推动下所诞生的产物。&lt;/p&gt;
+
+&lt;p&gt;基于个人的理解,我将微服务的诞生因素总结为如下几点:&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/why_microservice_show_up.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
+
+&lt;ol&gt;
+  &lt;li&gt;
+    &lt;p&gt;&lt;strong&gt;互联网行业的快速发展&lt;/strong&gt;&lt;/p&gt;
+
+    &lt;p&gt;过去的十年中,互联网对我们的生活产生了翻天覆地的变化,越来越多的传统行业公司也开始依赖互联网技术打造其核心竞争优势。&lt;/p&gt;
+
+    &lt;p&gt;在这种情况下,如何从系统架构的角度出发,构建灵活、易扩展的系统,快速应对需求的变化;同时,随着用户量的增加,如何保证系统的可伸缩性、高可用性,成为系统架构面临的挑战。&lt;/p&gt;
+  &lt;/li&gt;
+  &lt;li&gt;
+    &lt;p&gt;&lt;strong&gt;单块架构系统面临的挑战&lt;/strong&gt;&lt;/p&gt;
+
+    &lt;p&gt;随着用户需求个性化、产品生命周期变短、市场需求不稳定等因素的出现,单块架构系统面临着越来越多的挑战。如何找到一种更有效的、更灵活、适应需求的系统架构方式,成为大家关注的焦点。&lt;/p&gt;
+  &lt;/li&gt;
+  &lt;li&gt;
+    &lt;p&gt;&lt;strong&gt;敏捷、精益方法、持续交付的深入人心&lt;/strong&gt;&lt;/p&gt;
+
+    &lt;p&gt;在IT行业发展的过去十年,敏捷、精益、持续交付等价值观、方法论的提出以及实践,让很多组织意识到应变市场变化、提高响应力的重要性,应该构建软件交付周期的闭环(分析、开发、测试、部署、运维、监控、运营),而不仅仅是提高开发阶段的效率。&lt;/p&gt;
+
+    &lt;p&gt;&lt;strong&gt;精益创业(Lean Startup)&lt;/strong&gt;帮助组织分析并建立最小可实行产品(MinimumViableProduct),通过迭代持续改进敏捷方法帮助组织消除浪费,通过反馈不断找到正确的方向。&lt;/p&gt;
+
+    &lt;p&gt;&lt;strong&gt;持续交付&lt;/strong&gt;则帮助组织构建更快、更可靠、可频繁发布的交付机制并构建产品交付闭环。&lt;/p&gt;
+
+    &lt;p&gt;大部分组织已经基本上形成了一套可实施的交付体系。包括持续集成、自动化测试、数据管理、自动化部署机制等。&lt;/p&gt;
+
+    &lt;p&gt;这时候,大泥球式的单块架构,会逐渐成为影响交付周期进一步优化的瓶颈,因此如何找到灵活性高、扩展性好的架构方式,也成为进一步优化交付周期面临的挑战。&lt;/p&gt;
+  &lt;/li&gt;
+  &lt;li&gt;
+    &lt;p&gt;&lt;strong&gt;Docker等容器虚拟化技术的快速发展&lt;/strong&gt;&lt;/p&gt;
+
+    &lt;p&gt;同传统的虚拟化技术相比,基于容器技术的Docker,不需要复杂的Hypervisor机制支持,具有更高的虚拟化性能和效率。&lt;/p&gt;
+
+    &lt;p&gt;同时容器可以很容易的运行在任意的装有DockerEngine的系统上,使得开发人员能够用更低的成本将应用程序部署在不同平台上。&lt;/p&gt;
+  &lt;/li&gt;
+  &lt;li&gt;
+    &lt;p&gt;&lt;strong&gt;DevOps文化&lt;/strong&gt;&lt;/p&gt;
+
+    &lt;p&gt;DevOps文化的推行打破了传统开发与运维之间的壁垒,帮助组织形成开发、运维紧密配合的、全功能化的高效团队,并尽早降低软件交付最后一公里的风险。&lt;/p&gt;
+  &lt;/li&gt;
+&lt;/ol&gt;
+
+&lt;h2 id=&quot;遗留系统的微服务改造策略&quot;&gt;遗留系统的微服务改造策略&lt;/h2&gt;
+&lt;p&gt;聊完什么是微服务架构以及其诞生背景,接下来我们来谈谈如何改造遗留系统。&lt;/p&gt;
+
+&lt;p&gt;在过去的10多年间,大部分工作时间我都在和遗留系统打交道。我相信很多朋友也是工作在已经运转多年的遗留系统上。&lt;/p&gt;
+
+&lt;p&gt;对于这类系统,当谈论使用微服务对其进行改造时,我认为要谨记一点:&lt;/p&gt;
+
+&lt;p&gt;&lt;strong&gt;改造不是重做。&lt;/strong&gt;&lt;/p&gt;
+
+&lt;p&gt;&lt;strong&gt;在改造的过程中,要始终以保证系统为用户提供的业务价值可用作为首要目标。&lt;/strong&gt;从这个点出发,基于我的经验,对微服务改造的策略总结为如下五个步骤:&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/microservice_reform_strategy.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
+
+&lt;ol&gt;
+  &lt;li&gt;
+    &lt;p&gt;范围定义&lt;/p&gt;
+
+    &lt;p&gt;对于遗留系统而言,通常业务运转时间较长(譬如5~8年以上,甚至更长),因此涉及的功能繁杂,代码中存在大量无效或者过时的需求,缺陷修复成本较高。&lt;/p&gt;
+
+    &lt;p&gt;另外,系统在演进的过程中,也会持续为用户提供新的功能和价值。因此,划分出清晰的范围非常重要。&lt;/p&gt;
+
+    &lt;p&gt;实际上,范围定义主要包括两部分:&lt;/p&gt;
+
+    &lt;ol&gt;
+      &lt;li&gt;
+        &lt;p&gt;明确业务改造范围&lt;/p&gt;
+
+        &lt;p&gt;所谓改造范围,就是确定我们常说的业务试点。通常,作为初次尝试微服务实践的组织,建议选取业务范围影响较小、非关键功能的试点,这样做也是为了确保在不影响核心业务的情况下快速尝试并获得反馈。&lt;/p&gt;
+      &lt;/li&gt;
+      &lt;li&gt;
+        &lt;p&gt;明确成员责任范围&lt;/p&gt;
+
+        &lt;p&gt;明确成员责任范围,确定由谁来改造,确保改造的目标清晰。&lt;/p&gt;
+
+        &lt;p&gt;实际上,对于产品而言,遗留系统的维护和更新,包括缺陷定位、缺陷修复、数据更新、功能实现、测试、交付给运维团队等,通常已经让团队的工作处于高负荷状态。因此,需要确定成员,全身心的投入,以微服务改造作为短期目标。&lt;/p&gt;
+      &lt;/li&gt;
+    &lt;/ol&gt;
+  &lt;/li&gt;
+  &lt;li&gt;
+    &lt;p&gt;功能剥离&lt;/p&gt;
+
+    &lt;p&gt;有了明确的业务范围,成员也有了清晰的责任,接下来就需要将部分功能点进行剥离。&lt;/p&gt;
+
+    &lt;p&gt;所谓剥离,就是将选中的功能从原有的系统中拆分出来,并构建成独立的服务。在这个阶段,主要包括两点:&lt;/p&gt;
+
+    &lt;ol&gt;
+      &lt;li&gt;
+        &lt;p&gt;将功能从原有系统拆分出来,并构建新服务&lt;/p&gt;
+
+        &lt;p&gt;一提到拆分,很多朋友会纠结,“系统复杂,如何拆分微服务才好?怎么样的拆分才合理?”。其实,从我个人的观点来看,这时候还不是纠结服务到底怎么划分合理的时候。为什么?&lt;/p&gt;
+
+        &lt;ol&gt;
+          &lt;li&gt;
+            &lt;p&gt;好的架构是动态演变和迭代出来的,业务在不断改变,技术和工具也在不会的升级换代,没有完美的架构,只有无限逼近完美的动态平衡,所以先小范围、低成本动起来,在运转中找平衡点。&lt;/p&gt;
+          &lt;/li&gt;
+          &lt;li&gt;
+            &lt;p&gt;微服务的复杂度在于分布式系统本身,以及其生态系统(开发、测试、部署、运维、监控、告警)的搭建。&lt;/p&gt;
+          &lt;/li&gt;
+          &lt;li&gt;
+            &lt;p&gt;团队文化的形成是一个相对漫长的过程,如果花很大力气关注服务怎么拆,而没有聚焦在生态系统的搭建以及团队文化的形成上,实际上是舍本逐末。即便拆分出了不同的服务,在落地的时候也会遇到诸多问题。所以,找一个功能点先拆,然后搭建持续交付流水线,快速试错,建立好有效的反馈闭环机制,再不断寻找动态平衡,拆分出更细的服务或者将不合理的服务合并。&lt;/p&gt;
+          &lt;/li&gt;
+        &lt;/ol&gt;
+      &lt;/li&gt;
+      &lt;li&gt;
+        &lt;p&gt;在原有的系统前端,使用代理机制,并使用遗留系统和新服务组合为用户提供价值&lt;/p&gt;
+
+        &lt;p&gt;这一步,目的是使用组合的系统(遗留系统+新的服务)为用户提供价值。&lt;/p&gt;
+
+        &lt;p&gt;对于Web系统,通常可以在前端使用直接请求新的服务。也可以在后端使用转发请求,获取新服务提供的数据。&lt;/p&gt;
+
+        &lt;p&gt;如下图所示:&lt;/p&gt;
+
+        &lt;p&gt;&lt;img src=&quot;/assets/images/microservice_reform_strategy.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
+      &lt;/li&gt;
+    &lt;/ol&gt;
+  &lt;/li&gt;
+  &lt;li&gt;
+    &lt;p&gt;数据解耦&lt;/p&gt;
+
+    &lt;p&gt;在以前的遗留系统构建过程中,通常使用数据库作为集成点,不同功能/系统之间通过数据库完成数据交换。对于某些系统,还大量使用存储过程完成业务逻辑,开发的时候看似效率高,但几年下来,DBA成了IT团队最懂业务的人,维护成为瓶颈。&lt;/p&gt;
+
+    &lt;p&gt;而实际上,业务的数据是业务固有的组成部分,应当随着业务的变化而变化。业务拆分出来,数据也应该拆分出来。从而保证访问数据只能通过统一的相关业务API完成。便于在将来的业务和架构演进中,有效的对数据维护、管理和升级。&lt;/p&gt;
+  &lt;/li&gt;
+  &lt;li&gt;
+    &lt;p&gt;数据同步&lt;/p&gt;
+
+    &lt;p&gt;数据同步,是一个价值体现的过渡过程。&lt;/p&gt;
+
+    &lt;p&gt;一方面,遗留系统的改造中存在的各种各样的挑战和我们今天认为的不合理(当时的场景也许是合理的)。另一方面,对于大部分遗留的系统,都会使用数据库作为集成点(开发成本低),导致某业务功能的数据与其他功能有着千丝万缕的联系,数据的变化容易对其他功能造成影响。&lt;/p&gt;
+
+    &lt;p&gt;因此对于大型的遗留系统,很难在短期的时间内(3~6个月)完成全系统的改造。需要一个相对漫长,循序渐进的过程来完成改造。&lt;/p&gt;
+
+    &lt;p&gt;譬如,在电商系统中,商家的后台管理系统中的产品、价格的更新,会发布到面向用户的电商搜索系统中以及其他系统中。如果我们将系统中的产品相关拆分成独立服务,则必须也要拆分数据发布机制,否则的话容易造成数据不一致。但拆分数据发布机制,又需要分析清楚不同数据之间的影响和依赖,需要更大的成本,短期内不易完成。&lt;/p&gt;
+
+    &lt;p&gt;这时候,如果将新服务的数据同步回原有的数据库,采用这样一个折中的的过程,既能保障新的服务和数据被独立,又不影响原有的遗留系统功能。&lt;/p&gt;
+
+    &lt;p&gt;说白了,这其实也是在保证系统为用户提供的业务价值不被破坏。&lt;/p&gt;
+
+    &lt;p&gt;有了之前的尝试,接下来就是通过不断的迭代,完成功能剥离,数据解耦、数据同步,从而将更多的功能拆分成独立的服务。&lt;/p&gt;
+  &lt;/li&gt;
+&lt;/ol&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/legacy_system_reform_strategy.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;如上就是我对于遗留系统改造的策略。&lt;/p&gt;
+
+&lt;h2 id=&quot;遗留系统改造实践&quot;&gt;遗留系统改造实践&lt;/h2&gt;
+&lt;p&gt;接下来,我和大家分享一个我所经历的遗留系统改造的案例。首先,让我们看看这个系统的背景和一些数据。&lt;/p&gt;
+
+&lt;h3 id=&quot;客户背景&quot;&gt;客户背景&lt;/h3&gt;
+
+&lt;p&gt;&lt;a href=&quot;http://movit-tech.com/&quot;&gt;盟拓软件&lt;/a&gt;是中国房地产行业IT服务及行业解决方案和产品的领先厂家,其依据市场变化推出全民卖房的新营销模式,正从线下的传统现场售楼模式向线上的房地产电商模式进行转变。&lt;/p&gt;
+
+&lt;h3 id=&quot;业务痛点&quot;&gt;业务痛点&lt;/h3&gt;
+
+&lt;p&gt;当今房地产行业呈现短期开盘峰值、后期零星散客的业务特性。其面临着高昂线下运营成本,营销成本占销售额&amp;gt;5%。而由此引入的线上竞价秒杀营销模式,传统IT解决方案的系统资源率、峰值扩容能力将无法满足。&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/case_mengtuo_traditional_mode.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
+
+&lt;h3 id=&quot;系统概览&quot;&gt;系统概览&lt;/h3&gt;
+
+&lt;p&gt;系统为典型的三层单块架构,使用MySQL数据库存储数据。运行在服务器上的应用处理性能较低,为了应对短暂的访问高峰,额外购置了较多的服务器资源,访问高峰过后,服务器资源闲置造成较大浪费,且需要较多人员维护。&lt;/p&gt;
+
+&lt;h3 id=&quot;相关数据&quot;&gt;相关数据&lt;/h3&gt;
+
+&lt;ul&gt;
+  &lt;li&gt;
+    &lt;p&gt;代码约&lt;strong&gt;100万&lt;/strong&gt;行,测试覆盖率为&lt;strong&gt;10%&lt;/strong&gt;,集成测试时间为&lt;strong&gt;一个月&lt;/strong&gt;&lt;/p&gt;
+
+    &lt;p&gt;代码臃肿,无效遗留代码较多,且业务间紧耦合,测试覆盖率较低,测试出问题了难以定位,导致测试耗时较长。&lt;/p&gt;
+  &lt;/li&gt;
+  &lt;li&gt;
+    &lt;p&gt;营销预案需&lt;strong&gt;提前1个月&lt;/strong&gt;准备资源&lt;/p&gt;
+
+    &lt;p&gt;为应对访问高峰,每次都需要预购大量的服务资源,重新部署环境,并运行相关测试。&lt;/p&gt;
+  &lt;/li&gt;
+  &lt;li&gt;
+    &lt;p&gt;业务耦合紧,新业务上线&lt;strong&gt;&amp;gt;半年&lt;/strong&gt;&lt;/p&gt;
+
+    &lt;p&gt;每次测试都要多个业务团队联合测试,问题定位较耗时,测试效率低。&lt;/p&gt;
+  &lt;/li&gt;
+  &lt;li&gt;
+    &lt;p&gt;上百种业务,2-3种开发语言&lt;/p&gt;
+
+    &lt;p&gt;业务复杂,且语言不一,系统联调时耗时较多且需相互配合,时间周期较长。&lt;/p&gt;
+  &lt;/li&gt;
+  &lt;li&gt;
+    &lt;p&gt;运维团队&lt;strong&gt;&amp;gt;20人&lt;/strong&gt;&lt;/p&gt;
+
+    &lt;p&gt;臃肿的团队导致问题定位需多方配合,沟通成本高。&lt;/p&gt;
+  &lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;&lt;strong&gt;基于之前定义的改造策略,我们的改造过程大致如下所示:&lt;/strong&gt;&lt;/p&gt;
+
+&lt;p&gt;范围定义:&lt;/p&gt;
+
+&lt;ul&gt;
+  &lt;li&gt;
+    &lt;p&gt;将原房地产CRM平台按业务类别拆分为多个微服务。&lt;/p&gt;
+
+    &lt;p&gt;&lt;img src=&quot;/assets/images/case_mengtuo_reform_before_and_after.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
+  &lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;功能剥离:&lt;/p&gt;
+
+&lt;ul&gt;
+  &lt;li&gt;从单体CRM系统中逐步拆分出业务模块(服务网关、客户服务、房源服务、机会服务、积分服务)。&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;数据解耦&lt;/p&gt;
+
+&lt;ul&gt;
+  &lt;li&gt;每个微服务的数据进行独立存储。&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;数据同步&lt;/p&gt;
+
+&lt;ul&gt;
+  &lt;li&gt;在负载较低时,将数据同步回原有的遗留系统中不断迭代,陆续完成后续的服务。&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;改造过程中,基于ServiceComb,&lt;strong&gt;通过控制请求路由,逐步架空对原单体应用的请求, 平滑过渡系统到微服务架构。&lt;/strong&gt;&lt;/p&gt;
+
+&lt;p&gt;&lt;strong&gt;单个服务的构建并没有那么复杂,基于ServiceComb,通过如下的简单4步,即可快速完成改造:&lt;/strong&gt;&lt;/p&gt;
+
+&lt;ol&gt;
+  &lt;li&gt;引入&lt;a href=&quot;https://github.com/ServiceComb/ServiceComb-Java-Chassis&quot;&gt;ServiceComb Java Chassis&lt;/a&gt;框架依赖&lt;/li&gt;
+  &lt;li&gt;定义服务接口端点&lt;/li&gt;
+  &lt;li&gt;添加服务配置文件&lt;/li&gt;
+  &lt;li&gt;注释服务启动入口&lt;/li&gt;
+&lt;/ol&gt;
+
+&lt;p&gt;另外,通过Company Workshop中提供的Docker插件配置,10分钟内完成了服务容器化,自动生成镜像。&lt;/p&gt;
+
+&lt;p&gt;同时,利用ServiceComb开发的微服务应用,可同时无缝接入&lt;a href=&quot;https://www.huaweicloud.com/product/servicestage.html&quot;&gt;ServiceStage&lt;/a&gt;,享受到微服务治理、容器虚机混编、应用拓扑等能力。&lt;/p&gt;
+
+&lt;p&gt;为应对短暂的业务高峰,经常需要预购大量的资源来提前部署和验证环境,花费大量的人力物力,且资源利用率极低。因此,进行云化改造后的产品和解决方案需要具备随着参与人数增加而秒级伸缩,支撑业务峰值和资源利用率的能力。盟拓软件基于华为ServiceStage的核心技术容器改造、混编方案、编排调度算法等进行容器虚机混编应用云化改造,实现了应用的秒级部署和弹性伸缩能力,极大地提高了资源的利用率。&lt;/p&gt;
+
+&lt;p&gt;&lt;strong&gt;改造后效果:&lt;/strong&gt;&lt;/p&gt;
+
+&lt;ul&gt;
+  &lt;li&gt;运维人力&lt;strong&gt;减少80%&lt;/strong&gt;&lt;/li&gt;
+  &lt;li&gt;资源利用率&lt;strong&gt;提升50%&lt;/strong&gt;,大幅降低运营成本&lt;/li&gt;
+  &lt;li&gt;&lt;strong&gt;每秒万级&lt;/strong&gt;调用链分析能力&lt;/li&gt;
+  &lt;li&gt;传统系统和应用平滑改造上云&lt;/li&gt;
+  &lt;li&gt;互联网营销模式,天粒度业务快速创新&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/case_mengtuo_new_mode.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;&lt;strong&gt;理论上,经过不断地迭代,逐渐完成业务功能解耦,新服务构建。那么遗留系统就会被替换掉。&lt;/strong&gt;&lt;/p&gt;
+
+&lt;h2 id=&quot;改造要点&quot;&gt;改造要点&lt;/h2&gt;
+&lt;p&gt;在改造的整个过程中,我认为如下几个实践是非常重要的:&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/best_practices_for_legacy_system_reform.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
+
+&lt;h3 id=&quot;基础设施自动化&quot;&gt;基础设施自动化&lt;/h3&gt;
+&lt;p&gt;原有的部署发生在数据中心,因此流程上相对复杂,而且存在一定弊端(譬如审批和协作上,起不到实质作用)。对于改造后的服务而言,我们使用更多的自动化方式代替复杂的审批流程。通过使用华为ServiceStage作为基础设施,团队能够更自主的对基础设施进行管理。如资源创建、销毁、更新等。随着服务的增多,基础设施自动化帮助我们节省了大量的时间。当然,从组织层面,也成立了专门的小组研究华为ServiceStage以及相关的DevOps配套工具。&lt;/p&gt;
+
+&lt;p&gt;目前,国内外有很多优秀的云平台,可以方便的为用户提供基础设施的自动化机制。&lt;/p&gt;
+
+&lt;h3 id=&quot;微服务生态系统&quot;&gt;微服务生态系统&lt;/h3&gt;
+&lt;p&gt;微服务的生态系统是指微服务实施过程相关的协作部分,涉及部分较多,譬如测试机制、持续集成、自动化部署、细粒度监控、日志聚合、告警、持续交付,以及大家非常关注的服务注册、服务发现机制等。&lt;/p&gt;
+
+&lt;p&gt;这部分的灵活性比较大,因为目前如上说的每一个领域都有很多优秀的工具。譬如日志聚合目前业界的方案通常为ELK,监控的方案如Zabbix、NewRelic、CloudWatch等,成熟的监控工具都具有告警功能,PagerDuty也提供更专业的告警服务。服务注册和发现有ServiceComb框架的Service Center,Eureka,Consul,Zookeeper。大家可以在各自的团队中自由发挥。&lt;/p&gt;
+
+&lt;h3 id=&quot;开发框架的演进&quot;&gt;开发框架的演进&lt;/h3&gt;
+&lt;p&gt;开发框架是团队在构建微服务的过程中,不断总结,梳理出的快速开发微服务的相关工具和框架。&lt;/p&gt;
+
+&lt;p&gt;我们基于ServiceComb构建了快速开发框架,主要包括四部分,如下图所示:&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/rapid_development_framework.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
+
+&lt;ol&gt;
+  &lt;li&gt;
+    &lt;p&gt;微服务工程示例&lt;/p&gt;
+
+    &lt;p&gt;提供微服务改造架构最佳实践参考工程Company,使能微服务改造或开发能复用其架构设计和配置,同时指导实现服务容器化和后续服务性能测试等提高服务可靠性。&lt;/p&gt;
+  &lt;/li&gt;
+  &lt;li&gt;
+    &lt;p&gt;契约生成工具&lt;/p&gt;
+
+    &lt;p&gt;ServiceComb采用了基于OpenAPI的服务契约,使业务逻辑与编程语言解耦,并可使用Swagger工具定义服务契约,自动生成契约对应的代码和文档。&lt;/p&gt;
+  &lt;/li&gt;
+  &lt;li&gt;
+    &lt;p&gt;持续集成&lt;/p&gt;
+
+    &lt;p&gt;持续集成使用了Jenkins,通过其配置文件定义主要的阶段:&lt;/p&gt;
+
+    &lt;blockquote&gt;
+      &lt;p&gt;验证:运行单元测试,集成测试&lt;/p&gt;
+
+      &lt;p&gt;构建:构建可执行的jar部署包&lt;/p&gt;
+
+      &lt;p&gt;部署:基于指定版本制作镜像,并推送到测试或生产环境下&lt;/p&gt;
+    &lt;/blockquote&gt;
+
+    &lt;p&gt;利用这样的持续集成模板工程,花费很少的时间,就可以针对新建的微服务应用,快速配置其对应的持续集成环境。&lt;/p&gt;
+  &lt;/li&gt;
+  &lt;li&gt;
+    &lt;p&gt;Kubernetes集群一键部署&lt;/p&gt;
+
+    &lt;p&gt;Kubernetes是谷歌开源的一个容器集群管理工具。基于Kubernetes,可实现微服务的快速部署及弹性伸缩。我们提供了一键部署脚本,部署时只需稍作修改即可通过一条命令,自动完成资源的创建、部署、弹性伸缩、金丝雀发布等。&lt;/p&gt;
+  &lt;/li&gt;
+&lt;/ol&gt;
+
+&lt;h3 id=&quot;团队运维自管理&quot;&gt;团队运维自管理&lt;/h3&gt;
+
+&lt;p&gt;这一部分是关于团队的文化管理。也是对DevOPS的延伸,我们称为TMI(Team Managed Infrastructure)。&lt;/p&gt;
+
+&lt;p&gt;目的是将分析、开发、测试以及资源创建、销毁、自动化部署的权利交给团队,由团队按需完成部署(加上看板的流程管理,而非Scrum的固定迭代,可以做到一天部署多次)。&lt;/p&gt;
+
+&lt;p&gt;当然,这个环节非常依赖于成熟的监控以及告警机制,当出现问题时,能够有效的通知到责任人,快速反馈,快速修复。团队内部也会定期轮换Pager(出问题救火的人),培养团队以服务可用作为大家的共同目标,培养产品观念,而非项目观念。&lt;/p&gt;
+
+&lt;p&gt;再回顾一下这个图:&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/best_practices_for_legacy_system_reform.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;最后,和大家分享一下,我个人在微服务实施过程中总结的4句方针:&lt;/p&gt;
+
+&lt;p&gt;&lt;strong&gt;由大到小,由粗到细&lt;/strong&gt;&lt;/p&gt;
+
+&lt;p&gt;&lt;strong&gt;关注运维,关注监控&lt;/strong&gt;&lt;/p&gt;
+
+&lt;p&gt;&lt;strong&gt;快速反馈,快速修复&lt;/strong&gt;&lt;/p&gt;
+
+&lt;p&gt;&lt;strong&gt;循序渐进,增量实现&lt;/strong&gt;&lt;/p&gt;</content><author><name>Wang Lei</name><email>wanglei177@huawei.com</email><uri>https://wldandan.github.io</uri></author><category term="系统改造" /><summary type="html">微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?</summary></entry><entry xml:lang="en"><title type="html">最头疼的遗留系统该如何改造?</title><link href="/docs/how-to-reform-a-legacy-system/" rel="alternate" type="text/html" title="最头疼的遗留系统该如何改造?" /><published>2017-10-23T00:00:00+08:00</published><updated>2017-10-23T15:22:00+08:00</updated><id>/docs/how-to-reform-a-legacy-system</id><content type="html" xml:base="/docs/how-to-reform-a-legacy-system/">&lt;p&gt;随着RESTful、云计算、DevOps、持续交付等概念的深入人心,微服务(Microservices)逐渐成为
 系统架构的一个代名词。那么微服务是否是业界期待已久的架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?在该分享中,王磊将通过实际的案例,跟大家探讨使用微服务改造遗留系统的实践之路。&lt;/p&gt;
+
+&lt;ul&gt;
+  &lt;li&gt;什么是微服务&lt;/li&gt;
+  &lt;li&gt;微服务的诞生背景&lt;/li&gt;
+  &lt;li&gt;遗留系统的微服务改造策略&lt;/li&gt;
+  &lt;li&gt;微服务改造之路&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;h2 id=&quot;背景&quot;&gt;背景&lt;/h2&gt;
+&lt;p&gt;什么是系统架构设计?&lt;/p&gt;
+
+&lt;p&gt;一直以来,系统架构设计是IT领域经久不衰的话题之一,是每个系统构建过程中极其关键的一部分,它决定了系统是否能够被正确、有效的构建。架构师们也一直在持续探索,寻找更优秀的架构设计方式来构建系统。&lt;/p&gt;
+
+&lt;p&gt;那什么是系统的架构设计?对于这个问题,我相信每个朋友都会有不同的定义,实际上,也并没有一个标准的答案来解释什么是架构设计。&lt;/p&gt;
+
+&lt;p&gt;基于我过去的经验和工作方式,我认为系统架构设计的本质,是在应用系统内部找到这样一个动态平衡:平衡业务、技术、团队的同时,考虑系统灵活性、可扩展性以及可维护性等因素,并将应用系统划分成不同的部分,使这些部分彼此之间相互分工、相互协作,从而为用户提供某种特定的价值的方式。&lt;/p&gt;
+
+&lt;p&gt;随着RESTful、云计算、DevOps、持续交付等概念的深入人心,&lt;strong&gt;微服务架构逐渐成为系统架构的一个代名词&lt;/strong&gt;。&lt;/p&gt;
+
+&lt;h2 id=&quot;什么是微服务架构&quot;&gt;什么是微服务架构&lt;/h2&gt;
+&lt;p&gt;2015年,微服务架构这个词,以相当高的频率出现在各种演讲、文章、会议、社区上。这里,我先和大家快速回顾一下,Martin Fowler对微服务的抽象。&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/microservice_definition_by_martin_folwer.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;如上所示,微服务架构的核心四要素,我用红色标注出来了。如果翻译成中文,大致如下所示:&lt;/p&gt;
+
+&lt;blockquote&gt;
+  &lt;p&gt;微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。 每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相协作(通常是基于HTTP协议的RESTful API)。 每个服务都围绕着具体业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。 另外,对具体的服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建。&lt;/p&gt;
+&lt;/blockquote&gt;
+
+&lt;p&gt;总结成一句话就是&lt;strong&gt;微服务是围绕业务构建的细粒度的分布式系统&lt;/strong&gt;。&lt;/p&gt;
+
+&lt;h2 id=&quot;微服务的诞生背景&quot;&gt;微服务的诞生背景&lt;/h2&gt;
+&lt;p&gt;2015年,微服务突然火了,为什么?&lt;/p&gt;
+
+&lt;p&gt;其实微服务架构并不是技术创新,而是IT发展到现阶段对技术架构的一种阐释。&lt;/p&gt;
+
+&lt;p&gt;它要求包括&lt;strong&gt;快速和业务对齐(aligning business)、理解和抽象业务(基于领域建模)、快速开发(Lean、Agile)、快速反馈和交付(CI、CD、DevOps)&lt;/strong&gt;。&lt;/p&gt;
+
+&lt;p&gt;所以说,微服务并不是技术,而是将化整为零(或称分治)思想换了一种说法,无论是把一个大型系统分割成多个小而自治的系统,还是把一个大型团队分成多个团队,或是把一个复杂的项目分成多个交付阶段都是这种思想的运用。&lt;/p&gt;
+
+&lt;p&gt;当然,任何新事物的诞生,总会有一个推动因素。微服务的诞生也并非偶然。它是互联网高速发展,技术日新月异的变化以及传统架构无法适应快速变化等多重因素的推动下所诞生的产物。&lt;/p&gt;
+
+&lt;p&gt;基于个人的理解,我将微服务的诞生因素总结为如下几点:&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/why_microservice_show_up.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
+
+&lt;ol&gt;
+  &lt;li&gt;
+    &lt;p&gt;&lt;strong&gt;互联网行业的快速发展&lt;/strong&gt;&lt;/p&gt;
+
+    &lt;p&gt;过去的十年中,互联网对我们的生活产生了翻天覆地的变化,越来越多的传统行业公司也开始依赖互联网技术打造其核心竞争优势。&lt;/p&gt;
+
+    &lt;p&gt;在这种情况下,如何从系统架构的角度出发,构建灵活、易扩展的系统,快速应对需求的变化;同时,随着用户量的增加,如何保证系统的可伸缩性、高可用性,成为系统架构面临的挑战。&lt;/p&gt;
+  &lt;/li&gt;
+  &lt;li&gt;
+    &lt;p&gt;&lt;strong&gt;单块架构系统面临的挑战&lt;/strong&gt;&lt;/p&gt;
+
+    &lt;p&gt;随着用户需求个性化、产品生命周期变短、市场需求不稳定等因素的出现,单块架构系统面临着越来越多的挑战。如何找到一种更有效的、更灵活、适应需求的系统架构方式,成为大家关注的焦点。&lt;/p&gt;
+  &lt;/li&gt;
+  &lt;li&gt;
+    &lt;p&gt;&lt;strong&gt;敏捷、精益方法、持续交付的深入人心&lt;/strong&gt;&lt;/p&gt;
+
+    &lt;p&gt;在IT行业发展的过去十年,敏捷、精益、持续交付等价值观、方法论的提出以及实践,让很多组织意识到应变市场变化、提高响应力的重要性,应该构建软件交付周期的闭环(分析、开发、测试、部署、运维、监控、运营),而不仅仅是提高开发阶段的效率。&lt;/p&gt;
+
+    &lt;p&gt;&lt;strong&gt;精益创业(Lean Startup)&lt;/strong&gt;帮助组织分析并建立最小可实行产品(MinimumViableProduct),通过迭代持续改进敏捷方法帮助组织消除浪费,通过反馈不断找到正确的方向。&lt;/p&gt;
+
+    &lt;p&gt;&lt;strong&gt;持续交付&lt;/strong&gt;则帮助组织构建更快、更可靠、可频繁发布的交付机制并构建产品交付闭环。&lt;/p&gt;
+
+    &lt;p&gt;大部分组织已经基本上形成了一套可实施的交付体系。包括持续集成、自动化测试、数据管理、自动化部署机制等。&lt;/p&gt;
+
+    &lt;p&gt;这时候,大泥球式的单块架构,会逐渐成为影响交付周期进一步优化的瓶颈,因此如何找到灵活性高、扩展性好的架构方式,也成为进一步优化交付周期面临的挑战。&lt;/p&gt;
+  &lt;/li&gt;
+  &lt;li&gt;
+    &lt;p&gt;&lt;strong&gt;Docker等容器虚拟化技术的快速发展&lt;/strong&gt;&lt;/p&gt;
+
+    &lt;p&gt;同传统的虚拟化技术相比,基于容器技术的Docker,不需要复杂的Hypervisor机制支持,具有更高的虚拟化性能和效率。&lt;/p&gt;
+
+    &lt;p&gt;同时容器可以很容易的运行在任意的装有DockerEngine的系统上,使得开发人员能够用更低的成本将应用程序部署在不同平台上。&lt;/p&gt;
+  &lt;/li&gt;
+  &lt;li&gt;
+    &lt;p&gt;&lt;strong&gt;DevOps文化&lt;/strong&gt;&lt;/p&gt;
+
+    &lt;p&gt;DevOps文化的推行打破了传统开发与运维之间的壁垒,帮助组织形成开发、运维紧密配合的、全功能化的高效团队,并尽早降低软件交付最后一公里的风险。&lt;/p&gt;
+  &lt;/li&gt;
+&lt;/ol&gt;
+
+&lt;h2 id=&quot;遗留系统的微服务改造策略&quot;&gt;遗留系统的微服务改造策略&lt;/h2&gt;
+&lt;p&gt;聊完什么是微服务架构以及其诞生背景,接下来我们来谈谈如何改造遗留系统。&lt;/p&gt;
+
+&lt;p&gt;在过去的10多年间,大部分工作时间我都在和遗留系统打交道。我相信很多朋友也是工作在已经运转多年的遗留系统上。&lt;/p&gt;
+
+&lt;p&gt;对于这类系统,当谈论使用微服务对其进行改造时,我认为要谨记一点:&lt;/p&gt;
+
+&lt;p&gt;&lt;strong&gt;改造不是重做。&lt;/strong&gt;&lt;/p&gt;
+
+&lt;p&gt;&lt;strong&gt;在改造的过程中,要始终以保证系统为用户提供的业务价值可用作为首要目标。&lt;/strong&gt;从这个点出发,基于我的经验,对微服务改造的策略总结为如下五个步骤:&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/microservice_reform_strategy.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
+
+&lt;ol&gt;
+  &lt;li&gt;
+    &lt;p&gt;范围定义&lt;/p&gt;
+
+    &lt;p&gt;对于遗留系统而言,通常业务运转时间较长(譬如5~8年以上,甚至更长),因此涉及的功能繁杂,代码中存在大量无效或者过时的需求,缺陷修复成本较高。&lt;/p&gt;
+
+    &lt;p&gt;另外,系统在演进的过程中,也会持续为用户提供新的功能和价值。因此,划分出清晰的范围非常重要。&lt;/p&gt;
+
+    &lt;p&gt;实际上,范围定义主要包括两部分:&lt;/p&gt;
+
+    &lt;ol&gt;
+      &lt;li&gt;
+        &lt;p&gt;明确业务改造范围&lt;/p&gt;
+
+        &lt;p&gt;所谓改造范围,就是确定我们常说的业务试点。通常,作为初次尝试微服务实践的组织,建议选取业务范围影响较小、非关键功能的试点,这样做也是为了确保在不影响核心业务的情况下快速尝试并获得反馈。&lt;/p&gt;
+      &lt;/li&gt;
+      &lt;li&gt;
+        &lt;p&gt;明确成员责任范围&lt;/p&gt;
+
+        &lt;p&gt;明确成员责任范围,确定由谁来改造,确保改造的目标清晰。&lt;/p&gt;
+
+        &lt;p&gt;实际上,对于产品而言,遗留系统的维护和更新,包括缺陷定位、缺陷修复、数据更新、功能实现、测试、交付给运维团队等,通常已经让团队的工作处于高负荷状态。因此,需要确定成员,全身心的投入,以微服务改造作为短期目标。&lt;/p&gt;
+      &lt;/li&gt;
+    &lt;/ol&gt;
+  &lt;/li&gt;
+  &lt;li&gt;
+    &lt;p&gt;功能剥离&lt;/p&gt;
+
+    &lt;p&gt;有了明确的业务范围,成员也有了清晰的责任,接下来就需要将部分功能点进行剥离。&lt;/p&gt;
+
+    &lt;p&gt;所谓剥离,就是将选中的功能从原有的系统中拆分出来,并构建成独立的服务。在这个阶段,主要包括两点:&lt;/p&gt;
+
+    &lt;ol&gt;
+      &lt;li&gt;
+        &lt;p&gt;将功能从原有系统拆分出来,并构建新服务&lt;/p&gt;
+
+        &lt;p&gt;一提到拆分,很多朋友会纠结,“系统复杂,如何拆分微服务才好?怎么样的拆分才合理?”。其实,从我个人的观点来看,这时候还不是纠结服务到底怎么划分合理的时候。为什么?&lt;/p&gt;
+
+        &lt;ol&gt;
+          &lt;li&gt;
+            &lt;p&gt;好的架构是动态演变和迭代出来的,业务在不断改变,技术和工具也在不会的升级换代,没有完美的架构,只有无限逼近完美的动态平衡,所以先小范围、低成本动起来,在运转中找平衡点。&lt;/p&gt;
+          &lt;/li&gt;
+          &lt;li&gt;
+            &lt;p&gt;微服务的复杂度在于分布式系统本身,以及其生态系统(开发、测试、部署、运维、监控、告警)的搭建。&lt;/p&gt;
+          &lt;/li&gt;
+          &lt;li&gt;
+            &lt;p&gt;团队文化的形成是一个相对漫长的过程,如果花很大力气关注服务怎么拆,而没有聚焦在生态系统的搭建以及团队文化的形成上,实际上是舍本逐末。即便拆分出了不同的服务,在落地的时候也会遇到诸多问题。所以,找一个功能点先拆,然后搭建持续交付流水线,快速试错,建立好有效的反馈闭环机制,再不断寻找动态平衡,拆分出更细的服务或者将不合理的服务合并。&lt;/p&gt;
+          &lt;/li&gt;
+        &lt;/ol&gt;
+      &lt;/li&gt;
+      &lt;li&gt;
+        &lt;p&gt;在原有的系统前端,使用代理机制,并使用遗留系统和新服务组合为用户提供价值&lt;/p&gt;
+
+        &lt;p&gt;这一步,目的是使用组合的系统(遗留系统+新的服务)为用户提供价值。&lt;/p&gt;
+
+        &lt;p&gt;对于Web系统,通常可以在前端使用直接请求新的服务。也可以在后端使用转发请求,获取新服务提供的数据。&lt;/p&gt;
+
+        &lt;p&gt;如下图所示:&lt;/p&gt;
+
+        &lt;p&gt;&lt;img src=&quot;/assets/images/microservice_reform_strategy.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
+      &lt;/li&gt;
+    &lt;/ol&gt;
+  &lt;/li&gt;
+  &lt;li&gt;
+    &lt;p&gt;数据解耦&lt;/p&gt;
+
+    &lt;p&gt;在以前的遗留系统构建过程中,通常使用数据库作为集成点,不同功能/系统之间通过数据库完成数据交换。对于某些系统,还大量使用存储过程完成业务逻辑,开发的时候看似效率高,但几年下来,DBA成了IT团队最懂业务的人,维护成为瓶颈。&lt;/p&gt;
+
+    &lt;p&gt;而实际上,业务的数据是业务固有的组成部分,应当随着业务的变化而变化。业务拆分出来,数据也应该拆分出来。从而保证访问数据只能通过统一的相关业务API完成。便于在将来的业务和架构演进中,有效的对数据维护、管理和升级。&lt;/p&gt;
+  &lt;/li&gt;
+  &lt;li&gt;
+    &lt;p&gt;数据同步&lt;/p&gt;
+
+    &lt;p&gt;数据同步,是一个价值体现的过渡过程。&lt;/p&gt;
+
+    &lt;p&gt;一方面,遗留系统的改造中存在的各种各样的挑战和我们今天认为的不合理(当时的场景也许是合理的)。另一方面,对于大部分遗留的系统,都会使用数据库作为集成点(开发成本低),导致某业务功能的数据与其他功能有着千丝万缕的联系,数据的变化容易对其他功能造成影响。&lt;/p&gt;
+
+    &lt;p&gt;因此对于大型的遗留系统,很难在短期的时间内(3~6个月)完成全系统的改造。需要一个相对漫长,循序渐进的过程来完成改造。&lt;/p&gt;
+
+    &lt;p&gt;譬如,在电商系统中,商家的后台管理系统中的产品、价格的更新,会发布到面向用户的电商搜索系统中以及其他系统中。如果我们将系统中的产品相关拆分成独立服务,则必须也要拆分数据发布机制,否则的话容易造成数据不一致。但拆分数据发布机制,又需要分析清楚不同数据之间的影响和依赖,需要更大的成本,短期内不易完成。&lt;/p&gt;
+
+    &lt;p&gt;这时候,如果将新服务的数据同步回原有的数据库,采用这样一个折中的的过程,既能保障新的服务和数据被独立,又不影响原有的遗留系统功能。&lt;/p&gt;
+
+    &lt;p&gt;说白了,这其实也是在保证系统为用户提供的业务价值不被破坏。&lt;/p&gt;
+
+    &lt;p&gt;有了之前的尝试,接下来就是通过不断的迭代,完成功能剥离,数据解耦、数据同步,从而将更多的功能拆分成独立的服务。&lt;/p&gt;
+  &lt;/li&gt;
+&lt;/ol&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/legacy_system_reform_strategy.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;如上就是我对于遗留系统改造的策略。&lt;/p&gt;
+
+&lt;h2 id=&quot;遗留系统改造实践&quot;&gt;遗留系统改造实践&lt;/h2&gt;
+&lt;p&gt;接下来,我和大家分享一个我所经历的遗留系统改造的案例。首先,让我们看看这个系统的背景和一些数据。&lt;/p&gt;
+
+&lt;h3 id=&quot;客户背景&quot;&gt;客户背景&lt;/h3&gt;
+
+&lt;p&gt;&lt;a href=&quot;http://movit-tech.com/&quot;&gt;盟拓软件&lt;/a&gt;是中国房地产行业IT服务及行业解决方案和产品的领先厂家,其依据市场变化推出全民卖房的新营销模式,正从线下的传统现场售楼模式向线上的房地产电商模式进行转变。&lt;/p&gt;
+
+&lt;h3 id=&quot;业务痛点&quot;&gt;业务痛点&lt;/h3&gt;
+
+&lt;p&gt;当今房地产行业呈现短期开盘峰值、后期零星散客的业务特性。其面临着高昂线下运营成本,营销成本占销售额&amp;gt;5%。而由此引入的线上竞价秒杀营销模式,传统IT解决方案的系统资源率、峰值扩容能力将无法满足。&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/case_mengtuo_traditional_mode.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
+
+&lt;h3 id=&quot;系统概览&quot;&gt;系统概览&lt;/h3&gt;
+
+&lt;p&gt;系统为典型的三层单块架构,使用MySQL数据库存储数据。运行在服务器上的应用处理性能较低,为了应对短暂的访问高峰,额外购置了较多的服务器资源,访问高峰过后,服务器资源闲置造成较大浪费,且需要较多人员维护。&lt;/p&gt;
+
+&lt;h3 id=&quot;相关数据&quot;&gt;相关数据&lt;/h3&gt;
+
+&lt;ul&gt;
+  &lt;li&gt;
+    &lt;p&gt;代码约&lt;strong&gt;100万&lt;/strong&gt;行,测试覆盖率为&lt;strong&gt;10%&lt;/strong&gt;,集成测试时间为&lt;strong&gt;一个月&lt;/strong&gt;&lt;/p&gt;
+
+    &lt;p&gt;代码臃肿,无效遗留代码较多,且业务间紧耦合,测试覆盖率较低,测试出问题了难以定位,导致测试耗时较长。&lt;/p&gt;
+  &lt;/li&gt;
+  &lt;li&gt;
+    &lt;p&gt;营销预案需&lt;strong&gt;提前1个月&lt;/strong&gt;准备资源&lt;/p&gt;
+
+    &lt;p&gt;为应对访问高峰,每次都需要预购大量的服务资源,重新部署环境,并运行相关测试。&lt;/p&gt;
+  &lt;/li&gt;
+  &lt;li&gt;
+    &lt;p&gt;业务耦合紧,新业务上线&lt;strong&gt;&amp;gt;半年&lt;/strong&gt;&lt;/p&gt;
+
+    &lt;p&gt;每次测试都要多个业务团队联合测试,问题定位较耗时,测试效率低。&lt;/p&gt;
+  &lt;/li&gt;
+  &lt;li&gt;
+    &lt;p&gt;上百种业务,2-3种开发语言&lt;/p&gt;
+
+    &lt;p&gt;业务复杂,且语言不一,系统联调时耗时较多且需相互配合,时间周期较长。&lt;/p&gt;
+  &lt;/li&gt;
+  &lt;li&gt;
+    &lt;p&gt;运维团队&lt;strong&gt;&amp;gt;20人&lt;/strong&gt;&lt;/p&gt;
+
+    &lt;p&gt;臃肿的团队导致问题定位需多方配合,沟通成本高。&lt;/p&gt;
+  &lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;&lt;strong&gt;基于之前定义的改造策略,我们的改造过程大致如下所示:&lt;/strong&gt;&lt;/p&gt;
+
+&lt;p&gt;范围定义:&lt;/p&gt;
+
+&lt;ul&gt;
+  &lt;li&gt;
+    &lt;p&gt;将原房地产CRM平台按业务类别拆分为多个微服务。&lt;/p&gt;
+
+    &lt;p&gt;&lt;img src=&quot;/assets/images/case_mengtuo_reform_before_and_after.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
+  &lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;功能剥离:&lt;/p&gt;
+
+&lt;ul&gt;
+  &lt;li&gt;从单体CRM系统中逐步拆分出业务模块(服务网关、客户服务、房源服务、机会服务、积分服务)。&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;数据解耦&lt;/p&gt;
+
+&lt;ul&gt;
+  &lt;li&gt;每个微服务的数据进行独立存储。&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;数据同步&lt;/p&gt;
+
+&lt;ul&gt;
+  &lt;li&gt;在负载较低时,将数据同步回原有的遗留系统中不断迭代,陆续完成后续的服务。&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;改造过程中,基于ServiceComb,&lt;strong&gt;通过控制请求路由,逐步架空对原单体应用的请求, 平滑过渡系统到微服务架构。&lt;/strong&gt;&lt;/p&gt;
+
+&lt;p&gt;&lt;strong&gt;单个服务的构建并没有那么复杂,基于ServiceComb,通过如下的简单4步,即可快速完成改造:&lt;/strong&gt;&lt;/p&gt;
+
+&lt;ol&gt;
+  &lt;li&gt;引入&lt;a href=&quot;https://github.com/ServiceComb/ServiceComb-Java-Chassis&quot;&gt;ServiceComb Java Chassis&lt;/a&gt;框架依赖&lt;/li&gt;
+  &lt;li&gt;定义服务接口端点&lt;/li&gt;
+  &lt;li&gt;添加服务配置文件&lt;/li&gt;
+  &lt;li&gt;注释服务启动入口&lt;/li&gt;
+&lt;/ol&gt;
+
+&lt;p&gt;另外,通过Company Workshop中提供的Docker插件配置,10分钟内完成了服务容器化,自动生成镜像。&lt;/p&gt;
+
+&lt;p&gt;同时,利用ServiceComb开发的微服务应用,可同时无缝接入&lt;a href=&quot;https://www.huaweicloud.com/product/servicestage.html&quot;&gt;ServiceStage&lt;/a&gt;,享受到微服务治理、容器虚机混编、应用拓扑等能力。&lt;/p&gt;
+
+&lt;p&gt;为应对短暂的业务高峰,经常需要预购大量的资源来提前部署和验证环境,花费大量的人力物力,且资源利用率极低。因此,进行云化改造后的产品和解决方案需要具备随着参与人数增加而秒级伸缩,支撑业务峰值和资源利用率的能力。盟拓软件基于华为ServiceStage的核心技术容器改造、混编方案、编排调度算法等进行容器虚机混编应用云化改造,实现了应用的秒级部署和弹性伸缩能力,极大地提高了资源的利用率。&lt;/p&gt;
+
+&lt;p&gt;&lt;strong&gt;改造后效果:&lt;/strong&gt;&lt;/p&gt;
+
+&lt;ul&gt;
+  &lt;li&gt;运维人力&lt;strong&gt;减少80%&lt;/strong&gt;&lt;/li&gt;
+  &lt;li&gt;资源利用率&lt;strong&gt;提升50%&lt;/strong&gt;,大幅降低运营成本&lt;/li&gt;
+  &lt;li&gt;&lt;strong&gt;每秒万级&lt;/strong&gt;调用链分析能力&lt;/li&gt;
+  &lt;li&gt;传统系统和应用平滑改造上云&lt;/li&gt;
+  &lt;li&gt;互联网营销模式,天粒度业务快速创新&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/case_mengtuo_new_mode.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;&lt;strong&gt;理论上,经过不断地迭代,逐渐完成业务功能解耦,新服务构建。那么遗留系统就会被替换掉。&lt;/strong&gt;&lt;/p&gt;
+
+&lt;h2 id=&quot;改造要点&quot;&gt;改造要点&lt;/h2&gt;
+&lt;p&gt;在改造的整个过程中,我认为如下几个实践是非常重要的:&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/best_practices_for_legacy_system_reform.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
+
+&lt;h3 id=&quot;基础设施自动化&quot;&gt;基础设施自动化&lt;/h3&gt;
+&lt;p&gt;原有的部署发生在数据中心,因此流程上相对复杂,而且存在一定弊端(譬如审批和协作上,起不到实质作用)。对于改造后的服务而言,我们使用更多的自动化方式代替复杂的审批流程。通过使用华为ServiceStage作为基础设施,团队能够更自主的对基础设施进行管理。如资源创建、销毁、更新等。随着服务的增多,基础设施自动化帮助我们节省了大量的时间。当然,从组织层面,也成立了专门的小组研究华为ServiceStage以及相关的DevOps配套工具。&lt;/p&gt;
+
+&lt;p&gt;目前,国内外有很多优秀的云平台,可以方便的为用户提供基础设施的自动化机制。&lt;/p&gt;
+
+&lt;h3 id=&quot;微服务生态系统&quot;&gt;微服务生态系统&lt;/h3&gt;
+&lt;p&gt;微服务的生态系统是指微服务实施过程相关的协作部分,涉及部分较多,譬如测试机制、持续集成、自动化部署、细粒度监控、日志聚合、告警、持续交付,以及大家非常关注的服务注册、服务发现机制等。&lt;/p&gt;
+
+&lt;p&gt;这部分的灵活性比较大,因为目前如上说的每一个领域都有很多优秀的工具。譬如日志聚合目前业界的方案通常为ELK,监控的方案如Zabbix、NewRelic、CloudWatch等,成熟的监控工具都具有告警功能,PagerDuty也提供更专业的告警服务。服务注册和发现有ServiceComb框架的Service Center,Eureka,Consul,Zookeeper。大家可以在各自的团队中自由发挥。&lt;/p&gt;
+
+&lt;h3 id=&quot;开发框架的演进&quot;&gt;开发框架的演进&lt;/h3&gt;
+&lt;p&gt;开发框架是团队在构建微服务的过程中,不断总结,梳理出的快速开发微服务的相关工具和框架。&lt;/p&gt;
+
+&lt;p&gt;我们基于ServiceComb构建了快速开发框架,主要包括四部分,如下图所示:&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/rapid_development_framework.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
+
+&lt;ol&gt;
+  &lt;li&gt;
+    &lt;p&gt;微服务工程示例&lt;/p&gt;
+
+    &lt;p&gt;提供微服务改造架构最佳实践参考工程Company,使能微服务改造或开发能复用其架构设计和配置,同时指导实现服务容器化和后续服务性能测试等提高服务可靠性。&lt;/p&gt;
+  &lt;/li&gt;
+  &lt;li&gt;
+    &lt;p&gt;契约生成工具&lt;/p&gt;
+
+    &lt;p&gt;ServiceComb采用了基于OpenAPI的服务契约,使业务逻辑与编程语言解耦,并可使用Swagger工具定义服务契约,自动生成契约对应的代码和文档。&lt;/p&gt;
+  &lt;/li&gt;
+  &lt;li&gt;
+    &lt;p&gt;持续集成&lt;/p&gt;
+
+    &lt;p&gt;持续集成使用了Jenkins,通过其配置文件定义主要的阶段:&lt;/p&gt;
+
+    &lt;blockquote&gt;
+      &lt;p&gt;验证:运行单元测试,集成测试&lt;/p&gt;
+
+      &lt;p&gt;构建:构建可执行的jar部署包&lt;/p&gt;
+
+      &lt;p&gt;部署:基于指定版本制作镜像,并推送到测试或生产环境下&lt;/p&gt;
+    &lt;/blockquote&gt;
+
+    &lt;p&gt;利用这样的持续集成模板工程,花费很少的时间,就可以针对新建的微服务应用,快速配置其对应的持续集成环境。&lt;/p&gt;
+  &lt;/li&gt;
+  &lt;li&gt;
+    &lt;p&gt;Kubernetes集群一键部署&lt;/p&gt;
+
+    &lt;p&gt;Kubernetes是谷歌开源的一个容器集群管理工具。基于Kubernetes,可实现微服务的快速部署及弹性伸缩。我们提供了一键部署脚本,部署时只需稍作修改即可通过一条命令,自动完成资源的创建、部署、弹性伸缩、金丝雀发布等。&lt;/p&gt;
+  &lt;/li&gt;
+&lt;/ol&gt;
+
+&lt;h3 id=&quot;团队运维自管理&quot;&gt;团队运维自管理&lt;/h3&gt;
+
+&lt;p&gt;这一部分是关于团队的文化管理。也是对DevOPS的延伸,我们称为TMI(Team Managed Infrastructure)。&lt;/p&gt;
+
+&lt;p&gt;目的是将分析、开发、测试以及资源创建、销毁、自动化部署的权利交给团队,由团队按需完成部署(加上看板的流程管理,而非Scrum的固定迭代,可以做到一天部署多次)。&lt;/p&gt;
+
+&lt;p&gt;当然,这个环节非常依赖于成熟的监控以及告警机制,当出现问题时,能够有效的通知到责任人,快速反馈,快速修复。团队内部也会定期轮换Pager(出问题救火的人),培养团队以服务可用作为大家的共同目标,培养产品观念,而非项目观念。&lt;/p&gt;
+
+&lt;p&gt;再回顾一下这个图:&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/best_practices_for_legacy_system_reform.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;最后,和大家分享一下,我个人在微服务实施过程中总结的4句方针:&lt;/p&gt;
+
+&lt;p&gt;&lt;strong&gt;由大到小,由粗到细&lt;/strong&gt;&lt;/p&gt;
+
+&lt;p&gt;&lt;strong&gt;关注运维,关注监控&lt;/strong&gt;&lt;/p&gt;
+
+&lt;p&gt;&lt;strong&gt;快速反馈,快速修复&lt;/strong&gt;&lt;/p&gt;
+
+&lt;p&gt;&lt;strong&gt;循序渐进,增量实现&lt;/strong&gt;&lt;/p&gt;</content><author><name>Wang Lei</name><email>wanglei177@huawei.com</email><uri>https://wldandan.github.io</uri></author><category term="Reform legacy system" /><summary type="html">微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?</summary></entry><entry xml:lang="cn"><title type="html">ServiceComb中的数据最终一致性方案 - part 3</title><link href="/cn/docs/distributed_saga_3/" rel="alternate" type="text/html" title="ServiceComb中的数据最终一致性方案 - part 3" /><published>2017-09-18T00:00:00+08:00</published><updated>2017-09-18T15:22:00+08:00</updated><id>/cn/docs/saga-and-others</id><content type="html" xml:base="/cn/docs/distributed_saga_3/">&lt;p&gt;在我的前一篇&lt;a href=&quot;/cn/docs/distributed_saga_2/&quot;&gt;文章&lt;/a&gt;,我谈到了ServiceCo
 mb下的&lt;a href=&quot;https://en.wikipedia.org/wiki/Two-phase_commit_protocol&quot;&gt;Saga&lt;/a&gt;是怎么设计的。
+然而,业界还有其他数据一致性解决方案,如两阶段提交(2PC)和Try-Confirm / Cancel(TCC)。那saga相比之下有什么特别?&lt;/p&gt;
+
+&lt;h2 id=&quot;两阶段提交-two-phase-commit-2pc&quot;&gt;两阶段提交 Two-Phase Commit (2PC)&lt;/h2&gt;
+&lt;blockquote&gt;
+  &lt;p&gt;两阶段提交协议是一种分布式算法,用于协调参与分布式原子事务的所有进程,以保证他们均完成提交或中止(回滚)事务。&lt;a href=&quot;https://en.wikipedia.org/wiki/Two-phase_commit_protocol&quot;&gt;1&lt;/a&gt;&lt;/p&gt;
+&lt;/blockquote&gt;
+
+&lt;p&gt;2PC包含两个阶段:&lt;/p&gt;
+&lt;ul&gt;
+  &lt;li&gt;&lt;strong&gt;投票阶段&lt;/strong&gt; 协调器向所有服务发起投票请求,服务回答yes或no。如果有任何服务回复no以拒绝或超时,协调器则在下一阶段发送中止消息。&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/saga.2pc.phase1.png&quot; alt=&quot;voting phase&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;ul&gt;
+  &lt;li&gt;&lt;strong&gt;决定阶段&lt;/strong&gt; 如果所有服务都回复yes,协调器则向服务发送commit消息,接着服务告知事务完成或失败。如果任何服务提交失败,
+协调器将启动额外的步骤以中止该事务。&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/saga.2pc.phase2.png&quot; alt=&quot;decision phase&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;在投票阶段结束之后与决策阶段结束之前,服务处于&lt;strong&gt;不确定&lt;/strong&gt;状态,因为他们不确定交易是否继续进行。当服务处于不确定状态并与协调器失去连接时,
+它只能选择等待协调器的恢复,或者咨询其他在确定状态下的服务来得知协调器的决定。在最坏的情况下,
+n个处于不确定状态的服务向其他n-1个服务咨询将产生&lt;strong&gt;O(n&lt;sup&gt;2&lt;/sup&gt;)&lt;/strong&gt;个消息。&lt;/p&gt;
+
+&lt;p&gt;另外,2PC是一个阻塞协议。服务在投票后需要等待协调器的决定,此时服务会阻塞并锁定资源。由于其阻塞机制和最差时间复杂度高,
+2PC不能适应随着事务涉及的服务数量增加而扩展的需要。&lt;/p&gt;
+
+&lt;p&gt;有关2PC实现的更多细节可参考&lt;a href=&quot;https://cs.nyu.edu/courses/spring03/G22.2631-001/lecture8.pdf&quot;&gt;2&lt;/a&gt;和&lt;a href=&quot;http://courses.cs.vt.edu/~cs5204/fall00/distributedDBMS/duckett/tpcp.html&quot;&gt;3&lt;/a&gt;。&lt;/p&gt;
+
+&lt;h2 id=&quot;try-confirmcancel-tcc&quot;&gt;Try-Confirm/Cancel (TCC)&lt;/h2&gt;
+&lt;p&gt;TCC也是补偿型事务模式,支持两阶段的商业模型。&lt;/p&gt;
+&lt;ul&gt;
+  &lt;li&gt;&lt;strong&gt;尝试阶段&lt;/strong&gt; 将服务置于待处理状态。例如,收到尝试请求时,航班预订服务将为客户预留一个座位,并在数据库插入客户预订记录,将记录设为预留状态。
+如果任何服务失败或超时,协调器将在下一阶段发送取消请求。&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/saga.tcc.try.png&quot; alt=&quot;try phase&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;ul&gt;
+  &lt;li&gt;&lt;strong&gt;确认阶段&lt;/strong&gt; 将服务设为确认状态。确认请求将确认客户预订的座位,这时服务已可向客户收取机票费用。数据库中的客户预订记录也会被更新为确认状态。
+如果任何服务无法确认或超时,协调器将重试确认请求直到成功,或在重试了一定次数后采取回退措施,比如人工干预。&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/saga.tcc.confirm.png&quot; alt=&quot;confirm phase&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;与saga相比,TCC的优势在于,尝试阶段将服务转为待处理状态而不是最终状态,这使得设计相应的取消操作轻而易举。&lt;/p&gt;
+
+&lt;p&gt;例如,电邮服务的尝试请求可将邮件标记为准备发送,并且仅在确认后发送邮件,其相应的取消请求只需将邮件标记为已废弃。但如果使用saga,
+事务将发送电子邮件,及其相应的补偿事务可能需要发送另一封电子邮件作出解释。&lt;/p&gt;
+
+&lt;p&gt;TCC的缺点是其两阶段协议需要设计额外的服务待处理状态,以及额外的接口来处理尝试请求。另外,TCC处理事务请求所花费的时间可能是saga的两倍,
+因为TCC需要与每个服务进行两次通信,并且其确认阶段只能在收到所有服务对尝试请求的响应后开始。&lt;/p&gt;
+
+&lt;p&gt;有关TCC的更多细节可参考&lt;a href=&quot;https://www.infoq.com/presentations/Transactions-HTTP-REST&quot;&gt;Transactions for the REST of Us&lt;/a&gt;.&lt;/p&gt;
+
+&lt;h2 id=&quot;事件驱动的架构&quot;&gt;事件驱动的架构&lt;/h2&gt;
+&lt;p&gt;和TCC一样,在事件驱动的架构中,长活事务涉及的每个服务都需要支持额外的待处理状态。接收到事务请求的服务会在其数据库中插入一条新的记录,
+将该记录状态设为待处理并发送一个新的事件给事务序列中的下一个服务。&lt;/p&gt;
+
+&lt;p&gt;因为在插入记录后服务可能崩溃,我们无法确定是否新事件已发送,所以每个服务还需要额外的事件表来跟踪当前长活事务处于哪一步。&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/saga.event.driven.request.png&quot; alt=&quot;event driven architecture - request&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;一旦长活事务中的最后一个服务完成其子事务,它将通知它在事务中的前一个服务。接收到完成事件的服务将其在数据库中的记录状态设为完成。&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/saga.event.driven.response.png&quot; alt=&quot;event driven architecture - response&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;如果仔细比较,事件驱动的架构就像非集中式的基于事件的TCC实现。如果去掉待处理状态而直接把服务记录设为最终状态,这个架构就像非集中式的基于事件的saga实现。
+去中心化能达到服务自治,但也造成了服务之间更紧密的的耦合。假设新的业务需求在服务B和C之间的增加了新的流程D。在事件驱动架构下,服务B和C必须改动代码以适应新的流程D。&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/saga.event.coupling.png&quot; alt=&quot;event driven architecture - coupling&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;Saga则正好相反,所有这些耦合都在saga系统中,当在长活事务中添加新流程时,现有服务不需要任何改动。&lt;/p&gt;
+
+&lt;p&gt;更多细节可参考&lt;a href=&quot;https://www.nginx.com/blog/event-driven-data-management-microservices/&quot;&gt;Event-Driven Data Management for Microservices&lt;/a&gt;.&lt;/p&gt;
+
+&lt;h2 id=&quot;集中式与非集中式实现&quot;&gt;集中式与非集中式实现&lt;/h2&gt;
+&lt;p&gt;这个Saga系列的文章讨论的都是集中式的saga设计。但saga也可用非集中式的方案来实现。那么非集中式的版本有什么不同?&lt;/p&gt;
+
+&lt;p&gt;非集中式saga没有专职的协调器。启动下一个服务调用的服务就是当前的协调器。例如,&lt;/p&gt;
+&lt;ul&gt;
+  &lt;li&gt;服务A收到要求服务A,B和C之间的数据一致性的事务请求。&lt;/li&gt;
+  &lt;li&gt;A完成其子事务,并将请求传递给事务中的下一个服务,服务B.&lt;/li&gt;
+  &lt;li&gt;B完成其子事务,并将请求传递给C,依此类推。&lt;/li&gt;
+  &lt;li&gt;如果C处理请求失败,B有责任启动补偿事务,并要求A回滚。&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/saga.decentralized.png&quot; alt=&quot;decentralized saga&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;与集中式相比,非集中式的实现具有服务自治的优势。但每个服务都需要包含数据一致性协议,并提供其所需的额外持久化设施。&lt;/p&gt;
+
+&lt;p&gt;我们更倾向于自治的业务服务,但服务还关联很多应用的复杂性,如数据一致性,服务监控和消息传递,
+将这些棘手问题集中处理,能将业务服务从应用的复杂性中释放,专注于处理复杂的业务,因此我们采用了集中式的saga设计。&lt;/p&gt;
+
+&lt;p&gt;另外,随着长活事务中涉及的服务数量增长,服务之间的关系变得越来越难理解,很快便会呈现下图的死星形状。&lt;/p&gt;
+
+&lt;p class=&quot;figure-caption&quot;&gt;&lt;img src=&quot;/assets/images/saga.death.star.png&quot; alt=&quot;death star architecture&quot; class=&quot;align-center&quot; /&gt;
+图片来源: http://www.slideshare.net/BruceWong3/the-case-for-chaos (s12)&lt;/p&gt;
+
+&lt;p&gt;同时,在长活事务中定位问题也变得更加复杂,因为服务日志遍布群集节点。&lt;/p&gt;
+
+&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;/h2&gt;
+&lt;p&gt;本文将saga与其他数据一致性解决方案进行了比较。Saga比两阶段提交更易扩展。在事务可补偿的情况下,
+相比TCC,saga对业务逻辑几乎没有改动的需要,而且性能更高。集中式的saga设计解耦了服务与数据一致性逻辑及其持久化设施,
+并使排查事务中的问题更容易。&lt;/p&gt;
+
+&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;
+&lt;ol&gt;
+  &lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Two-phase_commit_protocol&quot;&gt;https://en.wikipedia.org/wiki/Two-phase_commit_protocol&lt;/a&gt;&lt;/li&gt;
+  &lt;li&gt;&lt;a href=&quot;https://cs.nyu.edu/courses/spring03/G22.2631-001/lecture8.pdf&quot;&gt;https://cs.nyu.edu/courses/spring03/G22.2631-001/lecture8.pdf&lt;/a&gt;&lt;/li&gt;
+  &lt;li&gt;&lt;a href=&quot;http://courses.cs.vt.edu/~cs5204/fall00/distributedDBMS/duckett/tpcp.html&quot;&gt;http://courses.cs.vt.edu/~cs5204/fall00/distributedDBMS/duckett/tpcp.html&lt;/a&gt;&lt;/li&gt;
+  &lt;li&gt;&lt;a href=&quot;https://www.infoq.com/presentations/Transactions-HTTP-REST&quot;&gt;https://www.infoq.com/presentations/Transactions-HTTP-REST&lt;/a&gt;&lt;/li&gt;
+  &lt;li&gt;&lt;a href=&quot;https://www.nginx.com/blog/event-driven-data-management-microservices/&quot;&gt;https://www.nginx.com/blog/event-driven-data-management-microservices/&lt;/a&gt;&lt;/li&gt;
+&lt;/ol&gt;</content><author><name>Sean Yin</name><email>seanyinx@gmail.com</email><uri>http://seanyinx.github.io</uri></author><category term="事务一致性" /><summary type="html">Saga和其他数据一致性解决方案相比有什么不同之处?</summary></entry><entry xml:lang="en"><title type="html">Eventual Data Consistency Solution in ServiceComb - part 3</title><link href="/docs/distributed_saga_3/" rel="alternate" type="text/html" title="Eventual Data Consistency Solution in ServiceComb - part 3" /><published>2017-09-18T00:00:00+08:00</published><updated>2017-09-18T15:22:00+08:00</updated><id>/docs/saga-and-others</id><content type="html" xml:base="/docs/distributed_saga_3/">&lt;p&gt;In my &lt;a href=&quot;/docs/distributed_saga_2/&quot;&gt;previous post&lt;/a&gt;, I talked about how &lt;a href=&quot;https://en.wikipedia.org/wiki/Two-phase_commit_protocol&quot;&gt;Saga&lt;/a&gt; in
+ServiceComb is designed. However, there are quite a few data consistency solutions such as Two-Phase Commit (2PC) 
+and Try-Confirm/Cancel (TCC). What makes saga special?&lt;/p&gt;
+
+&lt;h2 id=&quot;two-phase-commit-2pc&quot;&gt;Two-Phase Commit (2PC)&lt;/h2&gt;
+&lt;blockquote&gt;
+  &lt;p&gt;Two-phase commit protocol is a distributed algorithm that coordinates all the processes that participate in a distributed 
+atomic transaction on whether to commit or abort (roll back) the transaction. &lt;a href=&quot;https://en.wikipedia.org/wiki/Two-phase_commit_protocol&quot;&gt;1&lt;/a&gt;&lt;/p&gt;
+&lt;/blockquote&gt;
+
+&lt;p&gt;It has two phases:&lt;/p&gt;
+&lt;ul&gt;
+  &lt;li&gt;&lt;strong&gt;voting phase&lt;/strong&gt; coordinator sends vote request to all services and services respond with either yes or no. If any service
+refuse with no or timeout, coordinator sends abort message in the next phase.&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/saga.2pc.phase1.png&quot; alt=&quot;voting phase&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;ul&gt;
+  &lt;li&gt;&lt;strong&gt;decision phase&lt;/strong&gt; if all services say yes, coordinator sends commit message to services and services acknowledge either
+transaction done or failed. If any service fails to commit, coordinator will initiate additional rounds to abort the transaction.&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/saga.2pc.phase2.png&quot; alt=&quot;decision phase&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;Between the end of voting phase and the end of decision phase, services are in &lt;strong&gt;uncertain&lt;/strong&gt; state, because they are not sure
+if the transaction is going to proceed or not. When a service is in uncertain state and loses connection with coordinator,
+it may either wait for coordinator's recovery, or consult other services in certain state for coordinator's decision.
+In the worst case, n uncertain services broadcasting messages to other n - 1 services will incur &lt;strong&gt;O(n&lt;sup&gt;2&lt;/sup&gt;)&lt;/strong&gt; messages.&lt;/p&gt;
+
+&lt;p&gt;Another disadvantage of 2PC is that it is a blocking protocol. A service will block and lock resources, while waiting for
+decision from coordinator after voting. 2PC does not scale well when the number of services involved in a transaction grows,
+because of its blocking mechanism and worst case time complexity.&lt;/p&gt;
+
+&lt;p&gt;More details on implementation of 2PC can be found at &lt;a href=&quot;https://cs.nyu.edu/courses/spring03/G22.2631-001/lecture8.pdf&quot;&gt;2&lt;/a&gt; and &lt;a href=&quot;http://courses.cs.vt.edu/~cs5204/fall00/distributedDBMS/duckett/tpcp.html&quot;&gt;3&lt;/a&gt;.&lt;/p&gt;
+
+&lt;h2 id=&quot;try-confirmcancel-tcc&quot;&gt;Try-Confirm/Cancel (TCC)&lt;/h2&gt;
+&lt;p&gt;TCC is a compensating transaction pattern for business model that is two-phased.&lt;/p&gt;
+&lt;ul&gt;
+  &lt;li&gt;&lt;strong&gt;try phase&lt;/strong&gt; puts a service in pending state. For example, a try request in our flight booking service will reserve a
+seat for the customer and insert a customer reservation record with reserved state into database. If any service fails to
+make a reservation or times out, the coordinator will send a cancel request in the next phase.&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/saga.tcc.try.png&quot; alt=&quot;try phase&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;ul&gt;
+  &lt;li&gt;&lt;strong&gt;confirm phase&lt;/strong&gt; moves the service to confirmed state. A confirm request will confirm that a seat is booked for the 
+customer and he or she will be billed. The customer reservation record in database will be updated to confirmed state.
+If any service fails to confirm or times out, the coordinator will either retry confirmation until success or involve manual
+intervention after it retries a certain number of times.&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/saga.tcc.confirm.png&quot; alt=&quot;confirm phase&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;Comparing with saga, TCC has an advantage in that try phase transitions services into pending state instead of final
+state, which makes cancellation trivial to design.&lt;/p&gt;
+
+&lt;p&gt;For example, a try request for an email service may mark an email as ready to send and the email is only sent on confirm 
+request. Its corresponding cancel request needs only to mark the email as obsolete. However, in case of using saga, a transaction
+will send the email and its corresponding compensating transaction may have to send another email to explain the problem.&lt;/p&gt;
+
+&lt;p&gt;The disadvantage of TCC, comparing with saga, is that its two-phased protocol requires services to be designed with additional
+pending state and interface to handle try request. And it may take twice the time to complete a TCC request than a saga request,
+because TCC communicates with each service twice and the confirm phase can only be started when responses of try request
+are received from all services.&lt;/p&gt;
+
+&lt;p&gt;More detailed explanation of TCC can be found at &lt;a href=&quot;https://www.infoq.com/presentations/Transactions-HTTP-REST&quot;&gt;Transactions for the REST of Us&lt;/a&gt;.&lt;/p&gt;
+
+&lt;h2 id=&quot;event-driven-architecture&quot;&gt;Event Driven Architecture&lt;/h2&gt;
+&lt;p&gt;In event driven architecture, just like TCC, an extra pending status is required for each service involved in a long live transaction.
+Services receiving transaction request insert a new record into its database with pending status and send a new event to
+the next service in the transaction sequence.&lt;/p&gt;
+
+&lt;p&gt;Because it's possible that a service crashes after inserting the record and we are not sure if the new event is sent,
+an extra event table is required for each service to keep track of which step the current long live transaction is in.&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/saga.event.driven.request.png&quot; alt=&quot;event driven architecture - request&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;Once the last service in the long live transaction completes its job, it notifies the previous service in the transaction.
+Services receiving completion event set its record status to done in its database.&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/saga.event.driven.response.png&quot; alt=&quot;event driven architecture - response&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;If you look closer, event driven architecture is just like a decentralized implementation of event driven TCC. If we remove
+the pending state for each service, this architecture looks like a decentralized and event driven saga.
+Being decentralized is good, but it creates much tighter coupling between services. Let's assume a new business requirement adds a new
+process D between B and C. With event driven architecture, service B and C have to change their code to accommodate the new 
+process D.&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/saga.event.coupling.png&quot; alt=&quot;event driven architecture - coupling&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;On the contrary, all these coupling is in saga and no change is required for existing services when a new process is added
+to the long live transaction.&lt;/p&gt;
+
+&lt;p&gt;More details can be found at &lt;a href=&quot;https://www.nginx.com/blog/event-driven-data-management-microservices/&quot;&gt;Event-Driven Data Management for Microservices&lt;/a&gt;.&lt;/p&gt;
+
+&lt;h2 id=&quot;centralized-vs-decentralized&quot;&gt;Centralized vs Decentralized&lt;/h2&gt;
+&lt;p&gt;This blog series have been talked about centralized saga. But saga can be implemented as decentralized solution too. 
+How does the decentralized version look like?&lt;/p&gt;
+
+&lt;p&gt;The decentralized version of saga does not have a dedicated coordinator. Whoever calling the next service
+in the transaction becomes the current coordinator instead. For example,&lt;/p&gt;
+&lt;ul&gt;
+  &lt;li&gt;service A receives a request requiring data consistency across service A, B, and C.&lt;/li&gt;
+  &lt;li&gt;A does its job and passes the request to the next service in the request, service B.&lt;/li&gt;
+  &lt;li&gt;B completes its part and passes the request to C, and so on.&lt;/li&gt;
+  &lt;li&gt;If C fails to process the request, it is B's responsibility to initiate its compensating transaction and asks A to rollback.&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/saga.decentralized.png&quot; alt=&quot;decentralized saga&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;Comparing with centralized one, the decentralized version has the advantage of service autonomy. But each service is
+coupled with data consistency protocol, which may require additional persistence infrastructure.&lt;/p&gt;
+
+&lt;p&gt;We love services implementing business rules to be autonomous, but there are many application related complexity such as
+data consistency, service monitoring, and message passing, that are better to be centralized, so that business services
+are able to focus on dealing with business complexity instead of application complexity. That's why we designed centralized saga.&lt;/p&gt;
+
+&lt;p&gt;In addition, the relationship among services in a long live transaction becomes harder and harder to understand, as the 
+number of services grows. It may quickly grow into a death star like the image below.&lt;/p&gt;
+
+&lt;p class=&quot;figure-caption&quot;&gt;&lt;img src=&quot;/assets/images/saga.death.star.png&quot; alt=&quot;death star architecture&quot; class=&quot;align-center&quot; /&gt;
+Image source: http://www.slideshare.net/BruceWong3/the-case-for-chaos (s12)&lt;/p&gt;
+
+&lt;p&gt;Meanwhile, locating the root cause of a problem in a long live transaction also becomes more troublesome, since the 
+service logs are spread all over cluster nodes.&lt;/p&gt;
+
+&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;/h2&gt;
+&lt;p&gt;In this article, we compared saga with other data consistency solutions. Saga is more scalable than two-phase commit and
+is preferable to TCC in scenarios where compensating transactions are feasible and minimal changes to business logic is
+required. Centralized saga decouples services from data consistency logic and its persistence infrastructure
+and allows easier troubleshooting of any problem occurred in transactions.&lt;/p&gt;
+
+&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;
+&lt;ol&gt;
+  &lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Two-phase_commit_protocol&quot;&gt;https://en.wikipedia.org/wiki/Two-phase_commit_protocol&lt;/a&gt;&lt;/li&gt;
+  &lt;li&gt;&lt;a href=&quot;https://cs.nyu.edu/courses/spring03/G22.2631-001/lecture8.pdf&quot;&gt;https://cs.nyu.edu/courses/spring03/G22.2631-001/lecture8.pdf&lt;/a&gt;&lt;/li&gt;
+  &lt;li&gt;&lt;a href=&quot;http://courses.cs.vt.edu/~cs5204/fall00/distributedDBMS/duckett/tpcp.html&quot;&gt;http://courses.cs.vt.edu/~cs5204/fall00/distributedDBMS/duckett/tpcp.html&lt;/a&gt;&lt;/li&gt;
+  &lt;li&gt;&lt;a href=&quot;https://www.infoq.com/presentations/Transactions-HTTP-REST&quot;&gt;https://www.infoq.com/presentations/Transactions-HTTP-REST&lt;/a&gt;&lt;/li&gt;
+  &lt;li&gt;&lt;a href=&quot;https://www.nginx.com/blog/event-driven-data-management-microservices/&quot;&gt;https://www.nginx.com/blog/event-driven-data-management-microservices/&lt;/a&gt;&lt;/li&gt;
+&lt;/ol&gt;</content><author><name>Sean Yin</name><email>seanyinx@gmail.com</email><uri>http://seanyinx.github.io</uri></author><category term="saga" /><summary type="html">How is distributed saga in ServiceComb comparing with other consistency solutions?</summary></entry><entry xml:lang="cn"><title type="html">ServiceComb中的数据最终一致性方案 - part 2</title><link href="/cn/docs/distributed_saga_2/" rel="alternate" type="text/html" title="ServiceComb中的数据最终一致性方案 - part 2" /><published>2017-09-16T00:00:00+08:00</published><updated>2017-09-16T19:05:00+08:00</updated><id>/cn/docs/saga-design</id><content type="html" xml:base="/cn/docs/distributed_saga_2/">&lt;p&gt;在我的前一篇&lt;a href=&quot;/cn/docs/distributed_saga_1/&quot;&gt;文章&lt;/a&gt;,我谈到怎么用&lt;a href=&quot;https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf&quot;&gt;Saga&lt;/a&gt;解决行程规划应用的数据一致性问题。
+现在让我们尝试设计实现Saga。&lt;/p&gt;
+
+&lt;h2 id=&quot;saga-log&quot;&gt;Saga Log&lt;/h2&gt;
+&lt;p&gt;Saga保证所有的子事务都得以完成或补偿,但Saga系统本身也可能会崩溃。Saga崩溃时可能处于以下几个状态:&lt;/p&gt;
+&lt;ul&gt;
+  &lt;li&gt;Saga收到事务请求,但尚未开始。因子事务对应的微服务状态未被Saga修改,我们什么也不需要做。&lt;/li&gt;
+  &lt;li&gt;一些子事务已经完成。重启后,Saga必须接着上次完成的事务恢复。&lt;/li&gt;
+  &lt;li&gt;子事务已开始,但尚未完成。由于远程服务可能已完成事务,也可能事务失败,甚至服务请求超时,saga只能重新发起之前未确认完成的子事务。这意味着子事务必须幂等。&lt;/li&gt;
+  &lt;li&gt;子事务失败,其补偿事务尚未开始。Saga必须在重启后执行对应补偿事务。&lt;/li&gt;
+  &lt;li&gt;补偿事务已开始但尚未完成。解决方案与上一个相同。这意味着补偿事务也必须是幂等的。&lt;/li&gt;
+  &lt;li&gt;所有子事务或补偿事务均已完成,与第一种情况相同。&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;为了恢复到上述状态,我们必须追踪子事务及补偿事务的每一步。我们决定通过事件的方式达到以上要求,并将以下事件保存在名为saga log的持久存储中:&lt;/p&gt;
+&lt;ul&gt;
+  &lt;li&gt;&lt;strong&gt;Saga started event&lt;/strong&gt; 保存整个saga请求,其中包括多个事务/补偿请求&lt;/li&gt;
+  &lt;li&gt;&lt;strong&gt;Transaction started event&lt;/strong&gt; 保存对应事务请求&lt;/li&gt;
+  &lt;li&gt;&lt;strong&gt;Transaction ended event&lt;/strong&gt; 保存对应事务请求及其回复&lt;/li&gt;
+  &lt;li&gt;&lt;strong&gt;Transaction aborted event&lt;/strong&gt; 保存对应事务请求和失败的原因&lt;/li&gt;
+  &lt;li&gt;&lt;strong&gt;Transaction compensated event&lt;/strong&gt; 保存对应补偿请求及其回复&lt;/li&gt;
+  &lt;li&gt;&lt;strong&gt;Saga ended event&lt;/strong&gt; 标志着saga事务请求的结束,不需要保存任何内容&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/saga.events.png&quot; alt=&quot;Events&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;通过将这些事件持久化在saga log中,我们可以将saga恢复到上述任何状态。&lt;/p&gt;
+
+&lt;p&gt;由于Saga只需要做事件的持久化,而事件内容以JSON的形式存储,Saga log的实现非常灵活,数据库(SQL或NoSQL),持久消息队列,甚至普通文件可以用作事件存储,
+当然有些能更快得帮saga恢复状态。&lt;/p&gt;
+
+&lt;h2 id=&quot;saga请求的数据结构&quot;&gt;Saga请求的数据结构&lt;/h2&gt;
+&lt;p&gt;在我们的业务场景下,航班预订、租车、和酒店预订没有依赖关系,可以并行处理,但对于我们的客户来说,只在所有预订成功后一次付费更加友好。
+那么这四个服务的事务关系可以用下图表示:&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/saga.transactions.png&quot; alt=&quot;Transactions&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;将行程规划请求的数据结构实现为&lt;a href=&quot;https://en.wikipedia.org/wiki/Directed_acyclic_graph&quot;&gt;有向非循环图&lt;/a&gt;恰好合适。
+图的根是saga启动任务,叶是saga结束任务。&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/saga.graph.png&quot; alt=&quot;Request Graph&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;h2 id=&quot;parallel-saga&quot;&gt;Parallel Saga&lt;/h2&gt;
+&lt;p&gt;如上所述,航班预订,租车和酒店预订可以并行处理。但是这样做会造成另一个问题:如果航班预订失败,而租车正在处理怎么办?我们不能一直等待租车服务回应,
+因为不知道需要等多久。&lt;/p&gt;
+
+&lt;p&gt;最好的办法是再次发送租车请求,获得回应,以便我们能够继续补偿操作。但如果租车服务永不回应,我们可能需要采取回退措施,比如手动干预。&lt;/p&gt;
+
+&lt;p&gt;超时的预订请求可能最后仍被租车服务收到,这时服务已经处理了相同的预订和取消请求。&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/saga.commutative.png&quot; alt=&quot;Network Latency&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;因此,服务的实现必须保证补偿请求执行以后,再次收到的对应事务请求无效。
+Caitie McCaffrey在她的演讲&lt;a href=&quot;https://www.youtube.com/watch?v=1H6tounpnG8&quot;&gt;Distributed Sagas: A Protocol for Coordinating Microservices&lt;/a&gt;中把这个称为&lt;strong&gt;可交换的补偿请求 (commutative compensating request)&lt;/strong&gt; 。&lt;/p&gt;
+
+&lt;h2 id=&quot;acid-and-saga&quot;&gt;ACID and Saga&lt;/h2&gt;
+&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/ACID&quot;&gt;ACID&lt;/a&gt;是具有以下属性的一致性模型:&lt;/p&gt;
+&lt;ul&gt;
+  &lt;li&gt;原子性(Atomicity)&lt;/li&gt;
+  &lt;li&gt;一致性(Consistency)&lt;/li&gt;
+  &lt;li&gt;隔离性(Isolation)&lt;/li&gt;
+  &lt;li&gt;持久性(Durability)&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;Saga不提供ACID保证,因为原子性和隔离性不能得到满足。原&lt;a href=&quot;https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf&quot;&gt;论文&lt;/a&gt;描述如下:&lt;/p&gt;
+&lt;blockquote&gt;
+  &lt;p&gt;full atomicity is not provided. That is, sagas may view the partial results of other sagas [&lt;a href=&quot;https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf&quot;&gt;1&lt;/a&gt;]&lt;/p&gt;
+&lt;/blockquote&gt;
+
+&lt;p&gt;通过saga log,saga可以保证一致性和持久性。&lt;/p&gt;
+
+&lt;h2 id=&quot;saga-架构&quot;&gt;Saga 架构&lt;/h2&gt;
+&lt;p&gt;最后,我们的Saga架构如下&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/saga.design.png&quot; alt=&quot;Saga Architecture&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;ul&gt;
+  &lt;li&gt;Saga Execution Component解析请求JSON并构建请求图&lt;/li&gt;
+  &lt;li&gt;TaskRunner 用任务队列确保请求的执行顺序&lt;/li&gt;
+  &lt;li&gt;TaskConsumer 处理Saga任务,将事件写入saga log,并将请求发送到远程服务&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;h2 id=&quot;总结&quot;&gt;总结&lt;/h2&gt;
+&lt;p&gt;本文讨论了如何实现saga,通过saga log来保存事务和补偿事件。也提到如何从saga log中持久化的事件恢复崩溃的saga系统。
+为了满足saga的一致性保证,微服务的设计有以下几个要求:&lt;/p&gt;
+&lt;ul&gt;
+  &lt;li&gt;事务和赔偿请求必须幂等&lt;/li&gt;
+  &lt;li&gt;补偿请求必须可交换(commutative)&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;
+&lt;ol&gt;
+  &lt;li&gt;&lt;a href=&quot;https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf&quot;&gt;Original Paper on Sagas&lt;/a&gt; by By Hector Garcia-Molina &amp;amp; Kenneth Salem&lt;/li&gt;
+&lt;/ol&gt;</content><author><name>Sean Yin</name><email>seanyinx@gmail.com</email><uri>http://seanyinx.github.io</uri></author><category term="事务一致性" /><summary type="html">ServiceComb中的分布式Saga设计</summary></entry><entry xml:lang="en"><title type="html">Eventual Data Consistency Solution in ServiceComb - part 2</title><link href="/docs/distributed_saga_2/" rel="alternate" type="text/html" title="Eventual Data Consistency Solution in ServiceComb - part 2" /><published>2017-09-16T00:00:00+08:00</published><updated>2017-09-16T16:05:00+08:00</updated><id>/docs/saga-design</id><content type="html" xml:base="/docs/distributed_saga_2/">&lt;p&gt;In my &lt;a href=&quot;/docs/distributed_saga_1/&quot;&gt;previous post&lt;/a&gt;, I talked about how &lt;a href=&quot;https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf&quot;&gt;Saga&lt;/a&gt; can 
+be used to solve the data consistency issue of our trip planning application. Now let's gather the requirements to design
+a saga.&lt;/p&gt;
+
+&lt;h2 id=&quot;saga-log&quot;&gt;Saga Log&lt;/h2&gt;
+&lt;p&gt;Saga guarantees either all sub-transactions are committed or compensated for, but the saga system itself may crash. There
+are a few states that a saga may be in on crash:&lt;/p&gt;
+&lt;ul&gt;
+  &lt;li&gt;Saga received a request, but no transaction started yet. States of services involved in sub-transactions are not modified
+by saga, nothing has been done.&lt;/li&gt;
+  &lt;li&gt;Some sub-transactions were done. When restarted, saga has to resume from the last completed transaction.&lt;/li&gt;
+  &lt;li&gt;A sub-transaction was started, but not completed yet. Since we are not sure if the remote service completed the transaction, 
+failed the transaction, or the request to remote service timed out, saga has to redo the sub-transaction on restart. That also
+means sub-transactions have to be idempotent.&lt;/li&gt;
+  &lt;li&gt;A sub-transaction failed and its compensating transaction has not started yet. Saga has to resume from the compensating
+transaction on restart.&lt;/li&gt;
+  &lt;li&gt;A compensating transaction started but not completed yet. The solution is basically the same as the previous one. That means
+compensating transactions have to idempotent too.&lt;/li&gt;
+  &lt;li&gt;All sub-transactions or compensating transactions were done, which is the same as the first case.&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;In order for saga to recover to the states mentioned above, we have to keep track of each step of sub-transactions and
+compensating transactions. We decided to achieve that by saving the following events in a persistent store called saga log:&lt;/p&gt;
+&lt;ul&gt;
+  &lt;li&gt;&lt;strong&gt;Saga started event&lt;/strong&gt; stores the entire saga request, which includes multiple transaction/compensation requests&lt;/li&gt;
+  &lt;li&gt;&lt;strong&gt;Transaction started event&lt;/strong&gt; stores individual transaction request&lt;/li&gt;
+  &lt;li&gt;&lt;strong&gt;Transaction ended event&lt;/strong&gt; stores individual transaction request and its response&lt;/li&gt;
+  &lt;li&gt;&lt;strong&gt;Transaction aborted event&lt;/strong&gt; stores individual transaction request and the cause of failure&lt;/li&gt;
+  &lt;li&gt;&lt;strong&gt;Transaction compensated event&lt;/strong&gt; stores individual compensation request and its response&lt;/li&gt;
+  &lt;li&gt;&lt;strong&gt;Saga ended event&lt;/strong&gt; marks the end of a saga request and stores nothing&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/saga.events.png&quot; alt=&quot;Events&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;By persisting these events in saga log, a crashed saga can be recovered to any states above.&lt;/p&gt;
+
+&lt;p&gt;Since saga only needs persistence of events and the event contents are stored as JSON, the implementation of the saga log 
+is very flexible. Databases (SQL or NoSQL), durable message queues, or even plain files can be used as event storage, but
+some are faster for saga to recover.&lt;/p&gt;
+
+&lt;h2 id=&quot;request-data-structure-of-saga&quot;&gt;Request Data Structure of Saga&lt;/h2&gt;
+&lt;p&gt;In our case, flight booking, car rental, and hotel reservation have no dependency among each other at all and they can be
+processed in parallel. However, it's more user friendly for our customers to only charge their credit cards once, when all 
+the bookings are done successfully. That means the transactions of the four services look like the graph below.&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/saga.transactions.png&quot; alt=&quot;Transactions&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;It makes sense to implement the data structure of trip planning request as a &lt;a href=&quot;https://en.wikipedia.org/wiki/Directed_acyclic_graph&quot;&gt;Directed Acyclic Graph&lt;/a&gt;.
+The root of the graph is saga start task and the leaf is saga end task.&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/saga.graph.png&quot; alt=&quot;Request Graph&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;h2 id=&quot;parallel-saga&quot;&gt;Parallel Saga&lt;/h2&gt;
+&lt;p&gt;As mentioned above, flight booking, car rental, and hotel reservation can be processed in parallel. But doing so creates
+another problem: what if flight booking failed while car rental is being processed? We can't keep waiting for the response
+from car rental service, because we have no idea how long it will take.&lt;/p&gt;
+
+&lt;p&gt;THe best thing we can do is to send the car rental request again and hope we get a response so that we can continue our 
+backward recovery. If car rental service never responds, we may have to fallback with manual intervention.&lt;/p&gt;
+
+&lt;p&gt;The delayed booking request may still be received by the remote car rental service. When it does, the service has already
+processed the same booking and its cancellation request.&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/saga.commutative.png&quot; alt=&quot;Network Latency&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;Therefore, services have to implement transactions and compensations in such a way that transaction request received after
+its compensation request takes no effect. Caitie McCaffrey called this &lt;strong&gt;commutative compensating request&lt;/strong&gt; in her talk 
+on &lt;a href=&quot;https://www.youtube.com/watch?v=1H6tounpnG8&quot;&gt;Distributed Sagas: A Protocol for Coordinating Microservices&lt;/a&gt;.&lt;/p&gt;
+
+&lt;h2 id=&quot;acid-and-saga&quot;&gt;ACID and Saga&lt;/h2&gt;
+&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/ACID&quot;&gt;ACID&lt;/a&gt; is consistency model with the following properties:&lt;/p&gt;
+&lt;ul&gt;
+  &lt;li&gt;Atomicity&lt;/li&gt;
+  &lt;li&gt;Consistency&lt;/li&gt;
+  &lt;li&gt;Isolation&lt;/li&gt;
+  &lt;li&gt;Durability&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;Saga does not provide ACID guarantee, because atomicity and isolation are not satisfied according to the &lt;a href=&quot;https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf&quot;&gt;paper&lt;/a&gt;&lt;/p&gt;
+&lt;blockquote&gt;
+  &lt;p&gt;full atomicity is not provided. That is, sagas may view the partial results of other sagas [&lt;a href=&quot;https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf&quot;&gt;1&lt;/a&gt;]&lt;/p&gt;
+&lt;/blockquote&gt;
+
+&lt;p&gt;With durable saga log, saga guarantees consistency and durability.&lt;/p&gt;
+
+&lt;h2 id=&quot;saga-architecture&quot;&gt;Saga Architecture&lt;/h2&gt;
+&lt;p&gt;Finally, the architecture of our saga looks like this&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/saga.design.png&quot; alt=&quot;Saga Architecture&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;ul&gt;
+  &lt;li&gt;Saga execution component parses the request JSON and builds a graph of requests&lt;/li&gt;
+  &lt;li&gt;TaskRunner ensures the execution order of requests with task queue&lt;/li&gt;
+  &lt;li&gt;TaskConsumer processes tasks to write events to saga log and send requests to remote services&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;/h2&gt;
+&lt;p&gt;In this article, we talked about how saga can be implemented with a saga log to persist transaction/compensation events 
+and request graph. A crashed saga can also be recovered from all the persisted events in saga log on restart. However,
+there are a few requirements on design of microservices to ensure saga consistency guarantee:&lt;/p&gt;
+&lt;ul&gt;
+  &lt;li&gt;transaction and compensation requests must be idempotent&lt;/li&gt;
+  &lt;li&gt;compensation requests must be commutative&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;
+&lt;ol&gt;
+  &lt;li&gt;&lt;a href=&quot;https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf&quot;&gt;Original Paper on Sagas&lt;/a&gt; by By Hector Garcia-Molina &amp;amp; Kenneth Salem&lt;/li&gt;
+&lt;/ol&gt;</content><author><name>Sean Yin</name><email>seanyinx@gmail.com</email><uri>http://seanyinx.github.io</uri></author><category term="saga" /><summary type="html">The design of distributed saga in ServiceComb</summary></entry><entry xml:lang="cn"><title type="html">使用JMeter对秒杀示例进行性能测试</title><link href="/cn/docs/performance-test-on-seckill-with-jmeter/" rel="alternate" type="text/html" title="使用JMeter对秒杀示例进行性能测试" /><published>2017-09-15T00:00:00+08:00</published><updated>2017-09-15T09:00:00+08:00</updated><id>/cn/docs/performance-test-on-seckill-with-jmeter</id><content type="html" xml:base="/cn/docs/performance-test-on-seckill-with-jmeter/">&lt;h2 id=&quot;背景&quot;&gt;背景&lt;/h2&gt;
+&lt;p&gt;  &lt;a href=&quot;https://github.com/ServiceComb/seckill&quot;&gt;秒杀&lt;/a&gt;是我们ServiceComb开源团队以领域驱动设计(&lt;a href=&quot;https://en.wikipedia.org/wiki/Domain-driven_design&quot;&gt;DDD&lt;/a&gt;)为背景,从零开始构建一个微服务架构的示例项目;在《秒杀开发历程》系列博文中提到它作为一个高并发压力场景的应用,采用了&lt;a href=&quot;https://docs.microsoft.com/en-us/azure/architecture/patterns/cqrs&quot;&gt;CQRS&lt;/a&gt;模式构建,因此我们将使用&lt;a href=&quot;http://jmeter.apache.org/&quot;&gt;JMeter&lt;/a&gt;来对其进行性能评估。&lt;/p&gt;
+
+&lt;h2 id=&quot;制定用户行为模型&quot;&gt;制定用户行为模型&lt;/h2&gt;
+&lt;p&gt;  因为秒杀的场景在现实生活中非常常见,所以用户行为模型非常容易设计:&lt;/p&gt;
+&lt;ol&gt;
+  &lt;li&gt;客户不停的刷秒杀活动,直到刷出一个正在进行的秒杀活动;&lt;/li&gt;
+  &lt;li&gt;刷出了秒杀活动后,马上请求秒杀优惠券;&lt;/li&gt;
+  &lt;li&gt;无论是否成功,客户会稍后查询一次自己已经拥有的优惠券确定优惠券是否进入自己的账号。&lt;/li&gt;
+&lt;/ol&gt;
+
+&lt;p&gt;  我们还需要一个管理员用户,隔一段时间就创建发布秒杀活动,当然活动包含的优惠券数量将会远少于客户的数量。
+  
+  用户行为模型在JMeter中体现为脚本逻辑,完成的脚本逻辑如下:&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/performance-test-on-seckill-with-jmeter-script.png&quot; alt=&quot;图1 脚本模型&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;  脚本文件已经托管至秒杀项目中,可直接获取:&lt;/p&gt;
+
+&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;git clone https://github.com/ServiceComb/seckill
+&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;seckill/performance-test/script
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+
+&lt;h2 id=&quot;性能测试环境&quot;&gt;性能测试环境&lt;/h2&gt;
+&lt;p&gt;  我们调来了两台云服务器进行性能测试,角色和配置如下:&lt;/p&gt;
+&lt;h3 id=&quot;秒杀服务器配置&quot;&gt;秒杀服务器配置&lt;/h3&gt;
+&lt;p&gt;  承载秒杀示例所有的微服务和中间件,包括四个微服务(Admin、Command、Event和Query)、两个数据库(ReadDB和WriteDB)和一个Message Broker(ActiveMQ)。&lt;/p&gt;
+
+&lt;table&gt;
+  &lt;thead&gt;
+    &lt;tr&gt;
+      &lt;th&gt;配置项&lt;/th&gt;
+      &lt;th&gt;配置值&lt;/th&gt;
+    &lt;/tr&gt;
+  &lt;/thead&gt;
+  &lt;tbody&gt;
+    &lt;tr&gt;
+      &lt;td&gt;CPU&lt;/td&gt;
+      &lt;td&gt;Intel Xeon E5-2690 3.0GHz * 16&lt;/td&gt;
+    &lt;/tr&gt;
+    &lt;tr&gt;
+      &lt;td&gt;MEM&lt;/td&gt;
+      &lt;td&gt;64GB&lt;/td&gt;
+    &lt;/tr&gt;
+    &lt;tr&gt;
+      &lt;td&gt;OS&lt;/td&gt;
+      &lt;td&gt;Ubuntu 16.04.2 LTS&lt;/td&gt;
+    &lt;/tr&gt;
+  &lt;/tbody&gt;
+&lt;/table&gt;
+
+&lt;p&gt;  为了能够便于配置和启动示例系统,我们采用《秒杀开发历程(三)》中的一键启动模式拉起所有的服务,因此Docker升级为当前最新版17.06.2-ce,能够支持配置Container使用CPU和内存的大小限制,以Admin微服务为例:
+  &lt;/p&gt;
+&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  &lt;span class=&quot;s&quot;&gt;admin-service&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
+    &lt;span class=&quot;s&quot;&gt;mem_limit&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;4096m&lt;/span&gt;
+    &lt;span class=&quot;s&quot;&gt;cpu_count&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;4&lt;/span&gt;
+    &lt;span class=&quot;s&quot;&gt;cpu_percent&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;50&lt;/span&gt;
+    &lt;span class=&quot;s&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;seckill-admin-service:0.2.0-SNAPSHOT&quot;&lt;/span&gt;
+    &lt;span class=&quot;s&quot;&gt;hostname&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;admin-service&lt;/span&gt;
+    &lt;span class=&quot;s&quot;&gt;links&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
+      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;mysql-write-db:write_db.servicecomb.io&quot;&lt;/span&gt;
+    &lt;span class=&quot;s&quot;&gt;environment&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
+      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;JAVA_OPTS=-Dspring.profiles.active=prd -Dendpoints.shutdown.enabled=true&lt;/span&gt;
+    &lt;span class=&quot;s&quot;&gt;ports&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
+      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;8081:8081&quot;&lt;/span&gt;
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+
+&lt;h3 id=&quot;加压机配置&quot;&gt;加压机配置&lt;/h3&gt;
+&lt;p&gt;  加压机与秒杀服务器处于同一网络环境中,配置如下:
+  
+| 配置项  | 配置值                            |
+| —- | —————————— |
+| CPU  | Intel Xeon E5-2690 3.0GHz * 16 |
+| MEM  | 32GB                           |
+| OS   | Ubuntu 16.04.2 LTS             |&lt;/p&gt;
+
+&lt;h2 id=&quot;启动测试&quot;&gt;启动测试&lt;/h2&gt;
+&lt;p&gt;  我们设定测试场景为200客户,每隔1秒启动一个新客户;1个管理员每隔10秒发布1个秒杀活动,一共发布160次,每个秒杀活动包含50张优惠券,即一共投放8000张优惠券。整个测试持续半个小时。
+  
+  现在,我们切换到性能测试脚本目录下,执行下面的命令启动测试:
+  &lt;/p&gt;
+&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;jmeter -n -t seckill.jmx -l log.jtl
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+
+&lt;h2 id=&quot;测试结果&quot;&gt;测试结果&lt;/h2&gt;
+&lt;p&gt;  测试完毕后通过下面的命令分析测试结果日志数据,请将&lt;report folder=&quot;&quot;&gt;替换为你的本地目录:&lt;/report&gt;&lt;/p&gt;
+
+&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;jmeter -g log.jtl -o &amp;lt;report folder&amp;gt;
+&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+
+&lt;p&gt;  我们需要先验证测试结果的正确性,查看数据统计图:&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/performance-test-on-seckill-with-jmeter-statistics.png&quot; alt=&quot;图2 事务统计&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;  其中秒杀的失败率在96.45%,原因是Query对于活动的秒杀活动采用的是0.5秒刷新缓存的策略,在活动中的优惠券被秒杀一空下架前,短暂的时间内仍然能够查询到这个活动;架构中采用的&lt;a href=&quot;https://docs.microsoft.com/en-us/azure/architecture/patterns/cqrs&quot;&gt;CQRS&lt;/a&gt;模式只能保证最终一致性,并不能保证实时一致性。
+  
+  成功秒杀的次数为225264 - 217264 = 8000,正好等于我们设定的优惠券投放量,其他事务的失败率均为0%,因此测试结果正确。&lt;/p&gt;
+
+&lt;h3 id=&quot;吞吐能力&quot;&gt;吞吐能力&lt;/h3&gt;
+&lt;p&gt;  秒杀整体吞吐能力如下图:&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/performance-test-on-seckill-with-jmeter-tps-all.png&quot; alt=&quot;图3 整体吞吐能力&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;  可以看到查询活跃的秒杀活动(刷券)事务处理量最高,稳定在4000左右,其他因为业务比例的原因较低,去掉查询活跃的秒杀活动事务后如下图:&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/performance-test-on-seckill-with-jmeter-tps-less.png&quot; alt=&quot;图4 秒杀和优惠券查询&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;  秒杀和优惠券查询之间的差值是由于存在秒杀失败造成的,我们的用户行为模型是无论秒杀成功与否都会进行一次优惠券查询。&lt;/p&gt;
+
+&lt;h3 id=&quot;响应时间&quot;&gt;响应时间&lt;/h3&gt;
+&lt;p&gt;  事务的响应时间我们可以看下面两个图:&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/performance-test-on-seckill-with-jmeter-latencies.png&quot; alt=&quot;图5 响应时间&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;&lt;img src=&quot;/assets/images/performance-test-on-seckill-with-jmeter-time-percentiles.png&quot; alt=&quot;图6 响应时间分布&quot; class=&quot;align-center&quot; /&gt;&lt;/p&gt;
+
+&lt;p&gt;  75%的事务处理时间都在10ms以下,整体平均响应时间处于50ms以下。&lt;/p&gt;
+
+&lt;h2 id=&quot;瓶颈分析&quot;&gt;瓶颈分析&lt;/h2&gt;
+&lt;p&gt;  依据执行过程中对于测试资源的观察,加压

<TRUNCATED>

[06/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/users/develop-with-transparent-rpc/index.html
----------------------------------------------------------------------
diff --git a/content/users/develop-with-transparent-rpc/index.html b/content/users/develop-with-transparent-rpc/index.html
new file mode 100644
index 0000000..6d055a7
--- /dev/null
+++ b/content/users/develop-with-transparent-rpc/index.html
@@ -0,0 +1,793 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>用透明RPC开发微服务 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="用透明RPC开发微服务">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="用透明RPC开发微服务">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/users/develop-with-transparent-rpc/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/users/develop-with-transparent-rpc/">
+
+
+
+  <meta property="og:description" content="用透明RPC开发微服务">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="用透明RPC开发微服务">
+  <meta name="twitter:description" content="用透明RPC开发微服务">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/users/develop-with-transparent-rpc/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">User Guide</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/" class="">Java Chassis Architecture</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/setup-environment/" class="">Setup Environment</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Provider</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-definition/" class="">Service Definition</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-contract/" class="">Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-springmvc/" class="">Develop Microservice with SpringMVC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-jax-rs/" class="">Develop Microservice with JAX-RS</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-transparent-rpc/" class="active">Develop Microservice with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-interface-constraints/" class="">Service Interface Constraints</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-configurations/" class="">Service Configurations</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/communicate-protocol/" class="">Communicate Protocol</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/application-boot-process/" class="">Application Boot Up Process</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-heartbeat/" class="">Service Heartbeat</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Consumer</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rest-template/" class="">Develop with Rest Template</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rpc/" class="">Develop with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-service-contract/" class="">Use Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/invoke-control/" class="">Invoke Control</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">General Development</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/local-develop-test/" class="">Develop and Test in Local Environment</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-servicecomb-in-spring-boot/" class="">Use ServiceComb in Spring Boot</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/distributed-tracing/" class="">Distributed Tracing</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/customized-tracing/" class="">Customized Tracing</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Edging Service</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/nginx/" class="">confd and Nginx</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/zuul/" class="">Zuul</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">Metrics</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Deployment</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/run-mode/" class="">Run Mode</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Security</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-tls/" class="">Use TLS</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="用透明RPC开发微服务">
+    <meta itemprop="description" content="用透明RPC开发微服务">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">用透明RPC开发微服务
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> On This Page</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#概念阐述" id="markdown-toc-概念阐述">概念阐述</a></li>
+  <li><a href="#开发示例" id="markdown-toc-开发示例">开发示例</a></li>
+  <li><a href="#通过注解配置的开发方式" id="markdown-toc-通过注解配置的开发方式">通过注解配置的开发方式</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="概念阐述">概念阐述</h2>
+
+<p>透明RPC开发模式是一种基于接口和接口实现的开发模式,服务的开发者不需要使用Spring MVC和JAX-RS注解。</p>
+
+<h2 id="开发示例">开发示例</h2>
+
+<p>透明RPC开发模式支持Spring xml配置和注解配置两种服务发布方式,通过Spring xml配置的方式如下:</p>
+
+<ul>
+  <li>
+    <p><strong>步骤 1</strong> 定义服务接口。</p>
+
+    <p>根据开发之前定义好的契约,编写Java业务接口,代码如下:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="kd">public</span> <span class="kd">interface</span> <span class="nc">Hello</span> <span class="o">{</span>
+   <span class="n">String</span> <span class="nf">sayHi</span><span class="o">(</span><span class="n">String</span> <span class="n">name</span><span class="o">);</span>
+   <span class="n">String</span> <span class="nf">sayHello</span><span class="o">(</span><span class="n">Person</span> <span class="n">person</span><span class="o">);</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+
+    <blockquote>
+      <p><strong>说明</strong>:
+该接口的位置需要与契约中x-java-interface所指定的路径一致。</p>
+    </blockquote>
+  </li>
+  <li>
+    <p><strong>步骤 2</strong> 实现服务</p>
+
+    <p>Hello的服务实现如下:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="kn">import</span> <span class="nn">io.servicecomb.samples.common.schema.Hello</span><span class="o">;</span>
+ <span class="kn">import</span> <span class="nn">io.servicecomb.samples.common.schema.models.Person</span><span class="o">;</span>
+
+ <span class="kd">public</span> <span class="kd">class</span> <span class="nc">HelloImpl</span> <span class="kd">implements</span> <span class="n">Hello</span> <span class="o">{</span>
+   <span class="nd">@Override</span>
+   <span class="kd">public</span> <span class="n">String</span> <span class="nf">sayHi</span><span class="o">(</span><span class="n">String</span> <span class="n">name</span><span class="o">)</span> <span class="o">{</span>
+     <span class="k">return</span> <span class="s">"Hello "</span> <span class="o">+</span> <span class="n">name</span><span class="o">;</span>
+   <span class="o">}</span>
+
+   <span class="nd">@Override</span>
+   <span class="kd">public</span> <span class="n">String</span> <span class="nf">sayHello</span><span class="o">(</span><span class="n">Person</span> <span class="n">person</span><span class="o">)</span> <span class="o">{</span>
+     <span class="k">return</span> <span class="s">"Hello person "</span> <span class="o">+</span> <span class="n">person</span><span class="o">.</span><span class="na">getName</span><span class="o">();</span>
+   <span class="o">}</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>步骤 3</strong> 发布服务</p>
+
+    <p>在resources/META-INF/spring目录下创建pojoHello.bean.xml文件,在文件中声明schema,文件内容如下:</p>
+
+    <div class="language-xml highlighter-rouge"><pre class="highlight"><code> <span class="cp">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span>
+ <span class="nt">&lt;beans</span> <span class="na">xmlns=</span><span class="s">" http://www.springframework.org/schema/beans "</span> <span class="na">xmlns:xsi=</span><span class="s">" http://www.w3.org/2001/XMLSchema-instance "</span>
+        <span class="na">xmlns:p=</span><span class="s">" http://www.springframework.org/schema/p "</span> <span class="na">xmlns:util=</span><span class="s">" http://www.springframework.org/schema/util "</span>
+        <span class="na">xmlns:cse=</span><span class="s">" http://www.huawei.com/schema/paas/cse/rpc "</span>
+        <span class="na">xmlns:context=</span><span class="s">" http://www.springframework.org/schema/context "</span>
+        <span class="na">xsi:schemaLocation=</span><span class="s">" http://www.springframework.org/schema/beans classpath:org/springframework/beans/factory/xml/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.huawei.com/schema/paas/cse/rpc classpath:META-INF/spring/spring-paas-cse-rpc.xsd"</span><span class="nt">&gt;</span>
+   
+     <span class="nt">&lt;cse:rpc-schema</span> <span class="na">schema-id=</span><span class="s">"pojoHello"</span> <span class="na">implementation=</span><span class="s">"io.servicecomb.samples.pojo.provider.PojoHelloImpl"</span><span class="nt">/&gt;</span>
+ <span class="nt">&lt;/beans&gt;</span>
+</code></pre>
+    </div>
+
+    <blockquote>
+      <p><strong>说明</strong>:
+每一个服务接口都需要定义一个schema声明。</p>
+    </blockquote>
+  </li>
+</ul>
+
+<h2 id="通过注解配置的开发方式">通过注解配置的开发方式</h2>
+
+<ol>
+  <li>定义服务接口,与使用Spring xml的方式相同。</li>
+  <li>实现服务,与使用Spring xml的方式相同。</li>
+  <li>
+    <p>发布服务。在接口Hello的实现类上使用@RpcSchema注解定义schema,代码如下:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">io.servicecomb.provider.pojo.RpcSchema</span><span class="o">;</span>
+<span class="c1">// other code omitted</span>
+<span class="nd">@RpcSchema</span><span class="o">(</span><span class="n">schemaId</span> <span class="o">=</span> <span class="s">"pojoHello"</span><span class="o">)</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">HelloImpl</span> <span class="kd">implements</span> <span class="n">Hello</span> <span class="o">{</span>
+  <span class="c1">// other code omitted</span>
+<span class="o">}</span>
+</code></pre>
+    </div>
+
+    <p>在resources/META-INF/spring目录下的pojoHello.bean.xml文件中,配置Spring进行服务扫描的base-package,文件内容如下:</p>
+
+    <div class="language-xml highlighter-rouge"><pre class="highlight"><code><span class="cp">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span>
+<span class="nt">&lt;beans</span> <span class="na">xmlns=</span><span class="s">" http://www.springframework.org/schema/beans "</span> <span class="na">xmlns:xsi=</span><span class="s">" http://www.w3.org/2001/XMLSchema-instance "</span>
+       <span class="na">xmlns:p=</span><span class="s">" http://www.springframework.org/schema/p "</span> <span class="na">xmlns:util=</span><span class="s">" http://www.springframework.org/schema/util "</span>
+       <span class="na">xmlns:cse=</span><span class="s">" http://www.huawei.com/schema/paas/cse/rpc "</span>
+       <span class="na">xmlns:context=</span><span class="s">" http://www.springframework.org/schema/context "</span>
+       <span class="na">xsi:schemaLocation=</span><span class="s">" http://www.springframework.org/schema/beans classpath:org/springframework/beans/factory/xml/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.huawei.com/schema/paas/cse/rpc classpath:META-INF/spring/spring-paas-cse-rpc.xsd"</span><span class="nt">&gt;</span>
+   
+    <span class="nt">&lt;context:component-scan</span> <span class="na">base-package=</span><span class="s">"io.servicecomb.samples.pojo.provider"</span><span class="nt">/&gt;</span>
+<span class="nt">&lt;/beans&gt;</span>
+</code></pre>
+    </div>
+  </li>
+</ol>
+
+<blockquote>
+  <p><strong>说明</strong>:
+与Spring MVC开发模式和JAX-RS开发模式不同的是,透明RPC开发模式使用的注解是<code class="highlighter-rouge">@RpcSchema</code>而非<code class="highlighter-rouge">@RestSchema</code>。</p>
+</blockquote>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/develop-with-transparent-rpc.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/develop-with-transparent-rpc.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/users/distributed-tracing/index.html
----------------------------------------------------------------------
diff --git a/content/users/distributed-tracing/index.html b/content/users/distributed-tracing/index.html
new file mode 100644
index 0000000..4c25ded
--- /dev/null
+++ b/content/users/distributed-tracing/index.html
@@ -0,0 +1,749 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>分布式调用链追踪 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="分布式调用链追踪">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="分布式调用链追踪">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/users/distributed-tracing/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/users/distributed-tracing/">
+
+
+
+  <meta property="og:description" content="分布式调用链追踪">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="分布式调用链追踪">
+  <meta name="twitter:description" content="分布式调用链追踪">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/users/distributed-tracing/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">User Guide</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/" class="">Java Chassis Architecture</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/setup-environment/" class="">Setup Environment</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Provider</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-definition/" class="">Service Definition</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-contract/" class="">Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-springmvc/" class="">Develop Microservice with SpringMVC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-jax-rs/" class="">Develop Microservice with JAX-RS</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-transparent-rpc/" class="">Develop Microservice with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-interface-constraints/" class="">Service Interface Constraints</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-configurations/" class="">Service Configurations</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/communicate-protocol/" class="">Communicate Protocol</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/application-boot-process/" class="">Application Boot Up Process</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-heartbeat/" class="">Service Heartbeat</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Consumer</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rest-template/" class="">Develop with Rest Template</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rpc/" class="">Develop with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-service-contract/" class="">Use Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/invoke-control/" class="">Invoke Control</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">General Development</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/local-develop-test/" class="">Develop and Test in Local Environment</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-servicecomb-in-spring-boot/" class="">Use ServiceComb in Spring Boot</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/distributed-tracing/" class="active">Distributed Tracing</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/customized-tracing/" class="">Customized Tracing</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Edging Service</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/nginx/" class="">confd and Nginx</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/zuul/" class="">Zuul</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">Metrics</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Deployment</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/run-mode/" class="">Run Mode</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Security</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-tls/" class="">Use TLS</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="分布式调用链追踪">
+    <meta itemprop="description" content="分布式调用链追踪">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">分布式调用链追踪
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> On This Page</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#概念阐述" id="markdown-toc-概念阐述">概念阐述</a></li>
+  <li><a href="#zipkin" id="markdown-toc-zipkin">Zipkin</a></li>
+  <li><a href="#使用步骤" id="markdown-toc-使用步骤">使用步骤:</a>    <ul>
+      <li><a href="#添加依赖" id="markdown-toc-添加依赖">添加依赖</a></li>
+      <li><a href="#配置追踪处理和数据收集" id="markdown-toc-配置追踪处理和数据收集">配置追踪处理和数据收集</a></li>
+    </ul>
+  </li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="概念阐述">概念阐述</h2>
+
+<p>微服务架构解决了很多单体应用带来的问题,但同时也需要我们付出额外的代价。由于网络的不稳定性带来的请求处理延迟就是代价之一。</p>
+
+<p>在单体应用中,所有模块都在同一个进程中运行,所以并没有模块间互通的问题。但微服务架构中,服务间通过网络沟通,因此我们不得不处理和网络有关的 问题,例如:延迟、超时、网络分区等。</p>
+
+<p>另外,随着业务的扩展服务增多,我们很难洞察数据如何在蛛网般复杂的服务结构中流转。我们如何才能有效的监控网络延迟并且可视化服务中的数据流转呢?</p>
+
+<p><strong>分布式调用链追踪</strong>用于有效地监控微服务的网络延时并可视化微服务中的数据流转。</p>
+
+<h2 id="zipkin">Zipkin</h2>
+
+<blockquote>
+  <p><a href="http://zipkin.io/">Zipkin</a>是一个分布式调用链追踪系统。 它能帮助用户收集时序数据用以定位微服务中的延迟问题,它同时管理追踪数据的收集 和查询。Zipkin 的设计基于 Google <a href="http://research.google.com/pubs/pub36356.html">Dapper paper</a>。</p>
+</blockquote>
+
+<p>ServiceComb 集成了 Zipkin 提供自动调用链追踪能力,如此一来用户只需要专注实现其业务需求。</p>
+
+<h2 id="使用步骤">使用步骤:</h2>
+
+<h3 id="添加依赖">添加依赖</h3>
+
+<p>基于 ServiceComb Java Chassis 的微服务只需要添加如下依赖到 pom.xml:</p>
+
+<div class="language-xml highlighter-rouge"><pre class="highlight"><code><span class="nt">&lt;dependency&gt;</span>   
+    <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+    <span class="nt">&lt;artifactId&gt;</span>handler-tracing-zipkin<span class="nt">&lt;/artifactId&gt;</span>
+<span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+</div>
+
+<p>如果微服务是基于 Spring Cloud + Zuul 的 API 网关,例如 workshop demo 中的 manager service ,我们还需要加入如下的额外依赖:</p>
+
+<div class="language-xml highlighter-rouge"><pre class="highlight"><code><span class="nt">&lt;dependency&gt;</span>    
+    <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+    <span class="nt">&lt;artifactId&gt;</span>spring-cloud-zuul-zipkin<span class="nt">&lt;/artifactId&gt;</span>
+<span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+</div>
+
+<h3 id="配置追踪处理和数据收集">配置追踪处理和数据收集</h3>
+
+<p>在microservice.yaml文件中设置追踪处理器和数据收集服务地址</p>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">cse</span><span class="pi">:</span> 
+  <span class="s">handler</span><span class="pi">:</span> 
+    <span class="s">chain</span><span class="pi">:</span> 
+      <span class="s">Consumer</span><span class="pi">:</span> 
+        <span class="s">default</span><span class="pi">:</span> <span class="s">tracing-consumer</span>
+      <span class="s">Provider</span><span class="pi">:</span> 
+        <span class="s">default</span><span class="pi">:</span> <span class="s">tracing-provider</span>
+<span class="s">servicecomb</span><span class="pi">:</span> 
+  <span class="s">tracing</span><span class="pi">:</span> 
+    <span class="s">collector</span><span class="pi">:</span> 
+      <span class="s">address</span><span class="pi">:</span> <span class="s">http://zipkin.servicecomb.io:9411</span>
+</code></pre>
+</div>
+
+<p>就这样,在加了两个配置项,没改动一行代码的情况下,我们启动了基于 Zipkin 和 Java chassis 的分布式调用链追踪的功能。</p>
+
+<p class="notice--warning"><strong>注意:</strong> 如果项目中的其他依赖也引入了 zipkin (例如 Spring Cloud),可能导致 zipkin 版本不一致而运行出错,这时需要在项目 pom 中声明 zipkin 版本。</p>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/distributed-tracing.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/distributed-tracing.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/users/edging-service/nginx/index.html
----------------------------------------------------------------------
diff --git a/content/users/edging-service/nginx/index.html b/content/users/edging-service/nginx/index.html
new file mode 100644
index 0000000..89879f1
--- /dev/null
+++ b/content/users/edging-service/nginx/index.html
@@ -0,0 +1,809 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>使用confd和Nginx做边缘服务 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="使用confd和Nginx做边缘服务">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="使用confd和Nginx做边缘服务">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/users/edging-service/nginx/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/users/edging-service/nginx/">
+
+
+
+  <meta property="og:description" content="使用confd和Nginx做边缘服务">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="使用confd和Nginx做边缘服务">
+  <meta name="twitter:description" content="使用confd和Nginx做边缘服务">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/users/edging-service/nginx/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">User Guide</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/" class="">Java Chassis Architecture</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/setup-environment/" class="">Setup Environment</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Provider</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-definition/" class="">Service Definition</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-contract/" class="">Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-springmvc/" class="">Develop Microservice with SpringMVC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-jax-rs/" class="">Develop Microservice with JAX-RS</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-transparent-rpc/" class="">Develop Microservice with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-interface-constraints/" class="">Service Interface Constraints</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-configurations/" class="">Service Configurations</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/communicate-protocol/" class="">Communicate Protocol</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/application-boot-process/" class="">Application Boot Up Process</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-heartbeat/" class="">Service Heartbeat</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Consumer</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rest-template/" class="">Develop with Rest Template</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rpc/" class="">Develop with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-service-contract/" class="">Use Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/invoke-control/" class="">Invoke Control</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">General Development</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/local-develop-test/" class="">Develop and Test in Local Environment</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-servicecomb-in-spring-boot/" class="">Use ServiceComb in Spring Boot</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/distributed-tracing/" class="">Distributed Tracing</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/customized-tracing/" class="">Customized Tracing</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Edging Service</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/nginx/" class="active">confd and Nginx</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/zuul/" class="">Zuul</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">Metrics</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Deployment</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/run-mode/" class="">Run Mode</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Security</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-tls/" class="">Use TLS</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="使用confd和Nginx做边缘服务">
+    <meta itemprop="description" content="使用confd和Nginx做边缘服务">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">使用confd和Nginx做边缘服务
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> On This Page</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#概念阐述" id="markdown-toc-概念阐述">概念阐述</a>    <ul>
+      <li><a href="#confd" id="markdown-toc-confd"><strong>confd</strong></a></li>
+      <li><a href="#nginx" id="markdown-toc-nginx"><strong>Nginx</strong></a></li>
+    </ul>
+  </li>
+  <li><a href="#场景描述" id="markdown-toc-场景描述">场景描述</a></li>
+  <li><a href="#对接服务中心" id="markdown-toc-对接服务中心">对接服务中心</a>    <ul>
+      <li><a href="#方法一http调用" id="markdown-toc-方法一http调用"><strong>方法一:http调用</strong></a></li>
+      <li><a href="#方法二使用servicecomb开源代码接口" id="markdown-toc-方法二使用servicecomb开源代码接口"><strong>方法二:使用servicecomb开源代码接口</strong></a></li>
+    </ul>
+  </li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="概念阐述">概念阐述</h2>
+
+<h3 id="confd"><strong>confd</strong></h3>
+
+<p>confd是一个轻量级的配置管理工具,源码地址:<a href="https://github.com/kelseyhightower/confd">https://github.com/kelseyhightower/confd</a>,它可以将配置信息存储在etcd、consul、dynamodb、redis以及zookeeper等。confd定期会从这些存储节点pull最新的配置,然后重新加载服务,完成配置文件的更新。</p>
+
+<h3 id="nginx"><strong>Nginx</strong></h3>
+
+<p>Nginx (engine x)是一个高性能的HTTP和反向代理服务器,具有负载均衡的功能。详情请参考<a href="http://www.nginx.cn/doc/">http://www.nginx.cn/doc/</a>。本小节介绍的服务主要使用到的是Nginx的http代理功能。</p>
+
+<h2 id="场景描述">场景描述</h2>
+
+<p>本小节介绍的技术是使用nginx+confd做边缘服务,同时可以对接ServiceComb微服务框架中的服务中心,从服务中心中拉去服务信息通过confd动态更新nginx的配置。</p>
+
+<p>使用nginx+confd动态反向代理的实现步骤可参考文章<a href="http://www.cnblogs.com/Anker/p/6112022.html">http://www.cnblogs.com/Anker/p/6112022.html</a>,本节主要介绍confd如何对接ServiceComb框架的服务中心。</p>
+
+<h2 id="对接服务中心">对接服务中心</h2>
+
+<p>本节介绍的技术核心在于如何使得confd获取到服务中心的服务信息,服务中心开放了以下接口供外部调用:</p>
+
+<h3 id="方法一http调用"><strong>方法一:http调用</strong></h3>
+
+<p>服务中心开放http接口均需要添加租户头部信息:“X-Tenant-Name:tenantName”,tenameName为租户名,默认为default,例如”X-Tenant-Name:default”。</p>
+
+<ul>
+  <li>
+    <p>检查服务中心健康状态</p>
+
+    <div class="language-http highlighter-rouge"><pre class="highlight"><code><span class="err"> GET 127.0.0.1:9980/health
+</span></code></pre>
+    </div>
+  </li>
+  <li>
+    <p>获取所有微服务信息</p>
+
+    <div class="language-http highlighter-rouge"><pre class="highlight"><code><span class="err"> GET 127.0.0.1:9980/registry/v3/microservices
+</span></code></pre>
+    </div>
+  </li>
+  <li>
+    <p>获取指定id的微服务信息</p>
+  </li>
+</ul>
+
+<blockquote>
+  <ol>
+    <li>
+      <p>首先根据微服务信息获取serviceId</p>
+
+      <div class="language-http highlighter-rouge"><pre class="highlight"><code><span class="err">GET 127.0.0.1:9980/registry/v3/existence?type=microservice&amp;appId={appId}&amp;serviceName={serviceName}&amp;version={version}
+</span></code></pre>
+      </div>
+    </li>
+    <li>
+      <p>根据上述接口返回的serviceId获取微服务完整信息</p>
+
+      <div class="language-http highlighter-rouge"><pre class="highlight"><code><span class="err">GET 127.0.0.1:9980/registry/v3/microservices/{serviceId}
+</span></code></pre>
+      </div>
+    </li>
+  </ol>
+</blockquote>
+
+<ul>
+  <li>
+    <p>获取指定微服务的所有实例信息</p>
+
+    <div class="language-http highlighter-rouge"><pre class="highlight"><code><span class="err"> GET 127.0.0.1:9980/registry/v3/microservices/{serviceId}/instances
+</span></code></pre>
+    </div>
+    <p>需要在header中添加:”X-ConsumerId:{serviceId}”。</p>
+  </li>
+  <li>
+    <p>查找微服务实例信息</p>
+
+    <div class="language-http highlighter-rouge"><pre class="highlight"><code><span class="err"> GET 127.0.0.1:9980/registry/v3/instances?appId={appId}&amp;serviceName={serviceName}&amp;version={version}
+</span></code></pre>
+    </div>
+    <p>需要在header中添加”X-ConsumerId:{serviceId}”。</p>
+  </li>
+</ul>
+
+<p>注意:在实际开发中请访问实际的service-center访问地址,并将上述url中{}的变量替换成具体值,http返回的数据均为json格式</p>
+
+<h3 id="方法二使用servicecomb开源代码接口"><strong>方法二:使用servicecomb开源代码接口</strong></h3>
+
+<p>在开发微服务应用,只需要调用servicecomb框架代码中的工具类RegistryUtil.java中提供的接口,即可获取服务中心的信息,接口描述如下:</p>
+
+<ul>
+  <li>获取所有微服务信息
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="n">List</span><span class="o">&lt;</span><span class="n">Microservice</span><span class="o">&gt;</span> <span class="nf">getAllMicroservices</span><span class="o">();</span>
+</code></pre>
+    </div>
+  </li>
+  <li>获取微服务唯一标识
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="n">String</span> <span class="nf">getMicroserviceId</span><span class="o">(</span><span class="n">String</span> <span class="n">appId</span><span class="o">,</span> <span class="n">String</span> <span class="n">microserviceName</span><span class="o">,</span> <span class="n">String</span> <span class="n">versionRule</span><span class="o">);</span>
+</code></pre>
+    </div>
+  </li>
+  <li>根据微服务唯一标识查询微服务静态信息
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="n">Microservice</span> <span class="nf">getMicroservice</span><span class="o">(</span><span class="n">String</span> <span class="n">microserviceId</span><span class="o">);</span>
+</code></pre>
+    </div>
+  </li>
+  <li>根据多个微服务唯一标识查询所有微服务实例信息
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="n">List</span><span class="o">&lt;</span><span class="n">MicroserviceInstance</span><span class="o">&gt;</span> <span class="nf">getMicroserviceInstance</span><span class="o">(</span><span class="n">String</span> <span class="n">consumerId</span><span class="o">,</span> <span class="n">String</span> <span class="n">providerId</span><span class="o">);</span>
+</code></pre>
+    </div>
+  </li>
+  <li>按照app+interface+version查询实例endpoints信息
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="n">List</span><span class="o">&lt;</span><span class="n">MicroserviceInstance</span><span class="o">&gt;</span> <span class="nf">findServiceInstance</span><span class="o">(</span><span class="n">String</span> <span class="n">consumerId</span><span class="o">,</span> <span class="n">String</span> <span class="n">appId</span><span class="o">,</span> <span class="n">String</span> <span class="n">serviceName</span><span class="o">,</span><span class="n">String</span> <span class="n">versionRule</span><span class="o">);</span>
+</code></pre>
+    </div>
+  </li>
+</ul>
+
+<p>通过上述http接口可获取到服务中心的微服务和其实例的信息,从而通过confd动态更新nginx配置。</p>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/nginx.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/nginx.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>


[28/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/users/develop-with-springmvc/index.html
----------------------------------------------------------------------
diff --git a/content/cn/users/develop-with-springmvc/index.html b/content/cn/users/develop-with-springmvc/index.html
new file mode 100644
index 0000000..cf89223
--- /dev/null
+++ b/content/cn/users/develop-with-springmvc/index.html
@@ -0,0 +1,832 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>用SpringMVC开发微服务 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="用SpringMVC开发微服务">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="用SpringMVC开发微服务">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/develop-with-springmvc/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/develop-with-springmvc/">
+
+
+
+  <meta property="og:description" content="用SpringMVC开发微服务">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="用SpringMVC开发微服务">
+  <meta name="twitter:description" content="用SpringMVC开发微服务">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/users/develop-with-springmvc/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">用户手册</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/" class="">Java Chassis系统架构</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/setup-environment/" class="">环境配置</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务提供者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-definition/" class="">服务定义</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-contract/" class="">服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-springmvc/" class="active">用SpringMVC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-jax-rs/" class="">用JAX-RS开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-transparent-rpc/" class="">用透明RPC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-interface-constraints/" class="">服务接口约束</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-configurations/" class="">服务配置</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/communicate-protocol/" class="">通信协议</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/application-boot-process/" class="">程序启动逻辑</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-heartbeat/" class="">服务心跳</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务消费者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rest-template/" class="">使用Rest Template方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rpc/" class="">使用RPC方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-service-contract/" class="">使用服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/invoke-control/" class="">调用控制</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">通用开发</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/local-develop-test/" class="">本地开发与测试</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-servicecomb-in-spring-boot/" class="">在Spring Boot中使用ServiceComb</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/distributed-tracing/" class="">分布式调用链追踪</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/customized-tracing/" class="">自定义调用链打点</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">服务能力开放</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/nginx/" class="">使用confd和Nginx做边缘服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/zuul/" class="">使用Zuul做边缘服务</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">监控</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">部署</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/run-mode/" class="">运行模式</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">微服务安全</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-tls/" class="">使用TLS通信</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="用SpringMVC开发微服务">
+    <meta itemprop="description" content="用SpringMVC开发微服务">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">用SpringMVC开发微服务
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> 在本页上</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#概念阐述" id="markdown-toc-概念阐述">概念阐述</a></li>
+  <li><a href="#开发示例" id="markdown-toc-开发示例">开发示例</a></li>
+  <li><a href="#涉及api" id="markdown-toc-涉及api">涉及API</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="概念阐述">概念阐述</h2>
+
+<p>ServiceComb支持SpringMVC注解,允许使用SpringMVC风格开发微服务。</p>
+
+<h2 id="开发示例">开发示例</h2>
+
+<ul>
+  <li>
+    <p><strong>步骤 1</strong> 定义服务接口。</p>
+
+    <p>根据开发之前定义好的契约,编写Java业务接口,代码如下:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="kd">public</span> <span class="kd">interface</span> <span class="nc">Hello</span> <span class="o">{</span>
+   <span class="n">String</span> <span class="nf">sayHi</span><span class="o">(</span><span class="n">String</span> <span class="n">name</span><span class="o">);</span>
+   <span class="n">String</span> <span class="nf">sayHello</span><span class="o">(</span><span class="n">Person</span> <span class="n">person</span><span class="o">);</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+
+    <p>该接口的位置需要与契约中x-java-interface所指定的路径一致。</p>
+  </li>
+  <li>
+    <p><strong>步骤 2</strong> 实现服务。</p>
+
+    <p>使用Spring MVC注解开发业务代码,Hello的服务实现如下:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="kn">import</span> <span class="nn">javax.ws.rs.core.MediaType</span><span class="o">;</span>
+ <span class="kn">import</span> <span class="nn">org.springframework.web.bind.annotation.RequestBody</span><span class="o">;</span>
+ <span class="kn">import</span> <span class="nn">org.springframework.web.bind.annotation.RequestMapping</span><span class="o">;</span>
+ <span class="kn">import</span> <span class="nn">org.springframework.web.bind.annotation.RequestMethod</span><span class="o">;</span>
+ <span class="kn">import</span> <span class="nn">org.springframework.web.bind.annotation.RequestParam</span><span class="o">;</span>
+ <span class="kn">import</span> <span class="nn">io.servicecomb.samples.common.schema.Hello</span><span class="o">;</span>
+ <span class="kn">import</span> <span class="nn">io.servicecomb.samples.common.schema.models.Person</span><span class="o">;</span>
+   
+ <span class="nd">@RequestMapping</span><span class="o">(</span><span class="n">path</span> <span class="o">=</span> <span class="s">"/springmvchello"</span><span class="o">,</span> <span class="n">produces</span> <span class="o">=</span> <span class="n">MediaType</span><span class="o">.</span><span class="na">APPLICATION_JSON</span><span class="o">)</span>
+ <span class="kd">public</span> <span class="kd">class</span> <span class="nc">SpringmvcHelloImpl</span> <span class="kd">implements</span> <span class="n">Hello</span> <span class="o">{</span>
+   <span class="nd">@Override</span>
+   <span class="nd">@RequestMapping</span><span class="o">(</span><span class="n">path</span> <span class="o">=</span> <span class="s">"/sayhi"</span><span class="o">,</span> <span class="n">method</span> <span class="o">=</span> <span class="n">RequestMethod</span><span class="o">.</span><span class="na">POST</span><span class="o">)</span>
+   <span class="kd">public</span> <span class="n">String</span> <span class="nf">sayHi</span><span class="o">(</span><span class="nd">@RequestParam</span><span class="o">(</span><span class="n">name</span> <span class="o">=</span> <span class="s">"name"</span><span class="o">)</span> <span class="n">String</span> <span class="n">name</span><span class="o">)</span> <span class="o">{</span>
+ <span class="err"> </span>  <span class="k">return</span> <span class="s">"Hello "</span> <span class="o">+</span> <span class="n">name</span><span class="o">;</span>
+   <span class="o">}</span>
+
+   <span class="nd">@Override</span>
+   <span class="nd">@RequestMapping</span><span class="o">(</span><span class="n">path</span> <span class="o">=</span> <span class="s">"/sayhello"</span><span class="o">,</span> <span class="n">method</span> <span class="o">=</span> <span class="n">RequestMethod</span><span class="o">.</span><span class="na">POST</span><span class="o">)</span>
+   <span class="kd">public</span> <span class="n">String</span> <span class="nf">sayHello</span><span class="o">(</span><span class="nd">@RequestBody</span> <span class="n">Person</span> <span class="n">person</span><span class="o">)</span> <span class="o">{</span>
+ <span class="err"> </span>  <span class="k">return</span> <span class="s">"Hello person "</span> <span class="o">+</span> <span class="n">person</span><span class="o">.</span><span class="na">getName</span><span class="o">();</span>
+ <span class="err"> </span><span class="o">}</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>步骤 3</strong> 发布服务</p>
+
+    <p>在服务的实现类上打上注解@RestSchema,指定schemaId,表示该实现作为当前微服务的一个schema发布,代码如下:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="kn">import</span> <span class="nn">io.servicecomb.provider.rest.common.RestSchema</span><span class="o">;</span>
+ <span class="c1">// other code omitted</span>
+ <span class="nd">@RestSchema</span><span class="o">(</span><span class="n">schemaId</span> <span class="o">=</span> <span class="s">"springmvcHello"</span><span class="o">)</span>
+ <span class="kd">public</span> <span class="kd">class</span> <span class="nc">SpringmvcHelloImpl</span> <span class="kd">implements</span> <span class="n">Hello</span> <span class="o">{</span>
+   <span class="c1">// other code omitted</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+
+    <p>然后在<code class="highlighter-rouge">resources/META-INF/spring</code>目录下创建<code class="highlighter-rouge">springmvcHello.bean.xml</code>文件,命名规则为<code class="highlighter-rouge">\*.bean.xml</code>,配置spring进行服务扫描的base-package,文件内容如下:</p>
+
+    <div class="language-xml highlighter-rouge"><pre class="highlight"><code> <span class="cp">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span>
+   
+ <span class="nt">&lt;beans</span> <span class="na">xmlns=</span><span class="s">"http://www.springframework.org/schema/beans"</span>
+        <span class="na">xmlns:xsi=</span><span class="s">"http://www.w3.org/2001/XMLSchema-instance"</span>
+        <span class="na">xmlns:context=</span><span class="s">"http://www.springframework.org/schema/context"</span>
+        <span class="na">xsi:schemaLocation=</span><span class="s">"http://www.springframework.org/schema/beans</span> <span class="err">classpath:org/springframework/beans/factory/xml/spring-beans-3.0.xsd</span>
+        <span class="err">http://www.springframework.org/schema/context</span> <span class="err">http://www.springframework.org/schema/context/spring-context-3.0.xsd"</span><span class="nt">&gt;</span>
+   
+     <span class="nt">&lt;context:component-scan</span> <span class="na">base-package=</span><span class="s">"io.servicecomb.samples.springmvc.povider"</span><span class="nt">/&gt;</span>
+ <span class="nt">&lt;/beans&gt;</span>
+</code></pre>
+    </div>
+  </li>
+</ul>
+
+<h2 id="涉及api">涉及API</h2>
+
+<p>Spring MVC开发模式当前支持org.springframework.web.bind.annotation包下的如下注解,所有注解的使用方法参考<a href="https://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html">Spring MVC官方文档</a>。</p>
+
+<table>
+  <thead>
+    <tr>
+      <th style="text-align: left">注解</th>
+      <th style="text-align: left">位置</th>
+      <th style="text-align: left">描述</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td style="text-align: left">RequestMapping</td>
+      <td style="text-align: left">schema/operation</td>
+      <td style="text-align: left">支持标注path/method/produces三种数据,operation默认继承schema上的produces</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">GetMapping</td>
+      <td style="text-align: left">schema/operation</td>
+      <td style="text-align: left">支持标注path/produces两种数据,operation默认继承schema上的produces</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">PutMapping</td>
+      <td style="text-align: left">schema/operation</td>
+      <td style="text-align: left">支持标注path/produces两种数据,operation默认继承schema上的produces</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">PostMapping</td>
+      <td style="text-align: left">schema/operation</td>
+      <td style="text-align: left">支持标注path/produces两种数据,operation默认继承schema上的produces</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">DeleteMapping</td>
+      <td style="text-align: left">schema/operation</td>
+      <td style="text-align: left">支持标注path/produces两种数据,operation默认继承schema上的produces</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">PatchMapping</td>
+      <td style="text-align: left">schema/operation</td>
+      <td style="text-align: left">支持标注path/produces两种数据,operation默认继承schema上的produces</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">PathVariable</td>
+      <td style="text-align: left">parameter</td>
+      <td style="text-align: left">从path中获取参数</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">RequestParam</td>
+      <td style="text-align: left">parameter</td>
+      <td style="text-align: left">从query中获取参数</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">RequestHeader</td>
+      <td style="text-align: left">parameter</td>
+      <td style="text-align: left">从header中获取参数</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">RequestBody</td>
+      <td style="text-align: left">parameter</td>
+      <td style="text-align: left">从body中获取参数,每个operation只能有一个body参数</td>
+    </tr>
+  </tbody>
+</table>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/cn/develop-with-springmvc.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/cn/develop-with-springmvc.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/users/develop-with-transparent-rpc/index.html
----------------------------------------------------------------------
diff --git a/content/cn/users/develop-with-transparent-rpc/index.html b/content/cn/users/develop-with-transparent-rpc/index.html
new file mode 100644
index 0000000..1fed53f
--- /dev/null
+++ b/content/cn/users/develop-with-transparent-rpc/index.html
@@ -0,0 +1,794 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>用透明RPC开发微服务 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="用透明RPC开发微服务">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="用透明RPC开发微服务">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/develop-with-transparent-rpc/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/develop-with-transparent-rpc/">
+
+
+
+  <meta property="og:description" content="用透明RPC开发微服务">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="用透明RPC开发微服务">
+  <meta name="twitter:description" content="用透明RPC开发微服务">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/users/develop-with-transparent-rpc/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">用户手册</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/" class="">Java Chassis系统架构</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/setup-environment/" class="">环境配置</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务提供者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-definition/" class="">服务定义</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-contract/" class="">服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-springmvc/" class="">用SpringMVC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-jax-rs/" class="">用JAX-RS开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-transparent-rpc/" class="active">用透明RPC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-interface-constraints/" class="">服务接口约束</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-configurations/" class="">服务配置</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/communicate-protocol/" class="">通信协议</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/application-boot-process/" class="">程序启动逻辑</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-heartbeat/" class="">服务心跳</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务消费者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rest-template/" class="">使用Rest Template方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rpc/" class="">使用RPC方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-service-contract/" class="">使用服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/invoke-control/" class="">调用控制</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">通用开发</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/local-develop-test/" class="">本地开发与测试</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-servicecomb-in-spring-boot/" class="">在Spring Boot中使用ServiceComb</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/distributed-tracing/" class="">分布式调用链追踪</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/customized-tracing/" class="">自定义调用链打点</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">服务能力开放</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/nginx/" class="">使用confd和Nginx做边缘服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/zuul/" class="">使用Zuul做边缘服务</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">监控</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">部署</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/run-mode/" class="">运行模式</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">微服务安全</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-tls/" class="">使用TLS通信</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="用透明RPC开发微服务">
+    <meta itemprop="description" content="用透明RPC开发微服务">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">用透明RPC开发微服务
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> 在本页上</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#概念阐述" id="markdown-toc-概念阐述">概念阐述</a></li>
+  <li><a href="#开发示例" id="markdown-toc-开发示例">开发示例</a></li>
+  <li><a href="#通过注解配置的开发方式" id="markdown-toc-通过注解配置的开发方式">通过注解配置的开发方式</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="概念阐述">概念阐述</h2>
+
+<p>透明RPC开发模式是一种基于接口和接口实现的开发模式,服务的开发者不需要使用Spring MVC和JAX-RS注解。</p>
+
+<h2 id="开发示例">开发示例</h2>
+
+<p>透明RPC开发模式支持Spring xml配置和注解配置两种服务发布方式,通过Spring xml配置的方式如下:</p>
+
+<ul>
+  <li>
+    <p><strong>步骤 1</strong> 定义服务接口。</p>
+
+    <p>根据开发之前定义好的契约,编写Java业务接口,代码如下:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="kd">public</span> <span class="kd">interface</span> <span class="nc">Hello</span> <span class="o">{</span>
+   <span class="n">String</span> <span class="nf">sayHi</span><span class="o">(</span><span class="n">String</span> <span class="n">name</span><span class="o">);</span>
+   <span class="n">String</span> <span class="nf">sayHello</span><span class="o">(</span><span class="n">Person</span> <span class="n">person</span><span class="o">);</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+
+    <blockquote>
+      <p><strong>说明</strong>:
+该接口的位置需要与契约中x-java-interface所指定的路径一致。</p>
+    </blockquote>
+  </li>
+  <li>
+    <p><strong>步骤 2</strong> 实现服务</p>
+
+    <p>Hello的服务实现如下:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="kn">import</span> <span class="nn">io.servicecomb.samples.common.schema.Hello</span><span class="o">;</span>
+ <span class="kn">import</span> <span class="nn">io.servicecomb.samples.common.schema.models.Person</span><span class="o">;</span>
+
+ <span class="kd">public</span> <span class="kd">class</span> <span class="nc">HelloImpl</span> <span class="kd">implements</span> <span class="n">Hello</span> <span class="o">{</span>
+   <span class="nd">@Override</span>
+   <span class="kd">public</span> <span class="n">String</span> <span class="nf">sayHi</span><span class="o">(</span><span class="n">String</span> <span class="n">name</span><span class="o">)</span> <span class="o">{</span>
+     <span class="k">return</span> <span class="s">"Hello "</span> <span class="o">+</span> <span class="n">name</span><span class="o">;</span>
+   <span class="o">}</span>
+
+   <span class="nd">@Override</span>
+   <span class="kd">public</span> <span class="n">String</span> <span class="nf">sayHello</span><span class="o">(</span><span class="n">Person</span> <span class="n">person</span><span class="o">)</span> <span class="o">{</span>
+     <span class="k">return</span> <span class="s">"Hello person "</span> <span class="o">+</span> <span class="n">person</span><span class="o">.</span><span class="na">getName</span><span class="o">();</span>
+   <span class="o">}</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>步骤 3</strong> 发布服务</p>
+
+    <p>在resources/META-INF/spring目录下创建pojoHello.bean.xml文件,在文件中声明schema,文件内容如下:</p>
+
+    <div class="language-xml highlighter-rouge"><pre class="highlight"><code> <span class="cp">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span>
+ <span class="nt">&lt;beans</span> <span class="na">xmlns=</span><span class="s">" http://www.springframework.org/schema/beans "</span> <span class="na">xmlns:xsi=</span><span class="s">" http://www.w3.org/2001/XMLSchema-instance "</span>
+        <span class="na">xmlns:p=</span><span class="s">" http://www.springframework.org/schema/p "</span> <span class="na">xmlns:util=</span><span class="s">" http://www.springframework.org/schema/util "</span>
+        <span class="na">xmlns:cse=</span><span class="s">" http://www.huawei.com/schema/paas/cse/rpc "</span>
+        <span class="na">xmlns:context=</span><span class="s">" http://www.springframework.org/schema/context "</span>
+        <span class="na">xsi:schemaLocation=</span><span class="s">" http://www.springframework.org/schema/beans classpath:org/springframework/beans/factory/xml/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.huawei.com/schema/paas/cse/rpc classpath:META-INF/spring/spring-paas-cse-rpc.xsd"</span><span class="nt">&gt;</span>
+   
+     <span class="nt">&lt;cse:rpc-schema</span> <span class="na">schema-id=</span><span class="s">"pojoHello"</span> <span class="na">implementation=</span><span class="s">"io.servicecomb.samples.pojo.provider.PojoHelloImpl"</span><span class="nt">/&gt;</span>
+ <span class="nt">&lt;/beans&gt;</span>
+</code></pre>
+    </div>
+
+    <blockquote>
+      <p><strong>说明</strong>:
+每一个服务接口都需要定义一个schema声明。</p>
+    </blockquote>
+  </li>
+</ul>
+
+<h2 id="通过注解配置的开发方式">通过注解配置的开发方式</h2>
+
+<ol>
+  <li>定义服务接口,与使用Spring xml的方式相同。</li>
+  <li>实现服务,与使用Spring xml的方式相同。</li>
+  <li>
+    <p>发布服务。在接口Hello的实现类上使用@RpcSchema注解定义schema,代码如下:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">io.servicecomb.provider.pojo.RpcSchema</span><span class="o">;</span>
+<span class="c1">// other code omitted</span>
+<span class="nd">@RpcSchema</span><span class="o">(</span><span class="n">schemaId</span> <span class="o">=</span> <span class="s">"pojoHello"</span><span class="o">)</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">HelloImpl</span> <span class="kd">implements</span> <span class="n">Hello</span> <span class="o">{</span>
+  <span class="c1">// other code omitted</span>
+<span class="o">}</span>
+</code></pre>
+    </div>
+
+    <p>在resources/META-INF/spring目录下的pojoHello.bean.xml文件中,配置Spring进行服务扫描的base-package,文件内容如下:</p>
+
+    <div class="language-xml highlighter-rouge"><pre class="highlight"><code><span class="cp">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span>
+<span class="nt">&lt;beans</span> <span class="na">xmlns=</span><span class="s">" http://www.springframework.org/schema/beans "</span> <span class="na">xmlns:xsi=</span><span class="s">" http://www.w3.org/2001/XMLSchema-instance "</span>
+       <span class="na">xmlns:p=</span><span class="s">" http://www.springframework.org/schema/p "</span> <span class="na">xmlns:util=</span><span class="s">" http://www.springframework.org/schema/util "</span>
+       <span class="na">xmlns:cse=</span><span class="s">" http://www.huawei.com/schema/paas/cse/rpc "</span>
+       <span class="na">xmlns:context=</span><span class="s">" http://www.springframework.org/schema/context "</span>
+       <span class="na">xsi:schemaLocation=</span><span class="s">" http://www.springframework.org/schema/beans classpath:org/springframework/beans/factory/xml/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.huawei.com/schema/paas/cse/rpc classpath:META-INF/spring/spring-paas-cse-rpc.xsd"</span><span class="nt">&gt;</span>
+   
+    <span class="nt">&lt;context:component-scan</span> <span class="na">base-package=</span><span class="s">"io.servicecomb.samples.pojo.provider"</span><span class="nt">/&gt;</span>
+<span class="nt">&lt;/beans&gt;</span>
+</code></pre>
+    </div>
+  </li>
+</ol>
+
+<blockquote>
+  <p><strong>说明</strong>:
+与Spring MVC开发模式和JAX-RS开发模式不同的是,透明RPC开发模式使用的注解是<code class="highlighter-rouge">@RpcSchema</code>而非<code class="highlighter-rouge">@RestSchema</code>。</p>
+</blockquote>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/cn/develop-with-transparent-rpc.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/cn/develop-with-transparent-rpc.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/users/distributed-tracing/index.html
----------------------------------------------------------------------
diff --git a/content/cn/users/distributed-tracing/index.html b/content/cn/users/distributed-tracing/index.html
new file mode 100644
index 0000000..005aaa1
--- /dev/null
+++ b/content/cn/users/distributed-tracing/index.html
@@ -0,0 +1,750 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>分布式调用链追踪 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="分布式调用链追踪">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="分布式调用链追踪">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/distributed-tracing/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/distributed-tracing/">
+
+
+
+  <meta property="og:description" content="分布式调用链追踪">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="分布式调用链追踪">
+  <meta name="twitter:description" content="分布式调用链追踪">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/users/distributed-tracing/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">用户手册</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/" class="">Java Chassis系统架构</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/setup-environment/" class="">环境配置</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务提供者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-definition/" class="">服务定义</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-contract/" class="">服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-springmvc/" class="">用SpringMVC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-jax-rs/" class="">用JAX-RS开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-transparent-rpc/" class="">用透明RPC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-interface-constraints/" class="">服务接口约束</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-configurations/" class="">服务配置</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/communicate-protocol/" class="">通信协议</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/application-boot-process/" class="">程序启动逻辑</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-heartbeat/" class="">服务心跳</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务消费者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rest-template/" class="">使用Rest Template方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rpc/" class="">使用RPC方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-service-contract/" class="">使用服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/invoke-control/" class="">调用控制</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">通用开发</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/local-develop-test/" class="">本地开发与测试</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-servicecomb-in-spring-boot/" class="">在Spring Boot中使用ServiceComb</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/distributed-tracing/" class="active">分布式调用链追踪</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/customized-tracing/" class="">自定义调用链打点</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">服务能力开放</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/nginx/" class="">使用confd和Nginx做边缘服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/zuul/" class="">使用Zuul做边缘服务</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">监控</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">部署</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/run-mode/" class="">运行模式</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">微服务安全</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-tls/" class="">使用TLS通信</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="分布式调用链追踪">
+    <meta itemprop="description" content="分布式调用链追踪">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">分布式调用链追踪
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> 在本页上</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#概念阐述" id="markdown-toc-概念阐述">概念阐述</a></li>
+  <li><a href="#zipkin" id="markdown-toc-zipkin">Zipkin</a></li>
+  <li><a href="#使用步骤" id="markdown-toc-使用步骤">使用步骤:</a>    <ul>
+      <li><a href="#添加依赖" id="markdown-toc-添加依赖">添加依赖</a></li>
+      <li><a href="#配置追踪处理和数据收集" id="markdown-toc-配置追踪处理和数据收集">配置追踪处理和数据收集</a></li>
+    </ul>
+  </li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="概念阐述">概念阐述</h2>
+
+<p>微服务架构解决了很多单体应用带来的问题,但同时也需要我们付出额外的代价。由于网络的不稳定性带来的请求处理延迟就是代价之一。</p>
+
+<p>在单体应用中,所有模块都在同一个进程中运行,所以并没有模块间互通的问题。但微服务架构中,服务间通过网络沟通,因此我们不得不处理和网络有关的 问题,例如:延迟、超时、网络分区等。</p>
+
+<p>另外,随着业务的扩展服务增多,我们很难洞察数据如何在蛛网般复杂的服务结构中流转。我们如何才能有效的监控网络延迟并且可视化服务中的数据流转呢?</p>
+
+<p><strong>分布式调用链追踪</strong>用于有效地监控微服务的网络延时并可视化微服务中的数据流转。</p>
+
+<h2 id="zipkin">Zipkin</h2>
+
+<blockquote>
+  <p><a href="http://zipkin.io/">Zipkin</a>是一个分布式调用链追踪系统。 它能帮助用户收集时序数据用以定位微服务中的延迟问题,它同时管理追踪数据的收集 和查询。Zipkin 的设计基于 Google <a href="http://research.google.com/pubs/pub36356.html">Dapper paper</a>。</p>
+</blockquote>
+
+<p>ServiceComb 集成了 Zipkin 提供自动调用链追踪能力,如此一来用户只需要专注实现其业务需求。</p>
+
+<h2 id="使用步骤">使用步骤:</h2>
+
+<h3 id="添加依赖">添加依赖</h3>
+
+<p>基于 ServiceComb Java Chassis 的微服务只需要添加如下依赖到 pom.xml:</p>
+
+<div class="language-xml highlighter-rouge"><pre class="highlight"><code><span class="nt">&lt;dependency&gt;</span>   
+    <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+    <span class="nt">&lt;artifactId&gt;</span>handler-tracing-zipkin<span class="nt">&lt;/artifactId&gt;</span>
+<span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+</div>
+
+<p>如果微服务是基于 Spring Cloud + Zuul 的 API 网关,例如 workshop demo 中的 manager service ,我们还需要加入如下的额外依赖:</p>
+
+<div class="language-xml highlighter-rouge"><pre class="highlight"><code><span class="nt">&lt;dependency&gt;</span>    
+    <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+    <span class="nt">&lt;artifactId&gt;</span>spring-cloud-zuul-zipkin<span class="nt">&lt;/artifactId&gt;</span>
+<span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+</div>
+
+<h3 id="配置追踪处理和数据收集">配置追踪处理和数据收集</h3>
+
+<p>在microservice.yaml文件中设置追踪处理器和数据收集服务地址</p>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">cse</span><span class="pi">:</span> 
+  <span class="s">handler</span><span class="pi">:</span> 
+    <span class="s">chain</span><span class="pi">:</span> 
+      <span class="s">Consumer</span><span class="pi">:</span> 
+        <span class="s">default</span><span class="pi">:</span> <span class="s">tracing-consumer</span>
+      <span class="s">Provider</span><span class="pi">:</span> 
+        <span class="s">default</span><span class="pi">:</span> <span class="s">tracing-provider</span>
+<span class="s">servicecomb</span><span class="pi">:</span> 
+  <span class="s">tracing</span><span class="pi">:</span> 
+    <span class="s">collector</span><span class="pi">:</span> 
+      <span class="s">address</span><span class="pi">:</span> <span class="s">http://zipkin.servicecomb.io:9411</span>
+</code></pre>
+</div>
+
+<p>就这样,在加了两个配置项,没改动一行代码的情况下,我们启动了基于 Zipkin 和 Java chassis 的分布式调用链追踪的功能。</p>
+
+<p class="notice--warning"><strong>注意:</strong> 如果项目中的其他依赖也引入了 zipkin (例如 Spring Cloud),可能导致 zipkin 版本不一致而运行出错,这时需要在项目 pom 中声明 zipkin 版本。</p>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/cn/distributed-tracing.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/cn/distributed-tracing.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>


[15/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/docs/quick-start-bmi/index.html
----------------------------------------------------------------------
diff --git a/content/docs/quick-start-bmi/index.html b/content/docs/quick-start-bmi/index.html
new file mode 100644
index 0000000..ecee7ab
--- /dev/null
+++ b/content/docs/quick-start-bmi/index.html
@@ -0,0 +1,679 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>Develop microservice application in minutes - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="Introduce how to develop a microservice application using ServiceComb in minutes through the BMI sample">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="Develop microservice application in minutes">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/quick-start-bmi/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/quick-start-bmi/">
+
+
+
+  <meta property="og:description" content="Introduce how to develop a microservice application using ServiceComb in minutes through the BMI sample">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="Develop microservice application in minutes">
+  <meta name="twitter:description" content="Introduce how to develop a microservice application using ServiceComb in minutes through the BMI sample">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/docs/quick-start-bmi/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          
+          
+
+          <a href="/docs/quick-start/"><span class="nav__sub-title nav__sub-title-with-url">Quick Start</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/docs/quick-start-bmi/"><span class="nav__sub-title nav__sub-title-with-url">Develop microservice application in minutes</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/docs/quick-start-advance/"><span class="nav__sub-title nav__sub-title-with-url">Advance microservice development</span></a>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/docs/quick-start-advance/load-balance/" class="">Load Balance</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/docs/quick-start-advance/flow-control/" class="">Flow Control</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/docs/quick-start-advance/service-management/" class="">Service Management</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/docs/quick-start-advance/distributed-tracing/" class="">Distributed Tracing</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/docs/quick-start-dataconsistency/"><span class="nav__sub-title nav__sub-title-with-url">Data Consistency Solution</span></a>
+        
+
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="Develop microservice application in minutes">
+    <meta itemprop="description" content="Introduce how to develop a microservice application using ServiceComb in minutes through the BMI sample">
+    
+    <meta itemprop="dateModified" content="September 06, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">Develop microservice application in minutes
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> On This Page</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#before-you-begin" id="markdown-toc-before-you-begin">Before you begin</a></li>
+  <li><a href="#develop-bmi-microservice-application-in-minutes" id="markdown-toc-develop-bmi-microservice-application-in-minutes">Develop BMI microservice application in minutes</a>    <ul>
+      <li><a href="#implementation-of-calculator" id="markdown-toc-implementation-of-calculator">Implementation of calculator</a></li>
+      <li><a href="#implementation-of-webapp-service" id="markdown-toc-implementation-of-webapp-service">Implementation of webapp service</a></li>
+    </ul>
+  </li>
+  <li><a href="#whats-next" id="markdown-toc-whats-next">What’s next</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="before-you-begin">Before you begin</h2>
+<p>Walk through the instructions in the <a href="/docs/quick-start/">Quick Start</a>.</p>
+
+<h2 id="develop-bmi-microservice-application-in-minutes">Develop BMI microservice application in minutes</h2>
+<p>The workflow of BMI application have been introduced in <a href="/docs/quick-start/">Quick start</a>. It contains two separate microservices:</p>
+
+<ul>
+  <li>
+    <p><strong>BMI calculator service</strong>:provides computing services.</p>
+  </li>
+  <li>
+    <p><strong>Web service</strong>:provides both user interface and gateway service.</p>
+  </li>
+</ul>
+
+<p>Now we will introduce the detailed implementation of these two microservices. The full code is on <a href="https://github.com/ServiceComb/ServiceComb-Java-Chassis/tree/master/samples/bmi">github</a>.</p>
+<h3 id="implementation-of-calculator">Implementation of calculator</h3>
+<p>The calculator service provides capability of calculating BMI. It contains three parts:</p>
+
+<ul>
+  <li>
+    <p>Detailed calculation implementation</p>
+  </li>
+  <li>
+    <p>Service endpoint definition</p>
+  </li>
+  <li>
+    <p>Service startup entry</p>
+  </li>
+</ul>
+
+<h4 id="detailed-calculation-implementation">Detailed calculation implementation</h4>
+<p>Implement detailed calculation according to the formula \(BMI=\frac{weight}{height^2}\).</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">interface</span> <span class="nc">CalculatorService</span> <span class="o">{</span>
+  <span class="kt">double</span> <span class="nf">calculate</span><span class="o">(</span><span class="kt">double</span> <span class="n">height</span><span class="o">,</span> <span class="kt">double</span> <span class="n">weight</span><span class="o">);</span>
+<span class="o">}</span>
+
+<span class="nd">@Service</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">CalculatorServiceImpl</span> <span class="kd">implements</span> <span class="n">CalculatorService</span> <span class="o">{</span>
+  <span class="nd">@Override</span>
+  <span class="kd">public</span> <span class="kt">double</span> <span class="nf">calculate</span><span class="o">(</span><span class="kt">double</span> <span class="n">height</span><span class="o">,</span> <span class="kt">double</span> <span class="n">weight</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">if</span> <span class="o">(</span><span class="n">height</span> <span class="o">&lt;=</span> <span class="mi">0</span> <span class="o">||</span> <span class="n">weight</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="o">)</span> <span class="o">{</span>
+      <span class="k">throw</span> <span class="k">new</span> <span class="nf">IllegalArgumentException</span><span class="o">(</span><span class="s">"Arguments must be above 0"</span><span class="o">);</span>
+    <span class="o">}</span>
+    <span class="kt">double</span> <span class="n">heightInMeter</span> <span class="o">=</span> <span class="n">height</span> <span class="o">/</span> <span class="mi">100</span><span class="o">;</span>
+    <span class="k">return</span> <span class="n">weight</span> <span class="o">/</span> <span class="o">(</span><span class="n">heightInMeter</span> <span class="o">*</span> <span class="n">heightInMeter</span><span class="o">);</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<h4 id="service-endpoint-definition">Service endpoint definition</h4>
+<p>Service endpoint is defined to generate service contact. First of all, define the endpoint interface:</p>
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">interface</span> <span class="nc">CalculatorEndpoint</span> <span class="o">{</span>
+  <span class="kt">double</span> <span class="nf">calculate</span><span class="o">(</span><span class="kt">double</span> <span class="n">height</span><span class="o">,</span> <span class="kt">double</span> <span class="n">weight</span><span class="o">);</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+<p>Introduce ServiceComb dependency:</p>
+<div class="language-xml highlighter-rouge"><pre class="highlight"><code>    <span class="nt">&lt;dependency&gt;</span>
+      <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+      <span class="nt">&lt;artifactId&gt;</span>spring-boot-starter-provider<span class="nt">&lt;/artifactId&gt;</span>
+    <span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+</div>
+<p>Expose calculator service’s restful endpoint:</p>
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@RestSchema</span><span class="o">(</span><span class="n">schemaId</span> <span class="o">=</span> <span class="s">"calculatorRestEndpoint"</span><span class="o">)</span>
+<span class="nd">@RequestMapping</span><span class="o">(</span><span class="s">"/"</span><span class="o">)</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">CalculatorRestEndpoint</span> <span class="kd">implements</span> <span class="n">CalculatorEndpoint</span> <span class="o">{</span>
+
+  <span class="kd">private</span> <span class="kd">final</span> <span class="n">CalculatorService</span> <span class="n">calculatorService</span><span class="o">;</span>
+
+  <span class="nd">@Autowired</span>
+  <span class="kd">public</span> <span class="nf">CalculatorRestEndpoint</span><span class="o">(</span><span class="n">CalculatorService</span> <span class="n">calculatorService</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">this</span><span class="o">.</span><span class="na">calculatorService</span> <span class="o">=</span> <span class="n">calculatorService</span><span class="o">;</span>
+  <span class="o">}</span>
+
+  <span class="nd">@Override</span>
+  <span class="nd">@GetMapping</span><span class="o">(</span><span class="s">"/bmi"</span><span class="o">)</span>
+  <span class="kd">public</span> <span class="kt">double</span> <span class="nf">calculate</span><span class="o">(</span><span class="kt">double</span> <span class="n">height</span><span class="o">,</span> <span class="kt">double</span> <span class="n">weight</span><span class="o">)</span> <span class="o">{</span>
+    <span class="k">return</span> <span class="n">calculatorService</span><span class="o">.</span><span class="na">calculate</span><span class="o">(</span><span class="n">height</span><span class="o">,</span> <span class="n">weight</span><span class="o">);</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<p class="notice--info">ServiceComb supports SpringMvc simplified annotations, e.g. <code class="highlighter-rouge">GetMapping</code>, since version 0.3.0.</p>
+
+<p>Note that ServiceComb can auto-generate service contract when annotating endpoints with <code class="highlighter-rouge">@RestSchema</code>. Then configure the endpoint in  <code class="highlighter-rouge">microservice.yaml</code> as follows to register the contact and microservice to service center.</p>
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">APPLICATION_ID</span><span class="pi">:</span> <span class="s">bmi</span>
+<span class="s">service_description</span><span class="pi">:</span>
+  <span class="s">name</span><span class="pi">:</span> <span class="s">calculator</span>
+  <span class="s">version</span><span class="pi">:</span> <span class="s">0.0.1</span>
+<span class="s">cse</span><span class="pi">:</span>
+  <span class="s">service</span><span class="pi">:</span>
+    <span class="s">registry</span><span class="pi">:</span>
+      <span class="s">address</span><span class="pi">:</span> <span class="s">http://127.0.0.1:30100</span>
+  <span class="s">rest</span><span class="pi">:</span>
+    <span class="s">address</span><span class="pi">:</span> <span class="s">0.0.0.0:7777</span>
+</code></pre>
+</div>
+
+<h4 id="service-startup-entry">Service startup entry</h4>
+<p>Enable <em>ServiceComb</em> microservice framework by adding <code class="highlighter-rouge">@EnableServiceComb</code> annotation.</p>
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@SpringBootApplication</span>
+<span class="nd">@EnableServiceComb</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">CalculatorApplication</span> <span class="o">{</span>
+  <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
+    <span class="n">SpringApplication</span><span class="o">.</span><span class="na">run</span><span class="o">(</span><span class="n">CalculatorApplication</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">args</span><span class="o">);</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<h3 id="implementation-of-webapp-service">Implementation of webapp service</h3>
+<p>The web service provides both the user interface and gateway service. It contains three parts:</p>
+
+<ul>
+  <li>
+    <p>User interface</p>
+  </li>
+  <li>
+    <p>Gateway and routing rules</p>
+  </li>
+  <li>
+    <p>Service startup entry</p>
+  </li>
+</ul>
+
+<p>The user interface was developed using <a href="http://getbootstrap.com/">Bootstrap</a>.</p>
+
+<h4 id="gateway-and-routing-rules">Gateway and routing rules</h4>
+<p>The gateway service was implemented using the <a href="https://github.com/Netflix/zuul/wiki">Netflix Zuul</a>.</p>
+
+<p>Introduce ServiceComb dependency:</p>
+<div class="language-xml highlighter-rouge"><pre class="highlight"><code>    <span class="nt">&lt;dependency&gt;</span>
+      <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+      <span class="nt">&lt;artifactId&gt;</span>spring-boot-starter-discovery<span class="nt">&lt;/artifactId&gt;</span>
+    <span class="nt">&lt;/dependency&gt;</span>
+    <span class="nt">&lt;dependency&gt;</span>
+      <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+      <span class="nt">&lt;artifactId&gt;</span>spring-boot-starter-servicecomb<span class="nt">&lt;/artifactId&gt;</span>
+    <span class="nt">&lt;/dependency&gt;</span>
+    <span class="nt">&lt;dependency&gt;</span>
+      <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+      <span class="nt">&lt;artifactId&gt;</span>spring-cloud-zuul<span class="nt">&lt;/artifactId&gt;</span>
+    <span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+</div>
+
+<p class="notice--info">ServiceComb added <code class="highlighter-rouge">spring-cloud-zuul</code> module to provide better compatibility with zuul since version 0.4.0-SNAPSHOT.</p>
+
+<p>Configure routing rules and service endpoint in <code class="highlighter-rouge">application.yaml</code>.</p>
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">zuul</span><span class="pi">:</span>
+  <span class="s">routes</span><span class="pi">:</span>
+    <span class="s">calculator</span><span class="pi">:</span> <span class="s">/calculator/**</span>
+
+<span class="c1"># disable netflix eurkea since it's not used for service discovery</span>
+<span class="s">ribbon</span><span class="pi">:</span>
+  <span class="s">eureka</span><span class="pi">:</span>
+    <span class="s">enabled</span><span class="pi">:</span> <span class="s">false</span>
+
+<span class="s">server</span><span class="pi">:</span>
+  <span class="s">port</span><span class="pi">:</span> <span class="s">8889</span>
+</code></pre>
+</div>
+<p>Enable service discovery with zuul by putting the application information and service center address in <code class="highlighter-rouge">microservice.yaml</code>.</p>
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">APPLICATION_ID</span><span class="pi">:</span> <span class="s">bmi</span>
+<span class="s">service_description</span><span class="pi">:</span>
+  <span class="s">name</span><span class="pi">:</span> <span class="s">gateway</span>
+  <span class="s">version</span><span class="pi">:</span> <span class="s">0.0.1</span>
+<span class="s">cse</span><span class="pi">:</span>
+  <span class="s">service</span><span class="pi">:</span>
+    <span class="s">registry</span><span class="pi">:</span>
+      <span class="s">address</span><span class="pi">:</span> <span class="s">http://127.0.0.1:30100</span>
+</code></pre>
+</div>
+<h4 id="service-startup-entry-1">Service startup entry</h4>
+<p>Add annotations to enable <code class="highlighter-rouge">ServiceComb</code> and <code class="highlighter-rouge">Zuul</code>:</p>
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@SpringBootApplication</span>
+<span class="nd">@EnableZuulProxy</span>
+<span class="nd">@EnableServiceComb</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">GatewayApplication</span> <span class="o">{</span>
+  <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
+    <span class="n">SpringApplication</span><span class="o">.</span><span class="na">run</span><span class="o">(</span><span class="n">GatewayApplication</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">args</span><span class="o">);</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<p>Now you can refer to <a href="/docs/quick-start/#Run microservice application">quick start</a> to verify the services.</p>
+
+<h2 id="whats-next">What’s next</h2>
+
+<ul>
+  <li>Learn <a href="/docs/quick-start-advance/">advance microservice development</a></li>
+</ul>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _docs/quick-start-bmi.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_docs/quick-start-bmi.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>


[50/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/css/main.css
----------------------------------------------------------------------
diff --git a/content/assets/css/main.css b/content/assets/css/main.css
new file mode 100644
index 0000000..0a603eb
--- /dev/null
+++ b/content/assets/css/main.css
@@ -0,0 +1,8 @@
+/*!
+ * Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+ * Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+ * Licensed under MIT (https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt)
+*/@font-face{font-family:CustomSerifFont;font-weight:400;src:local("PingFangSC"),local("Microsoft Yahei"),local("WenQuanYi Micro Hei"),local("Noto Sans Mono CJK SC"),local(Helvetica),local(Arial)}@font-face{font-family:CustomSerifFont;font-weight:400;unicode-range:U+00-024F;src:local("Roboto"),local(Helvetica),local(Arial)}/*!
+ *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
+ *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */@font-face{font-family:'FontAwesome';src:url("../fonts/fontawesome-webfont.eot?v=4.7.0");src:url("../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0") format("embedded-opentype"),url("../fonts/fontawesome-webfont.woff2?v=4.7.0") format("woff2"),url("../fonts/fontawesome-webfont.woff?v=4.7.0") format("woff"),url("../fonts/fontawesome-webfont.ttf?v=4.7.0") format("truetype"),url("../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular") format("svg");font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;wi
 dth:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:solid 0.08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate
 (90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{pos
 ition:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-remove:before,.fa-close:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-gear:before,.fa-cog:before{content:""}.fa-trash-o:before{content:""}.fa-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before{content:""}.fa-arrow
 -circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-rotate-right:before,.fa-repeat:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:
 ""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circ
 le:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before{content:""}.fa-check-circle:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-warning:before,.fa-exclamation-triangle:before{content:""}.fa-plane:befo
 re{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-gears:before,.fa-cogs:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before
 {content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before{content:""}.fa-arrow-circle-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{con
 tent:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-save:before,.fa-floppy-o:before{content:""}.fa-square:before{content:""}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:"
 "}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-unsorted:before,.fa-sort:before{content:""}.fa-sort-down:before,.fa-sort-desc:before{content:""}.fa-sort-up:before,.fa-sort-asc:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-legal:before,.fa-gavel:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-flash:before,.fa-bolt:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-paste:before,.fa-clipboard:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-uploa
 d:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{conten
 t:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-unlink:before,.fa-chain-broken:before{content:""}.fa-question:before{content:""}.fa-inf
 o:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before
 {content:""}.fa-minus-square-o:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:""}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:""}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:""}.fa-euro:before,.fa-eur:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-rupee:before,.fa-inr:before{content:""}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:""}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:""}.fa-won:before,.fa-krw:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha
 -asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.
 fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-turkish-lira:before,.fa-try:before{content:""}.fa-plus-square-o:before{content:""}
 .fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-institution:before,.fa-bank:before,.fa-university:before{content:""}.fa-mortar-board:before,.fa-graduation-cap:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-beha
 nce:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:""}.fa-file-zip-o:before,.fa-file-archive-o:before{content:""}.fa-file-sound-o:before,.fa-file-audio-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa
 -life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:""}.fa-ge:before,.fa-empire:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-send:before,.fa-paper-plane:before{content:""}.fa-send-o:before,.fa-paper-plane-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:""}.fa-tty:befo
 re{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-
 square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars
 :before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-hotel:before,.fa-bed:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-yc:before,.fa-y-combinator:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:"�
 ��"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-roc
 k-o:before{content:""}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-tv:before,.fa-television:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{c
 ontent:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{conten
 t:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:""}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-signing:before,.fa-sign-language:before{content:""}.fa-low-vision:befor
 e{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-vcard:before,.fa-address-card:before{content:""}.fa-vcard-o:before,.fa-address-card-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before
 {content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{conten
 t:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.mfp-counter{font-family:CustomSerifFont,Times,Georgia,serif}.mfp-bg{top:0;left:0;width:100%;height:100%;z-index:1042;overflow:hidden;position:fixed;background:#000;opacity:.8;filter:alpha(opacity=80)}.mfp-wrap{top:0;left:0;width:100%;height:100%;z-index:1043;position:fixed;outline:none !important;-webkit-backface-visibility:hidden}.mfp-container{text-align:center;position:absolute;width:100%;height:100%;left:0;top:0;padding:0 8px;-webkit-
 box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.mfp-container:before{content:'';display:inline-block;height:100%;vertical-align:middle}.mfp-align-top .mfp-container:before{display:none}.mfp-content{position:relative;display:inline-block;vertical-align:middle;margin:0 auto;text-align:left;z-index:1045}.mfp-inline-holder .mfp-content,.mfp-ajax-holder .mfp-content{width:100%;cursor:auto}.mfp-ajax-cur{cursor:progress}.mfp-zoom-out-cur,.mfp-zoom-out-cur .mfp-image-holder .mfp-close{cursor:-moz-zoom-out;cursor:-webkit-zoom-out;cursor:zoom-out}.mfp-zoom{cursor:pointer;cursor:-webkit-zoom-in;cursor:-moz-zoom-in;cursor:zoom-in}.mfp-auto-cursor .mfp-content{cursor:auto}.mfp-close,.mfp-arrow,.mfp-preloader,.mfp-counter{-webkit-user-select:none;-moz-user-select:none;user-select:none}.mfp-loading.mfp-figure{display:none}.mfp-hide{display:none !important}.mfp-preloader{color:#ccc;position:absolute;top:50%;width:auto;text-align:center;margin-top:-0.8em;left:8px;right:8px;z-
 index:1044}.mfp-preloader a{color:#ccc}.mfp-preloader a:hover{color:#fff}.mfp-s-ready .mfp-preloader{display:none}.mfp-s-error .mfp-content{display:none}button.mfp-close,button.mfp-arrow{overflow:visible;cursor:pointer;background:transparent;border:0;-webkit-appearance:none;display:block;outline:none;padding:0;z-index:1046;-webkit-box-shadow:none;box-shadow:none}button::-moz-focus-inner{padding:0;border:0}.mfp-close{width:44px;height:44px;line-height:44px;position:absolute;right:0;top:0;text-decoration:none;text-align:center;opacity:1;filter:alpha(opacity=100);padding:0 0 18px 10px;color:#fff;font-style:normal;font-size:28px;font-family:CustomSerifFont,Times,Georgia,serif}.mfp-close:hover,.mfp-close:focus{opacity:1;filter:alpha(opacity=100)}.mfp-close:active{top:1px}.mfp-close-btn-in .mfp-close{color:#fff}.mfp-image-holder .mfp-close,.mfp-iframe-holder .mfp-close{color:#fff;right:-6px;text-align:right;padding-right:6px;width:100%}.mfp-counter{position:absolute;top:0;right:0;color:#c
 cc;font-size:12px;line-height:18px}.mfp-arrow{position:absolute;opacity:1;filter:alpha(opacity=100);margin:0;top:50%;margin-top:-55px;padding:0;width:90px;height:110px;-webkit-tap-highlight-color:transparent}.mfp-arrow:active{margin-top:-54px}.mfp-arrow:hover,.mfp-arrow:focus{opacity:1;filter:alpha(opacity=100)}.mfp-arrow:before,.mfp-arrow:after,.mfp-arrow .mfp-b,.mfp-arrow .mfp-a{content:'';display:block;width:0;height:0;position:absolute;left:0;top:0;margin-top:35px;margin-left:35px;border:medium inset transparent}.mfp-arrow:after,.mfp-arrow .mfp-a{border-top-width:13px;border-bottom-width:13px;top:8px}.mfp-arrow:before,.mfp-arrow .mfp-b{border-top-width:21px;border-bottom-width:21px;opacity:0.7}.mfp-arrow-left{left:0}.mfp-arrow-left:after,.mfp-arrow-left .mfp-a{border-right:17px solid #fff;margin-left:31px}.mfp-arrow-left:before,.mfp-arrow-left .mfp-b{margin-left:25px;border-right:27px solid #fff}.mfp-arrow-right{right:0}.mfp-arrow-right:after,.mfp-arrow-right .mfp-a{border-left:
 17px solid #fff;margin-left:39px}.mfp-arrow-right:before,.mfp-arrow-right .mfp-b{border-left:27px solid #fff}.mfp-iframe-holder{padding-top:40px;padding-bottom:40px}.mfp-iframe-holder .mfp-content{line-height:0;width:100%;max-width:900px}.mfp-iframe-holder .mfp-close{top:-40px}.mfp-iframe-scaler{width:100%;height:0;overflow:hidden;padding-top:56.25%}.mfp-iframe-scaler iframe{position:absolute;display:block;top:0;left:0;width:100%;height:100%;box-shadow:0 0 8px rgba(0,0,0,0.6);background:#000}img.mfp-img{width:auto;max-width:100%;height:auto;display:block;line-height:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:40px 0 40px;margin:0 auto}.mfp-figure{line-height:0}.mfp-figure:after{content:'';position:absolute;left:0;top:40px;bottom:40px;display:block;right:0;width:auto;height:auto;z-index:-1;box-shadow:0 0 8px rgba(0,0,0,0.6);background:#444}.mfp-figure small{color:#bdbdbd;display:block;font-size:12px;line-height:14px}.mfp-figure figure{marg
 in:0}.mfp-figure figcaption{margin-top:0;margin-bottom:0}.mfp-bottom-bar{margin-top:-36px;position:absolute;top:100%;left:0;width:100%;cursor:auto}.mfp-title{text-align:left;line-height:18px;color:#f3f3f3;word-wrap:break-word;padding-right:36px}.mfp-image-holder .mfp-content{max-width:100%}.mfp-gallery .mfp-image-holder .mfp-figure{cursor:pointer}@media screen and (max-width: 800px) and (orientation: landscape), screen and (max-height: 300px){.mfp-img-mobile .mfp-image-holder{padding-left:0;padding-right:0}.mfp-img-mobile img.mfp-img{padding:0}.mfp-img-mobile .mfp-figure:after{top:0;bottom:0}.mfp-img-mobile .mfp-figure small{display:inline;margin-left:5px}.mfp-img-mobile .mfp-bottom-bar{background:rgba(0,0,0,0.6);bottom:0;margin:0;top:auto;padding:3px 5px;position:fixed;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.mfp-img-mobile .mfp-bottom-bar:empty{padding:0}.mfp-img-mobile .mfp-counter{right:5px;top:3px}.mfp-img-mobile .mfp-close{top:0;right:0;w
 idth:35px;height:35px;line-height:35px;background:rgba(0,0,0,0.6);position:fixed;text-align:center;padding:0}}@media all and (max-width: 900px){.mfp-arrow{-webkit-transform:scale(0.75);transform:scale(0.75)}.mfp-arrow-left{-webkit-transform-origin:0;transform-origin:0}.mfp-arrow-right{-webkit-transform-origin:100%;transform-origin:100%}.mfp-container{padding-left:6px;padding-right:6px}}.mfp-ie7 .mfp-img{padding:0}.mfp-ie7 .mfp-bottom-bar{width:600px;left:50%;margin-left:-300px;margin-top:5px;padding-bottom:5px}.mfp-ie7 .mfp-container{padding:0}.mfp-ie7 .mfp-content{padding-top:44px}.mfp-ie7 .mfp-close{top:0;right:0;padding-top:0}a:focus{outline:thin dotted #faad14;outline:5px auto #faad14;outline-offset:-2px}*,*:before,*:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}html{box-sizing:border-box;background-color:#fff;font-size:16px;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}@media (min-width: 48em){html{font-size:18px}}@media (min-wid
 th: 64em){html{font-size:20px}}@media (min-width: 90em){html{font-size:22px}}body{margin:0}::-moz-selection{color:#fff;background:#000}::selection{color:#fff;background:#000}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}a{color:#0056ff}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{max-width:100%;width:auto\9;height:auto;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}label,select,bu
 tton,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}html{position:relative;min-height:100%;font-size:16px}body{margin:0;padding:0;color:#494e52;font-family:CustomSerifFont,Times,Georgia,serif;line-height:1.5}body.overflow--hidden{overflow:hidden}h1,h2,h3,h4,h5,h6{color:#333333;margin:10px 0 10px;line-height:1.2;font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:500}h1{margin-top:20px;margin-bottom:20px;line-height:45px;font-size:32px;font-weight:300}h2{line-height:28px;font-size:20px;font-weight:700;color:#333333}h3{font-size:18px;font-weight:700}h4{font-size:16px;font-weight:700}h5{font-size:16px;font-weight:500}h6{font-size:16px;font-weight:400}small,.
 small{font-size:14px;font-weight:400}p{margin-bottom:10px}u,ins{text-decoration:none;border-bottom:1px solid #494e52}u a,ins a{color:inherit}del a{color:inherit}p,pre,blockquote,ul,ol,dl,figure,table,fieldset{orphans:3;widows:3}abbr[title],abbr[data-original-title]{text-decoration:none;cursor:help;border-bottom:1px dotted #494e52}blockquote{margin:16px 16px 16px 0;padding-left:16px;padding-right:16px;font-style:italic;border-left:0.25em solid #7a8288}blockquote cite{font-style:italic}blockquote cite:before{content:"\2014";padding-right:5px}a:hover,a:active{outline:0}tt,code,kbd,samp,pre{font-family:"Source Code Pro",Roboto,monospace}pre{overflow-x:auto}p>code,a>code,li>code,figcaption>code,td>code{padding-top:0.1rem;padding-bottom:0.1rem;font-size:.75em;background:#fafafa;border:1px solid #fafafa;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,0.125)}p>code:before,p>code:after,a>code:before,a>code:after,li>code:before,li>code:after,figcaption>code:before,figcaption>code:after,td>c
 ode:before,td>code:after{letter-spacing:-0.2em;content:"\00a0"}hr{display:block;margin:1em 0;border:0;border-top:1px solid #fafafa}ul li,ol li{margin-bottom:0.2em}li ul,li ol{margin-top:0.2em}figure{display:-webkit-box;display:flex;-webkit-box-pack:justify;justify-content:space-between;-webkit-box-align:start;align-items:flex-start;flex-wrap:wrap;margin:2em 0}figure img,figure iframe,figure .fluid-width-video-wrapper{margin-bottom:1em}figure img{width:100%;border-radius:4px;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}figure>a{display:block}@media (min-width: 37.5em){figure.half>a,figure.half>img{width:calc(50% - 0.5em)}}figure.half figcaption{width:100%}@media (min-width: 37.5em){figure.third>a,figure.third>img{width:calc(33.3333% - 0.5em)}}figure.third figcaption{width:100%}figcaption{margin-bottom:0.5em;color:#777a7d;font-family:CustomSerifFont,Times,Georgia,serif;font-size:.75em}figcaption a{color:inherit;text-decoration:none;border-bottom:1px solid #b
 dc1c4;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}figcaption a:hover{color:#000;border-bottom-color:#000}svg:not(:root){overflow:hidden}nav ul{margin:0;padding:0}nav li{list-style:none}nav a{text-decoration:none}nav ul li,nav ol li{margin-bottom:0}nav li ul,nav li ol{margin-top:0}b,i,strong,em,blockquote,p,q,span,figure,img,h1,h2,header,input,a,tr,td,form button,input[type="submit"],.btn,.highlight,.archive__item-teaser{-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}body.home-page{margin-left:0;margin-right:0}form{margin:0 0 5px 0}form fieldset{margin-bottom:5px;padding:0;border-width:0}form legend{display:block;width:100%;margin-bottom:10px;*margin-left:-7px;padding:0;color:#494e52;border:0;border-bottom:1px solid #ccc;white-space:normal}form p{margin-bottom:5px / 2}form ul{list-style-type:none;margin:0 0 5px 0;padding:0}form br{display:none}label,input,button,select,textarea{vertical-align:baseline;*vertical-align:middle}input,b
 utton,select,textarea{box-sizing:border-box;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif}label{display:block;margin-bottom:0.25em;color:#494e52;cursor:pointer}label small{font-size:.75em}label input,label textarea,label select{display:block}input,textarea,select{display:inline-block;width:100%;padding:0.25em;margin-bottom:0.5em;color:#494e52;background-color:#fff;border:1px solid #ccc;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,0.125)}input:hover,textarea:hover,select:hover{border-color:#bdc1c4}.input-mini{width:60px}.input-small{width:90px}input[type="image"],input[type="checkbox"],input[type="radio"]{width:auto;height:auto;padding:0;margin:3px 0;*margin-top:0;line-height:normal;cursor:pointer;border-radius:0;border:0 \9}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0;*width:13px;*height:13px}input[type="image"]{border:0;box-shadow:none}input[type="file"]{width:au
 to;padding:initial;line-height:initial;border:initial;background-color:transparent;background-color:initial;box-shadow:none}input[type="button"],input[type="reset"],input[type="submit"]{width:auto;height:auto;cursor:pointer;*overflow:visible}select,input[type="file"]{*margin-top:4px}select{width:auto;background-color:#fff}select[multiple],select[size]{height:auto}textarea{resize:vertical;height:auto;overflow:auto;vertical-align:top}input[type="hidden"]{display:none}.form{position:relative}.radio,.checkbox{padding-left:18px;font-weight:normal}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-18px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{opacity:0.5;cursor:not-allowed}input:focus,textarea:focus{border-color:
 #7a8288;outline:0;outline:thin dotted \9}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus,select:focus{box-shadow:none}.help-block,.help-inline{color:#0056ff}.help-block{display:block;margin-bottom:1em;line-height:1em}.help-inline{display:inline-block;vertical-align:middle;padding-left:5px}.form-inline input,.form-inline textarea,.form-inline select{display:inline-block;margin-bottom:0}.form-inline label{display:inline-block}.form-inline .radio,.form-inline .checkbox,.form-inline .radio{padding-left:0;margin-bottom:0;vertical-align:middle}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-left:0;margin-right:3px}.form-search input,.form-search textarea,.form-search select{display:inline-block;margin-bottom:0}.form-search .search-query{padding-left:14px;padding-right:14px;margin-bottom:0;border-radius:14px}.form-search label{display:inline-block}.form-search .radio,.form-search .checkbox,.form-inline 
 .radio{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"]{float:left;margin-left:0;margin-right:3px}.form--loading:before{content:''}.form--loading .form__spinner{display:block}.form:before{position:absolute;top:0;left:0;width:100%;height:100%;background-color:rgba(255,255,255,0.7);z-index:10}.form__spinner{display:none;position:absolute;top:50%;left:50%;z-index:11}#goog-fixurl ul{list-style:none;margin-left:0;padding-left:0}#goog-fixurl ul li{list-style-type:none}#goog-wm-qt{width:auto;margin-right:10px;margin-bottom:20px;padding:8px 20px;display:inline-block;font-size:.75em;background-color:#fff;color:#000;border-width:2px !important;border-style:solid !important;border-color:gray;border-radius:4px}table{margin-bottom:1em;width:100%;font-family:CustomSerifFont,Times,Georgia,serif;font-size:.75em;border-collapse:collapse;border:1px solid #bdc1c4}table+table{margin-top:1em}thead{background-color:
 #fafafa;border-bottom:1px solid #bdc1c4}th{padding:0.5em;font-weight:bold;text-align:left;border-right:1px solid #bdc1c4}td{padding:0.5em;border-bottom:1px solid #bdc1c4;border-right:1px solid #bdc1c4}tr,td,th{vertical-align:middle}@-webkit-keyframes intro{0%{opacity:0}100%{opacity:1}}@keyframes intro{0%{opacity:0}100%{opacity:1}}.btn{display:inline-block;margin-bottom:0.25em;padding:0.5em 1em;color:#fff !important;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em;font-weight:bold;text-align:center;text-decoration:none;background-color:#7a8288;border:0 !important;border-radius:4px;cursor:pointer}.btn:hover{background-color:#333}.btn .icon{margin-right:0.5em}.btn .icon+.hidden{margin-left:-0.5em}.btn--block{display:block;width:100%}.btn--block+.btn--block{margin-top:0.25em}.btn--inverse{color:#7a8288 !important;border:1px solid #bdc1c4 !important;background-color:#fff}.btn--inverse:hover
 {color:#fff !important;border-color:#7a8288}.btn--light-outline{border:1px solid #fff !important;background-color:transparent}.btn--info{background-color:#0056ff}.btn--info:hover{background-color:#0045cc}.btn--warning{background-color:#faad14}.btn--warning:hover{background-color:#c88a10}.btn--success{background-color:#62c462}.btn--success:hover{background-color:#4e9d4e}.btn--danger{background-color:#ee5f5b}.btn--danger:hover{background-color:#be4c49}.btn--disabled{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);box-shadow:none;opacity:0.65}.btn--facebook{background-color:#3b5998}.btn--facebook:hover{background-color:#2f477a}.btn--twitter{background-color:#55acee}.btn--twitter:hover{background-color:#448abe}.btn--google-plus{background-color:#dd4b39}.btn--google-plus:hover{background-color:#b13c2e}.btn--linkedin{background-color:#007bb6}.btn--linkedin:hover{background-color:#006292}.btn--x-large{font-size:1.25em}.btn--large{font-size:1em}.btn--small{font-size:.6875em}
 .home-button{font-size:14px;padding:12px 15px;margin-right:20px;margin-top:10px}.home-button:hover{text-decoration:none;background-color:#faad14}@media (max-width: 600px){.home-button{padding:5px 0 5px 5px;margin-right:0;margin-top:5px}}.notice{margin:2em 0 !important;padding:1em;font-family:CustomSerifFont,Times,Georgia,serif;font-size:.75em !important;text-indent:initial;background-color:#f8f9f9;border-radius:4px;box-shadow:0 1px 1px rgba(189,193,196,0.25)}.notice h4{margin-top:0 !important;margin-bottom:0.75em}.page__content .notice h4{margin-bottom:0;font-size:1em}.notice p:last-child{margin-bottom:0 !important}.notice h4+p{margin-top:0;padding-top:0}.notice a{color:#bdc1c4}.notice a:hover{color:#717476}.notice code{background-color:#fcfcfc}.notice ul:last-child{margin-bottom:0}.notice--primary{margin:2em 0 !important;padding:1em;font-family:CustomSerifFont,Times,Georgia,serif;font-size:.75em !important;text-indent:initial;background-color:#f2f3f3;border-radius:4px;box-shadow:0 
 1px 1px rgba(122,130,136,0.25)}.notice--primary h4{margin-top:0 !important;margin-bottom:0.75em}.page__content .notice--primary h4{margin-bottom:0;font-size:1em}.notice--primary p:last-child{margin-bottom:0 !important}.notice--primary h4+p{margin-top:0;padding-top:0}.notice--primary a{color:#7a8288}.notice--primary a:hover{color:#494e52}.notice--primary code{background-color:#f8f9f9}.notice--primary ul:last-child{margin-bottom:0}.notice--info{margin:2em 0 !important;padding:1em;font-family:CustomSerifFont,Times,Georgia,serif;font-size:.75em !important;text-indent:initial;background-color:#e6eeff;border-radius:4px;box-shadow:0 1px 1px rgba(0,86,255,0.25)}.notice--info h4{margin-top:0 !important;margin-bottom:0.75em}.page__content .notice--info h4{margin-bottom:0;font-size:1em}.notice--info p:last-child{margin-bottom:0 !important}.notice--info h4+p{margin-top:0;padding-top:0}.notice--info a{color:#0056ff}.notice--info a:hover{color:#003499}.notice--info code{background-color:#f2f7ff}.
 notice--info ul:last-child{margin-bottom:0}.notice--warning{margin:2em 0 !important;padding:1em;font-family:CustomSerifFont,Times,Georgia,serif;font-size:.75em !important;text-indent:initial;background-color:#fff7e8;border-radius:4px;box-shadow:0 1px 1px rgba(250,173,20,0.25)}.notice--warning h4{margin-top:0 !important;margin-bottom:0.75em}.page__content .notice--warning h4{margin-bottom:0;font-size:1em}.notice--warning p:last-child{margin-bottom:0 !important}.notice--warning h4+p{margin-top:0;padding-top:0}.notice--warning a{color:#faad14}.notice--warning a:hover{color:#96680c}.notice--warning code{background-color:#fffbf3}.notice--warning ul:last-child{margin-bottom:0}.notice--success{margin:2em 0 !important;padding:1em;font-family:CustomSerifFont,Times,Georgia,serif;font-size:.75em !important;text-indent:initial;background-color:#eff9ef;border-radius:4px;box-shadow:0 1px 1px rgba(98,196,98,0.25)}.notice--success h4{margin-top:0 !important;margin-bottom:0.75em}.page__content .noti
 ce--success h4{margin-bottom:0;font-size:1em}.notice--success p:last-child{margin-bottom:0 !important}.notice--success h4+p{margin-top:0;padding-top:0}.notice--success a{color:#62c462}.notice--success a:hover{color:#3b763b}.notice--success code{background-color:#f7fcf7}.notice--success ul:last-child{margin-bottom:0}.notice--danger{margin:2em 0 !important;padding:1em;font-family:CustomSerifFont,Times,Georgia,serif;font-size:.75em !important;text-indent:initial;background-color:#fdefef;border-radius:4px;box-shadow:0 1px 1px rgba(238,95,91,0.25)}.notice--danger h4{margin-top:0 !important;margin-bottom:0.75em}.page__content .notice--danger h4{margin-bottom:0;font-size:1em}.notice--danger p:last-child{margin-bottom:0 !important}.notice--danger h4+p{margin-top:0;padding-top:0}.notice--danger a{color:#ee5f5b}.notice--danger a:hover{color:#8f3937}.notice--danger code{background-color:#fef7f7}.notice--danger ul:last-child{margin-bottom:0}.masthead{background-color:#11a4ff;position:absolute;t
 op:0;width:100%;-webkit-animation:intro 0.3s both;animation:intro 0.3s both;-webkit-animation-delay:0.15s;animation-delay:0.15s;z-index:20}.masthead__inner-wrap{max-width:100%;margin-left:auto;margin-right:auto;clear:both;display:-webkit-box;display:flex;-webkit-box-pack:justify;justify-content:space-between;font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;margin-left:10%;margin-right:10%}.masthead__inner-wrap:after{content:" ";display:block;clear:both}.masthead__inner-wrap::after{clear:both;content:"";display:table}@media (min-width: 90em){.masthead__inner-wrap{max-width:1440px}}.masthead__inner-wrap nav{z-index:10}.masthead__inner-wrap a{text-decoration:none}.site-title{display:-webkit-box;display:flex;align-self:stretch;-webkit-box-align:center;align-items:center;z-index:20}.site-title img{width:174px;height:34px}.greedy-nav a.site-title{margin-right:0;padding:0 0}.masthead__menu{width:100%}.masthead__menu .site-nav{margin-left:0}@media (min-width: 37.5em){.masthead
 __menu .site-nav{float:right}}.masthead__menu ul{margin:0;padding:0;clear:both;list-style-type:none}.masthead__menu-item{display:block;list-style-type:none;white-space:nowrap}.masthead__menu-item--lg{padding-right:2em;font-weight:700}.breadcrumbs{max-width:100%;margin-left:auto;margin-right:auto;clear:both;margin-top:0;margin-bottom:0;padding-left:2em;padding-right:2em;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;-webkit-animation:intro 0.3s both;animation:intro 0.3s both;-webkit-animation-delay:0.30s;animation-delay:0.30s}.breadcrumbs:after{content:" ";display:block;clear:both}.breadcrumbs::after{clear:both;content:"";display:table}@media (min-width: 64em){.breadcrumbs{padding-left:1em;padding-right:1em}}@media (min-width: 90em){.breadcrumbs{max-width:1440px}}.breadcrumbs ol{padding:0;list-style:none;font-size:.75em}@media (min-width: 64em){.breadcrumbs ol{width:83.05085%;float:right;margin-right
 :0}}@media (min-width: 90em){.breadcrumbs ol{padding-left:4.23729%}}.breadcrumbs li{display:inline}.breadcrumbs .current{font-weight:bold}.pagination{clear:both;width:100%;float:left;margin-left:0;margin-right:0;clear:both;margin-top:1em;padding-top:1em}.pagination::after{clear:both;content:"";display:table}.pagination ul{margin:0;padding:0;list-style-type:none;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif}.pagination li{display:block;float:left;margin-left:-1px}.pagination li a{display:block;margin-bottom:0.25em;padding:0.5em 1em;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:14px;font-weight:bold;line-height:1.5;text-align:center;text-decoration:none;color:#9ba1a6;border:1px solid #bdc1c4;border-radius:0}.pagination li a:hover{color:#0041bf}.pagination li a.current{color:#fff;background:#7a8288}.paginat
 ion li a.disabled{color:#dee0e1;pointer-events:none;cursor:not-allowed}.pagination li:first-child{margin-left:0}.pagination li:first-child a{border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination li:last-child a{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination--pager{display:block;padding:1em 2em;float:left;width:50%;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:1em;font-weight:bold;text-align:center;text-decoration:none;color:#0056ff;border:1px solid #bdc1c4;border-radius:4px}.pagination--pager:hover{color:#0041bf}.pagination--pager:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.pagination--pager:last-child{margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.pagination--pager.disabled{color:#dee0e1;pointer-events:none;cursor:not-allowed}.page__content+.pagination,.page__meta+.pagination,.comment__date+.pagination
 ,.page__share+.pagination,.page__comments+.pagination{margin-top:2em;padding-top:2em;border-top:1px solid #fafafa}.greedy-nav{position:relative;display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;background:#11a4ff;margin-top:15px;margin-bottom:15px}.greedy-nav .nav-lang{margin-left:auto}.greedy-nav .nav-lang a{margin-left:42px;margin-right:0;font-weight:400;font-size:16px;color:white;opacity:1.0;padding:2px 10px;border:1px solid #ffffff;border-radius:38px}.greedy-nav .nav-lang:hover{font-weight:500}@media (max-width: 25em){.greedy-nav .nav-lang a{margin-left:5px;font-size:14px}}.greedy-nav a{display:block;font-size:16px;margin-right:2.08rem;padding:0 0;color:white;opacity:0.6;text-decoration:none;font-weight:400}.greedy-nav a:hover{color:white;opacity:1.0;font-weight:500}.greedy-nav a.site-title{margin-left:0}.greedy-nav a.active{color:white;opacity:1.0;font-weight:500}.greedy-nav button{padding:0 0.5rem;align-self:stretch;border:0;outline:none;color:#fff;b
 ackground-color:#7a8288;cursor:pointer}.greedy-nav .visible-links{display:-webkit-box;display:flex;-webkit-box-pack:end;justify-content:flex-end;-webkit-box-flex:1;flex:1;overflow:hidden}.greedy-nav .visible-links li{-webkit-box-flex:0;flex:none}.greedy-nav .visible-links li:last-child a{margin-right:0}.greedy-nav .visible-links a{position:relative}.greedy-nav .visible-links a:before{content:"";position:absolute;left:0;bottom:0;height:4px;background:#bdc1c4;width:100%;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;-webkit-transform:scaleX(0) translate3d(0, 0, 0);transform:scaleX(0) translate3d(0, 0, 0)}.greedy-nav .visible-links a:hover:before{-webkit-transform:scaleX(1);-ms-transform:scaleX(1);transform:scaleX(1)}.greedy-nav .hidden-links{position:absolute;top:100%;right:0;margin-top:15px;padding:5px;border:1px solid #fafafa;border-radius:4px;background:#fff;box-shadow:0 2px 4px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12)}.greedy-nav .hidden-links.hidd
 en{display:none}.greedy-nav .hidden-links a{margin:0;padding:10px 20px;font-size:16px;color:#7a8288}.greedy-nav .hidden-links a:hover{color:#5c6266;background:#80abff}.greedy-nav .hidden-links:before{content:"";position:absolute;top:-11px;right:10px;width:0;border-style:solid;border-width:0 10px 10px;border-color:#fafafa transparent;display:block;z-index:0}.greedy-nav .hidden-links:after{content:"";position:absolute;top:-10px;right:10px;width:0;border-style:solid;border-width:0 10px 10px;border-color:#fff transparent;display:block;z-index:1}.greedy-nav .hidden-links li{display:block;border-bottom:1px solid #fafafa}.greedy-nav .hidden-links li:last-child{border-bottom:none}.nav__list{margin-bottom:0em}.nav__list input[type="checkbox"],.nav__list label{display:none}@media (max-width: 63.9375em){.nav__list{background-color:#ffffff}.nav__list label{position:relative;display:inline-block;padding:0.5em 2.5em 0.5em 1em;color:#494e52;font-size:14px;font-weight:bold;border:1px solid #bdc1c4;
 border-radius:4px;z-index:20;-webkit-transition:0.2s ease-out;transition:0.2s ease-out;cursor:pointer}.nav__list label:before,.nav__list label:after{content:'';position:absolute;right:1em;top:1.25em;width:0.75em;height:0.125em;line-height:1;background-color:#88d2ff;-webkit-transition:0.2s ease-out;transition:0.2s ease-out}.nav__list label:after{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.nav__list label:hover{color:#fff;border-color:#88d2ff;background-color:#88d2ff}.nav__list label:hover:before,.nav__list label:hover:after{background-color:#11a4ff}.nav__list input:checked+label{color:white;background-color:#88d2ff}.nav__list input:checked+label:before,.nav__list input:checked+label:after{background-color:#11a4ff}.nav__list label:hover:after{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.nav__list input:checked+label:hover:after{-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}.nav__
 list ul{margin-bottom:1em}.nav__list a{display:block;padding:0.25em 0}}@media (max-width: 63.9375em) and (min-width: 64em){.nav__list a{padding-top:0.125em;padding-bottom:0.125em}}@media (max-width: 63.9375em){.nav__list a:hover{text-decoration:underline}}.nav__list .nav__items{margin:0;padding:0 20px 20px 20px}@media (max-width: 63.9375em){.nav__list .nav__items{padding-bottom:0}}.nav__list .nav__items a{color:inherit}.nav__list .nav__items .active{margin-left:-0.5em;padding-left:0.5em;padding-right:0.5em;color:#fff;background:#88d2ff;border-radius:4px}.nav__list .nav__items .active:hover{color:#fff}.nav__list .nav__items li a{font-size:14px;line-height:30px;display:block;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.nav__list .nav__items li a:hover{overflow:visible;white-space:normal;height:auto}@media (max-width: 63.9375em){.nav__list .nav__items{position:relative;max-height:0;opacity:0%;overflow:hidden;z-index:10;-webkit-transition:0.3s ease-in-out;transition:0.3s e
 ase-in-out;-webkit-transform:translate(0, 10%);-ms-transform:translate(0, 10%);transform:translate(0, 10%)}}.nav__list .nav__items li ul{padding-bottom:20px;border-bottom:1px solid #e6e6e6}@media (max-width: 63.9375em){.nav__list input:checked ~ .nav__items{-webkit-transition:0.5s ease-in-out;transition:0.5s ease-in-out;max-height:9999px;overflow:visible;opacity:1;margin-top:1em;-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}}.nav__title{margin:0;padding:0 1rem;font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:1em;font-weight:bold}.nav__sub-title{display:block;overflow:hidden;line-height:19px;white-space:nowrap;text-overflow:ellipsis;margin:0;padding:20px 0 9px;font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:16px;color:#11a4ff;font-weight:500;border-bottom:1px solid #fafafa;text-decoration:none}.nav__sub-title:hover{height:auto;overflow:visible;white-space:normal}.nav__sub-title-with-url:hover
 {text-decoration:underline}.toc{font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;color:#7a8288;letter-spacing:1px;background-color:#fafafa;border:1px solid #7a8288;border-radius:6px}.toc .nav__title{color:#fff;font-size:12px;background:#7a8288;border-top-left-radius:4px;border-top-right-radius:4px}.toc__menu{margin:0;padding:0;width:100%;list-style:none;font-size:0.8rem}.toc__menu a{display:block;padding:0.5rem 1rem;color:#494e52;font-weight:normal;font-size:0.85em}.toc__menu>li:last-child a{border-bottom:none}.toc__menu li ul>li a{padding-left:2rem;font-weight:normal}.toc__menu li>ul li{display:none}@media (min-width: 48em){.toc__menu li>ul li{display:block}}.page__footer{clear:both;width:100%;float:left;margin-left:0;margin-right:0;clear:both;position:absolute;bottom:0;width:100%;clear:both;color:#81888e;-webkit-animation:intro 0.3s both;animation:intro 0.3s both;-webkit-animation-delay:0.45s;animation-delay:0.45s;background-color:#262626}.page__footer::after{clear:b
 oth;content:"";display:table}.page__footer footer{max-width:100%;margin-left:auto;margin-right:auto;clear:both}.page__footer footer:after{content:" ";display:block;clear:both}.page__footer footer::after{clear:both;content:"";display:table}.page__footer a{color:#999999;font-size:14px;text-decoration:none}.page__footer a:hover{color:#ffffff;text-decoration:underline}.page__footer ul{margin-top:40px;margin-bottom:40px;list-style-type:none}.page__footer ul .header{color:#ffffff;font-size:14px;line-height:16px;margin-bottom:18px}.page__footer li{font-size:14px;line-height:28px}.page__footer .group::before{content:'';display:inline-block;background:url("/assets/images/Users.png") no-repeat center/cover;width:16px;height:16px;vertical-align:middle;margin:0 8px 0 0}.page__footer .github::before{content:'';display:inline-block;background:url("/assets/images/github.png") no-repeat center/cover;width:16px;height:16px;vertical-align:middle;margin:0 8px 0 0}.page__footer .twitter::before{content
 :'';display:inline-block;background:url("/assets/images/Twitter.png") no-repeat center/cover;width:16px;height:16px;vertical-align:middle;margin:0 8px 0 0}.page__footer .rss::before{content:'';display:inline-block;background:url("/assets/images/Rss.png") no-repeat center/cover;width:16px;height:16px;vertical-align:middle;margin:0 8px 0 0}.page__footer-copyright{font-family:CustomSerifFont,Times,Georgia,serif;font-size:.6875em}.page__footer-follow ul{margin:0;padding:0;list-style-type:none}.page__footer-follow li{display:inline-block;padding-top:5px;padding-bottom:5px;font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:.75em;text-transform:uppercase}.page__footer-follow li+li:before{content:"";padding-right:5px}.page__footer-follow a{padding-right:10px;font-weight:bold}.page__footer-bottom{text-align:center;font-size:12px;line-height:13px;color:#999999;padding-top:17px;padding-bottom:18px;border-top:1px solid #383838}div.highlighter-rouge,figure.highlight{positio
 n:relative;margin-bottom:1em;font-family:"Source Code Pro",Roboto,monospace;font-size:15px;line-height:22.5px;border:1px solid #fafafa;border-radius:4px;background-color:#fafafa;box-shadow:0 1px 1px rgba(0,0,0,0.125)}div.highlighter-rouge:before,figure.highlight:before{position:absolute;top:0;right:0;padding:0.5em;background-color:#fafafa;content:"\f121";font-family:"fontawesome" !important;line-height:1;text-transform:none;speak:none}div.highlighter-rouge .highlight,figure.highlight .highlight{margin:0;padding:1em}figure.highlight{padding-left:1em;padding-right:1em}.highlight table{font-size:1em;border:0}.highlight table td{padding:5px;border:0}.highlight table td.gutter{padding-right:1em;color:#bdc1c4}.highlight table pre{margin:0}.highlight pre{width:100%}.highlight .c{color:#93a1a1}.highlight .err{color:#586e75}.highlight .g{color:#586e75}.highlight .k{color:#859900}.highlight .l{color:#586e75}.highlight .n{color:#586e75}.highlight .o{color:#859900}.highlight .x{color:#cb4b16}.h
 ighlight .p{color:#586e75}.highlight .cm{color:#93a1a1}.highlight .cp{color:#859900}.highlight .c1{color:#93a1a1}.highlight .cs{color:#859900}.highlight .gd{color:#2aa198}.highlight .ge{color:#586e75;font-style:italic}.highlight .gr{color:#dc322f}.highlight .gh{color:#cb4b16}.highlight .gi{color:#859900}.highlight .go{color:#586e75}.highlight .gp{color:#586e75}.highlight .gs{color:#586e75;font-weight:bold}.highlight .gu{color:#cb4b16}.highlight .gt{color:#586e75}.highlight .kc{color:#cb4b16}.highlight .kd{color:#22b3eb}.highlight .kn{color:#859900}.highlight .kp{color:#859900}.highlight .kr{color:#22b3eb}.highlight .kt{color:#dc322f}.highlight .ld{color:#586e75}.highlight .m{color:#2aa198}.highlight .s{color:#2aa198}.highlight .na{color:#586e75}.highlight .nb{color:#B58900}.highlight .nc{color:#22b3eb}.highlight .no{color:#cb4b16}.highlight .nd{color:#22b3eb}.highlight .ni{color:#cb4b16}.highlight .ne{color:#cb4b16}.highlight .nf{color:#22b3eb}.highlight .nl{color:#586e75}.highlight
  .nn{color:#586e75}.highlight .nx{color:#586e75}.highlight .py{color:#586e75}.highlight .nt{color:#22b3eb}.highlight .nv{color:#22b3eb}.highlight .ow{color:#859900}.highlight .w{color:#586e75}.highlight .mf{color:#2aa198}.highlight .mh{color:#2aa198}.highlight .mi{color:#2aa198}.highlight .mo{color:#2aa198}.highlight .sb{color:#93a1a1}.highlight .sc{color:#2aa198}.highlight .sd{color:#586e75}.highlight .s2{color:#2aa198}.highlight .se{color:#cb4b16}.highlight .sh{color:#586e75}.highlight .si{color:#2aa198}.highlight .sx{color:#2aa198}.highlight .sr{color:#dc322f}.highlight .s1{color:#2aa198}.highlight .ss{color:#2aa198}.highlight .bp{color:#22b3eb}.highlight .vc{color:#22b3eb}.highlight .vg{color:#22b3eb}.highlight .vi{color:#22b3eb}.highlight .il{color:#2aa198}.hidden{display:none;visibility:hidden}.load{display:none}.transparent{opacity:0}.visually-hidden,.screen-reader-text,.screen-reader-text span,.screen-reader-shortcut{position:absolute !important;clip:rect(1px, 1px, 1px, 1px)
 ;height:1px !important;width:1px !important;border:0 !important;overflow:hidden}body:hover .visually-hidden a,body:hover .visually-hidden input,body:hover .visually-hidden button{display:none !important}.screen-reader-text:focus,.screen-reader-shortcut:focus{clip:auto !important;height:auto !important;width:auto !important;display:block;font-size:1em;font-weight:bold;padding:15px 23px 14px;background:#fff;z-index:100000;text-decoration:none;box-shadow:0 0 2px 2px rgba(0,0,0,0.6)}.skip-link{position:fixed;z-index:20;margin:0;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;white-space:nowrap}.skip-link li{height:0;width:0;list-style:none}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.cf{clear:both}.wrapper{max-width:100%;margin-left:auto;margin-right:auto}.wrapper:after{content:" ";display:block;cl
 ear:both}.align-left{display:block;margin-left:auto;margin-right:auto}@media (min-width: 37.5em){.align-left{float:left;margin-right:1em}}.align-right{display:block;margin-left:auto;margin-right:auto}@media (min-width: 37.5em){.align-right{float:right;margin-left:1em}}.align-center{display:block;margin-left:auto;margin-right:auto}@media (min-width: 64em){.full{margin-right:-19.49153% !important}}.icon{display:inline-block;fill:currentColor;width:1em;height:1.1em;line-height:1;position:relative;top:-0.1em;vertical-align:middle}.social-icons .fa{color:#000}.social-icons .fa-behance,.social-icons .fa-behance-square{color:#1769FF}.social-icons .fa-bitbucket,.social-icons .fa-bitbucket-square{color:#205081}.social-icons .fa-dribbble{color:#ea4c89}.social-icons .fa-facebook,.social-icons .fa-facebook-square{color:#3b5998}.social-icons .fa-flickr{color:#ff0084}.social-icons .fa-foursquare{color:#0072b1}.social-icons .fa-github,.social-icons .fa-github-alt,.social-icons .fa-github-square{co
 lor:#171516}.social-icons .fa-google-plus,.social-icons .fa-google-plus-square{color:#dd4b39}.social-icons .fa-instagram{color:#517fa4}.social-icons .fa-lastfm,.social-icons .fa-lastfm-square{color:#d51007}.social-icons .fa-linkedin,.social-icons .fa-linkedin-square{color:#007bb6}.social-icons .fa-pinterest,.social-icons .fa-pinterest-p,.social-icons .fa-pinterest-square{color:#cb2027}.social-icons .fa-rss,.social-icons .fa-rss-square{color:#fa9b39}.social-icons .fa-soundcloud{color:#f30}.social-icons .fa-stack-exchange,.social-icons .fa-stack-overflow{color:#fe7a15}.social-icons .fa-tumblr,.social-icons .fa-tumblr-square{color:#32506d}.social-icons .fa-twitter,.social-icons .fa-twitter-square{color:#55acee}.social-icons .fa-vimeo,.social-icons .fa-vimeo-square{color:#1ab7ea}.social-icons .fa-vine{color:#00bf8f}.social-icons .fa-youtube,.social-icons .fa-youtube-square,.social-icons .fa-youtube-play{color:#b00}.social-icons .fa-xing,.social-icons .fa-xing-square{color:#006567}.socia
 l-icons .fa-group{color:#11a4ff}.navicon{position:relative;width:1.5rem;height:.25rem;background:#fff;margin:auto;-webkit-transition:0.3s;transition:0.3s}.navicon:before,.navicon:after{content:"";position:absolute;left:0;width:1.5rem;height:.25rem;background:#fff;-webkit-transition:0.3s;transition:0.3s}.navicon:before{top:-.5rem}.navicon:after{bottom:-.5rem}.close .navicon{background:transparent}.close .navicon:before,.close .navicon:after{-webkit-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%;top:0;width:1.5rem}.close .navicon:before{-webkit-transform:rotate3d(0, 0, 1, 45deg);transform:rotate3d(0, 0, 1, 45deg)}.close .navicon:after{-webkit-transform:rotate3d(0, 0, 1, -45deg);transform:rotate3d(0, 0, 1, -45deg)}@media (min-width: 64em){.sticky{clear:both;position:-webkit-sticky;position:sticky;top:2em}.sticky::after{clear:both;content:"";display:table}.sticky>*{display:block}}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5
 f5;border:1px solid #e3e3e3;border-radius:4px;box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.show-modal{overflow:hidden;position:relative}.show-modal:before{position:absolute;content:"";top:0;left:0;width:100%;height:100%;z-index:999;background-color:rgba(255,255,255,0.85)}.show-modal .modal{display:block}.modal{display:none;position:fixed;width:300px;top:50%;left:50%;margin-left:-150px;margin-top:-150px;min-height:0;z-index:9999;background:#fff;border:1px solid #fafafa;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,0.125)}.modal__title{margin:0;padding:0.5em 1em}.modal__supporting-text{padding:0 1em 0.5em 1em}.modal__actions{padding:0.5em 1em;border-top:1px solid #fafafa}.footnote{color:#9ba1a6;text-decoration:none}.footnotes{color:#9ba1a6}.footnotes ol,.footnotes li,.footnotes p{margin-bottom:0;font-size:.75em}a.reversefootnote{color:#7a8288;text-decoration:none}a.reversefootnote:hover{text-decoration:underline}.required{color:#ee5f5b;font-weight:bold}.gsc-control-cse table,.gsc-
 control-cse tr,.gsc-control-cse td{border:0}.responsive-video-container{position:relative;margin-bottom:1em;padding-bottom:56.25%;height:0;overflow:hidden;max-width:100%}.responsive-video-container iframe,.responsive-video-container object,.responsive-video-container embed{position:absolute;top:0;left:0;width:100%;height:100%}:-webkit-full-screen-ancestor .masthead,:-webkit-full-screen-ancestor .page__footer{position:static}#main{max-width:100%;margin-left:auto;margin-right:auto;clear:both;margin-top:65px;margin-left:10%;margin-right:10%;-webkit-animation:intro 0.3s both;animation:intro 0.3s both;-webkit-animation-delay:0.35s;animation-delay:0.35s}#main:after{content:" ";display:block;clear:both}#main::after{clear:both;content:"";display:table}@media (min-width: 90em){#main{max-width:1440px}}@media (min-width: 64em){.page{display:block;float:left;margin-left:40px;width:calc(100% - 260px)}}.page .page__inner-wrap{clear:both;width:100%;float:left;margin-left:0;margin-right:0}.page .pa
 ge__inner-wrap .page__content,.page .page__inner-wrap .page__meta,.page .page__inner-wrap .comment__date,.page .page__inner-wrap .page__share{clear:both;width:100%;float:left;margin-left:0;margin-right:0}.page__title{margin-top:40px;line-height:45px;margin-bottom:20px;font-weight:300}.page__title+.page__meta,.page__title+.comment__date{margin-top:-0.5em}.page__lead{font-family:CustomSerifFont,Times,Georgia,serif;font-size:16px;color:white}.page__content p,.page__content li,.page__content dl{font-size:14px}.page__content p{margin:0 0 10px}.page__content a{text-decoration:none}.page__content a:hover{text-decoration:underline}.page__content a:hover img{box-shadow:0 0 10px rgba(0,0,0,0.25)}.page__content dt{margin-top:1em;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-weight:bold}.page__content dd{margin-left:1em;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Hel
 vetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em}.page__content .small{font-size:.75em}.page__content blockquote+.small{margin-top:-1.5em;padding-left:1.25rem}.page__hero{position:relative;margin-bottom:2em;clear:both;-webkit-animation:intro 0.3s both;animation:intro 0.3s both;-webkit-animation-delay:0.25s;animation-delay:0.25s}.page__hero::after{clear:both;content:"";display:table}.page__hero--overlay{position:relative;padding-top:130px;clear:both;height:500px;background-size:1920px 500px;background-repeat:no-repeat;background-position:center;-webkit-animation:intro 0.3s both;animation:intro 0.3s both;-webkit-animation-delay:0.25s;animation-delay:0.25s}.page__hero--overlay::after{clear:both;content:"";display:table}.page__hero--overlay a{color:white}@media (max-width: 400px){.page__hero--overlay{padding-top:120px}}.page__hero--overlay .wrapper{margin-left:10%}@media (max-width: 400px){.page__hero--overlay .wrapper .button-group a{display:block;width:160px}}.page__hero-
 -overlay .page__title,.page__hero--overlay .page__meta,.page__hero--overlay .comment__date,.page__hero--overlay .page__lead,.page__hero--overlay .btn{color:white;opacity:1.0}.page__hero--overlay .excerpt-label{font-size:14px;color:white;opacity:0.8;margin-bottom:10px}.page__hero--overlay .page__lead{max-width:580px;height:110px;margin-bottom:40px}@media (min-width: 37.5em){.page__hero--overlay .page__lead{height:auto}}.page__hero--overlay .page__title{font-size:44px;font-weight:500;margin-bottom:20px}.page__hero-image{width:100%;height:auto;-ms-interpolation-mode:bicubic}.page__hero-caption{position:absolute;bottom:0;right:0;margin:0 auto;padding:2px 5px;color:#525252;font-family:CustomSerifFont,Times,Georgia,serif;font-size:.6875em;background:#000;text-align:right;z-index:5;opacity:0.5;border-radius:4px 0 0 0}@media (min-width: 64em){.page__hero-caption{padding:5px 10px}}.page__hero-caption a{color:#525252;text-decoration:none}.page__share{margin-top:2em;padding-top:1em;border-top:
 1px solid #fafafa}@media (max-width: 37.5em){.page__share .btn span{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}}.page__share-title{margin-bottom:10px;font-size:.75em;text-transform:uppercase}.page__meta,.comment__date{margin-top:2em;color:#9ba1a6;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em}.page__meta p,.comment__date p{margin:0}.page__meta a,.comment__date a{color:inherit}.page__meta-title{margin-bottom:10px;font-size:.75em;text-transform:uppercase}.page__taxonomy .sep{display:none}.page__taxonomy strong{margin-right:10px}.page__taxonomy-item{display:inline-block;margin-right:5px;margin-bottom:8px;padding:5px 10px;text-decoration:none;border:1px solid #bdc1c4;border-radius:4px}.page__taxonomy-item:hover{text-decoration:none;color:#0041bf}.page__comments{clear:both;width:100%;float:left;margin-left:0;margin-right:0}.pag
 e__comments-title{margin-top:2rem;margin-bottom:10px;padding-top:2rem;font-size:.75em;border-top:1px solid #fafafa;text-transform:uppercase}.page__comments-form{padding:1em;background:#fafafa;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.page__comments-form.disabled input,.page__comments-form.disabled button,.page__comments-form.disabled textarea,.page__comments-form.disabled label{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);box-shadow:none;opacity:0.65}.comment{clear:both;margin:1em 0}.comment::after{clear:both;content:"";display:table}.comment:not(:last-child){border-bottom:1px solid #fafafa}.comment__avatar-wrapper{float:left;width:60px;height:60px}@media (min-width: 64em){.comment__avatar-wrapper{width:100px;height:100px}}.comment__avatar{width:40px;height:40px;border-radius:50%}@media (min-width: 64em){.comment__avatar{width:80px;height:80px;padding:5px;border:1px solid #fafafa}}.comment__content-wrapper{float:right;width:calc(100%
  - 60px)}@media (min-width: 64em){.comment__content-wrapper{width:calc(100% - 100px)}}.comment__author{margin:0}.comment__author a{text-decoration:none}.comment__date{margin:0}.comment__date a{text-decoration:none}.page__related{margin-top:2em;padding-top:1em;border-top:1px solid #fafafa;clear:both;float:left}.page__related::after{clear:both;content:"";display:table}@media (min-width: 64em){.page__related{margin-left:21.18644%}}.page__related a{color:inherit;text-decoration:none}.page__related-title{margin-bottom:10px;font-size:.75em;text-transform:uppercase}.nav-tabs{margin-top:0}.nav-tabs a{padding:7px;line-height:30px}.nav-tabs li{margin-right:2px;margin-bottom:0}.nav-tabs .active{border:1px solid #ddd;border-bottom:transparent}.nav-tabs .active a{color:#555;cursor:default;pointer-events:none}.nav-tabs .active a:hover{text-decoration:none}.nav-tabs .title{font-size:20px}.nav-tabs .title a{line-height:auto}.nav-tabs .active.title{background-color:#f7f7f7}.archive{margin-bottom:60p
 x}@media (min-width: 48em){.archive{width:100%;float:left;margin-left:0;margin-right:0}}@media (min-width: 64em){.archive{display:block;float:left;margin-left:40px;width:calc(100% - 260px)}}.archive a{color:inherit;text-decoration:none}.archive__subtitle{margin:1.414em 0 0;padding-bottom:0.5em;font-size:1em;color:#9ba1a6;border-bottom:1px solid #fafafa}.archive__subtitle+.list__item .archive__item-title{margin-top:0.5em}.page__content .archive__item-title{border-bottom:none}.archive__item-teaser{border-radius:4px;overflow:hidden}.archive__item-teaser img{margin-left:8%;margin-right:8%;width:200px;height:160px;margin:auto;display:block}.list__item .page__meta,.list__item .comment__date{margin:0 0 4px}.grid__item{margin-bottom:2em}.grid__item .page__meta,.grid__item .comment__date{margin:0 0 4px}.grid__item .archive__item-title{margin-top:0.5em;font-size:1em}.grid__item .archive__item-excerpt{display:none}@media (min-width: 37.5em){.grid__item{width:48.97959%;float:left}.grid__item:nt
 h-child(2n+1){margin-left:0;margin-right:-100%;clear:both;margin-left:0}.grid__item:nth-child(2n+2){margin-left:51.02041%;margin-right:-100%;clear:none}.grid__item .archive__item-teaser{max-height:200px}}@media (min-width: 48em){.grid__item{margin-left:0;margin-right:0;width:23.46939%;float:left}.grid__item:nth-child(4n+1){margin-left:0;margin-right:-100%;clear:both;margin-left:0}.grid__item:nth-child(4n+2){margin-left:25.5102%;margin-right:-100%;clear:none}.grid__item:nth-child(4n+3){margin-left:51.02041%;margin-right:-100%;clear:none}.grid__item:nth-child(4n+4){margin-left:76.53061%;margin-right:-100%;clear:none}.grid__item .archive__item-teaser{max-height:120px}.grid__item .archive__item-excerpt{display:block;font-size:.75em}}.normal-feature-row{padding-left:8%;padding-right:8%;padding-top:80px;padding-bottom:80px;background-color:#f7f7f7}.feature__wrapper{clear:both;border-bottom:1px solid #fafafa}.feature__wrapper::after{clear:both;content:"";display:table}.feature__item{margin
 -bottom:2em;font-size:1.25rem}@media (min-width: 37.5em){.feature__item{margin-bottom:0;width:32.20339%;float:left}.feature__item:nth-child(3n+1){margin-left:0;margin-right:-100%;clear:both;margin-left:0}.feature__item:nth-child(3n+2){margin-left:33.89831%;margin-right:-100%;clear:none}.feature__item:nth-child(3n+3){margin-left:67.79661%;margin-right:-100%;clear:none}.feature__item .feature__item-teaser{max-height:200px;overflow:hidden}}.feature__item--left{clear:both;width:100%;float:left;margin-left:0;margin-right:0;font-size:1.25rem}.feature__item--left .archive__item-teaser{margin-bottom:2em}@media (min-width: 37.5em){.feature__item--left .archive__item-teaser{width:40.67797%;float:left;margin-right:1.69492%}.feature__item--left .archive__item-body{width:57.62712%;float:right;margin-right:0;padding-left:4.23729%;padding-right:8.47458%}}.feature__item--right{clear:both;width:100%;float:left;margin-left:0;margin-right:0;font-size:1.25rem}.feature__item--right .archive__item-teaser
 {margin-bottom:2em}@media (min-width: 37.5em){.feature__item--right{text-align:right}.feature__item--right .archive__item-teaser{width:40.67797%;float:right;margin-left:1.69492%}.feature__item--right .archive__item-body{width:57.62712%;float:left;margin-left:0;padding-left:4.23729%;padding-right:8.47458%}}.feature__item--center{clear:both;width:100%;float:left;margin-left:0;margin-right:0;margin-bottom:60px;padding-left:8%;padding-right:8%}.feature__item--center .archive__item-excerpt{margin:0;font-size:14px;color:#999999}.feature__item--center .archive__item-excerpt .excerpt-title{margin-top:60px;margin-bottom:60px;color:#333333;text-align:center;font-size:24px;font-weight:500;line-height:100%}.feature__item--center .archive__item-excerpt ul{margin-left:5%;margin-right:5%}.feature__item--center .archive__item-excerpt ul li{padding-left:16px;float:left;text-align:left;overflow-y:auto}@media (max-width: 600px){.feature__item--center .archive__item-excerpt ul li{width:100%;margin-righ
 t:0;margin-bottom:10px}.feature__item--center .archive__item-excerpt ul li a{height:auto;margin-bottom:5px}}@media (min-width: 601px){.feature__item--center .archive__item-excerpt ul li{width:45%;margin-right:10%;margin-bottom:0}.feature__item--center .archive__item-excerpt ul li a{height:63px;margin-bottom:0}}.feature__item--center .archive__item-excerpt ul li a{font-size:16px}.feature__item--center .archive__item-excerpt ul li::before{content:"\25E6";color:#333333;margin-left:-16px;float:left}.feature__item--center .archive__item-excerpt ul .line-end{margin-right:0}.feature__item .archive__item-body{text-align:center}.feature__item .archive__item-body .archive__item-title{color:#333333;font-weight:500;font-size:18px}.feature__item .archive__item-body .archive__item-title:hover{color:#0056ff}.feature__item .archive__item-body .archive__item-excerpt{width:200px;margin-top:0;font-size:14px;color:#999999;margin:auto}.sidebar{-webkit-transform:translate3d(0, 0, 0);transform:translate3d
 (0, 0, 0);clear:both;background-color:#f7f7f7}.sidebar::after{clear:both;content:"";display:table}@media (min-width: 64em){.sidebar{display:block;float:left;width:220px;min-height:-moz-available;min-height:-webkit-fill-available;margin-bottom:0;-webkit-transition:opacity 0.2s ease-in-out;transition:opacity 0.2s ease-in-out}}@media (min-width: 90em){.sidebar{padding-right:0;min-height:auto}}.sidebar h2,.sidebar h3,.sidebar h4,.sidebar h5,.sidebar h6{margin-bottom:0;font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif}.sidebar p,.sidebar li{font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em;line-height:1.5}.sidebar img{width:100%}.sidebar .back-to-home{padding-top:15px;padding-bottom:11px;font-size:14px;background-color:#ffffff;color:#999999}.sidebar .back-to-home a{color:#666666}.sidebar .back-to-home a:hover{color:#0063fc}.sidebar__right{margin-bottom:1em}@media (min-width: 64e
 m){.sidebar__right{position:relative;float:right;width:200px;margin-left:2.54237%;z-index:10}}@media (min-width: 90em){.sidebar__right{width:300px}}.author__avatar{display:table-cell;vertical-align:top;width:36px;height:36px;margin:20px 10px 10px}@media (min-width: 64em){.author__avatar{display:block;width:auto;height:auto}}.author__avatar img{max-width:110px;border-radius:50%}@media (min-width: 64em){.author__avatar img{padding:5px;border:1px solid #fafafa}}.author__content{display:table-cell;vertical-align:top;padding-left:20px;padding-right:20px;line-height:1}@media (min-width: 64em){.author__content{display:block;width:100%;padding-left:20px;padding-right:20px}}.author__name{margin:0}@media (min-width: 64em){.author__name{margin-top:20px;margin-bottom:10px}}.sidebar .author__name{font-size:16px}.author__bio{margin:0;font-size:14px}@media (min-width: 64em){.author__bio{margin-top:10px;margin-bottom:20px}}.author__urls-wrapper{position:relative;display:table-cell;vertical-align:mi
 ddle;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;z-index:10;position:relative;cursor:pointer;margin-left:20px;margin-right:20px;font-size:14px}.author__urls-wrapper li:last-child a{margin-bottom:0}@media (min-width: 64em){.author__urls-wrapper{display:block}}.author__urls-wrapper button{margin-bottom:0}@media (min-width: 64em){.author__urls-wrapper button{display:none}}.author__urls{display:none;position:absolute;right:0;margin-top:15px;padding:10px;list-style-type:none;border:1px solid #fafafa;border-radius:4px;background:#fff;z-index:-1;box-shadow:0 2px 4px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12);cursor:default}@media (min-width: 64em){.author__urls{display:block;position:relative;margin:0;padding:0;border:0;background:transparent;box-shadow:none}}.author__urls:before{display:block;content:"";position:absolute;top:-11px;left:calc(50% - 10px);width:0;border-style:solid;border-width:0 10
 px 10px;border-color:#fafafa transparent;z-index:0}@media (min-width: 64em){.author__urls:before{display:none}}.author__urls:after{display:block;content:"";position:absolute;top:-10px;left:calc(50% - 10px);width:0;border-style:solid;border-width:0 10px 10px;border-color:#fff transparent;z-index:1}@media (min-width: 64em){.author__urls:after{display:none}}.author__urls li{white-space:nowrap}.author__urls a{display:block;margin-bottom:5px;padding-right:5px;padding-top:2px;padding-bottom:2px;color:inherit;font-size:1em;text-decoration:none}.author__urls a:hover{text-decoration:underline}@media print{[hidden]{display:none}*{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}html{font-size:16px;margin:0;padding:0}body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;background:#fff !important;color:#000 !important;font-size:1rem;line-height:1.5;margin:0 auto;text-rendering:optimizeLegibility}h1,h2,h3,h4,h5,h6{color:#000;line-height:1.2;marg
 in-bottom:0.75rem;margin-top:0}h1{font-size:2.5rem}h2{font-size:2rem}h3{font-size:1.75rem}h4{font-size:1.5rem}h5{font-size:1.25rem}h6{font-size:1rem}a,a:visited{color:#000;text-decoration:underline;word-wrap:break-word}table{border-collapse:collapse}thead{display:table-header-group}table,th,td{border-bottom:1px solid #000}td,th{padding:8px 16px}img{border:0;display:block;max-width:100% !important;vertical-align:middle}hr{border:0;border-bottom:2px solid #bbb;height:0;margin:2.25rem 0;padding:0}dt{font-weight:bold}dd{margin:0;margin-bottom:0.75rem}abbr[title],acronym[title]{border:0;text-decoration:none}table,blockquote,pre,code,figure,li,hr,ul,ol,a,tr{page-break-inside:avoid}h2,h3,h4,p,a{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid;page-break-inside:avoid}h1+p,h2+p,h3+p{page-break-before:avoid}img{page-break-after:auto;page-break-before:auto;page-break-inside:avoid}pre{white-space:pre-wrap !important;word-wrap:break-word}a[href^='http://']:after,a[href^='https://']:af
 ter,a[href^='ftp://']:after{content:" (" attr(href) ")";font-size:80%}abbr[title]:after,acronym[title]:after{content:" (" attr(title) ")"}.page-break,.page-break-before{page-break-before:always}.page-break-after{page-break-after:always}.no-print{display:none}a.no-reformat:after{content:''}abbr[title].no-reformat:after,acronym[title].no-reformat:after{content:''}.page__hero-caption{color:#000 !important;background:#fff !important;opacity:1}.page__hero-caption a{color:#000 !important}.masthead,.toc,.page__share,.page__related,.pagination,.ads,.page__footer,.author__avatar,.author__content,.author__urls-wrapper,.nav__list,.adsbygoogle{display:none !important}}.page__content li p{font-size:14px}.page__content li code,.page__content li li{font-size:14px}.page__content p,.page__content li,.page__content dl{font-size:14px}.figure-caption{text-align:center;color:gray}



[44/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/developers/submit-codes/index.html
----------------------------------------------------------------------
diff --git a/content/cn/developers/submit-codes/index.html b/content/cn/developers/submit-codes/index.html
new file mode 100644
index 0000000..2e7afd4
--- /dev/null
+++ b/content/cn/developers/submit-codes/index.html
@@ -0,0 +1,567 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>代码提交指南 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="介绍如何向 ServiceComb 项目提交代码">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="代码提交指南">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/developers/submit-codes/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/developers/submit-codes/">
+
+
+
+  <meta property="og:description" content="介绍如何向 ServiceComb 项目提交代码">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="代码提交指南">
+  <meta name="twitter:description" content="介绍如何向 ServiceComb 项目提交代码">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/developers/submit-codes/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/developers/"><span class="nav__sub-title nav__sub-title-with-url">开发者指南</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/developers/setup-develop-environment/"><span class="nav__sub-title nav__sub-title-with-url">开发环境准备</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/developers/submit-codes/"><span class="nav__sub-title nav__sub-title-with-url">代码提交指南</span></a>
+        
+
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="代码提交指南">
+    <meta itemprop="description" content="介绍如何向 ServiceComb 项目提交代码">
+    
+    <meta itemprop="dateModified" content="September 08, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">代码提交指南
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> 在本页上</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#贡献途径" id="markdown-toc-贡献途径">贡献途径</a></li>
+  <li><a href="#运行测试" id="markdown-toc-运行测试">运行测试</a></li>
+  <li><a href="#pr指南" id="markdown-toc-pr指南">PR指南</a>    <ul>
+      <li><a href="#fork仓库" id="markdown-toc-fork仓库">Fork仓库</a></li>
+      <li><a href="#配置git和提交修改" id="markdown-toc-配置git和提交修改">配置git和提交修改</a></li>
+      <li><a href="#创建pr" id="markdown-toc-创建pr">创建PR</a></li>
+      <li><a href="#冲突解决" id="markdown-toc-冲突解决">冲突解决</a></li>
+    </ul>
+  </li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="贡献途径">贡献途径</h2>
+<p>  ServiceComb正在不断成长中,也希望能找到更多志同道合的同伴一起成长和进步。向ServiceComb 贡献的途径有多种:</p>
+<ul>
+  <li>完善文档。完善网站上的文档或者项目中的介绍文档和API说明文档。其中,网站文档的完善可通过网站最底端的<strong>报告本网页问题</strong>或<strong>在Github上编辑此页</strong>对文档内容进行完善。</li>
+  <li>
+    <p>实现功能特性需求或修复BUG。项目的功能特性需求或者已发现但未修复的BUG都会在项目中的issue处看到,以<a href="https://github.com/ServiceComb/saga/issues">Saga</a>项目为例,一般都会带有类似 <strong>enhancement</strong> 或类似 <strong>bug</strong> 的标签来说明这是功能需求还是BUG,读者可以结合自己的兴趣点来选择。此外,您也可以通过日常使用或阅读代码时发现BUG并以Issue的方式进行描述并针对该BUG提交PR,帮助我们进一步改进。同时,也欢迎您提出需求并在实现后提交PR。</p>
+
+    <p><img src="/assets/images/find-features-by-example.png" alt="寻觅功能需求示例" class="align-center" /></p>
+  </li>
+</ul>
+
+<h2 id="运行测试">运行测试</h2>
+<p>  在您提交代码前,请先按照项目README中说明的自动测试部分对代码的功能性和实现上的正确性进行验证。</p>
+
+<h2 id="pr指南">PR指南</h2>
+<p>  在 <a href="https://github.com/ServiceComb">Github</a> 上面可以很方便地提交 <a href="https://help.github.com/articles/about-pull-requests/">Pull Request (PR)</a>,下面将以本网站项目<a href="https://github.com/ServiceComb/ServiceComb.github.io">ServiceComb/ServiceComb.github.io</a> 为例(如果是其他项目,请替换项目名ServiceComb.github.io)。</p>
+
+<h3 id="fork仓库">Fork仓库</h3>
+
+<p>  进入 ServiceComb/ServiceComb.github.io 的 <a href="https://github.com/ServiceComb/ServiceComb.github.io">github 页面</a> ,点击右上角按钮 <code class="highlighter-rouge">Fork</code> 进行 Fork。</p>
+
+<p><img src="/assets/images/fork-repo.jpg" alt="体质指数应用运行界面" class="align-center" /></p>
+
+<h3 id="配置git和提交修改">配置git和提交修改</h3>
+
+<ul>
+  <li>
+    <p>将代码克隆到本地:</p>
+
+    <div class="language-shell highlighter-rouge"><pre class="highlight"><code>git clone https://github.com/&lt;your_github_name&gt;/ServiceComb.github.io.git
+</code></pre>
+    </div>
+
+    <p>注意:请将 &lt;your_github_name&gt; 替换为您的github名字。</p>
+  </li>
+</ul>
+
+<p>  clone完成后,origin会默认指向github上的远程fork地址。</p>
+
+<ul>
+  <li>
+    <p>将 ServiceComb/ServiceComb.github.io 添加为本地仓库的远程分支 upstream:</p>
+
+    <div class="language-shell highlighter-rouge"><pre class="highlight"><code><span class="nb">cd </span>ServiceComb.github.io
+git remote add upstream https://github.com/ServiceComb/ServiceComb.github.io.git
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p>检查远程仓库设置:</p>
+
+    <div class="language-shell highlighter-rouge"><pre class="highlight"><code>git remote -v
+origin https://github.com/&lt;your_github_name&gt;/ServiceComb.github.io.git <span class="o">(</span>fetch<span class="o">)</span>
+origin    https://github.com/&lt;your_github_name&gt;/ServiceComb.github.io.git <span class="o">(</span>push<span class="o">)</span>
+upstream  https://github.com/ServiceComb/ServiceComb.github.io.git <span class="o">(</span>fetch<span class="o">)</span>
+upstream  https://github.com/ServiceComb/ServiceComb.github.io.git <span class="o">(</span>push<span class="o">)</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p>新建分支以便在分支上做修改:</p>
+
+    <div class="language-shell highlighter-rouge"><pre class="highlight"><code>git checkout -b &lt;your_branch_name&gt;
+</code></pre>
+    </div>
+  </li>
+</ul>
+
+<p>  注意: &lt;your_branch_name&gt; 为您自定义的分支名字。</p>
+
+<p>  创建完成后可进行代码更改。</p>
+
+<ul>
+  <li>
+    <p>提交代码到远程分支:</p>
+
+    <div class="language-shell highlighter-rouge"><pre class="highlight"><code>git commit -a -m <span class="s2">"&lt;you_commit_message&gt;"</span>
+git push origin &lt;your_branch_name&gt;
+</code></pre>
+    </div>
+  </li>
+</ul>
+
+<p>  更多 git 使用方法请访问:<a href="https://www.atlassian.com/git/tutorials/setting-up-a-repository">git 使用</a>,这里不赘述。</p>
+
+<h3 id="创建pr">创建PR</h3>
+
+<p>  在浏览器切换到自己的 github 页面,切换分支到提交的分支 &lt;your_branch_name&gt; ,依次点击 <code class="highlighter-rouge">New pull request</code> 和 <code class="highlighter-rouge">Create pull request</code> 按钮进行创建,如下图所示:</p>
+
+<p class="figure-caption"><img src="/assets/images/new-pr.jpg" alt="体质指数应用运行界面" class="align-center" />
+fig-1 New pull request</p>
+
+<p class="figure-caption"><img src="/assets/images/create-pr.jpg" alt="体质指数应用运行界面" class="align-center" />
+fig-2 Create pull request</p>
+
+<p>  至此,您的PR创建完成,更多关于 PR 请阅读 <a href="https://help.github.com/categories/collaborating-with-issues-and-pull-requests/">collaborating-with-issues-and-pull-requests</a> 。</p>
+
+<h3 id="冲突解决">冲突解决</h3>
+<p>  提交PR时的代码冲突一般是由于多人编辑同一个文件引起的,解决冲突主要通过以下步骤即可:</p>
+<ol>
+  <li>切换至主分支
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code>git checkout master
+</code></pre>
+    </div>
+  </li>
+  <li>同步远端主分支至本地
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code>git pull upstream master
+</code></pre>
+    </div>
+  </li>
+  <li>切换回刚才的分支(假设分支名为fix)
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code>git checkout fix 
+</code></pre>
+    </div>
+  </li>
+  <li>进行rebase
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code>git rebase -i master
+</code></pre>
+    </div>
+    <p>此时会弹出修改记录的文件,一般直接保存即可。然后会提示哪些文件出现了冲突,此时可打开冲突文件对冲突部分进行修改,将提示的所有冲突文件的冲突都解决后,执行</p>
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code>git add .
+git rebase --continue
+</code></pre>
+    </div>
+    <p>依此往复,直至屏幕出现类似 <em>rebase successful</em> 字样即可,此时您可以进行往提交PR的分支进行更新:</p>
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code>git push -f origin fix
+</code></pre>
+    </div>
+  </li>
+</ol>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _developers/cn/submit-codes.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_developers/cn/submit-codes.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/docs/autoscale-on-company/index.html
----------------------------------------------------------------------
diff --git a/content/cn/docs/autoscale-on-company/index.html b/content/cn/docs/autoscale-on-company/index.html
new file mode 100644
index 0000000..ae19e9f
--- /dev/null
+++ b/content/cn/docs/autoscale-on-company/index.html
@@ -0,0 +1,885 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>微服务化后的按需精细化资源控制 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="本篇将介绍使用kubernetes的弹性伸缩能力在微服务化的Company中实现按需精细化资源控制的实践">
+
+
+
+
+<meta name="author" content="Zen Lin">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="微服务化后的按需精细化资源控制">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/autoscale-on-company/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/autoscale-on-company/">
+
+
+
+  <meta property="og:description" content="本篇将介绍使用kubernetes的弹性伸缩能力在微服务化的Company中实现按需精细化资源控制的实践">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="微服务化后的按需精细化资源控制">
+  <meta name="twitter:description" content="本篇将介绍使用kubernetes的弹性伸缩能力在微服务化的Company中实现按需精细化资源控制的实践">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+    <meta name="twitter:creator" content="@">
+  
+
+
+
+  
+
+  
+
+
+
+
+
+  <meta property="og:type" content="article">
+  <meta property="article:published_time" content="2017-08-24T00:00:00+08:00">
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/docs/autoscale-on-company/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+
+<div itemscope itemtype="http://schema.org/Person">
+
+  
+
+  <div class="author__content">
+    <h3 class="author__name" itemprop="name">Zen Lin</h3>
+    
+      <p class="author__bio" itemprop="description">
+	    
+	      
+	        To enjoy in opensource community.
+	      
+	    
+      </p>
+    
+  </div>
+
+  <div class="author__urls-wrapper">
+    <button class="btn btn--inverse">关注</button>
+    <ul class="author__urls social-icons">
+      
+
+      
+        <li>
+          <a href="http://zenlintechnofreak.github.io" itemprop="url">
+            <i class="fa fa-fw fa-chain" aria-hidden="true"></i> 网站
+          </a>
+        </li>
+      
+
+      
+        <li>
+          <a href="mailto:zenlintechnofreak@gmail.com">
+            <meta itemprop="email" content="zenlintechnofreak@gmail.com" />
+            <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> 电子邮箱
+          </a>
+        </li>
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      <!--
+  <li>
+    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs">
+      <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link
+    </a>
+  </li>
+-->
+    </ul>
+  </div>
+</div>
+
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="微服务化后的按需精细化资源控制">
+    <meta itemprop="description" content="本篇将介绍使用kubernetes的弹性伸缩能力在微服务化的Company中实现按需精细化资源控制的实践">
+    <meta itemprop="datePublished" content="August 24, 2017">
+    
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">微服务化后的按需精细化资源控制
+</h1>
+            
+              <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <p>  <a href="/cn/docs/company-on-kubernetes/">上文</a> 介绍了在K8S上快速部署Company示例,本文将继续在K8S上演示使用K8S的弹性伸缩能力进行Company示例的按需精细化资源控制,以此体验微服务化给大家带来的好处。</p>
+
+<h2 id="环境准备">环境准备</h2>
+
+<h5 id="k8s环境准备">K8S环境准备:</h5>
+
+<p>  为使K8S具备弹性伸缩能力,需要先在K8S中安装监控器Heapster和Grafana:</p>
+
+<p>  具体读者踩了坑后更新的heapster的安装脚本作者放在:<a href="https://github.com/zenlinTechnofreak/LinuxCon-Beijing-WorkShop/tree/autoscal/kubernetes/heapster/deploy">heapster</a>,可直接获取下载获取,需要调整一个参数,后直接运行kube.sh脚本进行安装。</p>
+
+<div class="language-bash highlighter-rouge"><pre class="highlight"><code>vi LinuxCon-Beijing-WorkShop/kubernetes/heapster/deploy/kube-config/influxdb/heapster.yaml
+</code></pre>
+</div>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">spec</span><span class="pi">:</span>
+  <span class="s">replicas</span><span class="pi">:</span> <span class="s">1</span>
+  <span class="s">template</span><span class="pi">:</span>
+    <span class="s">metadata</span><span class="pi">:</span>
+      <span class="s">labels</span><span class="pi">:</span>
+        <span class="s">task</span><span class="pi">:</span> <span class="s">monitoring</span>
+        <span class="s">k8s-app</span><span class="pi">:</span> <span class="s">heapster</span>
+    <span class="s">spec</span><span class="pi">:</span>
+      <span class="s">serviceAccountName</span><span class="pi">:</span> <span class="s">heapster</span>
+      <span class="s">containers</span><span class="pi">:</span>
+      <span class="pi">-</span> <span class="s">name</span><span class="pi">:</span> <span class="s">heapster</span>
+        <span class="s">image</span><span class="pi">:</span> <span class="s">gcr.io/google_containers/heapster-amd64:v1.4.1</span>
+        <span class="s">imagePullPolicy</span><span class="pi">:</span> <span class="s">IfNotPresent</span>
+        <span class="s">command</span><span class="pi">:</span>
+        <span class="pi">-</span> <span class="s">/heapster</span>
+<span class="c1">#集群内安装直接使用kubernetes</span>
+        <span class="pi">-</span> <span class="s">--source=kubernetes</span>
+<span class="c1">#集群外安装请直接将下面的服务地址替换为k8s api server地址</span>
+<span class="c1">#        - --source=kubernetes:http://10.229.43.65:6443?inClusterConfig=false</span>
+         <span class="pi">-</span> <span class="s">--sink=influxdb:http://monitoring-influxdb:8086</span>
+</code></pre>
+</div>
+
+<h5 id="启动company">启动Company:</h5>
+
+<p>  下载Comany支持弹性伸缩的代码:</p>
+
+<div class="language-shell highlighter-rouge"><pre class="highlight"><code>git clone https://github.com/ServiceComb/ServiceComb-Company-WorkShop.git
+
+<span class="nb">cd </span>LinuxCon-Beijing-WorkShop/kubernetes/
+
+bash start-autoscale.sh 
+</code></pre>
+</div>
+
+<p>  在Company的deployment.yaml中, 增加了如下限定资源的字段,这将限制每个pod被限制在200mill-core(1000毫core == 1 core)的cpu使用率以内。</p>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code>    <span class="s">resources</span><span class="pi">:</span>
+      <span class="s">limits</span><span class="pi">:</span>
+        <span class="s">cpu</span><span class="pi">:</span> <span class="s">200m</span>
+</code></pre>
+</div>
+<p>  在 start-autoscale.sh 中,对每个deployment创建HPA(pod水平弹性伸缩器)资源,限定每个pod的副本数弹性伸缩时控制在1到10之间,并限定每个pod的cpu占用率小于50%,结合前面限定了200mcore,故,每个pod的的平均cpu占用率会被HPA通过弹性伸缩能力控制在100mcore以内。</p>
+
+<div class="language-shell highlighter-rouge"><pre class="highlight"><code><span class="c"># Create Horizontal Pod Autoscaler</span>
+kubectl autoscale deployment zipkin --cpu-percent<span class="o">=</span>50 --min<span class="o">=</span>1 --max<span class="o">=</span>10
+kubectl autoscale deployment company-bulletin-board --cpu-percent<span class="o">=</span>50 --min<span class="o">=</span>1 --max<span class="o">=</span>10
+kubectl autoscale deployment company-worker --cpu-percent<span class="o">=</span>50 --min<span class="o">=</span>1 --max<span class="o">=</span>10
+kubectl autoscale deployment company-doorman --cpu-percent<span class="o">=</span>50 --min<span class="o">=</span>1 --max<span class="o">=</span>10
+kubectl autoscale deployment company-manager --cpu-percent<span class="o">=</span>50 --min<span class="o">=</span>1 --max<span class="o">=</span>10
+kubectl autoscale deployment company-beekeeper --cpu-percent<span class="o">=</span>50 --min<span class="o">=</span>1 --max<span class="o">=</span>10
+</code></pre>
+</div>
+
+<p>  当运行start-autoscale.sh之后,具备弹性伸缩器的company已经被创建,可通过下面指令进行HPA的查询:</p>
+
+<div class="language-shell highlighter-rouge"><pre class="highlight"><code> kubectl get hpa
+</code></pre>
+</div>
+
+<h5 id="启动压测">启动压测:</h5>
+
+<div class="language-shell highlighter-rouge"><pre class="highlight"><code><span class="nb">export</span> <span class="nv">$HOST</span><span class="o">=</span>&lt;heapster-ip&gt;:&lt;heapster-port&gt;
+bash LinuxCon-Beijing-WorkShop/kubernetes/stress-test.sh
+</code></pre>
+</div>
+
+<p>  该脚本不断循环执行 1s内向Company请求计算 fibonacci 数值200次,对Company造成请求压力:</p>
+
+<div class="language-shell highlighter-rouge"><pre class="highlight"><code><span class="nv">FIBONA_NUM</span><span class="o">=</span><span class="sb">`</span>curl -s -H <span class="s2">"Authorization: </span><span class="nv">$Authorization</span><span class="s2">"</span> -XGET <span class="s2">"http://</span><span class="nv">$HOST</span><span class="s2">/worker/fibonacci/term?n=6"</span><span class="sb">`</span>
+</code></pre>
+</div>
+
+<h2 id="测试过程与结果">测试过程与结果</h2>
+
+<p>  分别查看HPA状态以及Grafana,如下:</p>
+
+<p class="figure-caption"><img src="/assets/images/company-autoscale-1.png" alt="图1" class="align-center" />
+图1 启动阶段</p>
+
+<p class="figure-caption"><img src="/assets/images/company-autoscale-2.png" alt="图2" class="align-center" />
+图2 启动阶段</p>
+
+<p class="figure-caption"><img src="/assets/images/company-autoscale-3.png" alt="图3" class="align-center" />
+图3 过程</p>
+
+<p class="figure-caption"><img src="/assets/images/company-autoscale-4.png" alt="图4" class="align-center" />
+图4 结果</p>
+
+<p class="figure-caption"><img src="/assets/images/company-autoscale-5.png" alt="图5" class="align-center" />
+图5 结果</p>
+
+<p>  从以上过程可以分析出,以下几点:</p>
+
+<p>  1. 压力主要集中在company-manager这个pod上,K8S的autoscaler通过弹性增加该pod的副本数量,最终达到目标:每个pod的cpu占用率低于限定值的50%(图5,Usage default company-manager/Request default company-manager = 192/600 约等于图4中的33%),并保持稳定。</p>
+
+<p>  2. 在弹性伸缩过程中,在还没稳定前可能造成丢包,如图3。</p>
+
+<p>  3. Company启动会导致系统资源负载暂时性加大,故Grafana上看到的cpu占用率曲线会呈现波峰状,但随着系统稳定运行后,HPA会按照系统的稳定资源消耗准确找到匹配的副本数。图3中副本数已超过实际所需3个,但随着系统稳定,最终还是稳定维持在3个副本。</p>
+
+<p>  4. 在HPA以及Grafana可以看到缩放和报告数据都会有延迟,按照官方文档说法,只有在最近3分钟内没有重新缩放的情况下,才会进行放大。 从最后一次重新缩放,缩小比例将等待5分钟。 而且,只有在avg/ Target降低到0.9以下或者增加到1.1以上(10%容差)的情况下,才可能会进行缩放。</p>
+
+<p>  以上,就是本次对Compan示例弹性伸缩的全过程,<strong>Martin Fowler 在2014年3月的<a href="http://martinfowler.com/articles/microservices.html">文章</a>中提到:</strong></p>
+
+<blockquote>
+  <p>  <strong>微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。</strong></p>
+</blockquote>
+
+<p>  <strong>国内实践微服务的先行者王磊先生也在《微服务架构与实践》一书中进行了全面论述。</strong></p>
+
+<p>  Company使用ServiceComb进行微服务化改造后,具备了微服务的属性,故可以对单个负载较大的company-manager这个微服务进行精细化的控制,达到按需的目的,相比传统单体架构来讲,这将大大帮助准确有效地化解应用瓶颈,提高资源的利用效率。</p>
+
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+  
+
+
+  
+  
+  
+
+  <p class="page__taxonomy">
+    <strong><i class="fa fa-fw fa-tags" aria-hidden="true"></i> 标签: </strong>
+    <span itemprop="keywords">
+    
+      
+      
+      <a href="/tags/#kubernetes" class="page__taxonomy-item" rel="tag">kubernetes</a><span class="sep">, </span>
+    
+      
+      
+      <a href="/tags/#%E5%BC%B9%E6%80%A7%E4%BC%B8%E7%BC%A9" class="page__taxonomy-item" rel="tag">弹性伸缩</a>
+    
+    </span>
+  </p>
+
+
+
+
+
+        
+          
+            
+              <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> 最新的:</strong> <time datetime="2017-08-24T00:00:00+08:00">2017年8月24日</time></p>
+            
+          
+        
+      </footer>
+
+      <section class="page__share">
+  
+    <h4 class="page__share-title">分享</h4>
+  
+
+  <a href="https://twitter.com/intent/tweet?via=ServiceComb&text=微服务化后的按需精细化资源控制 /cn/docs/autoscale-on-company/" class="btn btn--twitter" title="分享 Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
+
+  <a href="https://www.facebook.com/sharer/sharer.php?u=/cn/docs/autoscale-on-company/" class="btn btn--facebook" title="分享 Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
+
+  <a href="https://plus.google.com/share?url=/cn/docs/autoscale-on-company/" class="btn btn--google-plus" title="分享 Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
+
+  <a href="https://www.linkedin.com/shareArticle?mini=true&url=/cn/docs/autoscale-on-company/" class="btn btn--linkedin" title="分享 LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
+</section>
+
+
+      
+  <nav class="pagination">
+    
+      <a href="/docs/autoscale-on-company/" class="pagination--pager" title="On-demand Resource Control for Micro-serviced Company by Autoscale
+">向前</a>
+    
+    
+      <a href="/docs/stress-test-on-company-with-jmeter-in-k8s/" class="pagination--pager" title="Stress test on Company Demo with Jmeter in Kubernetes Cluster
+">向后</a>
+    
+  </nav>
+
+
+    </div>
+
+    
+      <div class="page__comments">
+  
+  
+    <section id="static-comments">
+      
+        <!-- Start static comments -->
+        <div class="js-comments">
+          
+        </div>
+        <!-- End static comments -->
+
+        <!-- Start new comment form -->
+        <h4 class="page__comments-title">留下评论</h4>
+        <p class="small">您的电子邮箱地址并不会被展示。请填写标记为必须的字段。 <span class="required">*</span></p>
+        <form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/ServiceComb/servicesomb.github.io/master">
+          <div class="form__spinner">
+            <i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
+            <span class="sr-only">正在加载...</span>
+          </div>
+
+          <fieldset>
+            <label for="comment-form-message">评论 <small class="required">*</small></label>
+            <textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
+            <div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">Markdown语法已支持。</a></div>
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-name">姓名 <small class="required">*</small></label>
+            <input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-email">电子邮箱 <small class="required">*</small></label>
+            <input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-url">网站(可选)</label>
+            <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
+          </fieldset>
+          <fieldset class="hidden" style="display: none;">
+            <input type="hidden" name="options[slug]" value="autoscale-on-company">
+            <label for="comment-form-location">Not used. Leave blank if you are a human.</label>
+            <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
+          </fieldset>
+          <!-- Start comment form alert messaging -->
+          <p class="hidden js-notice">
+            <strong class="js-notice-text"></strong>
+          </p>
+          <!-- End comment form alert messaging -->
+          <fieldset>
+            <button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--large">提交评论</button>
+          </fieldset>
+        </form>
+        <!-- End new comment form -->
+      
+    </section>
+  
+</div>
+
+    
+  </article>
+
+  
+  
+    <div class="page__related">
+      <h4 class="page__related-title">猜您还喜欢</h4>
+      <div class="grid__wrapper">
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/jira_beginner_guide/" rel="permalink">老司机带你刷任务 - ServiceComb JIRA入门指南
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">ServiceComb JIRA入门指南
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/how-to-reform-a-legacy-system/" rel="permalink">最头疼的遗留系统该如何改造?
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+      </div>
+    </div>
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _posts/cn/2017-08-24-autoscale-on-company.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_posts/cn/2017-08-24-autoscale-on-company.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  
+  <script>
+    (function ($) {
+    var $comments = $('.js-comments');
+
+    $('#new_comment').submit(function () {
+      var form = this;
+
+      $(form).addClass('disabled');
+      $('#comment-form-submit').html('<i class="fa fa-spinner fa-spin fa-fw"></i> 正在加载...');
+
+      $.ajax({
+        type: $(this).attr('method'),
+        url: $(this).attr('action'),
+        data: $(this).serialize(),
+        contentType: 'application/x-www-form-urlencoded',
+        success: function (data) {
+          $('#comment-form-submit').html('已提交');
+          $('.page__comments-form .js-notice').removeClass('notice--danger');
+          $('.page__comments-form .js-notice').addClass('notice--success');
+          showAlert('感谢您的评论!被批准后它会立即在此站点展示。');
+        },
+        error: function (err) {
+          console.log(err);
+          $('#comment-form-submit').html('提交评论');
+          $('.page__comments-form .js-notice').removeClass('notice--success');
+          $('.page__comments-form .js-notice').addClass('notice--danger');
+          showAlert('很抱歉,您的提交存在错误。请确保所有必填字段都已填写正确,然后再试一次。');
+          $(form).removeClass('disabled');
+        }
+      });
+
+      return false;
+    });
+
+    function showAlert(message) {
+      $('.page__comments-form .js-notice').removeClass('hidden');
+      $('.page__comments-form .js-notice-text').html(message);
+    }
+  })(jQuery);
+  </script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/docs/communication-btw-sc-ms/index.html
----------------------------------------------------------------------
diff --git a/content/cn/docs/communication-btw-sc-ms/index.html b/content/cn/docs/communication-btw-sc-ms/index.html
new file mode 100644
index 0000000..ae487bf
--- /dev/null
+++ b/content/cn/docs/communication-btw-sc-ms/index.html
@@ -0,0 +1,795 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>Communication Between Service-Center and MicroServices - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="An introduction of how service-center and microservices work together">
+
+
+
+
+<meta name="author" content="Asif Siddiqui">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="Communication Between Service-Center and MicroServices">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/communication-btw-sc-ms/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/communication-btw-sc-ms/">
+
+
+
+  <meta property="og:description" content="An introduction of how service-center and microservices work together">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="Communication Between Service-Center and MicroServices">
+  <meta name="twitter:description" content="An introduction of how service-center and microservices work together">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+    <meta name="twitter:creator" content="@asif_diatm">
+  
+
+
+
+  
+
+  
+
+
+
+
+
+  <meta property="og:type" content="article">
+  <meta property="article:published_time" content="2017-08-09T00:00:00+08:00">
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/docs/communication-btw-sc-ms/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+
+<div itemscope itemtype="http://schema.org/Person">
+
+  
+
+  <div class="author__content">
+    <h3 class="author__name" itemprop="name">Asif Siddiqui</h3>
+    
+      <p class="author__bio" itemprop="description">
+	    
+	      
+	        Gopher, PaaS and Microservice
+	      
+	    
+      </p>
+    
+  </div>
+
+  <div class="author__urls-wrapper">
+    <button class="btn btn--inverse">关注</button>
+    <ul class="author__urls social-icons">
+      
+
+      
+        <li>
+          <a href="http://asifdxtreme.github.io" itemprop="url">
+            <i class="fa fa-fw fa-chain" aria-hidden="true"></i> 网站
+          </a>
+        </li>
+      
+
+      
+        <li>
+          <a href="mailto:mohammad.asif.siddiqui1@huawei.com">
+            <meta itemprop="email" content="mohammad.asif.siddiqui1@huawei.com" />
+            <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> 电子邮箱
+          </a>
+        </li>
+      
+
+      
+
+      
+        <li>
+          <a href="https://twitter.com/asif_diatm" itemprop="sameAs">
+            <i class="fa fa-fw fa-twitter-square" aria-hidden="true"></i> Twitter
+          </a>
+        </li>
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      <!--
+  <li>
+    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs">
+      <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link
+    </a>
+  </li>
+-->
+    </ul>
+  </div>
+</div>
+
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="Communication Between Service-Center and MicroServices">
+    <meta itemprop="description" content="An introduction of how service-center and microservices work together">
+    <meta itemprop="datePublished" content="August 09, 2017">
+    <meta itemprop="dateModified" content="August 09, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">Communication Between Service-Center and MicroServices
+</h1>
+            
+              <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  1 分钟 阅读
+
+</p>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <p>Service-Center(<a href="https://github.com/ServiceComb/service-center">SC</a>) is a service registry that allows services to register their instance information and to discover providers of a given service.
+SC uses etcd to store all the information of micro-service and its instances. Below is the diagram stating the working principles and flow of SC.</p>
+
+<h4 id="on-startup">On StartUp</h4>
+<p>Here we assume that micro-services are written using <a href="https://github.com/ServiceComb/java-chassis">java-chassis</a> sdk. So when micro-service boots up then java-chassis sdk does the following list of tasks.</p>
+
+<ol>
+  <li>
+    <p>On startup provider registers the micro-service to SC if not registered earlier and also register its instance information like its Ip and Port on which instance is running.</p>
+  </li>
+  <li>
+    <p>SC stores the provider information in etcd.</p>
+  </li>
+  <li>
+    <p>On startup consumer retrieves the list of all provider instance from SC using the micro-service name of the provider.</p>
+  </li>
+  <li>
+    <p>Consumer sdk stores all the information of provider instances in its cache.</p>
+  </li>
+  <li>
+    <p>Consumer sdk creates a web socket connection to SC to watch all the provider instance information, if there is any change in the provider then sdk updates it’s cache information.</p>
+  </li>
+</ol>
+
+<p><img src="/assets/images/onStartup.PNG" alt="OnStartup" class="align-center" /></p>
+
+<h4 id="communication-between-consumer---provider">Communication between Consumer -&gt; Provider</h4>
+<p>Once the bootup is successful then the consumer can communicate with providers flawlessly, below is the diagram illustrating the communication between provider and consumer.</p>
+
+<p><img src="/assets/images/communication.PNG" alt="Communication" class="align-center" /></p>
+
+<p>Provider instance regularly sends heartbeat signal every 30 seconds to SC, if SC does not recieve the heartbeat for particular instance then the information in etcd expires and the provider instance information is removed.<br />
+Consumer watches the information of provider instances from SC and if there is any change then the cache is updated.<br />
+When Consumer needs to communicate to Provider then consumer reads endpoints of the provider instances from cache and do loadbalancing to communicate to Provider.</p>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+  
+
+
+  
+  
+  
+
+  <p class="page__taxonomy">
+    <strong><i class="fa fa-fw fa-tags" aria-hidden="true"></i> 标签: </strong>
+    <span itemprop="keywords">
+    
+      
+      
+      <a href="/tags/#%E6%9C%8D%E5%8A%A1%E4%B8%AD%E5%BF%83" class="page__taxonomy-item" rel="tag">服务中心</a>
+    
+    </span>
+  </p>
+
+
+
+
+
+        
+          
+            
+              <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> 最新的:</strong> <time datetime="2017-08-09">2017年8月9日</time></p>
+            
+          
+        
+      </footer>
+
+      <section class="page__share">
+  
+    <h4 class="page__share-title">分享</h4>
+  
+
+  <a href="https://twitter.com/intent/tweet?via=ServiceComb&text=Communication Between Service-Center and MicroServices /cn/docs/communication-btw-sc-ms/" class="btn btn--twitter" title="分享 Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
+
+  <a href="https://www.facebook.com/sharer/sharer.php?u=/cn/docs/communication-btw-sc-ms/" class="btn btn--facebook" title="分享 Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
+
+  <a href="https://plus.google.com/share?url=/cn/docs/communication-btw-sc-ms/" class="btn btn--google-plus" title="分享 Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
+
+  <a href="https://www.linkedin.com/shareArticle?mini=true&url=/cn/docs/communication-btw-sc-ms/" class="btn btn--linkedin" title="分享 LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
+</section>
+
+
+      
+  <nav class="pagination">
+    
+      <a href="/docs/communication-btw-sc-ms/" class="pagination--pager" title="Communication Between Service-Center and MicroServices
+">向前</a>
+    
+    
+      <a href="/docs/company-on-kubernetes/" class="pagination--pager" title="One-click Deployment at Kubernetes
+">向后</a>
+    
+  </nav>
+
+
+    </div>
+
+    
+      <div class="page__comments">
+  
+  
+    <section id="static-comments">
+      
+        <!-- Start static comments -->
+        <div class="js-comments">
+          
+        </div>
+        <!-- End static comments -->
+
+        <!-- Start new comment form -->
+        <h4 class="page__comments-title">留下评论</h4>
+        <p class="small">您的电子邮箱地址并不会被展示。请填写标记为必须的字段。 <span class="required">*</span></p>
+        <form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/ServiceComb/servicesomb.github.io/master">
+          <div class="form__spinner">
+            <i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
+            <span class="sr-only">正在加载...</span>
+          </div>
+
+          <fieldset>
+            <label for="comment-form-message">评论 <small class="required">*</small></label>
+            <textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
+            <div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">Markdown语法已支持。</a></div>
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-name">姓名 <small class="required">*</small></label>
+            <input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-email">电子邮箱 <small class="required">*</small></label>
+            <input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-url">网站(可选)</label>
+            <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
+          </fieldset>
+          <fieldset class="hidden" style="display: none;">
+            <input type="hidden" name="options[slug]" value="communication-btw-sc-ms">
+            <label for="comment-form-location">Not used. Leave blank if you are a human.</label>
+            <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
+          </fieldset>
+          <!-- Start comment form alert messaging -->
+          <p class="hidden js-notice">
+            <strong class="js-notice-text"></strong>
+          </p>
+          <!-- End comment form alert messaging -->
+          <fieldset>
+            <button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--large">提交评论</button>
+          </fieldset>
+        </form>
+        <!-- End new comment form -->
+      
+    </section>
+  
+</div>
+
+    
+  </article>
+
+  
+  
+    <div class="page__related">
+      <h4 class="page__related-title">猜您还喜欢</h4>
+      <div class="grid__wrapper">
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/jira_beginner_guide/" rel="permalink">老司机带你刷任务 - ServiceComb JIRA入门指南
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">ServiceComb JIRA入门指南
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/how-to-reform-a-legacy-system/" rel="permalink">最头疼的遗留系统该如何改造?
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+      </div>
+    </div>
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _posts/cn/2017-08-09-communication-btw-sc-ms.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_posts/cn/2017-08-09-communication-btw-sc-ms.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  
+  <script>
+    (function ($) {
+    var $comments = $('.js-comments');
+
+    $('#new_comment').submit(function () {
+      var form = this;
+
+      $(form).addClass('disabled');
+      $('#comment-form-submit').html('<i class="fa fa-spinner fa-spin fa-fw"></i> 正在加载...');
+
+      $.ajax({
+        type: $(this).attr('method'),
+        url: $(this).attr('action'),
+        data: $(this).serialize(),
+        contentType: 'application/x-www-form-urlencoded',
+        success: function (data) {
+          $('#comment-form-submit').html('已提交');
+          $('.page__comments-form .js-notice').removeClass('notice--danger');
+          $('.page__comments-form .js-notice').addClass('notice--success');
+          showAlert('感谢您的评论!被批准后它会立即在此站点展示。');
+        },
+        error: function (err) {
+          console.log(err);
+          $('#comment-form-submit').html('提交评论');
+          $('.page__comments-form .js-notice').removeClass('notice--success');
+          $('.page__comments-form .js-notice').addClass('notice--danger');
+          showAlert('很抱歉,您的提交存在错误。请确保所有必填字段都已填写正确,然后再试一次。');
+          $(form).removeClass('disabled');
+        }
+      });
+
+      return false;
+    });
+
+    function showAlert(message) {
+      $('.page__comments-form .js-notice').removeClass('hidden');
+      $('.page__comments-form .js-notice-text').html(message);
+    }
+  })(jQuery);
+  </script>
+
+
+
+
+
+
+
+  </body>
+</html>


[41/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/docs/go-to-cloud/index.html
----------------------------------------------------------------------
diff --git a/content/cn/docs/go-to-cloud/index.html b/content/cn/docs/go-to-cloud/index.html
new file mode 100644
index 0000000..ddc8c5c
--- /dev/null
+++ b/content/cn/docs/go-to-cloud/index.html
@@ -0,0 +1,937 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>单体应用利用ServiceComb实现微服务化和云化之路 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="该文档演示:从已有基于spring boot的单体应用利用ServiceComb实现微服务化和云化之路">
+
+
+
+
+<meta name="author" content="Tank Tian">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="单体应用利用ServiceComb实现微服务化和云化之路">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/go-to-cloud/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/go-to-cloud/">
+
+
+
+  <meta property="og:description" content="该文档演示:从已有基于spring boot的单体应用利用ServiceComb实现微服务化和云化之路">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="单体应用利用ServiceComb实现微服务化和云化之路">
+  <meta name="twitter:description" content="该文档演示:从已有基于spring boot的单体应用利用ServiceComb实现微服务化和云化之路">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+    <meta name="twitter:creator" content="@">
+  
+
+
+
+  
+
+  
+
+
+
+
+
+  <meta property="og:type" content="article">
+  <meta property="article:published_time" content="2017-06-24T00:00:00+08:00">
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/docs/go-to-cloud/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+
+<div itemscope itemtype="http://schema.org/Person">
+
+  
+
+  <div class="author__content">
+    <h3 class="author__name" itemprop="name">Tank Tian</h3>
+    
+      <p class="author__bio" itemprop="description">
+	    
+	      
+	        How lucky we are. To be free.
+	      
+	    
+      </p>
+    
+  </div>
+
+  <div class="author__urls-wrapper">
+    <button class="btn btn--inverse">关注</button>
+    <ul class="author__urls social-icons">
+      
+
+      
+        <li>
+          <a href="https://tanktian.github.io/" itemprop="url">
+            <i class="fa fa-fw fa-chain" aria-hidden="true"></i> 网站
+          </a>
+        </li>
+      
+
+      
+        <li>
+          <a href="mailto:chd.tianming@gmail.com">
+            <meta itemprop="email" content="chd.tianming@gmail.com" />
+            <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> 电子邮箱
+          </a>
+        </li>
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      <!--
+  <li>
+    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs">
+      <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link
+    </a>
+  </li>
+-->
+    </ul>
+  </div>
+</div>
+
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="单体应用利用ServiceComb实现微服务化和云化之路">
+    <meta itemprop="description" content="该文档演示:从已有基于spring boot的单体应用利用ServiceComb实现微服务化和云化之路">
+    <meta itemprop="datePublished" content="June 24, 2017">
+    <meta itemprop="dateModified" content="June 24, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">单体应用利用ServiceComb实现微服务化和云化之路
+</h1>
+            
+              <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <h2 id="背景">背景</h2>
+
+<ol>
+  <li>
+    <p>Service Stage:微服务云应用平台,它是面向企业及开发者的一站式DevOps平台服务,支持基于微服务的应用开发、治理、部署及运维监控的全生命周期管理,并提供大规模容器集群管理及中间件服务等平台能力,帮助用户快速构建云分布式应用。</p>
+  </li>
+  <li>
+    <p>本指导以Acmeair demo的部署为例,演示如何使用ServiceComb (华为微服务框架开源版本)实现应用的微服务化,并利用Service Stage云平台上实现应用的云化。</p>
+  </li>
+</ol>
+
+<h2 id="服务化和云化步骤">服务化和云化步骤</h2>
+
+<ul>
+  <li>
+    <p>环境准备:基于Service Stage完成创建集群、添加节点等资源准备工作</p>
+  </li>
+  <li>
+    <p>微服务开发</p>
+
+    <ol>
+      <li>
+        <p>微服务的拆分设计</p>
+      </li>
+      <li>
+        <p>基于ServiceComb框架快速微服务化</p>
+      </li>
+      <li>
+        <p>制作镜像上传Service Stage软件仓库;</p>
+      </li>
+    </ol>
+  </li>
+  <li>
+    <p>应用上线:通过Service Stage从软件仓库获取版本实现部署上线;</p>
+  </li>
+  <li>
+    <p>应用运维:通过Service Stage对微服务或应用进行生命周期管理(部署-启动-上线-升级-扩容-停止-下线-删除)、告警、监控、调用链分析和治理等。</p>
+  </li>
+</ul>
+
+<h2 id="环境准备创建集群添加节点完成节点自动纳管">环境准备:创建集群、添加节点,完成节点自动纳管</h2>
+<h3 id="创建集群">创建集群</h3>
+<p>请参考<a href="http://support.hwclouds.com/usermanual-servicestage/zh-cn_topic_0053496188.html">创建集群详细指导</a><br />
+<img src="/assets/images/create-group.png" alt="create group" class="align-center" /></p>
+
+<h3 id="添加节点">添加节点</h3>
+<p>请参考<a href="http://support.hwclouds.com/usermanual-servicestage/zh-cn_topic_0053443149.html">为集群添加节点详细指导</a> <br />
+<img src="/assets/images/add-node.png" alt="add node" class="align-center" /></p>
+
+<h2 id="微服务开发">微服务开发</h2>
+<h3 id="应用架构设计划分微服务识别服务依赖关系">应用架构设计,划分微服务,识别服务依赖关系</h3>
+<p><img src="/assets/images/micro-service-design.png" alt="micro service design" class="align-center" /></p>
+
+<h3 id="创建微服务-单体应用微服务应用">创建微服务: 单体应用—&gt;微服务应用</h3>
+<p><img src="/assets/images/micro-service-structure.PNG" alt="micro service structure" class="align-center" /></p>
+
+<h3 id="简单4步servicecomb帮你完成微服务化改造">简单4步ServiceComb帮你完成微服务化改造</h3>
+<h4 id="step-1-pom引入对servicecomb的依赖">Step 1: POM引入对ServiceComb的依赖</h4>
+<p><img src="/assets/images/pom-dependence.png" alt="pom dependence" class="align-center" /></p>
+
+<h4 id="step-2-增加微服务描述文件和spring配置文件">Step 2 增加微服务描述文件和spring配置文件</h4>
+<p><img src="/assets/images/config-file.png" alt="config file" class="align-center" /></p>
+
+<h4 id="step-3-引入servicecomb注解一行代码完成服务发布">Step 3: 引入ServiceComb注解一行代码完成服务发布</h4>
+<p><img src="/assets/images/code-adjust.png" alt="code adjust" class="align-center" /></p>
+
+<h4 id="step-4-使用servicecomb接口简单创建resttemplate完成服务消费也支持注解方式进行消费">Step 4: 使用ServiceComb接口简单创建RestTemplate完成服务消费(也支持注解方式进行消费)</h4>
+<p><img src="/assets/images/service-consumer.png" alt="service consumer" class="align-center" /></p>
+
+<h3 id="制作镜像上传到云镜像中心">制作镜像上传到云镜像中心</h3>
+<p>请参考<a href="http://support.hwclouds.com/usermanual-servicestage/zh-cn_topic_0055101643.html">上传镜像详细指导</a><br />
+<img src="/assets/images/image-upload-1.png" alt="image upload 1" class="align-center" /><br />
+<img src="/assets/images/image-upload-2.png" alt="image upload 2" class="align-center" /></p>
+
+<h2 id="应用上线利用应用管理实现部署上线">应用上线:利用应用管理实现部署上线</h2>
+<p>请参考<a href="http://support.hwclouds.com/usermanual-servicestage/user_deployService.html">部署微服务详细指导</a> <br />
+<img src="/assets/images/service-deploy.png" alt="service deploy" class="align-center" /></p>
+
+<h2 id="应用运维保障应用平稳运行">应用运维:保障应用平稳运行</h2>
+<h3 id="微服务调用链分析">微服务调用链分析</h3>
+<p>请参考<a href="http://support.hwclouds.com/usermanual-servicestage/zh-cn_topic_0053555508.html">应用调用分析详细指导</a><br />
+ <img src="/assets/images/service-monitor-1.png" alt="service monitor 1" class="align-center" /></p>
+
+<h3 id="微服务状态监控">微服务状态监控</h3>
+<p>请参考<a href="http://support.hwclouds.com/usermanual-servicestage/zh-cn_topic_0053555506.html">应用监控详细指导</a><br />
+<img src="/assets/images/service-monitor-2.png" alt="service monitor 2" class="align-center" /></p>
+
+<h3 id="按需弹性伸缩">按需弹性伸缩</h3>
+<p>请参考<a href="http://support.hwclouds.com/usermanual-servicestage/zh-cn_topic_0054051691.html">弹性伸缩详细指导</a><br />
+<img src="/assets/images/scaling.png" alt="scaling" class="align-center" /></p>
+
+<h3 id="微服务可视化治理">微服务可视化治理</h3>
+<p>请参考<a href="http://support.hwclouds.com/usermanual-servicestage/zh-cn_topic_0053560172.html">微服务管理详细指导</a><br />
+<img src="/assets/images/governance.png" alt="governance" class="align-center" /></p>
+
+<h1 id="acmeair本地运行">Acmeair本地运行</h1>
+<p>本章节介绍在windows 64位环境下如何本地运行Acmeair</p>
+
+<h2 id="环境准备">环境准备</h2>
+
+<ul>
+  <li>
+    <p>JDK 1.8</p>
+  </li>
+  <li>
+    <p>maven 3.x</p>
+  </li>
+  <li>
+    <p>eclipse</p>
+  </li>
+  <li>
+    <p>service-center</p>
+
+    <p> 下载<a href="https://github.com/ServiceComb/service-center/releases">service-center-x.x.x-x-windows-amd64.zip</a>解压到任意目录</p>
+  </li>
+  <li>
+    <p>mongodb(可选)</p>
+  </li>
+  <li>
+    <p>下载<a href="https://github.com/TankTian/acmeair/archive/master.zip">acmeair源码</a></p>
+  </li>
+</ul>
+
+<h2 id="导入项目并构建">导入项目并构建</h2>
+<h3 id="将acmeair项目导入eclipse">将acmeair项目导入eclipse</h3>
+<p>Import - - Maven:Existing Maven Projects,选择代码所在的目录,点击finish完成导入  <br />
+<img src="/assets/images/import-project.png" alt="import project" class="align-center" /></p>
+
+<h3 id="pom文件报错missing-artifac-comhuaweipaascsexxxxx">pom文件报错,Missing artifac com.huawei.paas.cse:xxx:xx</h3>
+<p>该缺少的jar包为商业版本特性,请联系华为公有云 Service Stage 团队获取(此jar上云必选,否则无法使用Service Stage service centerc/config center/调用链等特性;本地调试时huawei商业版本的几个包依赖可以去掉,可以实现本地的服务发现和注册)。<br />
+如果需要将jar包复制到maven本地仓库中,具体包列表如下:<br />
+<img src="/assets/images/jar-list.png" alt="jar-list" class="align-center" /><br />
+eclispe中更新工程:Maven - - Update Project…</p>
+
+<h3 id="修改微服务描述文件">修改微服务描述文件</h3>
+
+<ol>
+  <li>
+    <p>acmeair-booking-service\src\main\resources\microservice.yaml<br />
+<img src="/assets/images/booking-microservice-yaml.png" alt="booking microservice yaml" class="align-center" /></p>
+  </li>
+  <li>
+    <p>acmeair-customer-service\src\main\resources\microservice.yaml <br />
+<img src="/assets/images/customer-microservice-yaml.png" alt="customer microservice yaml" class="align-center" /></p>
+  </li>
+  <li>
+    <p>acmeair-website\src\main\resources\microservice.yaml<br />
+<img src="/assets/images/website-microservice-yaml.png" alt="website microservice yaml" class="align-center" /></p>
+  </li>
+</ol>
+
+<h3 id="执行-mvn-install-结果-build-success-项目导入完成并成功构建">执行 mvn install 结果 BUILD SUCCESS ,项目导入完成并成功构建</h3>
+<p><img src="/assets/images/compile.png" alt="compile" class="align-center" /></p>
+
+<h2 id="启动服务">启动服务</h2>
+<h3 id="service-center">service-center</h3>
+<p>找到service-center-0.1.0-m1-windows-amd64解压目录,双击start.bat<br />
+<img src="/assets/images/servcie-center.png" alt="servcie center" class="align-center" /> <br />
+<img src="/assets/images/service-center-start-success.png" alt="service center start success" class="align-center" /></p>
+
+<h3 id="acmeair-booking">acmeair-booking</h3>
+<p>AcmeairApplication:Run As - - Run Configurations…<br />
+<img src="/assets/images/start-booking.png" alt="start booking" class="align-center" />  <br />
+watching microservice 2 successfully,服务注册成功<br />
+<img src="/assets/images/booking-start-success.png" alt="booking start success" class="align-center" /></p>
+
+<h3 id="acmeair-customer">acmeair-customer</h3>
+<p>CustomerServiceApplication:Run As - - Run Configurations…<br />
+<img src="/assets/images/start-customer.png" alt="start customer" class="align-center" /> <br />
+watching microservice 4 successfully,服务注册成功<br />
+<img src="/assets/images/customer-start-success.png" alt="customer start success" class="align-center" /></p>
+
+<h3 id="acmeair-website">acmeair-website</h3>
+<p>将acmeair-website\target\ROOT.war复制到tomcat webapps文件夹下,启动tomcat<br />
+<img src="/assets/images/start-website.png" alt="start website" class="align-center" /></p>
+
+<h2 id="前台访问">前台访问</h2>
+<p>输入http://localhost:8080<br />
+<img src="/assets/images/home-page.png" alt="home page" class="align-center" /></p>
+
+<p>点击网页最下端Acme航空配置<br />
+<img src="/assets/images/init-data.png" alt="init data" class="align-center" /></p>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+  
+
+
+  
+  
+  
+
+  <p class="page__taxonomy">
+    <strong><i class="fa fa-fw fa-tags" aria-hidden="true"></i> 标签: </strong>
+    <span itemprop="keywords">
+    
+      
+      
+      <a href="/tags/#%E5%8D%8E%E4%B8%BA%E4%BA%91" class="page__taxonomy-item" rel="tag">华为云</a>
+    
+    </span>
+  </p>
+
+
+
+
+
+        
+          
+            
+              <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> 最新的:</strong> <time datetime="2017-06-24">2017年6月24日</time></p>
+            
+          
+        
+      </footer>
+
+      <section class="page__share">
+  
+    <h4 class="page__share-title">分享</h4>
+  
+
+  <a href="https://twitter.com/intent/tweet?via=ServiceComb&text=单体应用利用ServiceComb实现微服务化和云化之路 /cn/docs/go-to-cloud/" class="btn btn--twitter" title="分享 Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
+
+  <a href="https://www.facebook.com/sharer/sharer.php?u=/cn/docs/go-to-cloud/" class="btn btn--facebook" title="分享 Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
+
+  <a href="https://plus.google.com/share?url=/cn/docs/go-to-cloud/" class="btn btn--google-plus" title="分享 Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
+
+  <a href="https://www.linkedin.com/shareArticle?mini=true&url=/cn/docs/go-to-cloud/" class="btn btn--linkedin" title="分享 LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
+</section>
+
+
+      
+  <nav class="pagination">
+    
+      <a href="/docs/go-to-cloud/" class="pagination--pager" title="单体应用利用ServiceComb实现微服务化和云化之路
+">向前</a>
+    
+    
+      <a href="/docs/tracing-with-servicecomb/" class="pagination--pager" title="Distributed Tracing with ServiceComb and Zipkin
+">向后</a>
+    
+  </nav>
+
+
+    </div>
+
+    
+      <div class="page__comments">
+  
+  
+    <section id="static-comments">
+      
+        <!-- Start static comments -->
+        <div class="js-comments">
+          
+        </div>
+        <!-- End static comments -->
+
+        <!-- Start new comment form -->
+        <h4 class="page__comments-title">留下评论</h4>
+        <p class="small">您的电子邮箱地址并不会被展示。请填写标记为必须的字段。 <span class="required">*</span></p>
+        <form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/ServiceComb/servicesomb.github.io/master">
+          <div class="form__spinner">
+            <i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
+            <span class="sr-only">正在加载...</span>
+          </div>
+
+          <fieldset>
+            <label for="comment-form-message">评论 <small class="required">*</small></label>
+            <textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
+            <div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">Markdown语法已支持。</a></div>
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-name">姓名 <small class="required">*</small></label>
+            <input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-email">电子邮箱 <small class="required">*</small></label>
+            <input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-url">网站(可选)</label>
+            <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
+          </fieldset>
+          <fieldset class="hidden" style="display: none;">
+            <input type="hidden" name="options[slug]" value="go-to-cloud">
+            <label for="comment-form-location">Not used. Leave blank if you are a human.</label>
+            <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
+          </fieldset>
+          <!-- Start comment form alert messaging -->
+          <p class="hidden js-notice">
+            <strong class="js-notice-text"></strong>
+          </p>
+          <!-- End comment form alert messaging -->
+          <fieldset>
+            <button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--large">提交评论</button>
+          </fieldset>
+        </form>
+        <!-- End new comment form -->
+      
+    </section>
+  
+</div>
+
+    
+  </article>
+
+  
+  
+    <div class="page__related">
+      <h4 class="page__related-title">猜您还喜欢</h4>
+      <div class="grid__wrapper">
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/jira_beginner_guide/" rel="permalink">老司机带你刷任务 - ServiceComb JIRA入门指南
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">ServiceComb JIRA入门指南
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/how-to-reform-a-legacy-system/" rel="permalink">最头疼的遗留系统该如何改造?
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+      </div>
+    </div>
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _posts/cn/2017-06-24-go-to-cloud.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_posts/cn/2017-06-24-go-to-cloud.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  
+  <script>
+    (function ($) {
+    var $comments = $('.js-comments');
+
+    $('#new_comment').submit(function () {
+      var form = this;
+
+      $(form).addClass('disabled');
+      $('#comment-form-submit').html('<i class="fa fa-spinner fa-spin fa-fw"></i> 正在加载...');
+
+      $.ajax({
+        type: $(this).attr('method'),
+        url: $(this).attr('action'),
+        data: $(this).serialize(),
+        contentType: 'application/x-www-form-urlencoded',
+        success: function (data) {
+          $('#comment-form-submit').html('已提交');
+          $('.page__comments-form .js-notice').removeClass('notice--danger');
+          $('.page__comments-form .js-notice').addClass('notice--success');
+          showAlert('感谢您的评论!被批准后它会立即在此站点展示。');
+        },
+        error: function (err) {
+          console.log(err);
+          $('#comment-form-submit').html('提交评论');
+          $('.page__comments-form .js-notice').removeClass('notice--success');
+          $('.page__comments-form .js-notice').addClass('notice--danger');
+          showAlert('很抱歉,您的提交存在错误。请确保所有必填字段都已填写正确,然后再试一次。');
+          $(form).removeClass('disabled');
+        }
+      });
+
+      return false;
+    });
+
+    function showAlert(message) {
+      $('.page__comments-form .js-notice').removeClass('hidden');
+      $('.page__comments-form .js-notice-text').html(message);
+    }
+  })(jQuery);
+  </script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/docs/how-to-reform-a-legacy-system/index.html
----------------------------------------------------------------------
diff --git a/content/cn/docs/how-to-reform-a-legacy-system/index.html b/content/cn/docs/how-to-reform-a-legacy-system/index.html
new file mode 100644
index 0000000..92312df
--- /dev/null
+++ b/content/cn/docs/how-to-reform-a-legacy-system/index.html
@@ -0,0 +1,1133 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>最头疼的遗留系统该如何改造? - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?">
+
+
+
+
+<meta name="author" content="Wang Lei">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="最头疼的遗留系统该如何改造?">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/how-to-reform-a-legacy-system/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/how-to-reform-a-legacy-system/">
+
+
+
+  <meta property="og:description" content="微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="最头疼的遗留系统该如何改造?">
+  <meta name="twitter:description" content="微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+    <meta name="twitter:creator" content="@">
+  
+
+
+
+  
+
+  
+
+
+
+
+
+  <meta property="og:type" content="article">
+  <meta property="article:published_time" content="2017-10-23T00:00:00+08:00">
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/docs/how-to-reform-a-legacy-system/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+
+<div itemscope itemtype="http://schema.org/Person">
+
+  
+
+  <div class="author__content">
+    <h3 class="author__name" itemprop="name">Wang Lei</h3>
+    
+      <p class="author__bio" itemprop="description">
+	    
+	      
+	        Happy Coding, Happy Life
+	      
+	    
+      </p>
+    
+  </div>
+
+  <div class="author__urls-wrapper">
+    <button class="btn btn--inverse">关注</button>
+    <ul class="author__urls social-icons">
+      
+
+      
+        <li>
+          <a href="https://wldandan.github.io" itemprop="url">
+            <i class="fa fa-fw fa-chain" aria-hidden="true"></i> 网站
+          </a>
+        </li>
+      
+
+      
+        <li>
+          <a href="mailto:wanglei177@huawei.com">
+            <meta itemprop="email" content="wanglei177@huawei.com" />
+            <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> 电子邮箱
+          </a>
+        </li>
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      <!--
+  <li>
+    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs">
+      <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link
+    </a>
+  </li>
+-->
+    </ul>
+  </div>
+</div>
+
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="最头疼的遗留系统该如何改造?">
+    <meta itemprop="description" content="微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?">
+    <meta itemprop="datePublished" content="October 23, 2017">
+    <meta itemprop="dateModified" content="October 23, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">最头疼的遗留系统该如何改造?
+</h1>
+            
+              <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <p>随着RESTful、云计算、DevOps、持续交付等概念的深入人心,微服务(Microservices)逐渐成为系统架构的一个代名词。那么微服务是否是业界期待已久的架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?在该分享中,王磊将通过实际的案例,跟大家探讨使用微服务改造遗留系统的实践之路。</p>
+
+<ul>
+  <li>什么是微服务</li>
+  <li>微服务的诞生背景</li>
+  <li>遗留系统的微服务改造策略</li>
+  <li>微服务改造之路</li>
+</ul>
+
+<h2 id="背景">背景</h2>
+<p>什么是系统架构设计?</p>
+
+<p>一直以来,系统架构设计是IT领域经久不衰的话题之一,是每个系统构建过程中极其关键的一部分,它决定了系统是否能够被正确、有效的构建。架构师们也一直在持续探索,寻找更优秀的架构设计方式来构建系统。</p>
+
+<p>那什么是系统的架构设计?对于这个问题,我相信每个朋友都会有不同的定义,实际上,也并没有一个标准的答案来解释什么是架构设计。</p>
+
+<p>基于我过去的经验和工作方式,我认为系统架构设计的本质,是在应用系统内部找到这样一个动态平衡:平衡业务、技术、团队的同时,考虑系统灵活性、可扩展性以及可维护性等因素,并将应用系统划分成不同的部分,使这些部分彼此之间相互分工、相互协作,从而为用户提供某种特定的价值的方式。</p>
+
+<p>随着RESTful、云计算、DevOps、持续交付等概念的深入人心,<strong>微服务架构逐渐成为系统架构的一个代名词</strong>。</p>
+
+<h2 id="什么是微服务架构">什么是微服务架构</h2>
+<p>2015年,微服务架构这个词,以相当高的频率出现在各种演讲、文章、会议、社区上。这里,我先和大家快速回顾一下,Martin Fowler对微服务的抽象。</p>
+
+<p><img src="/assets/images/microservice_definition_by_martin_folwer.jpeg" alt="" /></p>
+
+<p>如上所示,微服务架构的核心四要素,我用红色标注出来了。如果翻译成中文,大致如下所示:</p>
+
+<blockquote>
+  <p>微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。 每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相协作(通常是基于HTTP协议的RESTful API)。 每个服务都围绕着具体业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。 另外,对具体的服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建。</p>
+</blockquote>
+
+<p>总结成一句话就是<strong>微服务是围绕业务构建的细粒度的分布式系统</strong>。</p>
+
+<h2 id="微服务的诞生背景">微服务的诞生背景</h2>
+<p>2015年,微服务突然火了,为什么?</p>
+
+<p>其实微服务架构并不是技术创新,而是IT发展到现阶段对技术架构的一种阐释。</p>
+
+<p>它要求包括<strong>快速和业务对齐(aligning business)、理解和抽象业务(基于领域建模)、快速开发(Lean、Agile)、快速反馈和交付(CI、CD、DevOps)</strong>。</p>
+
+<p>所以说,微服务并不是技术,而是将化整为零(或称分治)思想换了一种说法,无论是把一个大型系统分割成多个小而自治的系统,还是把一个大型团队分成多个团队,或是把一个复杂的项目分成多个交付阶段都是这种思想的运用。</p>
+
+<p>当然,任何新事物的诞生,总会有一个推动因素。微服务的诞生也并非偶然。它是互联网高速发展,技术日新月异的变化以及传统架构无法适应快速变化等多重因素的推动下所诞生的产物。</p>
+
+<p>基于个人的理解,我将微服务的诞生因素总结为如下几点:</p>
+
+<p><img src="/assets/images/why_microservice_show_up.jpeg" alt="" /></p>
+
+<ol>
+  <li>
+    <p><strong>互联网行业的快速发展</strong></p>
+
+    <p>过去的十年中,互联网对我们的生活产生了翻天覆地的变化,越来越多的传统行业公司也开始依赖互联网技术打造其核心竞争优势。</p>
+
+    <p>在这种情况下,如何从系统架构的角度出发,构建灵活、易扩展的系统,快速应对需求的变化;同时,随着用户量的增加,如何保证系统的可伸缩性、高可用性,成为系统架构面临的挑战。</p>
+  </li>
+  <li>
+    <p><strong>单块架构系统面临的挑战</strong></p>
+
+    <p>随着用户需求个性化、产品生命周期变短、市场需求不稳定等因素的出现,单块架构系统面临着越来越多的挑战。如何找到一种更有效的、更灵活、适应需求的系统架构方式,成为大家关注的焦点。</p>
+  </li>
+  <li>
+    <p><strong>敏捷、精益方法、持续交付的深入人心</strong></p>
+
+    <p>在IT行业发展的过去十年,敏捷、精益、持续交付等价值观、方法论的提出以及实践,让很多组织意识到应变市场变化、提高响应力的重要性,应该构建软件交付周期的闭环(分析、开发、测试、部署、运维、监控、运营),而不仅仅是提高开发阶段的效率。</p>
+
+    <p><strong>精益创业(Lean Startup)</strong>帮助组织分析并建立最小可实行产品(MinimumViableProduct),通过迭代持续改进敏捷方法帮助组织消除浪费,通过反馈不断找到正确的方向。</p>
+
+    <p><strong>持续交付</strong>则帮助组织构建更快、更可靠、可频繁发布的交付机制并构建产品交付闭环。</p>
+
+    <p>大部分组织已经基本上形成了一套可实施的交付体系。包括持续集成、自动化测试、数据管理、自动化部署机制等。</p>
+
+    <p>这时候,大泥球式的单块架构,会逐渐成为影响交付周期进一步优化的瓶颈,因此如何找到灵活性高、扩展性好的架构方式,也成为进一步优化交付周期面临的挑战。</p>
+  </li>
+  <li>
+    <p><strong>Docker等容器虚拟化技术的快速发展</strong></p>
+
+    <p>同传统的虚拟化技术相比,基于容器技术的Docker,不需要复杂的Hypervisor机制支持,具有更高的虚拟化性能和效率。</p>
+
+    <p>同时容器可以很容易的运行在任意的装有DockerEngine的系统上,使得开发人员能够用更低的成本将应用程序部署在不同平台上。</p>
+  </li>
+  <li>
+    <p><strong>DevOps文化</strong></p>
+
+    <p>DevOps文化的推行打破了传统开发与运维之间的壁垒,帮助组织形成开发、运维紧密配合的、全功能化的高效团队,并尽早降低软件交付最后一公里的风险。</p>
+  </li>
+</ol>
+
+<h2 id="遗留系统的微服务改造策略">遗留系统的微服务改造策略</h2>
+<p>聊完什么是微服务架构以及其诞生背景,接下来我们来谈谈如何改造遗留系统。</p>
+
+<p>在过去的10多年间,大部分工作时间我都在和遗留系统打交道。我相信很多朋友也是工作在已经运转多年的遗留系统上。</p>
+
+<p>对于这类系统,当谈论使用微服务对其进行改造时,我认为要谨记一点:</p>
+
+<p><strong>改造不是重做。</strong></p>
+
+<p><strong>在改造的过程中,要始终以保证系统为用户提供的业务价值可用作为首要目标。</strong>从这个点出发,基于我的经验,对微服务改造的策略总结为如下五个步骤:</p>
+
+<p><img src="/assets/images/microservice_reform_strategy.jpeg" alt="" /></p>
+
+<ol>
+  <li>
+    <p>范围定义</p>
+
+    <p>对于遗留系统而言,通常业务运转时间较长(譬如5~8年以上,甚至更长),因此涉及的功能繁杂,代码中存在大量无效或者过时的需求,缺陷修复成本较高。</p>
+
+    <p>另外,系统在演进的过程中,也会持续为用户提供新的功能和价值。因此,划分出清晰的范围非常重要。</p>
+
+    <p>实际上,范围定义主要包括两部分:</p>
+
+    <ol>
+      <li>
+        <p>明确业务改造范围</p>
+
+        <p>所谓改造范围,就是确定我们常说的业务试点。通常,作为初次尝试微服务实践的组织,建议选取业务范围影响较小、非关键功能的试点,这样做也是为了确保在不影响核心业务的情况下快速尝试并获得反馈。</p>
+      </li>
+      <li>
+        <p>明确成员责任范围</p>
+
+        <p>明确成员责任范围,确定由谁来改造,确保改造的目标清晰。</p>
+
+        <p>实际上,对于产品而言,遗留系统的维护和更新,包括缺陷定位、缺陷修复、数据更新、功能实现、测试、交付给运维团队等,通常已经让团队的工作处于高负荷状态。因此,需要确定成员,全身心的投入,以微服务改造作为短期目标。</p>
+      </li>
+    </ol>
+  </li>
+  <li>
+    <p>功能剥离</p>
+
+    <p>有了明确的业务范围,成员也有了清晰的责任,接下来就需要将部分功能点进行剥离。</p>
+
+    <p>所谓剥离,就是将选中的功能从原有的系统中拆分出来,并构建成独立的服务。在这个阶段,主要包括两点:</p>
+
+    <ol>
+      <li>
+        <p>将功能从原有系统拆分出来,并构建新服务</p>
+
+        <p>一提到拆分,很多朋友会纠结,“系统复杂,如何拆分微服务才好?怎么样的拆分才合理?”。其实,从我个人的观点来看,这时候还不是纠结服务到底怎么划分合理的时候。为什么?</p>
+
+        <ol>
+          <li>
+            <p>好的架构是动态演变和迭代出来的,业务在不断改变,技术和工具也在不会的升级换代,没有完美的架构,只有无限逼近完美的动态平衡,所以先小范围、低成本动起来,在运转中找平衡点。</p>
+          </li>
+          <li>
+            <p>微服务的复杂度在于分布式系统本身,以及其生态系统(开发、测试、部署、运维、监控、告警)的搭建。</p>
+          </li>
+          <li>
+            <p>团队文化的形成是一个相对漫长的过程,如果花很大力气关注服务怎么拆,而没有聚焦在生态系统的搭建以及团队文化的形成上,实际上是舍本逐末。即便拆分出了不同的服务,在落地的时候也会遇到诸多问题。所以,找一个功能点先拆,然后搭建持续交付流水线,快速试错,建立好有效的反馈闭环机制,再不断寻找动态平衡,拆分出更细的服务或者将不合理的服务合并。</p>
+          </li>
+        </ol>
+      </li>
+      <li>
+        <p>在原有的系统前端,使用代理机制,并使用遗留系统和新服务组合为用户提供价值</p>
+
+        <p>这一步,目的是使用组合的系统(遗留系统+新的服务)为用户提供价值。</p>
+
+        <p>对于Web系统,通常可以在前端使用直接请求新的服务。也可以在后端使用转发请求,获取新服务提供的数据。</p>
+
+        <p>如下图所示:</p>
+
+        <p><img src="/assets/images/microservice_reform_strategy.jpeg" alt="" /></p>
+      </li>
+    </ol>
+  </li>
+  <li>
+    <p>数据解耦</p>
+
+    <p>在以前的遗留系统构建过程中,通常使用数据库作为集成点,不同功能/系统之间通过数据库完成数据交换。对于某些系统,还大量使用存储过程完成业务逻辑,开发的时候看似效率高,但几年下来,DBA成了IT团队最懂业务的人,维护成为瓶颈。</p>
+
+    <p>而实际上,业务的数据是业务固有的组成部分,应当随着业务的变化而变化。业务拆分出来,数据也应该拆分出来。从而保证访问数据只能通过统一的相关业务API完成。便于在将来的业务和架构演进中,有效的对数据维护、管理和升级。</p>
+  </li>
+  <li>
+    <p>数据同步</p>
+
+    <p>数据同步,是一个价值体现的过渡过程。</p>
+
+    <p>一方面,遗留系统的改造中存在的各种各样的挑战和我们今天认为的不合理(当时的场景也许是合理的)。另一方面,对于大部分遗留的系统,都会使用数据库作为集成点(开发成本低),导致某业务功能的数据与其他功能有着千丝万缕的联系,数据的变化容易对其他功能造成影响。</p>
+
+    <p>因此对于大型的遗留系统,很难在短期的时间内(3~6个月)完成全系统的改造。需要一个相对漫长,循序渐进的过程来完成改造。</p>
+
+    <p>譬如,在电商系统中,商家的后台管理系统中的产品、价格的更新,会发布到面向用户的电商搜索系统中以及其他系统中。如果我们将系统中的产品相关拆分成独立服务,则必须也要拆分数据发布机制,否则的话容易造成数据不一致。但拆分数据发布机制,又需要分析清楚不同数据之间的影响和依赖,需要更大的成本,短期内不易完成。</p>
+
+    <p>这时候,如果将新服务的数据同步回原有的数据库,采用这样一个折中的的过程,既能保障新的服务和数据被独立,又不影响原有的遗留系统功能。</p>
+
+    <p>说白了,这其实也是在保证系统为用户提供的业务价值不被破坏。</p>
+
+    <p>有了之前的尝试,接下来就是通过不断的迭代,完成功能剥离,数据解耦、数据同步,从而将更多的功能拆分成独立的服务。</p>
+  </li>
+</ol>
+
+<p><img src="/assets/images/legacy_system_reform_strategy.jpeg" alt="" /></p>
+
+<p>如上就是我对于遗留系统改造的策略。</p>
+
+<h2 id="遗留系统改造实践">遗留系统改造实践</h2>
+<p>接下来,我和大家分享一个我所经历的遗留系统改造的案例。首先,让我们看看这个系统的背景和一些数据。</p>
+
+<h3 id="客户背景">客户背景</h3>
+
+<p><a href="http://movit-tech.com/">盟拓软件</a>是中国房地产行业IT服务及行业解决方案和产品的领先厂家,其依据市场变化推出全民卖房的新营销模式,正从线下的传统现场售楼模式向线上的房地产电商模式进行转变。</p>
+
+<h3 id="业务痛点">业务痛点</h3>
+
+<p>当今房地产行业呈现短期开盘峰值、后期零星散客的业务特性。其面临着高昂线下运营成本,营销成本占销售额&gt;5%。而由此引入的线上竞价秒杀营销模式,传统IT解决方案的系统资源率、峰值扩容能力将无法满足。</p>
+
+<p><img src="/assets/images/case_mengtuo_traditional_mode.png" alt="" /></p>
+
+<h3 id="系统概览">系统概览</h3>
+
+<p>系统为典型的三层单块架构,使用MySQL数据库存储数据。运行在服务器上的应用处理性能较低,为了应对短暂的访问高峰,额外购置了较多的服务器资源,访问高峰过后,服务器资源闲置造成较大浪费,且需要较多人员维护。</p>
+
+<h3 id="相关数据">相关数据</h3>
+
+<ul>
+  <li>
+    <p>代码约<strong>100万</strong>行,测试覆盖率为<strong>10%</strong>,集成测试时间为<strong>一个月</strong></p>
+
+    <p>代码臃肿,无效遗留代码较多,且业务间紧耦合,测试覆盖率较低,测试出问题了难以定位,导致测试耗时较长。</p>
+  </li>
+  <li>
+    <p>营销预案需<strong>提前1个月</strong>准备资源</p>
+
+    <p>为应对访问高峰,每次都需要预购大量的服务资源,重新部署环境,并运行相关测试。</p>
+  </li>
+  <li>
+    <p>业务耦合紧,新业务上线<strong>&gt;半年</strong></p>
+
+    <p>每次测试都要多个业务团队联合测试,问题定位较耗时,测试效率低。</p>
+  </li>
+  <li>
+    <p>上百种业务,2-3种开发语言</p>
+
+    <p>业务复杂,且语言不一,系统联调时耗时较多且需相互配合,时间周期较长。</p>
+  </li>
+  <li>
+    <p>运维团队<strong>&gt;20人</strong></p>
+
+    <p>臃肿的团队导致问题定位需多方配合,沟通成本高。</p>
+  </li>
+</ul>
+
+<p><strong>基于之前定义的改造策略,我们的改造过程大致如下所示:</strong></p>
+
+<p>范围定义:</p>
+
+<ul>
+  <li>
+    <p>将原房地产CRM平台按业务类别拆分为多个微服务。</p>
+
+    <p><img src="/assets/images/case_mengtuo_reform_before_and_after.png" alt="" /></p>
+  </li>
+</ul>
+
+<p>功能剥离:</p>
+
+<ul>
+  <li>从单体CRM系统中逐步拆分出业务模块(服务网关、客户服务、房源服务、机会服务、积分服务)。</li>
+</ul>
+
+<p>数据解耦</p>
+
+<ul>
+  <li>每个微服务的数据进行独立存储。</li>
+</ul>
+
+<p>数据同步</p>
+
+<ul>
+  <li>在负载较低时,将数据同步回原有的遗留系统中不断迭代,陆续完成后续的服务。</li>
+</ul>
+
+<p>改造过程中,基于ServiceComb,<strong>通过控制请求路由,逐步架空对原单体应用的请求, 平滑过渡系统到微服务架构。</strong></p>
+
+<p><strong>单个服务的构建并没有那么复杂,基于ServiceComb,通过如下的简单4步,即可快速完成改造:</strong></p>
+
+<ol>
+  <li>引入<a href="https://github.com/ServiceComb/ServiceComb-Java-Chassis">ServiceComb Java Chassis</a>框架依赖</li>
+  <li>定义服务接口端点</li>
+  <li>添加服务配置文件</li>
+  <li>注释服务启动入口</li>
+</ol>
+
+<p>另外,通过Company Workshop中提供的Docker插件配置,10分钟内完成了服务容器化,自动生成镜像。</p>
+
+<p>同时,利用ServiceComb开发的微服务应用,可同时无缝接入<a href="https://www.huaweicloud.com/product/servicestage.html">ServiceStage</a>,享受到微服务治理、容器虚机混编、应用拓扑等能力。</p>
+
+<p>为应对短暂的业务高峰,经常需要预购大量的资源来提前部署和验证环境,花费大量的人力物力,且资源利用率极低。因此,进行云化改造后的产品和解决方案需要具备随着参与人数增加而秒级伸缩,支撑业务峰值和资源利用率的能力。盟拓软件基于华为ServiceStage的核心技术容器改造、混编方案、编排调度算法等进行容器虚机混编应用云化改造,实现了应用的秒级部署和弹性伸缩能力,极大地提高了资源的利用率。</p>
+
+<p><strong>改造后效果:</strong></p>
+
+<ul>
+  <li>运维人力<strong>减少80%</strong></li>
+  <li>资源利用率<strong>提升50%</strong>,大幅降低运营成本</li>
+  <li><strong>每秒万级</strong>调用链分析能力</li>
+  <li>传统系统和应用平滑改造上云</li>
+  <li>互联网营销模式,天粒度业务快速创新</li>
+</ul>
+
+<p><img src="/assets/images/case_mengtuo_new_mode.png" alt="" /></p>
+
+<p><strong>理论上,经过不断地迭代,逐渐完成业务功能解耦,新服务构建。那么遗留系统就会被替换掉。</strong></p>
+
+<h2 id="改造要点">改造要点</h2>
+<p>在改造的整个过程中,我认为如下几个实践是非常重要的:</p>
+
+<p><img src="/assets/images/best_practices_for_legacy_system_reform.jpeg" alt="" /></p>
+
+<h3 id="基础设施自动化">基础设施自动化</h3>
+<p>原有的部署发生在数据中心,因此流程上相对复杂,而且存在一定弊端(譬如审批和协作上,起不到实质作用)。对于改造后的服务而言,我们使用更多的自动化方式代替复杂的审批流程。通过使用华为ServiceStage作为基础设施,团队能够更自主的对基础设施进行管理。如资源创建、销毁、更新等。随着服务的增多,基础设施自动化帮助我们节省了大量的时间。当然,从组织层面,也成立了专门的小组研究华为ServiceStage以及相关的DevOps配套工具。</p>
+
+<p>目前,国内外有很多优秀的云平台,可以方便的为用户提供基础设施的自动化机制。</p>
+
+<h3 id="微服务生态系统">微服务生态系统</h3>
+<p>微服务的生态系统是指微服务实施过程相关的协作部分,涉及部分较多,譬如测试机制、持续集成、自动化部署、细粒度监控、日志聚合、告警、持续交付,以及大家非常关注的服务注册、服务发现机制等。</p>
+
+<p>这部分的灵活性比较大,因为目前如上说的每一个领域都有很多优秀的工具。譬如日志聚合目前业界的方案通常为ELK,监控的方案如Zabbix、NewRelic、CloudWatch等,成熟的监控工具都具有告警功能,PagerDuty也提供更专业的告警服务。服务注册和发现有ServiceComb框架的Service Center,Eureka,Consul,Zookeeper。大家可以在各自的团队中自由发挥。</p>
+
+<h3 id="开发框架的演进">开发框架的演进</h3>
+<p>开发框架是团队在构建微服务的过程中,不断总结,梳理出的快速开发微服务的相关工具和框架。</p>
+
+<p>我们基于ServiceComb构建了快速开发框架,主要包括四部分,如下图所示:</p>
+
+<p><img src="/assets/images/rapid_development_framework.png" alt="" /></p>
+
+<ol>
+  <li>
+    <p>微服务工程示例</p>
+
+    <p>提供微服务改造架构最佳实践参考工程Company,使能微服务改造或开发能复用其架构设计和配置,同时指导实现服务容器化和后续服务性能测试等提高服务可靠性。</p>
+  </li>
+  <li>
+    <p>契约生成工具</p>
+
+    <p>ServiceComb采用了基于OpenAPI的服务契约,使业务逻辑与编程语言解耦,并可使用Swagger工具定义服务契约,自动生成契约对应的代码和文档。</p>
+  </li>
+  <li>
+    <p>持续集成</p>
+
+    <p>持续集成使用了Jenkins,通过其配置文件定义主要的阶段:</p>
+
+    <blockquote>
+      <p>验证:运行单元测试,集成测试</p>
+
+      <p>构建:构建可执行的jar部署包</p>
+
+      <p>部署:基于指定版本制作镜像,并推送到测试或生产环境下</p>
+    </blockquote>
+
+    <p>利用这样的持续集成模板工程,花费很少的时间,就可以针对新建的微服务应用,快速配置其对应的持续集成环境。</p>
+  </li>
+  <li>
+    <p>Kubernetes集群一键部署</p>
+
+    <p>Kubernetes是谷歌开源的一个容器集群管理工具。基于Kubernetes,可实现微服务的快速部署及弹性伸缩。我们提供了一键部署脚本,部署时只需稍作修改即可通过一条命令,自动完成资源的创建、部署、弹性伸缩、金丝雀发布等。</p>
+  </li>
+</ol>
+
+<h3 id="团队运维自管理">团队运维自管理</h3>
+
+<p>这一部分是关于团队的文化管理。也是对DevOPS的延伸,我们称为TMI(Team Managed Infrastructure)。</p>
+
+<p>目的是将分析、开发、测试以及资源创建、销毁、自动化部署的权利交给团队,由团队按需完成部署(加上看板的流程管理,而非Scrum的固定迭代,可以做到一天部署多次)。</p>
+
+<p>当然,这个环节非常依赖于成熟的监控以及告警机制,当出现问题时,能够有效的通知到责任人,快速反馈,快速修复。团队内部也会定期轮换Pager(出问题救火的人),培养团队以服务可用作为大家的共同目标,培养产品观念,而非项目观念。</p>
+
+<p>再回顾一下这个图:</p>
+
+<p><img src="/assets/images/best_practices_for_legacy_system_reform.jpeg" alt="" /></p>
+
+<p>最后,和大家分享一下,我个人在微服务实施过程中总结的4句方针:</p>
+
+<p><strong>由大到小,由粗到细</strong></p>
+
+<p><strong>关注运维,关注监控</strong></p>
+
+<p><strong>快速反馈,快速修复</strong></p>
+
+<p><strong>循序渐进,增量实现</strong></p>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+  
+
+
+  
+  
+  
+
+  <p class="page__taxonomy">
+    <strong><i class="fa fa-fw fa-tags" aria-hidden="true"></i> 标签: </strong>
+    <span itemprop="keywords">
+    
+      
+      
+      <a href="/tags/#%E7%B3%BB%E7%BB%9F%E6%94%B9%E9%80%A0" class="page__taxonomy-item" rel="tag">系统改造</a>
+    
+    </span>
+  </p>
+
+
+
+
+
+        
+          
+            
+              <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> 最新的:</strong> <time datetime="2017-10-23">2017年10月23日</time></p>
+            
+          
+        
+      </footer>
+
+      <section class="page__share">
+  
+    <h4 class="page__share-title">分享</h4>
+  
+
+  <a href="https://twitter.com/intent/tweet?via=ServiceComb&text=最头疼的遗留系统该如何改造? /cn/docs/how-to-reform-a-legacy-system/" class="btn btn--twitter" title="分享 Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
+
+  <a href="https://www.facebook.com/sharer/sharer.php?u=/cn/docs/how-to-reform-a-legacy-system/" class="btn btn--facebook" title="分享 Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
+
+  <a href="https://plus.google.com/share?url=/cn/docs/how-to-reform-a-legacy-system/" class="btn btn--google-plus" title="分享 Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
+
+  <a href="https://www.linkedin.com/shareArticle?mini=true&url=/cn/docs/how-to-reform-a-legacy-system/" class="btn btn--linkedin" title="分享 LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
+</section>
+
+
+      
+  <nav class="pagination">
+    
+      <a href="/docs/how-to-reform-a-legacy-system/" class="pagination--pager" title="最头疼的遗留系统该如何改造?
+">向前</a>
+    
+    
+      <a href="/docs/service-center-ui/" class="pagination--pager" title="Service-Center Management UI Console
+">向后</a>
+    
+  </nav>
+
+
+    </div>
+
+    
+      <div class="page__comments">
+  
+  
+    <section id="static-comments">
+      
+        <!-- Start static comments -->
+        <div class="js-comments">
+          
+        </div>
+        <!-- End static comments -->
+
+        <!-- Start new comment form -->
+        <h4 class="page__comments-title">留下评论</h4>
+        <p class="small">您的电子邮箱地址并不会被展示。请填写标记为必须的字段。 <span class="required">*</span></p>
+        <form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/ServiceComb/servicesomb.github.io/master">
+          <div class="form__spinner">
+            <i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
+            <span class="sr-only">正在加载...</span>
+          </div>
+
+          <fieldset>
+            <label for="comment-form-message">评论 <small class="required">*</small></label>
+            <textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
+            <div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">Markdown语法已支持。</a></div>
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-name">姓名 <small class="required">*</small></label>
+            <input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-email">电子邮箱 <small class="required">*</small></label>
+            <input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-url">网站(可选)</label>
+            <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
+          </fieldset>
+          <fieldset class="hidden" style="display: none;">
+            <input type="hidden" name="options[slug]" value="how-to-reform-a-legacy-system">
+            <label for="comment-form-location">Not used. Leave blank if you are a human.</label>
+            <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
+          </fieldset>
+          <!-- Start comment form alert messaging -->
+          <p class="hidden js-notice">
+            <strong class="js-notice-text"></strong>
+          </p>
+          <!-- End comment form alert messaging -->
+          <fieldset>
+            <button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--large">提交评论</button>
+          </fieldset>
+        </form>
+        <!-- End new comment form -->
+      
+    </section>
+  
+</div>
+
+    
+  </article>
+
+  
+  
+    <div class="page__related">
+      <h4 class="page__related-title">猜您还喜欢</h4>
+      <div class="grid__wrapper">
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/jira_beginner_guide/" rel="permalink">老司机带你刷任务 - ServiceComb JIRA入门指南
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">ServiceComb JIRA入门指南
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/how-to-reform-a-legacy-system/" rel="permalink">最头疼的遗留系统该如何改造?
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+      </div>
+    </div>
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _posts/cn/2017-10-23-how-to-reform-a-legacy-system.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_posts/cn/2017-10-23-how-to-reform-a-legacy-system.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  
+  <script>
+    (function ($) {
+    var $comments = $('.js-comments');
+
+    $('#new_comment').submit(function () {
+      var form = this;
+
+      $(form).addClass('disabled');
+      $('#comment-form-submit').html('<i class="fa fa-spinner fa-spin fa-fw"></i> 正在加载...');
+
+      $.ajax({
+        type: $(this).attr('method'),
+        url: $(this).attr('action'),
+        data: $(this).serialize(),
+        contentType: 'application/x-www-form-urlencoded',
+        success: function (data) {
+          $('#comment-form-submit').html('已提交');
+          $('.page__comments-form .js-notice').removeClass('notice--danger');
+          $('.page__comments-form .js-notice').addClass('notice--success');
+          showAlert('感谢您的评论!被批准后它会立即在此站点展示。');
+        },
+        error: function (err) {
+          console.log(err);
+          $('#comment-form-submit').html('提交评论');
+          $('.page__comments-form .js-notice').removeClass('notice--success');
+          $('.page__comments-form .js-notice').addClass('notice--danger');
+          showAlert('很抱歉,您的提交存在错误。请确保所有必填字段都已填写正确,然后再试一次。');
+          $(form).removeClass('disabled');
+        }
+      });
+
+      return false;
+    });
+
+    function showAlert(message) {
+      $('.page__comments-form .js-notice').removeClass('hidden');
+      $('.page__comments-form .js-notice-text').html(message);
+    }
+  })(jQuery);
+  </script>
+
+
+
+
+
+
+
+  </body>
+</html>


[42/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/docs/distributed_saga_2/index.html
----------------------------------------------------------------------
diff --git a/content/cn/docs/distributed_saga_2/index.html b/content/cn/docs/distributed_saga_2/index.html
new file mode 100644
index 0000000..5d2a9ef
--- /dev/null
+++ b/content/cn/docs/distributed_saga_2/index.html
@@ -0,0 +1,856 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>ServiceComb中的数据最终一致性方案 - part 2 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="ServiceComb中的分布式Saga设计">
+
+
+
+
+<meta name="author" content="Sean Yin">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="ServiceComb中的数据最终一致性方案 - part 2">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/distributed_saga_2/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/distributed_saga_2/">
+
+
+
+  <meta property="og:description" content="ServiceComb中的分布式Saga设计">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="ServiceComb中的数据最终一致性方案 - part 2">
+  <meta name="twitter:description" content="ServiceComb中的分布式Saga设计">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+    <meta name="twitter:creator" content="@seanyinx">
+  
+
+
+
+  
+
+  
+
+
+
+
+
+  <meta property="og:type" content="article">
+  <meta property="article:published_time" content="2017-09-16T00:00:00+08:00">
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/docs/distributed_saga_2/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+
+<div itemscope itemtype="http://schema.org/Person">
+
+  
+
+  <div class="author__content">
+    <h3 class="author__name" itemprop="name">Sean Yin</h3>
+    
+      <p class="author__bio" itemprop="description">
+	    
+	      
+	        Nothing but speed is indestructible
+	      
+	    
+      </p>
+    
+  </div>
+
+  <div class="author__urls-wrapper">
+    <button class="btn btn--inverse">关注</button>
+    <ul class="author__urls social-icons">
+      
+
+      
+        <li>
+          <a href="http://seanyinx.github.io" itemprop="url">
+            <i class="fa fa-fw fa-chain" aria-hidden="true"></i> 网站
+          </a>
+        </li>
+      
+
+      
+        <li>
+          <a href="mailto:seanyinx@gmail.com">
+            <meta itemprop="email" content="seanyinx@gmail.com" />
+            <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> 电子邮箱
+          </a>
+        </li>
+      
+
+      
+
+      
+        <li>
+          <a href="https://twitter.com/seanyinx" itemprop="sameAs">
+            <i class="fa fa-fw fa-twitter-square" aria-hidden="true"></i> Twitter
+          </a>
+        </li>
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      <!--
+  <li>
+    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs">
+      <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link
+    </a>
+  </li>
+-->
+    </ul>
+  </div>
+</div>
+
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="ServiceComb中的数据最终一致性方案 - part 2">
+    <meta itemprop="description" content="ServiceComb中的分布式Saga设计">
+    <meta itemprop="datePublished" content="September 16, 2017">
+    <meta itemprop="dateModified" content="September 16, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">ServiceComb中的数据最终一致性方案 - part 2
+</h1>
+            
+              <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <p>在我的前一篇<a href="/cn/docs/distributed_saga_1/">文章</a>,我谈到怎么用<a href="https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf">Saga</a>解决行程规划应用的数据一致性问题。
+现在让我们尝试设计实现Saga。</p>
+
+<h2 id="saga-log">Saga Log</h2>
+<p>Saga保证所有的子事务都得以完成或补偿,但Saga系统本身也可能会崩溃。Saga崩溃时可能处于以下几个状态:</p>
+<ul>
+  <li>Saga收到事务请求,但尚未开始。因子事务对应的微服务状态未被Saga修改,我们什么也不需要做。</li>
+  <li>一些子事务已经完成。重启后,Saga必须接着上次完成的事务恢复。</li>
+  <li>子事务已开始,但尚未完成。由于远程服务可能已完成事务,也可能事务失败,甚至服务请求超时,saga只能重新发起之前未确认完成的子事务。这意味着子事务必须幂等。</li>
+  <li>子事务失败,其补偿事务尚未开始。Saga必须在重启后执行对应补偿事务。</li>
+  <li>补偿事务已开始但尚未完成。解决方案与上一个相同。这意味着补偿事务也必须是幂等的。</li>
+  <li>所有子事务或补偿事务均已完成,与第一种情况相同。</li>
+</ul>
+
+<p>为了恢复到上述状态,我们必须追踪子事务及补偿事务的每一步。我们决定通过事件的方式达到以上要求,并将以下事件保存在名为saga log的持久存储中:</p>
+<ul>
+  <li><strong>Saga started event</strong> 保存整个saga请求,其中包括多个事务/补偿请求</li>
+  <li><strong>Transaction started event</strong> 保存对应事务请求</li>
+  <li><strong>Transaction ended event</strong> 保存对应事务请求及其回复</li>
+  <li><strong>Transaction aborted event</strong> 保存对应事务请求和失败的原因</li>
+  <li><strong>Transaction compensated event</strong> 保存对应补偿请求及其回复</li>
+  <li><strong>Saga ended event</strong> 标志着saga事务请求的结束,不需要保存任何内容</li>
+</ul>
+
+<p><img src="/assets/images/saga.events.png" alt="Events" class="align-center" /></p>
+
+<p>通过将这些事件持久化在saga log中,我们可以将saga恢复到上述任何状态。</p>
+
+<p>由于Saga只需要做事件的持久化,而事件内容以JSON的形式存储,Saga log的实现非常灵活,数据库(SQL或NoSQL),持久消息队列,甚至普通文件可以用作事件存储,
+当然有些能更快得帮saga恢复状态。</p>
+
+<h2 id="saga请求的数据结构">Saga请求的数据结构</h2>
+<p>在我们的业务场景下,航班预订、租车、和酒店预订没有依赖关系,可以并行处理,但对于我们的客户来说,只在所有预订成功后一次付费更加友好。
+那么这四个服务的事务关系可以用下图表示:</p>
+
+<p><img src="/assets/images/saga.transactions.png" alt="Transactions" class="align-center" /></p>
+
+<p>将行程规划请求的数据结构实现为<a href="https://en.wikipedia.org/wiki/Directed_acyclic_graph">有向非循环图</a>恰好合适。
+图的根是saga启动任务,叶是saga结束任务。</p>
+
+<p><img src="/assets/images/saga.graph.png" alt="Request Graph" class="align-center" /></p>
+
+<h2 id="parallel-saga">Parallel Saga</h2>
+<p>如上所述,航班预订,租车和酒店预订可以并行处理。但是这样做会造成另一个问题:如果航班预订失败,而租车正在处理怎么办?我们不能一直等待租车服务回应,
+因为不知道需要等多久。</p>
+
+<p>最好的办法是再次发送租车请求,获得回应,以便我们能够继续补偿操作。但如果租车服务永不回应,我们可能需要采取回退措施,比如手动干预。</p>
+
+<p>超时的预订请求可能最后仍被租车服务收到,这时服务已经处理了相同的预订和取消请求。</p>
+
+<p><img src="/assets/images/saga.commutative.png" alt="Network Latency" class="align-center" /></p>
+
+<p>因此,服务的实现必须保证补偿请求执行以后,再次收到的对应事务请求无效。
+Caitie McCaffrey在她的演讲<a href="https://www.youtube.com/watch?v=1H6tounpnG8">Distributed Sagas: A Protocol for Coordinating Microservices</a>中把这个称为<strong>可交换的补偿请求 (commutative compensating request)</strong> 。</p>
+
+<h2 id="acid-and-saga">ACID and Saga</h2>
+<p><a href="https://en.wikipedia.org/wiki/ACID">ACID</a>是具有以下属性的一致性模型:</p>
+<ul>
+  <li>原子性(Atomicity)</li>
+  <li>一致性(Consistency)</li>
+  <li>隔离性(Isolation)</li>
+  <li>持久性(Durability)</li>
+</ul>
+
+<p>Saga不提供ACID保证,因为原子性和隔离性不能得到满足。原<a href="https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf">论文</a>描述如下:</p>
+<blockquote>
+  <p>full atomicity is not provided. That is, sagas may view the partial results of other sagas [<a href="https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf">1</a>]</p>
+</blockquote>
+
+<p>通过saga log,saga可以保证一致性和持久性。</p>
+
+<h2 id="saga-架构">Saga 架构</h2>
+<p>最后,我们的Saga架构如下</p>
+
+<p><img src="/assets/images/saga.design.png" alt="Saga Architecture" class="align-center" /></p>
+
+<ul>
+  <li>Saga Execution Component解析请求JSON并构建请求图</li>
+  <li>TaskRunner 用任务队列确保请求的执行顺序</li>
+  <li>TaskConsumer 处理Saga任务,将事件写入saga log,并将请求发送到远程服务</li>
+</ul>
+
+<h2 id="总结">总结</h2>
+<p>本文讨论了如何实现saga,通过saga log来保存事务和补偿事件。也提到如何从saga log中持久化的事件恢复崩溃的saga系统。
+为了满足saga的一致性保证,微服务的设计有以下几个要求:</p>
+<ul>
+  <li>事务和赔偿请求必须幂等</li>
+  <li>补偿请求必须可交换(commutative)</li>
+</ul>
+
+<h2 id="references">References</h2>
+<ol>
+  <li><a href="https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf">Original Paper on Sagas</a> by By Hector Garcia-Molina &amp; Kenneth Salem</li>
+</ol>
+
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+  
+
+
+  
+  
+  
+
+  <p class="page__taxonomy">
+    <strong><i class="fa fa-fw fa-tags" aria-hidden="true"></i> 标签: </strong>
+    <span itemprop="keywords">
+    
+      
+      
+      <a href="/tags/#%E4%BA%8B%E5%8A%A1%E4%B8%80%E8%87%B4%E6%80%A7" class="page__taxonomy-item" rel="tag">事务一致性</a>
+    
+    </span>
+  </p>
+
+
+
+
+
+        
+          
+            
+              <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> 最新的:</strong> <time datetime="2017-09-16">2017年9月16日</time></p>
+            
+          
+        
+      </footer>
+
+      <section class="page__share">
+  
+    <h4 class="page__share-title">分享</h4>
+  
+
+  <a href="https://twitter.com/intent/tweet?via=ServiceComb&text=ServiceComb中的数据最终一致性方案 - part 2 /cn/docs/distributed_saga_2/" class="btn btn--twitter" title="分享 Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
+
+  <a href="https://www.facebook.com/sharer/sharer.php?u=/cn/docs/distributed_saga_2/" class="btn btn--facebook" title="分享 Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
+
+  <a href="https://plus.google.com/share?url=/cn/docs/distributed_saga_2/" class="btn btn--google-plus" title="分享 Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
+
+  <a href="https://www.linkedin.com/shareArticle?mini=true&url=/cn/docs/distributed_saga_2/" class="btn btn--linkedin" title="分享 LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
+</section>
+
+
+      
+  <nav class="pagination">
+    
+      <a href="/docs/distributed_saga_2/" class="pagination--pager" title="Eventual Data Consistency Solution in ServiceComb - part 2
+">向前</a>
+    
+    
+      <a href="/docs/distributed_saga_3/" class="pagination--pager" title="Eventual Data Consistency Solution in ServiceComb - part 3
+">向后</a>
+    
+  </nav>
+
+
+    </div>
+
+    
+      <div class="page__comments">
+  
+  
+    <section id="static-comments">
+      
+        <!-- Start static comments -->
+        <div class="js-comments">
+          
+        </div>
+        <!-- End static comments -->
+
+        <!-- Start new comment form -->
+        <h4 class="page__comments-title">留下评论</h4>
+        <p class="small">您的电子邮箱地址并不会被展示。请填写标记为必须的字段。 <span class="required">*</span></p>
+        <form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/ServiceComb/servicesomb.github.io/master">
+          <div class="form__spinner">
+            <i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
+            <span class="sr-only">正在加载...</span>
+          </div>
+
+          <fieldset>
+            <label for="comment-form-message">评论 <small class="required">*</small></label>
+            <textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
+            <div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">Markdown语法已支持。</a></div>
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-name">姓名 <small class="required">*</small></label>
+            <input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-email">电子邮箱 <small class="required">*</small></label>
+            <input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-url">网站(可选)</label>
+            <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
+          </fieldset>
+          <fieldset class="hidden" style="display: none;">
+            <input type="hidden" name="options[slug]" value="saga-design">
+            <label for="comment-form-location">Not used. Leave blank if you are a human.</label>
+            <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
+          </fieldset>
+          <!-- Start comment form alert messaging -->
+          <p class="hidden js-notice">
+            <strong class="js-notice-text"></strong>
+          </p>
+          <!-- End comment form alert messaging -->
+          <fieldset>
+            <button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--large">提交评论</button>
+          </fieldset>
+        </form>
+        <!-- End new comment form -->
+      
+    </section>
+  
+</div>
+
+    
+  </article>
+
+  
+  
+    <div class="page__related">
+      <h4 class="page__related-title">猜您还喜欢</h4>
+      <div class="grid__wrapper">
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/jira_beginner_guide/" rel="permalink">老司机带你刷任务 - ServiceComb JIRA入门指南
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">ServiceComb JIRA入门指南
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/how-to-reform-a-legacy-system/" rel="permalink">最头疼的遗留系统该如何改造?
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+      </div>
+    </div>
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _posts/cn/2017-09-16-saga-design.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_posts/cn/2017-09-16-saga-design.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  
+  <script>
+    (function ($) {
+    var $comments = $('.js-comments');
+
+    $('#new_comment').submit(function () {
+      var form = this;
+
+      $(form).addClass('disabled');
+      $('#comment-form-submit').html('<i class="fa fa-spinner fa-spin fa-fw"></i> 正在加载...');
+
+      $.ajax({
+        type: $(this).attr('method'),
+        url: $(this).attr('action'),
+        data: $(this).serialize(),
+        contentType: 'application/x-www-form-urlencoded',
+        success: function (data) {
+          $('#comment-form-submit').html('已提交');
+          $('.page__comments-form .js-notice').removeClass('notice--danger');
+          $('.page__comments-form .js-notice').addClass('notice--success');
+          showAlert('感谢您的评论!被批准后它会立即在此站点展示。');
+        },
+        error: function (err) {
+          console.log(err);
+          $('#comment-form-submit').html('提交评论');
+          $('.page__comments-form .js-notice').removeClass('notice--success');
+          $('.page__comments-form .js-notice').addClass('notice--danger');
+          showAlert('很抱歉,您的提交存在错误。请确保所有必填字段都已填写正确,然后再试一次。');
+          $(form).removeClass('disabled');
+        }
+      });
+
+      return false;
+    });
+
+    function showAlert(message) {
+      $('.page__comments-form .js-notice').removeClass('hidden');
+      $('.page__comments-form .js-notice-text').html(message);
+    }
+  })(jQuery);
+  </script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/docs/distributed_saga_3/index.html
----------------------------------------------------------------------
diff --git a/content/cn/docs/distributed_saga_3/index.html b/content/cn/docs/distributed_saga_3/index.html
new file mode 100644
index 0000000..ab3477e
--- /dev/null
+++ b/content/cn/docs/distributed_saga_3/index.html
@@ -0,0 +1,878 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>ServiceComb中的数据最终一致性方案 - part 3 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="Saga和其他数据一致性解决方案相比有什么不同之处?">
+
+
+
+
+<meta name="author" content="Sean Yin">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="ServiceComb中的数据最终一致性方案 - part 3">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/distributed_saga_3/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/distributed_saga_3/">
+
+
+
+  <meta property="og:description" content="Saga和其他数据一致性解决方案相比有什么不同之处?">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="ServiceComb中的数据最终一致性方案 - part 3">
+  <meta name="twitter:description" content="Saga和其他数据一致性解决方案相比有什么不同之处?">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+    <meta name="twitter:creator" content="@seanyinx">
+  
+
+
+
+  
+
+  
+
+
+
+
+
+  <meta property="og:type" content="article">
+  <meta property="article:published_time" content="2017-09-18T00:00:00+08:00">
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/docs/distributed_saga_3/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+
+<div itemscope itemtype="http://schema.org/Person">
+
+  
+
+  <div class="author__content">
+    <h3 class="author__name" itemprop="name">Sean Yin</h3>
+    
+      <p class="author__bio" itemprop="description">
+	    
+	      
+	        Nothing but speed is indestructible
+	      
+	    
+      </p>
+    
+  </div>
+
+  <div class="author__urls-wrapper">
+    <button class="btn btn--inverse">关注</button>
+    <ul class="author__urls social-icons">
+      
+
+      
+        <li>
+          <a href="http://seanyinx.github.io" itemprop="url">
+            <i class="fa fa-fw fa-chain" aria-hidden="true"></i> 网站
+          </a>
+        </li>
+      
+
+      
+        <li>
+          <a href="mailto:seanyinx@gmail.com">
+            <meta itemprop="email" content="seanyinx@gmail.com" />
+            <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> 电子邮箱
+          </a>
+        </li>
+      
+
+      
+
+      
+        <li>
+          <a href="https://twitter.com/seanyinx" itemprop="sameAs">
+            <i class="fa fa-fw fa-twitter-square" aria-hidden="true"></i> Twitter
+          </a>
+        </li>
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      <!--
+  <li>
+    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs">
+      <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link
+    </a>
+  </li>
+-->
+    </ul>
+  </div>
+</div>
+
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="ServiceComb中的数据最终一致性方案 - part 3">
+    <meta itemprop="description" content="Saga和其他数据一致性解决方案相比有什么不同之处?">
+    <meta itemprop="datePublished" content="September 18, 2017">
+    <meta itemprop="dateModified" content="September 18, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">ServiceComb中的数据最终一致性方案 - part 3
+</h1>
+            
+              <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <p>在我的前一篇<a href="/cn/docs/distributed_saga_2/">文章</a>,我谈到了ServiceComb下的<a href="https://en.wikipedia.org/wiki/Two-phase_commit_protocol">Saga</a>是怎么设计的。
+然而,业界还有其他数据一致性解决方案,如两阶段提交(2PC)和Try-Confirm / Cancel(TCC)。那saga相比之下有什么特别?</p>
+
+<h2 id="两阶段提交-two-phase-commit-2pc">两阶段提交 Two-Phase Commit (2PC)</h2>
+<blockquote>
+  <p>两阶段提交协议是一种分布式算法,用于协调参与分布式原子事务的所有进程,以保证他们均完成提交或中止(回滚)事务。<a href="https://en.wikipedia.org/wiki/Two-phase_commit_protocol">1</a></p>
+</blockquote>
+
+<p>2PC包含两个阶段:</p>
+<ul>
+  <li><strong>投票阶段</strong> 协调器向所有服务发起投票请求,服务回答yes或no。如果有任何服务回复no以拒绝或超时,协调器则在下一阶段发送中止消息。</li>
+</ul>
+
+<p><img src="/assets/images/saga.2pc.phase1.png" alt="voting phase" class="align-center" /></p>
+
+<ul>
+  <li><strong>决定阶段</strong> 如果所有服务都回复yes,协调器则向服务发送commit消息,接着服务告知事务完成或失败。如果任何服务提交失败,
+协调器将启动额外的步骤以中止该事务。</li>
+</ul>
+
+<p><img src="/assets/images/saga.2pc.phase2.png" alt="decision phase" class="align-center" /></p>
+
+<p>在投票阶段结束之后与决策阶段结束之前,服务处于<strong>不确定</strong>状态,因为他们不确定交易是否继续进行。当服务处于不确定状态并与协调器失去连接时,
+它只能选择等待协调器的恢复,或者咨询其他在确定状态下的服务来得知协调器的决定。在最坏的情况下,
+n个处于不确定状态的服务向其他n-1个服务咨询将产生<strong>O(n<sup>2</sup>)</strong>个消息。</p>
+
+<p>另外,2PC是一个阻塞协议。服务在投票后需要等待协调器的决定,此时服务会阻塞并锁定资源。由于其阻塞机制和最差时间复杂度高,
+2PC不能适应随着事务涉及的服务数量增加而扩展的需要。</p>
+
+<p>有关2PC实现的更多细节可参考<a href="https://cs.nyu.edu/courses/spring03/G22.2631-001/lecture8.pdf">2</a>和<a href="http://courses.cs.vt.edu/~cs5204/fall00/distributedDBMS/duckett/tpcp.html">3</a>。</p>
+
+<h2 id="try-confirmcancel-tcc">Try-Confirm/Cancel (TCC)</h2>
+<p>TCC也是补偿型事务模式,支持两阶段的商业模型。</p>
+<ul>
+  <li><strong>尝试阶段</strong> 将服务置于待处理状态。例如,收到尝试请求时,航班预订服务将为客户预留一个座位,并在数据库插入客户预订记录,将记录设为预留状态。
+如果任何服务失败或超时,协调器将在下一阶段发送取消请求。</li>
+</ul>
+
+<p><img src="/assets/images/saga.tcc.try.png" alt="try phase" class="align-center" /></p>
+
+<ul>
+  <li><strong>确认阶段</strong> 将服务设为确认状态。确认请求将确认客户预订的座位,这时服务已可向客户收取机票费用。数据库中的客户预订记录也会被更新为确认状态。
+如果任何服务无法确认或超时,协调器将重试确认请求直到成功,或在重试了一定次数后采取回退措施,比如人工干预。</li>
+</ul>
+
+<p><img src="/assets/images/saga.tcc.confirm.png" alt="confirm phase" class="align-center" /></p>
+
+<p>与saga相比,TCC的优势在于,尝试阶段将服务转为待处理状态而不是最终状态,这使得设计相应的取消操作轻而易举。</p>
+
+<p>例如,电邮服务的尝试请求可将邮件标记为准备发送,并且仅在确认后发送邮件,其相应的取消请求只需将邮件标记为已废弃。但如果使用saga,
+事务将发送电子邮件,及其相应的补偿事务可能需要发送另一封电子邮件作出解释。</p>
+
+<p>TCC的缺点是其两阶段协议需要设计额外的服务待处理状态,以及额外的接口来处理尝试请求。另外,TCC处理事务请求所花费的时间可能是saga的两倍,
+因为TCC需要与每个服务进行两次通信,并且其确认阶段只能在收到所有服务对尝试请求的响应后开始。</p>
+
+<p>有关TCC的更多细节可参考<a href="https://www.infoq.com/presentations/Transactions-HTTP-REST">Transactions for the REST of Us</a>.</p>
+
+<h2 id="事件驱动的架构">事件驱动的架构</h2>
+<p>和TCC一样,在事件驱动的架构中,长活事务涉及的每个服务都需要支持额外的待处理状态。接收到事务请求的服务会在其数据库中插入一条新的记录,
+将该记录状态设为待处理并发送一个新的事件给事务序列中的下一个服务。</p>
+
+<p>因为在插入记录后服务可能崩溃,我们无法确定是否新事件已发送,所以每个服务还需要额外的事件表来跟踪当前长活事务处于哪一步。</p>
+
+<p><img src="/assets/images/saga.event.driven.request.png" alt="event driven architecture - request" class="align-center" /></p>
+
+<p>一旦长活事务中的最后一个服务完成其子事务,它将通知它在事务中的前一个服务。接收到完成事件的服务将其在数据库中的记录状态设为完成。</p>
+
+<p><img src="/assets/images/saga.event.driven.response.png" alt="event driven architecture - response" class="align-center" /></p>
+
+<p>如果仔细比较,事件驱动的架构就像非集中式的基于事件的TCC实现。如果去掉待处理状态而直接把服务记录设为最终状态,这个架构就像非集中式的基于事件的saga实现。
+去中心化能达到服务自治,但也造成了服务之间更紧密的的耦合。假设新的业务需求在服务B和C之间的增加了新的流程D。在事件驱动架构下,服务B和C必须改动代码以适应新的流程D。</p>
+
+<p><img src="/assets/images/saga.event.coupling.png" alt="event driven architecture - coupling" class="align-center" /></p>
+
+<p>Saga则正好相反,所有这些耦合都在saga系统中,当在长活事务中添加新流程时,现有服务不需要任何改动。</p>
+
+<p>更多细节可参考<a href="https://www.nginx.com/blog/event-driven-data-management-microservices/">Event-Driven Data Management for Microservices</a>.</p>
+
+<h2 id="集中式与非集中式实现">集中式与非集中式实现</h2>
+<p>这个Saga系列的文章讨论的都是集中式的saga设计。但saga也可用非集中式的方案来实现。那么非集中式的版本有什么不同?</p>
+
+<p>非集中式saga没有专职的协调器。启动下一个服务调用的服务就是当前的协调器。例如,</p>
+<ul>
+  <li>服务A收到要求服务A,B和C之间的数据一致性的事务请求。</li>
+  <li>A完成其子事务,并将请求传递给事务中的下一个服务,服务B.</li>
+  <li>B完成其子事务,并将请求传递给C,依此类推。</li>
+  <li>如果C处理请求失败,B有责任启动补偿事务,并要求A回滚。</li>
+</ul>
+
+<p><img src="/assets/images/saga.decentralized.png" alt="decentralized saga" class="align-center" /></p>
+
+<p>与集中式相比,非集中式的实现具有服务自治的优势。但每个服务都需要包含数据一致性协议,并提供其所需的额外持久化设施。</p>
+
+<p>我们更倾向于自治的业务服务,但服务还关联很多应用的复杂性,如数据一致性,服务监控和消息传递,
+将这些棘手问题集中处理,能将业务服务从应用的复杂性中释放,专注于处理复杂的业务,因此我们采用了集中式的saga设计。</p>
+
+<p>另外,随着长活事务中涉及的服务数量增长,服务之间的关系变得越来越难理解,很快便会呈现下图的死星形状。</p>
+
+<p class="figure-caption"><img src="/assets/images/saga.death.star.png" alt="death star architecture" class="align-center" />
+图片来源: http://www.slideshare.net/BruceWong3/the-case-for-chaos (s12)</p>
+
+<p>同时,在长活事务中定位问题也变得更加复杂,因为服务日志遍布群集节点。</p>
+
+<h2 id="summary">Summary</h2>
+<p>本文将saga与其他数据一致性解决方案进行了比较。Saga比两阶段提交更易扩展。在事务可补偿的情况下,
+相比TCC,saga对业务逻辑几乎没有改动的需要,而且性能更高。集中式的saga设计解耦了服务与数据一致性逻辑及其持久化设施,
+并使排查事务中的问题更容易。</p>
+
+<h2 id="references">References</h2>
+<ol>
+  <li><a href="https://en.wikipedia.org/wiki/Two-phase_commit_protocol">https://en.wikipedia.org/wiki/Two-phase_commit_protocol</a></li>
+  <li><a href="https://cs.nyu.edu/courses/spring03/G22.2631-001/lecture8.pdf">https://cs.nyu.edu/courses/spring03/G22.2631-001/lecture8.pdf</a></li>
+  <li><a href="http://courses.cs.vt.edu/~cs5204/fall00/distributedDBMS/duckett/tpcp.html">http://courses.cs.vt.edu/~cs5204/fall00/distributedDBMS/duckett/tpcp.html</a></li>
+  <li><a href="https://www.infoq.com/presentations/Transactions-HTTP-REST">https://www.infoq.com/presentations/Transactions-HTTP-REST</a></li>
+  <li><a href="https://www.nginx.com/blog/event-driven-data-management-microservices/">https://www.nginx.com/blog/event-driven-data-management-microservices/</a></li>
+</ol>
+
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+  
+
+
+  
+  
+  
+
+  <p class="page__taxonomy">
+    <strong><i class="fa fa-fw fa-tags" aria-hidden="true"></i> 标签: </strong>
+    <span itemprop="keywords">
+    
+      
+      
+      <a href="/tags/#%E4%BA%8B%E5%8A%A1%E4%B8%80%E8%87%B4%E6%80%A7" class="page__taxonomy-item" rel="tag">事务一致性</a>
+    
+    </span>
+  </p>
+
+
+
+
+
+        
+          
+            
+              <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> 最新的:</strong> <time datetime="2017-09-18">2017年9月18日</time></p>
+            
+          
+        
+      </footer>
+
+      <section class="page__share">
+  
+    <h4 class="page__share-title">分享</h4>
+  
+
+  <a href="https://twitter.com/intent/tweet?via=ServiceComb&text=ServiceComb中的数据最终一致性方案 - part 3 /cn/docs/distributed_saga_3/" class="btn btn--twitter" title="分享 Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
+
+  <a href="https://www.facebook.com/sharer/sharer.php?u=/cn/docs/distributed_saga_3/" class="btn btn--facebook" title="分享 Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
+
+  <a href="https://plus.google.com/share?url=/cn/docs/distributed_saga_3/" class="btn btn--google-plus" title="分享 Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
+
+  <a href="https://www.linkedin.com/shareArticle?mini=true&url=/cn/docs/distributed_saga_3/" class="btn btn--linkedin" title="分享 LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
+</section>
+
+
+      
+  <nav class="pagination">
+    
+      <a href="/docs/distributed_saga_3/" class="pagination--pager" title="Eventual Data Consistency Solution in ServiceComb - part 3
+">向前</a>
+    
+    
+      <a href="/docs/how-to-reform-a-legacy-system/" class="pagination--pager" title="最头疼的遗留系统该如何改造?
+">向后</a>
+    
+  </nav>
+
+
+    </div>
+
+    
+      <div class="page__comments">
+  
+  
+    <section id="static-comments">
+      
+        <!-- Start static comments -->
+        <div class="js-comments">
+          
+        </div>
+        <!-- End static comments -->
+
+        <!-- Start new comment form -->
+        <h4 class="page__comments-title">留下评论</h4>
+        <p class="small">您的电子邮箱地址并不会被展示。请填写标记为必须的字段。 <span class="required">*</span></p>
+        <form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/ServiceComb/servicesomb.github.io/master">
+          <div class="form__spinner">
+            <i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
+            <span class="sr-only">正在加载...</span>
+          </div>
+
+          <fieldset>
+            <label for="comment-form-message">评论 <small class="required">*</small></label>
+            <textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
+            <div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">Markdown语法已支持。</a></div>
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-name">姓名 <small class="required">*</small></label>
+            <input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-email">电子邮箱 <small class="required">*</small></label>
+            <input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-url">网站(可选)</label>
+            <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
+          </fieldset>
+          <fieldset class="hidden" style="display: none;">
+            <input type="hidden" name="options[slug]" value="saga-and-others">
+            <label for="comment-form-location">Not used. Leave blank if you are a human.</label>
+            <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
+          </fieldset>
+          <!-- Start comment form alert messaging -->
+          <p class="hidden js-notice">
+            <strong class="js-notice-text"></strong>
+          </p>
+          <!-- End comment form alert messaging -->
+          <fieldset>
+            <button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--large">提交评论</button>
+          </fieldset>
+        </form>
+        <!-- End new comment form -->
+      
+    </section>
+  
+</div>
+
+    
+  </article>
+
+  
+  
+    <div class="page__related">
+      <h4 class="page__related-title">猜您还喜欢</h4>
+      <div class="grid__wrapper">
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/jira_beginner_guide/" rel="permalink">老司机带你刷任务 - ServiceComb JIRA入门指南
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">ServiceComb JIRA入门指南
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/how-to-reform-a-legacy-system/" rel="permalink">最头疼的遗留系统该如何改造?
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+      </div>
+    </div>
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _posts/cn/2017-09-18-saga-and-others.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_posts/cn/2017-09-18-saga-and-others.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  
+  <script>
+    (function ($) {
+    var $comments = $('.js-comments');
+
+    $('#new_comment').submit(function () {
+      var form = this;
+
+      $(form).addClass('disabled');
+      $('#comment-form-submit').html('<i class="fa fa-spinner fa-spin fa-fw"></i> 正在加载...');
+
+      $.ajax({
+        type: $(this).attr('method'),
+        url: $(this).attr('action'),
+        data: $(this).serialize(),
+        contentType: 'application/x-www-form-urlencoded',
+        success: function (data) {
+          $('#comment-form-submit').html('已提交');
+          $('.page__comments-form .js-notice').removeClass('notice--danger');
+          $('.page__comments-form .js-notice').addClass('notice--success');
+          showAlert('感谢您的评论!被批准后它会立即在此站点展示。');
+        },
+        error: function (err) {
+          console.log(err);
+          $('#comment-form-submit').html('提交评论');
+          $('.page__comments-form .js-notice').removeClass('notice--success');
+          $('.page__comments-form .js-notice').addClass('notice--danger');
+          showAlert('很抱歉,您的提交存在错误。请确保所有必填字段都已填写正确,然后再试一次。');
+          $(form).removeClass('disabled');
+        }
+      });
+
+      return false;
+    });
+
+    function showAlert(message) {
+      $('.page__comments-form .js-notice').removeClass('hidden');
+      $('.page__comments-form .js-notice-text').html(message);
+    }
+  })(jQuery);
+  </script>
+
+
+
+
+
+
+
+  </body>
+</html>


[35/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/docs/quick-start-dataconsistency/index.html
----------------------------------------------------------------------
diff --git a/content/cn/docs/quick-start-dataconsistency/index.html b/content/cn/docs/quick-start-dataconsistency/index.html
new file mode 100644
index 0000000..b46d53e
--- /dev/null
+++ b/content/cn/docs/quick-start-dataconsistency/index.html
@@ -0,0 +1,951 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>数据一致性解决方案 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="介绍ServiceComb的Saga数据一致性方案应用demo">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="数据一致性解决方案">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/quick-start-dataconsistency/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/quick-start-dataconsistency/">
+
+
+
+  <meta property="og:description" content="介绍ServiceComb的Saga数据一致性方案应用demo">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="数据一致性解决方案">
+  <meta name="twitter:description" content="介绍ServiceComb的Saga数据一致性方案应用demo">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/docs/quick-start-dataconsistency/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/docs/quick-start/"><span class="nav__sub-title nav__sub-title-with-url">快速入门</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/docs/quick-start-bmi/"><span class="nav__sub-title nav__sub-title-with-url">微服务应用快速开发</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/docs/quick-start-advance/"><span class="nav__sub-title nav__sub-title-with-url">微服务开发进阶</span></a>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/docs/quick-start-advance/load-balance/" class="">负载均衡</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/docs/quick-start-advance/flow-control/" class="">流量控制</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/docs/quick-start-advance/service-management/" class="">服务治理</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/docs/quick-start-advance/distributed-tracing/" class="">分布式调用链追踪</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/docs/quick-start-dataconsistency/"><span class="nav__sub-title nav__sub-title-with-url">数据一致性解决方案</span></a>
+        
+
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="数据一致性解决方案">
+    <meta itemprop="description" content="介绍ServiceComb的Saga数据一致性方案应用demo">
+    
+    <meta itemprop="dateModified" content="September 19, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">数据一致性解决方案
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> 在本页上</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#运行demo" id="markdown-toc-运行demo">运行demo</a></li>
+  <li><a href="#验证" id="markdown-toc-验证">验证</a></li>
+  <li><a href="#下一步" id="markdown-toc-下一步">下一步</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<p>模拟一个简单的旅行应用,展示如何使用ServiceComb提供的Saga方案保证微服务间数据一致性。</p>
+
+<p>旅行应用包含四个微服务:</p>
+<ul>
+  <li>机票预订服务(flight-booking-service)</li>
+  <li>租车服务(car-rental-service)</li>
+  <li>酒店预订服务(hotel-reservation-service)</li>
+  <li>支付服务(payment-service)</li>
+</ul>
+
+<p>机票预订、租车、酒店预订服务间无依赖关系,使用自己的数据库,通过HTTP协议通信。
+在以上三个服务的预订成功,支付完成后才能满足一个成功的行程,否则不能成行,Saga自动补偿。</p>
+
+<p><img src="/assets/images/saga-demo.png" alt="Saga-demo" /></p>
+
+<h2 id="运行demo">运行demo</h2>
+
+<p>注:Demo 集成在 <a href="https://github.com/ServiceComb/ServiceComb-Saga">ServiceComb-Saga</a> 项目中。</p>
+
+<ol>
+  <li>准备环境
+    <ul>
+      <li><a href="http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html">Oracle JDK 1.8</a></li>
+      <li><a href="https://maven.apache.org/install.html">Maven 3.x</a></li>
+      <li><a href="https://www.docker.com/get-docker">Docker</a></li>
+      <li><a href="https://dev.mysql.com/downloads/">MySQL</a></li>
+      <li><a href="https://github.com/ServiceComb/service-center">Service Center</a></li>
+      <li><a href="https://docs.docker.com/compose/install/">Docker compose</a></li>
+    </ul>
+  </li>
+  <li>
+    <p>配置服务
+ 在各服务的 <em>microservice.yaml</em> 文件,设置该服务注册的服务中心</p>
+
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code> <span class="s">APPLICATION_ID</span><span class="pi">:</span> <span class="s">saga</span>
+ <span class="s">service_description</span><span class="pi">:</span>
+   <span class="s">name</span><span class="pi">:</span> <span class="s">flight-booking-service</span>
+   <span class="s">version</span><span class="pi">:</span> <span class="s">0.0.1</span>
+ <span class="s">cse</span><span class="pi">:</span>
+   <span class="s">service</span><span class="pi">:</span>
+     <span class="s">registry</span><span class="pi">:</span>
+       <span class="s">address</span><span class="pi">:</span> <span class="s">http://sc.servicecomb.io:30100</span> <span class="c1">#此处选择使用ServiceComb的Service Center</span>
+   <span class="s">rest</span><span class="pi">:</span>
+     <span class="s">address</span><span class="pi">:</span> <span class="s">0.0.0.0:8080</span>
+   <span class="s">handler</span><span class="pi">:</span>
+     <span class="s">chain</span><span class="pi">:</span>
+       <span class="s">Consumer</span><span class="pi">:</span>
+         <span class="s">default</span><span class="pi">:</span> <span class="s">loadbalance</span>
+</code></pre>
+    </div>
+
+    <p>在 <em>saga-demo/docker-compose.yaml</em> 设置部署脚本</p>
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code> <span class="s">version</span><span class="pi">:</span> <span class="s1">'</span><span class="s">2.1'</span>
+
+ <span class="s">services</span><span class="pi">:</span>
+   <span class="s">service-center</span><span class="pi">:</span> <span class="c1">#此处选择使用ServiceComb的Service Center容器镜像</span>
+     <span class="s">image</span><span class="pi">:</span> <span class="s2">"</span><span class="s">servicecomb/service-center"</span>
+     <span class="s">hostname</span><span class="pi">:</span> <span class="s">service-center</span>
+     <span class="s">ports</span><span class="pi">:</span>
+       <span class="pi">-</span> <span class="s2">"</span><span class="s">30100:30100"</span>
+
+   <span class="s">mysql</span><span class="pi">:</span>  <span class="c1">#此处选择使用5.7版本的mysql镜像</span>
+     <span class="s">image</span><span class="pi">:</span> <span class="s2">"</span><span class="s">mysql/mysql-server:5.7"</span>
+     <span class="s">hostname</span><span class="pi">:</span> <span class="s">mysql</span>
+     <span class="s">environment</span><span class="pi">:</span>
+       <span class="pi">-</span> <span class="s">MYSQL_ROOT_PASSWORD=password</span>
+       <span class="pi">-</span> <span class="s">MYSQL_DATABASE=saga</span>
+       <span class="pi">-</span> <span class="s">MYSQL_USER=saga</span>
+       <span class="pi">-</span> <span class="s">MYSQL_PASSWORD=password</span>
+     <span class="s">ports</span><span class="pi">:</span>
+       <span class="pi">-</span> <span class="s2">"</span><span class="s">3306:3306"</span>
+     <span class="s">healthcheck</span><span class="pi">:</span>
+         <span class="s">test</span><span class="pi">:</span> <span class="pi">[</span><span class="s2">"</span><span class="s">CMD-SHELL"</span><span class="pi">,</span> <span class="s2">"</span><span class="s">nc</span><span class="nv"> </span><span class="s">-z</span><span class="nv"> </span><span class="s">localhost</span><span class="nv"> </span><span class="s">3306</span><span class="nv"> </span><span class="s">&amp;&gt;</span><span class="nv"> </span><span class="s">/dev/null;</span><span class="nv"> </span><span class="s">echo</span><span class="nv"> </span><span class="s">$$?"</span><span class="pi">]</span>
+         <span class="s">interval</span><span class="pi">:</span> <span class="s">30s</span>
+         <span class="s">timeout</span><span class="pi">:</span> <span class="s">10s</span>
+         <span class="s">retries</span><span class="pi">:</span> <span class="s">5</span>
+
+   <span class="s">car-rental-service</span><span class="pi">:</span>
+     <span class="s">image</span><span class="pi">:</span> <span class="s2">"</span><span class="s">car-rental-service:0.0.2-SNAPSHOT"</span>
+     <span class="s">hostname</span><span class="pi">:</span> <span class="s">car</span>
+     <span class="s">links</span><span class="pi">:</span>
+       <span class="pi">-</span> <span class="s2">"</span><span class="s">service-center:sc.servicecomb.io"</span>
+     <span class="s">ports</span><span class="pi">:</span>
+       <span class="pi">-</span> <span class="s2">"</span><span class="s">8080:8080"</span>
+
+   <span class="s">flight-booking-service</span><span class="pi">:</span>
+     <span class="s">image</span><span class="pi">:</span> <span class="s2">"</span><span class="s">flight-booking-service:0.0.2-SNAPSHOT"</span>
+     <span class="s">hostname</span><span class="pi">:</span> <span class="s">flight</span>
+     <span class="s">links</span><span class="pi">:</span>
+       <span class="pi">-</span> <span class="s2">"</span><span class="s">service-center:sc.servicecomb.io"</span>
+     <span class="s">ports</span><span class="pi">:</span>
+       <span class="pi">-</span> <span class="s2">"</span><span class="s">8081:8080"</span>
+
+   <span class="s">hotel-reservation-service</span><span class="pi">:</span>
+     <span class="s">image</span><span class="pi">:</span> <span class="s2">"</span><span class="s">hotel-reservation-service:0.0.2-SNAPSHOT"</span>
+     <span class="s">hostname</span><span class="pi">:</span> <span class="s">hotel</span>
+     <span class="s">links</span><span class="pi">:</span>
+       <span class="pi">-</span> <span class="s2">"</span><span class="s">service-center:sc.servicecomb.io"</span>
+     <span class="s">ports</span><span class="pi">:</span>
+       <span class="pi">-</span> <span class="s2">"</span><span class="s">8082:8080"</span>
+
+   <span class="s">payment-service</span><span class="pi">:</span>
+     <span class="s">image</span><span class="pi">:</span> <span class="s2">"</span><span class="s">payment-service:0.0.2-SNAPSHOT"</span>
+     <span class="s">hostname</span><span class="pi">:</span> <span class="s">payment</span>
+     <span class="s">links</span><span class="pi">:</span>
+       <span class="pi">-</span> <span class="s2">"</span><span class="s">service-center:sc.servicecomb.io"</span>
+     <span class="s">ports</span><span class="pi">:</span>
+       <span class="pi">-</span> <span class="s2">"</span><span class="s">8080"</span>
+
+   <span class="s">saga</span><span class="pi">:</span>
+     <span class="s">image</span><span class="pi">:</span> <span class="s2">"</span><span class="s">saga-spring:0.0.2-SNAPSHOT"</span>
+     <span class="s">hostname</span><span class="pi">:</span> <span class="s">saga</span>
+     <span class="s">links</span><span class="pi">:</span>
+       <span class="pi">-</span> <span class="s2">"</span><span class="s">mysql:mysql.servicecomb.io"</span>
+       <span class="pi">-</span> <span class="s2">"</span><span class="s">service-center:sc.servicecomb.io"</span>
+       <span class="pi">-</span> <span class="s2">"</span><span class="s">car-rental-service:car.servicecomb.io"</span>
+       <span class="pi">-</span> <span class="s2">"</span><span class="s">flight-booking-service:flight.servicecomb.io"</span>
+       <span class="pi">-</span> <span class="s2">"</span><span class="s">hotel-reservation-service:hotel.servicecomb.io"</span>
+       <span class="pi">-</span> <span class="s2">"</span><span class="s">payment-service:payment.servicecomb.io"</span>
+     <span class="s">environment</span><span class="pi">:</span>
+       <span class="pi">-</span> <span class="s">JAVA_OPTS=-Dspring.profiles.active=prd,servicecomb -Dcse.service.registry.address=http://sc.servicecomb.io:30100</span>
+     <span class="s">ports</span><span class="pi">:</span>
+       <span class="pi">-</span> <span class="s2">"</span><span class="s">8083:8080"</span>
+     <span class="s">depends_on</span><span class="pi">:</span>
+       <span class="s">mysql</span><span class="pi">:</span>
+         <span class="s">condition</span><span class="pi">:</span> <span class="s">service_healthy</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p>在Saga项目的根目录执行编译,制作Saga、机票预订、租车、酒店预订和支付服务镜像</p>
+
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code> mvn package -DskipTests -Pdocker -Pdemo
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p>在Saga项目的saga-demo目录通过docker-compose一键启动Saga、机票预订、租车、酒店预订和支付服务</p>
+
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code> docker-compose up
+</code></pre>
+    </div>
+  </li>
+</ol>
+
+<h2 id="验证">验证</h2>
+
+<ol>
+  <li>
+    <p>参照 <a href="https://github.com/ServiceComb/ServiceComb-Saga/blob/master/docs/api/api.md">Saga API</a> 说明,设定各服务的事务、补偿、依赖和恢复参数,并保存为 <em>request.json</em> 文件</p>
+
+    <div class="language-json highlighter-rouge"><pre class="highlight"><code><span class="w"> </span><span class="p">{</span><span class="w">
+   </span><span class="nt">"policy"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BackwardRecovery"</span><span class="p">,</span><span class="w">
+   </span><span class="nt">"requests"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
+     </span><span class="p">{</span><span class="w">
+       </span><span class="nt">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"request-car"</span><span class="p">,</span><span class="w">
+       </span><span class="nt">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"rest"</span><span class="p">,</span><span class="w">
+       </span><span class="nt">"serviceName"</span><span class="p">:</span><span class="w"> </span><span class="s2">"car-rental-service"</span><span class="p">,</span><span class="w">
+       </span><span class="nt">"transaction"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+         </span><span class="nt">"method"</span><span class="p">:</span><span class="w"> </span><span class="s2">"post"</span><span class="p">,</span><span class="w">
+         </span><span class="nt">"path"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/rentals"</span><span class="p">,</span><span class="w">
+         </span><span class="nt">"params"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+           </span><span class="nt">"form"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+             </span><span class="nt">"customerId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mike"</span><span class="w">
+           </span><span class="p">}</span><span class="w">
+         </span><span class="p">}</span><span class="w">
+       </span><span class="p">},</span><span class="w">
+       </span><span class="nt">"compensation"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+         </span><span class="nt">"method"</span><span class="p">:</span><span class="w"> </span><span class="s2">"put"</span><span class="p">,</span><span class="w">
+         </span><span class="nt">"path"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/rentals"</span><span class="p">,</span><span class="w">
+         </span><span class="nt">"params"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+           </span><span class="nt">"form"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+             </span><span class="nt">"customerId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mike"</span><span class="w">
+           </span><span class="p">}</span><span class="w">
+         </span><span class="p">}</span><span class="w">
+       </span><span class="p">}</span><span class="w">
+     </span><span class="p">},</span><span class="w">
+     </span><span class="p">{</span><span class="w">
+       </span><span class="nt">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"request-hotel"</span><span class="p">,</span><span class="w">
+       </span><span class="nt">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"rest"</span><span class="p">,</span><span class="w">
+       </span><span class="nt">"serviceName"</span><span class="p">:</span><span class="w"> </span><span class="s2">"hotel-reservation-service"</span><span class="p">,</span><span class="w">
+       </span><span class="nt">"transaction"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+         </span><span class="nt">"method"</span><span class="p">:</span><span class="w"> </span><span class="s2">"post"</span><span class="p">,</span><span class="w">
+         </span><span class="nt">"path"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/reservations"</span><span class="p">,</span><span class="w">
+         </span><span class="nt">"params"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+           </span><span class="nt">"form"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+             </span><span class="nt">"customerId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mike"</span><span class="w">
+           </span><span class="p">}</span><span class="w">
+         </span><span class="p">}</span><span class="w">
+       </span><span class="p">},</span><span class="w">
+       </span><span class="nt">"compensation"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+         </span><span class="nt">"method"</span><span class="p">:</span><span class="w"> </span><span class="s2">"put"</span><span class="p">,</span><span class="w">
+         </span><span class="nt">"path"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/reservations"</span><span class="p">,</span><span class="w">
+         </span><span class="nt">"params"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+           </span><span class="nt">"form"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+             </span><span class="nt">"customerId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mike"</span><span class="w">
+           </span><span class="p">}</span><span class="w">
+         </span><span class="p">}</span><span class="w">
+       </span><span class="p">}</span><span class="w">
+     </span><span class="p">},</span><span class="w">
+     </span><span class="p">{</span><span class="w">
+       </span><span class="nt">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"request-flight"</span><span class="p">,</span><span class="w">
+       </span><span class="nt">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"rest"</span><span class="p">,</span><span class="w">
+       </span><span class="nt">"serviceName"</span><span class="p">:</span><span class="w"> </span><span class="s2">"flight-booking-service"</span><span class="p">,</span><span class="w">
+       </span><span class="nt">"transaction"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+         </span><span class="nt">"method"</span><span class="p">:</span><span class="w"> </span><span class="s2">"post"</span><span class="p">,</span><span class="w">
+         </span><span class="nt">"path"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/bookings"</span><span class="p">,</span><span class="w">
+         </span><span class="nt">"params"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+           </span><span class="nt">"form"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+             </span><span class="nt">"customerId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mike"</span><span class="w">
+           </span><span class="p">}</span><span class="w">
+         </span><span class="p">}</span><span class="w">
+       </span><span class="p">},</span><span class="w">
+       </span><span class="nt">"compensation"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+         </span><span class="nt">"method"</span><span class="p">:</span><span class="w"> </span><span class="s2">"put"</span><span class="p">,</span><span class="w">
+         </span><span class="nt">"path"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/bookings"</span><span class="p">,</span><span class="w">
+         </span><span class="nt">"params"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+           </span><span class="nt">"form"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+             </span><span class="nt">"customerId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mike"</span><span class="w">
+           </span><span class="p">}</span><span class="w">
+         </span><span class="p">}</span><span class="w">
+       </span><span class="p">}</span><span class="w">
+     </span><span class="p">},</span><span class="w">
+     </span><span class="p">{</span><span class="w">
+       </span><span class="nt">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"request-payment"</span><span class="p">,</span><span class="w">
+       </span><span class="nt">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"rest"</span><span class="p">,</span><span class="w">
+       </span><span class="nt">"serviceName"</span><span class="p">:</span><span class="w"> </span><span class="s2">"payment-service"</span><span class="p">,</span><span class="w">
+       </span><span class="nt">"parents"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
+         </span><span class="s2">"request-car"</span><span class="p">,</span><span class="w">
+         </span><span class="s2">"request-flight"</span><span class="p">,</span><span class="w">
+         </span><span class="s2">"request-hotel"</span><span class="w">
+       </span><span class="p">],</span><span class="w">
+       </span><span class="nt">"transaction"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+         </span><span class="nt">"method"</span><span class="p">:</span><span class="w"> </span><span class="s2">"post"</span><span class="p">,</span><span class="w">
+         </span><span class="nt">"path"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/payments"</span><span class="p">,</span><span class="w">
+         </span><span class="nt">"params"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+           </span><span class="nt">"form"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+             </span><span class="nt">"customerId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mike"</span><span class="w">
+           </span><span class="p">}</span><span class="w">
+         </span><span class="p">}</span><span class="w">
+       </span><span class="p">},</span><span class="w">
+       </span><span class="nt">"compensation"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+         </span><span class="nt">"method"</span><span class="p">:</span><span class="w"> </span><span class="s2">"put"</span><span class="p">,</span><span class="w">
+         </span><span class="nt">"path"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/payments"</span><span class="p">,</span><span class="w">
+         </span><span class="nt">"params"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+           </span><span class="nt">"form"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+             </span><span class="nt">"customerId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mike"</span><span class="w">
+           </span><span class="p">}</span><span class="w">
+         </span><span class="p">}</span><span class="w">
+       </span><span class="p">}</span><span class="w">
+     </span><span class="p">}</span><span class="w">
+   </span><span class="p">]</span><span class="w">
+ </span><span class="p">}</span><span class="w">
+</span></code></pre>
+    </div>
+  </li>
+  <li>
+    <p>发送请求到Saga</p>
+
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code> curl -XPOST -H <span class="s2">"Content-Type: text/plain"</span> -d @./request.json  http://&lt;localhost.ip:8083&gt;/requests
+</code></pre>
+    </div>
+
+    <p>获取处理结果成功(如果失败,返回相应的错误信息)</p>
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code> success
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p>查看Saga的事务</p>
+
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code> curl -XGET http://&lt;localhost.ip:8083&gt;/events
+</code></pre>
+    </div>
+
+    <p>查询结果</p>
+
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code> <span class="o">{</span>
+     <span class="s2">"bcd27f0d-6b82-49b3-8067-b16eba970e55"</span>: <span class="o">[</span>
+         <span class="o">{</span>
+             <span class="s2">"id"</span>: 1,
+             <span class="s2">"sagaId"</span>: <span class="s2">"bcd27f0d-6b82-49b3-8067-b16eba970e55"</span>,
+             <span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:21Z"</span>,
+             <span class="s2">"type"</span>: <span class="s2">"SagaStartedEvent"</span>,
+             <span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">policy</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">BackwardRecovery</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">requests</span><span class="se">\"</span><span class="s2">: [{</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-car</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="
 s2">car-rental-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/rentals</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">m
 ike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/rentals</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span 
 class="se">\"</span><span class="s2">}}}}, {</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-hotel</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">hotel-reservation-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/reservation
 s</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/reservations</span><s
 pan class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}}, {</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-flight</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</
 span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">flight-booking-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/bookings</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</s
 pan><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/bookings</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class
 ="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}}, {</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-payment</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [</span><span class="se">\"</span><span class="s2">request-car</span><span class="se">\"</span><span class="s2">, </
 span><span class="se">\"</span><span class="s2">request-flight</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">request-hotel</span><span class="se">\"</span><span class="s2">], </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">payment-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/payments</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class
 ="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/payments</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span>
 <span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}}]}"</span>
+         <span class="o">}</span>,
+         <span class="o">{</span>
+             <span class="s2">"id"</span>: 2,
+             <span class="s2">"sagaId"</span>: <span class="s2">"bcd27f0d-6b82-49b3-8067-b16eba970e55"</span>,
+             <span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:21Z"</span>,
+             <span class="s2">"type"</span>: <span class="s2">"TransactionStartedEvent"</span>,
+             <span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-hotel</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [], </span><span class="se">\"</span><span class="s2">fallback</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">NOP</span><span class="se">\"</span><span class="s2">}, </span><span class="se">\"</span><span class="s2">serviceNa
 me</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">hotel-reservation-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/reservations</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">c
 ustomerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/reservations</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</
 span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}, </span><span class="se">\"</span><span class="s2">retries</span><span class="se">\"</span><span class="s2">: 3}}"</span>
+         <span class="o">}</span>,
+         <span class="o">{</span>
+             <span class="s2">"id"</span>: 3,
+             <span class="s2">"sagaId"</span>: <span class="s2">"bcd27f0d-6b82-49b3-8067-b16eba970e55"</span>,
+             <span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:21Z"</span>,
+             <span class="s2">"type"</span>: <span class="s2">"TransactionStartedEvent"</span>,
+             <span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-car</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [], </span><span class="se">\"</span><span class="s2">fallback</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">NOP</span><span class="se">\"</span><span class="s2">}, </span><span class="se">\"</span><span class="s2">serviceName
 </span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">car-rental-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/rentals</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</spa
 n><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/rentals</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="s
 e">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}, </span><span class="se">\"</span><span class="s2">retries</span><span class="se">\"</span><span class="s2">: 3}}"</span>
+         <span class="o">}</span>,
+         <span class="o">{</span>
+             <span class="s2">"id"</span>: 4,
+             <span class="s2">"sagaId"</span>: <span class="s2">"bcd27f0d-6b82-49b3-8067-b16eba970e55"</span>,
+             <span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:21Z"</span>,
+             <span class="s2">"type"</span>: <span class="s2">"TransactionStartedEvent"</span>,
+             <span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-flight</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [], </span><span class="se">\"</span><span class="s2">fallback</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">NOP</span><span class="se">\"</span><span class="s2">}, </span><span class="se">\"</span><span class="s2">serviceN
 ame</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">flight-booking-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/bookings</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">custome
 rId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/bookings</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span
  class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}, </span><span class="se">\"</span><span class="s2">retries</span><span class="se">\"</span><span class="s2">: 3}}"</span>
+         <span class="o">}</span>,
+         <span class="o">{</span>
+             <span class="s2">"id"</span>: 5,
+             <span class="s2">"sagaId"</span>: <span class="s2">"bcd27f0d-6b82-49b3-8067-b16eba970e55"</span>,
+             <span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:22Z"</span>,
+             <span class="s2">"type"</span>: <span class="s2">"TransactionEndedEvent"</span>,
+             <span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">request</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-flight</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [], </span><span class="se">\"</span><span class="s2">fallback</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">NOP<
 /span><span class="se">\"</span><span class="s2">}, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">flight-booking-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/bookings</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form
 </span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/bookings</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span cl
 ass="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}, </span><span class="se">\"</span><span class="s2">retries</span><span class="se">\"</span><span class="s2">: 3}}, </span><span class="se">\"</span><span class="s2">response</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">body</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">{</span><span class="se">\\</span><span class="s2">n  </span><span class="se">\\\"</span><span class="s2">statusCode</span><span class="se">\\\"</span><span class="s2">: 200,</span><span class="se">\\</span><span class="s2">n  </span><span class="se">\\\"</span><span class="s2">content</span><span class="se">\\\"</span><span class="s2">: </span><span class
 ="se">\\\"</span><span class="s2">Flight booked with id f249543b-765e-4e10-9ba3-74fe33d8af83 for customer mike</span><span class="se">\\\"\\</span><span class="s2">n}</span><span class="se">\"</span><span class="s2">}}"</span>
+         <span class="o">}</span>,
+         <span class="o">{</span>
+             <span class="s2">"id"</span>: 6,
+             <span class="s2">"sagaId"</span>: <span class="s2">"bcd27f0d-6b82-49b3-8067-b16eba970e55"</span>,
+             <span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:24Z"</span>,
+             <span class="s2">"type"</span>: <span class="s2">"TransactionEndedEvent"</span>,
+             <span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">request</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-hotel</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [], </span><span class="se">\"</span><span class="s2">fallback</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">NOP</
 span><span class="se">\"</span><span class="s2">}, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">hotel-reservation-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/reservations</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2
 ">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/reservations</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</spa
 n><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}, </span><span class="se">\"</span><span class="s2">retries</span><span class="se">\"</span><span class="s2">: 3}}, </span><span class="se">\"</span><span class="s2">response</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">body</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">{</span><span class="se">\\</span><span class="s2">n  </span><span class="se">\\\"</span><span class="s2">statusCode</span><span class="se">\\\"</span><span class="s2">: 200,</span><span class="se">\\</span><span class="s2">n  </span><span class="se">\\\"</span><span class="s2">content</span><span class="se">\\\"</span><span class="s2">: </span><
 span class="se">\\\"</span><span class="s2">Hotel reserved with id f74049a0-3d3d-49b6-a45b-058a409daecf for customer mike</span><span class="se">\\\"\\</span><span class="s2">n}</span><span class="se">\"</span><span class="s2">}}"</span>
+         <span class="o">}</span>,
+         <span class="o">{</span>
+             <span class="s2">"id"</span>: 7,
+             <span class="s2">"sagaId"</span>: <span class="s2">"bcd27f0d-6b82-49b3-8067-b16eba970e55"</span>,
+             <span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:25Z"</span>,
+             <span class="s2">"type"</span>: <span class="s2">"TransactionEndedEvent"</span>,
+             <span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">request</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-car</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [], </span><span class="se">\"</span><span class="s2">fallback</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">NOP</sp
 an><span class="se">\"</span><span class="s2">}, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">car-rental-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/rentals</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><
 span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/rentals</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">
 \"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}, </span><span class="se">\"</span><span class="s2">retries</span><span class="se">\"</span><span class="s2">: 3}}, </span><span class="se">\"</span><span class="s2">response</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">body</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">{</span><span class="se">\\</span><span class="s2">n  </span><span class="se">\\\"</span><span class="s2">statusCode</span><span class="se">\\\"</span><span class="s2">: 200,</span><span class="se">\\</span><span class="s2">n  </span><span class="se">\\\"</span><span class="s2">content</span><span class="se">\\\"</span><span class="s2">: </span><span class="se">\\\
 "</span><span class="s2">Car rented with id 937d7364-be07-4d47-9e01-af72290d0478 for customer mike</span><span class="se">\\\"\\</span><span class="s2">n}</span><span class="se">\"</span><span class="s2">}}"</span>
+         <span class="o">}</span>,
+         <span class="o">{</span>
+             <span class="s2">"id"</span>: 8,
+             <span class="s2">"sagaId"</span>: <span class="s2">"bcd27f0d-6b82-49b3-8067-b16eba970e55"</span>,
+             <span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:25Z"</span>,
+             <span class="s2">"type"</span>: <span class="s2">"TransactionStartedEvent"</span>,
+             <span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-payment</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [</span><span class="se">\"</span><span class="s2">request-car</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">request-flight</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">request-hotel</span><span class="se">\"</span><span class="s2">], </span><span class="se">\"</span><span
  class="s2">fallback</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">NOP</span><span class="se">\"</span><span class="s2">}, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">payment-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/payments</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span clas
 s="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/payments</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</sp
 an><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}, </span><span class="se">\"</span><span class="s2">retries</span><span class="se">\"</span><span class="s2">: 3}}"</span>
+         <span class="o">}</span>,
+         <span class="o">{</span>
+             <span class="s2">"id"</span>: 9,
+             <span class="s2">"sagaId"</span>: <span class="s2">"bcd27f0d-6b82-49b3-8067-b16eba970e55"</span>,
+             <span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:25Z"</span>,
+             <span class="s2">"type"</span>: <span class="s2">"TransactionEndedEvent"</span>,
+             <span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">request</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-payment</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [</span><span class="se">\"</span><span class="s2">request-car</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">request-flight</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class
 ="s2">request-hotel</span><span class="se">\"</span><span class="s2">], </span><span class="se">\"</span><span class="s2">fallback</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">NOP</span><span class="se">\"</span><span class="s2">}, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">payment-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/payments</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span cl
 ass="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/payments</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">metho
 d</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}, </span><span class="se">\"</span><span class="s2">retries</span><span class="se">\"</span><span class="s2">: 3}}, </span><span class="se">\"</span><span class="s2">response</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">body</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">{</span><span class="s
 e">\\</span><span class="s2">n  </span><span class="se">\\\"</span><span class="s2">statusCode</span><span class="se">\\\"</span><span class="s2">: 200,</span><span class="se">\\</span><span class="s2">n  </span><span class="se">\\\"</span><span class="s2">content</span><span class="se">\\\"</span><span class="s2">: </span><span class="se">\\\"</span><span class="s2">Payment made for customer mike and remaining balance is 200</span><span class="se">\\\"\\</span><span class="s2">n}</span><span class="se">\"</span><span class="s2">}}"</span>
+         <span class="o">}</span>,
+         <span class="o">{</span>
+             <span class="s2">"id"</span>: 10,
+             <span class="s2">"sagaId"</span>: <span class="s2">"bcd27f0d-6b82-49b3-8067-b16eba970e55"</span>,
+             <span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:25Z"</span>,
+             <span class="s2">"type"</span>: <span class="s2">"SagaEndedEvent"</span>,
+             <span class="s2">"contentJson"</span>: <span class="s2">"{}"</span>
+         <span class="o">}</span>
+ 	<span class="o">]</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p>demo中模拟了支付服务帐户余额不足场景,发送请求超过一次将触发补偿操作。再次发送请求,可以在Saga日志中找到补偿事件</p>
+
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code> <span class="o">{</span>
+     <span class="s2">"bcd27f0d-6b82-49b3-8067-b16eba970e55"</span>: <span class="o">[</span>
+         ...
+     <span class="o">]</span>,
+     <span class="s2">"2654fa50-71e2-4fc8-afc2-6a5e0d3dafe9"</span>: <span class="o">[</span>
+         <span class="o">{</span>
+             <span class="s2">"id"</span>: 11,
+             <span class="s2">"sagaId"</span>: <span class="s2">"2654fa50-71e2-4fc8-afc2-6a5e0d3dafe9"</span>,
+             <span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:45Z"</span>,
+             <span class="s2">"type"</span>: <span class="s2">"SagaStartedEvent"</span>,
+             <span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">policy</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">BackwardRecovery</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">requests</span><span class="se">\"</span><span class="s2">: [{</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-car</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="
 s2">car-rental-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/rentals</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">m
 ike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/rentals</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span 
 class="se">\"</span><span class="s2">}}}}, {</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-hotel</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">hotel-reservation-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/reservation
 s</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/reservations</span><s
 pan class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}}, {</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-flight</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</
 span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">flight-booking-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/bookings</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</s
 pan><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/bookings</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class
 ="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}}, {</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-payment</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [</span><span class="se">\"</span><span class="s2">request-car</span><span class="se">\"</span><span class="s2">, </
 span><span class="se">\"</span><span class="s2">request-flight</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">request-hotel</span><span class="se">\"</span><span class="s2">], </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">payment-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {

<TRUNCATED>


[21/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/developers/submit-codes/index.html
----------------------------------------------------------------------
diff --git a/content/developers/submit-codes/index.html b/content/developers/submit-codes/index.html
new file mode 100644
index 0000000..b32a8ca
--- /dev/null
+++ b/content/developers/submit-codes/index.html
@@ -0,0 +1,566 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>代码提交指南 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="介绍如何向 ServiceComb 项目提交代码">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="代码提交指南">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/developers/submit-codes/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/developers/submit-codes/">
+
+
+
+  <meta property="og:description" content="介绍如何向 ServiceComb 项目提交代码">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="代码提交指南">
+  <meta name="twitter:description" content="介绍如何向 ServiceComb 项目提交代码">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/developers/submit-codes/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          
+          
+
+          <a href="/developers/"><span class="nav__sub-title nav__sub-title-with-url">Developer Guide</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/developers/setup-develop-environment/"><span class="nav__sub-title nav__sub-title-with-url">Develop Environment Setup</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/developers/submit-codes/"><span class="nav__sub-title nav__sub-title-with-url">Code Submit Guide</span></a>
+        
+
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="代码提交指南">
+    <meta itemprop="description" content="介绍如何向 ServiceComb 项目提交代码">
+    
+    <meta itemprop="dateModified" content="September 08, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">代码提交指南
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> On This Page</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#贡献途径" id="markdown-toc-贡献途径">贡献途径</a></li>
+  <li><a href="#运行测试" id="markdown-toc-运行测试">运行测试</a></li>
+  <li><a href="#pr指南" id="markdown-toc-pr指南">PR指南</a>    <ul>
+      <li><a href="#fork仓库" id="markdown-toc-fork仓库">Fork仓库</a></li>
+      <li><a href="#配置git和提交修改" id="markdown-toc-配置git和提交修改">配置git和提交修改</a></li>
+      <li><a href="#创建pr" id="markdown-toc-创建pr">创建PR</a></li>
+      <li><a href="#冲突解决" id="markdown-toc-冲突解决">冲突解决</a></li>
+    </ul>
+  </li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="贡献途径">贡献途径</h2>
+<p>  ServiceComb正在不断成长中,也希望能找到更多志同道合的同伴一起成长和进步。向ServiceComb 贡献的途径有多种:</p>
+<ul>
+  <li>完善文档。完善网站上的文档或者项目中的介绍文档和API说明文档。其中,网站文档的完善可通过网站最底端的<strong>报告本网页问题</strong>或<strong>在Github上编辑此页</strong>对文档内容进行完善。</li>
+  <li>
+    <p>实现功能特性需求或修复BUG。项目的功能特性需求或者已发现但未修复的BUG都会在项目中的issue处看到,以<a href="https://github.com/ServiceComb/saga/issues">Saga</a>项目为例,一般都会带有类似 <strong>enhancement</strong> 或类似 <strong>bug</strong> 的标签来说明这是功能需求还是BUG,读者可以结合自己的兴趣点来选择。此外,您也可以通过日常使用或阅读代码时发现BUG并以Issue的方式进行描述并针对该BUG提交PR,帮助我们进一步改进。同时,也欢迎您提出需求并在实现后提交PR。</p>
+
+    <p><img src="/assets/images/find-features-by-example.png" alt="寻觅功能需求示例" class="align-center" /></p>
+  </li>
+</ul>
+
+<h2 id="运行测试">运行测试</h2>
+<p>  在您提交代码前,请先按照项目README中说明的自动测试部分对代码的功能性和实现上的正确性进行验证。</p>
+
+<h2 id="pr指南">PR指南</h2>
+<p>  在 <a href="https://github.com/ServiceComb">Github</a> 上面可以很方便地提交 <a href="https://help.github.com/articles/about-pull-requests/">Pull Request (PR)</a>,下面将以本网站项目<a href="https://github.com/ServiceComb/ServiceComb.github.io">ServiceComb/ServiceComb.github.io</a> 为例(如果是其他项目,请替换项目名ServiceComb.github.io)。</p>
+
+<h3 id="fork仓库">Fork仓库</h3>
+
+<p>  进入 ServiceComb/ServiceComb.github.io 的 <a href="https://github.com/ServiceComb/ServiceComb.github.io">github 页面</a> ,点击右上角按钮 <code class="highlighter-rouge">Fork</code> 进行 Fork。</p>
+
+<p><img src="/assets/images/fork-repo.jpg" alt="体质指数应用运行界面" class="align-center" /></p>
+
+<h3 id="配置git和提交修改">配置git和提交修改</h3>
+
+<ul>
+  <li>
+    <p>将代码克隆到本地:</p>
+
+    <div class="language-shell highlighter-rouge"><pre class="highlight"><code>git clone https://github.com/&lt;your_github_name&gt;/ServiceComb.github.io.git
+</code></pre>
+    </div>
+
+    <p>注意:请将 &lt;your_github_name&gt; 替换为您的github名字。</p>
+  </li>
+</ul>
+
+<p>  clone完成后,origin会默认指向github上的远程fork地址。</p>
+
+<ul>
+  <li>
+    <p>将 ServiceComb/ServiceComb.github.io 添加为本地仓库的远程分支 upstream:</p>
+
+    <div class="language-shell highlighter-rouge"><pre class="highlight"><code><span class="nb">cd </span>ServiceComb.github.io
+git remote add upstream https://github.com/ServiceComb/ServiceComb.github.io.git
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p>检查远程仓库设置:</p>
+
+    <div class="language-shell highlighter-rouge"><pre class="highlight"><code>git remote -v
+origin https://github.com/&lt;your_github_name&gt;/ServiceComb.github.io.git <span class="o">(</span>fetch<span class="o">)</span>
+origin    https://github.com/&lt;your_github_name&gt;/ServiceComb.github.io.git <span class="o">(</span>push<span class="o">)</span>
+upstream  https://github.com/ServiceComb/ServiceComb.github.io.git <span class="o">(</span>fetch<span class="o">)</span>
+upstream  https://github.com/ServiceComb/ServiceComb.github.io.git <span class="o">(</span>push<span class="o">)</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p>新建分支以便在分支上做修改:</p>
+
+    <div class="language-shell highlighter-rouge"><pre class="highlight"><code>git checkout -b &lt;your_branch_name&gt;
+</code></pre>
+    </div>
+  </li>
+</ul>
+
+<p>  注意: &lt;your_branch_name&gt; 为您自定义的分支名字。</p>
+
+<p>  创建完成后可进行代码更改。</p>
+
+<ul>
+  <li>
+    <p>提交代码到远程分支:</p>
+
+    <div class="language-shell highlighter-rouge"><pre class="highlight"><code>git commit -a -m <span class="s2">"&lt;you_commit_message&gt;"</span>
+git push origin &lt;your_branch_name&gt;
+</code></pre>
+    </div>
+  </li>
+</ul>
+
+<p>  更多 git 使用方法请访问:<a href="https://www.atlassian.com/git/tutorials/setting-up-a-repository">git 使用</a>,这里不赘述。</p>
+
+<h3 id="创建pr">创建PR</h3>
+
+<p>  在浏览器切换到自己的 github 页面,切换分支到提交的分支 &lt;your_branch_name&gt; ,依次点击 <code class="highlighter-rouge">New pull request</code> 和 <code class="highlighter-rouge">Create pull request</code> 按钮进行创建,如下图所示:</p>
+
+<p class="figure-caption"><img src="/assets/images/new-pr.jpg" alt="体质指数应用运行界面" class="align-center" />
+fig-1 New pull request</p>
+
+<p class="figure-caption"><img src="/assets/images/create-pr.jpg" alt="体质指数应用运行界面" class="align-center" />
+fig-2 Create pull request</p>
+
+<p>  至此,您的PR创建完成,更多关于 PR 请阅读 <a href="https://help.github.com/categories/collaborating-with-issues-and-pull-requests/">collaborating-with-issues-and-pull-requests</a> 。</p>
+
+<h3 id="冲突解决">冲突解决</h3>
+<p>  提交PR时的代码冲突一般是由于多人编辑同一个文件引起的,解决冲突主要通过以下步骤即可:</p>
+<ol>
+  <li>切换至主分支
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code>git checkout master
+</code></pre>
+    </div>
+  </li>
+  <li>同步远端主分支至本地
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code>git pull upstream master
+</code></pre>
+    </div>
+  </li>
+  <li>切换回刚才的分支(假设分支名为fix)
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code>git checkout fix 
+</code></pre>
+    </div>
+  </li>
+  <li>进行rebase
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code>git rebase -i master
+</code></pre>
+    </div>
+    <p>此时会弹出修改记录的文件,一般直接保存即可。然后会提示哪些文件出现了冲突,此时可打开冲突文件对冲突部分进行修改,将提示的所有冲突文件的冲突都解决后,执行</p>
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code>git add .
+git rebase --continue
+</code></pre>
+    </div>
+    <p>依此往复,直至屏幕出现类似 <em>rebase successful</em> 字样即可,此时您可以进行往提交PR的分支进行更新:</p>
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code>git push -f origin fix
+</code></pre>
+    </div>
+  </li>
+</ol>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _developers/submit-codes.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_developers/submit-codes.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/docs/autoscale-on-company/index.html
----------------------------------------------------------------------
diff --git a/content/docs/autoscale-on-company/index.html b/content/docs/autoscale-on-company/index.html
new file mode 100644
index 0000000..c5b79a5
--- /dev/null
+++ b/content/docs/autoscale-on-company/index.html
@@ -0,0 +1,890 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>On-demand Resource Control for Micro-serviced Company by Autoscale - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="This article introduces practice of using kubernetes autoscale in the micro-serviced Company demo to achieve on-demand resource control">
+
+
+
+
+<meta name="author" content="Zen Lin">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="On-demand Resource Control for Micro-serviced Company by Autoscale">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/autoscale-on-company/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/autoscale-on-company/">
+
+
+
+  <meta property="og:description" content="This article introduces practice of using kubernetes autoscale in the micro-serviced Company demo to achieve on-demand resource control">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="On-demand Resource Control for Micro-serviced Company by Autoscale">
+  <meta name="twitter:description" content="This article introduces practice of using kubernetes autoscale in the micro-serviced Company demo to achieve on-demand resource control">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+    <meta name="twitter:creator" content="@">
+  
+
+
+
+  
+
+  
+
+
+
+
+
+  <meta property="og:type" content="article">
+  <meta property="article:published_time" content="2017-08-24T00:00:00+08:00">
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/docs/autoscale-on-company/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+
+<div itemscope itemtype="http://schema.org/Person">
+
+  
+
+  <div class="author__content">
+    <h3 class="author__name" itemprop="name">Zen Lin</h3>
+    
+      <p class="author__bio" itemprop="description">
+	    
+        To enjoy in opensource community.
+	    
+      </p>
+    
+  </div>
+
+  <div class="author__urls-wrapper">
+    <button class="btn btn--inverse">Follow</button>
+    <ul class="author__urls social-icons">
+      
+
+      
+        <li>
+          <a href="http://zenlintechnofreak.github.io" itemprop="url">
+            <i class="fa fa-fw fa-chain" aria-hidden="true"></i> Website
+          </a>
+        </li>
+      
+
+      
+        <li>
+          <a href="mailto:zenlintechnofreak@gmail.com">
+            <meta itemprop="email" content="zenlintechnofreak@gmail.com" />
+            <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> Email
+          </a>
+        </li>
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      <!--
+  <li>
+    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs">
+      <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link
+    </a>
+  </li>
+-->
+    </ul>
+  </div>
+</div>
+
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="On-demand Resource Control for Micro-serviced Company by Autoscale">
+    <meta itemprop="description" content="This article introduces practice of using kubernetes autoscale in the micro-serviced Company demo to achieve on-demand resource control">
+    <meta itemprop="datePublished" content="August 24, 2017">
+    
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">On-demand Resource Control for Micro-serviced Company by Autoscale
+</h1>
+            
+              <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  3 minute read
+
+</p>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <p>  <a href="/docs/company-on-kubernetes/">Last article</a> describes how to quickly deploy the Company  demo on K8S. This article will continue to demonstrate the benefits of micro-service architecture, use auto-scale of K8S  in Company to achieve on-demand fine-grained resources.</p>
+
+<h2 id="prepare">Prepare</h2>
+
+<h3 id="prepare-k8s-environment">Prepare K8S Environment</h3>
+
+<p>Install monitor Heapster and Grafana in K8S to enable auto-scale ability in K8S:</p>
+
+<p>Get one-click installing scripts in the <a href="https://github.com/zenlinTechnofreak/LinuxCon-Beijing-WorkShop/tree/autoscal/kubernetes/heapster/deploy">author’s repo</a>,update value of api-server as following and run kube.sh to start,</p>
+
+<div class="language-bash highlighter-rouge"><pre class="highlight"><code>vi LinuxCon-Beijing-WorkShop/kubernetes/heapster/deploy/kube-config/influxdb/heapster.yaml
+</code></pre>
+</div>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">spec</span><span class="pi">:</span>
+  <span class="s">replicas</span><span class="pi">:</span> <span class="s">1</span>
+  <span class="s">template</span><span class="pi">:</span>
+    <span class="s">metadata</span><span class="pi">:</span>
+      <span class="s">labels</span><span class="pi">:</span>
+        <span class="s">task</span><span class="pi">:</span> <span class="s">monitoring</span>
+        <span class="s">k8s-app</span><span class="pi">:</span> <span class="s">heapster</span>
+    <span class="s">spec</span><span class="pi">:</span>
+      <span class="s">serviceAccountName</span><span class="pi">:</span> <span class="s">heapster</span>
+      <span class="s">containers</span><span class="pi">:</span>
+      <span class="pi">-</span> <span class="s">name</span><span class="pi">:</span> <span class="s">heapster</span>
+        <span class="s">image</span><span class="pi">:</span> <span class="s">gcr.io/google_containers/heapster-amd64:v1.4.1</span>
+        <span class="s">imagePullPolicy</span><span class="pi">:</span> <span class="s">IfNotPresent</span>
+        <span class="s">command</span><span class="pi">:</span>
+        <span class="pi">-</span> <span class="s">/heapster</span>
+<span class="c1">#use 'kubernetes' directly if installed inside the cluster</span>
+        <span class="pi">-</span> <span class="s">--source=kubernetes</span>
+<span class="c1">#use the practical api-server address if installed outside the cluster</span>
+<span class="c1">#        - --source=kubernetes:http://10.229.43.65:6443?inClusterConfig=false</span>
+         <span class="pi">-</span> <span class="s">--sink=influxdb:http://monitoring-influxdb:8086</span>
+</code></pre>
+</div>
+
+<h3 id="start-company-demo">Start Company Demo</h3>
+
+<p>Download Company source code, restricted resources, creating auto-scaller,</p>
+
+<div class="language-shell highlighter-rouge"><pre class="highlight"><code>git clone https://github.com/ServiceComb/ServiceComb-Company-WorkShop.git
+
+<span class="nb">cd </span>LinuxCon-Beijing-WorkShop/kubernetes/
+
+bash start-autoscale.sh 
+</code></pre>
+</div>
+
+<p>In Company’s deployment script, filed of resources is added to limit  200 milli-cores to each pod(1000 milli-cores equal to 1 core),</p>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code>    <span class="s">resources</span><span class="pi">:</span>
+      <span class="s">limits</span><span class="pi">:</span>
+        <span class="s">cpu</span><span class="pi">:</span> <span class="s">200m</span>
+</code></pre>
+</div>
+<p>In script start-autoscale.sh, each command create a Horizontal Pod Autoscaler that maintains between 1 and 10 replicas of the Pods controlled by its deployment created. HPA will increase and decrease the number of replicas (via the deployment) to maintain an average CPU utilization across all Pods of 50%(this means average CPU usage of 100 milli-cores),</p>
+
+<div class="language-shell highlighter-rouge"><pre class="highlight"><code><span class="c"># Create Horizontal Pod Autoscaler</span>
+kubectl autoscale deployment zipkin --cpu-percent<span class="o">=</span>50 --min<span class="o">=</span>1 --max<span class="o">=</span>10
+kubectl autoscale deployment company-bulletin-board --cpu-percent<span class="o">=</span>50 --min<span class="o">=</span>1 --max<span class="o">=</span>10
+kubectl autoscale deployment company-worker --cpu-percent<span class="o">=</span>50 --min<span class="o">=</span>1 --max<span class="o">=</span>10
+kubectl autoscale deployment company-doorman --cpu-percent<span class="o">=</span>50 --min<span class="o">=</span>1 --max<span class="o">=</span>10
+kubectl autoscale deployment company-manager --cpu-percent<span class="o">=</span>50 --min<span class="o">=</span>1 --max<span class="o">=</span>10
+kubectl autoscale deployment company-beekeeper --cpu-percent<span class="o">=</span>50 --min<span class="o">=</span>1 --max<span class="o">=</span>10
+</code></pre>
+</div>
+
+<p>HPA can be created after running start-autoscale.sh, get HPA status by the following command,</p>
+
+<div class="language-shell highlighter-rouge"><pre class="highlight"><code> kubectl get hpa
+</code></pre>
+</div>
+
+<h3 id="start-pressure-testing">Start Pressure Testing</h3>
+
+<div class="language-shell highlighter-rouge"><pre class="highlight"><code><span class="nb">export</span> <span class="nv">$HOST</span><span class="o">=</span>&lt;heapster-ip&gt;:&lt;heapster-port&gt;
+bash LinuxCon-Beijing-WorkShop/kubernetes/stress-test.sh
+</code></pre>
+</div>
+
+<p>The script enable a dead loop, request to Company to calculate fibonacci number 200 times in each second, causing pressure on Company,</p>
+
+<div class="language-shell highlighter-rouge"><pre class="highlight"><code><span class="nv">FIBONA_NUM</span><span class="o">=</span><span class="sb">`</span>curl -s -H <span class="s2">"Authorization: </span><span class="nv">$Authorization</span><span class="s2">"</span> -XGET <span class="s2">"http://</span><span class="nv">$HOST</span><span class="s2">/worker/fibonacci/term?n=6"</span><span class="sb">`</span>
+</code></pre>
+</div>
+
+<h2 id="testing-result">Testing Result</h2>
+
+<p>Following datas gets from  HPA and Grafana,</p>
+
+<p class="figure-caption"><img src="/assets/images/company-autoscale-1.png" alt="Fig 1" class="align-center" /> 
+Fig 1    HPA Data of Start-up Period</p>
+
+<p class="figure-caption"><img src="/assets/images/company-autoscale-2.png" alt="Fig 2" class="align-center" />
+Fig 2    Granfana Data of Start-up Period</p>
+
+<p class="figure-caption"><img src="/assets/images/company-autoscale-3.png" alt="Fig 3" class="align-center" />
+Fig 3    HPA  Data of middle Period</p>
+
+<p class="figure-caption"><img src="/assets/images/company-autoscale-4.png" alt="Fig 4" class="align-center" />
+Fig 4    Granfana Data of The End</p>
+
+<p class="figure-caption"><img src="/assets/images/company-autoscale-5.png" alt="Fig 5" class="align-center" />
+Fig 5    HPA Data of The End</p>
+
+<p><strong>Analyze the data to get the results,</strong></p>
+
+<ol>
+  <li>
+    <p>Pressure is focused on the pod of company-manager, auto-scaler of K8S increase the pods to achieve goal,  less than 50% of CPU usage limited(In fig 5, Usage default company-manager/Request default company-manager = 192/600 about equal to 33% in fig 4), keeping steady.</p>
+  </li>
+  <li>
+    <p>Before steady, auto-scaling may cause losing packages.</p>
+  </li>
+  <li>
+    <p>Company startup will cause temporarily increasing of the system resource load, so the CPU occupancy curve is showed like a crest-like, but HPA can accurately find the number of matching count of pods. In fig 3, count of pods has exceeded 3 which is actually required, and changed to 3 to keep the system steady.</p>
+  </li>
+  <li>
+    <p>The data of HPA and Granfana should be reported with some delay,  official statement:</p>
+
+    <p>Starting and stopping pods may introduce noise to the metric (for instance, starting may temporarily increase CPU). So, after each action, the autoscaler should wait some time for reliable data. Scale-up can only happen if there was no rescaling within the last 3 minutes. Scale-down will wait for 5 minutes from the last rescaling. Moreover any scaling will only be made if:<code class="highlighter-rouge">avg(CurrentPodsConsumption) / Target</code> drops below 0.9 or increases above 1.1 (10% tolerance).</p>
+  </li>
+</ol>
+
+<p>It is all of the demonstrate  above, anyway, Martin Fowler wrote in the <a href="https://martinfowler.com/articles/microservices.html">March 2014 article</a>:</p>
+<blockquote>
+  <p><em>“Microservices” - yet another new term on the crowded streets of software architecture. Although our natural inclination is to pass such things by with a contemptuous glance, this bit of terminology describes a style of software systems that we are finding more and more appealing. We’ve seen many projects use this style in the last few years, and results so far have been positive, so much so that for many of our colleagues this is becoming the default style for building enterprise applications. Sadly, however, there’s not much information that outlines what the microservice style is and how to do it.</em></p>
+</blockquote>
+
+<p>Mr. Wang Lei, the forerunner of domestic practice micro-service, also held a comprehensive discussion in the book “Micro Service Architecture and Practice”.</p>
+
+<p>Company based on ServiceComb, with micor-service properties, so we can doing  fine-grained control to the single-load serivce Company-manager, to achieve the purpose of on-demand, this will greatly helpful to accurately and effectively solve the application bottlenecks, improve the efficiency of resource use.</p>
+
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+  
+
+
+  
+  
+  
+
+  <p class="page__taxonomy">
+    <strong><i class="fa fa-fw fa-tags" aria-hidden="true"></i> Tags: </strong>
+    <span itemprop="keywords">
+    
+      
+      
+      <a href="/tags/#autoscale" class="page__taxonomy-item" rel="tag">autoscale</a><span class="sep">, </span>
+    
+      
+      
+      <a href="/tags/#kubernetes" class="page__taxonomy-item" rel="tag">kubernetes</a>
+    
+    </span>
+  </p>
+
+
+
+
+
+        
+          
+            
+              <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> Updated:</strong> <time datetime="2017-08-24T00:00:00+08:00">August 24, 2017</time></p>
+            
+          
+        
+      </footer>
+
+      <section class="page__share">
+  
+    <h4 class="page__share-title">Share on</h4>
+  
+
+  <a href="https://twitter.com/intent/tweet?via=ServiceComb&text=On-demand Resource Control for Micro-serviced Company by Autoscale /docs/autoscale-on-company/" class="btn btn--twitter" title="Share on Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
+
+  <a href="https://www.facebook.com/sharer/sharer.php?u=/docs/autoscale-on-company/" class="btn btn--facebook" title="Share on Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
+
+  <a href="https://plus.google.com/share?url=/docs/autoscale-on-company/" class="btn btn--google-plus" title="Share on Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
+
+  <a href="https://www.linkedin.com/shareArticle?mini=true&url=/docs/autoscale-on-company/" class="btn btn--linkedin" title="Share on LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
+</section>
+
+
+      
+  <nav class="pagination">
+    
+      <a href="/cn/docs/company-on-kubernetes/" class="pagination--pager" title="在kubernetes上一键式部署company
+">Previous</a>
+    
+    
+      <a href="/cn/docs/autoscale-on-company/" class="pagination--pager" title="微服务化后的按需精细化资源控制
+">Next</a>
+    
+  </nav>
+
+
+    </div>
+
+    
+      <div class="page__comments">
+  
+  
+    <section id="static-comments">
+      
+        <!-- Start static comments -->
+        <div class="js-comments">
+          
+        </div>
+        <!-- End static comments -->
+
+        <!-- Start new comment form -->
+        <h4 class="page__comments-title">Leave a Comment</h4>
+        <p class="small">Your email address will not be published. Required fields are marked <span class="required">*</span></p>
+        <form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/ServiceComb/servicesomb.github.io/master">
+          <div class="form__spinner">
+            <i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
+            <span class="sr-only">Loading...</span>
+          </div>
+
+          <fieldset>
+            <label for="comment-form-message">Comment <small class="required">*</small></label>
+            <textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
+            <div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">Markdown is supported.</a></div>
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-name">Name <small class="required">*</small></label>
+            <input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-email">Email address <small class="required">*</small></label>
+            <input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-url">Website (optional)</label>
+            <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
+          </fieldset>
+          <fieldset class="hidden" style="display: none;">
+            <input type="hidden" name="options[slug]" value="autoscale-on-company">
+            <label for="comment-form-location">Not used. Leave blank if you are a human.</label>
+            <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
+          </fieldset>
+          <!-- Start comment form alert messaging -->
+          <p class="hidden js-notice">
+            <strong class="js-notice-text"></strong>
+          </p>
+          <!-- End comment form alert messaging -->
+          <fieldset>
+            <button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--large">Submit Comment</button>
+          </fieldset>
+        </form>
+        <!-- End new comment form -->
+      
+    </section>
+  
+</div>
+
+    
+  </article>
+
+  
+  
+    <div class="page__related">
+      <h4 class="page__related-title">You May Also Enjoy</h4>
+      <div class="grid__wrapper">
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/jira_beginner_guide/" rel="permalink">老司机带你刷任务 - ServiceComb JIRA入门指南
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">ServiceComb JIRA入门指南
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  less than 1 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/how-to-reform-a-legacy-system/" rel="permalink">最头疼的遗留系统该如何改造?
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  1 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+      </div>
+    </div>
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _posts/2017-08-24-autoscale-on-company.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_posts/2017-08-24-autoscale-on-company.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  
+  <script>
+    (function ($) {
+    var $comments = $('.js-comments');
+
+    $('#new_comment').submit(function () {
+      var form = this;
+
+      $(form).addClass('disabled');
+      $('#comment-form-submit').html('<i class="fa fa-spinner fa-spin fa-fw"></i> Loading...');
+
+      $.ajax({
+        type: $(this).attr('method'),
+        url: $(this).attr('action'),
+        data: $(this).serialize(),
+        contentType: 'application/x-www-form-urlencoded',
+        success: function (data) {
+          $('#comment-form-submit').html('Submitted');
+          $('.page__comments-form .js-notice').removeClass('notice--danger');
+          $('.page__comments-form .js-notice').addClass('notice--success');
+          showAlert('Thanks for your comment! It will show on the site once it has been approved.');
+        },
+        error: function (err) {
+          console.log(err);
+          $('#comment-form-submit').html('Submit Comment');
+          $('.page__comments-form .js-notice').removeClass('notice--success');
+          $('.page__comments-form .js-notice').addClass('notice--danger');
+          showAlert('Sorry, there was an error with your submission. Please make sure all required fields have been completed and try again.');
+          $(form).removeClass('disabled');
+        }
+      });
+
+      return false;
+    });
+
+    function showAlert(message) {
+      $('.page__comments-form .js-notice').removeClass('hidden');
+      $('.page__comments-form .js-notice-text').html(message);
+    }
+  })(jQuery);
+  </script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/docs/communication-btw-sc-ms/index.html
----------------------------------------------------------------------
diff --git a/content/docs/communication-btw-sc-ms/index.html b/content/docs/communication-btw-sc-ms/index.html
new file mode 100644
index 0000000..e9be8b0
--- /dev/null
+++ b/content/docs/communication-btw-sc-ms/index.html
@@ -0,0 +1,792 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>Communication Between Service-Center and MicroServices - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="An introduction of how service-center and microservices work together">
+
+
+
+
+<meta name="author" content="Asif Siddiqui">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="Communication Between Service-Center and MicroServices">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/communication-btw-sc-ms/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/communication-btw-sc-ms/">
+
+
+
+  <meta property="og:description" content="An introduction of how service-center and microservices work together">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="Communication Between Service-Center and MicroServices">
+  <meta name="twitter:description" content="An introduction of how service-center and microservices work together">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+    <meta name="twitter:creator" content="@asif_diatm">
+  
+
+
+
+  
+
+  
+
+
+
+
+
+  <meta property="og:type" content="article">
+  <meta property="article:published_time" content="2017-08-09T00:00:00+08:00">
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/docs/communication-btw-sc-ms/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+
+<div itemscope itemtype="http://schema.org/Person">
+
+  
+
+  <div class="author__content">
+    <h3 class="author__name" itemprop="name">Asif Siddiqui</h3>
+    
+      <p class="author__bio" itemprop="description">
+	    
+        Gopher, PaaS and Microservice
+	    
+      </p>
+    
+  </div>
+
+  <div class="author__urls-wrapper">
+    <button class="btn btn--inverse">Follow</button>
+    <ul class="author__urls social-icons">
+      
+
+      
+        <li>
+          <a href="http://asifdxtreme.github.io" itemprop="url">
+            <i class="fa fa-fw fa-chain" aria-hidden="true"></i> Website
+          </a>
+        </li>
+      
+
+      
+        <li>
+          <a href="mailto:mohammad.asif.siddiqui1@huawei.com">
+            <meta itemprop="email" content="mohammad.asif.siddiqui1@huawei.com" />
+            <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> Email
+          </a>
+        </li>
+      
+
+      
+
+      
+        <li>
+          <a href="https://twitter.com/asif_diatm" itemprop="sameAs">
+            <i class="fa fa-fw fa-twitter-square" aria-hidden="true"></i> Twitter
+          </a>
+        </li>
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      <!--
+  <li>
+    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs">
+      <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link
+    </a>
+  </li>
+-->
+    </ul>
+  </div>
+</div>
+
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="Communication Between Service-Center and MicroServices">
+    <meta itemprop="description" content="An introduction of how service-center and microservices work together">
+    <meta itemprop="datePublished" content="August 09, 2017">
+    <meta itemprop="dateModified" content="August 09, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">Communication Between Service-Center and MicroServices
+</h1>
+            
+              <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  1 minute read
+
+</p>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <p>Service-Center(<a href="https://github.com/ServiceComb/service-center">SC</a>) is a service registry that allows services to register their instance information and to discover providers of a given service.
+SC uses etcd to store all the information of micro-service and its instances. Below is the diagram stating the working principles and flow of SC.</p>
+
+<h4 id="on-startup">On StartUp</h4>
+<p>Here we assume that micro-services are written using <a href="https://github.com/ServiceComb/java-chassis">java-chassis</a> sdk. So when micro-service boots up then java-chassis sdk does the following list of tasks.</p>
+
+<ol>
+  <li>
+    <p>On startup provider registers the micro-service to SC if not registered earlier and also register its instance information like its Ip and Port on which instance is running.</p>
+  </li>
+  <li>
+    <p>SC stores the provider information in etcd.</p>
+  </li>
+  <li>
+    <p>On startup consumer retrieves the list of all provider instance from SC using the micro-service name of the provider.</p>
+  </li>
+  <li>
+    <p>Consumer sdk stores all the information of provider instances in its cache.</p>
+  </li>
+  <li>
+    <p>Consumer sdk creates a web socket connection to SC to watch all the provider instance information, if there is any change in the provider then sdk updates it’s cache information.</p>
+  </li>
+</ol>
+
+<p><img src="/assets/images/onStartup.PNG" alt="OnStartup" class="align-center" /></p>
+
+<h4 id="communication-between-consumer---provider">Communication between Consumer -&gt; Provider</h4>
+<p>Once the bootup is successful then the consumer can communicate with providers flawlessly, below is the diagram illustrating the communication between provider and consumer.</p>
+
+<p><img src="/assets/images/communication.PNG" alt="Communication" class="align-center" /></p>
+
+<p>Provider instance regularly sends heartbeat signal every 30 seconds to SC, if SC does not recieve the heartbeat for particular instance then the information in etcd expires and the provider instance information is removed.<br />
+Consumer watches the information of provider instances from SC and if there is any change then the cache is updated.<br />
+When Consumer needs to communicate to Provider then consumer reads endpoints of the provider instances from cache and do loadbalancing to communicate to Provider.</p>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+  
+
+
+  
+  
+  
+
+  <p class="page__taxonomy">
+    <strong><i class="fa fa-fw fa-tags" aria-hidden="true"></i> Tags: </strong>
+    <span itemprop="keywords">
+    
+      
+      
+      <a href="/tags/#service-center" class="page__taxonomy-item" rel="tag">service center</a>
+    
+    </span>
+  </p>
+
+
+
+
+
+        
+          
+            
+              <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> Updated:</strong> <time datetime="2017-08-09">August 09, 2017</time></p>
+            
+          
+        
+      </footer>
+
+      <section class="page__share">
+  
+    <h4 class="page__share-title">Share on</h4>
+  
+
+  <a href="https://twitter.com/intent/tweet?via=ServiceComb&text=Communication Between Service-Center and MicroServices /docs/communication-btw-sc-ms/" class="btn btn--twitter" title="Share on Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
+
+  <a href="https://www.facebook.com/sharer/sharer.php?u=/docs/communication-btw-sc-ms/" class="btn btn--facebook" title="Share on Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
+
+  <a href="https://plus.google.com/share?url=/docs/communication-btw-sc-ms/" class="btn btn--google-plus" title="Share on Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
+
+  <a href="https://www.linkedin.com/shareArticle?mini=true&url=/docs/communication-btw-sc-ms/" class="btn btn--linkedin" title="Share on LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
+</section>
+
+
+      
+  <nav class="pagination">
+    
+      <a href="/cn/docs/tracing-with-servicecomb/" class="pagination--pager" title="基于 ServiceComb 和 Zipkin 的分布式调用链追踪
+">Previous</a>
+    
+    
+      <a href="/cn/docs/communication-btw-sc-ms/" class="pagination--pager" title="Communication Between Service-Center and MicroServices
+">Next</a>
+    
+  </nav>
+
+
+    </div>
+
+    
+      <div class="page__comments">
+  
+  
+    <section id="static-comments">
+      
+        <!-- Start static comments -->
+        <div class="js-comments">
+          
+        </div>
+        <!-- End static comments -->
+
+        <!-- Start new comment form -->
+        <h4 class="page__comments-title">Leave a Comment</h4>
+        <p class="small">Your email address will not be published. Required fields are marked <span class="required">*</span></p>
+        <form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/ServiceComb/servicesomb.github.io/master">
+          <div class="form__spinner">
+            <i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
+            <span class="sr-only">Loading...</span>
+          </div>
+
+          <fieldset>
+            <label for="comment-form-message">Comment <small class="required">*</small></label>
+            <textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
+            <div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">Markdown is supported.</a></div>
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-name">Name <small class="required">*</small></label>
+            <input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-email">Email address <small class="required">*</small></label>
+            <input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-url">Website (optional)</label>
+            <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
+          </fieldset>
+          <fieldset class="hidden" style="display: none;">
+            <input type="hidden" name="options[slug]" value="communication-btw-sc-ms">
+            <label for="comment-form-location">Not used. Leave blank if you are a human.</label>
+            <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
+          </fieldset>
+          <!-- Start comment form alert messaging -->
+          <p class="hidden js-notice">
+            <strong class="js-notice-text"></strong>
+          </p>
+          <!-- End comment form alert messaging -->
+          <fieldset>
+            <button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--large">Submit Comment</button>
+          </fieldset>
+        </form>
+        <!-- End new comment form -->
+      
+    </section>
+  
+</div>
+
+    
+  </article>
+
+  
+  
+    <div class="page__related">
+      <h4 class="page__related-title">You May Also Enjoy</h4>
+      <div class="grid__wrapper">
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/jira_beginner_guide/" rel="permalink">老司机带你刷任务 - ServiceComb JIRA入门指南
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">ServiceComb JIRA入门指南
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  less than 1 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/how-to-reform-a-legacy-system/" rel="permalink">最头疼的遗留系统该如何改造?
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  1 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+      </div>
+    </div>
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _posts/2017-08-09-communication-btw-sc-ms.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_posts/2017-08-09-communication-btw-sc-ms.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  
+  <script>
+    (function ($) {
+    var $comments = $('.js-comments');
+
+    $('#new_comment').submit(function () {
+      var form = this;
+
+      $(form).addClass('disabled');
+      $('#comment-form-submit').html('<i class="fa fa-spinner fa-spin fa-fw"></i> Loading...');
+
+      $.ajax({
+        type: $(this).attr('method'),
+        url: $(this).attr('action'),
+        data: $(this).serialize(),
+        contentType: 'application/x-www-form-urlencoded',
+        success: function (data) {
+          $('#comment-form-submit').html('Submitted');
+          $('.page__comments-form .js-notice').removeClass('notice--danger');
+          $('.page__comments-form .js-notice').addClass('notice--success');
+          showAlert('Thanks for your comment! It will show on the site once it has been approved.');
+        },
+        error: function (err) {
+          console.log(err);
+          $('#comment-form-submit').html('Submit Comment');
+          $('.page__comments-form .js-notice').removeClass('notice--success');
+          $('.page__comments-form .js-notice').addClass('notice--danger');
+          showAlert('Sorry, there was an error with your submission. Please make sure all required fields have been completed and try again.');
+          $(form).removeClass('disabled');
+        }
+      });
+
+      return false;
+    });
+
+    function showAlert(message) {
+      $('.page__comments-form .js-notice').removeClass('hidden');
+      $('.page__comments-form .js-notice-text').html(message);
+    }
+  })(jQuery);
+  </script>
+
+
+
+
+
+
+
+  </body>
+</html>


[45/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/js/prism.js
----------------------------------------------------------------------
diff --git a/content/assets/js/prism.js b/content/assets/js/prism.js
new file mode 100644
index 0000000..b349530
--- /dev/null
+++ b/content/assets/js/prism.js
@@ -0,0 +1,24 @@
+/* http://prismjs.com/download.html?themes=prism-coy&languages=markup+clike+javascript+bash+batch+c+csharp+cpp+docker+git+go+java+json+markdown+protobuf+yaml&plugins=line-highlight+line-numbers+file-highlight+toolbar+highlight-keywords+copy-to-clipboard */
+var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(){var e=/\blang(?:uage)?-(\w+)\b/i,t=0,n=_self.Prism={manual:_self.Prism&&_self.Prism.manual,util:{encode:function(e){return e instanceof a?new a(e.type,n.util.encode(e.content),e.alias):"Array"===n.util.type(e)?e.map(n.util.encode):e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).match(/\[object (\w+)\]/)[1]},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function(e){var t=n.util.type(e);switch(t){case"Object":var a={};for(var r in e)e.hasOwnProperty(r)&&(a[r]=n.util.clone(e[r]));return a;case"Array":return e.map&&e.map(function(e){return n.util.clone(e)})}return e}},languages:{extend:function(e,t){var a=n.util.clone(n.languages[e]);for(var r in t)a[r]=t[r];return a},insertBefore:function(e,t,a,r){r=r||n.languages;var i=r[e]
 ;if(2==arguments.length){a=arguments[1];for(var l in a)a.hasOwnProperty(l)&&(i[l]=a[l]);return i}var o={};for(var s in i)if(i.hasOwnProperty(s)){if(s==t)for(var l in a)a.hasOwnProperty(l)&&(o[l]=a[l]);o[s]=i[s]}return n.languages.DFS(n.languages,function(t,n){n===r[e]&&t!=e&&(this[t]=o)}),r[e]=o},DFS:function(e,t,a,r){r=r||{};for(var i in e)e.hasOwnProperty(i)&&(t.call(e,i,e[i],a||i),"Object"!==n.util.type(e[i])||r[n.util.objId(e[i])]?"Array"!==n.util.type(e[i])||r[n.util.objId(e[i])]||(r[n.util.objId(e[i])]=!0,n.languages.DFS(e[i],t,i,r)):(r[n.util.objId(e[i])]=!0,n.languages.DFS(e[i],t,null,r)))}},plugins:{},highlightAll:function(e,t){var a={callback:t,selector:'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'};n.hooks.run("before-highlightall",a);for(var r,i=a.elements||document.querySelectorAll(a.selector),l=0;r=i[l++];)n.highlightElement(r,e===!0,a.callback)},highlightElement:function(t,a,r){for(var i,l,o=t;o&&!e.test(o.className
 );)o=o.parentNode;o&&(i=(o.className.match(e)||[,""])[1].toLowerCase(),l=n.languages[i]),t.className=t.className.replace(e,"").replace(/\s+/g," ")+" language-"+i,o=t.parentNode,/pre/i.test(o.nodeName)&&(o.className=o.className.replace(e,"").replace(/\s+/g," ")+" language-"+i);var s=t.textContent,u={element:t,language:i,grammar:l,code:s};if(n.hooks.run("before-sanity-check",u),!u.code||!u.grammar)return u.code&&(n.hooks.run("before-highlight",u),u.element.textContent=u.code,n.hooks.run("after-highlight",u)),n.hooks.run("complete",u),void 0;if(n.hooks.run("before-highlight",u),a&&_self.Worker){var g=new Worker(n.filename);g.onmessage=function(e){u.highlightedCode=e.data,n.hooks.run("before-insert",u),u.element.innerHTML=u.highlightedCode,r&&r.call(u.element),n.hooks.run("after-highlight",u),n.hooks.run("complete",u)},g.postMessage(JSON.stringify({language:u.language,code:u.code,immediateClose:!0}))}else u.highlightedCode=n.highlight(u.code,u.grammar,u.language),n.hooks.run("before-ins
 ert",u),u.element.innerHTML=u.highlightedCode,r&&r.call(t),n.hooks.run("after-highlight",u),n.hooks.run("complete",u)},highlight:function(e,t,r){var i=n.tokenize(e,t);return a.stringify(n.util.encode(i),r)},matchGrammar:function(e,t,a,r,i,l,o){var s=n.Token;for(var u in a)if(a.hasOwnProperty(u)&&a[u]){if(u==o)return;var g=a[u];g="Array"===n.util.type(g)?g:[g];for(var c=0;c<g.length;++c){var h=g[c],f=h.inside,d=!!h.lookbehind,m=!!h.greedy,p=0,y=h.alias;if(m&&!h.pattern.global){var v=h.pattern.toString().match(/[imuy]*$/)[0];h.pattern=RegExp(h.pattern.source,v+"g")}h=h.pattern||h;for(var b=r,k=i;b<t.length;k+=t[b].length,++b){var w=t[b];if(t.length>e.length)return;if(!(w instanceof s)){h.lastIndex=0;var _=h.exec(w),P=1;if(!_&&m&&b!=t.length-1){if(h.lastIndex=k,_=h.exec(e),!_)break;for(var A=_.index+(d?_[1].length:0),j=_.index+_[0].length,x=b,O=k,S=t.length;S>x&&(j>O||!t[x].type&&!t[x-1].greedy);++x)O+=t[x].length,A>=O&&(++b,k=O);if(t[b]instanceof s||t[x-1].greedy)continue;P=x-b,w=e.sl
 ice(k,O),_.index-=k}if(_){d&&(p=_[1].length);var A=_.index+p,_=_[0].slice(p),j=A+_.length,N=w.slice(0,A),C=w.slice(j),E=[b,P];N&&(++b,k+=N.length,E.push(N));var L=new s(u,f?n.tokenize(_,f):_,y,_,m);if(E.push(L),C&&E.push(C),Array.prototype.splice.apply(t,E),1!=P&&n.matchGrammar(e,t,a,b,k,!0,u),l)break}else if(l)break}}}}},tokenize:function(e,t){var a=[e],r=t.rest;if(r){for(var i in r)t[i]=r[i];delete t.rest}return n.matchGrammar(e,a,t,0,0,!1),a},hooks:{all:{},add:function(e,t){var a=n.hooks.all;a[e]=a[e]||[],a[e].push(t)},run:function(e,t){var a=n.hooks.all[e];if(a&&a.length)for(var r,i=0;r=a[i++];)r(t)}}},a=n.Token=function(e,t,n,a,r){this.type=e,this.content=t,this.alias=n,this.length=0|(a||"").length,this.greedy=!!r};if(a.stringify=function(e,t,r){if("string"==typeof e)return e;if("Array"===n.util.type(e))return e.map(function(n){return a.stringify(n,t,e)}).join("");var i={type:e.type,content:a.stringify(e.content,t,r),tag:"span",classes:["token",e.type],attributes:{},language:t,
 parent:r};if("comment"==i.type&&(i.attributes.spellcheck="true"),e.alias){var l="Array"===n.util.type(e.alias)?e.alias:[e.alias];Array.prototype.push.apply(i.classes,l)}n.hooks.run("wrap",i);var o=Object.keys(i.attributes).map(function(e){return e+'="'+(i.attributes[e]||"").replace(/"/g,"&quot;")+'"'}).join(" ");return"<"+i.tag+' class="'+i.classes.join(" ")+'"'+(o?" "+o:"")+">"+i.content+"</"+i.tag+">"},!_self.document)return _self.addEventListener?(_self.addEventListener("message",function(e){var t=JSON.parse(e.data),a=t.language,r=t.code,i=t.immediateClose;_self.postMessage(n.highlight(r,n.languages[a],a)),i&&_self.close()},!1),_self.Prism):_self.Prism;var r=document.currentScript||[].slice.call(document.getElementsByTagName("script")).pop();return r&&(n.filename=r.src,!document.addEventListener||n.manual||r.hasAttribute("data-manual")||("loading"!==document.readyState?window.requestAnimationFrame?window.requestAnimationFrame(n.highlightAll):window.setTimeout(n.highlightAll,16):d
 ocument.addEventListener("DOMContentLoaded",n.highlightAll))),_self.Prism}();"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism);
+Prism.languages.markup={comment:/<!--[\s\S]*?-->/,prolog:/<\?[\s\S]+?\?>/,doctype:/<!DOCTYPE[\s\S]+?>/i,cdata:/<!\[CDATA\[[\s\S]*?]]>/i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\s\S])*\1|[^\s'">=]+))?)*\s*\/?>/i,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=(?:('|")[\s\S]*?(\1)|[^\s>]+)/i,inside:{punctuation:/[=>"']/}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/&#?[\da-z]{1,8};/i},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.hooks.add("wrap",function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&amp;/,"&"))}),Prism.languages.xml=Prism.languages.markup,Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup;
+Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?\*\//,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0}],string:{pattern:/(["'])(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/i,lookbehind:!0,inside:{punctuation:/(\.|\\)/}},keyword:/\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,"boolean":/\b(true|false)\b/,"function":/[a-z0-9_]+(?=\()/i,number:/\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)\b/i,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,punctuation:/[{}[\];(),.:]/};
+Prism.languages.javascript=Prism.languages.extend("clike",{keyword:/\b(as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\b/,number:/\b-?(0[xX][\dA-Fa-f]+|0[bB][01]+|0[oO][0-7]+|\d*\.?\d+([Ee][+-]?\d+)?|NaN|Infinity)\b/,"function":/[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*(?=\()/i,operator:/-[-=]?|\+[+=]?|!=?=?|<<?=?|>>?>?=?|=(?:==?|>)?|&[&=]?|\|[|=]?|\*\*?=?|\/=?|~|\^=?|%=?|\?|\.{3}/}),Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/(^|[^\/])\/(?!\/)(\[[^\]\r\n]+]|\\.|[^\/\\\[\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})]))/,lookbehind:!0,greedy:!0}}),Prism.languages.insertBefore("javascript","string",{"template-string":{pattern:/`(?:\\\\|\\?[^\\])*?`/,greedy:!0,inside:{interpolation:{pattern:/\$\{[^}]+\}/,i
 nside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}}}),Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{script:{pattern:/(<script[\s\S]*?>)[\s\S]*?(?=<\/script>)/i,lookbehind:!0,inside:Prism.languages.javascript,alias:"language-javascript"}}),Prism.languages.js=Prism.languages.javascript;
+!function(e){var t={variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b-?(?:0x[\dA-Fa-f]+|\d*\.?\d+(?:[Ee]-?\d+)?)\b/,operator:/--?|-=|\+\+?|\+=|!=?|~|\*\*?|\*=|\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\^=?|\|\|?|\|=|\?|:/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\([^)]+\)|`[^`]+`/,inside:{variable:/^\$\(|^`|\)$|`$/}},/\$(?:[a-z0-9_#\?\*!@]+|\{[^}]+\})/i]};e.languages.bash={shebang:{pattern:/^#!\s*\/bin\/bash|^#!\s*\/bin\/sh/,alias:"important"},comment:{pattern:/(^|[^"{\\])#.*/,lookbehind:!0},string:[{pattern:/((?:^|[^<])<<\s*)(?:"|')?(\w+?)(?:"|')?\s*\r?\n(?:[\s\S])*?\r?\n\2/g,lookbehind:!0,greedy:!0,inside:t},{pattern:/(["'])(?:\\\\|\\?[^\\])*?\1/g,greedy:!0,inside:t}],variable:t.variable,"function":{pattern:/(^|\s|;|\||&)(?:alias|apropos|apt-get|aptitude|aspell|awk|basename|bash|bc|bg|builtin|bzip2|cal|cat|cd|cfdisk|chgrp|chmod|chown|chroot|chkconfig|cksum|clear|cmp|comm|command|cp|cron|crontab|csplit|cut
 |date|dc|dd|ddrescue|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|enable|env|ethtool|eval|exec|expand|expect|export|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|getopts|git|grep|groupadd|groupdel|groupmod|groups|gzip|hash|head|help|hg|history|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|jobs|join|kill|killall|less|link|ln|locate|logname|logout|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|make|man|mkdir|mkfifo|mkisofs|mknod|more|most|mount|mtools|mtr|mv|mmv|nano|netstat|nice|nl|nohup|notify-send|npm|nslookup|open|op|passwd|paste|pathchk|ping|pkill|popd|pr|printcap|printenv|printf|ps|pushd|pv|pwd|quota|quotacheck|quotactl|ram|rar|rcp|read|readarray|readonly|reboot|rename|renice|remsync|rev|rm|rmdir|rsync|screen|scp|sdiff|sed|seq|service|sftp|shift|shopt|shutdown|sleep|slocate|sort|source|split|ssh|stat|strace|su|sudo|sum|suspend|sync|tail|tar|tee|test|time|timeout|times|touch|top|traceroute|trap|tr|tsort|tty|typ
 e|ulimit|umask|umount|unalias|uname|unexpand|uniq|units|unrar|unshar|uptime|useradd|userdel|usermod|users|uuencode|uudecode|v|vdir|vi|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yes|zip)(?=$|\s|;|\||&)/,lookbehind:!0},keyword:{pattern:/(^|\s|;|\||&)(?:let|:|\.|if|then|else|elif|fi|for|break|continue|while|in|case|function|select|do|done|until|echo|exit|return|set|declare)(?=$|\s|;|\||&)/,lookbehind:!0},"boolean":{pattern:/(^|\s|;|\||&)(?:true|false)(?=$|\s|;|\||&)/,lookbehind:!0},operator:/&&?|\|\|?|==?|!=?|<<<?|>>|<=?|>=?|=~/,punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];]/};var a=t.variable[1].inside;a["function"]=e.languages.bash["function"],a.keyword=e.languages.bash.keyword,a.boolean=e.languages.bash.boolean,a.operator=e.languages.bash.operator,a.punctuation=e.languages.bash.punctuation}(Prism);
+!function(e){var r=/%%?[~:\w]+%?|!\S+!/,t={pattern:/\/[a-z?]+(?=[ :]|$):?|-[a-z]\b|--[a-z-]+\b/im,alias:"attr-name",inside:{punctuation:/:/}},n=/"[^"]*"/,i=/(?:\b|-)\d+\b/;e.languages.batch={comment:[/^::.*/m,{pattern:/((?:^|[&(])[ \t]*)rem\b(?:[^^&)\r\n]|\^(?:\r\n|[\s\S]))*/im,lookbehind:!0}],label:{pattern:/^:.*/m,alias:"property"},command:[{pattern:/((?:^|[&(])[ \t]*)for(?: ?\/[a-z?](?:[ :](?:"[^"]*"|\S+))?)* \S+ in \([^)]+\) do/im,lookbehind:!0,inside:{keyword:/^for\b|\b(?:in|do)\b/i,string:n,parameter:t,variable:r,number:i,punctuation:/[()',]/}},{pattern:/((?:^|[&(])[ \t]*)if(?: ?\/[a-z?](?:[ :](?:"[^"]*"|\S+))?)* (?:not )?(?:cmdextversion \d+|defined \w+|errorlevel \d+|exist \S+|(?:"[^"]*"|\S+)?(?:==| (?:equ|neq|lss|leq|gtr|geq) )(?:"[^"]*"|\S+))/im,lookbehind:!0,inside:{keyword:/^if\b|\b(?:not|cmdextversion|defined|errorlevel|exist)\b/i,string:n,parameter:t,variable:r,number:i,operator:/\^|==|\b(?:equ|neq|lss|leq|gtr|geq)\b/i}},{pattern:/((?:^|[&()])[ \t]*)else\b/im,lookbehin
 d:!0,inside:{keyword:/^else\b/i}},{pattern:/((?:^|[&(])[ \t]*)set(?: ?\/[a-z](?:[ :](?:"[^"]*"|\S+))?)* (?:[^^&)\r\n]|\^(?:\r\n|[\s\S]))*/im,lookbehind:!0,inside:{keyword:/^set\b/i,string:n,parameter:t,variable:[r,/\w+(?=(?:[*\/%+\-&^|]|<<|>>)?=)/],number:i,operator:/[*\/%+\-&^|]=?|<<=?|>>=?|[!~_=]/,punctuation:/[()',]/}},{pattern:/((?:^|[&(])[ \t]*@?)\w+\b(?:[^^&)\r\n]|\^(?:\r\n|[\s\S]))*/im,lookbehind:!0,inside:{keyword:/^\w+\b/i,string:n,parameter:t,label:{pattern:/(^\s*):\S+/m,lookbehind:!0,alias:"property"},variable:r,number:i,operator:/\^/}}],operator:/[&@]/,punctuation:/[()']/}}(Prism);
+Prism.languages.c=Prism.languages.extend("clike",{keyword:/\b(asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while)\b/,operator:/\-[>-]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|?\||[~^%?*\/]/,number:/\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)[ful]*\b/i}),Prism.languages.insertBefore("c","string",{macro:{pattern:/(^\s*)#\s*[a-z]+([^\r\n\\]|\\.|\\(?:\r\n?|\n))*/im,lookbehind:!0,alias:"property",inside:{string:{pattern:/(#\s*include\s*)(<.+?>|("|')(\\?.)+?\3)/,lookbehind:!0},directive:{pattern:/(#\s*)\b(define|elif|else|endif|error|ifdef|ifndef|if|import|include|line|pragma|undef|using)\b/,lookbehind:!0,alias:"keyword"}}},constant:/\b(__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|__func__|EOF|NULL|stdin|stdout|stderr)\b/}),delete Prism.languages.c["class-name"],delete Prism.languages.c["boolean"];
+Prism.languages.csharp=Prism.languages.extend("clike",{keyword:/\b(abstract|as|async|await|base|bool|break|byte|case|catch|char|checked|class|const|continue|decimal|default|delegate|do|double|else|enum|event|explicit|extern|false|finally|fixed|float|for|foreach|goto|if|implicit|in|int|interface|internal|is|lock|long|namespace|new|null|object|operator|out|override|params|private|protected|public|readonly|ref|return|sbyte|sealed|short|sizeof|stackalloc|static|string|struct|switch|this|throw|true|try|typeof|uint|ulong|unchecked|unsafe|ushort|using|virtual|void|volatile|while|add|alias|ascending|async|await|descending|dynamic|from|get|global|group|into|join|let|orderby|partial|remove|select|set|value|var|where|yield)\b/,string:[{pattern:/@("|')(\1\1|\\\1|\\?(?!\1)[\s\S])*\1/,greedy:!0},{pattern:/("|')(\\?.)*?\1/,greedy:!0}],number:/\b-?(0x[\da-f]+|\d*\.?\d+f?)\b/i}),Prism.languages.insertBefore("csharp","keyword",{"generic-method":{pattern:/[a-z0-9_]+\s*<[^>\r\n]+?>\s*(?=\()/i,alias:"fu
 nction",inside:{keyword:Prism.languages.csharp.keyword,punctuation:/[<>(),.:]/}},preprocessor:{pattern:/(^\s*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(\s*#)\b(define|elif|else|endif|endregion|error|if|line|pragma|region|undef|warning)\b/,lookbehind:!0,alias:"keyword"}}}});
+Prism.languages.cpp=Prism.languages.extend("c",{keyword:/\b(alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|class|compl|const|constexpr|const_cast|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,"boolean":/\b(true|false)\b/,operator:/[-+]{1,2}|!=?|<{1,2}=?|>{1,2}=?|\->|:{1,2}|={1,2}|\^|~|%|&{1,2}|\|?\||\?|\*|\/|\b(and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/}),Prism.languages.insertBefore("cpp","keyword",{"class-name":{pattern:/(class\s+)[a-z0-9_]+/i,lookbehind:!0}});
+Prism.languages.docker={keyword:{pattern:/(^\s*)(?:ONBUILD|FROM|MAINTAINER|RUN|EXPOSE|ENV|ADD|COPY|VOLUME|USER|WORKDIR|CMD|LABEL|ENTRYPOINT)(?=\s)/mi,lookbehind:true},string:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*?\1/,comment:/#.*/,punctuation:/---|\.\.\.|[:[\]{}\-,|>?]/};Prism.languages.dockerfile=Prism.languages.docker;
+Prism.languages.git={comment:/^#.*/m,deleted:/^[-–].*/m,inserted:/^\+.*/m,string:/("|')(\\?.)*?\1/m,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s(--|-)\w+/m}},coord:/^@@.*@@$/m,commit_sha1:/^commit \w{40}$/m};
+Prism.languages.go=Prism.languages.extend("clike",{keyword:/\b(break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,builtin:/\b(bool|byte|complex(64|128)|error|float(32|64)|rune|string|u?int(8|16|32|64|)|uintptr|append|cap|close|complex|copy|delete|imag|len|make|new|panic|print(ln)?|real|recover)\b/,"boolean":/\b(_|iota|nil|true|false)\b/,operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,number:/\b(-?(0x[a-f\d]+|(\d+\.?\d*|\.\d+)(e[-+]?\d+)?)i?)\b/i,string:{pattern:/("|'|`)(\\?.|\r|\n)*?\1/,greedy:!0}}),delete Prism.languages.go["class-name"];
+Prism.languages.java=Prism.languages.extend("clike",{keyword:/\b(abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while)\b/,number:/\b0b[01]+\b|\b0x[\da-f]*\.?[\da-fp\-]+\b|\b\d*\.?\d+(?:e[+-]?\d+)?[df]?\b/i,operator:{pattern:/(^|[^.])(?:\+[+=]?|-[-=]?|!=?|<<?=?|>>?>?=?|==?|&[&=]?|\|[|=]?|\*=?|\/=?|%=?|\^=?|[?:~])/m,lookbehind:!0}}),Prism.languages.insertBefore("java","function",{annotation:{alias:"punctuation",pattern:/(^|[^.])@\w+/,lookbehind:!0}});
+Prism.languages.json={property:/"(?:\\.|[^\\"])*"(?=\s*:)/gi,string:/"(?!:)(?:\\.|[^\\"])*"(?!:)/g,number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee][+-]?\d+)?)\b/g,punctuation:/[{}[\]);,]/g,operator:/:/g,"boolean":/\b(true|false)\b/gi,"null":/\bnull\b/gi},Prism.languages.jsonp=Prism.languages.json;
+Prism.languages.markdown=Prism.languages.extend("markup",{}),Prism.languages.insertBefore("markdown","prolog",{blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},code:[{pattern:/^(?: {4}|\t).+/m,alias:"keyword"},{pattern:/``.+?``|`[^`\n]+`/,alias:"keyword"}],title:[{pattern:/\w+.*(?:\r?\n|\r)(?:==+|--+)/,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#+.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])([\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:/(^|[^\\])(\*\*|__)(?:(?:\r?\n|\r)(?!\r?\n|\r)|.
 )+?\2/,lookbehind:!0,inside:{punctuation:/^\*\*|^__|\*\*$|__$/}},italic:{pattern:/(^|[^\\])([*_])(?:(?:\r?\n|\r)(?!\r?\n|\r)|.)+?\2/,lookbehind:!0,inside:{punctuation:/^[*_]|[*_]$/}},url:{pattern:/!?\[[^\]]+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)| ?\[[^\]\n]*\])/,inside:{variable:{pattern:/(!?\[)[^\]]+(?=\]$)/,lookbehind:!0},string:{pattern:/"(?:\\.|[^"\\])*"(?=\)$)/}}}}),Prism.languages.markdown.bold.inside.url=Prism.util.clone(Prism.languages.markdown.url),Prism.languages.markdown.italic.inside.url=Prism.util.clone(Prism.languages.markdown.url),Prism.languages.markdown.bold.inside.italic=Prism.util.clone(Prism.languages.markdown.italic),Prism.languages.markdown.italic.inside.bold=Prism.util.clone(Prism.languages.markdown.bold);
+Prism.languages.protobuf=Prism.languages.extend("clike",{keyword:/\b(package|import|message|enum)\b/,builtin:/\b(required|repeated|optional|reserved)\b/,primitive:{pattern:/\b(double|float|int32|int64|uint32|uint64|sint32|sint64|fixed32|fixed64|sfixed32|sfixed64|bool|string|bytes)\b/,alias:"symbol"}});
+Prism.languages.yaml={scalar:{pattern:/([\-:]\s*(![^\s]+)?[ \t]*[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)[^\r\n]+(?:\3[^\r\n]+)*)/,lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:/(\s*(?:^|[:\-,[{\r\n?])[ \t]*(![^\s]+)?[ \t]*)[^\r\n{[\]},#\s]+?(?=\s*:\s)/,lookbehind:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:/([:\-,[{]\s*(![^\s]+)?[ \t]*)(\d{4}-\d\d?-\d\d?([tT]|[ \t]+)\d\d?:\d{2}:\d{2}(\.\d*)?[ \t]*(Z|[-+]\d\d?(:\d{2})?)?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(:\d{2}(\.\d*)?)?)(?=[ \t]*($|,|]|}))/m,lookbehind:!0,alias:"number"},"boolean":{pattern:/([:\-,[{]\s*(![^\s]+)?[ \t]*)(true|false)[ \t]*(?=$|,|]|})/im,lookbehind:!0,alias:"important"},"null":{pattern:/([:\-,[{]\s*(![^\s]+)?[ \t]*)(null|~)[ \t]*(?=$|,|]|})/im,lookbehind:!0,alias:"important"},string:{pattern:/([:\-,[{]\s*(![^\s]+)?[ \t]*)("(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*')(?=[ \t]*($|,|]|}))/m,lookbehind:!0,greedy:!0},number:{pattern:/([:\-,[{]\s*(![^\s]+)?[ \t]*)[+\-]?(0x
 [\da-f]+|0o[0-7]+|(\d+\.?\d*|\.?\d+)(e[\+\-]?\d+)?|\.inf|\.nan)[ \t]*(?=$|,|]|})/im,lookbehind:!0},tag:/![^\s]+/,important:/[&*][\w]+/,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./};
+!function(){function e(e,t){return Array.prototype.slice.call((t||document).querySelectorAll(e))}function t(e,t){return t=" "+t+" ",(" "+e.className+" ").replace(/[\n\t]/g," ").indexOf(t)>-1}function n(e,n,i){for(var o,a=n.replace(/\s+/g,"").split(","),d=+e.getAttribute("data-line-offset")||0,l=r()?parseInt:parseFloat,c=l(getComputedStyle(e).lineHeight),s=0;o=a[s++];){o=o.split("-");var u=+o[0],m=+o[1]||u,h=document.createElement("div");h.textContent=Array(m-u+2).join(" \n"),h.setAttribute("aria-hidden","true"),h.className=(i||"")+" line-highlight",t(e,"line-numbers")||(h.setAttribute("data-start",u),m>u&&h.setAttribute("data-end",m)),h.style.top=(u-d-1)*c+"px",t(e,"line-numbers")?e.appendChild(h):(e.querySelector("code")||e).appendChild(h)}}function i(){var t=location.hash.slice(1);e(".temporary.line-highlight").forEach(function(e){e.parentNode.removeChild(e)});var i=(t.match(/\.([\d,-]+)$/)||[,""])[1];if(i&&!document.getElementById(t)){var r=t.slice(0,t.lastIndexOf(".")),o=documen
 t.getElementById(r);o&&(o.hasAttribute("data-line")||o.setAttribute("data-line",""),n(o,i,"temporary "),document.querySelector(".temporary.line-highlight").scrollIntoView())}}if("undefined"!=typeof self&&self.Prism&&self.document&&document.querySelector){var r=function(){var e;return function(){if("undefined"==typeof e){var t=document.createElement("div");t.style.fontSize="13px",t.style.lineHeight="1.5",t.style.padding=0,t.style.border=0,t.innerHTML="&nbsp;<br />&nbsp;",document.body.appendChild(t),e=38===t.offsetHeight,document.body.removeChild(t)}return e}}(),o=0;Prism.hooks.add("before-sanity-check",function(t){var n=t.element.parentNode,i=n&&n.getAttribute("data-line");if(n&&i&&/pre/i.test(n.nodeName)){var r=0;e(".line-highlight",n).forEach(function(e){r+=e.textContent.length,e.parentNode.removeChild(e)}),r&&/^( \n)+$/.test(t.code.slice(-r))&&(t.code=t.code.slice(0,-r))}}),Prism.hooks.add("complete",function(e){var t=e.element.parentNode,r=t&&t.getAttribute("data-line");t&&r&&/p
 re/i.test(t.nodeName)&&(clearTimeout(o),n(t,r),o=setTimeout(i,1))}),window.addEventListener&&window.addEventListener("hashchange",i)}}();
+!function(){"undefined"!=typeof self&&self.Prism&&self.document&&Prism.hooks.add("complete",function(e){if(e.code){var t=e.element.parentNode,s=/\s*\bline-numbers\b\s*/;if(t&&/pre/i.test(t.nodeName)&&(s.test(t.className)||s.test(e.element.className))&&!e.element.querySelector(".line-numbers-rows")){s.test(e.element.className)&&(e.element.className=e.element.className.replace(s,"")),s.test(t.className)||(t.className+=" line-numbers");var n,a=e.code.match(/\n(?!$)/g),l=a?a.length+1:1,r=new Array(l+1);r=r.join("<span></span>"),n=document.createElement("span"),n.setAttribute("aria-hidden","true"),n.className="line-numbers-rows",n.innerHTML=r,t.hasAttribute("data-start")&&(t.style.counterReset="linenumber "+(parseInt(t.getAttribute("data-start"),10)-1)),e.element.appendChild(n)}}})}();
+!function(){"undefined"!=typeof self&&self.Prism&&self.document&&document.querySelector&&(self.Prism.fileHighlight=function(){var e={js:"javascript",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell",sh:"bash",bat:"batch",h:"c",tex:"latex"};Array.prototype.forEach&&Array.prototype.slice.call(document.querySelectorAll("pre[data-src]")).forEach(function(t){for(var a,s=t.getAttribute("data-src"),n=t,r=/\blang(?:uage)?-(?!\*)(\w+)\b/i;n&&!r.test(n.className);)n=n.parentNode;if(n&&(a=(t.className.match(r)||[,""])[1]),!a){var o=(s.match(/\.(\w+)$/)||[,""])[1];a=e[o]||o}var l=document.createElement("code");l.className="language-"+a,t.textContent="",l.textContent="Loading…",t.appendChild(l);var i=new XMLHttpRequest;i.open("GET",s,!0),i.onreadystatechange=function(){4==i.readyState&&(i.status<400&&i.responseText?(l.textContent=i.responseText,Prism.highlightElement(l)):l.textContent=i.status>=400?"✖ Error "+i.status+" while fetching file: "+i.statusText:"✖ Error: File does not exi
 st or is empty")},i.send(null)})},document.addEventListener("DOMContentLoaded",self.Prism.fileHighlight))}();
+!function(){if("undefined"!=typeof self&&self.Prism&&self.document){var t=[],e={},n=function(){};Prism.plugins.toolbar={};var a=Prism.plugins.toolbar.registerButton=function(n,a){var o;o="function"==typeof a?a:function(t){var e;return"function"==typeof a.onClick?(e=document.createElement("button"),e.type="button",e.addEventListener("click",function(){a.onClick.call(this,t)})):"string"==typeof a.url?(e=document.createElement("a"),e.href=a.url):e=document.createElement("span"),e.textContent=a.text,e},t.push(e[n]=o)},o=Prism.plugins.toolbar.hook=function(a){var o=a.element.parentNode;if(o&&/pre/i.test(o.nodeName)&&!o.classList.contains("code-toolbar")){o.classList.add("code-toolbar");var r=document.createElement("div");r.classList.add("toolbar"),document.body.hasAttribute("data-toolbar-order")&&(t=document.body.getAttribute("data-toolbar-order").split(",").map(function(t){return e[t]||n})),t.forEach(function(t){var e=t(a);if(e){var n=document.createElement("div");n.classList.add("toolb
 ar-item"),n.appendChild(e),r.appendChild(n)}}),o.appendChild(r)}};a("label",function(t){var e=t.element.parentNode;if(e&&/pre/i.test(e.nodeName)&&e.hasAttribute("data-label")){var n,a,o=e.getAttribute("data-label");try{a=document.querySelector("template#"+o)}catch(r){}return a?n=a.content:(e.hasAttribute("data-url")?(n=document.createElement("a"),n.href=e.getAttribute("data-url")):n=document.createElement("span"),n.textContent=o),n}}),Prism.hooks.add("complete",o)}}();
+!function(){"undefined"!=typeof self&&!self.Prism||"undefined"!=typeof global&&!global.Prism||Prism.hooks.add("wrap",function(e){"keyword"===e.type&&e.classes.push("keyword-"+e.content)})}();
+!function(){if("undefined"!=typeof self&&self.Prism&&self.document){if(!Prism.plugins.toolbar)return console.warn("Copy to Clipboard plugin loaded before Toolbar plugin."),void 0;var o=window.Clipboard||void 0;o||"function"!=typeof require||(o=require("clipboard"));var e=[];if(!o){var t=document.createElement("script"),n=document.querySelector("head");t.onload=function(){if(o=window.Clipboard)for(;e.length;)e.pop()()},t.src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.5.8/clipboard.min.js",n.appendChild(t)}Prism.plugins.toolbar.registerButton("copy-to-clipboard",function(t){function n(){var e=new o(i,{text:function(){return t.code}});e.on("success",function(){i.textContent="Copied!",r()}),e.on("error",function(){i.textContent="Press Ctrl+C to copy",r()})}function r(){setTimeout(function(){i.textContent="Copy"},5e3)}var i=document.createElement("a");return i.textContent="Copy",o?n():e.push(n),i})}}();

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/slides/20170619/LinuxCon-Workshop-company.pdf
----------------------------------------------------------------------
diff --git a/content/assets/slides/20170619/LinuxCon-Workshop-company.pdf b/content/assets/slides/20170619/LinuxCon-Workshop-company.pdf
new file mode 100644
index 0000000..724f338
Binary files /dev/null and b/content/assets/slides/20170619/LinuxCon-Workshop-company.pdf differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/slides/20170619/MSAPrinciple&EcoSystem.pdf
----------------------------------------------------------------------
diff --git a/content/assets/slides/20170619/MSAPrinciple&EcoSystem.pdf b/content/assets/slides/20170619/MSAPrinciple&EcoSystem.pdf
new file mode 100644
index 0000000..e07b1c4
Binary files /dev/null and b/content/assets/slides/20170619/MSAPrinciple&EcoSystem.pdf differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/slides/20170619/ServiceCombIntroduction.pdf
----------------------------------------------------------------------
diff --git a/content/assets/slides/20170619/ServiceCombIntroduction.pdf b/content/assets/slides/20170619/ServiceCombIntroduction.pdf
new file mode 100644
index 0000000..dd4a448
Binary files /dev/null and b/content/assets/slides/20170619/ServiceCombIntroduction.pdf differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/slides/20170619/ServiceCombRoadMap.pdf
----------------------------------------------------------------------
diff --git a/content/assets/slides/20170619/ServiceCombRoadMap.pdf b/content/assets/slides/20170619/ServiceCombRoadMap.pdf
new file mode 100644
index 0000000..4ff47be
Binary files /dev/null and b/content/assets/slides/20170619/ServiceCombRoadMap.pdf differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/slides/20171026/ServiceCombIntroduce1026.pdf
----------------------------------------------------------------------
diff --git a/content/assets/slides/20171026/ServiceCombIntroduce1026.pdf b/content/assets/slides/20171026/ServiceCombIntroduce1026.pdf
new file mode 100644
index 0000000..d7ef0f3
Binary files /dev/null and b/content/assets/slides/20171026/ServiceCombIntroduce1026.pdf differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/slides/20171102/ServiceComb_PastAndPresent.pdf
----------------------------------------------------------------------
diff --git a/content/assets/slides/20171102/ServiceComb_PastAndPresent.pdf b/content/assets/slides/20171102/ServiceComb_PastAndPresent.pdf
new file mode 100644
index 0000000..b5bc8ea
Binary files /dev/null and b/content/assets/slides/20171102/ServiceComb_PastAndPresent.pdf differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/slides/20171109/MicroservicePracticeOfHuaweiConsumerCloudBasedOnServiceComb.pdf
----------------------------------------------------------------------
diff --git a/content/assets/slides/20171109/MicroservicePracticeOfHuaweiConsumerCloudBasedOnServiceComb.pdf b/content/assets/slides/20171109/MicroservicePracticeOfHuaweiConsumerCloudBasedOnServiceComb.pdf
new file mode 100644
index 0000000..461ef03
Binary files /dev/null and b/content/assets/slides/20171109/MicroservicePracticeOfHuaweiConsumerCloudBasedOnServiceComb.pdf differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/slides/20171124/LiveCodingServiceCombQuickStart.zip
----------------------------------------------------------------------
diff --git a/content/assets/slides/20171124/LiveCodingServiceCombQuickStart.zip b/content/assets/slides/20171124/LiveCodingServiceCombQuickStart.zip
new file mode 100644
index 0000000..4d1f098
Binary files /dev/null and b/content/assets/slides/20171124/LiveCodingServiceCombQuickStart.zip differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/slides/20171207/Uncover_ServiceComb_Design.pdf
----------------------------------------------------------------------
diff --git a/content/assets/slides/20171207/Uncover_ServiceComb_Design.pdf b/content/assets/slides/20171207/Uncover_ServiceComb_Design.pdf
new file mode 100644
index 0000000..feebe95
Binary files /dev/null and b/content/assets/slides/20171207/Uncover_ServiceComb_Design.pdf differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/slides/20171209/PracticeOfServiceMeshOnHuaweiPublicCloud.pdf
----------------------------------------------------------------------
diff --git a/content/assets/slides/20171209/PracticeOfServiceMeshOnHuaweiPublicCloud.pdf b/content/assets/slides/20171209/PracticeOfServiceMeshOnHuaweiPublicCloud.pdf
new file mode 100644
index 0000000..918ff16
Binary files /dev/null and b/content/assets/slides/20171209/PracticeOfServiceMeshOnHuaweiPublicCloud.pdf differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/banner.js
----------------------------------------------------------------------
diff --git a/content/banner.js b/content/banner.js
new file mode 100644
index 0000000..9c0c865
--- /dev/null
+++ b/content/banner.js
@@ -0,0 +1,21 @@
+const fs = require('fs');
+const pkg = require('./package.json');
+const filename = 'assets/js/main.min.js';
+const script = fs.readFileSync(filename);
+const padStart = str => ('0' + str).slice(-2)
+const dateObj = new Date;
+const date = `${dateObj.getFullYear()}-${padStart(dateObj.getMonth() + 1)}-${padStart(dateObj.getDate())}`;
+const banner = `---
+layout:
+---
+
+/*!
+ * Minimal Mistakes Jekyll Theme ${pkg.version} by ${pkg.author}
+ * Copyright ${dateObj.getFullYear()} Michael Rose - mademistakes.com | @mmistakes
+ * Licensed under ${pkg.license}
+ */
+`;
+
+if (script.slice(0, 3) != '/**') {
+  fs.writeFileSync(filename, banner + script);
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/404.html
----------------------------------------------------------------------
diff --git a/content/cn/404.html b/content/cn/404.html
new file mode 100644
index 0000000..332a65f
--- /dev/null
+++ b/content/cn/404.html
@@ -0,0 +1,396 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>页面不存在 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="页面不存在.">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="页面不存在">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/404.html">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/404.html">
+
+
+
+  <meta property="og:description" content="页面不存在.">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="页面不存在">
+  <meta name="twitter:description" content="页面不存在.">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/404.html>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="页面不存在">
+    <meta itemprop="description" content="页面不存在.">
+    
+    
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">页面不存在
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <p>抱歉,你要访问的页面不存在。你可以尝试在下面的搜索框中输入关键字进行查找。</p>
+
+<script type="text/javascript">
+  var GOOG_FIXURL_LANG = 'cn';
+  var GOOG_FIXURL_SITE = ''
+</script>
+
+<script type="text/javascript" src="//linkhelp.clients.google.com/tbproxy/lh/wm/fixurl.js">
+</script>
+
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _pages/cn/404.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_pages/cn/404.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/developers/index.html
----------------------------------------------------------------------
diff --git a/content/cn/developers/index.html b/content/cn/developers/index.html
new file mode 100644
index 0000000..7853911
--- /dev/null
+++ b/content/cn/developers/index.html
@@ -0,0 +1,461 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>开发者指南 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="开发者指南">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="开发者指南">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/developers/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/developers/">
+
+
+
+  <meta property="og:description" content="开发者指南">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="开发者指南">
+  <meta name="twitter:description" content="开发者指南">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/developers/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/developers/"><span class="nav__sub-title nav__sub-title-with-url">开发者指南</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/developers/setup-develop-environment/"><span class="nav__sub-title nav__sub-title-with-url">开发环境准备</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/developers/submit-codes/"><span class="nav__sub-title nav__sub-title-with-url">代码提交指南</span></a>
+        
+
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="开发者指南">
+    <meta itemprop="description" content="开发者指南">
+    
+    <meta itemprop="dateModified" content="June 24, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">开发者指南
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <p><strong>ServiceComb</strong> 项目托管在<a href="https://github.com/ServiceComb">Github</a>上,其各子项目如下表所示:</p>
+
+<table>
+  <thead>
+    <tr>
+      <th>项目名</th>
+      <th>项目简介</th>
+      <th>编程语言</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td><a href="https://github.com/ServiceComb/ServiceComb-Java-Chassis">Java Chassis</a></td>
+      <td>Java微服务框架(SDK)</td>
+      <td>Java</td>
+    </tr>
+    <tr>
+      <td><a href="https://github.com/ServiceComb/service-center">Service Center</a></td>
+      <td>服务中心(服务注册及发现)</td>
+      <td>Go</td>
+    </tr>
+    <tr>
+      <td><a href="https://github.com/ServiceComb/saga">Saga</a></td>
+      <td>微服务数据最终一致性实现</td>
+      <td>Java</td>
+    </tr>
+    <tr>
+      <td><a href="https://github.com/ServiceComb/ServiceComb.github.io">ServiceComb.github.io</a></td>
+      <td>ServiceComb网站</td>
+      <td>Markdown</td>
+    </tr>
+  </tbody>
+</table>
+
+<p>参与 ServiceComb 项目并为其作出贡献的方法有很多:代码实现、测试编写、流程工具改进、文档完善等。您可以选择上述任何一个或多个感兴趣的项目进行贡献。具体贡献事宜可参考以下指南:</p>
+
+<ul>
+  <li><a href="/cn/developers/setup-develop-environment/">开发环境准备</a>:主要介绍git,JDK,Maven以及IDE的安装及配置。</li>
+  <li><a href="/cn/developers/submit-codes/">代码提交指南</a>:主要介绍功能特性需求及现有bug的获取途径,提交代码前的测试事宜,如何提交PR以及如何解决冲突等。</li>
+</ul>
+
+<p>同时,也欢迎您加入<a href="https://groups.google.com/forum/#!forum/servicecomb-developers">ServiceComb开发者群组</a>了解 ServiceComb 项目的开发动态以及进行话题讨论。</p>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _developers/cn/developer-guide.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_developers/cn/developer-guide.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/developers/setup-develop-environment/index.html
----------------------------------------------------------------------
diff --git a/content/cn/developers/setup-develop-environment/index.html b/content/cn/developers/setup-develop-environment/index.html
new file mode 100644
index 0000000..fd9a383
--- /dev/null
+++ b/content/cn/developers/setup-develop-environment/index.html
@@ -0,0 +1,504 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>开发环境准备 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="开发环境准备">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="开发环境准备">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/developers/setup-develop-environment/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/developers/setup-develop-environment/">
+
+
+
+  <meta property="og:description" content="开发环境准备">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="开发环境准备">
+  <meta name="twitter:description" content="开发环境准备">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/developers/setup-develop-environment/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/developers/"><span class="nav__sub-title nav__sub-title-with-url">开发者指南</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/developers/setup-develop-environment/"><span class="nav__sub-title nav__sub-title-with-url">开发环境准备</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/developers/submit-codes/"><span class="nav__sub-title nav__sub-title-with-url">代码提交指南</span></a>
+        
+
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="开发环境准备">
+    <meta itemprop="description" content="开发环境准备">
+    
+    <meta itemprop="dateModified" content="June 24, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">开发环境准备
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <h2 id="基本环境准备">基本环境准备</h2>
+<p>在您开始前,请确保以下应用已安装:</p>
+<ul>
+  <li><strong>Git</strong>,安装详情可参考<a href="https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git" target="_blank">Git安装教程</a></li>
+  <li><strong>JDK 1.8</strong>,安装详情可参考<a href="https://docs.oracle.com/javase/8/docs/technotes/guides/install/install_overview.html" target="_blank">JDK安装教程</a></li>
+  <li><strong>Maven 3.x</strong>,安装详情可参考<a href="https://maven.apache.org/install.html" target="_blank">Maven安装教程</a></li>
+  <li><strong>Docker</strong>,安装详情可参考<a href="https://docs.docker.com/engine/installation/" target="_blank">Docker 安装教程</a></li>
+  <li><strong>Service Center</strong>, 安装详情可参考<a href="/cn/users/setup-environment/#运行service-center">Service Center安装教程</a></li>
+  <li><strong>IntelliJ Idea IDE</strong>(可选,您可以使用其他心仪的IDE,如eclipse),安装详情可参考<a href="https://www.jetbrains.com/help/idea/installing-and-launching.html" target="_blank">IntelliJ安装教程</a></li>
+</ul>
+
+<h2 id="git配置">Git配置</h2>
+<ol>
+  <li>注册Github。由于ServiceComb的代码是托管在Github上的,所以您需要有一个Github的帐号,可前往 <a href="https://github.com/join?source=header-home">https://github.com/join?source=header-home</a> 进行注册,如您已有Github帐号,则可跳过此步。注册完成后直接在 <a href="https://github.com/login?return_to=%2Fjoin%3Fsource%3Dheader-home">https://github.com/login?return_to=%2Fjoin%3Fsource%3Dheader-home</a> 进行登录即可。</li>
+  <li>
+    <p>配置Git。主要配置Git的个人信息和设置免密码提交代码。个人信息可通过以下指令进行配置:</p>
+
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code>git config --global user.name &lt;your-user-name&gt;
+git config --global user.email &lt;your-email-address&gt;
+</code></pre>
+    </div>
+
+    <p>其中,请将&lt;your-user-name&gt;和&lt;your-email-address&gt;替换为您在Github上注册用到的用户名和邮箱信息。设置免密码提交代码可参考<a href="https://stackoverflow.com/a/8588786" target="_blank">Git免密码提交代码教程</a>。</p>
+  </li>
+  <li>
+    <p>获取项目代码。以 <a href="https://github.com/ServiceComb/ServiceComb-Java-Chassis">ServiceComb-Java-Chassis</a> 项目为例,可直接执行以下指令获取代码:</p>
+
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code>git clone https://github.com/ServiceComb/ServiceComb-Java-Chassis
+</code></pre>
+    </div>
+  </li>
+</ol>
+
+<h2 id="ide-环境配置">IDE 环境配置</h2>
+<p>现有支持Java开发的IDE很多,如Eclipse, IntelliJ IDEA和STS等。我们在此推荐使用IntelliJ IDEA,对于日常开发,其社区版的功能已经足够了。在安装完IntelliJ IDEA后,您可以根据<a href="https://www.jetbrains.com/help/idea/installing-and-launching.html#d325787e291">初始化设置教程</a>对IntelliJ IDEA进行配置,随后可通过阅读<a href="https://www.jetbrains.com/help/idea/keyboard-shortcuts-you-cannot-miss.html">必备快捷键</a>了解常用的快捷键。</p>
+
+<p>Java Chassis和Saga项目使用了<a href="https://github.com/google/styleguide">Google Code Style</a>作为代码风格,配置文件可以在本项目 <code class="highlighter-rouge">etc</code> 目录下找到。其中,目录中也有Eclipse的代码风格,读者可以直接导入使用。</p>
+
+<p><img src="/assets/images/intellij.code.style.3.png" alt="code style files" class="align-center" /></p>
+
+<aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> 在本页上</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#基本环境准备" id="markdown-toc-基本环境准备">基本环境准备</a></li>
+  <li><a href="#git配置" id="markdown-toc-git配置">Git配置</a></li>
+  <li><a href="#ide-环境配置" id="markdown-toc-ide-环境配置">IDE 环境配置</a>    <ul>
+      <li><a href="#intellij-idea-配置" id="markdown-toc-intellij-idea-配置">IntelliJ IDEA 配置</a></li>
+    </ul>
+  </li>
+  <li><a href="#下一步" id="markdown-toc-下一步">下一步</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<h3 id="intellij-idea-配置">IntelliJ IDEA 配置</h3>
+<p><a href="https://www.jetbrains.com/idea/download/">IntelliJ IDEA</a>的配置方法如下</p>
+
+<ol>
+  <li>
+    <p>打开IntelliJ配置
+<img src="/assets/images/intellij.code.style.4.png" alt="IntelliJ Settings" class="align-center" /></p>
+  </li>
+  <li>
+    <p>Import 配置文件 <code class="highlighter-rouge">etc/intellij-java-google-style.xml</code>
+<img src="/assets/images/intellij.code.style.1.png" alt="import code style" class="align-center" /></p>
+  </li>
+  <li>
+    <p>打开已修改而未提交的文件,并打开格式化文件对话框
+<img src="/assets/images/intellij.code.style.5.png" alt="reformat file dialog" class="align-center" /></p>
+  </li>
+  <li>
+    <p>选择只格式化修改部分
+<img src="/assets/images/intellij.code.style.2.png" alt="reformat options" class="align-center" /></p>
+  </li>
+</ol>
+
+<p>配置完成后,后续按快捷键 (Ctrl+Alt+i) 格式化修改文件即可。更多关于IntelliJ的使用技巧可阅读<a href="https://www.jetbrains.com/help/idea/tutorials.html">IntelliJ教程</a>。</p>
+
+<h2 id="下一步">下一步</h2>
+
+<ul>
+  <li>阅读<a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+</ul>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _developers/cn/setup-develop-environment.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_developers/cn/setup-develop-environment.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>


[23/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/users/use-servicecomb-in-spring-boot/index.html
----------------------------------------------------------------------
diff --git a/content/cn/users/use-servicecomb-in-spring-boot/index.html b/content/cn/users/use-servicecomb-in-spring-boot/index.html
new file mode 100644
index 0000000..c1c8f39
--- /dev/null
+++ b/content/cn/users/use-servicecomb-in-spring-boot/index.html
@@ -0,0 +1,941 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>在Spring Boot中使用ServiceComb - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="在Spring Boot中使用ServiceComb">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="在Spring Boot中使用ServiceComb">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/use-servicecomb-in-spring-boot/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/use-servicecomb-in-spring-boot/">
+
+
+
+  <meta property="og:description" content="在Spring Boot中使用ServiceComb">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="在Spring Boot中使用ServiceComb">
+  <meta name="twitter:description" content="在Spring Boot中使用ServiceComb">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/users/use-servicecomb-in-spring-boot/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">用户手册</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/" class="">Java Chassis系统架构</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/setup-environment/" class="">环境配置</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务提供者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-definition/" class="">服务定义</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-contract/" class="">服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-springmvc/" class="">用SpringMVC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-jax-rs/" class="">用JAX-RS开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-transparent-rpc/" class="">用透明RPC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-interface-constraints/" class="">服务接口约束</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-configurations/" class="">服务配置</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/communicate-protocol/" class="">通信协议</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/application-boot-process/" class="">程序启动逻辑</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-heartbeat/" class="">服务心跳</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务消费者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rest-template/" class="">使用Rest Template方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rpc/" class="">使用RPC方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-service-contract/" class="">使用服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/invoke-control/" class="">调用控制</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">通用开发</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/local-develop-test/" class="">本地开发与测试</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-servicecomb-in-spring-boot/" class="active">在Spring Boot中使用ServiceComb</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/distributed-tracing/" class="">分布式调用链追踪</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/customized-tracing/" class="">自定义调用链打点</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">服务能力开放</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/nginx/" class="">使用confd和Nginx做边缘服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/zuul/" class="">使用Zuul做边缘服务</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">监控</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">部署</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/run-mode/" class="">运行模式</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">微服务安全</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-tls/" class="">使用TLS通信</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="在Spring Boot中使用ServiceComb">
+    <meta itemprop="description" content="在Spring Boot中使用ServiceComb">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">在Spring Boot中使用ServiceComb
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> 在本页上</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#使用service-center和治理中心管理spring-cloud应用" id="markdown-toc-使用service-center和治理中心管理spring-cloud应用">使用Service Center和治理中心管理Spring Cloud应用</a>    <ul>
+      <li><a href="#概念阐述" id="markdown-toc-概念阐述">概念阐述</a></li>
+      <li><a href="#场景描述" id="markdown-toc-场景描述">场景描述</a></li>
+      <li><a href="#配置说明" id="markdown-toc-配置说明">配置说明</a></li>
+    </ul>
+  </li>
+  <li><a href="#在servicecomb框架中集成spring-boot框架" id="markdown-toc-在servicecomb框架中集成spring-boot框架">在ServiceComb框架中集成Spring Boot框架</a>    <ul>
+      <li><a href="#概念阐述-1" id="markdown-toc-概念阐述-1">概念阐述</a></li>
+      <li><a href="#场景描述-1" id="markdown-toc-场景描述-1">场景描述</a></li>
+      <li><a href="#servicecomb集成springboot" id="markdown-toc-servicecomb集成springboot">ServiceComb集成SpringBoot</a></li>
+    </ul>
+  </li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="使用service-center和治理中心管理spring-cloud应用">使用Service Center和治理中心管理Spring Cloud应用</h2>
+<h3 id="概念阐述">概念阐述</h3>
+
+<p>本小节介绍在SpringCloud原生应用中,通过改变相关配置,让SpringCloud应用使用ServiceComb微服务框架中的Service Center和治理中心。</p>
+
+<h3 id="场景描述">场景描述</h3>
+
+<ul>
+  <li>
+    <p>SpringCloud应用默认情况下由Spring Cloud Eureka提供在分布式环境下的服务发现和服务注册的功能。</p>
+
+    <p><img src="/assets/images/manage_springcloud_application_using_sc_and_gs.png" alt="" /></p>
+  </li>
+  <li>
+    <p>ServiceComb微服务框架中的Service Center用于服务元数据以及服务实例元数据的管理和处理注册、发现,同时还支持以下功能:</p>
+  </li>
+</ul>
+
+<blockquote>
+  <ul>
+    <li>
+      <p>支持pull/push两种模式监控实例变化</p>
+    </li>
+    <li>
+      <p>实例动态扩容,海量的长连接或者短连接</p>
+    </li>
+    <li>
+      <p>支持灰度发布、服务分组等高级管理特性</p>
+    </li>
+  </ul>
+</blockquote>
+
+<p>使用SpringBoot/Cloud开发应用,并让服务运行于ServiceComb微服务SDK容器中,使用其高性能通信、服务治理、分布式事务管理等功能。</p>
+
+<h3 id="配置说明">配置说明</h3>
+
+<p>使用SpringBoot/Cloud开发应用,在原有应用的基础上按照以下步骤进行操作,即可对接ServiceComb的SDK各组件:</p>
+
+<ul>
+  <li>
+    <p><strong>步骤 1</strong> 在pom中添加依赖管理dependencyManagement:</p>
+
+    <div class="language-xml highlighter-rouge"><pre class="highlight"><code> <span class="nt">&lt;dependencyManagement&gt;</span>
+   <span class="nt">&lt;dependencies&gt;</span>
+     <span class="nt">&lt;dependency&gt;</span>
+       <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+       <span class="nt">&lt;artifactId&gt;</span>java-chassis-dependencies<span class="nt">&lt;/artifactId&gt;</span>
+       <span class="nt">&lt;version&gt;</span>0.1.0<span class="nt">&lt;/version&gt;</span>
+       <span class="nt">&lt;type&gt;</span>pom<span class="nt">&lt;/type&gt;</span>
+       <span class="nt">&lt;scope&gt;</span>import<span class="nt">&lt;/scope&gt;</span>
+     <span class="nt">&lt;/dependency&gt;</span>
+   <span class="nt">&lt;/dependencies&gt;</span>
+ <span class="nt">&lt;/dependencyManagement&gt;</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>步骤 2</strong> 在pom中添加依赖:</p>
+
+    <div class="language-xml highlighter-rouge"><pre class="highlight"><code> <span class="nt">&lt;dependency&gt;</span>
+   <span class="c">&lt;!--让服务运行于微服务sdk容器中--&gt;</span>
+   <span class="nt">&lt;group&gt;</span>io.servicecomb<span class="nt">&lt;/group&gt;</span>
+   <span class="nt">&lt;artifactId&gt;</span>spring-boot-starter-provider<span class="nt">&lt;/artifactId&gt;</span>
+ <span class="nt">&lt;/dependency&gt;</span>
+ <span class="nt">&lt;dependency&gt;</span>
+   <span class="c">&lt;!--使用服务中心--&gt;</span>
+   <span class="nt">&lt;group&gt;</span>io.servicecomb<span class="nt">&lt;/group&gt;</span>
+   <span class="nt">&lt;artifactId&gt;</span>spring-boot-starter-discovery<span class="nt">&lt;/artifactId&gt;</span>
+ <span class="nt">&lt;/dependency&gt;</span>
+ <span class="nt">&lt;dependency&gt;</span>
+   <span class="c">&lt;!--让服务运行于Spring boot embeded tomat中--&gt;</span>
+   <span class="nt">&lt;group&gt;</span>io.servicecomb<span class="nt">&lt;/group&gt;</span>
+   <span class="nt">&lt;artifactId&gt;</span>spring-boot-starter-transport<span class="nt">&lt;/artifactId&gt;</span>
+ <span class="nt">&lt;/dependency&gt;</span>
+ <span class="nt">&lt;dependency&gt;</span>
+   <span class="nt">&lt;groupId&gt;</span>org.springframework.boot<span class="nt">&lt;/groupId&gt;</span>
+   <span class="nt">&lt;artifactId&gt;</span>spring-boot-starter-web<span class="nt">&lt;/artifactId&gt;</span>
+ <span class="nt">&lt;/dependency&gt;&lt;dependency&gt;</span>
+   <span class="nt">&lt;groupId&gt;</span>org.springframework.boot<span class="nt">&lt;/groupId&gt;</span>
+   <span class="nt">&lt;artifactId&gt;</span>spring-boot-starter-actuator<span class="nt">&lt;/artifactId&gt;</span>
+ <span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>步骤 3</strong> 配置处理链和协议:</p>
+
+    <p>在resources目录下新建microservice.yaml文件,对服务进行定义,详细定义规则请参考<a href="/cn/users/service-definition/">服务定义章节</a>,示例如下:</p>
+
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code> <span class="s">APPLICATION_ID</span><span class="pi">:</span> <span class="s">discoverytest</span>
+ <span class="s">service_description</span><span class="pi">:</span>
+   <span class="s">name</span><span class="pi">:</span> <span class="s">discoveryServer</span>
+   <span class="s">version</span><span class="pi">:</span> <span class="s">0.0.2</span>
+ <span class="s">cse</span><span class="pi">:</span>
+   <span class="s">service</span><span class="pi">:</span>
+     <span class="s">registry</span><span class="pi">:</span>
+       <span class="s">address</span><span class="pi">:</span>  <span class="s">http://127.0.0.1:30100</span> <span class="c1">#服务注册中心地址</span>
+   <span class="err"> </span><span class="s">rest</span><span class="pi">:</span>
+      <span class="s">address</span><span class="pi">:</span> <span class="s">0.0.0.0:8080</span> <span class="c1">#服务发布的端口</span>
+    <span class="s">handler</span><span class="pi">:</span>
+      <span class="s">chain</span><span class="pi">:</span>
+        <span class="s">Provider</span><span class="pi">:</span>
+          <span class="s">default</span><span class="pi">:</span> <span class="s">bizkeeper-provider</span> <span class="c1">#调用的处理链</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>步骤4</strong> 若要使用ServiceComb的服务中心:</p>
+
+    <p>在pom中添加依赖:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="o">&lt;</span><span class="n">dependency</span><span class="o">&gt;</span>
+   <span class="o">&lt;!--</span><span class="err">使用服务中心</span><span class="o">--&gt;</span>
+   <span class="o">&lt;</span><span class="n">group</span><span class="o">&gt;</span><span class="n">io</span><span class="o">.</span><span class="na">servicecomb</span><span class="o">&lt;/</span><span class="n">group</span><span class="o">&gt;</span>
+   <span class="o">&lt;</span><span class="n">artifactId</span><span class="o">&gt;</span><span class="n">spring</span><span class="o">-</span><span class="n">boot</span><span class="o">-</span><span class="n">starter</span><span class="o">-</span><span class="n">discovery</span><span class="o">&lt;/</span><span class="n">artifactId</span><span class="o">&gt;</span>
+ <span class="o">&lt;/</span><span class="n">dependency</span><span class="o">&gt;</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>步骤 5</strong> 在启动类添加注解@EnableServiceComb:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="nd">@EnableDiscoveryClient</span>
+ <span class="nd">@SpringBootApplication</span>
+ <span class="nd">@EnableServiceComb</span> <span class="c1">//新增注解</span>
+ <span class="kd">public</span> <span class="kd">class</span> <span class="nc">xxxServer</span> <span class="o">{</span>
+   <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
+     <span class="n">SpringApplication</span><span class="o">.</span><span class="na">run</span><span class="o">(</span><span class="n">xxxServer</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">args</span><span class="o">);</span>
+   <span class="o">}</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>步骤 6</strong> 定义服务契约,具体请参考<a href="/cn/users/service-contract/">服务契约</a>,示例如下:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="c1">// ControllerImpl.class:</span>
+ <span class="nd">@RestSchema</span><span class="o">(</span><span class="n">schemaId</span> <span class="o">=</span> <span class="s">"test"</span><span class="o">)</span>
+ <span class="nd">@RequestMapping</span><span class="o">(</span><span class="n">path</span> <span class="o">=</span> <span class="s">"/compute"</span><span class="o">,</span> <span class="n">produces</span> <span class="o">=</span> <span class="n">MediaType</span><span class="o">.</span><span class="na">TEXT_PLAIN</span><span class="o">)</span>
+ <span class="kd">public</span> <span class="kd">class</span> <span class="nc">ControllerImpl</span> <span class="o">{</span>
+   <span class="nd">@ResponseBody</span>
+   <span class="nd">@RequestMapping</span><span class="o">(</span><span class="n">path</span> <span class="o">=</span> <span class="s">"/hello/{name}"</span><span class="o">,</span> <span class="n">method</span> <span class="o">=</span> <span class="n">RequestMethod</span><span class="o">.</span><span class="na">GET</span><span class="o">)</span>
+   <span class="kd">public</span> <span class="n">String</span> <span class="nf">add</span><span class="o">(</span><span class="nd">@PathVariable</span> <span class="n">String</span> <span class="n">name</span><span class="o">)</span> <span class="o">{</span>
+     <span class="k">return</span> <span class="s">"hello"</span> <span class="o">+</span> <span class="n">name</span><span class="o">;</span>
+   <span class="o">}</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>步骤 7</strong> 启动xxxServer,该服务便可注册到ServieComb的Service Center。</p>
+  </li>
+</ul>
+
+<h2 id="在servicecomb框架中集成spring-boot框架">在ServiceComb框架中集成Spring Boot框架</h2>
+<h3 id="概念阐述-1">概念阐述</h3>
+
+<p>本小节介绍了在ServiceComb框架中集成SpringBoot框架的好处和操作步骤。</p>
+
+<h3 id="场景描述-1">场景描述</h3>
+
+<h4 id="springboot框架"><strong>SpringBoot框架</strong></h4>
+
+<p>  Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。从最根本上来讲,Spring Boot就是一些库的集合,它能够被任意项目的构建系统所使用。Boot的功能是模块化的,通过导入Boot所谓的”starter”模块,可以将许多的依赖添加到工程中。</p>
+
+<h4 id="在servicecomb中集成springboot"><strong>在ServiceComb中集成SpringBoot</strong></h4>
+
+<p>  使用原生的ServiceComb框架开发微服务应用,如若需要使用ServiceComb框架提供的各项功能服务,需要在微服务项目工程pom文件中添加相应的依赖包,例如需要使用ServiceComb框架提供的负载均衡服务,需要添加handler-loadbalance包依赖。这样可以把ServiceComb提供的能力以starter的方式插入Spring Boot中,同时使用Spring Boot中提供的其他开箱即用的starter(例如SpringCloud)一起构建微服务。</p>
+
+<h3 id="servicecomb集成springboot">ServiceComb集成SpringBoot</h3>
+
+<p>  首先使用ServiceComb框架开发微服务应用,详细步骤请参考<a href="/cn/users/service-definition/">开发服务提供者</a>与<a href="/cn/users/develop-with-rest-template/">开发服务消费者</a>。然后在这个基础上集成SpringBoot框架。</p>
+
+<p>  在对应用进行SpringBoot框架适配前,请确保应用能够正常运行,并且能够从中央的maven库下载依赖的资源。</p>
+
+<ul>
+  <li>
+    <p><strong>步骤 1</strong> 在工程pom文件添加&lt;dependencyManagement&gt;节点:</p>
+
+    <div class="language-xml highlighter-rouge"><pre class="highlight"><code> <span class="nt">&lt;dependencyManagement&gt;</span> 
+   <span class="nt">&lt;dependencies&gt;</span> 
+     <span class="nt">&lt;dependency&gt;</span> 
+       <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+       <span class="nt">&lt;artifactId&gt;</span>java-chassis-dependencies<span class="nt">&lt;/artifactId&gt;</span>
+       <span class="nt">&lt;version&gt;</span>0.1.0<span class="nt">&lt;/version&gt;</span>
+       <span class="nt">&lt;type&gt;</span>pom<span class="nt">&lt;/type&gt;</span>
+       <span class="nt">&lt;scope&gt;</span>import<span class="nt">&lt;/scope&gt;</span>
+     <span class="nt">&lt;/dependency&gt;</span>
+   <span class="nt">&lt;/dependencies&gt;</span>
+ <span class="nt">&lt;/dependencyManagement&gt;</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>步骤 2</strong> 添加如下依赖:</p>
+
+    <p>引入ServiceComb提供的Spring Boot依赖</p>
+
+    <div class="language-xml highlighter-rouge"><pre class="highlight"><code> <span class="nt">&lt;dependency&gt;</span> 
+   <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+   <span class="nt">&lt;artifactId&gt;</span>spring-boot-starter-provider<span class="nt">&lt;/artifactId&gt;</span> 
+ <span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+    </div>
+
+    <p>引入Spring Boot依赖</p>
+
+    <div class="language-xml highlighter-rouge"><pre class="highlight"><code> <span class="nt">&lt;dependency&gt;</span> 
+   <span class="nt">&lt;groupId&gt;</span>org.springframework.boot<span class="nt">&lt;/groupId&gt;</span>
+   <span class="nt">&lt;artifactId&gt;</span>spring-boot-starter-web<span class="nt">&lt;/artifactId&gt;</span> 
+ <span class="nt">&lt;/dependency&gt;</span>
+ <span class="nt">&lt;dependency&gt;</span> 
+   <span class="nt">&lt;groupId&gt;</span>org.springframework.boot<span class="nt">&lt;/groupId&gt;</span>
+   <span class="nt">&lt;artifactId&gt;</span>spring-boot-starter-actuator<span class="nt">&lt;/artifactId&gt;</span> 
+ <span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>步骤 3</strong> 在resources目录下新建application.yml文件,文件内容如下:</p>
+
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code> <span class="s">server</span><span class="pi">:</span>
+   <span class="s">port</span><span class="pi">:</span> <span class="s">7999</span> <span class="c1">#此处的端口为springboot服务端口</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>步骤 4</strong> 为微服务启动类添加注解:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="kn">package</span> <span class="n">xxx</span>
+ <span class="kn">import</span> <span class="nn">xxx</span>
+ <span class="nd">@SpringBootApplication</span> <span class="c1">//新增注解</span>
+ <span class="nd">@EnableServiceComb</span> <span class="c1">//新增注解</span>
+ <span class="kd">public</span> <span class="kd">class</span> <span class="nc">xxxServer</span><span class="o">/</span><span class="n">Client</span> <span class="o">{</span>
+   <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="kd">final</span> <span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
+   <span class="err"> </span> <span class="n">Log4jUtils</span><span class="o">.</span><span class="na">init</span><span class="o">();</span>
+   <span class="err"> </span><span class="c1">//BeanUtils.init();</span>
+   <span class="err"> </span><span class="n">SpringApplication</span><span class="o">.</span><span class="na">run</span><span class="o">(</span><span class="n">xxxServerOrClient</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">args</span><span class="o">)</span>
+   <span class="o">}</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>步骤 5</strong> 运行/调试应用。</p>
+  </li>
+</ul>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/cn/use-servicecomb-in-spring-boot.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/cn/use-servicecomb-in-spring-boot.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/users/use-tls/index.html
----------------------------------------------------------------------
diff --git a/content/cn/users/use-tls/index.html b/content/cn/users/use-tls/index.html
new file mode 100644
index 0000000..d0493fe
--- /dev/null
+++ b/content/cn/users/use-tls/index.html
@@ -0,0 +1,1048 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>使用TLS通信 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="使用TLS通信">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="使用TLS通信">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/use-tls/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/use-tls/">
+
+
+
+  <meta property="og:description" content="使用TLS通信">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="使用TLS通信">
+  <meta name="twitter:description" content="使用TLS通信">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/users/use-tls/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">用户手册</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/" class="">Java Chassis系统架构</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/setup-environment/" class="">环境配置</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务提供者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-definition/" class="">服务定义</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-contract/" class="">服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-springmvc/" class="">用SpringMVC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-jax-rs/" class="">用JAX-RS开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-transparent-rpc/" class="">用透明RPC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-interface-constraints/" class="">服务接口约束</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-configurations/" class="">服务配置</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/communicate-protocol/" class="">通信协议</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/application-boot-process/" class="">程序启动逻辑</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-heartbeat/" class="">服务心跳</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务消费者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rest-template/" class="">使用Rest Template方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rpc/" class="">使用RPC方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-service-contract/" class="">使用服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/invoke-control/" class="">调用控制</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">通用开发</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/local-develop-test/" class="">本地开发与测试</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-servicecomb-in-spring-boot/" class="">在Spring Boot中使用ServiceComb</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/distributed-tracing/" class="">分布式调用链追踪</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/customized-tracing/" class="">自定义调用链打点</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">服务能力开放</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/nginx/" class="">使用confd和Nginx做边缘服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/zuul/" class="">使用Zuul做边缘服务</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">监控</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">部署</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/run-mode/" class="">运行模式</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">微服务安全</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-tls/" class="active">使用TLS通信</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="使用TLS通信">
+    <meta itemprop="description" content="使用TLS通信">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">使用TLS通信
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <h2 id="场景描述">场景描述</h2>
+
+<p>用户通过简单的配置即可启用TLS通信,以保障数据的传输安全。</p>
+
+<h2 id="外部服务通信配置">外部服务通信配置</h2>
+
+<p>与外部服务通信相关的配置写在microservice.yaml文件中。</p>
+
+<ul>
+  <li>
+    <p>服务中心TLS通信配置
+ 微服务与服务中心的连接可以通过将http改为https启用TLS通信,配置示例如下:</p>
+
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code> <span class="s">cse</span><span class="pi">:</span>
+   <span class="s">service</span><span class="pi">:</span>
+     <span class="s">registry</span><span class="pi">:</span>
+       <span class="s">address</span><span class="pi">:</span> <span class="s">https://127.0.0.1:30100</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p>服务提供者启用TLS通信
+ 服务提供者在配置服务监听地址时,可以通过在地址后面追加<code class="highlighter-rouge">?sslEnabled=true</code>开启TLS通信,示例如下:</p>
+
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code> <span class="s">cse</span><span class="pi">:</span>
+   <span class="s">rest</span><span class="pi">:</span>
+     <span class="s">address</span><span class="pi">:</span> <span class="s">0.0.0.0:8080?sslEnabled=true</span>
+   <span class="s">highway</span><span class="pi">:</span>
+     <span class="s">address</span><span class="pi">:</span> <span class="s">0.0.0.0:7070?sslEnabled=true</span>
+</code></pre>
+    </div>
+  </li>
+</ul>
+
+<h2 id="证书配置">证书配置</h2>
+
+<p>证书配置项写在microservice.yaml文件中,支持统一制定证书,也可以添加tag进行更细粒度的配置,有tag的配置会覆盖全局配置,配置格式如下:</p>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">ssl.[tag].[property]</span>
+</code></pre>
+</div>
+
+<p>证书配置项见下表证书配置项说明表。</p>
+
+<p><strong>表1 证书配置项说明表</strong></p>
+
+<table>
+  <thead>
+    <tr>
+      <th style="text-align: left">配置项</th>
+      <th style="text-align: left">默认值</th>
+      <th style="text-align: left">取值范围</th>
+      <th style="text-align: left">是否必选</th>
+      <th style="text-align: left">含义</th>
+      <th style="text-align: left">注意</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td style="text-align: left">ssl.protocols</td>
+      <td style="text-align: left">TLSv1.2</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">协议列表</td>
+      <td style="text-align: left">使用逗号分隔</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">ssl.ciphers</td>
+      <td style="text-align: left">TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,<br />TLS_RSA_WITH_AES_256_GCM_SHA384,<br />TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,<br />TLS_RSA_WITH_AES_128_GCM_SHA256</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">算法列表</td>
+      <td style="text-align: left">使用逗号分隔</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">ssl.authPeer</td>
+      <td style="text-align: left">true</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">是否认证对端</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">ssl.checkCN.host</td>
+      <td style="text-align: left">true</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">是否对证书的CN进行检查</td>
+      <td style="text-align: left">该配置项只对Consumer端,并且使用http协议有效,即Consumser端使用rest通道有效。对于Provider端、highway通道等无效。检查CN的目的是防止服务器被钓鱼,参考标准定义:<a href="https://tools.ietf.org/html/rfc2818。">https://tools.ietf.org/html/rfc2818。</a></td>
+    </tr>
+    <tr>
+      <td style="text-align: left">ssl.trustStore</td>
+      <td style="text-align: left">trust.jks</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">信任证书文件</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">ssl.trustStoreType</td>
+      <td style="text-align: left">JKS</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">信任证书类型</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">ssl.trustStoreValue</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">信任证书密码</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">ssl.keyStore</td>
+      <td style="text-align: left">server.p12</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">身份证书文件</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">ssl.keyStoreType</td>
+      <td style="text-align: left">PKCS12</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">身份证书类型</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">ssl.keyStoreValue</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">身份证书密码</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">ssl.crl</td>
+      <td style="text-align: left">revoke.crl</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">吊销证书文件</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">ssl.sslCustomClass</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">io.servicecomb.foundation.ssl.SSLCustom的实现类</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">SSLCustom类的实现,用于开发者转换密码、文件路径等。</td>
+      <td style="text-align: left">-</td>
+    </tr>
+  </tbody>
+</table>
+
+<blockquote>
+  <p><strong>说明</strong>:</p>
+
+  <ul>
+    <li>默认的协议算法是高强度加密算法,JDK需要安装对应的策略文件,参考:<a href="http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html">http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html</a>。 您可以在配置文件配置使用非高强度算法。</li>
+    <li>微服务消费者,可以针对不同的提供者指定证书(当前证书是按照HOST签发的,不同的提供者都使用一份证书存储介质,这份介质同时给微服务访问服务中心和配置中心使用)。</li>
+  </ul>
+</blockquote>
+
+<h2 id="服务中心的证书配置">服务中心的证书配置</h2>
+
+<p>目前支持使用环境变量来配置服务中心的TLS认证方式,默认开启TLS通信,双向认证模式,认证对端时同时校验对端是否匹配证书(CommonName)字段。服务管理中心的证书配置项说明见下表服务中心TLS证书配置项说明。</p>
+
+<p><strong>表2 服务中心TLS证书配置项说明</strong></p>
+
+<table>
+  <thead>
+    <tr>
+      <th style="text-align: left">配置项</th>
+      <th style="text-align: left">默认值</th>
+      <th style="text-align: left">取值范围</th>
+      <th style="text-align: left">是否必选</th>
+      <th style="text-align: left">含义</th>
+      <th style="text-align: left">注意</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td style="text-align: left">CSE_SSL_MODE</td>
+      <td style="text-align: left">1</td>
+      <td style="text-align: left">1/0<br />0:HTTPS<br />1:HTTP</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">设置协议模式</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">CSE_SSL_VERIFY_CLIENT</td>
+      <td style="text-align: left">1</td>
+      <td style="text-align: left">1/0<br />0:HTTPS<br />1:HTTP</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">设置HTTPS模式下是否认证对端</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">CSE_SSL_PASSPHASE</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">设置HTTPS模式下的证书密钥访问密码</td>
+      <td style="text-align: left">-</td>
+    </tr>
+  </tbody>
+</table>
+
+<p>服务管理中心配置文件为$APP_ROOT/conf/app.conf,配置项见,该配置暂不支持环境变量方式设置。</p>
+
+<p>表3 服务中心配置文件</p>
+
+<table>
+  <thead>
+    <tr>
+      <th style="text-align: left">配置项</th>
+      <th style="text-align: left">默认值</th>
+      <th style="text-align: left">取值范围</th>
+      <th style="text-align: left">是否必选</th>
+      <th style="text-align: left">含义</th>
+      <th style="text-align: left">注意</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td style="text-align: left">ssl_protocols</td>
+      <td style="text-align: left">TLSv1.2</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">通信使用的SSL版本</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">ssl_ciphers</td>
+      <td style="text-align: left">TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,<br />TLS_RSA_WITH_AES_256_GCM_SHA384,<br />TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,<br />TLS_RSA_WITH_AES_128_GCM_SHA256,<br />TLS_RSA_WITH_AES_128_CBC_SHA</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">配置使用算法列表</td>
+      <td style="text-align: left">由于服务中心支持HTTP/2协议,所以ssl_ciphers必须配置有TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256算法。TLS_RSA_WITH_AES_128_GCM_SHA256、TLS_RSA_WITH_AES_128_CBC_SHA被列为HTTP/2协议的不安全算法黑名单,但为了客户端算法兼容性,存在时必须配置到最后一位。</td>
+    </tr>
+  </tbody>
+</table>
+
+<h2 id="密钥物料及证书存放路径">密钥物料及证书存放路径</h2>
+
+<p><strong>表4 密钥物料及证书存放路径</strong></p>
+
+<table>
+  <thead>
+    <tr>
+      <th style="text-align: left">配置项</th>
+      <th style="text-align: left">含义</th>
+      <th style="text-align: left">对应环境变量</th>
+      <th style="text-align: left">注意</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td style="text-align: left">/</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">/opt</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">/opt/CSE</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">INSTALL_ROOT</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">/opt/CSE/etc</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">/opt/CSE/etc/cipher</td>
+      <td style="text-align: left">密钥物料存放目录</td>
+      <td style="text-align: left">CIPHER_ROOT</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">/opt/CSE/etc/ssl</td>
+      <td style="text-align: left">证书存放目录</td>
+      <td style="text-align: left">SSL_ROOT</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">/opt/CSE/etc/ssl/trust.cer</td>
+      <td style="text-align: left">授信CA</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">/opt/CSE/etc/ssl/server_key.pem</td>
+      <td style="text-align: left">已加密服务端私钥文件</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">/opt/CSE/etc/ssl/server.cer</td>
+      <td style="text-align: left">服务器证书</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">/opt/CSE/etc/ssl/cert_pwd</td>
+      <td style="text-align: left">用于存放解密私钥的对称加密密文文件</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">/opt/CSE/apps</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">/opt/CSE/apps/ServiceCenter</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">APP_ROOT</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">/opt/CSE/apps/ServiceCenter/conf</td>
+      <td style="text-align: left">服务管理中心配置文件目录</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">/opt/CSE/apps/ServiceCenter/conf/app.conf</td>
+      <td style="text-align: left">应用配置文件</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">-</td>
+    </tr>
+  </tbody>
+</table>
+
+<h2 id="示例代码">示例代码</h2>
+
+<p>microservice.yaml文件中启用TLS通信的配置示例如下:</p>
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">cse</span><span class="pi">:</span>
+  <span class="s">service</span><span class="pi">:</span>
+    <span class="s">registry</span><span class="pi">:</span>
+      <span class="s">address</span><span class="pi">:</span> <span class="s">https://127.0.0.1:30100</span>
+  <span class="s">rest</span><span class="pi">:</span>
+    <span class="s">address</span><span class="pi">:</span> <span class="s">0.0.0.0:8080?sslEnabled=true</span>
+  <span class="s">highway</span><span class="pi">:</span>
+    <span class="s">address</span><span class="pi">:</span> <span class="s">0.0.0.0:7070?sslEnabled=true</span>
+
+<span class="c1">#########SSL options</span>
+<span class="s">ssl.protocols</span><span class="pi">:</span> <span class="s">TLSv1.2</span>
+<span class="s">ssl.authPeer</span><span class="pi">:</span> <span class="s">true</span>
+<span class="s">ssl.checkCN.host</span><span class="pi">:</span> <span class="s">true</span>
+
+<span class="c1">#########certificates config</span>
+<span class="s">ssl.trustStore</span><span class="pi">:</span> <span class="s">trust.jks</span>
+<span class="s">ssl.trustStoreType</span><span class="pi">:</span> <span class="s">JKS</span>
+<span class="s">ssl.trustStoreValue</span><span class="pi">:</span> <span class="s">Changeme_123</span>
+<span class="s">ssl.keyStore</span><span class="pi">:</span> <span class="s">server.p12</span>
+<span class="s">ssl.keyStoreType</span><span class="pi">:</span> <span class="s">PKCS12</span>
+<span class="s">ssl.keyStoreValue</span><span class="pi">:</span> <span class="s">Changeme_123</span>
+<span class="s">ssl.crl</span><span class="pi">:</span> <span class="s">revoke.crl</span>
+<span class="s">ssl.sslCustomClass</span><span class="pi">:</span> <span class="s">io.servicecomb.demo.DemoSSLCustom</span>
+</code></pre>
+</div>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/cn/use-tls.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/cn/use-tls.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>


[08/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/users/communicate-protocol/index.html
----------------------------------------------------------------------
diff --git a/content/users/communicate-protocol/index.html b/content/users/communicate-protocol/index.html
new file mode 100644
index 0000000..f31311d
--- /dev/null
+++ b/content/users/communicate-protocol/index.html
@@ -0,0 +1,1109 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>通信协议 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="通信协议">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="通信协议">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/users/communicate-protocol/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/users/communicate-protocol/">
+
+
+
+  <meta property="og:description" content="通信协议">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="通信协议">
+  <meta name="twitter:description" content="通信协议">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/users/communicate-protocol/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">User Guide</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/" class="">Java Chassis Architecture</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/setup-environment/" class="">Setup Environment</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Provider</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-definition/" class="">Service Definition</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-contract/" class="">Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-springmvc/" class="">Develop Microservice with SpringMVC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-jax-rs/" class="">Develop Microservice with JAX-RS</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-transparent-rpc/" class="">Develop Microservice with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-interface-constraints/" class="">Service Interface Constraints</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-configurations/" class="">Service Configurations</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/communicate-protocol/" class="active">Communicate Protocol</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/application-boot-process/" class="">Application Boot Up Process</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-heartbeat/" class="">Service Heartbeat</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Consumer</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rest-template/" class="">Develop with Rest Template</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rpc/" class="">Develop with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-service-contract/" class="">Use Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/invoke-control/" class="">Invoke Control</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">General Development</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/local-develop-test/" class="">Develop and Test in Local Environment</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-servicecomb-in-spring-boot/" class="">Use ServiceComb in Spring Boot</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/distributed-tracing/" class="">Distributed Tracing</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/customized-tracing/" class="">Customized Tracing</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Edging Service</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/nginx/" class="">confd and Nginx</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/zuul/" class="">Zuul</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">Metrics</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Deployment</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/run-mode/" class="">Run Mode</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Security</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-tls/" class="">Use TLS</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="通信协议">
+    <meta itemprop="description" content="通信协议">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">通信协议
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> On This Page</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#通信协议" id="markdown-toc-通信协议">通信协议</a>    <ul>
+      <li><a href="#概念阐述" id="markdown-toc-概念阐述">概念阐述</a></li>
+      <li><a href="#注意事项" id="markdown-toc-注意事项">注意事项</a></li>
+    </ul>
+  </li>
+  <li><a href="#线程模型" id="markdown-toc-线程模型">线程模型</a>    <ul>
+      <li><a href="#概念阐述-1" id="markdown-toc-概念阐述-1">概念阐述</a></li>
+      <li><a href="#完整线程" id="markdown-toc-完整线程">完整线程</a></li>
+    </ul>
+  </li>
+  <li><a href="#rest-over-servlet" id="markdown-toc-rest-over-servlet">REST over Servlet</a>    <ul>
+      <li><a href="#配置说明" id="markdown-toc-配置说明">配置说明</a></li>
+      <li><a href="#示例代码" id="markdown-toc-示例代码">示例代码</a></li>
+    </ul>
+  </li>
+  <li><a href="#rest-over-vertx" id="markdown-toc-rest-over-vertx">REST over Vertx</a>    <ul>
+      <li><a href="#配置说明-1" id="markdown-toc-配置说明-1">配置说明</a></li>
+      <li><a href="#示例代码-1" id="markdown-toc-示例代码-1">示例代码</a></li>
+    </ul>
+  </li>
+  <li><a href="#highway-rpc协议" id="markdown-toc-highway-rpc协议">Highway RPC协议</a>    <ul>
+      <li><a href="#概念阐述-2" id="markdown-toc-概念阐述-2">概念阐述</a></li>
+      <li><a href="#配置说明-2" id="markdown-toc-配置说明-2">配置说明</a></li>
+      <li><a href="#示例代码-2" id="markdown-toc-示例代码-2">示例代码</a></li>
+    </ul>
+  </li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="通信协议">通信协议</h2>
+<h3 id="概念阐述">概念阐述</h3>
+
+<p>ServiceComb实现了两种网络通道,包括REST和Highway,均支持TLS加密传输。其中,REST网络通道将服务以标准RESTful形式发布,调用端兼容直接使用http client使用标准RESTful形式进行调用。</p>
+
+<h3 id="注意事项">注意事项</h3>
+
+<p>参数和返回值的序列化:</p>
+
+<p>当前REST通道的body参数只支持application/json序列化方式,如果要向服务端发送form类型的参数,那么需要在调用端构造好application/json格式的body,不能直接以multipart/form-data格式传递form类型参数。</p>
+
+<p>当前REST通道返回值支持application/json和text/plain两种格式,服务提供者通过produces声明可提供序列化能力,服务消费者通过请求的Accept头指明返回值序列化方式,默认返回application/json格式的数据。</p>
+
+<h2 id="线程模型">线程模型</h2>
+<h3 id="概念阐述-1">概念阐述</h3>
+
+<p>本小节主要介绍ServiceComb微服务的完整线程模型,介绍IO线程和业务线程之间的关系</p>
+
+<h3 id="完整线程">完整线程</h3>
+
+<p>ServicecComb微服务的完整线程模型如下图所示:</p>
+
+<p><img src="/assets/images/thread-model.png" alt="" /></p>
+
+<blockquote>
+  <ol>
+    <li>业务线程在第一次调用时会绑定某一个网络线程,避免在不同网络线程之间切换,无谓地增加线程冲突的概率</li>
+    <li>业务线程绑定网络线程后,会再绑定该网络线程内部的某个连接,同样是为了避免线程冲突</li>
+  </ol>
+</blockquote>
+
+<ul>
+  <li>客户端和服务器都可以配置多个网络线程(eventloop),默认为CPU核数的两倍,每个网络线程可以配置多个连接,默认为1,支持Rest和Highway两种网络通道,具体配置请查看如下章节:
+    <ul>
+      <li><a href="/users/communicate-protocol#rest-over-servlet">REST over Servlet</a></li>
+      <li><a href="/users/communicate-protocol/#rest-over-vertx">REST over Vertx</a></li>
+      <li><a href="/users/communicate-protocol/#highway-rpc协议">Highway RPC协议</a></li>
+    </ul>
+  </li>
+  <li>客户端可配置业务线程池executor,线程粒度可细化至schemaId:operation,配置如下:</li>
+</ul>
+
+<p>在microservice.yaml中添加executors配置,为schemaId:operation配置单独的业务线程池:</p>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">cse</span><span class="pi">:</span> 
+  <span class="s">executors</span><span class="pi">:</span> 
+    <span class="s">Provider</span><span class="pi">:</span> 
+      <span class="pi">[</span><span class="nv">schemaId</span><span class="pi">]</span><span class="s">.[operation]</span>
+</code></pre>
+</div>
+
+<h2 id="rest-over-servlet">REST over Servlet</h2>
+<h3 id="配置说明">配置说明</h3>
+
+<p>  REST over Servlet对应使用web容器模式部署运行,需要新建一个servlet工程将微服务包装起来,加载到web容器中启动运行,包装微服务的方法有两种,一种完全使用web.xml配置文件配置,另一种仅在web.xml文件中配置listener,在microservice.yaml文件中配置urlPattern,两种方式如下所示:</p>
+
+<ul>
+  <li>
+    <p>在web.xml文件中完成全部配置</p>
+
+    <p>web.xml文件配置在项目的src/main/webapp/WEB_INF目录,配置内容如下:</p>
+
+    <div class="language-xml highlighter-rouge"><pre class="highlight"><code> <span class="nt">&lt;web-app</span> <span class="na">xmlns=</span><span class="s">"http://java.sun.com/xml/ns/javaee"</span> <span class="na">xmlns:xsi=</span><span class="s">"http://www.w3.org/2001/XMLSchema-instance"</span> <span class="na">xsi:schemaLocation=</span><span class="s">"http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"</span> <span class="na">version=</span><span class="s">"3.0"</span><span class="nt">&gt;</span>  
+   <span class="nt">&lt;context-param&gt;</span> 
+     <span class="nt">&lt;param-name&gt;</span>contextConfigLocation<span class="nt">&lt;/param-name&gt;</span>  
+     <span class="nt">&lt;param-value&gt;</span>classpath*:META-INF/spring/*.bean.xml classpath*:app-config.xml<span class="nt">&lt;/param-value&gt;</span> 
+   <span class="nt">&lt;/context-param&gt;</span>  
+   <span class="nt">&lt;listener&gt;</span> 
+     <span class="nt">&lt;listener-class&gt;</span>io.servicecomb.transport.rest.servlet.RestServletContextListener<span class="nt">&lt;/listener-class&gt;</span> 
+   <span class="nt">&lt;/listener&gt;</span>  
+   <span class="nt">&lt;servlet&gt;</span> 
+     <span class="nt">&lt;servlet-name&gt;</span>RestServlet<span class="nt">&lt;/servlet-name&gt;</span>  
+     <span class="nt">&lt;servlet-class&gt;</span>io.servicecomb.transport.rest.servlet.RestServlet<span class="nt">&lt;/servlet-class&gt;</span>  
+     <span class="nt">&lt;load-on-startup&gt;</span>1<span class="nt">&lt;/load-on-startup&gt;</span>  
+     <span class="nt">&lt;async-supported&gt;</span>true<span class="nt">&lt;/async-supported&gt;</span> 
+   <span class="nt">&lt;/servlet&gt;</span>  
+   <span class="nt">&lt;servlet-mapping&gt;</span> 
+     <span class="nt">&lt;servlet-name&gt;</span>RestServlet<span class="nt">&lt;/servlet-name&gt;</span>  
+     <span class="nt">&lt;url-pattern&gt;</span>/rest/*<span class="nt">&lt;/url-pattern&gt;</span> 
+   <span class="nt">&lt;/servlet-mapping&gt;</span> 
+ <span class="nt">&lt;/web-app&gt;</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p>在web.xml文件中仅配置listener,在microservice.yaml文件中配置urlPattern</p>
+
+    <div class="language-xml highlighter-rouge"><pre class="highlight"><code> <span class="nt">&lt;web-app</span> <span class="na">xmlns=</span><span class="s">"http://java.sun.com/xml/ns/javaee"</span> <span class="na">xmlns:xsi=</span><span class="s">"http://www.w3.org/2001/XMLSchema-instance"</span> <span class="na">xsi:schemaLocation=</span><span class="s">"http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"</span> <span class="na">version=</span><span class="s">"3.0"</span><span class="nt">&gt;</span>  
+   <span class="nt">&lt;context-param&gt;</span> 
+     <span class="nt">&lt;param-name&gt;</span>contextConfigLocation<span class="nt">&lt;/param-name&gt;</span>  
+     <span class="nt">&lt;param-value&gt;</span>classpath*:META-INF/spring/*.bean.xml classpath*:app-config.xml<span class="nt">&lt;/param-value&gt;</span> 
+   <span class="nt">&lt;/context-param&gt;</span>  
+   <span class="nt">&lt;listener&gt;</span> 
+     <span class="nt">&lt;listener-class&gt;</span>io.servicecomb.transport.rest.servlet.RestServletContextListener<span class="nt">&lt;/listener-class&gt;</span> 
+   <span class="nt">&lt;/listener&gt;</span> 
+ <span class="nt">&lt;/web-app&gt;</span>
+</code></pre>
+    </div>
+
+    <p>在microservice.yaml文件中需要增加一行配置来指定urlPattern:</p>
+
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code> <span class="s">servicecomb.rest.servlet.urlPattern</span><span class="pi">:</span> <span class="s">/rest/*</span>
+</code></pre>
+    </div>
+  </li>
+</ul>
+
+<p>以上两种方式是等效的,两种方式都需要在maven pom文件中添加如下依赖:</p>
+
+<div class="language-xml highlighter-rouge"><pre class="highlight"><code><span class="nt">&lt;dependency&gt;</span> 
+  <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>  
+  <span class="nt">&lt;artifactId&gt;</span>transport-rest-servlet<span class="nt">&lt;/artifactId&gt;</span> 
+<span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+</div>
+
+<p>REST over Servlet在microservice.yaml文件中的配置项见下表:</p>
+
+<p>表1 REST over Servlet配置项说明</p>
+
+<table>
+  <thead>
+    <tr>
+      <th style="text-align: left">配置项</th>
+      <th style="text-align: left">默认值</th>
+      <th style="text-align: left">取值范围</th>
+      <th style="text-align: left">是否必选</th>
+      <th style="text-align: left">含义</th>
+      <th style="text-align: left">注意</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td style="text-align: left">cse.rest.address</td>
+      <td style="text-align: left">0.0.0.0:8080</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">服务监听地址</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.rest.timeout</td>
+      <td style="text-align: left">3000</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">超时时间</td>
+      <td style="text-align: left">单位为毫秒</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.request.timeout</td>
+      <td style="text-align: left">30000</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">请求超时时间</td>
+      <td style="text-align: left">同REST over Vertx的配置</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.references.[服务名].transport</td>
+      <td style="text-align: left">rest</td>
+      <td style="text-align: left"> </td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">访问的transport类型</td>
+      <td style="text-align: left">同REST over Vertx的配置</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.references.[服务名].version-rule</td>
+      <td style="text-align: left">latest</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">访问实例的版本号</td>
+      <td style="text-align: left">同REST over Vertx的配置</td>
+    </tr>
+  </tbody>
+</table>
+
+<h3 id="示例代码">示例代码</h3>
+
+<p>microservice.yaml文件中的配置示例如下:</p>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">cse</span><span class="pi">:</span>
+  <span class="s">rest</span><span class="pi">:</span>
+    <span class="s">address</span><span class="pi">:</span> <span class="s">0.0.0.0:8080</span>
+    <span class="s">timeout</span><span class="pi">:</span> <span class="s">3000</span>
+</code></pre>
+</div>
+
+<h2 id="rest-over-vertx">REST over Vertx</h2>
+<h3 id="配置说明-1">配置说明</h3>
+
+<p>REST over Vertx通信通道对应使用standalone部署运行模式,可直接通过main函数拉起。main函数中需要初始化日志和加载服务配置,代码如下:</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">io.servicecomb.foundation.common.utils.BeanUtils</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">io.servicecomb.foundation.common.utils.Log4jUtils</span><span class="o">;</span>
+
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">MainServer</span> <span class="o">{</span>
+  <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span>
+  <span class="err"> </span><span class="n">Log4jUtils</span><span class="o">.</span><span class="na">init</span><span class="o">();</span><span class="c1">//日志初始化</span>
+  <span class="err"> </span><span class="n">BeanUtils</span><span class="o">.</span><span class="na">init</span><span class="o">();</span> <span class="c1">// Spring bean初始化</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<p>使用REST over Vertx网络通道需要在maven pom文件中添加如下依赖:</p>
+
+<div class="language-xml highlighter-rouge"><pre class="highlight"><code><span class="nt">&lt;dependency&gt;</span>
+  <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+  <span class="nt">&lt;artifactId&gt;</span>transport-rest-vertx<span class="nt">&lt;/artifactId&gt;</span>
+<span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+</div>
+
+<p>REST over Vertx通道在microservice.yaml文件中有以下配置项:</p>
+
+<p>表2 REST over Vertx配置项说明</p>
+
+<table>
+  <thead>
+    <tr>
+      <th style="text-align: left">配置项</th>
+      <th style="text-align: left">默认值</th>
+      <th style="text-align: left">取值范围</th>
+      <th style="text-align: left">是否必选</th>
+      <th style="text-align: left">含义</th>
+      <th style="text-align: left">注意</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td style="text-align: left">cse.rest.address</td>
+      <td style="text-align: left">0.0.0.0:8080</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">服务监听地址</td>
+      <td style="text-align: left">仅服务提供者需要配置</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.rest.server.thread-count</td>
+      <td style="text-align: left">1</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">服务端线程数</td>
+      <td style="text-align: left">仅服务提供者需要配置</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.rest.client.thread-count</td>
+      <td style="text-align: left">1</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">客户端网络线程数</td>
+      <td style="text-align: left">仅服务消费者需要配置</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.rest.client.connection-pool-per-thread</td>
+      <td style="text-align: left">1</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">客户端每个网络线程中的连接池的个数</td>
+      <td style="text-align: left">仅服务消费者需要配置</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.request.timeout</td>
+      <td style="text-align: left">30000</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">请求超时时间</td>
+      <td style="text-align: left"> </td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.references.[服务名].transport</td>
+      <td style="text-align: left">rest</td>
+      <td style="text-align: left"> </td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">访问的transport类型</td>
+      <td style="text-align: left">仅服务消费者需要配置</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.references.[服务名].version-rule</td>
+      <td style="text-align: left">latest</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">访问实例的版本号</td>
+      <td style="text-align: left">仅服务消费者需要配置支持latest,1.0.0+,1.0.0-2.0.2,精确版本。详细参考服务中心的接口描述。</td>
+    </tr>
+  </tbody>
+</table>
+
+<h3 id="示例代码-1">示例代码</h3>
+
+<p>microservice.yaml文件中的配置示例:</p>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">cse</span><span class="pi">:</span>
+  <span class="s">rest</span><span class="pi">:</span>
+    <span class="s">address</span><span class="pi">:</span> <span class="s">0.0.0.0:8080</span>
+    <span class="s">thread-count</span><span class="pi">:</span> <span class="s">1</span>
+  <span class="s">references</span><span class="pi">:</span>
+    <span class="s">hello</span><span class="pi">:</span>
+      <span class="s">transport</span><span class="pi">:</span> <span class="s">rest</span>
+      <span class="s">version-rule</span><span class="pi">:</span> <span class="s">0.0.1</span>
+</code></pre>
+</div>
+
+<h2 id="highway-rpc协议">Highway RPC协议</h2>
+<h3 id="概念阐述-2">概念阐述</h3>
+
+<p>Highway是ServiceComb的高性能私有协议,用户可在有特殊性能需求的场景下选用。</p>
+
+<h3 id="配置说明-2">配置说明</h3>
+
+<p>使用Highway网络通道需要在maven pom文件中添加如下依赖:</p>
+
+<div class="language-xml highlighter-rouge"><pre class="highlight"><code><span class="nt">&lt;dependency&gt;</span> 
+  <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>  
+  <span class="nt">&lt;artifactId&gt;</span>transport-highway<span class="nt">&lt;/artifactId&gt;</span> 
+<span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+</div>
+
+<p>Highway通道在microservice.yaml文件中的配置项如下表所示:</p>
+
+<p>表3 Highway配置项说明</p>
+
+<table>
+  <thead>
+    <tr>
+      <th style="text-align: left">配置项</th>
+      <th style="text-align: left">默认值</th>
+      <th style="text-align: left">取值范围</th>
+      <th style="text-align: left">是否必选</th>
+      <th style="text-align: left">含义</th>
+      <th style="text-align: left">注意</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td style="text-align: left">cse.highway.address</td>
+      <td style="text-align: left">0.0.0.0:7070</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">服务监听地址</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.highway.server.thread-count</td>
+      <td style="text-align: left">1</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">服务端网络线程个数</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.highway.client.thread-count</td>
+      <td style="text-align: left">1</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">客户端网络线程个数</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.highway.client.connection-pool-per-thread</td>
+      <td style="text-align: left">1</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">客户端每个网络线程的连接池个数</td>
+      <td style="text-align: left">-</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.request.timeout</td>
+      <td style="text-align: left">30000</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">请求超时时间</td>
+      <td style="text-align: left">同REST over Vertx的配置</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.references.[服务名].transport</td>
+      <td style="text-align: left">rest</td>
+      <td style="text-align: left"> </td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">访问的transport类型</td>
+      <td style="text-align: left">同REST over Vertx的配置</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">cse.references.[服务名].version-rule</td>
+      <td style="text-align: left">latest</td>
+      <td style="text-align: left">-</td>
+      <td style="text-align: left">否</td>
+      <td style="text-align: left">访问实例的版本号</td>
+      <td style="text-align: left">同REST over Vertx的配置</td>
+    </tr>
+  </tbody>
+</table>
+
+<h3 id="示例代码-2">示例代码</h3>
+
+<p>microservice.yaml文件中的配置示例:</p>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">cse</span><span class="pi">:</span>
+  <span class="s">highway</span><span class="pi">:</span>
+    <span class="s">address</span><span class="pi">:</span> <span class="s">0.0.0.0:7070</span>
+</code></pre>
+</div>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/communicate-protocol.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/communicate-protocol.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/users/customized-tracing/index.html
----------------------------------------------------------------------
diff --git a/content/users/customized-tracing/index.html b/content/users/customized-tracing/index.html
new file mode 100644
index 0000000..476af44
--- /dev/null
+++ b/content/users/customized-tracing/index.html
@@ -0,0 +1,803 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>Customized Tracing - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="自定义调用链打点">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="Customized Tracing">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/users/customized-tracing/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/users/customized-tracing/">
+
+
+
+  <meta property="og:description" content="自定义调用链打点">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="Customized Tracing">
+  <meta name="twitter:description" content="自定义调用链打点">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/users/customized-tracing/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">User Guide</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/" class="">Java Chassis Architecture</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/setup-environment/" class="">Setup Environment</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Provider</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-definition/" class="">Service Definition</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-contract/" class="">Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-springmvc/" class="">Develop Microservice with SpringMVC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-jax-rs/" class="">Develop Microservice with JAX-RS</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-transparent-rpc/" class="">Develop Microservice with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-interface-constraints/" class="">Service Interface Constraints</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-configurations/" class="">Service Configurations</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/communicate-protocol/" class="">Communicate Protocol</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/application-boot-process/" class="">Application Boot Up Process</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-heartbeat/" class="">Service Heartbeat</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Consumer</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rest-template/" class="">Develop with Rest Template</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rpc/" class="">Develop with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-service-contract/" class="">Use Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/invoke-control/" class="">Invoke Control</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">General Development</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/local-develop-test/" class="">Develop and Test in Local Environment</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-servicecomb-in-spring-boot/" class="">Use ServiceComb in Spring Boot</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/distributed-tracing/" class="">Distributed Tracing</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/customized-tracing/" class="active">Customized Tracing</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Edging Service</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/nginx/" class="">confd and Nginx</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/zuul/" class="">Zuul</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">Metrics</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Deployment</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/run-mode/" class="">Run Mode</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Security</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-tls/" class="">Use TLS</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="Customized Tracing">
+    <meta itemprop="description" content="自定义调用链打点">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">Customized Tracing
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> On This Page</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#概念阐述" id="markdown-toc-概念阐述">概念阐述</a></li>
+  <li><a href="#前提条件" id="markdown-toc-前提条件">前提条件</a></li>
+  <li><a href="#注意事项" id="markdown-toc-注意事项">注意事项</a></li>
+  <li><a href="#自定义调用链打点" id="markdown-toc-自定义调用链打点">自定义调用链打点</a></li>
+  <li><a href="#使用步骤" id="markdown-toc-使用步骤">使用步骤:</a>    <ul>
+      <li><a href="#添加依赖" id="markdown-toc-添加依赖">添加依赖</a></li>
+      <li><a href="#启用自定义打点功能" id="markdown-toc-启用自定义打点功能">启用自定义打点功能</a></li>
+      <li><a href="#定制打点" id="markdown-toc-定制打点">定制打点</a></li>
+    </ul>
+  </li>
+  <li><a href="#定制上报的数据" id="markdown-toc-定制上报的数据">定制上报的数据</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="概念阐述">概念阐述</h2>
+
+<p>分布式调用链追踪提供了服务间调用的时序信息,但服务内部的链路调用信息对开发者同样重要,如果能将两者合二为一,就能提供更完整的调用链,更容易定位错误和潜在性能问题。</p>
+
+<h2 id="前提条件">前提条件</h2>
+
+<ul>
+  <li>使用自定义打点功能需要首先配置并启用Java Chassis微服务调用链。</li>
+</ul>
+
+<h2 id="注意事项">注意事项</h2>
+
+<ul>
+  <li>使用<code class="highlighter-rouge">@Span</code>注释的自定义打点功能只支持和Java Chassis调用请求同一线程的方法调用。</li>
+  <li>添加<code class="highlighter-rouge">@Span</code>注释的方法必须是Spring管理的Bean,否则需要按这里<a href="https://stackoverflow.com/questions/41383941/load-time-weaving-for-non-spring-beans-in-a-spring-application">提到的方法</a>配置。</li>
+</ul>
+
+<h2 id="自定义调用链打点">自定义调用链打点</h2>
+
+<p>该功能集成了Zipkin,提供<code class="highlighter-rouge">@Span</code>注释为需要追踪的方法自定义打点。Java Chassis将自动追踪所有添加<code class="highlighter-rouge">@Span</code>注释的方法,把每个方法的本地调用信息与服务间调用信息连接起来。</p>
+
+<h2 id="使用步骤">使用步骤:</h2>
+
+<h3 id="添加依赖">添加依赖</h3>
+
+<p>基于 ServiceComb Java Chassis 的微服务只需要添加如下依赖到 pom.xml:</p>
+
+<div class="language-xml highlighter-rouge"><pre class="highlight"><code>    <span class="nt">&lt;dependency&gt;</span>
+      <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+      <span class="nt">&lt;artifactId&gt;</span>tracing-zipkin<span class="nt">&lt;/artifactId&gt;</span>
+    <span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+</div>
+
+<h3 id="启用自定义打点功能">启用自定义打点功能</h3>
+
+<p>在应用入口或Spring配置类上添加<code class="highlighter-rouge">@EnableZipkinTracing</code>注释:</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@SpringBootApplication</span>
+<span class="nd">@EnableZipkinTracing</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">ZipkinSpanTestApplication</span> <span class="o">{</span>
+  <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
+    <span class="n">SpringApplication</span><span class="o">.</span><span class="na">run</span><span class="o">(</span><span class="n">ZipkinSpanTestApplication</span><span class="o">.</span><span class="na">class</span><span class="o">);</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<h3 id="定制打点">定制打点</h3>
+
+<p>在需要定制打点的方法上添加<code class="highlighter-rouge">@Span</code>注释:</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="nd">@Component</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">SlowRepoImpl</span> <span class="kd">implements</span> <span class="n">SlowRepo</span> <span class="o">{</span>
+  <span class="kd">private</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">Logger</span> <span class="n">logger</span> <span class="o">=</span> <span class="n">LoggerFactory</span><span class="o">.</span><span class="na">getLogger</span><span class="o">(</span><span class="n">SlowRepoImpl</span><span class="o">.</span><span class="na">class</span><span class="o">);</span>
+
+  <span class="kd">private</span> <span class="kd">final</span> <span class="n">Random</span> <span class="n">random</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Random</span><span class="o">();</span>
+
+  <span class="nd">@Span</span>
+  <span class="nd">@Override</span>
+  <span class="kd">public</span> <span class="n">String</span> <span class="nf">crawl</span><span class="o">()</span> <span class="kd">throws</span> <span class="n">InterruptedException</span> <span class="o">{</span>
+    <span class="n">logger</span><span class="o">.</span><span class="na">info</span><span class="o">(</span><span class="s">"in /crawl"</span><span class="o">);</span>
+    <span class="n">Thread</span><span class="o">.</span><span class="na">sleep</span><span class="o">(</span><span class="n">random</span><span class="o">.</span><span class="na">nextInt</span><span class="o">(</span><span class="mi">200</span><span class="o">));</span>
+    <span class="k">return</span> <span class="s">"crawled"</span><span class="o">;</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<p>就这样,通过使用<code class="highlighter-rouge">@Span</code>注释,我们启动了基于 Zipkin 的自定义打点功能。</p>
+
+<h2 id="定制上报的数据">定制上报的数据</h2>
+
+<p>通过自定义打点上报的调用链包含两条数据:</p>
+
+<ul>
+  <li><strong>span name</strong> 默认为当前注释的方法全名。</li>
+  <li><strong>call.path</strong> 默认为当前注释的方法签名。</li>
+</ul>
+
+<p>例如,上述例子<code class="highlighter-rouge">SlowRepoImp</code>里上报的数据如下:</p>
+
+<table>
+  <thead>
+    <tr>
+      <th style="text-align: left">key</th>
+      <th style="text-align: left">value</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td style="text-align: left">span name</td>
+      <td style="text-align: left">crawl</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">call.path</td>
+      <td style="text-align: left">public abstract java.lang.String io.servicecomb.tests.tracing.SlowRepo.crawl() throws java.lang.InterruptedException</td>
+    </tr>
+  </tbody>
+</table>
+
+<p>如果需要定制上报的数据内容,可以传入自定义的参数:</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code>  <span class="kd">public</span> <span class="kd">static</span> <span class="kd">class</span> <span class="nc">CustomSpanTask</span> <span class="o">{</span>
+    <span class="nd">@Span</span><span class="o">(</span><span class="n">spanName</span> <span class="o">=</span> <span class="s">"transaction1"</span><span class="o">,</span> <span class="n">callPath</span> <span class="o">=</span> <span class="s">"startA"</span><span class="o">)</span>
+    <span class="kd">public</span> <span class="n">String</span> <span class="nf">invoke</span><span class="o">()</span> <span class="o">{</span>
+      <span class="k">return</span> <span class="s">"invoke the method"</span><span class="o">;</span>
+    <span class="o">}</span>
+  <span class="o">}</span>
+</code></pre>
+</div>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/customized-tracing.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/customized-tracing.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/users/develop-with-jax-rs/index.html
----------------------------------------------------------------------
diff --git a/content/users/develop-with-jax-rs/index.html b/content/users/develop-with-jax-rs/index.html
new file mode 100644
index 0000000..b22ae5c
--- /dev/null
+++ b/content/users/develop-with-jax-rs/index.html
@@ -0,0 +1,843 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>用JAX-RS开发微服务 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="用JAX-RS开发微服务">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="用JAX-RS开发微服务">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/users/develop-with-jax-rs/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/users/develop-with-jax-rs/">
+
+
+
+  <meta property="og:description" content="用JAX-RS开发微服务">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="用JAX-RS开发微服务">
+  <meta name="twitter:description" content="用JAX-RS开发微服务">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/users/develop-with-jax-rs/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">User Guide</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/" class="">Java Chassis Architecture</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/setup-environment/" class="">Setup Environment</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Provider</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-definition/" class="">Service Definition</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-contract/" class="">Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-springmvc/" class="">Develop Microservice with SpringMVC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-jax-rs/" class="active">Develop Microservice with JAX-RS</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-transparent-rpc/" class="">Develop Microservice with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-interface-constraints/" class="">Service Interface Constraints</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-configurations/" class="">Service Configurations</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/communicate-protocol/" class="">Communicate Protocol</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/application-boot-process/" class="">Application Boot Up Process</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/service-heartbeat/" class="">Service Heartbeat</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Develop Service Consumer</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rest-template/" class="">Develop with Rest Template</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/develop-with-rpc/" class="">Develop with Transparent RPC</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-service-contract/" class="">Use Service Contract</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/invoke-control/" class="">Invoke Control</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">General Development</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/local-develop-test/" class="">Develop and Test in Local Environment</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-servicecomb-in-spring-boot/" class="">Use ServiceComb in Spring Boot</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/distributed-tracing/" class="">Distributed Tracing</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/customized-tracing/" class="">Customized Tracing</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Edging Service</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/nginx/" class="">confd and Nginx</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/edging-service/zuul/" class="">Zuul</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">Metrics</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Deployment</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/run-mode/" class="">Run Mode</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">Security</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/users/use-tls/" class="">Use TLS</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="用JAX-RS开发微服务">
+    <meta itemprop="description" content="用JAX-RS开发微服务">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">用JAX-RS开发微服务
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> On This Page</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#概念阐述" id="markdown-toc-概念阐述">概念阐述</a></li>
+  <li><a href="#开发示例" id="markdown-toc-开发示例">开发示例</a></li>
+  <li><a href="#涉及api" id="markdown-toc-涉及api">涉及API</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="概念阐述">概念阐述</h2>
+
+<p>ServiceComb支持开发者使用JAX-RS注解,使用JAX-RS模式开发服务。</p>
+
+<h2 id="开发示例">开发示例</h2>
+
+<ul>
+  <li>
+    <p><strong>步骤 1</strong> 定义服务接口。</p>
+
+    <p>根据开发之前定义好的契约,编写Java业务接口,代码如下:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="kd">public</span> <span class="kd">interface</span> <span class="nc">Hello</span> <span class="o">{</span>
+  <span class="err"> </span><span class="n">String</span> <span class="nf">sayHi</span><span class="o">(</span><span class="n">String</span> <span class="n">name</span><span class="o">);</span>
+  <span class="err"> </span><span class="n">String</span> <span class="nf">sayHello</span><span class="o">(</span><span class="n">Person</span> <span class="n">person</span><span class="o">);</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+
+    <blockquote>
+      <p><strong>说明</strong>:
+ 该接口的位置需要与契约中x-java-interface所指定的路径一致。</p>
+    </blockquote>
+  </li>
+  <li>
+    <p><strong>步骤 2</strong> 实现服务。</p>
+
+    <p>使用JAX-RS注解开发业务代码,Hello的服务实现如下:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="kn">import</span> <span class="nn">javax.ws.rs.POST</span><span class="o">;</span>
+ <span class="kn">import</span> <span class="nn">javax.ws.rs.Path</span><span class="o">;</span>
+ <span class="kn">import</span> <span class="nn">javax.ws.rs.Produces</span><span class="o">;</span>
+ <span class="kn">import</span> <span class="nn">javax.ws.rs.core.MediaType</span><span class="o">;</span>
+ <span class="kn">import</span> <span class="nn">io.servicecomb.samples.common.schema.Hello</span><span class="o">;</span>
+ <span class="kn">import</span> <span class="nn">io.servicecomb.samples.common.schema.models.Person</span><span class="o">;</span>
+
+ <span class="nd">@Path</span><span class="o">(</span><span class="s">"/jaxrshello"</span><span class="o">)</span>
+ <span class="nd">@Produces</span><span class="o">(</span><span class="n">MediaType</span><span class="o">.</span><span class="na">APPLICATION_JSON</span><span class="o">)</span>
+ <span class="kd">public</span> <span class="kd">class</span> <span class="nc">JaxrsHelloImpl</span> <span class="kd">implements</span> <span class="n">Hello</span> <span class="o">{</span>
+   <span class="nd">@Path</span><span class="o">(</span><span class="s">"/sayhi"</span><span class="o">)</span>
+   <span class="nd">@POST</span>
+   <span class="nd">@Override</span>
+   <span class="kd">public</span> <span class="n">String</span> <span class="nf">sayHi</span><span class="o">(</span><span class="n">String</span> <span class="n">name</span><span class="o">)</span> <span class="o">{</span>
+   <span class="err"> </span><span class="k">return</span> <span class="s">"Hello "</span> <span class="o">+</span> <span class="n">name</span><span class="o">;</span>
+   <span class="o">}</span>
+
+   <span class="nd">@Path</span><span class="o">(</span><span class="s">"/sayhello"</span><span class="o">)</span>
+   <span class="nd">@POST</span>
+   <span class="nd">@Override</span>
+   <span class="kd">public</span> <span class="n">String</span> <span class="nf">sayHello</span><span class="o">(</span><span class="n">Person</span> <span class="n">person</span><span class="o">)</span> <span class="o">{</span>
+     <span class="k">return</span> <span class="s">"Hello person "</span> <span class="o">+</span> <span class="n">person</span><span class="o">.</span><span class="na">getName</span><span class="o">();</span>
+   <span class="o">}</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p><strong>步骤 3</strong> 发布服务。</p>
+
+    <p>在服务的实现类上打上注解<code class="highlighter-rouge">@RestSchema</code>,指定schemaId,表示该实现作为当前微服务的一个schema发布,代码如下:</p>
+
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="kn">import</span> <span class="nn">io.servicecomb.provider.rest.common.RestSchema</span><span class="o">;</span>
+ <span class="c1">// other code omitted</span>
+ <span class="nd">@RestSchema</span><span class="o">(</span><span class="n">schemaId</span> <span class="o">=</span> <span class="s">"jaxrsHello"</span><span class="o">)</span>
+ <span class="kd">public</span> <span class="kd">class</span> <span class="nc">JaxrsHelloImpl</span> <span class="kd">implements</span> <span class="n">Hello</span> <span class="o">{</span>
+   <span class="c1">// other code omitted</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+
+    <p>然后在resources/META-INF/spring目录下创建jaxrsHello.bean.xml文件,配置spring进行服务扫描的base-package,文件内容如下:</p>
+
+    <div class="language-xml highlighter-rouge"><pre class="highlight"><code> <span class="cp">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span>
+ <span class="nt">&lt;beans</span> <span class="na">xmlns=</span><span class="s">" http://www.springframework.org/schema/beans "</span> <span class="na">xmlns:xsi=</span><span class="s">" http://www.w3.org/2001/XMLSchema-instance "</span>
+        <span class="na">xmlns:p=</span><span class="s">" http://www.springframework.org/schema/p "</span> <span class="na">xmlns:util=</span><span class="s">" http://www.springframework.org/schema/util "</span>
+        <span class="na">xmlns:cse=</span><span class="s">" http://www.huawei.com/schema/paas/cse/rpc "</span>
+        <span class="na">xmlns:context=</span><span class="s">" http://www.springframework.org/schema/context "</span>
+        <span class="na">xsi:schemaLocation=</span><span class="s">" http://www.springframework.org/schema/beans classpath:org/springframework/beans/factory/xml/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.huawei.com/schema/paas/cse/rpc classpath:META-INF/spring/spring-paas-cse-rpc.xsd"</span><span class="nt">&gt;</span>
+   
+     <span class="nt">&lt;context:component-scan</span> <span class="na">base-package=</span><span class="s">"io.servicecomb.samples.jaxrs.provider"</span><span class="nt">/&gt;</span>
+ <span class="nt">&lt;/beans&gt;</span>
+</code></pre>
+    </div>
+  </li>
+</ul>
+
+<h2 id="涉及api">涉及API</h2>
+
+<p>JAX-RS开发模式当前支持如下注解,所有注解的使用方法参考<a href="https://jax-rs-spec.java.net/nonav/2.0-rev-a/apidocs/index.html">JAX-RS官方文档</a>。</p>
+
+<table>
+  <thead>
+    <tr>
+      <th style="text-align: left">注解</th>
+      <th style="text-align: left">位置</th>
+      <th style="text-align: left">描述</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td style="text-align: left">javax.ws.rs.Path</td>
+      <td style="text-align: left">schema/operation</td>
+      <td style="text-align: left">URL路径</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">javax.ws.rs.Produces</td>
+      <td style="text-align: left">schema/operation</td>
+      <td style="text-align: left">方法支持的编解码能力</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">javax.ws.rs.DELETE</td>
+      <td style="text-align: left">operation</td>
+      <td style="text-align: left">http method</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">javax.ws.rs.GET</td>
+      <td style="text-align: left">operation</td>
+      <td style="text-align: left">http method</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">javax.ws.rs.POST</td>
+      <td style="text-align: left">operation</td>
+      <td style="text-align: left">http method</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">javax.ws.rs.PUT</td>
+      <td style="text-align: left">operation</td>
+      <td style="text-align: left">http method</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">javax.ws.rs.QueryParam</td>
+      <td style="text-align: left">parameter</td>
+      <td style="text-align: left">从query string中获取参数</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">javax.ws.rs.PathParam</td>
+      <td style="text-align: left">parameter</td>
+      <td style="text-align: left">从path中获取参数,必须在path中定义该参数</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">javax.ws.rs.HeaderParam</td>
+      <td style="text-align: left">parameter</td>
+      <td style="text-align: left">从header中获取参数</td>
+    </tr>
+    <tr>
+      <td style="text-align: left">javax.ws.rs.CookieParam</td>
+      <td style="text-align: left">parameter</td>
+      <td style="text-align: left">从cookie中获取参数</td>
+    </tr>
+  </tbody>
+</table>
+
+<blockquote>
+  <p><strong>说明</strong>:</p>
+  <ul>
+    <li>当方法参数没有注解,且不为HttpServletRequest类型参数时,默认为body类型参数,一个方法只支持最多一个body类型参数。</li>
+    <li>打在参数上面的注解建议显式定义出value值,否则将直接使用契约中的参数名,例如应该使用<code class="highlighter-rouge">@QueryParam\("name"\) String name</code>,而不是<code class="highlighter-rouge">@QueryParam String name</code>。</li>
+  </ul>
+</blockquote>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/develop-with-jax-rs.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/develop-with-jax-rs.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>



[24/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/users/service-heartbeat/index.html
----------------------------------------------------------------------
diff --git a/content/cn/users/service-heartbeat/index.html b/content/cn/users/service-heartbeat/index.html
new file mode 100644
index 0000000..84d8417
--- /dev/null
+++ b/content/cn/users/service-heartbeat/index.html
@@ -0,0 +1,709 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>服务心跳 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="服务心跳">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="服务心跳">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/service-heartbeat/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/service-heartbeat/">
+
+
+
+  <meta property="og:description" content="服务心跳">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="服务心跳">
+  <meta name="twitter:description" content="服务心跳">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/users/service-heartbeat/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">用户手册</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/" class="">Java Chassis系统架构</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/setup-environment/" class="">环境配置</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务提供者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-definition/" class="">服务定义</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-contract/" class="">服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-springmvc/" class="">用SpringMVC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-jax-rs/" class="">用JAX-RS开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-transparent-rpc/" class="">用透明RPC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-interface-constraints/" class="">服务接口约束</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-configurations/" class="">服务配置</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/communicate-protocol/" class="">通信协议</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/application-boot-process/" class="">程序启动逻辑</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-heartbeat/" class="active">服务心跳</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务消费者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rest-template/" class="">使用Rest Template方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rpc/" class="">使用RPC方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-service-contract/" class="">使用服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/invoke-control/" class="">调用控制</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">通用开发</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/local-develop-test/" class="">本地开发与测试</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-servicecomb-in-spring-boot/" class="">在Spring Boot中使用ServiceComb</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/distributed-tracing/" class="">分布式调用链追踪</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/customized-tracing/" class="">自定义调用链打点</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">服务能力开放</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/nginx/" class="">使用confd和Nginx做边缘服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/zuul/" class="">使用Zuul做边缘服务</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">监控</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">部署</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/run-mode/" class="">运行模式</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">微服务安全</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-tls/" class="">使用TLS通信</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="服务心跳">
+    <meta itemprop="description" content="服务心跳">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">服务心跳
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> 在本页上</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#场景描述" id="markdown-toc-场景描述">场景描述</a></li>
+  <li><a href="#涉及api" id="markdown-toc-涉及api">涉及API</a></li>
+  <li><a href="#配置说明" id="markdown-toc-配置说明">配置说明</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="场景描述">场景描述</h2>
+
+<p>当微服务实例注册到服务中心后,微服务需要定时向服务中心发送心跳。若服务中心在一定时间内没有收到心跳信息,则会注销此实例。</p>
+
+<h2 id="涉及api">涉及API</h2>
+
+<ul>
+  <li><code class="highlighter-rouge">io.servicecomb.serviceregistry.client.ServiceRegistryClient</code>:服务中心客户端</li>
+</ul>
+
+<h2 id="配置说明">配置说明</h2>
+
+<p><code class="highlighter-rouge">ServiceRegistryClient</code>提供了发送心跳的方法<code class="highlighter-rouge">heartbeat</code>,用户直接调用即可,示例代码如下:</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span>
+  <span class="c1">// 首先需要注册微服务和实例</span>
+  <span class="c1">// 发送心跳,不然实例会消失</span>
+  <span class="k">while</span> <span class="o">(</span><span class="kc">true</span><span class="o">)</span> <span class="o">{</span>
+    <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"heartbeat sended:"</span> <span class="o">+</span> <span class="n">client</span><span class="o">.</span><span class="na">heartbeat</span><span class="o">(</span><span class="n">service2</span><span class="o">.</span><span class="na">getServiceId</span><span class="o">(),</span> <span class="n">instance</span><span class="o">.</span><span class="na">getInstanceId</span><span class="o">()));</span>
+    <span class="n">Thread</span><span class="o">.</span><span class="na">sleep</span><span class="o">(</span><span class="mi">3000</span><span class="o">);</span>
+  <span class="o">}</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/cn/service-heartbeat.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/cn/service-heartbeat.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/users/service-interface-constraints/index.html
----------------------------------------------------------------------
diff --git a/content/cn/users/service-interface-constraints/index.html b/content/cn/users/service-interface-constraints/index.html
new file mode 100644
index 0000000..b85127a
--- /dev/null
+++ b/content/cn/users/service-interface-constraints/index.html
@@ -0,0 +1,753 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>服务接口约束 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="服务接口约束">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="服务接口约束">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/service-interface-constraints/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/service-interface-constraints/">
+
+
+
+  <meta property="og:description" content="服务接口约束">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="服务接口约束">
+  <meta name="twitter:description" content="服务接口约束">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/users/service-interface-constraints/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">用户手册</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/" class="">Java Chassis系统架构</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/setup-environment/" class="">环境配置</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务提供者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-definition/" class="">服务定义</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-contract/" class="">服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-springmvc/" class="">用SpringMVC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-jax-rs/" class="">用JAX-RS开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-transparent-rpc/" class="">用透明RPC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-interface-constraints/" class="active">服务接口约束</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-configurations/" class="">服务配置</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/communicate-protocol/" class="">通信协议</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/application-boot-process/" class="">程序启动逻辑</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-heartbeat/" class="">服务心跳</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务消费者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rest-template/" class="">使用Rest Template方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rpc/" class="">使用RPC方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-service-contract/" class="">使用服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/invoke-control/" class="">调用控制</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">通用开发</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/local-develop-test/" class="">本地开发与测试</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-servicecomb-in-spring-boot/" class="">在Spring Boot中使用ServiceComb</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/distributed-tracing/" class="">分布式调用链追踪</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/customized-tracing/" class="">自定义调用链打点</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">服务能力开放</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/nginx/" class="">使用confd和Nginx做边缘服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/zuul/" class="">使用Zuul做边缘服务</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">监控</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">部署</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/run-mode/" class="">运行模式</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">微服务安全</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-tls/" class="">使用TLS通信</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="服务接口约束">
+    <meta itemprop="description" content="服务接口约束">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">服务接口约束
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> 在本页上</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#接口约束说明" id="markdown-toc-接口约束说明">接口约束说明</a></li>
+  <li><a href="#详细的约束列表" id="markdown-toc-详细的约束列表">详细的约束列表</a></li>
+  <li><a href="#协议上的差异" id="markdown-toc-协议上的差异">协议上的差异</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="接口约束说明">接口约束说明</h2>
+<p>Java Chassis对于接口的使用约束建立在一个简单的原则上:接口定义即接口使用说明,不用通过查看代码实现,就能识别如何调用这个接口。举个例子:</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="n">Person</span> <span class="nf">query</span><span class="o">(</span><span class="n">String</span> <span class="n">id</span><span class="o">);</span>
+<span class="kd">public</span> <span class="n">Object</span> <span class="nf">query</span><span class="o">(</span><span class="n">String</span> <span class="n">id</span><span class="o">);</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">Person</span> <span class="o">{</span><span class="n">String</span> <span class="n">name</span><span class="o">;}</span>
+</code></pre>
+</div>
+
+<p>显然如果调用接口一,我们知道要传递一个String类型的id参数,返回值是一个Person类型,Person里面存在String类型的name等参数。如果调用接口二,我们不知道怎么处理返回值,必须参考服务提供者的文档说明。可以看出,我们是站在使用者视角这边的,以更容易被使用作为参考。</p>
+
+<p>当我们要将接口发布为REST接口的时候,可以通过使用swagger文件,指定id使用RequestParam或者PathVariable或者RequestBody进行传递,也可以使用SpringMVC或者JAX RS提供的标签来描述。</p>
+
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="n">Person</span> <span class="nf">query</span><span class="o">(</span><span class="nd">@RequestParam</span> <span class="n">String</span> <span class="n">id</span><span class="o">);</span> 
+<span class="kd">public</span> <span class="n">Person</span> <span class="nf">query</span><span class="o">(</span><span class="nd">@PathVariable</span> <span class="n">String</span> <span class="n">id</span><span class="o">);</span> 
+<span class="kd">public</span> <span class="n">Person</span> <span class="nf">query</span><span class="o">(</span><span class="nd">@RequestBody</span> <span class="n">String</span> <span class="n">id</span><span class="o">);</span> 
+</code></pre>
+</div>
+
+<p>通常,我们会将简单的数据类型,比如String, int等在RequestParam或者PathVariable传递,而把复杂的数据类型使用JSON编码以后在RequestBody传递,以减少HTTP协议限制可能给开发者带来的各种问题。</p>
+
+<h2 id="详细的约束列表">详细的约束列表</h2>
+<p>开发者不能在接口定义的时候使用如下类型:</p>
+
+<ul>
+  <li>比较抽象的数据结构: java.lang.Object, net.sf.json.JsonObject等</li>
+  <li>接口或者抽象类
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="kd">public</span> <span class="kd">interface</span> <span class="nc">IPerson</span> <span class="o">{...}</span>
+ <span class="kd">public</span> <span class="kd">abstract</span> <span class="kd">class</span> <span class="nc">AbstractPerson</span>  <span class="o">{...}</span>
+</code></pre>
+    </div>
+  </li>
+  <li>泛型
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="kd">public</span> <span class="kd">class</span> <span class="nc">PersonHolder</span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;</span> <span class="o">{...}</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p>上述类型的集合类型或者没指定类型的集合,比如:<code class="highlighter-rouge">List&lt;IPerson&gt;, Map&lt;String, PersonHolder&lt;?&gt;&gt;, List, Map</code>等。 <code class="highlighter-rouge">List&lt;String&gt;, List&lt;Person&gt;</code>这些具体类型是支持的。</p>
+  </li>
+  <li>包含上述类型作为属性的类型
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code> <span class="kd">public</span> <span class="kd">class</span> <span class="nc">GroupOfPerson</span> <span class="o">{</span><span class="n">IPerson</span> <span class="n">master</span> <span class="o">...}</span>
+</code></pre>
+    </div>
+  </li>
+</ul>
+
+<p>开发者不用担心记不住这些约束,程序会在启动的时候检查不支持的类型,并给与错误提示。</p>
+
+<h2 id="协议上的差异">协议上的差异</h2>
+<p>尽管ServiceComb-Java-Chassis实现了不同协议之间开发方式的透明,受限于底层协议的限制,不同的协议存在少量差异。</p>
+
+<ul>
+  <li>
+    <p>map,key只支持string</p>
+  </li>
+  <li>highway (protobuf限制)
+    <ol>
+      <li>不支持在网络上传递null,包括Collection、array中的元素,map的value</li>
+      <li>长度为0的数组、list,不会在网络上传递,接收端解码出来就是默认值</li>
+    </ol>
+  </li>
+  <li>springmvc
+    <ol>
+      <li>不支持Date作为path、query参数。 因为springmvc直接将Date做toString放在path、query中,与swagger的标准不匹配。</li>
+    </ol>
+  </li>
+</ul>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/cn/service-interface-constraints.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/cn/service-interface-constraints.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/users/setup-environment/index.html
----------------------------------------------------------------------
diff --git a/content/cn/users/setup-environment/index.html b/content/cn/users/setup-environment/index.html
new file mode 100644
index 0000000..8d18382
--- /dev/null
+++ b/content/cn/users/setup-environment/index.html
@@ -0,0 +1,752 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>环境配置 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="环境配置">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="环境配置">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/setup-environment/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/setup-environment/">
+
+
+
+  <meta property="og:description" content="环境配置">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="环境配置">
+  <meta name="twitter:description" content="环境配置">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/users/setup-environment/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">用户手册</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/" class="">Java Chassis系统架构</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/setup-environment/" class="active">环境配置</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务提供者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-definition/" class="">服务定义</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-contract/" class="">服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-springmvc/" class="">用SpringMVC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-jax-rs/" class="">用JAX-RS开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-transparent-rpc/" class="">用透明RPC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-interface-constraints/" class="">服务接口约束</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-configurations/" class="">服务配置</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/communicate-protocol/" class="">通信协议</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/application-boot-process/" class="">程序启动逻辑</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-heartbeat/" class="">服务心跳</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务消费者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rest-template/" class="">使用Rest Template方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rpc/" class="">使用RPC方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-service-contract/" class="">使用服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/invoke-control/" class="">调用控制</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">通用开发</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/local-develop-test/" class="">本地开发与测试</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-servicecomb-in-spring-boot/" class="">在Spring Boot中使用ServiceComb</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/distributed-tracing/" class="">分布式调用链追踪</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/customized-tracing/" class="">自定义调用链打点</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">服务能力开放</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/nginx/" class="">使用confd和Nginx做边缘服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/zuul/" class="">使用Zuul做边缘服务</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">监控</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">部署</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/run-mode/" class="">运行模式</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">微服务安全</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-tls/" class="">使用TLS通信</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="环境配置">
+    <meta itemprop="description" content="环境配置">
+    
+    <meta itemprop="dateModified" content="September 03, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">环境配置
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> 在本页上</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#安装java开发环境" id="markdown-toc-安装java开发环境">安装Java开发环境</a></li>
+  <li><a href="#运行service-center" id="markdown-toc-运行service-center">运行<em>Service Center</em></a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="安装java开发环境">安装Java开发环境</h2>
+
+<ul>
+  <li>
+    <p>安装git,详情可参考<a href="https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git">git安装教程</a></p>
+  </li>
+  <li>
+    <p>安装JDK 1.8,详情可参考<a href="https://docs.oracle.com/javase/8/docs/technotes/guides/install/install_overview.html" target="_blank">JDK安装教程</a>。</p>
+  </li>
+  <li>
+    <p>安装Maven 3.x,详情可参考<a href="https://maven.apache.org/install.html" target="_blank">Maven安装教程</a>。</p>
+  </li>
+  <li>
+    <p>安装IntelliJ Idea IDE,详情可参考<a href="https://www.jetbrains.com/help/idea/installing-and-launching.html" target="_blank">IntelliJ安装教程</a>。</p>
+  </li>
+</ul>
+
+<h2 id="运行service-center">运行<em>Service Center</em></h2>
+<p>运行Service Center有以下两种方式:</p>
+
+<ol>
+  <li>
+    <p>以可执行文件的方式运行</p>
+
+    <ul class="nav nav-tabs">
+  <li data-toggle="tab" class="active"><a data-toggle="tab" href="#windows">Windows</a></li>
+  <li data-toggle="tab"><a data-toggle="tab" href="#linux">Linux</a></li>
+</ul>
+
+    <div class="tab-content">
+  <div id="windows" class="tab-pane active">
+        <ol>
+          <li>下载<a href="https://github.com/ServiceComb/service-center/releases/download/0.1.1/service-center-0.1.1-windows-amd64.zip">服务注册中心可执行文件压缩包</a></li>
+          <li>解压缩到当前文件夹</li>
+          <li>进入解压缩后的目录,然后双击运行<strong>start</strong>文件</li>
+        </ol>
+      </div>
+  <div id="linux" class="tab-pane fade">
+        <ol>
+          <li>下载服务注册中心可执行文件压缩包并解压缩
+            <div class="language-bash highlighter-rouge"><pre class="highlight"><code>wget https://github.com/ServiceComb/service-center/releases/download/0.1.1/service-center-0.1.1-linux-amd64.tar.gz
+tar xvf service-center-0.1.1-linux-amd64.tar.gz
+</code></pre>
+            </div>
+          </li>
+          <li>运行服务注册中心
+            <div class="language-bash highlighter-rouge"><pre class="highlight"><code>bash service-center-0.1.1-linux-amd64/start.sh
+</code></pre>
+            </div>
+          </li>
+        </ol>
+      </div>
+</div>
+
+    <p class="notice--warning">注意:Window和Linux版本均只支持64位系统。</p>
+  </li>
+  <li>
+    <p>以Docker的方式运行</p>
+  </li>
+</ol>
+
+<div class="language-bash highlighter-rouge"><pre class="highlight"><code>docker pull servicecomb/service-center
+docker run -d -p 30100:30100 servicecomb/service-center:latest
+</code></pre>
+</div>
+
+<p class="notice--warning"><strong>注意事项:</strong> 服务注册中心运行后绑定的IP为:<em>http://127.0.0.1:30100</em>。<br />
+如使用Docker Toolbox,可通过 <code class="highlighter-rouge">docker-machine ip</code> 获取服务绑定IP地址。</p>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/cn/setup-environment.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/cn/setup-environment.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/users/use-service-contract/index.html
----------------------------------------------------------------------
diff --git a/content/cn/users/use-service-contract/index.html b/content/cn/users/use-service-contract/index.html
new file mode 100644
index 0000000..9655bcb
--- /dev/null
+++ b/content/cn/users/use-service-contract/index.html
@@ -0,0 +1,742 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>使用服务契约 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="使用服务契约">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="使用服务契约">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/use-service-contract/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/users/use-service-contract/">
+
+
+
+  <meta property="og:description" content="使用服务契约">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="使用服务契约">
+  <meta name="twitter:description" content="使用服务契约">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/users/use-service-contract/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          <span class="nav__sub-title">用户手册</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/" class="">Java Chassis系统架构</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/setup-environment/" class="">环境配置</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务提供者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-definition/" class="">服务定义</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-contract/" class="">服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-springmvc/" class="">用SpringMVC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-jax-rs/" class="">用JAX-RS开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-transparent-rpc/" class="">用透明RPC开发微服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-interface-constraints/" class="">服务接口约束</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-configurations/" class="">服务配置</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/communicate-protocol/" class="">通信协议</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/application-boot-process/" class="">程序启动逻辑</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/service-heartbeat/" class="">服务心跳</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">开发服务消费者</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rest-template/" class="">使用Rest Template方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/develop-with-rpc/" class="">使用RPC方式开发</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-service-contract/" class="active">使用服务契约</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/invoke-control/" class="">调用控制</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">通用开发</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/local-develop-test/" class="">本地开发与测试</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-servicecomb-in-spring-boot/" class="">在Spring Boot中使用ServiceComb</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/distributed-tracing/" class="">分布式调用链追踪</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/customized-tracing/" class="">自定义调用链打点</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">服务能力开放</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/nginx/" class="">使用confd和Nginx做边缘服务</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/edging-service/zuul/" class="">使用Zuul做边缘服务</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/users/metrics/"><span class="nav__sub-title nav__sub-title-with-url">监控</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">部署</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/run-mode/" class="">运行模式</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          <span class="nav__sub-title">微服务安全</span>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/users/use-tls/" class="">使用TLS通信</a></li>
+          
+        </ul>
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="使用服务契约">
+    <meta itemprop="description" content="使用服务契约">
+    
+    <meta itemprop="dateModified" content="August 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">使用服务契约
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> 在本页上</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#场景描述" id="markdown-toc-场景描述">场景描述</a></li>
+  <li><a href="#配置说明" id="markdown-toc-配置说明">配置说明</a>    <ul>
+      <li><a href="#配置依赖服务" id="markdown-toc-配置依赖服务">配置依赖服务</a></li>
+      <li><a href="#手工配置服务契约" id="markdown-toc-手工配置服务契约">手工配置服务契约</a></li>
+      <li><a href="#从服务中心自动下载契约" id="markdown-toc-从服务中心自动下载契约">从服务中心自动下载契约</a></li>
+    </ul>
+  </li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="场景描述">场景描述</h2>
+
+<p>当服务消费者调用服务提供者的服务时,需要注册服务契约。消费者有两种方式获取提供者的服务契约,一种是从服务的提供方离线获取契约文件,手工配置到项目中;另一种是从服务中心自动下载契约。</p>
+
+<h2 id="配置说明">配置说明</h2>
+
+<blockquote>
+  <p>说明:服务契约的获取方式与服务消费者的开发方式是无关的,用户可以任意组合使用。</p>
+</blockquote>
+
+<h3 id="配置依赖服务">配置依赖服务</h3>
+
+<p>服务消费者需要在microservice.yaml文件中配置依赖的provider,示例配置如下:</p>
+
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">cse</span><span class="pi">:</span>
+  <span class="c1"># other configurations omitted</span>
+  <span class="s">references</span><span class="pi">:</span>
+    <span class="s">springmvc</span><span class="pi">:</span>
+      <span class="s">version-rule</span><span class="pi">:</span> <span class="s">0.0.1</span>
+</code></pre>
+</div>
+
+<blockquote>
+  <p>version-rule是版本匹配规则,有四种格式:</p>
+
+  <ul>
+    <li>精确版本匹配:例如<code class="highlighter-rouge">version-rule: 0.0.1</code>,表示只匹配版本号为0.0.1的服务提供者</li>
+    <li>后续版本匹配:例如<code class="highlighter-rouge">version-rule: 1.0.0+</code>,表示匹配版本号大于或等于1.0.0的服务提供者</li>
+    <li>最新版本:<code class="highlighter-rouge">version-rule: latest</code>,表示匹配最新版本的服务提供者</li>
+    <li>版本范围:例如<code class="highlighter-rouge">1.0.0-2.0.2</code>,表示匹配版本号在1.0.0至2.0.2之间的服务提供者,包含1.0.0和2.0.2</li>
+  </ul>
+
+  <p>此配置项默认为<code class="highlighter-rouge">latest</code></p>
+</blockquote>
+
+<h3 id="手工配置服务契约">手工配置服务契约</h3>
+
+<p>服务消费者的开发者在线下拿到服务提供者的契约,配置到消费者工程的特定目录下。服务契约在项目中的存放目录与<a href="/cn/users/service-contract/">服务契约</a>的配置说明部分相同。</p>
+
+<p>microservice目录下的每一个目录代表一个微服务,微服务目录下的每一个yaml文件代表一个schema契约,文件名就是schemaId。applications目录下存放需要指明appId的服务契约,用于跨app调用等场景。目录结构如下所示:</p>
+<pre><code class="language-txt">resources
+  - microservices
+      - serviceName            # 微服务名
+          - schemaId.yaml      # schema接口的契约
+  - applications
+      - appId                  # 应用ID
+          - serviceName        # 微服务名
+              - schemaId.yaml  # schema接口的契约
+</code></pre>
+
+<h3 id="从服务中心自动下载契约">从服务中心自动下载契约</h3>
+
+<p>服务消费者也可以不用显式地将契约存放在项目目录中,当程序启动时,ServiceComb框架会自动根据microservice.yaml文件中配置的服务提供者的微服务名称和版本号,从服务中心自动下载契约信息。</p>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _users/cn/use-service-contract.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_users/cn/use-service-contract.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>


[34/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/docs/quick-start/index.html
----------------------------------------------------------------------
diff --git a/content/cn/docs/quick-start/index.html b/content/cn/docs/quick-start/index.html
new file mode 100644
index 0000000..11e0d3f
--- /dev/null
+++ b/content/cn/docs/quick-start/index.html
@@ -0,0 +1,559 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>快速入门 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="介绍如何使用Java Chassis框架快速运行微服务应用">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="快速入门">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/quick-start/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/quick-start/">
+
+
+
+  <meta property="og:description" content="介绍如何使用Java Chassis框架快速运行微服务应用">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="快速入门">
+  <meta name="twitter:description" content="介绍如何使用Java Chassis框架快速运行微服务应用">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/docs/quick-start/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/docs/quick-start/"><span class="nav__sub-title nav__sub-title-with-url">快速入门</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/docs/quick-start-bmi/"><span class="nav__sub-title nav__sub-title-with-url">微服务应用快速开发</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/docs/quick-start-advance/"><span class="nav__sub-title nav__sub-title-with-url">微服务开发进阶</span></a>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/docs/quick-start-advance/load-balance/" class="">负载均衡</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/docs/quick-start-advance/flow-control/" class="">流量控制</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/docs/quick-start-advance/service-management/" class="">服务治理</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/docs/quick-start-advance/distributed-tracing/" class="">分布式调用链追踪</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/docs/quick-start-dataconsistency/"><span class="nav__sub-title nav__sub-title-with-url">数据一致性解决方案</span></a>
+        
+
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="快速入门">
+    <meta itemprop="description" content="介绍如何使用Java Chassis框架快速运行微服务应用">
+    
+    <meta itemprop="dateModified" content="September 03, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">快速入门
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> 在本页上</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#安装-java-开发环境" id="markdown-toc-安装-java-开发环境">安装 Java 开发环境</a></li>
+  <li><a href="#运行-service-center" id="markdown-toc-运行-service-center">运行 Service Center</a></li>
+  <li><a href="#创建第一个微服务" id="markdown-toc-创建第一个微服务">创建第一个微服务</a></li>
+  <li><a href="#运行微服务应用" id="markdown-toc-运行微服务应用">运行微服务应用</a></li>
+  <li><a href="#下一步" id="markdown-toc-下一步">下一步</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="安装-java-开发环境">安装 Java 开发环境</h2>
+
+<ul>
+  <li>
+    <p>安装<strong>git</strong>,详情可参考<a href="https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git" target="_blank">git安装教程</a>。</p>
+  </li>
+  <li>
+    <p>安装JDK 1.8,详情可参考<a href="https://docs.oracle.com/javase/8/docs/technotes/guides/install/install_overview.html" target="_blank">JDK安装教程</a>。</p>
+  </li>
+  <li>
+    <p>安装Maven 3.x,详情可参考<a href="https://maven.apache.org/install.html" target="_blank">Maven安装教程</a>。</p>
+  </li>
+  <li>
+    <p>安装 ServiceComb Java Chassis(SDK),执行以下指令:</p>
+
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code> git clone https://github.com/ServiceComb/ServiceComb-Java-Chassis.git
+ <span class="nb">cd </span>ServiceComb-Java-Chassis
+ mvn clean install -DskipTests
+</code></pre>
+    </div>
+  </li>
+</ul>
+
+<h2 id="运行-service-center">运行 Service Center</h2>
+<p>在 <strong>ServiceComb</strong> 微服务框架中,<strong>Service Center</strong> 提供服务注册及服务发现功能,可直接使用 Docker 运行。</p>
+<div class="language-bash highlighter-rouge"><pre class="highlight"><code>docker pull servicecomb/service-center
+docker run -d -p 30100:30100 servicecomb/service-center:latest
+</code></pre>
+</div>
+<p><em>您可以通过阅读<a href="/cn/users/setup-environment/#运行service-center">环境配置</a>获取在本地以二进制方式运行Service Center的方法。</em></p>
+
+<h2 id="创建第一个微服务">创建第一个微服务</h2>
+<p>本指南将以一个简单的 <strong>体质指数(BMI)</strong> 应用开展微服务之旅。<a href="https://baike.baidu.com/item/BMI%E6%8C%87%E6%95%B0" target="_blank">体质指数</a>主要用于衡量人体胖瘦程度。该应用主要包含两个微服务:</p>
+
+<ul>
+  <li>
+    <p><strong>体质指数计算器</strong>:负责处理运算事务。</p>
+  </li>
+  <li>
+    <p><strong>体质指数界面</strong>:提供用户界面及网关服务。</p>
+  </li>
+</ul>
+
+<p>其运行流程为:<br />
+<img src="/assets/images/quick-start-sample-workflow.png" alt="体质指数应用运行流程" class="align-center" /></p>
+
+<p>其中,虚线表示服务注册及服务发现的过程。</p>
+
+<h2 id="运行微服务应用">运行微服务应用</h2>
+
+<ol>
+  <li>
+    <p>进入 <strong>体质指数</strong> 应用代码目录。</p>
+
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code><span class="nb">cd </span>samples/bmi
+</code></pre>
+    </div>
+    <p><strong>注意</strong>:在windows开发环境下,docker是在虚拟机中启动,因此需要修改微服务的 <strong>Service Center</strong> IP地址为虚拟机IP地址。修改2个配置文件[calculator|webapp]/src/main/resources/microservice.yaml,将其中<a>http://127.0.0.1:30100</a>修改为<a>http://192.168.99.100:30100</a>,其中192.168.99.100是虚拟机IP,需要与开发环境中的虚拟机IP保持一致。</p>
+  </li>
+  <li>
+    <p>启动 <strong>体质指数计算器</strong> 和 <strong>体质指数界面</strong> 微服务,分别执行以下指令:</p>
+
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code><span class="nb">cd </span>calculator; mvn spring-boot:run
+<span class="nb">cd </span>webapp; mvn spring-boot:run
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p>验证服务。微服务启动完毕后,即可通过 <a>http://localhost:8889</a> 访问 <strong>体质指数</strong> 应用,届时将能看到如下界面,并可输入您的身高和体重信息验证服务是否正常运行。</p>
+
+    <p><img src="/assets/images/bmi-interface.png" alt="体质指数应用运行界面" class="align-center" /></p>
+  </li>
+</ol>
+
+<h2 id="下一步">下一步</h2>
+
+<ul>
+  <li>阅读<a href="/cn/docs/quick-start-bmi/"><strong>体质指数</strong>微服务应用快速开发</a>。</li>
+</ul>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _docs/cn/quick-start.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_docs/cn/quick-start.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/docs/seckill-development-journey-part-I/index.html
----------------------------------------------------------------------
diff --git a/content/cn/docs/seckill-development-journey-part-I/index.html b/content/cn/docs/seckill-development-journey-part-I/index.html
new file mode 100644
index 0000000..4a260ea
--- /dev/null
+++ b/content/cn/docs/seckill-development-journey-part-I/index.html
@@ -0,0 +1,820 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>秒杀开发历程(一) - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="介绍如何一步一步构建秒杀项目的过程">
+
+
+
+
+<meta name="author" content="Yangyong Zheng">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="秒杀开发历程(一)">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/seckill-development-journey-part-I/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/seckill-development-journey-part-I/">
+
+
+
+  <meta property="og:description" content="介绍如何一步一步构建秒杀项目的过程">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="秒杀开发历程(一)">
+  <meta name="twitter:description" content="介绍如何一步一步构建秒杀项目的过程">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+    <meta name="twitter:creator" content="@">
+  
+
+
+
+  
+
+  
+
+
+
+
+
+  <meta property="og:type" content="article">
+  <meta property="article:published_time" content="2017-08-26T00:00:00+08:00">
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/docs/seckill-development-journey-part-I/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+
+<div itemscope itemtype="http://schema.org/Person">
+
+  
+
+  <div class="author__content">
+    <h3 class="author__name" itemprop="name">Yangyong Zheng</h3>
+    
+      <p class="author__bio" itemprop="description">
+	    
+	      
+	        Fast Action, do not ask
+	      
+	    
+      </p>
+    
+  </div>
+
+  <div class="author__urls-wrapper">
+    <button class="btn btn--inverse">关注</button>
+    <ul class="author__urls social-icons">
+      
+
+      
+        <li>
+          <a href="https://zhengyangyong.github.io" itemprop="url">
+            <i class="fa fa-fw fa-chain" aria-hidden="true"></i> 网站
+          </a>
+        </li>
+      
+
+      
+        <li>
+          <a href="mailto:yangyong.zheng@huawei.com">
+            <meta itemprop="email" content="yangyong.zheng@huawei.com" />
+            <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> 电子邮箱
+          </a>
+        </li>
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      <!--
+  <li>
+    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs">
+      <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link
+    </a>
+  </li>
+-->
+    </ul>
+  </div>
+</div>
+
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="秒杀开发历程(一)">
+    <meta itemprop="description" content="介绍如何一步一步构建秒杀项目的过程">
+    <meta itemprop="datePublished" content="August 26, 2017">
+    <meta itemprop="dateModified" content="September 13, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">秒杀开发历程(一)
+</h1>
+            
+              <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <h2 id="概述">概述</h2>
+<p>  秒杀是我们ServiceComb开源团队以领域驱动设计(<a href="https://en.wikipedia.org/wiki/Domain-driven_design">DDD</a>)为背景,如何从零开始构建一个微服务架构的示例项目。在这个过程中,您可以学习到微服务架构区别于传统单体程序架构的诸多特点,同时我们还将使用敏捷开发的模式快速构建它。</p>
+
+<h2 id="背景">背景</h2>
+<p>  秒杀的需求起源于互联网常见的促销方式——支付订单的时候,我们可以支持使用优惠券获得一些折扣,由于优惠券的数量是非常有限的,所以我们必须提供一个平台,让每一位希望得到它的人公平竞争,这样的场景我相信在平日的生活中随处可见。</p>
+
+<p>  由于秒杀是一个示例项目,所以我们不希望它太复杂,真实的秒杀活动需要考虑的细节要远远超过我们的想象;我们也不希望它太过于具体在特定的形式,例如优惠券、满减、抢购码,等等,这样总会让部分读者难以理解;最后,我们使用了先到先得这种最原始的策略,如果您想尝试其他策略,可以下载代码自行修改,我相信也不会太困难。</p>
+
+<h2 id="初次设计">初次设计</h2>
+<p>  首先我们分析客户核心业务述求:</p>
+
+<ol>
+  <li>客户可以请求秒杀一张优惠券,系统返回获取优惠券成功或失败(已经被秒光了);</li>
+  <li>客户可以查询自己目前有多少张优惠券;</li>
+</ol>
+
+<p>  那么我们开始吧,等等,您说这个描述也太简单了?客户还没有登录系统呢,秒杀活动又是怎么来的,怎么开始的?客户是请求哪个活动的优惠券呀?折扣是不是不一样?还有……</p>
+
+<p>  确实,我们习惯于在一开始就思考很多,一些较大的系统,可能设计阶段就要几个月,但是这次可以不用考虑太多,因为我认为:</p>
+<ol>
+  <li>设计太多并不能保证构建完毕后就一定能完全符合需求,唯一不变的就是需求总是变化,所以不要过度设计;</li>
+  <li>微服务架构的原则是组件(服务)提供较为单一的功能,所以每个组件所需要实现的功能范围比较小,不必先将所有的功能都设计出来;</li>
+  <li>应该尽快切入主题,也就是立刻去解决核心域的问题。</li>
+</ol>
+
+<p>  现在,我们需要使用正确的“姿势”完成设计过程——遵循领域驱动设计(<a href="https://en.wikipedia.org/wiki/Domain-driven_design">DDD</a>)的诸多原则,设计过程的核心就是识别出实体、值对象和服务等元素,进一步寻找聚合;由于我们的需求非常简单,所以很容易就能将它们找出来:</p>
+<ul>
+  <li>实体:促销秒杀(Promotion)</li>
+  <li>值对象:优惠券(Coupon),促销秒杀事件(PromotionEvent)</li>
+  <li>领域服务:秒杀活动(SecKill)</li>
+</ul>
+
+<p>  之后我们分析他们之间的聚合,分出两个微服务,为了能快速达到目的,它们之间直接使用MySQL共享数据(微服务推荐使用独立的存储,我们未来去改造):</p>
+<ol>
+  <li>Command:SecKill领域服务;</li>
+  <li>Query: Coupon值对象查询</li>
+</ol>
+
+<p><img src="/assets/images/seckill-develop-course-part-I-arth.png" alt="图1 初次架构" class="align-center" /></p>
+
+<h2 id="功能实现">功能实现</h2>
+<p>  秒杀的代码托管在<a href="https://github.com/ServiceComb/seckill">Github</a>,欢迎Watch和Star。</p>
+
+<h3 id="command微服务的实现">Command微服务的实现</h3>
+<p>  我们设计了SecKillCommandService和SecKillPersistentRunner两个类分别完成秒杀处理和结果持久化,考虑到持久化速度慢,我们使用BlockQueue做缓存;另外设计了SecKillCommandRestController作为客户请求的Endpoint;ServiceComb支持多种编程模型和通信模型,我们使用目前较较为流行的Spring Boot Rest作为基础框架,如果您的程序也使用了它,那么只需要稍加调整即可无缝上云。</p>
+
+<p><img src="/assets/images/seckill-develop-course-part-I-command.png" alt="图2 Command微服务组件" class="align-center" /></p>
+
+<h2 id="query微服务的实现">Query微服务的实现</h2>
+<p>  查询逻辑较简单,因为PromotionEvent是值对象,我们使用了PromotionEvent推导Coupon,各位看官读读代码就明白了。</p>
+
+<h2 id="构建支撑域">构建支撑域</h2>
+<p>  Promotion是实体,诚然,就像一开始提到的,我们需要在另外一个领域去管理(构建)它才能开始后面的秒杀活动,由于我们直接切入核心域展开工作,支撑域和普通域部分目前我们通过Spring注入固定对象来完成,例如:</p>
+
+<p><img src="/assets/images/seckill-develop-course-part-I-spring.png" alt="图3 支撑域注入" class="align-center" /></p>
+
+<h2 id="功能验证">功能验证</h2>
+<p>  最后,我们使用PostMan体验完成的功能,请注意Body的填写使用JSON格式,并且类型选择JSON(application/json):</p>
+<h3 id="请求秒杀">请求秒杀</h3>
+
+<p><img src="/assets/images/seckill-develop-course-part-I-request-seckill.png" alt="图4 请求秒杀" class="align-center" /></p>
+
+<h3 id="查询拥有的优惠券">查询拥有的优惠券</h3>
+
+<p><img src="/assets/images/seckill-develop-course-part-I-query-coupons.png" alt="图5 查询拥有的优惠券" class="align-center" /></p>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+  
+
+
+  
+  
+  
+
+  <p class="page__taxonomy">
+    <strong><i class="fa fa-fw fa-tags" aria-hidden="true"></i> 标签: </strong>
+    <span itemprop="keywords">
+    
+      
+      
+      <a href="/tags/#%E7%A7%92%E6%9D%80" class="page__taxonomy-item" rel="tag">秒杀</a>
+    
+    </span>
+  </p>
+
+
+
+
+
+        
+          
+            
+              <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> 最新的:</strong> <time datetime="2017-09-13">2017年9月13日</time></p>
+            
+          
+        
+      </footer>
+
+      <section class="page__share">
+  
+    <h4 class="page__share-title">分享</h4>
+  
+
+  <a href="https://twitter.com/intent/tweet?via=ServiceComb&text=秒杀开发历程(一) /cn/docs/seckill-development-journey-part-I/" class="btn btn--twitter" title="分享 Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
+
+  <a href="https://www.facebook.com/sharer/sharer.php?u=/cn/docs/seckill-development-journey-part-I/" class="btn btn--facebook" title="分享 Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
+
+  <a href="https://plus.google.com/share?url=/cn/docs/seckill-development-journey-part-I/" class="btn btn--google-plus" title="分享 Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
+
+  <a href="https://www.linkedin.com/shareArticle?mini=true&url=/cn/docs/seckill-development-journey-part-I/" class="btn btn--linkedin" title="分享 LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
+</section>
+
+
+      
+  <nav class="pagination">
+    
+      <a href="/docs/seckill-development-journey-part-I/" class="pagination--pager" title="SecKill Development Journey (I)
+">向前</a>
+    
+    
+      <a href="/docs/seckill-development-journey-part-II/" class="pagination--pager" title="SecKill Develop Journey  (II)
+">向后</a>
+    
+  </nav>
+
+
+    </div>
+
+    
+      <div class="page__comments">
+  
+  
+    <section id="static-comments">
+      
+        <!-- Start static comments -->
+        <div class="js-comments">
+          
+        </div>
+        <!-- End static comments -->
+
+        <!-- Start new comment form -->
+        <h4 class="page__comments-title">留下评论</h4>
+        <p class="small">您的电子邮箱地址并不会被展示。请填写标记为必须的字段。 <span class="required">*</span></p>
+        <form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/ServiceComb/servicesomb.github.io/master">
+          <div class="form__spinner">
+            <i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
+            <span class="sr-only">正在加载...</span>
+          </div>
+
+          <fieldset>
+            <label for="comment-form-message">评论 <small class="required">*</small></label>
+            <textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
+            <div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">Markdown语法已支持。</a></div>
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-name">姓名 <small class="required">*</small></label>
+            <input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-email">电子邮箱 <small class="required">*</small></label>
+            <input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-url">网站(可选)</label>
+            <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
+          </fieldset>
+          <fieldset class="hidden" style="display: none;">
+            <input type="hidden" name="options[slug]" value="seckill-develop-course-part-I">
+            <label for="comment-form-location">Not used. Leave blank if you are a human.</label>
+            <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
+          </fieldset>
+          <!-- Start comment form alert messaging -->
+          <p class="hidden js-notice">
+            <strong class="js-notice-text"></strong>
+          </p>
+          <!-- End comment form alert messaging -->
+          <fieldset>
+            <button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--large">提交评论</button>
+          </fieldset>
+        </form>
+        <!-- End new comment form -->
+      
+    </section>
+  
+</div>
+
+    
+  </article>
+
+  
+  
+    <div class="page__related">
+      <h4 class="page__related-title">猜您还喜欢</h4>
+      <div class="grid__wrapper">
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/jira_beginner_guide/" rel="permalink">老司机带你刷任务 - ServiceComb JIRA入门指南
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">ServiceComb JIRA入门指南
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/how-to-reform-a-legacy-system/" rel="permalink">最头疼的遗留系统该如何改造?
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+      </div>
+    </div>
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _posts/cn/2017-08-26-seckill-develop-course-part-I.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_posts/cn/2017-08-26-seckill-develop-course-part-I.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  
+  <script>
+    (function ($) {
+    var $comments = $('.js-comments');
+
+    $('#new_comment').submit(function () {
+      var form = this;
+
+      $(form).addClass('disabled');
+      $('#comment-form-submit').html('<i class="fa fa-spinner fa-spin fa-fw"></i> 正在加载...');
+
+      $.ajax({
+        type: $(this).attr('method'),
+        url: $(this).attr('action'),
+        data: $(this).serialize(),
+        contentType: 'application/x-www-form-urlencoded',
+        success: function (data) {
+          $('#comment-form-submit').html('已提交');
+          $('.page__comments-form .js-notice').removeClass('notice--danger');
+          $('.page__comments-form .js-notice').addClass('notice--success');
+          showAlert('感谢您的评论!被批准后它会立即在此站点展示。');
+        },
+        error: function (err) {
+          console.log(err);
+          $('#comment-form-submit').html('提交评论');
+          $('.page__comments-form .js-notice').removeClass('notice--success');
+          $('.page__comments-form .js-notice').addClass('notice--danger');
+          showAlert('很抱歉,您的提交存在错误。请确保所有必填字段都已填写正确,然后再试一次。');
+          $(form).removeClass('disabled');
+        }
+      });
+
+      return false;
+    });
+
+    function showAlert(message) {
+      $('.page__comments-form .js-notice').removeClass('hidden');
+      $('.page__comments-form .js-notice-text').html(message);
+    }
+  })(jQuery);
+  </script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/docs/seckill-development-journey-part-II/index.html
----------------------------------------------------------------------
diff --git a/content/cn/docs/seckill-development-journey-part-II/index.html b/content/cn/docs/seckill-development-journey-part-II/index.html
new file mode 100644
index 0000000..dd69c88
--- /dev/null
+++ b/content/cn/docs/seckill-development-journey-part-II/index.html
@@ -0,0 +1,809 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>秒杀开发历程(二) - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="介绍如何一步一步构建秒杀项目的过程">
+
+
+
+
+<meta name="author" content="Yangyong Zheng">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="秒杀开发历程(二)">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/seckill-development-journey-part-II/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/seckill-development-journey-part-II/">
+
+
+
+  <meta property="og:description" content="介绍如何一步一步构建秒杀项目的过程">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="秒杀开发历程(二)">
+  <meta name="twitter:description" content="介绍如何一步一步构建秒杀项目的过程">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+    <meta name="twitter:creator" content="@">
+  
+
+
+
+  
+
+  
+
+
+
+
+
+  <meta property="og:type" content="article">
+  <meta property="article:published_time" content="2017-08-30T00:00:00+08:00">
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/docs/seckill-development-journey-part-II/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+
+<div itemscope itemtype="http://schema.org/Person">
+
+  
+
+  <div class="author__content">
+    <h3 class="author__name" itemprop="name">Yangyong Zheng</h3>
+    
+      <p class="author__bio" itemprop="description">
+	    
+	      
+	        Fast Action, do not ask
+	      
+	    
+      </p>
+    
+  </div>
+
+  <div class="author__urls-wrapper">
+    <button class="btn btn--inverse">关注</button>
+    <ul class="author__urls social-icons">
+      
+
+      
+        <li>
+          <a href="https://zhengyangyong.github.io" itemprop="url">
+            <i class="fa fa-fw fa-chain" aria-hidden="true"></i> 网站
+          </a>
+        </li>
+      
+
+      
+        <li>
+          <a href="mailto:yangyong.zheng@huawei.com">
+            <meta itemprop="email" content="yangyong.zheng@huawei.com" />
+            <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> 电子邮箱
+          </a>
+        </li>
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      <!--
+  <li>
+    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs">
+      <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link
+    </a>
+  </li>
+-->
+    </ul>
+  </div>
+</div>
+
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="秒杀开发历程(二)">
+    <meta itemprop="description" content="介绍如何一步一步构建秒杀项目的过程">
+    <meta itemprop="datePublished" content="August 30, 2017">
+    <meta itemprop="dateModified" content="September 13, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">秒杀开发历程(二)
+</h1>
+            
+              <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <p>  <a href="/cn/docs/seckill-development-journey-part-I/">上文</a> 中我们构建了一个仅具有核心功能的秒杀框架,本篇中我们会逐步完善一些功能,使得它具备完整的基础功能。</p>
+
+<h2 id="问题点完善范围">问题点(完善范围)</h2>
+<p>  回顾设计和参照已完成的部分,我们可以发现:</p>
+<ol>
+  <li>没有提供Promotion实体的服务(Promotion是固定通过Spring注入的);</li>
+  <li>缺乏一些基本的业务检查和功能,包括:
+    <ul>
+      <li>同一个客户在同一个Promotion中只能秒杀一次(不允许重复)</li>
+      <li>同时可以有多个Promotion进行(折扣不同,数量也不同)</li>
+    </ul>
+  </li>
+  <li>如果Command微服务故障,再次恢复后,需要恢复未完成正在进行中的秒杀活动。</li>
+</ol>
+
+<p>  也许您会说,客户管理和客户登录为什么没有罗列出来?的确,客户在我们的场景中是不可或缺的,但是我们为了简化设计,没有包含登录以及请求认证的内容,如果对这方面感兴趣您可以移步到ServiceComb的Company示例实现了一个简单基于token的认证方式,地址在<a href="https://github.com/ServiceComb/ServiceComb-Company-WorkShop">Company</a>。</p>
+
+<h2 id="再次设计">再次设计</h2>
+<p>  对于实体,领域驱动设计(<a href="https://en.wikipedia.org/wiki/Domain-driven_design">DDD</a>)推荐使用独立接口,因此我们设计一个新的Admin微服务来提供服务:</p>
+
+<p><img src="/assets/images/seckill-develop-course-part-II-arth.png" alt="图1 增加了Admin微服务后的架构" class="align-center" /></p>
+
+<h2 id="功能实现">功能实现</h2>
+<h3 id="admin微服务的实现">Admin微服务的实现</h3>
+<p>  Admin微服务紧紧围绕Promotion实体提供服务,我们完全可以映射到对应的REST方式,即:</p>
+<ul>
+  <li>新增Promotion对应Post;  </li>
+  <li>修改Promotion对应Put;  </li>
+  <li>查询Promotion对应Get;  </li>
+  <li>删除Promotion对应Delete。  </li>
+</ul>
+
+<p>  满足当前的需求只需要完成Post和Put就可以了,另外,考虑到已经开始的秒杀活动不应该能修改,我们增加了对应的检查逻辑。</p>
+
+<h3 id="检查和功能的实现">检查和功能的实现</h3>
+<p>  通过增加一个HashSet检查客户是否重复秒杀成功;<br />
+  构建SecKillPromotionBootstrap作为Promotion启动的管理器用于支持多个Promotion同时进行,将SecKillCommandService和SecKillPersistentRunner使用集合管理。</p>
+
+<h3 id="command微服务故障恢复的实现">Command微服务故障恢复的实现</h3>
+<p>  构建SecKillRecoveryService处理Promotion恢复检查,未完成的Promotion无论是未开始的还是进行中的,都需要它完成检查返回正确的恢复信息,信息包括剩余券数、已秒杀成功的客户列表等。</p>
+
+<h2 id="功能验证">功能验证</h2>
+<p>  最后,我们使用PostMan体验完成的功能,请注意Body的填写使用JSON格式,并且类型选择JSON(application/json):</p>
+<h3 id="创建秒杀活动">创建秒杀活动</h3>
+
+<p><img src="/assets/images/seckill-develop-course-part-II-create-promotion.png" alt="图2 创建秒杀活动" class="align-center" /></p>
+
+<h3 id="查询正在进行的秒杀活动">查询正在进行的秒杀活动</h3>
+
+<p><img src="/assets/images/seckill-develop-course-part-II-query-active-promotion.png" alt="图3 查询正在进行的秒杀活动" class="align-center" /></p>
+
+<h3 id="拒绝重复秒杀">拒绝重复秒杀</h3>
+
+<p><img src="/assets/images/seckill-develop-course-part-II-reject-duplicate-grab.png" alt="图4 拒绝重复秒杀" class="align-center" /></p>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+  
+
+
+  
+  
+  
+
+  <p class="page__taxonomy">
+    <strong><i class="fa fa-fw fa-tags" aria-hidden="true"></i> 标签: </strong>
+    <span itemprop="keywords">
+    
+      
+      
+      <a href="/tags/#%E7%A7%92%E6%9D%80" class="page__taxonomy-item" rel="tag">秒杀</a>
+    
+    </span>
+  </p>
+
+
+
+
+
+        
+          
+            
+              <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> 最新的:</strong> <time datetime="2017-09-13">2017年9月13日</time></p>
+            
+          
+        
+      </footer>
+
+      <section class="page__share">
+  
+    <h4 class="page__share-title">分享</h4>
+  
+
+  <a href="https://twitter.com/intent/tweet?via=ServiceComb&text=秒杀开发历程(二) /cn/docs/seckill-development-journey-part-II/" class="btn btn--twitter" title="分享 Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
+
+  <a href="https://www.facebook.com/sharer/sharer.php?u=/cn/docs/seckill-development-journey-part-II/" class="btn btn--facebook" title="分享 Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
+
+  <a href="https://plus.google.com/share?url=/cn/docs/seckill-development-journey-part-II/" class="btn btn--google-plus" title="分享 Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
+
+  <a href="https://www.linkedin.com/shareArticle?mini=true&url=/cn/docs/seckill-development-journey-part-II/" class="btn btn--linkedin" title="分享 LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
+</section>
+
+
+      
+  <nav class="pagination">
+    
+      <a href="/docs/seckill-development-journey-part-II/" class="pagination--pager" title="SecKill Develop Journey  (II)
+">向前</a>
+    
+    
+      <a href="/docs/seckill-development-journey-part-III/" class="pagination--pager" title="SecKill Develop Journey (III)
+">向后</a>
+    
+  </nav>
+
+
+    </div>
+
+    
+      <div class="page__comments">
+  
+  
+    <section id="static-comments">
+      
+        <!-- Start static comments -->
+        <div class="js-comments">
+          
+        </div>
+        <!-- End static comments -->
+
+        <!-- Start new comment form -->
+        <h4 class="page__comments-title">留下评论</h4>
+        <p class="small">您的电子邮箱地址并不会被展示。请填写标记为必须的字段。 <span class="required">*</span></p>
+        <form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/ServiceComb/servicesomb.github.io/master">
+          <div class="form__spinner">
+            <i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
+            <span class="sr-only">正在加载...</span>
+          </div>
+
+          <fieldset>
+            <label for="comment-form-message">评论 <small class="required">*</small></label>
+            <textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
+            <div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">Markdown语法已支持。</a></div>
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-name">姓名 <small class="required">*</small></label>
+            <input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-email">电子邮箱 <small class="required">*</small></label>
+            <input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-url">网站(可选)</label>
+            <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
+          </fieldset>
+          <fieldset class="hidden" style="display: none;">
+            <input type="hidden" name="options[slug]" value="seckill-develop-course-part-II">
+            <label for="comment-form-location">Not used. Leave blank if you are a human.</label>
+            <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
+          </fieldset>
+          <!-- Start comment form alert messaging -->
+          <p class="hidden js-notice">
+            <strong class="js-notice-text"></strong>
+          </p>
+          <!-- End comment form alert messaging -->
+          <fieldset>
+            <button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--large">提交评论</button>
+          </fieldset>
+        </form>
+        <!-- End new comment form -->
+      
+    </section>
+  
+</div>
+
+    
+  </article>
+
+  
+  
+    <div class="page__related">
+      <h4 class="page__related-title">猜您还喜欢</h4>
+      <div class="grid__wrapper">
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/jira_beginner_guide/" rel="permalink">老司机带你刷任务 - ServiceComb JIRA入门指南
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">ServiceComb JIRA入门指南
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/how-to-reform-a-legacy-system/" rel="permalink">最头疼的遗留系统该如何改造?
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+      </div>
+    </div>
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _posts/cn/2017-08-30-seckill-develop-course-part-II.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_posts/cn/2017-08-30-seckill-develop-course-part-II.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  
+  <script>
+    (function ($) {
+    var $comments = $('.js-comments');
+
+    $('#new_comment').submit(function () {
+      var form = this;
+
+      $(form).addClass('disabled');
+      $('#comment-form-submit').html('<i class="fa fa-spinner fa-spin fa-fw"></i> 正在加载...');
+
+      $.ajax({
+        type: $(this).attr('method'),
+        url: $(this).attr('action'),
+        data: $(this).serialize(),
+        contentType: 'application/x-www-form-urlencoded',
+        success: function (data) {
+          $('#comment-form-submit').html('已提交');
+          $('.page__comments-form .js-notice').removeClass('notice--danger');
+          $('.page__comments-form .js-notice').addClass('notice--success');
+          showAlert('感谢您的评论!被批准后它会立即在此站点展示。');
+        },
+        error: function (err) {
+          console.log(err);
+          $('#comment-form-submit').html('提交评论');
+          $('.page__comments-form .js-notice').removeClass('notice--success');
+          $('.page__comments-form .js-notice').addClass('notice--danger');
+          showAlert('很抱歉,您的提交存在错误。请确保所有必填字段都已填写正确,然后再试一次。');
+          $(form).removeClass('disabled');
+        }
+      });
+
+      return false;
+    });
+
+    function showAlert(message) {
+      $('.page__comments-form .js-notice').removeClass('hidden');
+      $('.page__comments-form .js-notice-text').html(message);
+    }
+  })(jQuery);
+  </script>
+
+
+
+
+
+
+
+  </body>
+</html>


[47/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/fonts/fontawesome-webfont.woff
----------------------------------------------------------------------
diff --git a/content/assets/fonts/fontawesome-webfont.woff b/content/assets/fonts/fontawesome-webfont.woff
new file mode 100644
index 0000000..400014a
Binary files /dev/null and b/content/assets/fonts/fontawesome-webfont.woff differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/fonts/fontawesome-webfont.woff2
----------------------------------------------------------------------
diff --git a/content/assets/fonts/fontawesome-webfont.woff2 b/content/assets/fonts/fontawesome-webfont.woff2
new file mode 100644
index 0000000..4d13fc6
Binary files /dev/null and b/content/assets/fonts/fontawesome-webfont.woff2 differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/ConsumerList.PNG
----------------------------------------------------------------------
diff --git a/content/assets/images/ConsumerList.PNG b/content/assets/images/ConsumerList.PNG
new file mode 100644
index 0000000..4da2c2d
Binary files /dev/null and b/content/assets/images/ConsumerList.PNG differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/Dashboard.PNG
----------------------------------------------------------------------
diff --git a/content/assets/images/Dashboard.PNG b/content/assets/images/Dashboard.PNG
new file mode 100644
index 0000000..c365aa2
Binary files /dev/null and b/content/assets/images/Dashboard.PNG differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/InstanceList.PNG
----------------------------------------------------------------------
diff --git a/content/assets/images/InstanceList.PNG b/content/assets/images/InstanceList.PNG
new file mode 100644
index 0000000..87f2a58
Binary files /dev/null and b/content/assets/images/InstanceList.PNG differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/ProviderList.PNG
----------------------------------------------------------------------
diff --git a/content/assets/images/ProviderList.PNG b/content/assets/images/ProviderList.PNG
new file mode 100644
index 0000000..c286971
Binary files /dev/null and b/content/assets/images/ProviderList.PNG differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/Rss.png
----------------------------------------------------------------------
diff --git a/content/assets/images/Rss.png b/content/assets/images/Rss.png
new file mode 100644
index 0000000..4b16d61
Binary files /dev/null and b/content/assets/images/Rss.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/SchemaList.PNG
----------------------------------------------------------------------
diff --git a/content/assets/images/SchemaList.PNG b/content/assets/images/SchemaList.PNG
new file mode 100644
index 0000000..bab359f
Binary files /dev/null and b/content/assets/images/SchemaList.PNG differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/SchemaView.PNG
----------------------------------------------------------------------
diff --git a/content/assets/images/SchemaView.PNG b/content/assets/images/SchemaView.PNG
new file mode 100644
index 0000000..2ddeda9
Binary files /dev/null and b/content/assets/images/SchemaView.PNG differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/Schematest.PNG
----------------------------------------------------------------------
diff --git a/content/assets/images/Schematest.PNG b/content/assets/images/Schematest.PNG
new file mode 100644
index 0000000..a81d470
Binary files /dev/null and b/content/assets/images/Schematest.PNG differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/SelectInstance.PNG
----------------------------------------------------------------------
diff --git a/content/assets/images/SelectInstance.PNG b/content/assets/images/SelectInstance.PNG
new file mode 100644
index 0000000..600787b
Binary files /dev/null and b/content/assets/images/SelectInstance.PNG differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/Service-Center-UI-Preview.gif
----------------------------------------------------------------------
diff --git a/content/assets/images/Service-Center-UI-Preview.gif b/content/assets/images/Service-Center-UI-Preview.gif
new file mode 100644
index 0000000..8bc6adc
Binary files /dev/null and b/content/assets/images/Service-Center-UI-Preview.gif differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/ServiceComb-logo-1.png
----------------------------------------------------------------------
diff --git a/content/assets/images/ServiceComb-logo-1.png b/content/assets/images/ServiceComb-logo-1.png
new file mode 100644
index 0000000..c82638d
Binary files /dev/null and b/content/assets/images/ServiceComb-logo-1.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/ServiceComb-logo-2.png
----------------------------------------------------------------------
diff --git a/content/assets/images/ServiceComb-logo-2.png b/content/assets/images/ServiceComb-logo-2.png
new file mode 100644
index 0000000..a624eb4
Binary files /dev/null and b/content/assets/images/ServiceComb-logo-2.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/ServiceComb-logo-3.jpg
----------------------------------------------------------------------
diff --git a/content/assets/images/ServiceComb-logo-3.jpg b/content/assets/images/ServiceComb-logo-3.jpg
new file mode 100644
index 0000000..b2cb706
Binary files /dev/null and b/content/assets/images/ServiceComb-logo-3.jpg differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/ServiceList.PNG
----------------------------------------------------------------------
diff --git a/content/assets/images/ServiceList.PNG b/content/assets/images/ServiceList.PNG
new file mode 100644
index 0000000..3770e4b
Binary files /dev/null and b/content/assets/images/ServiceList.PNG differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/Twitter.png
----------------------------------------------------------------------
diff --git a/content/assets/images/Twitter.png b/content/assets/images/Twitter.png
new file mode 100644
index 0000000..07d35c5
Binary files /dev/null and b/content/assets/images/Twitter.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/Users.png
----------------------------------------------------------------------
diff --git a/content/assets/images/Users.png b/content/assets/images/Users.png
new file mode 100644
index 0000000..386a70c
Binary files /dev/null and b/content/assets/images/Users.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/add-node.png
----------------------------------------------------------------------
diff --git a/content/assets/images/add-node.png b/content/assets/images/add-node.png
new file mode 100644
index 0000000..b58d6f1
Binary files /dev/null and b/content/assets/images/add-node.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/best_practices_for_legacy_system_reform.jpeg
----------------------------------------------------------------------
diff --git a/content/assets/images/best_practices_for_legacy_system_reform.jpeg b/content/assets/images/best_practices_for_legacy_system_reform.jpeg
new file mode 100644
index 0000000..614efe9
Binary files /dev/null and b/content/assets/images/best_practices_for_legacy_system_reform.jpeg differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/bmi-interface.png
----------------------------------------------------------------------
diff --git a/content/assets/images/bmi-interface.png b/content/assets/images/bmi-interface.png
new file mode 100644
index 0000000..88f944e
Binary files /dev/null and b/content/assets/images/bmi-interface.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/booking-microservice-yaml.png
----------------------------------------------------------------------
diff --git a/content/assets/images/booking-microservice-yaml.png b/content/assets/images/booking-microservice-yaml.png
new file mode 100644
index 0000000..6c24d73
Binary files /dev/null and b/content/assets/images/booking-microservice-yaml.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/booking-start-success.png
----------------------------------------------------------------------
diff --git a/content/assets/images/booking-start-success.png b/content/assets/images/booking-start-success.png
new file mode 100644
index 0000000..33d10d3
Binary files /dev/null and b/content/assets/images/booking-start-success.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/case_mengtuo_new_mode.png
----------------------------------------------------------------------
diff --git a/content/assets/images/case_mengtuo_new_mode.png b/content/assets/images/case_mengtuo_new_mode.png
new file mode 100644
index 0000000..2d43596
Binary files /dev/null and b/content/assets/images/case_mengtuo_new_mode.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/case_mengtuo_reform_before_and_after.png
----------------------------------------------------------------------
diff --git a/content/assets/images/case_mengtuo_reform_before_and_after.png b/content/assets/images/case_mengtuo_reform_before_and_after.png
new file mode 100644
index 0000000..c0743ee
Binary files /dev/null and b/content/assets/images/case_mengtuo_reform_before_and_after.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/case_mengtuo_traditional_mode.png
----------------------------------------------------------------------
diff --git a/content/assets/images/case_mengtuo_traditional_mode.png b/content/assets/images/case_mengtuo_traditional_mode.png
new file mode 100644
index 0000000..4f15ad8
Binary files /dev/null and b/content/assets/images/case_mengtuo_traditional_mode.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/code-adjust.png
----------------------------------------------------------------------
diff --git a/content/assets/images/code-adjust.png b/content/assets/images/code-adjust.png
new file mode 100644
index 0000000..0e42944
Binary files /dev/null and b/content/assets/images/code-adjust.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/communication.PNG
----------------------------------------------------------------------
diff --git a/content/assets/images/communication.PNG b/content/assets/images/communication.PNG
new file mode 100644
index 0000000..e26eea7
Binary files /dev/null and b/content/assets/images/communication.PNG differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/company-autoscale-1.png
----------------------------------------------------------------------
diff --git a/content/assets/images/company-autoscale-1.png b/content/assets/images/company-autoscale-1.png
new file mode 100644
index 0000000..4f9b0fa
Binary files /dev/null and b/content/assets/images/company-autoscale-1.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/company-autoscale-2.png
----------------------------------------------------------------------
diff --git a/content/assets/images/company-autoscale-2.png b/content/assets/images/company-autoscale-2.png
new file mode 100644
index 0000000..c7b77c8
Binary files /dev/null and b/content/assets/images/company-autoscale-2.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/company-autoscale-3.png
----------------------------------------------------------------------
diff --git a/content/assets/images/company-autoscale-3.png b/content/assets/images/company-autoscale-3.png
new file mode 100644
index 0000000..af70011
Binary files /dev/null and b/content/assets/images/company-autoscale-3.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/company-autoscale-4.png
----------------------------------------------------------------------
diff --git a/content/assets/images/company-autoscale-4.png b/content/assets/images/company-autoscale-4.png
new file mode 100644
index 0000000..1c8deb8
Binary files /dev/null and b/content/assets/images/company-autoscale-4.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/company-autoscale-5.png
----------------------------------------------------------------------
diff --git a/content/assets/images/company-autoscale-5.png b/content/assets/images/company-autoscale-5.png
new file mode 100644
index 0000000..f158fd9
Binary files /dev/null and b/content/assets/images/company-autoscale-5.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/company_concurrency_performance.png
----------------------------------------------------------------------
diff --git a/content/assets/images/company_concurrency_performance.png b/content/assets/images/company_concurrency_performance.png
new file mode 100644
index 0000000..c466c2a
Binary files /dev/null and b/content/assets/images/company_concurrency_performance.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/company_cpu_load.png
----------------------------------------------------------------------
diff --git a/content/assets/images/company_cpu_load.png b/content/assets/images/company_cpu_load.png
new file mode 100644
index 0000000..288d8d3
Binary files /dev/null and b/content/assets/images/company_cpu_load.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/company_different_log_memory_usage.png
----------------------------------------------------------------------
diff --git a/content/assets/images/company_different_log_memory_usage.png b/content/assets/images/company_different_log_memory_usage.png
new file mode 100644
index 0000000..7306e04
Binary files /dev/null and b/content/assets/images/company_different_log_memory_usage.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/company_log_and_jmeter.png
----------------------------------------------------------------------
diff --git a/content/assets/images/company_log_and_jmeter.png b/content/assets/images/company_log_and_jmeter.png
new file mode 100644
index 0000000..e5114f4
Binary files /dev/null and b/content/assets/images/company_log_and_jmeter.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/company_memory_used.png
----------------------------------------------------------------------
diff --git a/content/assets/images/company_memory_used.png b/content/assets/images/company_memory_used.png
new file mode 100644
index 0000000..f573994
Binary files /dev/null and b/content/assets/images/company_memory_used.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/company_response_time.png
----------------------------------------------------------------------
diff --git a/content/assets/images/company_response_time.png b/content/assets/images/company_response_time.png
new file mode 100644
index 0000000..b947c68
Binary files /dev/null and b/content/assets/images/company_response_time.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/company_test_plan.png
----------------------------------------------------------------------
diff --git a/content/assets/images/company_test_plan.png b/content/assets/images/company_test_plan.png
new file mode 100644
index 0000000..d8a67d0
Binary files /dev/null and b/content/assets/images/company_test_plan.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/compile.png
----------------------------------------------------------------------
diff --git a/content/assets/images/compile.png b/content/assets/images/compile.png
new file mode 100644
index 0000000..f8cea62
Binary files /dev/null and b/content/assets/images/compile.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/config-file.png
----------------------------------------------------------------------
diff --git a/content/assets/images/config-file.png b/content/assets/images/config-file.png
new file mode 100644
index 0000000..6be1b6f
Binary files /dev/null and b/content/assets/images/config-file.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/create-group.png
----------------------------------------------------------------------
diff --git a/content/assets/images/create-group.png b/content/assets/images/create-group.png
new file mode 100644
index 0000000..3ce5086
Binary files /dev/null and b/content/assets/images/create-group.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/create-pr.jpg
----------------------------------------------------------------------
diff --git a/content/assets/images/create-pr.jpg b/content/assets/images/create-pr.jpg
new file mode 100644
index 0000000..a579a8c
Binary files /dev/null and b/content/assets/images/create-pr.jpg differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/customer-microservice-yaml.png
----------------------------------------------------------------------
diff --git a/content/assets/images/customer-microservice-yaml.png b/content/assets/images/customer-microservice-yaml.png
new file mode 100644
index 0000000..eb54367
Binary files /dev/null and b/content/assets/images/customer-microservice-yaml.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/customer-start-success.png
----------------------------------------------------------------------
diff --git a/content/assets/images/customer-start-success.png b/content/assets/images/customer-start-success.png
new file mode 100644
index 0000000..74f239d
Binary files /dev/null and b/content/assets/images/customer-start-success.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/distributed-tracing-result.png
----------------------------------------------------------------------
diff --git a/content/assets/images/distributed-tracing-result.png b/content/assets/images/distributed-tracing-result.png
new file mode 100644
index 0000000..7e649b4
Binary files /dev/null and b/content/assets/images/distributed-tracing-result.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/fibonaccitree.gif
----------------------------------------------------------------------
diff --git a/content/assets/images/fibonaccitree.gif b/content/assets/images/fibonaccitree.gif
new file mode 100644
index 0000000..4245a8c
Binary files /dev/null and b/content/assets/images/fibonaccitree.gif differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/find-features-by-example.png
----------------------------------------------------------------------
diff --git a/content/assets/images/find-features-by-example.png b/content/assets/images/find-features-by-example.png
new file mode 100644
index 0000000..fa2fa07
Binary files /dev/null and b/content/assets/images/find-features-by-example.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/flow-control-result.png
----------------------------------------------------------------------
diff --git a/content/assets/images/flow-control-result.png b/content/assets/images/flow-control-result.png
new file mode 100644
index 0000000..71f9409
Binary files /dev/null and b/content/assets/images/flow-control-result.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/fork-repo.jpg
----------------------------------------------------------------------
diff --git a/content/assets/images/fork-repo.jpg b/content/assets/images/fork-repo.jpg
new file mode 100644
index 0000000..aa831d3
Binary files /dev/null and b/content/assets/images/fork-repo.jpg differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/github.png
----------------------------------------------------------------------
diff --git a/content/assets/images/github.png b/content/assets/images/github.png
new file mode 100644
index 0000000..55865e4
Binary files /dev/null and b/content/assets/images/github.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/governance.png
----------------------------------------------------------------------
diff --git a/content/assets/images/governance.png b/content/assets/images/governance.png
new file mode 100644
index 0000000..4b32867
Binary files /dev/null and b/content/assets/images/governance.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/home-page.png
----------------------------------------------------------------------
diff --git a/content/assets/images/home-page.png b/content/assets/images/home-page.png
new file mode 100644
index 0000000..e18c656
Binary files /dev/null and b/content/assets/images/home-page.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/huaweicloud_dependencies.png
----------------------------------------------------------------------
diff --git a/content/assets/images/huaweicloud_dependencies.png b/content/assets/images/huaweicloud_dependencies.png
new file mode 100644
index 0000000..25f5c2c
Binary files /dev/null and b/content/assets/images/huaweicloud_dependencies.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/image-upload-1.png
----------------------------------------------------------------------
diff --git a/content/assets/images/image-upload-1.png b/content/assets/images/image-upload-1.png
new file mode 100644
index 0000000..8d34a6e
Binary files /dev/null and b/content/assets/images/image-upload-1.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/image-upload-2.png
----------------------------------------------------------------------
diff --git a/content/assets/images/image-upload-2.png b/content/assets/images/image-upload-2.png
new file mode 100644
index 0000000..01e0ad8
Binary files /dev/null and b/content/assets/images/image-upload-2.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/import-project.png
----------------------------------------------------------------------
diff --git a/content/assets/images/import-project.png b/content/assets/images/import-project.png
new file mode 100644
index 0000000..2b86a87
Binary files /dev/null and b/content/assets/images/import-project.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/init-data.png
----------------------------------------------------------------------
diff --git a/content/assets/images/init-data.png b/content/assets/images/init-data.png
new file mode 100644
index 0000000..b299c3d
Binary files /dev/null and b/content/assets/images/init-data.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/intellij.code.style.1.png
----------------------------------------------------------------------
diff --git a/content/assets/images/intellij.code.style.1.png b/content/assets/images/intellij.code.style.1.png
new file mode 100644
index 0000000..c5f9e6e
Binary files /dev/null and b/content/assets/images/intellij.code.style.1.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/intellij.code.style.2.png
----------------------------------------------------------------------
diff --git a/content/assets/images/intellij.code.style.2.png b/content/assets/images/intellij.code.style.2.png
new file mode 100644
index 0000000..28540e2
Binary files /dev/null and b/content/assets/images/intellij.code.style.2.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/intellij.code.style.3.png
----------------------------------------------------------------------
diff --git a/content/assets/images/intellij.code.style.3.png b/content/assets/images/intellij.code.style.3.png
new file mode 100644
index 0000000..d015616
Binary files /dev/null and b/content/assets/images/intellij.code.style.3.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/intellij.code.style.4.png
----------------------------------------------------------------------
diff --git a/content/assets/images/intellij.code.style.4.png b/content/assets/images/intellij.code.style.4.png
new file mode 100644
index 0000000..6e564bd
Binary files /dev/null and b/content/assets/images/intellij.code.style.4.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/intellij.code.style.5.png
----------------------------------------------------------------------
diff --git a/content/assets/images/intellij.code.style.5.png b/content/assets/images/intellij.code.style.5.png
new file mode 100644
index 0000000..3e1cdc2
Binary files /dev/null and b/content/assets/images/intellij.code.style.5.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/jira/jira.board.png
----------------------------------------------------------------------
diff --git a/content/assets/images/jira/jira.board.png b/content/assets/images/jira/jira.board.png
new file mode 100644
index 0000000..415c633
Binary files /dev/null and b/content/assets/images/jira/jira.board.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/jira/jira.board.profile.png
----------------------------------------------------------------------
diff --git a/content/assets/images/jira/jira.board.profile.png b/content/assets/images/jira/jira.board.profile.png
new file mode 100644
index 0000000..5c64352
Binary files /dev/null and b/content/assets/images/jira/jira.board.profile.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/jira/jira.board.selection.png
----------------------------------------------------------------------
diff --git a/content/assets/images/jira/jira.board.selection.png b/content/assets/images/jira/jira.board.selection.png
new file mode 100644
index 0000000..48d5db4
Binary files /dev/null and b/content/assets/images/jira/jira.board.selection.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/jira/jira.epic.png
----------------------------------------------------------------------
diff --git a/content/assets/images/jira/jira.epic.png b/content/assets/images/jira/jira.epic.png
new file mode 100644
index 0000000..203da0d
Binary files /dev/null and b/content/assets/images/jira/jira.epic.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/jira/jira.fix.version.png
----------------------------------------------------------------------
diff --git a/content/assets/images/jira/jira.fix.version.png b/content/assets/images/jira/jira.fix.version.png
new file mode 100644
index 0000000..dad120a
Binary files /dev/null and b/content/assets/images/jira/jira.fix.version.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/jira/jira.good.first.issue.png
----------------------------------------------------------------------
diff --git a/content/assets/images/jira/jira.good.first.issue.png b/content/assets/images/jira/jira.good.first.issue.png
new file mode 100644
index 0000000..fd0d201
Binary files /dev/null and b/content/assets/images/jira/jira.good.first.issue.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/jira/jira.profile.png
----------------------------------------------------------------------
diff --git a/content/assets/images/jira/jira.profile.png b/content/assets/images/jira/jira.profile.png
new file mode 100644
index 0000000..9fbba44
Binary files /dev/null and b/content/assets/images/jira/jira.profile.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/jira/jira.signup.png
----------------------------------------------------------------------
diff --git a/content/assets/images/jira/jira.signup.png b/content/assets/images/jira/jira.signup.png
new file mode 100644
index 0000000..087511c
Binary files /dev/null and b/content/assets/images/jira/jira.signup.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/jira/jira.status.update.png
----------------------------------------------------------------------
diff --git a/content/assets/images/jira/jira.status.update.png b/content/assets/images/jira/jira.status.update.png
new file mode 100644
index 0000000..4e75459
Binary files /dev/null and b/content/assets/images/jira/jira.status.update.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/jira/jira.story.assignment.png
----------------------------------------------------------------------
diff --git a/content/assets/images/jira/jira.story.assignment.png b/content/assets/images/jira/jira.story.assignment.png
new file mode 100644
index 0000000..f491ed8
Binary files /dev/null and b/content/assets/images/jira/jira.story.assignment.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/jira/jira.story.png
----------------------------------------------------------------------
diff --git a/content/assets/images/jira/jira.story.png b/content/assets/images/jira/jira.story.png
new file mode 100644
index 0000000..a2d3696
Binary files /dev/null and b/content/assets/images/jira/jira.story.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/kubernetes-company-cn.PNG
----------------------------------------------------------------------
diff --git a/content/assets/images/kubernetes-company-cn.PNG b/content/assets/images/kubernetes-company-cn.PNG
new file mode 100644
index 0000000..6596e95
Binary files /dev/null and b/content/assets/images/kubernetes-company-cn.PNG differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/kubernetes-company.png
----------------------------------------------------------------------
diff --git a/content/assets/images/kubernetes-company.png b/content/assets/images/kubernetes-company.png
new file mode 100644
index 0000000..494a677
Binary files /dev/null and b/content/assets/images/kubernetes-company.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/legacy_system_reform_strategy.jpeg
----------------------------------------------------------------------
diff --git a/content/assets/images/legacy_system_reform_strategy.jpeg b/content/assets/images/legacy_system_reform_strategy.jpeg
new file mode 100644
index 0000000..5994a03
Binary files /dev/null and b/content/assets/images/legacy_system_reform_strategy.jpeg differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/load-balance-result.png
----------------------------------------------------------------------
diff --git a/content/assets/images/load-balance-result.png b/content/assets/images/load-balance-result.png
new file mode 100644
index 0000000..ca379ae
Binary files /dev/null and b/content/assets/images/load-balance-result.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/local_develop_test.png
----------------------------------------------------------------------
diff --git a/content/assets/images/local_develop_test.png b/content/assets/images/local_develop_test.png
new file mode 100644
index 0000000..00cbb66
Binary files /dev/null and b/content/assets/images/local_develop_test.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/manage_springcloud_application_using_sc_and_gs.png
----------------------------------------------------------------------
diff --git a/content/assets/images/manage_springcloud_application_using_sc_and_gs.png b/content/assets/images/manage_springcloud_application_using_sc_and_gs.png
new file mode 100644
index 0000000..9899e52
Binary files /dev/null and b/content/assets/images/manage_springcloud_application_using_sc_and_gs.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/metrics-output.png
----------------------------------------------------------------------
diff --git a/content/assets/images/metrics-output.png b/content/assets/images/metrics-output.png
new file mode 100644
index 0000000..0f629b2
Binary files /dev/null and b/content/assets/images/metrics-output.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/micro-service-design.png
----------------------------------------------------------------------
diff --git a/content/assets/images/micro-service-design.png b/content/assets/images/micro-service-design.png
new file mode 100644
index 0000000..6e687ca
Binary files /dev/null and b/content/assets/images/micro-service-design.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/micro-service-structure.PNG
----------------------------------------------------------------------
diff --git a/content/assets/images/micro-service-structure.PNG b/content/assets/images/micro-service-structure.PNG
new file mode 100644
index 0000000..6e1ecec
Binary files /dev/null and b/content/assets/images/micro-service-structure.PNG differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/microservice_definition_by_martin_folwer.jpeg
----------------------------------------------------------------------
diff --git a/content/assets/images/microservice_definition_by_martin_folwer.jpeg b/content/assets/images/microservice_definition_by_martin_folwer.jpeg
new file mode 100644
index 0000000..abb74da
Binary files /dev/null and b/content/assets/images/microservice_definition_by_martin_folwer.jpeg differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/microservice_reform_strategy.jpeg
----------------------------------------------------------------------
diff --git a/content/assets/images/microservice_reform_strategy.jpeg b/content/assets/images/microservice_reform_strategy.jpeg
new file mode 100644
index 0000000..327116e
Binary files /dev/null and b/content/assets/images/microservice_reform_strategy.jpeg differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/new-pr.jpg
----------------------------------------------------------------------
diff --git a/content/assets/images/new-pr.jpg b/content/assets/images/new-pr.jpg
new file mode 100644
index 0000000..7ed0966
Binary files /dev/null and b/content/assets/images/new-pr.jpg differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/onStartup.PNG
----------------------------------------------------------------------
diff --git a/content/assets/images/onStartup.PNG b/content/assets/images/onStartup.PNG
new file mode 100644
index 0000000..7d4753d
Binary files /dev/null and b/content/assets/images/onStartup.PNG differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/performance-test-on-seckill-with-jmeter-latencies.png
----------------------------------------------------------------------
diff --git a/content/assets/images/performance-test-on-seckill-with-jmeter-latencies.png b/content/assets/images/performance-test-on-seckill-with-jmeter-latencies.png
new file mode 100644
index 0000000..57bcdc3
Binary files /dev/null and b/content/assets/images/performance-test-on-seckill-with-jmeter-latencies.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/performance-test-on-seckill-with-jmeter-script.png
----------------------------------------------------------------------
diff --git a/content/assets/images/performance-test-on-seckill-with-jmeter-script.png b/content/assets/images/performance-test-on-seckill-with-jmeter-script.png
new file mode 100644
index 0000000..fb7eb73
Binary files /dev/null and b/content/assets/images/performance-test-on-seckill-with-jmeter-script.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/performance-test-on-seckill-with-jmeter-statistics.png
----------------------------------------------------------------------
diff --git a/content/assets/images/performance-test-on-seckill-with-jmeter-statistics.png b/content/assets/images/performance-test-on-seckill-with-jmeter-statistics.png
new file mode 100644
index 0000000..a417ba2
Binary files /dev/null and b/content/assets/images/performance-test-on-seckill-with-jmeter-statistics.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/performance-test-on-seckill-with-jmeter-time-percentiles.png
----------------------------------------------------------------------
diff --git a/content/assets/images/performance-test-on-seckill-with-jmeter-time-percentiles.png b/content/assets/images/performance-test-on-seckill-with-jmeter-time-percentiles.png
new file mode 100644
index 0000000..a9ef729
Binary files /dev/null and b/content/assets/images/performance-test-on-seckill-with-jmeter-time-percentiles.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/performance-test-on-seckill-with-jmeter-tps-all.png
----------------------------------------------------------------------
diff --git a/content/assets/images/performance-test-on-seckill-with-jmeter-tps-all.png b/content/assets/images/performance-test-on-seckill-with-jmeter-tps-all.png
new file mode 100644
index 0000000..216bd3f
Binary files /dev/null and b/content/assets/images/performance-test-on-seckill-with-jmeter-tps-all.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/performance-test-on-seckill-with-jmeter-tps-less.png
----------------------------------------------------------------------
diff --git a/content/assets/images/performance-test-on-seckill-with-jmeter-tps-less.png b/content/assets/images/performance-test-on-seckill-with-jmeter-tps-less.png
new file mode 100644
index 0000000..dab547d
Binary files /dev/null and b/content/assets/images/performance-test-on-seckill-with-jmeter-tps-less.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/pom-dependence.png
----------------------------------------------------------------------
diff --git a/content/assets/images/pom-dependence.png b/content/assets/images/pom-dependence.png
new file mode 100644
index 0000000..cbceb11
Binary files /dev/null and b/content/assets/images/pom-dependence.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/quick-start-sample-workflow-en.png
----------------------------------------------------------------------
diff --git a/content/assets/images/quick-start-sample-workflow-en.png b/content/assets/images/quick-start-sample-workflow-en.png
new file mode 100644
index 0000000..a50b0b3
Binary files /dev/null and b/content/assets/images/quick-start-sample-workflow-en.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/quick-start-sample-workflow.png
----------------------------------------------------------------------
diff --git a/content/assets/images/quick-start-sample-workflow.png b/content/assets/images/quick-start-sample-workflow.png
new file mode 100644
index 0000000..f86387b
Binary files /dev/null and b/content/assets/images/quick-start-sample-workflow.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/rapid_development_framework.png
----------------------------------------------------------------------
diff --git a/content/assets/images/rapid_development_framework.png b/content/assets/images/rapid_development_framework.png
new file mode 100644
index 0000000..1f8ae21
Binary files /dev/null and b/content/assets/images/rapid_development_framework.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/saga-demo.png
----------------------------------------------------------------------
diff --git a/content/assets/images/saga-demo.png b/content/assets/images/saga-demo.png
new file mode 100755
index 0000000..e1d3416
Binary files /dev/null and b/content/assets/images/saga-demo.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/saga.2pc.phase1.png
----------------------------------------------------------------------
diff --git a/content/assets/images/saga.2pc.phase1.png b/content/assets/images/saga.2pc.phase1.png
new file mode 100644
index 0000000..d959c9c
Binary files /dev/null and b/content/assets/images/saga.2pc.phase1.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/saga.2pc.phase2.png
----------------------------------------------------------------------
diff --git a/content/assets/images/saga.2pc.phase2.png b/content/assets/images/saga.2pc.phase2.png
new file mode 100644
index 0000000..9a8b382
Binary files /dev/null and b/content/assets/images/saga.2pc.phase2.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/saga.centralized.png
----------------------------------------------------------------------
diff --git a/content/assets/images/saga.centralized.png b/content/assets/images/saga.centralized.png
new file mode 100644
index 0000000..65a720c
Binary files /dev/null and b/content/assets/images/saga.centralized.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/saga.commutative.png
----------------------------------------------------------------------
diff --git a/content/assets/images/saga.commutative.png b/content/assets/images/saga.commutative.png
new file mode 100644
index 0000000..6fe7574
Binary files /dev/null and b/content/assets/images/saga.commutative.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/saga.death.star.png
----------------------------------------------------------------------
diff --git a/content/assets/images/saga.death.star.png b/content/assets/images/saga.death.star.png
new file mode 100644
index 0000000..383c57c
Binary files /dev/null and b/content/assets/images/saga.death.star.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/saga.decentralized.png
----------------------------------------------------------------------
diff --git a/content/assets/images/saga.decentralized.png b/content/assets/images/saga.decentralized.png
new file mode 100644
index 0000000..b2e3c48
Binary files /dev/null and b/content/assets/images/saga.decentralized.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/saga.design.png
----------------------------------------------------------------------
diff --git a/content/assets/images/saga.design.png b/content/assets/images/saga.design.png
new file mode 100644
index 0000000..ab8d8dd
Binary files /dev/null and b/content/assets/images/saga.design.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/saga.event.coupling.png
----------------------------------------------------------------------
diff --git a/content/assets/images/saga.event.coupling.png b/content/assets/images/saga.event.coupling.png
new file mode 100644
index 0000000..782b156
Binary files /dev/null and b/content/assets/images/saga.event.coupling.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/saga.event.driven.request.png
----------------------------------------------------------------------
diff --git a/content/assets/images/saga.event.driven.request.png b/content/assets/images/saga.event.driven.request.png
new file mode 100644
index 0000000..6a07f61
Binary files /dev/null and b/content/assets/images/saga.event.driven.request.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/saga.event.driven.response.png
----------------------------------------------------------------------
diff --git a/content/assets/images/saga.event.driven.response.png b/content/assets/images/saga.event.driven.response.png
new file mode 100644
index 0000000..e4eb067
Binary files /dev/null and b/content/assets/images/saga.event.driven.response.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/saga.events.png
----------------------------------------------------------------------
diff --git a/content/assets/images/saga.events.png b/content/assets/images/saga.events.png
new file mode 100644
index 0000000..2d7bc87
Binary files /dev/null and b/content/assets/images/saga.events.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/saga.graph.png
----------------------------------------------------------------------
diff --git a/content/assets/images/saga.graph.png b/content/assets/images/saga.graph.png
new file mode 100644
index 0000000..84ab013
Binary files /dev/null and b/content/assets/images/saga.graph.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/saga.monolithic.png
----------------------------------------------------------------------
diff --git a/content/assets/images/saga.monolithic.png b/content/assets/images/saga.monolithic.png
new file mode 100644
index 0000000..2d33448
Binary files /dev/null and b/content/assets/images/saga.monolithic.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/saga.service.boundary.png
----------------------------------------------------------------------
diff --git a/content/assets/images/saga.service.boundary.png b/content/assets/images/saga.service.boundary.png
new file mode 100644
index 0000000..9837a07
Binary files /dev/null and b/content/assets/images/saga.service.boundary.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/saga.tcc.confirm.png
----------------------------------------------------------------------
diff --git a/content/assets/images/saga.tcc.confirm.png b/content/assets/images/saga.tcc.confirm.png
new file mode 100644
index 0000000..0adf512
Binary files /dev/null and b/content/assets/images/saga.tcc.confirm.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/saga.tcc.try.png
----------------------------------------------------------------------
diff --git a/content/assets/images/saga.tcc.try.png b/content/assets/images/saga.tcc.try.png
new file mode 100644
index 0000000..b942dc9
Binary files /dev/null and b/content/assets/images/saga.tcc.try.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/saga.transactions.png
----------------------------------------------------------------------
diff --git a/content/assets/images/saga.transactions.png b/content/assets/images/saga.transactions.png
new file mode 100644
index 0000000..580979d
Binary files /dev/null and b/content/assets/images/saga.transactions.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/scaling.png
----------------------------------------------------------------------
diff --git a/content/assets/images/scaling.png b/content/assets/images/scaling.png
new file mode 100644
index 0000000..4af4483
Binary files /dev/null and b/content/assets/images/scaling.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/seckill-develop-course-part-I-arth-en.png
----------------------------------------------------------------------
diff --git a/content/assets/images/seckill-develop-course-part-I-arth-en.png b/content/assets/images/seckill-develop-course-part-I-arth-en.png
new file mode 100644
index 0000000..3b7f868
Binary files /dev/null and b/content/assets/images/seckill-develop-course-part-I-arth-en.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/seckill-develop-course-part-I-arth.png
----------------------------------------------------------------------
diff --git a/content/assets/images/seckill-develop-course-part-I-arth.png b/content/assets/images/seckill-develop-course-part-I-arth.png
new file mode 100644
index 0000000..9561968
Binary files /dev/null and b/content/assets/images/seckill-develop-course-part-I-arth.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/seckill-develop-course-part-I-command-en.png
----------------------------------------------------------------------
diff --git a/content/assets/images/seckill-develop-course-part-I-command-en.png b/content/assets/images/seckill-develop-course-part-I-command-en.png
new file mode 100644
index 0000000..1e64bec
Binary files /dev/null and b/content/assets/images/seckill-develop-course-part-I-command-en.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/seckill-develop-course-part-I-command.png
----------------------------------------------------------------------
diff --git a/content/assets/images/seckill-develop-course-part-I-command.png b/content/assets/images/seckill-develop-course-part-I-command.png
new file mode 100644
index 0000000..3374140
Binary files /dev/null and b/content/assets/images/seckill-develop-course-part-I-command.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/seckill-develop-course-part-I-query-coupons.png
----------------------------------------------------------------------
diff --git a/content/assets/images/seckill-develop-course-part-I-query-coupons.png b/content/assets/images/seckill-develop-course-part-I-query-coupons.png
new file mode 100644
index 0000000..05c6cbc
Binary files /dev/null and b/content/assets/images/seckill-develop-course-part-I-query-coupons.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/seckill-develop-course-part-I-request-seckill.png
----------------------------------------------------------------------
diff --git a/content/assets/images/seckill-develop-course-part-I-request-seckill.png b/content/assets/images/seckill-develop-course-part-I-request-seckill.png
new file mode 100644
index 0000000..2e05a1a
Binary files /dev/null and b/content/assets/images/seckill-develop-course-part-I-request-seckill.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/seckill-develop-course-part-I-spring.png
----------------------------------------------------------------------
diff --git a/content/assets/images/seckill-develop-course-part-I-spring.png b/content/assets/images/seckill-develop-course-part-I-spring.png
new file mode 100644
index 0000000..d00f3e5
Binary files /dev/null and b/content/assets/images/seckill-develop-course-part-I-spring.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/seckill-develop-course-part-II-arth-en.png
----------------------------------------------------------------------
diff --git a/content/assets/images/seckill-develop-course-part-II-arth-en.png b/content/assets/images/seckill-develop-course-part-II-arth-en.png
new file mode 100644
index 0000000..378579b
Binary files /dev/null and b/content/assets/images/seckill-develop-course-part-II-arth-en.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/seckill-develop-course-part-II-arth.png
----------------------------------------------------------------------
diff --git a/content/assets/images/seckill-develop-course-part-II-arth.png b/content/assets/images/seckill-develop-course-part-II-arth.png
new file mode 100644
index 0000000..0432f52
Binary files /dev/null and b/content/assets/images/seckill-develop-course-part-II-arth.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/seckill-develop-course-part-II-create-promotion.png
----------------------------------------------------------------------
diff --git a/content/assets/images/seckill-develop-course-part-II-create-promotion.png b/content/assets/images/seckill-develop-course-part-II-create-promotion.png
new file mode 100644
index 0000000..cdee18a
Binary files /dev/null and b/content/assets/images/seckill-develop-course-part-II-create-promotion.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/seckill-develop-course-part-II-query-active-promotion.png
----------------------------------------------------------------------
diff --git a/content/assets/images/seckill-develop-course-part-II-query-active-promotion.png b/content/assets/images/seckill-develop-course-part-II-query-active-promotion.png
new file mode 100644
index 0000000..7c28034
Binary files /dev/null and b/content/assets/images/seckill-develop-course-part-II-query-active-promotion.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/seckill-develop-course-part-II-reject-duplicate-grab.png
----------------------------------------------------------------------
diff --git a/content/assets/images/seckill-develop-course-part-II-reject-duplicate-grab.png b/content/assets/images/seckill-develop-course-part-II-reject-duplicate-grab.png
new file mode 100644
index 0000000..348df7a
Binary files /dev/null and b/content/assets/images/seckill-develop-course-part-II-reject-duplicate-grab.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/seckill-develop-course-part-III-arch-en.png
----------------------------------------------------------------------
diff --git a/content/assets/images/seckill-develop-course-part-III-arch-en.png b/content/assets/images/seckill-develop-course-part-III-arch-en.png
new file mode 100644
index 0000000..38dd863
Binary files /dev/null and b/content/assets/images/seckill-develop-course-part-III-arch-en.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/seckill-develop-course-part-III-arch.png
----------------------------------------------------------------------
diff --git a/content/assets/images/seckill-develop-course-part-III-arch.png b/content/assets/images/seckill-develop-course-part-III-arch.png
new file mode 100644
index 0000000..3bb33bd
Binary files /dev/null and b/content/assets/images/seckill-develop-course-part-III-arch.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/seckill-develop-course-part-III-cqrs.png
----------------------------------------------------------------------
diff --git a/content/assets/images/seckill-develop-course-part-III-cqrs.png b/content/assets/images/seckill-develop-course-part-III-cqrs.png
new file mode 100644
index 0000000..0e48247
Binary files /dev/null and b/content/assets/images/seckill-develop-course-part-III-cqrs.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/seckill-develop-course-part-III-seckill-all-in-one.png
----------------------------------------------------------------------
diff --git a/content/assets/images/seckill-develop-course-part-III-seckill-all-in-one.png b/content/assets/images/seckill-develop-course-part-III-seckill-all-in-one.png
new file mode 100644
index 0000000..b31bd48
Binary files /dev/null and b/content/assets/images/seckill-develop-course-part-III-seckill-all-in-one.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/servcie-center.png
----------------------------------------------------------------------
diff --git a/content/assets/images/servcie-center.png b/content/assets/images/servcie-center.png
new file mode 100644
index 0000000..50b938a
Binary files /dev/null and b/content/assets/images/servcie-center.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/service-center-start-success.png
----------------------------------------------------------------------
diff --git a/content/assets/images/service-center-start-success.png b/content/assets/images/service-center-start-success.png
new file mode 100644
index 0000000..2ee58ce
Binary files /dev/null and b/content/assets/images/service-center-start-success.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/service-consumer.png
----------------------------------------------------------------------
diff --git a/content/assets/images/service-consumer.png b/content/assets/images/service-consumer.png
new file mode 100644
index 0000000..f33b312
Binary files /dev/null and b/content/assets/images/service-consumer.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/service-deploy.png
----------------------------------------------------------------------
diff --git a/content/assets/images/service-deploy.png b/content/assets/images/service-deploy.png
new file mode 100644
index 0000000..d534be8
Binary files /dev/null and b/content/assets/images/service-deploy.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/service-management-result.png
----------------------------------------------------------------------
diff --git a/content/assets/images/service-management-result.png b/content/assets/images/service-management-result.png
new file mode 100644
index 0000000..c01ade8
Binary files /dev/null and b/content/assets/images/service-management-result.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/service-monitor-1.png
----------------------------------------------------------------------
diff --git a/content/assets/images/service-monitor-1.png b/content/assets/images/service-monitor-1.png
new file mode 100644
index 0000000..5c94757
Binary files /dev/null and b/content/assets/images/service-monitor-1.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/service-monitor-2.png
----------------------------------------------------------------------
diff --git a/content/assets/images/service-monitor-2.png b/content/assets/images/service-monitor-2.png
new file mode 100644
index 0000000..0bc169b
Binary files /dev/null and b/content/assets/images/service-monitor-2.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/servicecomb-banner-s.png
----------------------------------------------------------------------
diff --git a/content/assets/images/servicecomb-banner-s.png b/content/assets/images/servicecomb-banner-s.png
new file mode 100644
index 0000000..b37bc31
Binary files /dev/null and b/content/assets/images/servicecomb-banner-s.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/servicecomb-feature-multiLanguage.png
----------------------------------------------------------------------
diff --git a/content/assets/images/servicecomb-feature-multiLanguage.png b/content/assets/images/servicecomb-feature-multiLanguage.png
new file mode 100644
index 0000000..5bed15a
Binary files /dev/null and b/content/assets/images/servicecomb-feature-multiLanguage.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/servicecomb-feature-openapi.png
----------------------------------------------------------------------
diff --git a/content/assets/images/servicecomb-feature-openapi.png b/content/assets/images/servicecomb-feature-openapi.png
new file mode 100644
index 0000000..8fbb23f
Binary files /dev/null and b/content/assets/images/servicecomb-feature-openapi.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/servicecomb-feature-quickstart.png
----------------------------------------------------------------------
diff --git a/content/assets/images/servicecomb-feature-quickstart.png b/content/assets/images/servicecomb-feature-quickstart.png
new file mode 100644
index 0000000..288671c
Binary files /dev/null and b/content/assets/images/servicecomb-feature-quickstart.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/servicecomb-models.png
----------------------------------------------------------------------
diff --git a/content/assets/images/servicecomb-models.png b/content/assets/images/servicecomb-models.png
new file mode 100644
index 0000000..9229e44
Binary files /dev/null and b/content/assets/images/servicecomb-models.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/start-booking.png
----------------------------------------------------------------------
diff --git a/content/assets/images/start-booking.png b/content/assets/images/start-booking.png
new file mode 100644
index 0000000..aa7a1e5
Binary files /dev/null and b/content/assets/images/start-booking.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/start-customer.png
----------------------------------------------------------------------
diff --git a/content/assets/images/start-customer.png b/content/assets/images/start-customer.png
new file mode 100644
index 0000000..a234c44
Binary files /dev/null and b/content/assets/images/start-customer.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/start-website.png
----------------------------------------------------------------------
diff --git a/content/assets/images/start-website.png b/content/assets/images/start-website.png
new file mode 100644
index 0000000..6afad47
Binary files /dev/null and b/content/assets/images/start-website.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/tcc-trans.png
----------------------------------------------------------------------
diff --git a/content/assets/images/tcc-trans.png b/content/assets/images/tcc-trans.png
new file mode 100644
index 0000000..2d4fbe8
Binary files /dev/null and b/content/assets/images/tcc-trans.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/thread-model.png
----------------------------------------------------------------------
diff --git a/content/assets/images/thread-model.png b/content/assets/images/thread-model.png
new file mode 100644
index 0000000..018261a
Binary files /dev/null and b/content/assets/images/thread-model.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/tracing.1.png
----------------------------------------------------------------------
diff --git a/content/assets/images/tracing.1.png b/content/assets/images/tracing.1.png
new file mode 100644
index 0000000..7868241
Binary files /dev/null and b/content/assets/images/tracing.1.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/tracing.2.png
----------------------------------------------------------------------
diff --git a/content/assets/images/tracing.2.png b/content/assets/images/tracing.2.png
new file mode 100644
index 0000000..064aca3
Binary files /dev/null and b/content/assets/images/tracing.2.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/tracing.3.png
----------------------------------------------------------------------
diff --git a/content/assets/images/tracing.3.png b/content/assets/images/tracing.3.png
new file mode 100644
index 0000000..d1d8968
Binary files /dev/null and b/content/assets/images/tracing.3.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/tracing.4.png
----------------------------------------------------------------------
diff --git a/content/assets/images/tracing.4.png b/content/assets/images/tracing.4.png
new file mode 100644
index 0000000..a1c985e
Binary files /dev/null and b/content/assets/images/tracing.4.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/tracing.5.png
----------------------------------------------------------------------
diff --git a/content/assets/images/tracing.5.png b/content/assets/images/tracing.5.png
new file mode 100644
index 0000000..9a2b83b
Binary files /dev/null and b/content/assets/images/tracing.5.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/website-microservice-yaml.png
----------------------------------------------------------------------
diff --git a/content/assets/images/website-microservice-yaml.png b/content/assets/images/website-microservice-yaml.png
new file mode 100644
index 0000000..ef69ca2
Binary files /dev/null and b/content/assets/images/website-microservice-yaml.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/why_microservice_show_up.jpeg
----------------------------------------------------------------------
diff --git a/content/assets/images/why_microservice_show_up.jpeg b/content/assets/images/why_microservice_show_up.jpeg
new file mode 100644
index 0000000..2daa4d8
Binary files /dev/null and b/content/assets/images/why_microservice_show_up.jpeg differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/workshop-company-structure.png
----------------------------------------------------------------------
diff --git a/content/assets/images/workshop-company-structure.png b/content/assets/images/workshop-company-structure.png
new file mode 100644
index 0000000..9d2f2ea
Binary files /dev/null and b/content/assets/images/workshop-company-structure.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/images/workshop-spring-starter.png
----------------------------------------------------------------------
diff --git a/content/assets/images/workshop-spring-starter.png b/content/assets/images/workshop-spring-starter.png
new file mode 100644
index 0000000..b4ed35c
Binary files /dev/null and b/content/assets/images/workshop-spring-starter.png differ

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/assets/js/custom.js
----------------------------------------------------------------------
diff --git a/content/assets/js/custom.js b/content/assets/js/custom.js
new file mode 100644
index 0000000..6b22c62
--- /dev/null
+++ b/content/assets/js/custom.js
@@ -0,0 +1,8 @@
+$(document).ready(function(){
+    $(".nav a").click(function (e) {
+        e.preventDefault();
+    });
+    $("a.scroll").on('click', function (e) {
+        e.preventDefault();
+    });
+});


[38/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/docs/maven_dependency_management/index.html
----------------------------------------------------------------------
diff --git a/content/cn/docs/maven_dependency_management/index.html b/content/cn/docs/maven_dependency_management/index.html
new file mode 100644
index 0000000..d766a08
--- /dev/null
+++ b/content/cn/docs/maven_dependency_management/index.html
@@ -0,0 +1,888 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>使用maven管理复杂依赖关系的技巧 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="maven dependency management">
+
+
+
+
+<meta name="author" content="liubao">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="使用maven管理复杂依赖关系的技巧">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/maven_dependency_management/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/maven_dependency_management/">
+
+
+
+  <meta property="og:description" content="maven dependency management">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="使用maven管理复杂依赖关系的技巧">
+  <meta name="twitter:description" content="maven dependency management">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+    <meta name="twitter:creator" content="@liubao">
+  
+
+
+
+  
+
+  
+
+
+
+
+
+  <meta property="og:type" content="article">
+  <meta property="article:published_time" content="2017-09-14T00:00:00+08:00">
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/docs/maven_dependency_management/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+
+<div itemscope itemtype="http://schema.org/Person">
+
+  
+    <div class="author__avatar">
+      
+        <img src="/assets/images/ServiceComb-logo-3.jpg" class="author__avatar" alt="" itemprop="image">
+      
+    </div>
+  
+
+  <div class="author__content">
+    <h3 class="author__name" itemprop="name"></h3>
+    
+      <p class="author__bio" itemprop="description">
+	    
+	      
+	        ServiceComb提供了一套关于服务注册,服务发现,服务配置以及管理功能的微服务框架
+	      
+	    
+      </p>
+    
+  </div>
+
+  <div class="author__urls-wrapper">
+    <button class="btn btn--inverse">关注</button>
+    <ul class="author__urls social-icons">
+      
+        <li itemprop="homeLocation" itemscope itemtype="http://schema.org/Place">
+        
+          
+            <i class="fa fa-fw fa-map-marker" aria-hidden="true"></i> <span itemprop="name">中国</span>
+          
+        
+        </li>
+      
+
+      
+
+      
+        <li>
+          <a href="mailto:servicecomb-developers@googlegroups.com">
+            <meta itemprop="email" content="servicecomb-developers@googlegroups.com" />
+            <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> 电子邮箱
+          </a>
+        </li>
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+        <li>
+          <a href="https://github.com/ServiceComb" itemprop="sameAs">
+            <i class="fa fa-fw fa-github" aria-hidden="true"></i> GitHub
+          </a>
+        </li>
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      <!--
+  <li>
+    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs">
+      <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link
+    </a>
+  </li>
+-->
+    </ul>
+  </div>
+</div>
+
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="使用maven管理复杂依赖关系的技巧">
+    <meta itemprop="description" content="maven dependency management">
+    <meta itemprop="datePublished" content="September 14, 2017">
+    <meta itemprop="dateModified" content="September 14, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">使用maven管理复杂依赖关系的技巧
+</h1>
+            
+              <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <h2 id="依赖关系管理的核心问题">依赖关系管理的核心问题</h2>
+<p>依赖关系管理最让人头疼的问题是软件版本的选择。一个简化的例子:开发人员目前需要开发一个X项目,该项目需要同时引用项目A提供的组件,也需要引用项目B的组件,并且项目A和项目B同时依赖了项目C,但是版本号不同。</p>
+
+<ul>
+  <li>项目X的pom:</li>
+</ul>
+
+<div class="language-xml highlighter-rouge"><pre class="highlight"><code><span class="nt">&lt;dependency&gt;</span>
+	<span class="nt">&lt;groupId&gt;</span>groupA<span class="nt">&lt;/groupId&gt;</span>
+	<span class="nt">&lt;artifactId&gt;</span>artifactA<span class="nt">&lt;/artifactId&gt;</span>
+        <span class="nt">&lt;version&gt;</span>0.1.0<span class="nt">&lt;/version&gt;</span>   
+<span class="nt">&lt;/dependency&gt;</span>
+<span class="nt">&lt;dependency&gt;</span>
+	<span class="nt">&lt;groupId&gt;</span>groupB<span class="nt">&lt;/groupId&gt;</span>
+	<span class="nt">&lt;artifactId&gt;</span>artifactB<span class="nt">&lt;/artifactId&gt;</span>
+        <span class="nt">&lt;version&gt;</span>0.1.0<span class="nt">&lt;/version&gt;</span>   
+<span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+</div>
+
+<ul>
+  <li>项目A的pom:</li>
+</ul>
+
+<div class="language-xml highlighter-rouge"><pre class="highlight"><code><span class="nt">&lt;dependency&gt;</span>
+	<span class="nt">&lt;groupId&gt;</span>groupC<span class="nt">&lt;/groupId&gt;</span>
+	<span class="nt">&lt;artifactId&gt;</span>artifactC<span class="nt">&lt;/artifactId&gt;</span>
+        <span class="nt">&lt;version&gt;</span>0.1.0<span class="nt">&lt;/version&gt;</span>   
+<span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+</div>
+
+<ul>
+  <li>项目B的pom:</li>
+</ul>
+
+<div class="language-xml highlighter-rouge"><pre class="highlight"><code><span class="nt">&lt;dependency&gt;</span>
+  <span class="nt">&lt;groupId&gt;</span>groupC<span class="nt">&lt;/groupId&gt;</span>
+  <span class="nt">&lt;artifactId&gt;</span>artifactC<span class="nt">&lt;/artifactId&gt;</span>
+  <span class="nt">&lt;version&gt;</span>0.2.0<span class="nt">&lt;/version&gt;</span>   
+<span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+</div>
+
+<p>项目X在最终发布的时候,会出现如下几种情况:</p>
+
+<ol>
+  <li>使用项目C的0.1.0版本。由于项目B是使用0.2.0版本编译和测试的,那么组件B可能无法正常工作。比如项目B使用了0.2.0提供的新接口。</li>
+  <li>使用项目C的0.2.0版本。由于项目A是使用0.1.0版本编译和测试的,那么组件A可能无法正常工作。比如0.2.0版本和0.1.0不兼容,并且项目A恰好使用了这些不兼容的接口。</li>
+</ol>
+
+<p>可以看出,如果项目A和项目B使用的C组件存在接口不兼容的情况,无论怎么调整,项目X都无法正常工作,这个时候必须修改项目A的代码,使用和B同样的或者兼容的版本进行测试。进行依赖管理,能够做的事情,通常是保证对于公共组件的依赖,都使用较高的版本。尽管如此,我们通常还是会碰到一系列问题,特别是项目依赖关系非常复杂的情况。</p>
+
+<h2 id="最佳实践">最佳实践</h2>
+<p>很多项目都使用maven提供的dependencyManagement配置来管理依赖关系,保证不会因为引入了新的组件,导致基础组件的版本发生变更,出现漏测试的情况。该机制在Spring boot、ServiceComb等开源项目中广泛采用。对于需要提供额外三方软件使用清单的商用产品,这种管理方式可以增强认证信息的准确性。以ServiceComb为例,该项目引入的所有的三方件的版本都统一在:<br />
+ <a href="https://github.com/ServiceComb/ServiceComb-Java-Chassis/blob/master/java-chassis-dependencies/pom.xml">https://github.com/ServiceComb/ServiceComb-Java-Chassis/blob/master/java-chassis-dependencies/pom.xml</a> <br />
+管理,其他的子模块都不配置三方件的版本号,从而每个子模块依赖的三方件版本都是同一个版本,即使他们依赖的模块间接依赖了不同的三方件版本。<br />
+这种机制给使用者也带来了一定的好处,使用者可以采用dependencyManagement来定义自己的三方组件依赖关系,定义的时候,通过import方式继承。比如使用ServiceComb的微服务,可以采用如下方式管理依赖关系:</p>
+
+<div class="language-xml highlighter-rouge"><pre class="highlight"><code><span class="nt">&lt;dependencyManagement&gt;</span>
+  <span class="nt">&lt;dependencies&gt;</span>
+    <span class="nt">&lt;dependency&gt;</span>
+      <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+      <span class="nt">&lt;artifactId&gt;</span>java-chassis-dependencies<span class="nt">&lt;/artifactId&gt;</span>
+      <span class="nt">&lt;version&gt;</span>0.2.0<span class="nt">&lt;/version&gt;</span>
+      <span class="nt">&lt;type&gt;</span>pom<span class="nt">&lt;/type&gt;</span>
+      <span class="nt">&lt;scope&gt;</span>import<span class="nt">&lt;/scope&gt;</span>
+      <span class="nt">&lt;/dependency&gt;</span>
+    <span class="nt">&lt;/dependencies&gt;</span>
+<span class="nt">&lt;/dependencyManagement&gt;</span>
+</code></pre>
+</div>
+
+<h2 id="一个复杂的例子">一个复杂的例子</h2>
+<p>这个例子是在业务代码中使用Spring Boot、Spring Cloud、ServiceComb开源组件和ServiceComb商用组件的复杂场景。业务使用Spring Boot开发,并且启用了ServiceComb功能。可以通过下面的配置管理依赖关系。通过调整3个组件的顺序,决定优先使用哪些三方件。常见的业务场景有:</p>
+
+<ul>
+  <li>Spring Cloud依赖于Spring Boot,业务发现Spring Boot的bug,并升级了Spring boot,但是Spring Cloud没有配套对应版本的新版本。在Spring Boot接口兼容的情况下,可以将Spring Boot的依赖放到Spring Cloud前面,从而达到独立升级Spring Boot的目的。</li>
+  <li>Spring Cloud发现了bug,但是修复该bug的版本同时升级了Spring Boot,业务当前有其他原因不能使用Spring Boot的新版本,这个时候,可以将Spring Boot的依赖放到前面,保证了不会由于升级Spring Cloud,而引入Spring Boot新的版本。</li>
+</ul>
+
+<div class="language-xml highlighter-rouge"><pre class="highlight"><code>    <span class="nt">&lt;dependencyManagement&gt;</span>
+		<span class="nt">&lt;dependencies&gt;</span>
+		  <span class="nt">&lt;dependency&gt;</span>
+			<span class="nt">&lt;groupId&gt;</span>org.springframework.boot<span class="nt">&lt;/groupId&gt;</span>
+			<span class="nt">&lt;artifactId&gt;</span>spring-boot-dependencies<span class="nt">&lt;/artifactId&gt;</span>
+			<span class="nt">&lt;version&gt;</span>1.5.6.RELEASE<span class="nt">&lt;/version&gt;</span>
+			<span class="nt">&lt;type&gt;</span>pom<span class="nt">&lt;/type&gt;</span>
+			<span class="nt">&lt;scope&gt;</span>import<span class="nt">&lt;/scope&gt;</span>
+		  <span class="nt">&lt;/dependency&gt;</span>
+		  <span class="nt">&lt;dependency&gt;</span>
+			<span class="nt">&lt;groupId&gt;</span>org.springframework.cloud<span class="nt">&lt;/groupId&gt;</span>
+			<span class="nt">&lt;artifactId&gt;</span>spring-cloud-dependencies<span class="nt">&lt;/artifactId&gt;</span>
+			<span class="nt">&lt;version&gt;</span>Dalston.SR2<span class="nt">&lt;/version&gt;</span>
+		        <span class="nt">&lt;type&gt;</span>pom<span class="nt">&lt;/type&gt;</span>
+			<span class="nt">&lt;scope&gt;</span>import<span class="nt">&lt;/scope&gt;</span>
+		  <span class="nt">&lt;/dependency&gt;</span>
+		  <span class="nt">&lt;dependency&gt;</span>
+			<span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+			<span class="nt">&lt;artifactId&gt;</span>java-chassis-dependencies<span class="nt">&lt;/artifactId&gt;</span>
+			<span class="nt">&lt;version&gt;</span>0.2.0<span class="nt">&lt;/version&gt;</span>
+			<span class="nt">&lt;type&gt;</span>pom<span class="nt">&lt;/type&gt;</span>
+			<span class="nt">&lt;scope&gt;</span>import<span class="nt">&lt;/scope&gt;</span>
+		  <span class="nt">&lt;/dependency&gt;</span>
+		  <span class="nt">&lt;dependency&gt;</span>
+			<span class="nt">&lt;groupId&gt;</span>com.huawei.paas.cse<span class="nt">&lt;/groupId&gt;</span>
+			<span class="nt">&lt;artifactId&gt;</span>cse-dependency<span class="nt">&lt;/artifactId&gt;</span>
+			<span class="nt">&lt;version&gt;</span>2.1.1<span class="nt">&lt;/version&gt;</span>
+			<span class="nt">&lt;type&gt;</span>pom<span class="nt">&lt;/type&gt;</span>
+			<span class="nt">&lt;scope&gt;</span>import<span class="nt">&lt;/scope&gt;</span>
+		  <span class="nt">&lt;/dependency&gt;</span>
+		<span class="nt">&lt;/dependencies&gt;</span>
+	<span class="nt">&lt;/dependencyManagement&gt;</span>
+</code></pre>
+</div>
+
+<h2 id="总结">总结</h2>
+<p>上面列举了依赖关系管理的最佳实践。在配套不同组件进行业务代码开发时,如果碰到ClassNotFoundException、NoSuchMethodException等异常,可以通过IDE(比如eclipse)或者mvn dependency:tree命令来分析是否由于依赖关系错误,引入了某些三方件较老的版本,然后都可以利用dependencyManagement机制来强制约束三方件的版本号。正如最开始指出的,任何的三方件升级都可能存在风险,并且有些时候会出现无法解决,需要修改依赖组件代码的情况。一个好的实践是进行持续的集成,并增加适当的测试用例,尽早发现问题和解决依赖关系管理引入的接口不兼容问题。我们建议开发者能够结合上面的例子,适当调整下各个组件的顺序,观察一个项目实际使用的三方件版本的变化,深刻理解dependencyManagement的作用原理,这样能够帮助快速解决开发过程中碰到的ClassNotFoundExcep
 tion、NoSuchMethodException等问题。</p>
+
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+  
+
+
+  
+  
+  
+
+  <p class="page__taxonomy">
+    <strong><i class="fa fa-fw fa-tags" aria-hidden="true"></i> 标签: </strong>
+    <span itemprop="keywords">
+    
+      
+      
+      <a href="/tags/#maven" class="page__taxonomy-item" rel="tag">maven</a>
+    
+    </span>
+  </p>
+
+
+
+
+
+        
+          
+            
+              <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> 最新的:</strong> <time datetime="2017-09-14">2017年9月14日</time></p>
+            
+          
+        
+      </footer>
+
+      <section class="page__share">
+  
+    <h4 class="page__share-title">分享</h4>
+  
+
+  <a href="https://twitter.com/intent/tweet?via=ServiceComb&text=使用maven管理复杂依赖关系的技巧 /cn/docs/maven_dependency_management/" class="btn btn--twitter" title="分享 Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
+
+  <a href="https://www.facebook.com/sharer/sharer.php?u=/cn/docs/maven_dependency_management/" class="btn btn--facebook" title="分享 Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
+
+  <a href="https://plus.google.com/share?url=/cn/docs/maven_dependency_management/" class="btn btn--google-plus" title="分享 Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
+
+  <a href="https://www.linkedin.com/shareArticle?mini=true&url=/cn/docs/maven_dependency_management/" class="btn btn--linkedin" title="分享 LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
+</section>
+
+
+      
+  <nav class="pagination">
+    
+      <a href="/cn/docs/distributed_saga_1/" class="pagination--pager" title="ServiceComb中的数据最终一致性方案 - part 1
+">向前</a>
+    
+    
+      <a href="/cn/docs/performance-test-on-seckill-with-jmeter/" class="pagination--pager" title="使用JMeter对秒杀示例进行性能测试
+">向后</a>
+    
+  </nav>
+
+
+    </div>
+
+    
+      <div class="page__comments">
+  
+  
+    <section id="static-comments">
+      
+        <!-- Start static comments -->
+        <div class="js-comments">
+          
+        </div>
+        <!-- End static comments -->
+
+        <!-- Start new comment form -->
+        <h4 class="page__comments-title">留下评论</h4>
+        <p class="small">您的电子邮箱地址并不会被展示。请填写标记为必须的字段。 <span class="required">*</span></p>
+        <form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/ServiceComb/servicesomb.github.io/master">
+          <div class="form__spinner">
+            <i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
+            <span class="sr-only">正在加载...</span>
+          </div>
+
+          <fieldset>
+            <label for="comment-form-message">评论 <small class="required">*</small></label>
+            <textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
+            <div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">Markdown语法已支持。</a></div>
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-name">姓名 <small class="required">*</small></label>
+            <input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-email">电子邮箱 <small class="required">*</small></label>
+            <input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-url">网站(可选)</label>
+            <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
+          </fieldset>
+          <fieldset class="hidden" style="display: none;">
+            <input type="hidden" name="options[slug]" value="maven-dependency-management">
+            <label for="comment-form-location">Not used. Leave blank if you are a human.</label>
+            <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
+          </fieldset>
+          <!-- Start comment form alert messaging -->
+          <p class="hidden js-notice">
+            <strong class="js-notice-text"></strong>
+          </p>
+          <!-- End comment form alert messaging -->
+          <fieldset>
+            <button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--large">提交评论</button>
+          </fieldset>
+        </form>
+        <!-- End new comment form -->
+      
+    </section>
+  
+</div>
+
+    
+  </article>
+
+  
+  
+    <div class="page__related">
+      <h4 class="page__related-title">猜您还喜欢</h4>
+      <div class="grid__wrapper">
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/jira_beginner_guide/" rel="permalink">老司机带你刷任务 - ServiceComb JIRA入门指南
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">ServiceComb JIRA入门指南
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/how-to-reform-a-legacy-system/" rel="permalink">最头疼的遗留系统该如何改造?
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+      </div>
+    </div>
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _posts/cn/2017-09-14-maven-dependency-management.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_posts/cn/2017-09-14-maven-dependency-management.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  
+  <script>
+    (function ($) {
+    var $comments = $('.js-comments');
+
+    $('#new_comment').submit(function () {
+      var form = this;
+
+      $(form).addClass('disabled');
+      $('#comment-form-submit').html('<i class="fa fa-spinner fa-spin fa-fw"></i> 正在加载...');
+
+      $.ajax({
+        type: $(this).attr('method'),
+        url: $(this).attr('action'),
+        data: $(this).serialize(),
+        contentType: 'application/x-www-form-urlencoded',
+        success: function (data) {
+          $('#comment-form-submit').html('已提交');
+          $('.page__comments-form .js-notice').removeClass('notice--danger');
+          $('.page__comments-form .js-notice').addClass('notice--success');
+          showAlert('感谢您的评论!被批准后它会立即在此站点展示。');
+        },
+        error: function (err) {
+          console.log(err);
+          $('#comment-form-submit').html('提交评论');
+          $('.page__comments-form .js-notice').removeClass('notice--success');
+          $('.page__comments-form .js-notice').addClass('notice--danger');
+          showAlert('很抱歉,您的提交存在错误。请确保所有必填字段都已填写正确,然后再试一次。');
+          $(form).removeClass('disabled');
+        }
+      });
+
+      return false;
+    });
+
+    function showAlert(message) {
+      $('.page__comments-form .js-notice').removeClass('hidden');
+      $('.page__comments-form .js-notice-text').html(message);
+    }
+  })(jQuery);
+  </script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/docs/performance-test-on-seckill-with-jmeter/index.html
----------------------------------------------------------------------
diff --git a/content/cn/docs/performance-test-on-seckill-with-jmeter/index.html b/content/cn/docs/performance-test-on-seckill-with-jmeter/index.html
new file mode 100644
index 0000000..453dc01
--- /dev/null
+++ b/content/cn/docs/performance-test-on-seckill-with-jmeter/index.html
@@ -0,0 +1,886 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>使用JMeter对秒杀示例进行性能测试 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="介绍如何使用JMeter进行性能测试以及获取秒杀示例的性能基线">
+
+
+
+
+<meta name="author" content="Yangyong Zheng">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="使用JMeter对秒杀示例进行性能测试">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/performance-test-on-seckill-with-jmeter/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/performance-test-on-seckill-with-jmeter/">
+
+
+
+  <meta property="og:description" content="介绍如何使用JMeter进行性能测试以及获取秒杀示例的性能基线">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="使用JMeter对秒杀示例进行性能测试">
+  <meta name="twitter:description" content="介绍如何使用JMeter进行性能测试以及获取秒杀示例的性能基线">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+    <meta name="twitter:creator" content="@">
+  
+
+
+
+  
+
+  
+
+
+
+
+
+  <meta property="og:type" content="article">
+  <meta property="article:published_time" content="2017-09-15T00:00:00+08:00">
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/docs/performance-test-on-seckill-with-jmeter/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+
+<div itemscope itemtype="http://schema.org/Person">
+
+  
+
+  <div class="author__content">
+    <h3 class="author__name" itemprop="name">Yangyong Zheng</h3>
+    
+      <p class="author__bio" itemprop="description">
+	    
+	      
+	        Fast Action, do not ask
+	      
+	    
+      </p>
+    
+  </div>
+
+  <div class="author__urls-wrapper">
+    <button class="btn btn--inverse">关注</button>
+    <ul class="author__urls social-icons">
+      
+
+      
+        <li>
+          <a href="https://zhengyangyong.github.io" itemprop="url">
+            <i class="fa fa-fw fa-chain" aria-hidden="true"></i> 网站
+          </a>
+        </li>
+      
+
+      
+        <li>
+          <a href="mailto:yangyong.zheng@huawei.com">
+            <meta itemprop="email" content="yangyong.zheng@huawei.com" />
+            <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> 电子邮箱
+          </a>
+        </li>
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      <!--
+  <li>
+    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs">
+      <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link
+    </a>
+  </li>
+-->
+    </ul>
+  </div>
+</div>
+
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="使用JMeter对秒杀示例进行性能测试">
+    <meta itemprop="description" content="介绍如何使用JMeter进行性能测试以及获取秒杀示例的性能基线">
+    <meta itemprop="datePublished" content="September 15, 2017">
+    <meta itemprop="dateModified" content="September 15, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">使用JMeter对秒杀示例进行性能测试
+</h1>
+            
+              <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <h2 id="背景">背景</h2>
+<p>  <a href="https://github.com/ServiceComb/seckill">秒杀</a>是我们ServiceComb开源团队以领域驱动设计(<a href="https://en.wikipedia.org/wiki/Domain-driven_design">DDD</a>)为背景,从零开始构建一个微服务架构的示例项目;在《秒杀开发历程》系列博文中提到它作为一个高并发压力场景的应用,采用了<a href="https://docs.microsoft.com/en-us/azure/architecture/patterns/cqrs">CQRS</a>模式构建,因此我们将使用<a href="http://jmeter.apache.org/">JMeter</a>来对其进行性能评估。</p>
+
+<h2 id="制定用户行为模型">制定用户行为模型</h2>
+<p>  因为秒杀的场景在现实生活中非常常见,所以用户行为模型非常容易设计:</p>
+<ol>
+  <li>客户不停的刷秒杀活动,直到刷出一个正在进行的秒杀活动;</li>
+  <li>刷出了秒杀活动后,马上请求秒杀优惠券;</li>
+  <li>无论是否成功,客户会稍后查询一次自己已经拥有的优惠券确定优惠券是否进入自己的账号。</li>
+</ol>
+
+<p>  我们还需要一个管理员用户,隔一段时间就创建发布秒杀活动,当然活动包含的优惠券数量将会远少于客户的数量。
+  
+  用户行为模型在JMeter中体现为脚本逻辑,完成的脚本逻辑如下:</p>
+
+<p><img src="/assets/images/performance-test-on-seckill-with-jmeter-script.png" alt="图1 脚本模型" class="align-center" /></p>
+
+<p>  脚本文件已经托管至秒杀项目中,可直接获取:</p>
+
+<div class="language-bash highlighter-rouge"><pre class="highlight"><code>git clone https://github.com/ServiceComb/seckill
+<span class="nb">cd </span>seckill/performance-test/script
+</code></pre>
+</div>
+
+<h2 id="性能测试环境">性能测试环境</h2>
+<p>  我们调来了两台云服务器进行性能测试,角色和配置如下:</p>
+<h3 id="秒杀服务器配置">秒杀服务器配置</h3>
+<p>  承载秒杀示例所有的微服务和中间件,包括四个微服务(Admin、Command、Event和Query)、两个数据库(ReadDB和WriteDB)和一个Message Broker(ActiveMQ)。</p>
+
+<table>
+  <thead>
+    <tr>
+      <th>配置项</th>
+      <th>配置值</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td>CPU</td>
+      <td>Intel Xeon E5-2690 3.0GHz * 16</td>
+    </tr>
+    <tr>
+      <td>MEM</td>
+      <td>64GB</td>
+    </tr>
+    <tr>
+      <td>OS</td>
+      <td>Ubuntu 16.04.2 LTS</td>
+    </tr>
+  </tbody>
+</table>
+
+<p>  为了能够便于配置和启动示例系统,我们采用《秒杀开发历程(三)》中的一键启动模式拉起所有的服务,因此Docker升级为当前最新版17.06.2-ce,能够支持配置Container使用CPU和内存的大小限制,以Admin微服务为例:
+  </p>
+<div class="language-yaml highlighter-rouge"><pre class="highlight"><code>  <span class="s">admin-service</span><span class="pi">:</span>
+    <span class="s">mem_limit</span><span class="pi">:</span> <span class="s">4096m</span>
+    <span class="s">cpu_count</span><span class="pi">:</span> <span class="s">4</span>
+    <span class="s">cpu_percent</span><span class="pi">:</span> <span class="s">50</span>
+    <span class="s">image</span><span class="pi">:</span> <span class="s2">"</span><span class="s">seckill-admin-service:0.2.0-SNAPSHOT"</span>
+    <span class="s">hostname</span><span class="pi">:</span> <span class="s">admin-service</span>
+    <span class="s">links</span><span class="pi">:</span>
+      <span class="pi">-</span> <span class="s2">"</span><span class="s">mysql-write-db:write_db.servicecomb.io"</span>
+    <span class="s">environment</span><span class="pi">:</span>
+      <span class="pi">-</span> <span class="s">JAVA_OPTS=-Dspring.profiles.active=prd -Dendpoints.shutdown.enabled=true</span>
+    <span class="s">ports</span><span class="pi">:</span>
+      <span class="pi">-</span> <span class="s2">"</span><span class="s">8081:8081"</span>
+</code></pre>
+</div>
+
+<h3 id="加压机配置">加压机配置</h3>
+<p>  加压机与秒杀服务器处于同一网络环境中,配置如下:
+  
+| 配置项  | 配置值                            |
+| —- | —————————— |
+| CPU  | Intel Xeon E5-2690 3.0GHz * 16 |
+| MEM  | 32GB                           |
+| OS   | Ubuntu 16.04.2 LTS             |</p>
+
+<h2 id="启动测试">启动测试</h2>
+<p>  我们设定测试场景为200客户,每隔1秒启动一个新客户;1个管理员每隔10秒发布1个秒杀活动,一共发布160次,每个秒杀活动包含50张优惠券,即一共投放8000张优惠券。整个测试持续半个小时。
+  
+  现在,我们切换到性能测试脚本目录下,执行下面的命令启动测试:
+  </p>
+<div class="language-bash highlighter-rouge"><pre class="highlight"><code>jmeter -n -t seckill.jmx -l log.jtl
+</code></pre>
+</div>
+
+<h2 id="测试结果">测试结果</h2>
+<p>  测试完毕后通过下面的命令分析测试结果日志数据,请将<report folder="">替换为你的本地目录:</report></p>
+
+<div class="language-bash highlighter-rouge"><pre class="highlight"><code>jmeter -g log.jtl -o &lt;report folder&gt;
+</code></pre>
+</div>
+
+<p>  我们需要先验证测试结果的正确性,查看数据统计图:</p>
+
+<p><img src="/assets/images/performance-test-on-seckill-with-jmeter-statistics.png" alt="图2 事务统计" class="align-center" /></p>
+
+<p>  其中秒杀的失败率在96.45%,原因是Query对于活动的秒杀活动采用的是0.5秒刷新缓存的策略,在活动中的优惠券被秒杀一空下架前,短暂的时间内仍然能够查询到这个活动;架构中采用的<a href="https://docs.microsoft.com/en-us/azure/architecture/patterns/cqrs">CQRS</a>模式只能保证最终一致性,并不能保证实时一致性。
+  
+  成功秒杀的次数为225264 - 217264 = 8000,正好等于我们设定的优惠券投放量,其他事务的失败率均为0%,因此测试结果正确。</p>
+
+<h3 id="吞吐能力">吞吐能力</h3>
+<p>  秒杀整体吞吐能力如下图:</p>
+
+<p><img src="/assets/images/performance-test-on-seckill-with-jmeter-tps-all.png" alt="图3 整体吞吐能力" class="align-center" /></p>
+
+<p>  可以看到查询活跃的秒杀活动(刷券)事务处理量最高,稳定在4000左右,其他因为业务比例的原因较低,去掉查询活跃的秒杀活动事务后如下图:</p>
+
+<p><img src="/assets/images/performance-test-on-seckill-with-jmeter-tps-less.png" alt="图4 秒杀和优惠券查询" class="align-center" /></p>
+
+<p>  秒杀和优惠券查询之间的差值是由于存在秒杀失败造成的,我们的用户行为模型是无论秒杀成功与否都会进行一次优惠券查询。</p>
+
+<h3 id="响应时间">响应时间</h3>
+<p>  事务的响应时间我们可以看下面两个图:</p>
+
+<p><img src="/assets/images/performance-test-on-seckill-with-jmeter-latencies.png" alt="图5 响应时间" class="align-center" /></p>
+
+<p><img src="/assets/images/performance-test-on-seckill-with-jmeter-time-percentiles.png" alt="图6 响应时间分布" class="align-center" /></p>
+
+<p>  75%的事务处理时间都在10ms以下,整体平均响应时间处于50ms以下。</p>
+
+<h2 id="瓶颈分析">瓶颈分析</h2>
+<p>  依据执行过程中对于测试资源的观察,加压机CPU使用率基本已满(200线程并发),服务器CPU使用率低于20%,其他资源使用率很低。</p>
+
+<h2 id="总结">总结</h2>
+<p>  通过这次性能测试,我们得知秒杀示例在使用一台普通服务器配置能够达到总体5000以上的TPS还能够保持较低的资源使用率,表现出良好的性能;未来我们会将秒杀示例部署在K8S群集中并配置弹性伸缩进行压力测试,您可以阅读我们<a href="http://servicecomb.io/cn/docs/stress-test-on-company-with-jmeter-in-k8s/">《在Kubernetes集群中使用JMeter对Company示例进行压力测试》</a>这篇文章展望。</p>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+  
+
+
+  
+  
+  
+
+  <p class="page__taxonomy">
+    <strong><i class="fa fa-fw fa-tags" aria-hidden="true"></i> 标签: </strong>
+    <span itemprop="keywords">
+    
+      
+      
+      <a href="/tags/#seckill" class="page__taxonomy-item" rel="tag">seckill</a><span class="sep">, </span>
+    
+      
+      
+      <a href="/tags/#%E5%8E%8B%E5%8A%9B%E6%B5%8B%E8%AF%95" class="page__taxonomy-item" rel="tag">压力测试</a>
+    
+    </span>
+  </p>
+
+
+
+
+
+        
+          
+            
+              <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> 最新的:</strong> <time datetime="2017-09-15">2017年9月15日</time></p>
+            
+          
+        
+      </footer>
+
+      <section class="page__share">
+  
+    <h4 class="page__share-title">分享</h4>
+  
+
+  <a href="https://twitter.com/intent/tweet?via=ServiceComb&text=使用JMeter对秒杀示例进行性能测试 /cn/docs/performance-test-on-seckill-with-jmeter/" class="btn btn--twitter" title="分享 Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
+
+  <a href="https://www.facebook.com/sharer/sharer.php?u=/cn/docs/performance-test-on-seckill-with-jmeter/" class="btn btn--facebook" title="分享 Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
+
+  <a href="https://plus.google.com/share?url=/cn/docs/performance-test-on-seckill-with-jmeter/" class="btn btn--google-plus" title="分享 Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
+
+  <a href="https://www.linkedin.com/shareArticle?mini=true&url=/cn/docs/performance-test-on-seckill-with-jmeter/" class="btn btn--linkedin" title="分享 LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
+</section>
+
+
+      
+  <nav class="pagination">
+    
+      <a href="/cn/docs/maven_dependency_management/" class="pagination--pager" title="使用maven管理复杂依赖关系的技巧
+">向前</a>
+    
+    
+      <a href="/docs/distributed_saga_2/" class="pagination--pager" title="Eventual Data Consistency Solution in ServiceComb - part 2
+">向后</a>
+    
+  </nav>
+
+
+    </div>
+
+    
+      <div class="page__comments">
+  
+  
+    <section id="static-comments">
+      
+        <!-- Start static comments -->
+        <div class="js-comments">
+          
+        </div>
+        <!-- End static comments -->
+
+        <!-- Start new comment form -->
+        <h4 class="page__comments-title">留下评论</h4>
+        <p class="small">您的电子邮箱地址并不会被展示。请填写标记为必须的字段。 <span class="required">*</span></p>
+        <form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/ServiceComb/servicesomb.github.io/master">
+          <div class="form__spinner">
+            <i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
+            <span class="sr-only">正在加载...</span>
+          </div>
+
+          <fieldset>
+            <label for="comment-form-message">评论 <small class="required">*</small></label>
+            <textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
+            <div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">Markdown语法已支持。</a></div>
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-name">姓名 <small class="required">*</small></label>
+            <input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-email">电子邮箱 <small class="required">*</small></label>
+            <input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-url">网站(可选)</label>
+            <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
+          </fieldset>
+          <fieldset class="hidden" style="display: none;">
+            <input type="hidden" name="options[slug]" value="performance-test-on-seckill-with-jmeter">
+            <label for="comment-form-location">Not used. Leave blank if you are a human.</label>
+            <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
+          </fieldset>
+          <!-- Start comment form alert messaging -->
+          <p class="hidden js-notice">
+            <strong class="js-notice-text"></strong>
+          </p>
+          <!-- End comment form alert messaging -->
+          <fieldset>
+            <button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--large">提交评论</button>
+          </fieldset>
+        </form>
+        <!-- End new comment form -->
+      
+    </section>
+  
+</div>
+
+    
+  </article>
+
+  
+  
+    <div class="page__related">
+      <h4 class="page__related-title">猜您还喜欢</h4>
+      <div class="grid__wrapper">
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/jira_beginner_guide/" rel="permalink">老司机带你刷任务 - ServiceComb JIRA入门指南
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">ServiceComb JIRA入门指南
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/how-to-reform-a-legacy-system/" rel="permalink">最头疼的遗留系统该如何改造?
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+      </div>
+    </div>
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _posts/cn/2017-09-15-performance-test-on-seckill-with-jmeter.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_posts/cn/2017-09-15-performance-test-on-seckill-with-jmeter.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  
+  <script>
+    (function ($) {
+    var $comments = $('.js-comments');
+
+    $('#new_comment').submit(function () {
+      var form = this;
+
+      $(form).addClass('disabled');
+      $('#comment-form-submit').html('<i class="fa fa-spinner fa-spin fa-fw"></i> 正在加载...');
+
+      $.ajax({
+        type: $(this).attr('method'),
+        url: $(this).attr('action'),
+        data: $(this).serialize(),
+        contentType: 'application/x-www-form-urlencoded',
+        success: function (data) {
+          $('#comment-form-submit').html('已提交');
+          $('.page__comments-form .js-notice').removeClass('notice--danger');
+          $('.page__comments-form .js-notice').addClass('notice--success');
+          showAlert('感谢您的评论!被批准后它会立即在此站点展示。');
+        },
+        error: function (err) {
+          console.log(err);
+          $('#comment-form-submit').html('提交评论');
+          $('.page__comments-form .js-notice').removeClass('notice--success');
+          $('.page__comments-form .js-notice').addClass('notice--danger');
+          showAlert('很抱歉,您的提交存在错误。请确保所有必填字段都已填写正确,然后再试一次。');
+          $(form).removeClass('disabled');
+        }
+      });
+
+      return false;
+    });
+
+    function showAlert(message) {
+      $('.page__comments-form .js-notice').removeClass('hidden');
+      $('.page__comments-form .js-notice-text').html(message);
+    }
+  })(jQuery);
+  </script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/docs/quick-start-advance/distributed-tracing/index.html
----------------------------------------------------------------------
diff --git a/content/cn/docs/quick-start-advance/distributed-tracing/index.html b/content/cn/docs/quick-start-advance/distributed-tracing/index.html
new file mode 100644
index 0000000..78414fc
--- /dev/null
+++ b/content/cn/docs/quick-start-advance/distributed-tracing/index.html
@@ -0,0 +1,576 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>分布式调用链追踪 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="介绍如何在体质指数应用中使用ServiceComb提供的分布式追踪能力">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="分布式调用链追踪">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/quick-start-advance/distributed-tracing/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/quick-start-advance/distributed-tracing/">
+
+
+
+  <meta property="og:description" content="介绍如何在体质指数应用中使用ServiceComb提供的分布式追踪能力">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="分布式调用链追踪">
+  <meta name="twitter:description" content="介绍如何在体质指数应用中使用ServiceComb提供的分布式追踪能力">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=/docs/quick-start-advance/distributed-tracing/>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">切换菜单</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/docs/quick-start/"><span class="nav__sub-title nav__sub-title-with-url">快速入门</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/docs/quick-start-bmi/"><span class="nav__sub-title nav__sub-title-with-url">微服务应用快速开发</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/docs/quick-start-advance/"><span class="nav__sub-title nav__sub-title-with-url">微服务开发进阶</span></a>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/docs/quick-start-advance/load-balance/" class="">负载均衡</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/docs/quick-start-advance/flow-control/" class="">流量控制</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/docs/quick-start-advance/service-management/" class="">服务治理</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/cn/docs/quick-start-advance/distributed-tracing/" class="active">分布式调用链追踪</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/cn/docs/quick-start-dataconsistency/"><span class="nav__sub-title nav__sub-title-with-url">数据一致性解决方案</span></a>
+        
+
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="分布式调用链追踪">
+    <meta itemprop="description" content="介绍如何在体质指数应用中使用ServiceComb提供的分布式追踪能力">
+    
+    <meta itemprop="dateModified" content="September 03, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">分布式调用链追踪
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> 在本页上</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#前言" id="markdown-toc-前言">前言</a></li>
+  <li><a href="#启用" id="markdown-toc-启用">启用</a></li>
+  <li><a href="#验证" id="markdown-toc-验证">验证</a></li>
+  <li><a href="#下一步" id="markdown-toc-下一步">下一步</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<p>分布式调用链追踪用于有效地监控微服务的网络延时并可视化微服务中的数据流转。本指南将展示如何在 <em>体质指数</em> 应用中使用 <strong>ServiceComb</strong> 提供的分布式调用链追踪能力。</p>
+
+<h2 id="前言">前言</h2>
+
+<p>在您进一步阅读之前,请确保您已阅读了<a href="/cn/docs/quick-start-bmi/">微服务应用快速开发指南</a>,并已成功运行体质指数微服务。</p>
+
+<h2 id="启用">启用</h2>
+
+<ol>
+  <li>
+    <p>在 <em>体质指数计算器</em> 的 <code class="highlighter-rouge">pom.xml</code> 文件中添加依赖项:</p>
+
+    <div class="language-xml highlighter-rouge"><pre class="highlight"><code>    <span class="nt">&lt;dependency&gt;</span>
+      <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+      <span class="nt">&lt;artifactId&gt;</span>handler-tracing-zipkin<span class="nt">&lt;/artifactId&gt;</span>
+    <span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p>在 <em>体质指数计算器</em> 的 <code class="highlighter-rouge">microservice.yaml</code> 文件中添加分布式追踪的处理链:</p>
+
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">cse</span><span class="pi">:</span>
+  <span class="s">handler</span><span class="pi">:</span>
+    <span class="s">chain</span><span class="pi">:</span>
+      <span class="s">Provider</span><span class="pi">:</span>
+        <span class="s">default</span><span class="pi">:</span> <span class="s">tracing-provider</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p>在 <em>体质指数界面</em> 的 <code class="highlighter-rouge">pom.xml</code> 文件中添加依赖项:</p>
+
+    <div class="language-xml highlighter-rouge"><pre class="highlight"><code>    <span class="nt">&lt;dependency&gt;</span>
+      <span class="nt">&lt;groupId&gt;</span>io.servicecomb<span class="nt">&lt;/groupId&gt;</span>
+      <span class="nt">&lt;artifactId&gt;</span>spring-cloud-zuul-zipkin<span class="nt">&lt;/artifactId&gt;</span>
+    <span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+    </div>
+  </li>
+</ol>
+
+<p>体质指数应用中已配置好了上述配置项,您只需执行以下几步即可:</p>
+
+<ol>
+  <li>
+    <p>使用 Docker 运行 <em>Zipkin</em> 分布式追踪服务:</p>
+
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code>docker run -d -p 9411:9411 openzipkin/zipkin
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p>重启 <em>体质指数计算器</em> 微服务:</p>
+
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code>mvn spring-boot:run -Drun.jvmArguments<span class="o">=</span><span class="s2">"-Dcse.handler.chain.Provider.default=tracing-provider"</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p>重启 <em>体质指数界面</em> 微服务:</p>
+
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code>mvn spring-boot:run -Drun.jvmArguments<span class="o">=</span><span class="s2">"-Dservicecomb.tracing.enabled=true"</span>
+</code></pre>
+    </div>
+  </li>
+</ol>
+
+<h2 id="验证">验证</h2>
+
+<ol>
+  <li>
+    <p>访问 <a>http://localhost:8889</a> ,在身高和体重栏处输入正数,并点击 <em>Submit</em> 按钮。</p>
+  </li>
+  <li>
+    <p>访问 <a>http://localhost:9411</a> ,查看分布式调用追踪情况,可得下方界面。</p>
+  </li>
+</ol>
+
+<p><img src="/assets/images/distributed-tracing-result.png" alt="分布式追踪效果" class="align-center" /></p>
+
+<h2 id="下一步">下一步</h2>
+
+<ul>
+  <li>
+    <p>了解更多<a href="/cn/users/distributed-tracing/">分布式调用链追踪</a></p>
+  </li>
+  <li>
+    <p>阅读<a href="/cn/docs/tracing-with-servicecomb/">基于 ServiceComb 和 Zipkin 的分布式调用链追踪</a>来进一步了解分布式追踪</p>
+  </li>
+  <li>
+    <p>认识 <a href="/cn/users/"><strong>ServiceComb</strong> 微服务开发框架</a></p>
+  </li>
+  <li>
+    <p>通过 <a href="/cn/docs/linuxcon-workshop-demo/">Company应用</a> 更深入地了解微服务开发</p>
+  </li>
+</ul>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _docs/cn/distributed-tracing.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_docs/cn/distributed-tracing.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>


[12/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/docs/seckill-development-journey-part-III/index.html
----------------------------------------------------------------------
diff --git a/content/docs/seckill-development-journey-part-III/index.html b/content/docs/seckill-development-journey-part-III/index.html
new file mode 100644
index 0000000..6b5e7b4
--- /dev/null
+++ b/content/docs/seckill-development-journey-part-III/index.html
@@ -0,0 +1,823 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>SecKill Develop Journey (III) - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="an introduction how build seckill demo project step by step">
+
+
+
+
+<meta name="author" content="Yangyong Zheng">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="SecKill Develop Journey (III)">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/seckill-development-journey-part-III/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/seckill-development-journey-part-III/">
+
+
+
+  <meta property="og:description" content="an introduction how build seckill demo project step by step">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="SecKill Develop Journey (III)">
+  <meta name="twitter:description" content="an introduction how build seckill demo project step by step">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+    <meta name="twitter:creator" content="@">
+  
+
+
+
+  
+
+  
+
+
+
+
+
+  <meta property="og:type" content="article">
+  <meta property="article:published_time" content="2017-09-07T00:00:00+08:00">
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/docs/seckill-development-journey-part-III/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+
+<div itemscope itemtype="http://schema.org/Person">
+
+  
+
+  <div class="author__content">
+    <h3 class="author__name" itemprop="name">Yangyong Zheng</h3>
+    
+      <p class="author__bio" itemprop="description">
+	    
+        Fast Action, do not ask
+	    
+      </p>
+    
+  </div>
+
+  <div class="author__urls-wrapper">
+    <button class="btn btn--inverse">Follow</button>
+    <ul class="author__urls social-icons">
+      
+
+      
+        <li>
+          <a href="https://zhengyangyong.github.io" itemprop="url">
+            <i class="fa fa-fw fa-chain" aria-hidden="true"></i> Website
+          </a>
+        </li>
+      
+
+      
+        <li>
+          <a href="mailto:yangyong.zheng@huawei.com">
+            <meta itemprop="email" content="yangyong.zheng@huawei.com" />
+            <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> Email
+          </a>
+        </li>
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      <!--
+  <li>
+    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs">
+      <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link
+    </a>
+  </li>
+-->
+    </ul>
+  </div>
+</div>
+
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="SecKill Develop Journey (III)">
+    <meta itemprop="description" content="an introduction how build seckill demo project step by step">
+    <meta itemprop="datePublished" content="September 07, 2017">
+    <meta itemprop="dateModified" content="September 13, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">SecKill Develop Journey (III)
+</h1>
+            
+              <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 minute read
+
+</p>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <p><a href="/docs/seckill-development-journey-part-II/">Previous article</a> we had built a full-featured seckill demo, release it version 0.1.0-RELEASE; now you should find that data persistence is centered on a single database, seckill is high-stress scenario, it’s difficult to meet high-scalable requirement, and as we mentioned at the beginning, micro-service is recommended to have independent storage, so we will start using Event Sourcing implement CQRS pattern to enhance the ability to endure huge requests.</p>
+
+<h2 id="cqrs">CQRS</h2>
+<p>CQRS means Command Query Responsibility Segregation, it’s a powerful design pattern, often implement with Event Sourcing, there has a figure describe it from Microsoft MSDN:</p>
+
+<p><img src="/assets/images/seckill-develop-course-part-III-cqrs.png" alt="Fig-1 CQRS" class="align-center" /></p>
+
+<h2 id="improvement-design">Improvement Design</h2>
+<p>CQRS is read write separation and message-driven best practices, now we focus on the MySQL database:</p>
+<ol>
+  <li>The database should be split into ReadDB and WriteDB,read-intensive Query micro-service and write-intensive Command micro-service should be independent;</li>
+  <li>ReadDB and WriteDB using Event Message drive data synchronization, so we need add a new micro-service named Event(Processor);</li>
+  <li>Message Broker currently has a lot of great implements, such as RabbitMQ, Kafka, etc., because our seckill based on ServiceComb and Spring Boot, in order to be able to quickly build this new feature, we use built-in ActiveMQ, which supports memory queue mode, very easy to build Testing, suitable for agile development approach</li>
+</ol>
+
+<p>Now the latest Architecture below:</p>
+
+<p><img src="/assets/images/seckill-develop-course-part-III-arch-en.png" alt="Fig-2 CQRS improved Architecture" class="align-center" /></p>
+
+<h2 id="improvement-implement">Improvement Implement</h2>
+<h3 id="database-separation">Database Separation</h3>
+<h4 id="writedb">WriteDB</h4>
+<p>Admin micro-serivce maintain Promotion entity;</p>
+
+<p>Command micro-serivce wirte PromotionEvent Value-Object,when recovery Promotion,Relapy PromotionEvent.</p>
+<h4 id="readdb">ReadDB</h4>
+<p>Event micro-service write ActivePromotion Value-Object and Coupon Value-Object;</p>
+
+<p>Query micro-service query ActivePromotion Value-Object and Coupon Value-Object.</p>
+
+<h4 id="command-micro-service-message-publisher-component">Command micro-service Message Publisher component</h4>
+<p>Since the Event Sourcing was not introduced before, the PromotionEvent entity only needed to write to the database directly. Now it is necessary to publish PromotionEvent to Message Broker. Considering that future we will be replaced by Distributed Message Service (DMS) as Message Broker in order to deploy to <a href="http://www.hwclouds.com/">Huawei Cloud</a>, We defined the generic message publish interface:</p>
+<div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">interface</span> <span class="nc">SecKillMessagePublisher</span> <span class="o">{</span>
+  <span class="kt">void</span> <span class="nf">publishMessage</span><span class="o">(</span><span class="n">String</span> <span class="n">messageContent</span><span class="o">);</span>
+<span class="o">}</span>
+</code></pre>
+</div>
+
+<h4 id="event-micro-service-implement">Event micro-service implement</h4>
+<p>Event micro-service subscribe Message Broker in order to get PromotionEvent Message, then depending on the message type convert to ActivePromotion Value-Object operation or Coupon Value-Object operation in ReadDB.</p>
+<ul>
+  <li>Promotion Start Message: create ActivePromotion Value-Object;</li>
+  <li>Promotion Finish Message: delete ActivePromotion Value-Object var Id;</li>
+  <li>
+    <p>Coupon Grabbed Message: create Coupon Value-Object;</p>
+
+    <p>Also considering that future we will be replaced by Distributed Message Service (DMS) as Message Broker in order to deploy to <a href="http://www.hwclouds.com/">Huawei Cloud</a>, We defined the generic message subscribe interface:</p>
+    <div class="language-java highlighter-rouge"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">interface</span> <span class="nc">SecKillMessageSubscriber</span> <span class="o">{</span>
+<span class="kt">void</span> <span class="nf">subscribeMessage</span><span class="o">(</span><span class="n">String</span> <span class="n">messageContent</span><span class="o">);</span>
+<span class="o">}</span>
+</code></pre>
+    </div>
+  </li>
+</ul>
+
+<h4 id="update-of-query-micro-service">Update of Query micro-service</h4>
+<p>After the refactoring of the read and write separation, all activing Promotion are saved in ActivePromotion Value-Object Table, and customers own Coupon are stored in Coupon Value-Object Table, now we can directly query them, no longer need Replay PromotionEvent.</p>
+
+<h2 id="all-in-one-start-up">All-In-One start-up</h2>
+<p>Now, we have complete Event Sourcing architecture refactoring, in order to be easy to start-up, we provide docker compose script, use it pull all services up by one command, see detail at <a href="https://github.com/ServiceComb/seckill">SecKill</a>.</p>
+
+<h3 id="start-up-all-service-in-docker-toolbox">start-up all service in Docker ToolBox</h3>
+
+<p><img src="/assets/images/seckill-develop-course-part-III-seckill-all-in-one.png" alt="Fig-3 SecKill All-in-One" class="align-center" /></p>
+
+<h2 id="reference">Reference</h2>
+<ol>
+  <li><a href="https://docs.microsoft.com/en-us/azure/architecture/patterns/cqrs">Command and Query Responsibility Segregation (CQRS) pattern</a> by Microsoft Azure Team</li>
+  <li><a href="https://msdn.microsoft.com/en-us/library/jj591559.aspx">Introducing Event Sourcing</a> by Microsoft patterns &amp; practices Developer Center</li>
+  <li><a href="https://martinfowler.com/eaaDev/EventSourcing.html">Event Sourcing</a> by Martin Fowler</li>
+</ol>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+  
+
+
+  
+  
+  
+
+  <p class="page__taxonomy">
+    <strong><i class="fa fa-fw fa-tags" aria-hidden="true"></i> Tags: </strong>
+    <span itemprop="keywords">
+    
+      
+      
+      <a href="/tags/#seckill" class="page__taxonomy-item" rel="tag">seckill</a>
+    
+    </span>
+  </p>
+
+
+
+
+
+        
+          
+            
+              <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> Updated:</strong> <time datetime="2017-09-13">September 13, 2017</time></p>
+            
+          
+        
+      </footer>
+
+      <section class="page__share">
+  
+    <h4 class="page__share-title">Share on</h4>
+  
+
+  <a href="https://twitter.com/intent/tweet?via=ServiceComb&text=SecKill Develop Journey (III) /docs/seckill-development-journey-part-III/" class="btn btn--twitter" title="Share on Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
+
+  <a href="https://www.facebook.com/sharer/sharer.php?u=/docs/seckill-development-journey-part-III/" class="btn btn--facebook" title="Share on Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
+
+  <a href="https://plus.google.com/share?url=/docs/seckill-development-journey-part-III/" class="btn btn--google-plus" title="Share on Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
+
+  <a href="https://www.linkedin.com/shareArticle?mini=true&url=/docs/seckill-development-journey-part-III/" class="btn btn--linkedin" title="Share on LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
+</section>
+
+
+      
+  <nav class="pagination">
+    
+      <a href="/cn/docs/seckill-development-journey-part-II/" class="pagination--pager" title="秒杀开发历程(二)
+">Previous</a>
+    
+    
+      <a href="/cn/docs/seckill-development-journey-part-III/" class="pagination--pager" title="秒杀开发历程(三)
+">Next</a>
+    
+  </nav>
+
+
+    </div>
+
+    
+      <div class="page__comments">
+  
+  
+    <section id="static-comments">
+      
+        <!-- Start static comments -->
+        <div class="js-comments">
+          
+        </div>
+        <!-- End static comments -->
+
+        <!-- Start new comment form -->
+        <h4 class="page__comments-title">Leave a Comment</h4>
+        <p class="small">Your email address will not be published. Required fields are marked <span class="required">*</span></p>
+        <form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/ServiceComb/servicesomb.github.io/master">
+          <div class="form__spinner">
+            <i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
+            <span class="sr-only">Loading...</span>
+          </div>
+
+          <fieldset>
+            <label for="comment-form-message">Comment <small class="required">*</small></label>
+            <textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
+            <div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">Markdown is supported.</a></div>
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-name">Name <small class="required">*</small></label>
+            <input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-email">Email address <small class="required">*</small></label>
+            <input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-url">Website (optional)</label>
+            <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
+          </fieldset>
+          <fieldset class="hidden" style="display: none;">
+            <input type="hidden" name="options[slug]" value="seckill-develop-course-part-III">
+            <label for="comment-form-location">Not used. Leave blank if you are a human.</label>
+            <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
+          </fieldset>
+          <!-- Start comment form alert messaging -->
+          <p class="hidden js-notice">
+            <strong class="js-notice-text"></strong>
+          </p>
+          <!-- End comment form alert messaging -->
+          <fieldset>
+            <button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--large">Submit Comment</button>
+          </fieldset>
+        </form>
+        <!-- End new comment form -->
+      
+    </section>
+  
+</div>
+
+    
+  </article>
+
+  
+  
+    <div class="page__related">
+      <h4 class="page__related-title">You May Also Enjoy</h4>
+      <div class="grid__wrapper">
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/jira_beginner_guide/" rel="permalink">老司机带你刷任务 - ServiceComb JIRA入门指南
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">ServiceComb JIRA入门指南
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  less than 1 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/how-to-reform-a-legacy-system/" rel="permalink">最头疼的遗留系统该如何改造?
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  1 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+      </div>
+    </div>
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _posts/2017-09-07-seckill-develop-course-part-III.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_posts/2017-09-07-seckill-develop-course-part-III.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  
+  <script>
+    (function ($) {
+    var $comments = $('.js-comments');
+
+    $('#new_comment').submit(function () {
+      var form = this;
+
+      $(form).addClass('disabled');
+      $('#comment-form-submit').html('<i class="fa fa-spinner fa-spin fa-fw"></i> Loading...');
+
+      $.ajax({
+        type: $(this).attr('method'),
+        url: $(this).attr('action'),
+        data: $(this).serialize(),
+        contentType: 'application/x-www-form-urlencoded',
+        success: function (data) {
+          $('#comment-form-submit').html('Submitted');
+          $('.page__comments-form .js-notice').removeClass('notice--danger');
+          $('.page__comments-form .js-notice').addClass('notice--success');
+          showAlert('Thanks for your comment! It will show on the site once it has been approved.');
+        },
+        error: function (err) {
+          console.log(err);
+          $('#comment-form-submit').html('Submit Comment');
+          $('.page__comments-form .js-notice').removeClass('notice--success');
+          $('.page__comments-form .js-notice').addClass('notice--danger');
+          showAlert('Sorry, there was an error with your submission. Please make sure all required fields have been completed and try again.');
+          $(form).removeClass('disabled');
+        }
+      });
+
+      return false;
+    });
+
+    function showAlert(message) {
+      $('.page__comments-form .js-notice').removeClass('hidden');
+      $('.page__comments-form .js-notice-text').html(message);
+    }
+  })(jQuery);
+  </script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/docs/service-center-ui/index.html
----------------------------------------------------------------------
diff --git a/content/docs/service-center-ui/index.html b/content/docs/service-center-ui/index.html
new file mode 100644
index 0000000..f60f80b
--- /dev/null
+++ b/content/docs/service-center-ui/index.html
@@ -0,0 +1,807 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="cn" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>Service-Center Management UI Console - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="An introduction Service-Center Management Console">
+
+
+
+
+<meta name="author" content="Asif Siddiqui">
+
+<meta property="og:locale" content="cn">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="Service-Center Management UI Console">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/service-center-ui/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/service-center-ui/">
+
+
+
+  <meta property="og:description" content="An introduction Service-Center Management Console">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="Service-Center Management UI Console">
+  <meta name="twitter:description" content="An introduction Service-Center Management Console">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+    <meta name="twitter:creator" content="@asif_diatm">
+  
+
+
+
+  
+
+  
+
+
+
+
+
+  <meta property="og:type" content="article">
+  <meta property="article:published_time" content="2017-10-28T00:00:00+08:00">
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/docs/quick-start/">快速入门</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/users/">用户手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/developers/">开发者手册</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/year-archive/">博文</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/cn/faqs/">常见问题</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            
+            <a href=>English</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">首页 > <a href="/cn/">ServiceComb</a></div>
+      
+  
+
+<div itemscope itemtype="http://schema.org/Person">
+
+  
+
+  <div class="author__content">
+    <h3 class="author__name" itemprop="name">Asif Siddiqui</h3>
+    
+      <p class="author__bio" itemprop="description">
+	    
+	      
+	        Gopher, PaaS and Microservice
+	      
+	    
+      </p>
+    
+  </div>
+
+  <div class="author__urls-wrapper">
+    <button class="btn btn--inverse">关注</button>
+    <ul class="author__urls social-icons">
+      
+
+      
+        <li>
+          <a href="http://asifdxtreme.github.io" itemprop="url">
+            <i class="fa fa-fw fa-chain" aria-hidden="true"></i> 网站
+          </a>
+        </li>
+      
+
+      
+        <li>
+          <a href="mailto:mohammad.asif.siddiqui1@huawei.com">
+            <meta itemprop="email" content="mohammad.asif.siddiqui1@huawei.com" />
+            <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> 电子邮箱
+          </a>
+        </li>
+      
+
+      
+
+      
+        <li>
+          <a href="https://twitter.com/asif_diatm" itemprop="sameAs">
+            <i class="fa fa-fw fa-twitter-square" aria-hidden="true"></i> Twitter
+          </a>
+        </li>
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      <!--
+  <li>
+    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs">
+      <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link
+    </a>
+  </li>
+-->
+    </ul>
+  </div>
+</div>
+
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="Service-Center Management UI Console">
+    <meta itemprop="description" content="An introduction Service-Center Management Console">
+    <meta itemprop="datePublished" content="October 28, 2017">
+    <meta itemprop="dateModified" content="October 30, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">Service-Center Management UI Console
+</h1>
+            
+              <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 分钟 阅读
+
+</p>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <p>Service-Center Management UI Console enables user to view the list of MicroServices registered in SC.
+Users can view the detailed information of their MicroServices, Instances and Schemas.
+Service-Center UI also offers a unique feature of testing the Schemas of their MicroServices from UI, Users 
+can also download the html client for their Schemas.</p>
+
+<h3 id="preview-of-management-console">Preview of Management Console</h3>
+<p><img src="/assets/images/Service-Center-UI-Preview.gif" alt="Preview" class="align-center" /></p>
+
+<h3 id="features">Features</h3>
+<p>Service-Center Management console offers very useful features which makes users easy to use and manage service-center.</p>
+
+<h3 id="dashboard">Dashboard</h3>
+<p>This is the place where you can get the overall information about the services which are registered in your service-center like total number of services, providers, consumers and total instances. You can also get a list of Services which based on their current status.<br />
+<img src="/assets/images/Dashboard.PNG" alt="Dashboard" class="align-center" /></p>
+
+<h3 id="micro-service-list">Micro-Service List</h3>
+<p>This is the place where you can see the basic details of all the services which are registered in Service-Center. You can see the details like MicroService Name, Application Name, Status, Version, Creation time and Instance count. You can also un-register the microservice from Operations Tab if there is no running instances for the microservice.<br />
+<img src="/assets/images/ServiceList.PNG" alt="ServiceList" class="align-center" /></p>
+
+<h3 id="instance-details">Instance Details</h3>
+<p>This is the place where you can see all the current running instances for the MicroService, you can get the list of endpoints and their protocols.<br />
+<img src="/assets/images/InstanceList.PNG" alt="InstanceList" class="align-center" /></p>
+
+<h3 id="provider-list">Provider List</h3>
+<p>This is the place where you can get the list of all the providers for the MicroService.<br />
+<img src="/assets/images/ProviderList.PNG" alt="Provider List" class="align-center" /></p>
+
+<h3 id="consumer-list">Consumer List</h3>
+<p>This is the place where you can get the list of all the consumers for the MicroService<br />
+<img src="/assets/images/ConsumerList.PNG" alt="Consumer List" class="align-center" /></p>
+
+<h3 id="schema-list">Schema List</h3>
+<p>This is the place where we can get the list of all the Schema's for your MicroService, here you get options of viewing the Schema in Swagger form or Test the Schema on some particular instance. Here you also get an option to Download the Schema file in Html Client form.<br />
+<img src="/assets/images/SchemaList.PNG" alt="Schema List" class="align-center" /></p>
+
+<p>For Viewing the Schema in Swagger form you can click on Test Schema button and you can view the complete details of Schema in Swagger form.</p>
+
+<p><img src="/assets/images/SchemaView.PNG" alt="View Swagger" class="align-center" /></p>
+
+<p>If you wish to test the Schema on some particular Instance then you can click on Test Schema and select the instance on which you want to test the Schema and then select the endpoints for that instance.<br />
+<img src="/assets/images/SelectInstance.PNG" alt="Select Instance" class="align-center" /></p>
+
+<p>Once you selected the instance then you are ready for testing the Schema, you can input the required parameters for the Schema and hit on ‘Try it Out’ Button.<br />
+<img src="/assets/images/Schematest.PNG" alt="Schema Test" class="align-center" /></p>
+
+<h5 id="you-can-have-a-look-at-the-quick-start-guide-to-know-about-how-to-bring-up-the-management-console">You can have a look at the <a href="https://github.com/ServiceComb/service-center/tree/master/frontend#quickstart-guide">Quick Start Guide</a> to know about how to bring up the Management Console.</h5>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+  
+
+
+  
+  
+  
+
+  <p class="page__taxonomy">
+    <strong><i class="fa fa-fw fa-tags" aria-hidden="true"></i> 标签: </strong>
+    <span itemprop="keywords">
+    
+      
+      
+      <a href="/tags/#service-center" class="page__taxonomy-item" rel="tag">service center</a>
+    
+    </span>
+  </p>
+
+
+
+
+
+        
+          
+            
+              <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> 最新的:</strong> <time datetime="2017-10-30">2017年10月30日</time></p>
+            
+          
+        
+      </footer>
+
+      <section class="page__share">
+  
+    <h4 class="page__share-title">分享</h4>
+  
+
+  <a href="https://twitter.com/intent/tweet?via=ServiceComb&text=Service-Center Management UI Console /docs/service-center-ui/" class="btn btn--twitter" title="分享 Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
+
+  <a href="https://www.facebook.com/sharer/sharer.php?u=/docs/service-center-ui/" class="btn btn--facebook" title="分享 Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
+
+  <a href="https://plus.google.com/share?url=/docs/service-center-ui/" class="btn btn--google-plus" title="分享 Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
+
+  <a href="https://www.linkedin.com/shareArticle?mini=true&url=/docs/service-center-ui/" class="btn btn--linkedin" title="分享 LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
+</section>
+
+
+      
+  <nav class="pagination">
+    
+      <a href="/docs/service-center-ui/" class="pagination--pager" title="Service-Center Management UI Console
+">向前</a>
+    
+    
+      <a href="/cn/docs/jira_beginner_guide/" class="pagination--pager" title="老司机带你刷任务 - ServiceComb JIRA入门指南
+">向后</a>
+    
+  </nav>
+
+
+    </div>
+
+    
+      <div class="page__comments">
+  
+  
+    <section id="static-comments">
+      
+        <!-- Start static comments -->
+        <div class="js-comments">
+          
+        </div>
+        <!-- End static comments -->
+
+        <!-- Start new comment form -->
+        <h4 class="page__comments-title">留下评论</h4>
+        <p class="small">您的电子邮箱地址并不会被展示。请填写标记为必须的字段。 <span class="required">*</span></p>
+        <form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/ServiceComb/servicesomb.github.io/master">
+          <div class="form__spinner">
+            <i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
+            <span class="sr-only">正在加载...</span>
+          </div>
+
+          <fieldset>
+            <label for="comment-form-message">评论 <small class="required">*</small></label>
+            <textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
+            <div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">Markdown语法已支持。</a></div>
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-name">姓名 <small class="required">*</small></label>
+            <input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-email">电子邮箱 <small class="required">*</small></label>
+            <input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-url">网站(可选)</label>
+            <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
+          </fieldset>
+          <fieldset class="hidden" style="display: none;">
+            <input type="hidden" name="options[slug]" value="service-center-ui">
+            <label for="comment-form-location">Not used. Leave blank if you are a human.</label>
+            <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
+          </fieldset>
+          <!-- Start comment form alert messaging -->
+          <p class="hidden js-notice">
+            <strong class="js-notice-text"></strong>
+          </p>
+          <!-- End comment form alert messaging -->
+          <fieldset>
+            <button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--large">提交评论</button>
+          </fieldset>
+        </form>
+        <!-- End new comment form -->
+      
+    </section>
+  
+</div>
+
+    
+  </article>
+
+  
+  
+    <div class="page__related">
+      <h4 class="page__related-title">猜您还喜欢</h4>
+      <div class="grid__wrapper">
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/jira_beginner_guide/" rel="permalink">老司机带你刷任务 - ServiceComb JIRA入门指南
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">ServiceComb JIRA入门指南
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/how-to-reform-a-legacy-system/" rel="permalink">最头疼的遗留系统该如何改造?
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/how-to-reform-a-legacy-system/" rel="permalink">最头疼的遗留系统该如何改造?
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  少于 1 分钟 阅读
+
+</p>
+    
+  </article>
+</div>
+
+        
+      </div>
+    </div>
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">资源</p>
+        <li><a href="/cn/docs/quick-start/">快速入门</a></li>
+        <li><a href="/cn/users/user-guide/">用户指南</a></li>
+        <li><a href="/cn/slides/">资料</a></li>
+        <li><a href="/cn/users/faq/">常见问题</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">贡献</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _posts/cn/2017-10-28-service-center-ui.md">报告本网页问题</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_posts/cn/2017-10-28-service-center-ui.md">在Github上编辑此页</a></li>
+        <li><a href="/cn/developers/submit-codes/">代码提交指南</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">社区</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">开发者</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">用户</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. 技术来自于 <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  
+  <script>
+    (function ($) {
+    var $comments = $('.js-comments');
+
+    $('#new_comment').submit(function () {
+      var form = this;
+
+      $(form).addClass('disabled');
+      $('#comment-form-submit').html('<i class="fa fa-spinner fa-spin fa-fw"></i> 正在加载...');
+
+      $.ajax({
+        type: $(this).attr('method'),
+        url: $(this).attr('action'),
+        data: $(this).serialize(),
+        contentType: 'application/x-www-form-urlencoded',
+        success: function (data) {
+          $('#comment-form-submit').html('已提交');
+          $('.page__comments-form .js-notice').removeClass('notice--danger');
+          $('.page__comments-form .js-notice').addClass('notice--success');
+          showAlert('感谢您的评论!被批准后它会立即在此站点展示。');
+        },
+        error: function (err) {
+          console.log(err);
+          $('#comment-form-submit').html('提交评论');
+          $('.page__comments-form .js-notice').removeClass('notice--success');
+          $('.page__comments-form .js-notice').addClass('notice--danger');
+          showAlert('很抱歉,您的提交存在错误。请确保所有必填字段都已填写正确,然后再试一次。');
+          $(form).removeClass('disabled');
+        }
+      });
+
+      return false;
+    });
+
+    function showAlert(message) {
+      $('.page__comments-form .js-notice').removeClass('hidden');
+      $('.page__comments-form .js-notice-text').html(message);
+    }
+  })(jQuery);
+  </script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/docs/stress-test-on-company-with-jmeter-in-k8s/index.html
----------------------------------------------------------------------
diff --git a/content/docs/stress-test-on-company-with-jmeter-in-k8s/index.html b/content/docs/stress-test-on-company-with-jmeter-in-k8s/index.html
new file mode 100644
index 0000000..41fc140
--- /dev/null
+++ b/content/docs/stress-test-on-company-with-jmeter-in-k8s/index.html
@@ -0,0 +1,917 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>Stress test on Company Demo with Jmeter in Kubernetes Cluster - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="An introduction of how to do stress test on company demo with jmeter in kubernetes cluster">
+
+
+
+
+<meta name="author" content="Eric Lee">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="Stress test on Company Demo with Jmeter in Kubernetes Cluster">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/stress-test-on-company-with-jmeter-in-k8s/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/stress-test-on-company-with-jmeter-in-k8s/">
+
+
+
+  <meta property="og:description" content="An introduction of how to do stress test on company demo with jmeter in kubernetes cluster">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="Stress test on Company Demo with Jmeter in Kubernetes Cluster">
+  <meta name="twitter:description" content="An introduction of how to do stress test on company demo with jmeter in kubernetes cluster">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+    <meta name="twitter:creator" content="@">
+  
+
+
+
+  
+
+  
+
+
+
+
+
+  <meta property="og:type" content="article">
+  <meta property="article:published_time" content="2017-08-25T00:00:00+08:00">
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/docs/stress-test-on-company-with-jmeter-in-k8s/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+
+<div itemscope itemtype="http://schema.org/Person">
+
+  
+
+  <div class="author__content">
+    <h3 class="author__name" itemprop="name">Eric Lee</h3>
+    
+      <p class="author__bio" itemprop="description">
+	    
+        Winter is coming, arm ourself with code
+	    
+      </p>
+    
+  </div>
+
+  <div class="author__urls-wrapper">
+    <button class="btn btn--inverse">Follow</button>
+    <ul class="author__urls social-icons">
+      
+
+      
+        <li>
+          <a href="https://eric-lee-ltk.github.io" itemprop="url">
+            <i class="fa fa-fw fa-chain" aria-hidden="true"></i> Website
+          </a>
+        </li>
+      
+
+      
+        <li>
+          <a href="mailto:eric.lee.ltk@gmail.com">
+            <meta itemprop="email" content="eric.lee.ltk@gmail.com" />
+            <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> Email
+          </a>
+        </li>
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      <!--
+  <li>
+    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs">
+      <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link
+    </a>
+  </li>
+-->
+    </ul>
+  </div>
+</div>
+
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="Stress test on Company Demo with Jmeter in Kubernetes Cluster">
+    <meta itemprop="description" content="An introduction of how to do stress test on company demo with jmeter in kubernetes cluster">
+    <meta itemprop="datePublished" content="August 25, 2017">
+    <meta itemprop="dateModified" content="August 25, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">Stress test on Company Demo with Jmeter in Kubernetes Cluster
+</h1>
+            
+              <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  6 minute read
+
+</p>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <h2 id="background">Background</h2>
+
+<p>Stress test is an effective way to evaluate the performance of web applications. Besides, more and more web applications are decomposed into several microservices and performance of each microservice may vary as some are compute intensive while some are IO intensive.</p>
+
+<p>Stress test on web application based on microservice architecture plays a more important role. This blog will evaluate the performance of our <a href="https://github.com/ServiceComb/ServiceComb-Company-WorkShop">company demo</a> using <a href="https://www.google.com.hk/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=1&amp;ved=0ahUKEwiv9rjg7u_VAhUkxoMKHfoYDaYQFggvMAA&amp;url=http%3A%2F%2Fjmeter.apache.org%2F&amp;usg=AFQjCNHIHCOA-F9LnhaAn_STCWyPPgOpdw">JMeter 3.2</a>(a powerful stress test tool) in <a href="https://kubernetes.io/">Kubernetes</a> cluster.</p>
+
+<p>From the <a href="http://servicecomb.io/docs/autoscale-on-company/">last post</a>, we figured out the Manager service demands the most of the resources. Hence, in this plan, we will dig deeper into performance test on the Manager service.</p>
+
+<h2 id="test-plan">Test Plan</h2>
+
+<p>Our JMeter test plan is:</p>
+
+<ul>
+  <li>
+    <p>Handle the authentication before stress tests as the authentication may introduce serious delay.</p>
+  </li>
+  <li>
+    <p>Keep visiting services in Company demo concurrently, push stress on the Manager services by QueryWorker, QueryBeekeeperDrone, QueryBeekeeperQueen HTTP request generator.</p>
+  </li>
+</ul>
+
+<p>You can get the test plan from github.</p>
+<div class="language-bash highlighter-rouge"><pre class="highlight"><code>  git clone https://github.com/ServiceComb/ServiceComb-Company-WorkShop
+  <span class="nb">cd </span>ServiceComb-Company-WorkShop/stress-tests
+</code></pre>
+</div>
+<p class="figure-caption"><img src="/assets/images/company_test_plan.png" alt="fig-1 JMeter test plan" class="align-center" />
+fig-1 JMeter test plan</p>
+
+<p>At the very first of our test plan, we set up some global configurations that shared among all thread groups. The <em>CSV Data Set Config</em> loads our target server information from a local csv file. The <em>HTTP Request Defaults</em> sets up the default host and port in every request. The <em>User Defined Variables</em> defines variable that shared globally. The <em>HTTP Header Manager</em>  adds headers define inside it to every request.</p>
+
+<p>Then comes to the <em>setUp</em> thread group. It does the authentication job. The build-in way to authenticate in JMeter is the <em>HTTP Cookie Manager</em> as cookie is being used widely over web applications. However, our workshop demo uses the token based authentication instead of cookie based authentication. We need to take a detour to get authenticate done in JMeter.   The <em>Remove header pre processor</em> uses the following script to avoid unnecessary headers being injected into login requests.</p>
+
+<div class="language-shell highlighter-rouge"><pre class="highlight"><code>import org.apache.jmeter.protocol.http.control.Header;
+sampler.getHeaderManager<span class="o">()</span>.removeHeaderNamed<span class="o">(</span><span class="s2">"Authorization"</span><span class="o">)</span>;
+</code></pre>
+</div>
+
+<p>Then we retrieve login credential in the <em>Set up Login</em> request. The <em>authorization_extractor</em> is a <em>Regular Expression Extractor</em> used to extract the value of <em>Authorization</em> header. As variables can not pass from one thread group to another, it need to convert to the global property and the script in <em>BeanShell PostProcessor</em> does the job.</p>
+
+<div class="language-shell highlighter-rouge"><pre class="highlight"><code><span class="k">${</span><span class="nv">__setProperty</span><span class="p">(Authorization,</span><span class="k">${</span><span class="nv">Authorization</span><span class="k">}</span><span class="p">,)</span><span class="k">}</span>
+</code></pre>
+</div>
+
+<p>The last part of our test plan is the stress tests perform on our services.  We test three endpoints as they all pass from the manager service to the other two microservices, namely worker and beekeeper. Before we test, we disable the caching capability by enabling <em>StressTest</em> profile in manager so that the worker service and beekeeper service can serve the incoming computing task all the time.  Besides, we simplify the computing task by setting the request argument to be just 1.</p>
+
+<h2 id="test-steps">Test Steps</h2>
+
+<ul>
+  <li>
+    <p>Start the <em>Company demo</em> in the Kubernetes cluster without resource limits.</p>
+  </li>
+  <li>
+    <p>Replace the content of <em>hosts.csv</em> file with the IP address and port of the Company demo running in the Kubernetes cluster. The content in <em>hosts.csv</em> is:</p>
+
+    <pre><code class="language-csv"> 127.0.0.1,8083
+</code></pre>
+  </li>
+  <li>
+    <p>Run the tests. Using 200 threads to generate requests concurrently, and set the duration to be 600 seconds.</p>
+
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code> jmeter -n -t workshop.jmx -j workshop.log -l workshop.jtl -Jthreads<span class="o">=</span>200 -Jduration<span class="o">=</span>600
+</code></pre>
+    </div>
+  </li>
+</ul>
+
+<h2 id="test-results">Test Results</h2>
+<p>The performance among various concurrency is as follows:</p>
+
+<p class="figure-caption"><img src="/assets/images/company_concurrency_performance.png" alt="fig-2 Performance among various concurrency" class="align-center" />
+fig-2 Performance among various concurrency</p>
+
+<p>fig-2 shows that performance of manager service remained stable until it reached the bottleneck(at concurrency of 15), it speeds up to <strong>about 1000 requests per seconds</strong> while keeping the average response time low. Later on, as the concurrency increased, the average response time increased dramatically. <strong>The response time statistics can be helpful when evaluating the circuit-break timeout settings.</strong></p>
+
+<p class="figure-caption"><img src="/assets/images/company_response_time.png" alt="fig-3 Average response time among different services" class="align-center" />
+fig-3 Average response time among different services</p>
+
+<p>fig-3 shows the average response time of different services. As the beekeeper service relies on the worker service, it had a longer response time than the worker service.</p>
+
+<p class="figure-caption"><img src="/assets/images/company_cpu_load.png" alt="fig-4 CPU Load on various concurrency" class="align-center" />
+fig-4 CPU Load on various concurrency</p>
+
+<p>To find out why the performance stuck at the concurrency of 15, we checked the monitor data from <a href="https://github.com/kubernetes/heapster">Heapster</a> as fig-4 shows. Apparently, <strong>manager service became the bottleneck of the whole system.</strong> It reached the maximum cpu load when the throughput was around 1000 req/s. Other services increased much slower than manager service and required less resources.</p>
+
+<p>As manager service logs directly to the stdout and the JMeter test client running on a single host may not simulate enough concurrency simultaneously. As such, we tested on different scenes of log settings(log4j1 stdout, log4j2 stdout, log4j2 asynchronous, none) at the concurrency of 200. The <em>asynchronous</em> log settings in <em>log4j2.xml</em> file is as follows:</p>
+<div class="language-xml highlighter-rouge"><pre class="highlight"><code><span class="cp">&lt;?xml version="1.0" encoding="UTF-8" ?&gt;</span>
+<span class="nt">&lt;Configuration</span> <span class="na">status=</span><span class="s">"INFO"</span><span class="nt">&gt;</span>
+  <span class="nt">&lt;Appenders&gt;</span>
+    <span class="nt">&lt;RandomAccessFile</span> <span class="na">name=</span><span class="s">"RandomAccessFile"</span> <span class="na">fileName=</span><span class="s">"manager.log"</span> <span class="na">immediateFlush=</span><span class="s">"false"</span> <span class="na">append=</span><span class="s">"false"</span><span class="nt">&gt;</span>
+      <span class="nt">&lt;PatternLayout</span> <span class="na">pattern=</span><span class="s">"%d [%p] %m %l%n"</span><span class="nt">/&gt;</span>
+    <span class="nt">&lt;/RandomAccessFile&gt;</span>
+  <span class="nt">&lt;/Appenders&gt;</span>
+  <span class="nt">&lt;Loggers&gt;</span>
+    <span class="nt">&lt;asyncRoot</span> <span class="na">level=</span><span class="s">"info"</span><span class="nt">&gt;</span>
+      <span class="nt">&lt;AppenderRef</span> <span class="na">ref=</span><span class="s">"RandomAccessFile"</span><span class="nt">/&gt;</span>
+    <span class="nt">&lt;/asyncRoot&gt;</span>
+  <span class="nt">&lt;/Loggers&gt;</span>
+<span class="nt">&lt;/Configuration&gt;</span>
+</code></pre>
+</div>
+<p>Besides, we also need to add the <em>disruptor</em> dependency to enable the asynchronous log settings.</p>
+<div class="language-xml highlighter-rouge"><pre class="highlight"><code><span class="nt">&lt;dependency&gt;</span>
+  <span class="nt">&lt;groupId&gt;</span>com.lmax<span class="nt">&lt;/groupId&gt;</span>
+  <span class="nt">&lt;artifactId&gt;</span>disruptor<span class="nt">&lt;/artifactId&gt;</span>
+  <span class="nt">&lt;version&gt;</span>3.3.6<span class="nt">&lt;/version&gt;</span>
+<span class="nt">&lt;/dependency&gt;</span>
+</code></pre>
+</div>
+<p>The <em>none</em> log settings just replace the <em>info</em> logging level to <em>off</em> in the above setting. We also tested on distributed JMeter test client environment. Running Jmeter in distributed mode takes two steps:</p>
+
+<ol>
+  <li>
+    <p>run JMeter slave on each test node, the command is as follows:</p>
+
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code>jmeter-server -Djava.rmi.server.hostname<span class="o">=</span><span class="k">$(</span>ifconfig eth0 | grep <span class="s2">"inet addr"</span> | awk <span class="s1">'{print $2}'</span> | cut -d <span class="s2">":"</span> -f2<span class="k">)</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p>run JMeter master, the command is as follows:</p>
+
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code>jmeter -n -R host1,host2 -t workshop.jmx -j workshop.log -l workshop.jtl -Gmin<span class="o">=</span>1 -Gmax<span class="o">=</span>2 -Gthreads<span class="o">=</span>200 -Gduration<span class="o">=</span>600
+</code></pre>
+    </div>
+
+    <p class="notice--warning"><em>Note:</em> JMeter property does not work in distributed mode. It needs to be declared as a global property. That’s why We use <em>-G</em> option  here instead of <em>-J</em> option.</p>
+  </li>
+</ol>
+
+<p>The results are as follows:
+<img src="/assets/images/company_log_and_jmeter.png" alt="different log and different JMeter settings" class="align-center" />
+From the above figure, we can conclude that:</p>
+
+<ul>
+  <li>
+    <p>The performance in JMeter distributed mode and single mode are so close, it seems that a single JMeter test client is able to simulate enough concurrency for the current test.</p>
+  </li>
+  <li>
+    <p>The log takes up too many computing resources when directly output to stdout and the asynchronous way has improved nearly 100% throughput of the original. <strong>Seems like using the synchronous log settings may not be wise in production environment.</strong></p>
+  </li>
+  <li>
+    <p>The log4j2 has improved about 40% throughput of the log4j1 and reduced a small amount of memory. Hence, <strong>it’s recommended to replace the log4j1 with log4j2 for the sake of performance.</strong></p>
+  </li>
+</ul>
+
+<p class="figure-caption"><img src="/assets/images/company_different_log_memory_usage.png" alt="fig-5 memory usage of different log settings" class="align-center" />
+fig-5 memory usage of different log settings</p>
+
+<p>Although the asynchronous way save us much computing resources, it takes up a great deal of memory in the meanwhile as fig-5 shows.</p>
+
+<p class="figure-caption"><img src="/assets/images/company_memory_used.png" alt="fig-6 Memory Usage of different services" class="align-center" />
+fig-6 Memory Usage of different services</p>
+
+<p>fig-6 shows the memory usage of different services during tests. As company demo is a simple use case, the memory usage remained quite stable during tests. Comparing to memory usage of the <em>bulletin board</em> service(written in go), other services written in Java take a great deal of memory.</p>
+
+<h2 id="conclusions">Conclusions</h2>
+
+<p>Stress test on applications can help us find out the potential problems in our services before our services run in production environment. It simulates the production environment and validates whether our services meet the specification requirements. We can tune our pod deployment settings based on the stress test result to system’s maximum throughput while keeping SLA.</p>
+
+<p>Applications based on microservice architecture become much more flexible not only on design, programming and tests, but also on deployment. Services based on microservice architecture make resources scale up and down extremely fast. We can choose different specifications of machine and different replicas for different services according to the maximum throughput to save resources. Besides, the scalability of cloud makes services handle visit storm easily.</p>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+  
+
+
+  
+  
+  
+
+  <p class="page__taxonomy">
+    <strong><i class="fa fa-fw fa-tags" aria-hidden="true"></i> Tags: </strong>
+    <span itemprop="keywords">
+    
+      
+      
+      <a href="/tags/#jmeter" class="page__taxonomy-item" rel="tag">jmeter</a><span class="sep">, </span>
+    
+      
+      
+      <a href="/tags/#performance-test" class="page__taxonomy-item" rel="tag">performance test</a>
+    
+    </span>
+  </p>
+
+
+
+
+
+        
+          
+            
+              <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> Updated:</strong> <time datetime="2017-08-25">August 25, 2017</time></p>
+            
+          
+        
+      </footer>
+
+      <section class="page__share">
+  
+    <h4 class="page__share-title">Share on</h4>
+  
+
+  <a href="https://twitter.com/intent/tweet?via=ServiceComb&text=Stress test on Company Demo with Jmeter in Kubernetes Cluster /docs/stress-test-on-company-with-jmeter-in-k8s/" class="btn btn--twitter" title="Share on Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
+
+  <a href="https://www.facebook.com/sharer/sharer.php?u=/docs/stress-test-on-company-with-jmeter-in-k8s/" class="btn btn--facebook" title="Share on Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
+
+  <a href="https://plus.google.com/share?url=/docs/stress-test-on-company-with-jmeter-in-k8s/" class="btn btn--google-plus" title="Share on Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
+
+  <a href="https://www.linkedin.com/shareArticle?mini=true&url=/docs/stress-test-on-company-with-jmeter-in-k8s/" class="btn btn--linkedin" title="Share on LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
+</section>
+
+
+      
+  <nav class="pagination">
+    
+      <a href="/cn/docs/autoscale-on-company/" class="pagination--pager" title="微服务化后的按需精细化资源控制
+">Previous</a>
+    
+    
+      <a href="/cn/docs/stress-test-on-company-with-jmeter-in-k8s/" class="pagination--pager" title="在Kubernetes集群中使用JMeter对Company示例进行压力测试
+">Next</a>
+    
+  </nav>
+
+
+    </div>
+
+    
+      <div class="page__comments">
+  
+  
+    <section id="static-comments">
+      
+        <!-- Start static comments -->
+        <div class="js-comments">
+          
+        </div>
+        <!-- End static comments -->
+
+        <!-- Start new comment form -->
+        <h4 class="page__comments-title">Leave a Comment</h4>
+        <p class="small">Your email address will not be published. Required fields are marked <span class="required">*</span></p>
+        <form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/ServiceComb/servicesomb.github.io/master">
+          <div class="form__spinner">
+            <i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
+            <span class="sr-only">Loading...</span>
+          </div>
+
+          <fieldset>
+            <label for="comment-form-message">Comment <small class="required">*</small></label>
+            <textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
+            <div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">Markdown is supported.</a></div>
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-name">Name <small class="required">*</small></label>
+            <input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-email">Email address <small class="required">*</small></label>
+            <input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-url">Website (optional)</label>
+            <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
+          </fieldset>
+          <fieldset class="hidden" style="display: none;">
+            <input type="hidden" name="options[slug]" value="stress-test-on-company-with-jmeter-in-k8s">
+            <label for="comment-form-location">Not used. Leave blank if you are a human.</label>
+            <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
+          </fieldset>
+          <!-- Start comment form alert messaging -->
+          <p class="hidden js-notice">
+            <strong class="js-notice-text"></strong>
+          </p>
+          <!-- End comment form alert messaging -->
+          <fieldset>
+            <button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--large">Submit Comment</button>
+          </fieldset>
+        </form>
+        <!-- End new comment form -->
+      
+    </section>
+  
+</div>
+
+    
+  </article>
+
+  
+  
+    <div class="page__related">
+      <h4 class="page__related-title">You May Also Enjoy</h4>
+      <div class="grid__wrapper">
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/jira_beginner_guide/" rel="permalink">老司机带你刷任务 - ServiceComb JIRA入门指南
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">ServiceComb JIRA入门指南
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  less than 1 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/how-to-reform-a-legacy-system/" rel="permalink">最头疼的遗留系统该如何改造?
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  1 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+      </div>
+    </div>
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _posts/2017-08-25-stress-test-on-company-with-jmeter-in-k8s.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_posts/2017-08-25-stress-test-on-company-with-jmeter-in-k8s.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  
+  <script>
+    (function ($) {
+    var $comments = $('.js-comments');
+
+    $('#new_comment').submit(function () {
+      var form = this;
+
+      $(form).addClass('disabled');
+      $('#comment-form-submit').html('<i class="fa fa-spinner fa-spin fa-fw"></i> Loading...');
+
+      $.ajax({
+        type: $(this).attr('method'),
+        url: $(this).attr('action'),
+        data: $(this).serialize(),
+        contentType: 'application/x-www-form-urlencoded',
+        success: function (data) {
+          $('#comment-form-submit').html('Submitted');
+          $('.page__comments-form .js-notice').removeClass('notice--danger');
+          $('.page__comments-form .js-notice').addClass('notice--success');
+          showAlert('Thanks for your comment! It will show on the site once it has been approved.');
+        },
+        error: function (err) {
+          console.log(err);
+          $('#comment-form-submit').html('Submit Comment');
+          $('.page__comments-form .js-notice').removeClass('notice--success');
+          $('.page__comments-form .js-notice').addClass('notice--danger');
+          showAlert('Sorry, there was an error with your submission. Please make sure all required fields have been completed and try again.');
+          $(form).removeClass('disabled');
+        }
+      });
+
+      return false;
+    });
+
+    function showAlert(message) {
+      $('.page__comments-form .js-notice').removeClass('hidden');
+      $('.page__comments-form .js-notice-text').html(message);
+    }
+  })(jQuery);
+  </script>
+
+
+
+
+
+
+
+  </body>
+</html>



[51/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
Generated the static pages for asf-site


Project: http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/commit/08e1b43f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/tree/08e1b43f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/diff/08e1b43f

Branch: refs/heads/asf-site
Commit: 08e1b43f8b5086ae7239e4b4c5418befd3d04694
Parents: 2734387
Author: Willem Jiang <ji...@huawei.com>
Authored: Sun Dec 10 21:18:25 2017 +0800
Committer: Willem Jiang <ji...@huawei.com>
Committed: Sun Dec 10 21:18:25 2017 +0800

----------------------------------------------------------------------
 content/404.html                                |  395 +++
 content/CNAME                                   |    1 +
 content/about/language.html                     |  341 +++
 content/assets/css/main.css                     |    8 +
 content/assets/css/prism.css                    |  367 +++
 content/assets/fonts/FontAwesome.otf            |  Bin 0 -> 134808 bytes
 content/assets/fonts/fontawesome-webfont.eot    |  Bin 0 -> 165742 bytes
 content/assets/fonts/fontawesome-webfont.svg    | 2671 ++++++++++++++++++
 content/assets/fonts/fontawesome-webfont.ttf    |  Bin 0 -> 165548 bytes
 content/assets/fonts/fontawesome-webfont.woff   |  Bin 0 -> 98024 bytes
 content/assets/fonts/fontawesome-webfont.woff2  |  Bin 0 -> 77160 bytes
 content/assets/images/ConsumerList.PNG          |  Bin 0 -> 51406 bytes
 content/assets/images/Dashboard.PNG             |  Bin 0 -> 82572 bytes
 content/assets/images/InstanceList.PNG          |  Bin 0 -> 52659 bytes
 content/assets/images/ProviderList.PNG          |  Bin 0 -> 47134 bytes
 content/assets/images/Rss.png                   |  Bin 0 -> 2558 bytes
 content/assets/images/SchemaList.PNG            |  Bin 0 -> 59937 bytes
 content/assets/images/SchemaView.PNG            |  Bin 0 -> 27108 bytes
 content/assets/images/Schematest.PNG            |  Bin 0 -> 104363 bytes
 content/assets/images/SelectInstance.PNG        |  Bin 0 -> 38459 bytes
 .../assets/images/Service-Center-UI-Preview.gif |  Bin 0 -> 616202 bytes
 content/assets/images/ServiceComb-logo-1.png    |  Bin 0 -> 2986 bytes
 content/assets/images/ServiceComb-logo-2.png    |  Bin 0 -> 17582 bytes
 content/assets/images/ServiceComb-logo-3.jpg    |  Bin 0 -> 80000 bytes
 content/assets/images/ServiceList.PNG           |  Bin 0 -> 85794 bytes
 content/assets/images/Twitter.png               |  Bin 0 -> 1102 bytes
 content/assets/images/Users.png                 |  Bin 0 -> 1156 bytes
 content/assets/images/add-node.png              |  Bin 0 -> 60206 bytes
 ...best_practices_for_legacy_system_reform.jpeg |  Bin 0 -> 24022 bytes
 content/assets/images/bmi-interface.png         |  Bin 0 -> 57307 bytes
 .../assets/images/booking-microservice-yaml.png |  Bin 0 -> 204660 bytes
 content/assets/images/booking-start-success.png |  Bin 0 -> 145253 bytes
 content/assets/images/case_mengtuo_new_mode.png |  Bin 0 -> 22686 bytes
 .../case_mengtuo_reform_before_and_after.png    |  Bin 0 -> 39806 bytes
 .../images/case_mengtuo_traditional_mode.png    |  Bin 0 -> 24621 bytes
 content/assets/images/code-adjust.png           |  Bin 0 -> 234001 bytes
 content/assets/images/communication.PNG         |  Bin 0 -> 26597 bytes
 content/assets/images/company-autoscale-1.png   |  Bin 0 -> 9361 bytes
 content/assets/images/company-autoscale-2.png   |  Bin 0 -> 39000 bytes
 content/assets/images/company-autoscale-3.png   |  Bin 0 -> 45654 bytes
 content/assets/images/company-autoscale-4.png   |  Bin 0 -> 160122 bytes
 content/assets/images/company-autoscale-5.png   |  Bin 0 -> 35491 bytes
 .../images/company_concurrency_performance.png  |  Bin 0 -> 10965 bytes
 content/assets/images/company_cpu_load.png      |  Bin 0 -> 231156 bytes
 .../company_different_log_memory_usage.png      |  Bin 0 -> 322781 bytes
 .../assets/images/company_log_and_jmeter.png    |  Bin 0 -> 9743 bytes
 content/assets/images/company_memory_used.png   |  Bin 0 -> 132849 bytes
 content/assets/images/company_response_time.png |  Bin 0 -> 49797 bytes
 content/assets/images/company_test_plan.png     |  Bin 0 -> 13497 bytes
 content/assets/images/compile.png               |  Bin 0 -> 54298 bytes
 content/assets/images/config-file.png           |  Bin 0 -> 208021 bytes
 content/assets/images/create-group.png          |  Bin 0 -> 63841 bytes
 content/assets/images/create-pr.jpg             |  Bin 0 -> 253892 bytes
 .../images/customer-microservice-yaml.png       |  Bin 0 -> 225243 bytes
 .../assets/images/customer-start-success.png    |  Bin 0 -> 164254 bytes
 .../images/distributed-tracing-result.png       |  Bin 0 -> 20091 bytes
 content/assets/images/fibonaccitree.gif         |  Bin 0 -> 6671 bytes
 .../assets/images/find-features-by-example.png  |  Bin 0 -> 32917 bytes
 content/assets/images/flow-control-result.png   |  Bin 0 -> 52518 bytes
 content/assets/images/fork-repo.jpg             |  Bin 0 -> 196174 bytes
 content/assets/images/github.png                |  Bin 0 -> 3200 bytes
 content/assets/images/governance.png            |  Bin 0 -> 182536 bytes
 content/assets/images/home-page.png             |  Bin 0 -> 1972853 bytes
 .../assets/images/huaweicloud_dependencies.png  |  Bin 0 -> 148652 bytes
 content/assets/images/image-upload-1.png        |  Bin 0 -> 88013 bytes
 content/assets/images/image-upload-2.png        |  Bin 0 -> 98355 bytes
 content/assets/images/import-project.png        |  Bin 0 -> 52237 bytes
 content/assets/images/init-data.png             |  Bin 0 -> 585320 bytes
 content/assets/images/intellij.code.style.1.png |  Bin 0 -> 45433 bytes
 content/assets/images/intellij.code.style.2.png |  Bin 0 -> 8646 bytes
 content/assets/images/intellij.code.style.3.png |  Bin 0 -> 5153 bytes
 content/assets/images/intellij.code.style.4.png |  Bin 0 -> 4845 bytes
 content/assets/images/intellij.code.style.5.png |  Bin 0 -> 11831 bytes
 content/assets/images/jira/jira.board.png       |  Bin 0 -> 79408 bytes
 .../assets/images/jira/jira.board.profile.png   |  Bin 0 -> 13452 bytes
 .../assets/images/jira/jira.board.selection.png |  Bin 0 -> 20183 bytes
 content/assets/images/jira/jira.epic.png        |  Bin 0 -> 43065 bytes
 content/assets/images/jira/jira.fix.version.png |  Bin 0 -> 60784 bytes
 .../images/jira/jira.good.first.issue.png       |  Bin 0 -> 13552 bytes
 content/assets/images/jira/jira.profile.png     |  Bin 0 -> 14124 bytes
 content/assets/images/jira/jira.signup.png      |  Bin 0 -> 47809 bytes
 .../assets/images/jira/jira.status.update.png   |  Bin 0 -> 97155 bytes
 .../images/jira/jira.story.assignment.png       |  Bin 0 -> 55894 bytes
 content/assets/images/jira/jira.story.png       |  Bin 0 -> 73380 bytes
 content/assets/images/kubernetes-company-cn.PNG |  Bin 0 -> 131640 bytes
 content/assets/images/kubernetes-company.png    |  Bin 0 -> 130256 bytes
 .../images/legacy_system_reform_strategy.jpeg   |  Bin 0 -> 12452 bytes
 content/assets/images/load-balance-result.png   |  Bin 0 -> 56794 bytes
 content/assets/images/local_develop_test.png    |  Bin 0 -> 36062 bytes
 ..._springcloud_application_using_sc_and_gs.png |  Bin 0 -> 16479 bytes
 content/assets/images/metrics-output.png        |  Bin 0 -> 69354 bytes
 content/assets/images/micro-service-design.png  |  Bin 0 -> 73039 bytes
 .../assets/images/micro-service-structure.PNG   |  Bin 0 -> 134466 bytes
 ...icroservice_definition_by_martin_folwer.jpeg |  Bin 0 -> 35559 bytes
 .../images/microservice_reform_strategy.jpeg    |  Bin 0 -> 25947 bytes
 content/assets/images/new-pr.jpg                |  Bin 0 -> 117898 bytes
 content/assets/images/onStartup.PNG             |  Bin 0 -> 28938 bytes
 ...ce-test-on-seckill-with-jmeter-latencies.png |  Bin 0 -> 44665 bytes
 ...mance-test-on-seckill-with-jmeter-script.png |  Bin 0 -> 66895 bytes
 ...e-test-on-seckill-with-jmeter-statistics.png |  Bin 0 -> 38466 bytes
 ...-on-seckill-with-jmeter-time-percentiles.png |  Bin 0 -> 19030 bytes
 ...ance-test-on-seckill-with-jmeter-tps-all.png |  Bin 0 -> 42952 bytes
 ...nce-test-on-seckill-with-jmeter-tps-less.png |  Bin 0 -> 35508 bytes
 content/assets/images/pom-dependence.png        |  Bin 0 -> 268981 bytes
 .../images/quick-start-sample-workflow-en.png   |  Bin 0 -> 16798 bytes
 .../images/quick-start-sample-workflow.png      |  Bin 0 -> 20604 bytes
 .../images/rapid_development_framework.png      |  Bin 0 -> 152219 bytes
 content/assets/images/saga-demo.png             |  Bin 0 -> 17483 bytes
 content/assets/images/saga.2pc.phase1.png       |  Bin 0 -> 45832 bytes
 content/assets/images/saga.2pc.phase2.png       |  Bin 0 -> 42803 bytes
 content/assets/images/saga.centralized.png      |  Bin 0 -> 39138 bytes
 content/assets/images/saga.commutative.png      |  Bin 0 -> 25037 bytes
 content/assets/images/saga.death.star.png       |  Bin 0 -> 391053 bytes
 content/assets/images/saga.decentralized.png    |  Bin 0 -> 23912 bytes
 content/assets/images/saga.design.png           |  Bin 0 -> 43931 bytes
 content/assets/images/saga.event.coupling.png   |  Bin 0 -> 23660 bytes
 .../assets/images/saga.event.driven.request.png |  Bin 0 -> 61206 bytes
 .../images/saga.event.driven.response.png       |  Bin 0 -> 62796 bytes
 content/assets/images/saga.events.png           |  Bin 0 -> 62501 bytes
 content/assets/images/saga.graph.png            |  Bin 0 -> 20742 bytes
 content/assets/images/saga.monolithic.png       |  Bin 0 -> 11933 bytes
 content/assets/images/saga.service.boundary.png |  Bin 0 -> 21268 bytes
 content/assets/images/saga.tcc.confirm.png      |  Bin 0 -> 46579 bytes
 content/assets/images/saga.tcc.try.png          |  Bin 0 -> 44272 bytes
 content/assets/images/saga.transactions.png     |  Bin 0 -> 29722 bytes
 content/assets/images/scaling.png               |  Bin 0 -> 65030 bytes
 .../seckill-develop-course-part-I-arth-en.png   |  Bin 0 -> 21909 bytes
 .../seckill-develop-course-part-I-arth.png      |  Bin 0 -> 23204 bytes
 ...seckill-develop-course-part-I-command-en.png |  Bin 0 -> 25951 bytes
 .../seckill-develop-course-part-I-command.png   |  Bin 0 -> 25800 bytes
 ...kill-develop-course-part-I-query-coupons.png |  Bin 0 -> 128161 bytes
 ...ll-develop-course-part-I-request-seckill.png |  Bin 0 -> 124635 bytes
 .../seckill-develop-course-part-I-spring.png    |  Bin 0 -> 19061 bytes
 .../seckill-develop-course-part-II-arth-en.png  |  Bin 0 -> 34682 bytes
 .../seckill-develop-course-part-II-arth.png     |  Bin 0 -> 34570 bytes
 ...-develop-course-part-II-create-promotion.png |  Bin 0 -> 114762 bytes
 ...op-course-part-II-query-active-promotion.png |  Bin 0 -> 126713 bytes
 ...lop-course-part-II-reject-duplicate-grab.png |  Bin 0 -> 127963 bytes
 .../seckill-develop-course-part-III-arch-en.png |  Bin 0 -> 70177 bytes
 .../seckill-develop-course-part-III-arch.png    |  Bin 0 -> 72624 bytes
 .../seckill-develop-course-part-III-cqrs.png    |  Bin 0 -> 160103 bytes
 ...velop-course-part-III-seckill-all-in-one.png |  Bin 0 -> 141258 bytes
 content/assets/images/servcie-center.png        |  Bin 0 -> 23366 bytes
 .../images/service-center-start-success.png     |  Bin 0 -> 104402 bytes
 content/assets/images/service-consumer.png      |  Bin 0 -> 189249 bytes
 content/assets/images/service-deploy.png        |  Bin 0 -> 300286 bytes
 .../assets/images/service-management-result.png |  Bin 0 -> 47582 bytes
 content/assets/images/service-monitor-1.png     |  Bin 0 -> 101730 bytes
 content/assets/images/service-monitor-2.png     |  Bin 0 -> 63001 bytes
 content/assets/images/servicecomb-banner-s.png  |  Bin 0 -> 525078 bytes
 .../servicecomb-feature-multiLanguage.png       |  Bin 0 -> 8482 bytes
 .../images/servicecomb-feature-openapi.png      |  Bin 0 -> 13126 bytes
 .../images/servicecomb-feature-quickstart.png   |  Bin 0 -> 8668 bytes
 content/assets/images/servicecomb-models.png    |  Bin 0 -> 18771 bytes
 content/assets/images/start-booking.png         |  Bin 0 -> 238937 bytes
 content/assets/images/start-customer.png        |  Bin 0 -> 193084 bytes
 content/assets/images/start-website.png         |  Bin 0 -> 149814 bytes
 content/assets/images/tcc-trans.png             |  Bin 0 -> 340551 bytes
 content/assets/images/thread-model.png          |  Bin 0 -> 50478 bytes
 content/assets/images/tracing.1.png             |  Bin 0 -> 18510 bytes
 content/assets/images/tracing.2.png             |  Bin 0 -> 22816 bytes
 content/assets/images/tracing.3.png             |  Bin 0 -> 17477 bytes
 content/assets/images/tracing.4.png             |  Bin 0 -> 23750 bytes
 content/assets/images/tracing.5.png             |  Bin 0 -> 17049 bytes
 .../assets/images/website-microservice-yaml.png |  Bin 0 -> 193079 bytes
 .../assets/images/why_microservice_show_up.jpeg |  Bin 0 -> 32684 bytes
 .../images/workshop-company-structure.png       |  Bin 0 -> 44646 bytes
 .../assets/images/workshop-spring-starter.png   |  Bin 0 -> 43372 bytes
 content/assets/js/custom.js                     |    8 +
 content/assets/js/main.min.js                   |    9 +
 content/assets/js/prism.js                      |   24 +
 .../20170619/LinuxCon-Workshop-company.pdf      |  Bin 0 -> 2199135 bytes
 .../slides/20170619/MSAPrinciple&EcoSystem.pdf  |  Bin 0 -> 6968425 bytes
 .../slides/20170619/ServiceCombIntroduction.pdf |  Bin 0 -> 3367260 bytes
 .../slides/20170619/ServiceCombRoadMap.pdf      |  Bin 0 -> 471515 bytes
 .../20171026/ServiceCombIntroduce1026.pdf       |  Bin 0 -> 1322666 bytes
 .../20171102/ServiceComb_PastAndPresent.pdf     |  Bin 0 -> 1522795 bytes
 ...eOfHuaweiConsumerCloudBasedOnServiceComb.pdf |  Bin 0 -> 1456205 bytes
 .../LiveCodingServiceCombQuickStart.zip         |  Bin 0 -> 191093 bytes
 .../20171207/Uncover_ServiceComb_Design.pdf     |  Bin 0 -> 851729 bytes
 ...PracticeOfServiceMeshOnHuaweiPublicCloud.pdf |  Bin 0 -> 4580129 bytes
 content/banner.js                               |   21 +
 content/cn/404.html                             |  396 +++
 content/cn/developers/index.html                |  461 +++
 .../setup-develop-environment/index.html        |  504 ++++
 content/cn/developers/submit-codes/index.html   |  567 ++++
 content/cn/docs/autoscale-on-company/index.html |  885 ++++++
 .../cn/docs/communication-btw-sc-ms/index.html  |  795 ++++++
 .../cn/docs/company-on-kubernetes/index.html    |  895 ++++++
 content/cn/docs/distributed_saga_1/index.html   |  880 ++++++
 content/cn/docs/distributed_saga_2/index.html   |  856 ++++++
 content/cn/docs/distributed_saga_3/index.html   |  878 ++++++
 content/cn/docs/go-to-cloud/index.html          |  937 ++++++
 .../how-to-reform-a-legacy-system/index.html    | 1133 ++++++++
 content/cn/docs/jira_beginner_guide/index.html  |  789 ++++++
 .../cn/docs/linuxcon-workshop-demo/index.html   | 1528 ++++++++++
 .../docs/maven_dependency_management/index.html |  888 ++++++
 .../index.html                                  |  886 ++++++
 .../distributed-tracing/index.html              |  576 ++++
 .../quick-start-advance/flow-control/index.html |  538 ++++
 content/cn/docs/quick-start-advance/index.html  |  493 ++++
 .../quick-start-advance/load-balance/index.html |  513 ++++
 .../service-management/index.html               |  550 ++++
 content/cn/docs/quick-start-bmi/index.html      |  682 +++++
 .../docs/quick-start-dataconsistency/index.html |  951 +++++++
 content/cn/docs/quick-start/index.html          |  559 ++++
 .../index.html                                  |  820 ++++++
 .../index.html                                  |  809 ++++++
 .../index.html                                  |  823 ++++++
 .../index.html                                  |  921 ++++++
 .../cn/docs/tracing-with-servicecomb/index.html |  872 ++++++
 content/cn/faqs/faqs-huawei-cloud/index.html    |  448 +++
 content/cn/faqs/index.html                      |  988 +++++++
 content/cn/index.html                           |  480 ++++
 content/cn/slides/index.html                    |  423 +++
 .../users/application-boot-process/index.html   |  697 +++++
 .../cn/users/communicate-protocol/index.html    | 1110 ++++++++
 content/cn/users/customized-tracing/index.html  |  804 ++++++
 content/cn/users/develop-with-jax-rs/index.html |  844 ++++++
 .../users/develop-with-rest-template/index.html |  736 +++++
 content/cn/users/develop-with-rpc/index.html    |  722 +++++
 .../cn/users/develop-with-springmvc/index.html  |  832 ++++++
 .../develop-with-transparent-rpc/index.html     |  794 ++++++
 content/cn/users/distributed-tracing/index.html |  750 +++++
 .../cn/users/edging-service/nginx/index.html    |  810 ++++++
 content/cn/users/edging-service/zuul/index.html |  840 ++++++
 content/cn/users/index.html                     |  766 +++++
 content/cn/users/invoke-control/index.html      |  817 ++++++
 content/cn/users/local-develop-test/index.html  |  760 +++++
 content/cn/users/metrics/index.html             |  749 +++++
 content/cn/users/run-mode/index.html            |  772 +++++
 .../cn/users/service-configurations/index.html  | 1095 +++++++
 content/cn/users/service-contract/index.html    |  802 ++++++
 content/cn/users/service-definition/index.html  |  794 ++++++
 content/cn/users/service-heartbeat/index.html   |  709 +++++
 .../service-interface-constraints/index.html    |  753 +++++
 content/cn/users/setup-environment/index.html   |  752 +++++
 .../cn/users/use-service-contract/index.html    |  742 +++++
 .../use-servicecomb-in-spring-boot/index.html   |  941 ++++++
 content/cn/users/use-tls/index.html             | 1048 +++++++
 content/cn/year-archive/index.html              | 2052 ++++++++++++++
 content/developers/index.html                   |  460 +++
 .../setup-develop-environment/index.html        |  503 ++++
 content/developers/submit-codes/index.html      |  566 ++++
 content/docs/autoscale-on-company/index.html    |  890 ++++++
 content/docs/communication-btw-sc-ms/index.html |  792 ++++++
 content/docs/company-on-kubernetes/index.html   |  887 ++++++
 content/docs/distributed_saga_1/index.html      |  922 ++++++
 content/docs/distributed_saga_2/index.html      |  868 ++++++
 content/docs/distributed_saga_3/index.html      |  901 ++++++
 content/docs/go-to-cloud/index.html             |  936 ++++++
 .../how-to-reform-a-legacy-system/index.html    | 1130 ++++++++
 content/docs/linuxcon-workshop-demo/index.html  | 1525 ++++++++++
 .../distributed-tracing/index.html              |  575 ++++
 .../quick-start-advance/flow-control/index.html |  537 ++++
 content/docs/quick-start-advance/index.html     |  492 ++++
 .../quick-start-advance/load-balance/index.html |  511 ++++
 .../service-management/index.html               |  550 ++++
 content/docs/quick-start-bmi/index.html         |  679 +++++
 .../docs/quick-start-dataconsistency/index.html |  951 +++++++
 content/docs/quick-start/index.html             |  559 ++++
 .../index.html                                  |  819 ++++++
 .../index.html                                  |  808 ++++++
 .../index.html                                  |  823 ++++++
 content/docs/service-center-ui/index.html       |  807 ++++++
 .../index.html                                  |  917 ++++++
 .../docs/tracing-with-servicecomb/index.html    |  878 ++++++
 content/faqs/faqs-huawei-cloud/index.html       |  442 +++
 content/faqs/index.html                         |  469 +++
 content/feed.xml                                | 1476 ++++++++++
 content/index.html                              |  478 ++++
 content/robots.txt                              |    1 +
 content/sitemap.xml                             |  508 ++++
 content/sitemap/index.html                      |  435 +++
 content/slides/index.html                       |  422 +++
 .../users/application-boot-process/index.html   |  696 +++++
 content/users/communicate-protocol/index.html   | 1109 ++++++++
 content/users/customized-tracing/index.html     |  803 ++++++
 content/users/develop-with-jax-rs/index.html    |  843 ++++++
 .../users/develop-with-rest-template/index.html |  735 +++++
 content/users/develop-with-rpc/index.html       |  721 +++++
 content/users/develop-with-springmvc/index.html |  831 ++++++
 .../develop-with-transparent-rpc/index.html     |  793 ++++++
 content/users/distributed-tracing/index.html    |  749 +++++
 content/users/edging-service/nginx/index.html   |  809 ++++++
 content/users/edging-service/zuul/index.html    |  839 ++++++
 content/users/faq/index.html                    |  734 +++++
 content/users/huawei-cloud-faq/index.html       |  707 +++++
 content/users/index.html                        |  765 +++++
 content/users/invoke-control/index.html         |  816 ++++++
 content/users/local-develop-test/index.html     |  759 +++++
 content/users/metrics/index.html                |  748 +++++
 content/users/run-mode/index.html               |  771 +++++
 content/users/service-configurations/index.html | 1094 +++++++
 content/users/service-contract/index.html       |  801 ++++++
 content/users/service-definition/index.html     |  793 ++++++
 content/users/service-heartbeat/index.html      |  708 +++++
 .../service-interface-constraints/index.html    |  752 +++++
 content/users/setup-environment/index.html      |  749 +++++
 content/users/use-service-contract/index.html   |  741 +++++
 .../use-servicecomb-in-spring-boot/index.html   |  940 ++++++
 content/users/use-tls/index.html                | 1047 +++++++
 content/year-archive/index.html                 | 1837 ++++++++++++
 303 files changed, 99267 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/404.html
----------------------------------------------------------------------
diff --git a/content/404.html b/content/404.html
new file mode 100644
index 0000000..e4b0866
--- /dev/null
+++ b/content/404.html
@@ -0,0 +1,395 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>Page Not Found - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="Page not found. Your pixels are in another canvas.">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="Page Not Found">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/404.html">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/404.html">
+
+
+
+  <meta property="og:description" content="Page not found. Your pixels are in another canvas.">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="Page Not Found">
+  <meta name="twitter:description" content="Page not found. Your pixels are in another canvas.">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/404.html>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="Page Not Found">
+    <meta itemprop="description" content="Page not found. Your pixels are in another canvas.">
+    
+    
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">Page Not Found
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <p>Sorry, but the page you were trying to view does not exist — perhaps you can try searching for it below.</p>
+
+<script type="text/javascript">
+  var GOOG_FIXURL_LANG = 'en';
+  var GOOG_FIXURL_SITE = ''
+</script>
+
+<script type="text/javascript" src="//linkhelp.clients.google.com/tbproxy/lh/wm/fixurl.js">
+</script>
+
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _pages/404.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_pages/404.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/CNAME
----------------------------------------------------------------------
diff --git a/content/CNAME b/content/CNAME
new file mode 100644
index 0000000..115fa88
--- /dev/null
+++ b/content/CNAME
@@ -0,0 +1 @@
+servicecomb.io
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/about/language.html
----------------------------------------------------------------------
diff --git a/content/about/language.html b/content/about/language.html
new file mode 100644
index 0000000..e67950f
--- /dev/null
+++ b/content/about/language.html
@@ -0,0 +1,341 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>多语言支持 - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="多语言支持">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en_US">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="多语言支持">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/about/language">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/about/language">
+
+
+
+  <meta property="og:description" content="多语言支持">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="多语言支持">
+  <meta name="twitter:description" content="多语言支持">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/about/language>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="多语言支持">
+    <meta itemprop="description" content="多语言支持">
+    
+    <meta itemprop="dateModified" content="June 07, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">多语言支持
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Workshop Slides</a></li>
+        <li><a href="/users/faq/">Frequently Asked Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _pages/languages.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_pages/languages.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>



[13/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/docs/quick-start/index.html
----------------------------------------------------------------------
diff --git a/content/docs/quick-start/index.html b/content/docs/quick-start/index.html
new file mode 100644
index 0000000..7c51329
--- /dev/null
+++ b/content/docs/quick-start/index.html
@@ -0,0 +1,559 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>Quick Start - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="Introduce how to run microservice applications using ServiceComb">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="Quick Start">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/quick-start/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/quick-start/">
+
+
+
+  <meta property="og:description" content="Introduce how to run microservice applications using ServiceComb">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="Quick Start">
+  <meta name="twitter:description" content="Introduce how to run microservice applications using ServiceComb">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/docs/quick-start/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          
+          
+
+          <a href="/docs/quick-start/"><span class="nav__sub-title nav__sub-title-with-url">Quick Start</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/docs/quick-start-bmi/"><span class="nav__sub-title nav__sub-title-with-url">Develop microservice application in minutes</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/docs/quick-start-advance/"><span class="nav__sub-title nav__sub-title-with-url">Advance microservice development</span></a>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/docs/quick-start-advance/load-balance/" class="">Load Balance</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/docs/quick-start-advance/flow-control/" class="">Flow Control</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/docs/quick-start-advance/service-management/" class="">Service Management</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/docs/quick-start-advance/distributed-tracing/" class="">Distributed Tracing</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/docs/quick-start-dataconsistency/"><span class="nav__sub-title nav__sub-title-with-url">Data Consistency Solution</span></a>
+        
+
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="Quick Start">
+    <meta itemprop="description" content="Introduce how to run microservice applications using ServiceComb">
+    
+    <meta itemprop="dateModified" content="September 06, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">Quick Start
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> On This Page</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#install-java-development-environment" id="markdown-toc-install-java-development-environment">Install Java development environment</a></li>
+  <li><a href="#run-service-center" id="markdown-toc-run-service-center">Run Service Center</a></li>
+  <li><a href="#create-your-first-microservice-application" id="markdown-toc-create-your-first-microservice-application">Create your first microservice application</a></li>
+  <li><a href="#run-microservice-application" id="markdown-toc-run-microservice-application">Run microservice application</a></li>
+  <li><a href="#whats-next" id="markdown-toc-whats-next">What’s next</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<h2 id="install-java-development-environment">Install Java development environment</h2>
+
+<ul>
+  <li>
+    <p>Install Git, details can refer to <a href="https://git-scm.com/book/en/v2/Getting-Started-Installing-Git" target="_blank">Git Installing Guide</a>.</p>
+  </li>
+  <li>
+    <p>Install JDK 1.8, details can refer to <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/install/install_overview.html" target="_blank">JDK Installing Guide</a>.</p>
+  </li>
+  <li>
+    <p>Install Maven 3.x, details can refer to <a href="https://maven.apache.org/install.html" target="_blank">Maven Installing Guide</a>.</p>
+  </li>
+  <li>
+    <p>Install ServiceComb Java Chassis(SDK) by executing the following commands.</p>
+
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code> git clone https://github.com/ServiceComb/ServiceComb-Java-Chassis.git
+ <span class="nb">cd </span>ServiceComb-Java-Chassis
+ mvn clean install -DskipTests
+</code></pre>
+    </div>
+  </li>
+</ul>
+
+<h2 id="run-service-center">Run Service Center</h2>
+<p><strong>Service Center</strong> enables capabilities of service registration and service discovery in <strong>ServiceComb</strong>. It can run inside docker.</p>
+<div class="language-bash highlighter-rouge"><pre class="highlight"><code>docker pull servicecomb/service-center
+docker run -d -p 30100:30100 servicecomb/service-center:latest
+</code></pre>
+</div>
+<p><em>Reference to <a href="/users/setup-environment/#运行service-center">service center deployment</a> to learn deploying Service Center as a local binary.</em></p>
+
+<h2 id="create-your-first-microservice-application">Create your first microservice application</h2>
+<p>Let's start the journey of microservice with a simple <strong>Body Mass Index(BMI)</strong> application. The <a href="https://en.wikipedia.org/wiki/Body_mass_index" target="_blank">BMI</a> is an attempt to quantify the amount of tissue mass in an individual. This application contains two separate microservices:</p>
+
+<ul>
+  <li>
+    <p><strong>BMI calculator service</strong>:A microservice provides calculation of BMI.</p>
+  </li>
+  <li>
+    <p><strong>Web service</strong>:A microservice provides both user interface and gateway service.</p>
+  </li>
+</ul>
+
+<p>The workflow of the application is shown as follows:<br />
+<img src="/assets/images/quick-start-sample-workflow-en.png" alt="workflow of BMI" class="align-center" /></p>
+
+<p>Note that the dotted lines indicate the process of service registration and discovery.</p>
+
+<h2 id="run-microservice-application">Run microservice application</h2>
+
+<ol>
+  <li>
+    <p>Enter BMI codes directory.</p>
+
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code><span class="nb">cd </span>samples/bmi
+</code></pre>
+    </div>
+
+    <p><strong>Note</strong>: In windows development environment, the docker runs inside the virtual machine. The IP address of <strong>Service Center</strong> needs to be modified as the virtual machine's IP address. Modify the 2 configuration files [calculator|webapp]/src/main/resources/microservice.yaml, changed <a>http://127.0.0.1:30100</a> to <a>http://192.168.99.100:30100</a> , where 192.168.99.100 is the virtual machine's IP address.</p>
+  </li>
+  <li>
+    <p>Run microservices.</p>
+
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code><span class="nb">cd </span>calculator; mvn spring-boot:run
+<span class="nb">cd </span>webapp; mvn spring-boot:run
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p>Verify the application. Visit <a>http://localhost:8889</a> in browser. Then input your height and weight to verify.</p>
+
+    <p><img src="/assets/images/bmi-interface.png" alt="BMI user interface" class="align-center" /></p>
+  </li>
+</ol>
+
+<h2 id="whats-next">What’s next</h2>
+
+<ul>
+  <li>Learn how to <a href="/docs/quick-start-bmi/">develop microservice application in minutes</a>.</li>
+</ul>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+
+
+        
+      </footer>
+
+      
+
+      
+
+    </div>
+
+    
+  </article>
+
+  
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _docs/quick-start.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_docs/quick-start.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/docs/seckill-development-journey-part-I/index.html
----------------------------------------------------------------------
diff --git a/content/docs/seckill-development-journey-part-I/index.html b/content/docs/seckill-development-journey-part-I/index.html
new file mode 100644
index 0000000..48a36e5
--- /dev/null
+++ b/content/docs/seckill-development-journey-part-I/index.html
@@ -0,0 +1,819 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>SecKill Development Journey (I) - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="an introduction of how to build seckill demo project step by step">
+
+
+
+
+<meta name="author" content="Yangyong Zheng">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="SecKill Development Journey (I)">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/seckill-development-journey-part-I/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/seckill-development-journey-part-I/">
+
+
+
+  <meta property="og:description" content="an introduction of how to build seckill demo project step by step">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="SecKill Development Journey (I)">
+  <meta name="twitter:description" content="an introduction of how to build seckill demo project step by step">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+    <meta name="twitter:creator" content="@">
+  
+
+
+
+  
+
+  
+
+
+
+
+
+  <meta property="og:type" content="article">
+  <meta property="article:published_time" content="2017-08-26T00:00:00+08:00">
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/docs/seckill-development-journey-part-I/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+
+<div itemscope itemtype="http://schema.org/Person">
+
+  
+
+  <div class="author__content">
+    <h3 class="author__name" itemprop="name">Yangyong Zheng</h3>
+    
+      <p class="author__bio" itemprop="description">
+	    
+        Fast Action, do not ask
+	    
+      </p>
+    
+  </div>
+
+  <div class="author__urls-wrapper">
+    <button class="btn btn--inverse">Follow</button>
+    <ul class="author__urls social-icons">
+      
+
+      
+        <li>
+          <a href="https://zhengyangyong.github.io" itemprop="url">
+            <i class="fa fa-fw fa-chain" aria-hidden="true"></i> Website
+          </a>
+        </li>
+      
+
+      
+        <li>
+          <a href="mailto:yangyong.zheng@huawei.com">
+            <meta itemprop="email" content="yangyong.zheng@huawei.com" />
+            <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> Email
+          </a>
+        </li>
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      <!--
+  <li>
+    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs">
+      <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link
+    </a>
+  </li>
+-->
+    </ul>
+  </div>
+</div>
+
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="SecKill Development Journey (I)">
+    <meta itemprop="description" content="an introduction of how to build seckill demo project step by step">
+    <meta itemprop="datePublished" content="August 26, 2017">
+    <meta itemprop="dateModified" content="September 13, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">SecKill Development Journey (I)
+</h1>
+            
+              <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 minute read
+
+</p>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <h2 id="overview">Overview</h2>
+<p>SecKill is a demo project that our ServiceComb team try to build a micro-service architecture from the perspective of domain-driven design (<a href="https://en.wikipedia.org/wiki/Domain-driven_design">DDD</a>).</p>
+
+<h2 id="background">Background</h2>
+
+<p>SecKill idea comments from the Internet popular promotions, using coupons to obtain some discounts; because the number of coupons is limited, so we must provide a platform for everyone who wants to get it fair competition.</p>
+
+<p>As a demo project, so we don’t want make the SecKill too complicated; we just use the most primitive strategy - first come first get. It is quite simple if you want to implements other strategies by yourself.</p>
+
+<h2 id="first-design">First Design</h2>
+<p>Now let’s analyze requirement in customer bounded context:</p>
+<ol>
+  <li>Customer try to grab a coupon, SecKill return the coupon according to the coupon in inventory;</li>
+  <li>Customer cannot get the coupon anymore if he already send the request to the system.</li>
+  <li>Customer can query how many coupons he owned.</li>
+</ol>
+
+<p>Let’s go! what? you say this description is to simple? because they are no registration system, and promotion is how come, how to start? which coupon the customer request for? Is the discount all same? etc.</p>
+
+<p>Actually, we are accustomed to thinking a lot at the beginning, so some larger system, the design stage may be a few months, but this time you can’t consider too much, because we believe:</p>
+
+<ol>
+  <li>Over-design can’t guarantee fully meeting the demand after construction completed, the only constant is the demand is always changing, so don’t over-design;</li>
+  <li>The principle of the microservice architecture is that service provides single function, so each components(microservices) only need to provide small service, without having to design all the services in system one-time;</li>
+  <li>Should be solve the problem of the core domain as soon as possible.</li>
+</ol>
+
+<p>Then, we can follow the many principles of domain-driven design (<a href="https://en.wikipedia.org/wiki/Domain-driven_design">DDD</a>). The core task of the design process is identify entities, value objects, services and other elements, and further search aggregation; because our requirements are very simple, so it’s easy find them out:</p>
+<ul>
+  <li>Entities:Promotion</li>
+  <li>Value-Object:Coupon,PromotionEvent</li>
+  <li>Domain Service:SecKill</li>
+</ul>
+
+<p>Now we can find the aggregation between them, separated two microservice, now we direct use MySQL database for shared data (although microservice recommend use independent storage for each, we can revisit it in the next iteration)</p>
+<ol>
+  <li>Command : for SecKill domain service</li>
+  <li>Query : for query Coupon Value-Object</li>
+</ol>
+
+<p><img src="/assets/images/seckill-develop-course-part-I-arth-en.png" alt="Fig-1 Architecture" class="align-center" /></p>
+
+<h2 id="core-domain-implement">Core Domain Implement</h2>
+<p>The source code at <a href="https://github.com/ServiceComb/seckill">Github</a>, Welcome to Watch and Star : )</p>
+<h3 id="implement-of-command-micro-service">Implement of Command micro-service</h3>
+<p>We create two class “SecKillCommandService” and “SecKillPersistentRunner” to accept seckill request and persist seckill result, considering persistence is slow, we use BlockQueue temporary cache requests. another class “SecKillCommandRestController” act as Endpoint; ServiceComb support a variety of programming models and communication model, also well support Spring Boot, and easy deploy to Huawei cloud.</p>
+
+<p><img src="/assets/images/seckill-develop-course-part-I-command-en.png" alt="Fig-2 Command micro-service components" class="align-center" /></p>
+
+<h3 id="implement-of-query-microservice">Implement of Query microService</h3>
+<p>Query logic is relatively simple, because PromotionEvent is Value-Object, we use PromotionEvent records to get Coupon Value-Object, you can read the source code and understand this process.</p>
+
+<h2 id="support-domain-implement">Support Domain Implement</h2>
+<p>As promotion is entity and seckill need it as preconditions, we need build and manage it in another domain, because it’s not so urgent at current stage, we can use Spring injection autowire fix objects.</p>
+
+<p><img src="/assets/images/seckill-develop-course-part-I-spring.png" alt="Fig-3 Support domain object injection" class="align-center" /></p>
+
+<h2 id="function-verification">Function Verification</h2>
+<p>Finally, we use PostMan to check completed functions, Please ensure request body fill with JSON format, and set Content-Type to application/json:</p>
+
+<h3 id="request-seckill">Request SecKill</h3>
+
+<p><img src="/assets/images/seckill-develop-course-part-I-request-seckill.png" alt="Fig-4 Request seckill" class="align-center" /></p>
+
+<h3 id="query-owned-coupons">Query owned coupons</h3>
+
+<p><img src="/assets/images/seckill-develop-course-part-I-query-coupons.png" alt="Fig-5 Query owned coupons" class="align-center" /></p>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+  
+
+
+  
+  
+  
+
+  <p class="page__taxonomy">
+    <strong><i class="fa fa-fw fa-tags" aria-hidden="true"></i> Tags: </strong>
+    <span itemprop="keywords">
+    
+      
+      
+      <a href="/tags/#seckill" class="page__taxonomy-item" rel="tag">seckill</a>
+    
+    </span>
+  </p>
+
+
+
+
+
+        
+          
+            
+              <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> Updated:</strong> <time datetime="2017-09-13">September 13, 2017</time></p>
+            
+          
+        
+      </footer>
+
+      <section class="page__share">
+  
+    <h4 class="page__share-title">Share on</h4>
+  
+
+  <a href="https://twitter.com/intent/tweet?via=ServiceComb&text=SecKill Development Journey (I) /docs/seckill-development-journey-part-I/" class="btn btn--twitter" title="Share on Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
+
+  <a href="https://www.facebook.com/sharer/sharer.php?u=/docs/seckill-development-journey-part-I/" class="btn btn--facebook" title="Share on Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
+
+  <a href="https://plus.google.com/share?url=/docs/seckill-development-journey-part-I/" class="btn btn--google-plus" title="Share on Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
+
+  <a href="https://www.linkedin.com/shareArticle?mini=true&url=/docs/seckill-development-journey-part-I/" class="btn btn--linkedin" title="Share on LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
+</section>
+
+
+      
+  <nav class="pagination">
+    
+      <a href="/cn/docs/stress-test-on-company-with-jmeter-in-k8s/" class="pagination--pager" title="在Kubernetes集群中使用JMeter对Company示例进行压力测试
+">Previous</a>
+    
+    
+      <a href="/cn/docs/seckill-development-journey-part-I/" class="pagination--pager" title="秒杀开发历程(一)
+">Next</a>
+    
+  </nav>
+
+
+    </div>
+
+    
+      <div class="page__comments">
+  
+  
+    <section id="static-comments">
+      
+        <!-- Start static comments -->
+        <div class="js-comments">
+          
+        </div>
+        <!-- End static comments -->
+
+        <!-- Start new comment form -->
+        <h4 class="page__comments-title">Leave a Comment</h4>
+        <p class="small">Your email address will not be published. Required fields are marked <span class="required">*</span></p>
+        <form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/ServiceComb/servicesomb.github.io/master">
+          <div class="form__spinner">
+            <i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
+            <span class="sr-only">Loading...</span>
+          </div>
+
+          <fieldset>
+            <label for="comment-form-message">Comment <small class="required">*</small></label>
+            <textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
+            <div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">Markdown is supported.</a></div>
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-name">Name <small class="required">*</small></label>
+            <input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-email">Email address <small class="required">*</small></label>
+            <input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-url">Website (optional)</label>
+            <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
+          </fieldset>
+          <fieldset class="hidden" style="display: none;">
+            <input type="hidden" name="options[slug]" value="seckill-develop-course-part-I">
+            <label for="comment-form-location">Not used. Leave blank if you are a human.</label>
+            <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
+          </fieldset>
+          <!-- Start comment form alert messaging -->
+          <p class="hidden js-notice">
+            <strong class="js-notice-text"></strong>
+          </p>
+          <!-- End comment form alert messaging -->
+          <fieldset>
+            <button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--large">Submit Comment</button>
+          </fieldset>
+        </form>
+        <!-- End new comment form -->
+      
+    </section>
+  
+</div>
+
+    
+  </article>
+
+  
+  
+    <div class="page__related">
+      <h4 class="page__related-title">You May Also Enjoy</h4>
+      <div class="grid__wrapper">
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/jira_beginner_guide/" rel="permalink">老司机带你刷任务 - ServiceComb JIRA入门指南
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">ServiceComb JIRA入门指南
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  less than 1 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/how-to-reform-a-legacy-system/" rel="permalink">最头疼的遗留系统该如何改造?
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  1 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+      </div>
+    </div>
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _posts/2017-08-26-seckill-develop-course-part-I.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_posts/2017-08-26-seckill-develop-course-part-I.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  
+  <script>
+    (function ($) {
+    var $comments = $('.js-comments');
+
+    $('#new_comment').submit(function () {
+      var form = this;
+
+      $(form).addClass('disabled');
+      $('#comment-form-submit').html('<i class="fa fa-spinner fa-spin fa-fw"></i> Loading...');
+
+      $.ajax({
+        type: $(this).attr('method'),
+        url: $(this).attr('action'),
+        data: $(this).serialize(),
+        contentType: 'application/x-www-form-urlencoded',
+        success: function (data) {
+          $('#comment-form-submit').html('Submitted');
+          $('.page__comments-form .js-notice').removeClass('notice--danger');
+          $('.page__comments-form .js-notice').addClass('notice--success');
+          showAlert('Thanks for your comment! It will show on the site once it has been approved.');
+        },
+        error: function (err) {
+          console.log(err);
+          $('#comment-form-submit').html('Submit Comment');
+          $('.page__comments-form .js-notice').removeClass('notice--success');
+          $('.page__comments-form .js-notice').addClass('notice--danger');
+          showAlert('Sorry, there was an error with your submission. Please make sure all required fields have been completed and try again.');
+          $(form).removeClass('disabled');
+        }
+      });
+
+      return false;
+    });
+
+    function showAlert(message) {
+      $('.page__comments-form .js-notice').removeClass('hidden');
+      $('.page__comments-form .js-notice-text').html(message);
+    }
+  })(jQuery);
+  </script>
+
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/docs/seckill-development-journey-part-II/index.html
----------------------------------------------------------------------
diff --git a/content/docs/seckill-development-journey-part-II/index.html b/content/docs/seckill-development-journey-part-II/index.html
new file mode 100644
index 0000000..232cee7
--- /dev/null
+++ b/content/docs/seckill-development-journey-part-II/index.html
@@ -0,0 +1,808 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>SecKill Develop Journey  (II) - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="an introduction how to build seckill demo project step by step">
+
+
+
+
+<meta name="author" content="Yangyong Zheng">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="SecKill Develop Journey  (II)">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/seckill-development-journey-part-II/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/seckill-development-journey-part-II/">
+
+
+
+  <meta property="og:description" content="an introduction how to build seckill demo project step by step">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="SecKill Develop Journey  (II)">
+  <meta name="twitter:description" content="an introduction how to build seckill demo project step by step">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+    <meta name="twitter:creator" content="@">
+  
+
+
+
+  
+
+  
+
+
+
+
+
+  <meta property="og:type" content="article">
+  <meta property="article:published_time" content="2017-08-30T00:00:00+08:00">
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/docs/seckill-development-journey-part-II/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+
+<div itemscope itemtype="http://schema.org/Person">
+
+  
+
+  <div class="author__content">
+    <h3 class="author__name" itemprop="name">Yangyong Zheng</h3>
+    
+      <p class="author__bio" itemprop="description">
+	    
+        Fast Action, do not ask
+	    
+      </p>
+    
+  </div>
+
+  <div class="author__urls-wrapper">
+    <button class="btn btn--inverse">Follow</button>
+    <ul class="author__urls social-icons">
+      
+
+      
+        <li>
+          <a href="https://zhengyangyong.github.io" itemprop="url">
+            <i class="fa fa-fw fa-chain" aria-hidden="true"></i> Website
+          </a>
+        </li>
+      
+
+      
+        <li>
+          <a href="mailto:yangyong.zheng@huawei.com">
+            <meta itemprop="email" content="yangyong.zheng@huawei.com" />
+            <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> Email
+          </a>
+        </li>
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      <!--
+  <li>
+    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs">
+      <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link
+    </a>
+  </li>
+-->
+    </ul>
+  </div>
+</div>
+
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="SecKill Develop Journey  (II)">
+    <meta itemprop="description" content="an introduction how to build seckill demo project step by step">
+    <meta itemprop="datePublished" content="August 30, 2017">
+    <meta itemprop="dateModified" content="September 13, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">SecKill Develop Journey  (II)
+</h1>
+            
+              <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  1 minute read
+
+</p>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <p><a href="/docs/seckill-development-journey-part/">Previous article</a> We only built a core function seckill demo, this article we will gradually improve more features in order to let it had complete function.</p>
+
+<h2 id="problems">Problems</h2>
+<p>Review what we has been done, we can find that:</p>
+<ol>
+  <li>Service for Promotion entity is not provided (inject by Spring);</li>
+  <li>Lack some base check and features, include:
+    <ul>
+      <li>One customer can only grab one coupon per promotion</li>
+      <li>Support multi promotion activing (discount of each promotion is different)</li>
+    </ul>
+  </li>
+  <li>If Command micro-service down, it will recovery all uncompleted promotions immediately before start-up again.</li>
+</ol>
+
+<p>Maybe you would say that customer management and customer login function are not listed? Indeed, the customer is indispensable in our scenario, in order to simply design, we don’t include login and token authentication etc., if you are interesting about this, you can see ServiceComb’s <a href="https://github.com/ServiceComb/ServiceComb-Company-WorkShop">Company</a> demo application to get more information.</p>
+
+<h2 id="improvement-design">Improvement Design</h2>
+<p>For entity, domain-driven design (<a href="https://en.wikipedia.org/wiki/Domain-driven_design">DDD</a>) recommended to use a separate interface, so we design a new Admin micro-service to provide service:</p>
+
+<p><img src="/assets/images/seckill-develop-course-part-II-arth-en.png" alt="Fig-1 Architecture after Admin micro-service added" class="align-center" /></p>
+
+<h2 id="improvement-implement">Improvement Implement</h2>
+<h3 id="implement-of-admin-micro-service">Implement of Admin micro-service</h3>
+<p>Admin micro-service only provide services for promotion entity, we can map this function to REST method:</p>
+<ul>
+  <li>New promotion map to Post;</li>
+  <li>Modify promotion map to Put;    </li>
+  <li>Query promotion map to Get;    </li>
+  <li>
+    <p>Delete promotion map to Delete.  </p>
+
+    <p>To match current requirement we only need implement Post and Get, In addition, already started promotion should not be able to modify, so we increased the corresponding check.</p>
+  </li>
+</ul>
+
+<h3 id="new-check-and-features-implement">New check and features Implement</h3>
+<p>Add a HashSet per promotion to check whether customer had grab coupon; <br />
+  Add “SecKillPromotionBootstrap” class as promotion bootstrap manager for support multi active, “SecKillCommandService” and “SecKillPersistentRunner” now managed(create) by it。</p>
+
+<h3 id="command-micro-service-auto-recovery-implement">Command micro-service auto recovery Implement</h3>
+<p>Add “SecKillRecoveryService” class to check state of promotion, uncomplement promotions whether unstart or activing all need check by it to init start-up information including left coupons, grabbed customers list, etc.</p>
+
+<h2 id="function-verification">Function Verification</h2>
+<p>Finally, we use PostMan to check completed functions, Please ensure request body fill with JSON format, and set Content-Type to application/json:</p>
+<h3 id="create-promotion">Create Promotion</h3>
+
+<p><img src="/assets/images/seckill-develop-course-part-II-create-promotion.png" alt="Fig-2 Create promotion" class="align-center" /></p>
+
+<h3 id="query-activing-promotions">Query Activing Promotions</h3>
+
+<p><img src="/assets/images/seckill-develop-course-part-II-query-active-promotion.png" alt="Fig-3 Query activing promotions" class="align-center" /></p>
+
+<h3 id="reject-duplicate-grab">Reject duplicate Grab</h3>
+
+<p><img src="/assets/images/seckill-develop-course-part-II-reject-duplicate-grab.png" alt="Fig-4 Reject duplicate grab" class="align-center" /></p>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+  
+
+
+  
+  
+  
+
+  <p class="page__taxonomy">
+    <strong><i class="fa fa-fw fa-tags" aria-hidden="true"></i> Tags: </strong>
+    <span itemprop="keywords">
+    
+      
+      
+      <a href="/tags/#seckill" class="page__taxonomy-item" rel="tag">seckill</a>
+    
+    </span>
+  </p>
+
+
+
+
+
+        
+          
+            
+              <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> Updated:</strong> <time datetime="2017-09-13">September 13, 2017</time></p>
+            
+          
+        
+      </footer>
+
+      <section class="page__share">
+  
+    <h4 class="page__share-title">Share on</h4>
+  
+
+  <a href="https://twitter.com/intent/tweet?via=ServiceComb&text=SecKill Develop Journey  (II) /docs/seckill-development-journey-part-II/" class="btn btn--twitter" title="Share on Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
+
+  <a href="https://www.facebook.com/sharer/sharer.php?u=/docs/seckill-development-journey-part-II/" class="btn btn--facebook" title="Share on Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
+
+  <a href="https://plus.google.com/share?url=/docs/seckill-development-journey-part-II/" class="btn btn--google-plus" title="Share on Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
+
+  <a href="https://www.linkedin.com/shareArticle?mini=true&url=/docs/seckill-development-journey-part-II/" class="btn btn--linkedin" title="Share on LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
+</section>
+
+
+      
+  <nav class="pagination">
+    
+      <a href="/cn/docs/seckill-development-journey-part-I/" class="pagination--pager" title="秒杀开发历程(一)
+">Previous</a>
+    
+    
+      <a href="/cn/docs/seckill-development-journey-part-II/" class="pagination--pager" title="秒杀开发历程(二)
+">Next</a>
+    
+  </nav>
+
+
+    </div>
+
+    
+      <div class="page__comments">
+  
+  
+    <section id="static-comments">
+      
+        <!-- Start static comments -->
+        <div class="js-comments">
+          
+        </div>
+        <!-- End static comments -->
+
+        <!-- Start new comment form -->
+        <h4 class="page__comments-title">Leave a Comment</h4>
+        <p class="small">Your email address will not be published. Required fields are marked <span class="required">*</span></p>
+        <form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/ServiceComb/servicesomb.github.io/master">
+          <div class="form__spinner">
+            <i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
+            <span class="sr-only">Loading...</span>
+          </div>
+
+          <fieldset>
+            <label for="comment-form-message">Comment <small class="required">*</small></label>
+            <textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
+            <div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">Markdown is supported.</a></div>
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-name">Name <small class="required">*</small></label>
+            <input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-email">Email address <small class="required">*</small></label>
+            <input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
+          </fieldset>
+          <fieldset>
+            <label for="comment-form-url">Website (optional)</label>
+            <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
+          </fieldset>
+          <fieldset class="hidden" style="display: none;">
+            <input type="hidden" name="options[slug]" value="seckill-develop-course-part-II">
+            <label for="comment-form-location">Not used. Leave blank if you are a human.</label>
+            <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
+          </fieldset>
+          <!-- Start comment form alert messaging -->
+          <p class="hidden js-notice">
+            <strong class="js-notice-text"></strong>
+          </p>
+          <!-- End comment form alert messaging -->
+          <fieldset>
+            <button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--large">Submit Comment</button>
+          </fieldset>
+        </form>
+        <!-- End new comment form -->
+      
+    </section>
+  
+</div>
+
+    
+  </article>
+
+  
+  
+    <div class="page__related">
+      <h4 class="page__related-title">You May Also Enjoy</h4>
+      <div class="grid__wrapper">
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/jira_beginner_guide/" rel="permalink">老司机带你刷任务 - ServiceComb JIRA入门指南
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">ServiceComb JIRA入门指南
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  less than 1 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  2 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+          
+
+
+
+<div class="grid__item">
+  <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/cn/docs/how-to-reform-a-legacy-system/" rel="permalink">最头疼的遗留系统该如何改造?
+</a>
+      
+    </h2>
+    <p class="archive__item-excerpt" itemprop="description">微服务是否是业界期待已久的企业架构解决方案?在对遗留系统进行微服务的改造过程中存在怎样的困难和挑战,应该注意些什么?
+</p>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  1 minute read
+
+</p>
+    
+  </article>
+</div>
+
+        
+      </div>
+    </div>
+  
+</div>
+
+
+    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+    <div align="center" style="margin: 0 0;">
+    <ins class="adsbygoogle"
+         style="display:block; border-bottom: initial;"
+         data-ad-client="ca-pub-7328585512091257"
+         data-ad-slot="3049671934"
+         data-ad-format="auto"></ins>
+    </div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <div class="container">
+  <div class="row justify-content-md-center">
+    
+    <div class="col">
+      <ul>
+        <p class="header">Resources</p>
+        <li><a href="/docs/quick-start/">Quick Start</a></li>
+        <li><a href="/users/user-guide/">User Guide</a></li>
+        <li><a href="/slides/">Slides</a></li>
+        <li><a href="/users/faq/">Common Questions</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul>
+        <p class="header">Contribute</p>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _posts/2017-08-30-seckill-develop-course-part-II.md">Report a Doc Issue</a></li>
+        <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_posts/2017-08-30-seckill-develop-course-part-II.md">Edit This Page on Github</a></li>
+        <li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
+      </ul>
+    </div>
+    <div class="col">
+      <ul class="social-icons">
+        <p class="header">Community</p>
+        <li>
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">Dev</span></a> |
+            <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">User</span></a>
+        </li>
+        <li>
+            <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a>
+        </li>
+        <li>
+            <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
+        </li>
+        <li>
+            <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<div class="page__footer-bottom">
+  <div>&copy; 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+</div>
+
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-101622733-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+
+
+
+
+
+
+  
+  <script>
+    (function ($) {
+    var $comments = $('.js-comments');
+
+    $('#new_comment').submit(function () {
+      var form = this;
+
+      $(form).addClass('disabled');
+      $('#comment-form-submit').html('<i class="fa fa-spinner fa-spin fa-fw"></i> Loading...');
+
+      $.ajax({
+        type: $(this).attr('method'),
+        url: $(this).attr('action'),
+        data: $(this).serialize(),
+        contentType: 'application/x-www-form-urlencoded',
+        success: function (data) {
+          $('#comment-form-submit').html('Submitted');
+          $('.page__comments-form .js-notice').removeClass('notice--danger');
+          $('.page__comments-form .js-notice').addClass('notice--success');
+          showAlert('Thanks for your comment! It will show on the site once it has been approved.');
+        },
+        error: function (err) {
+          console.log(err);
+          $('#comment-form-submit').html('Submit Comment');
+          $('.page__comments-form .js-notice').removeClass('notice--success');
+          $('.page__comments-form .js-notice').addClass('notice--danger');
+          showAlert('Sorry, there was an error with your submission. Please make sure all required fields have been completed and try again.');
+          $(form).removeClass('disabled');
+        }
+      });
+
+      return false;
+    });
+
+    function showAlert(message) {
+      $('.page__comments-form .js-notice').removeClass('hidden');
+      $('.page__comments-form .js-notice-text').html(message);
+    }
+  })(jQuery);
+  </script>
+
+
+
+
+
+
+
+  </body>
+</html>


[14/57] [partial] incubator-servicecomb-website git commit: Generated the static pages for asf-site

Posted by ni...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/docs/quick-start-dataconsistency/index.html
----------------------------------------------------------------------
diff --git a/content/docs/quick-start-dataconsistency/index.html b/content/docs/quick-start-dataconsistency/index.html
new file mode 100644
index 0000000..be386fe
--- /dev/null
+++ b/content/docs/quick-start-dataconsistency/index.html
@@ -0,0 +1,951 @@
+<!doctype html>
+<!--
+  Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
+  Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
+-->
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>Data consistency solution - Apache incubator ServiceComb</title>
+
+
+
+
+<meta name="description" content="Introduce how to use Saga data consistency solution provided by ServiceComb">
+
+
+
+
+<meta name="author" content="">
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache incubator ServiceComb">
+<meta property="og:title" content="Data consistency solution">
+
+
+  <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/quick-start-dataconsistency/">
+  <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/docs/quick-start-dataconsistency/">
+
+
+
+  <meta property="og:description" content="Introduce how to use Saga data consistency solution provided by ServiceComb">
+
+
+
+  <meta name="twitter:site" content="@ServiceComb">
+  <meta name="twitter:title" content="Data consistency solution">
+  <meta name="twitter:description" content="Introduce how to use Saga data consistency solution provided by ServiceComb">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org",
+      "@type" : "Person",
+      "name" : "Apache incubator ServiceComb",
+      "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io",
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
+<script src="/assets/js/prism.js"></script>
+
+<script type="text/javascript" async
+  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
+</script>
+
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+<link rel="stylesheet" href="/assets/css/prism.css">
+
+<!--[if lte IE 9]>
+  <style>
+    /* old IE unsupported flexbox fixes */
+    .greedy-nav .site-title {
+      padding-right: 3em;
+    }
+    .greedy-nav button {
+      position: absolute;
+      top: 0;
+      right: 0;
+      height: 100%;
+    }
+  </style>
+<![endif]-->
+
+<meta http-equiv="cleartype" content="on">
+
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
+<script src="/assets/js/custom.js"></script>
+<!-- end custom head snippets -->
+
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+	      
+          <a class="site-title active" href="/"><img src="//assets/images/ServiceComb-logo-1.png"></a>
+	      
+        <ul class="visible-links">
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a class="active" href="/docs/quick-start/">Quick Start</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/users/">Users</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/developers/">Developers</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/year-archive/">Blogs</a>
+              
+            </li>
+          
+            
+            <li class="masthead__menu-item">
+              
+              
+              
+                <a href="/faqs/">FAQ</a>
+              
+            </li>
+          
+        </ul>
+        <button><div class="navicon"></div></button>
+        <ul class="hidden-links hidden"></ul>
+        <div class="nav-lang">
+          
+            
+            <a href=/cn/docs/quick-start-dataconsistency/>中文</a>
+          
+        </div>
+      </nav>
+    </div>
+  </div>
+</div>
+
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+      
+      <div class="back-to-home">Home > <a href="/">ServiceComb</a></div>
+      
+  
+  
+    
+      
+      
+      
+    
+    
+      
+
+<nav class="nav__list">
+  
+  <input id="ac-toc" name="accordion-toc" type="checkbox" />
+  <label for="ac-toc">Toggle Menu</label>
+  <ul class="nav__items">
+    
+      <li>
+        
+          
+          
+
+          <a href="/docs/quick-start/"><span class="nav__sub-title nav__sub-title-with-url">Quick Start</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/docs/quick-start-bmi/"><span class="nav__sub-title nav__sub-title-with-url">Develop microservice application in minutes</span></a>
+        
+
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/docs/quick-start-advance/"><span class="nav__sub-title nav__sub-title-with-url">Advance microservice development</span></a>
+        
+
+        
+        <ul>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/docs/quick-start-advance/load-balance/" class="">Load Balance</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/docs/quick-start-advance/flow-control/" class="">Flow Control</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/docs/quick-start-advance/service-management/" class="">Service Management</a></li>
+          
+            
+            
+
+            
+            
+
+            <li><a href="/docs/quick-start-advance/distributed-tracing/" class="">Distributed Tracing</a></li>
+          
+        </ul>
+        
+      </li>
+    
+      <li>
+        
+          
+          
+
+          <a href="/docs/quick-start-dataconsistency/"><span class="nav__sub-title nav__sub-title-with-url">Data Consistency Solution</span></a>
+        
+
+        
+      </li>
+    
+  </ul>
+</nav>
+
+    
+  
+  </div>
+
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork">
+    <meta itemprop="headline" content="Data consistency solution">
+    <meta itemprop="description" content="Introduce how to use Saga data consistency solution provided by ServiceComb">
+    
+    <meta itemprop="dateModified" content="September 03, 2017">
+
+    <div class="page__inner-wrap">
+      
+        
+          <header>
+            <h1 class="page__title" itemprop="headline">Data consistency solution
+</h1>
+            
+          </header>
+        
+      
+
+      <section class="page__content" itemprop="text">
+        <aside class="sidebar__right">
+<nav class="toc">
+    <!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> On This Page</h4></header> -->
+<ul class="toc__menu" id="markdown-toc">
+  <li><a href="#running-demo" id="markdown-toc-running-demo">Running Demo</a></li>
+  <li><a href="#verify-services" id="markdown-toc-verify-services">Verify services</a></li>
+  <li><a href="#whats-next" id="markdown-toc-whats-next">What’s next</a></li>
+</ul>
+
+  </nav>
+</aside>
+
+<p>This demo shows you how to use the Saga solution provided by ServiceComb to ensure the microservice for data consistency.</p>
+
+<p>With microservice architecture, each of the services may have its own database technology and it’s not feasible to ensure all transactions on these services are either committed or rolled back with database. In this demo, we make use of Saga to ensure eventual data consistency among services, the payment is only executed after car rental, flight booking, and hotel-reservation are completed.</p>
+
+<p>Travel application demo including four services</p>
+<ul>
+  <li>flight booking service</li>
+  <li>car rental service</li>
+  <li>hotel reservation service</li>
+  <li>payment service</li>
+</ul>
+
+<p><img src="/assets/images/saga-demo.png" alt="Saga-demo" /></p>
+
+<h2 id="running-demo">Running Demo</h2>
+
+<p>Note, demo is in the <a href="https://github.com/ServiceComb/ServiceComb-Saga">ServiceComb-Saga</a> project.</p>
+
+<ol>
+  <li>Prerequisites
+    <ul>
+      <li><a href="http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html">Oracle JDK 1.8</a></li>
+      <li><a href="https://maven.apache.org/install.html">Maven 3.x</a></li>
+      <li><a href="https://www.docker.com/get-docker">Docker</a></li>
+      <li><a href="https://dev.mysql.com/downloads/">MySQL</a></li>
+      <li><a href="https://github.com/ServiceComb/service-center">Service Center</a></li>
+      <li><a href="https://docs.docker.com/compose/install/">Docker compose</a></li>
+    </ul>
+  </li>
+  <li>
+    <p>Configuration
+ Set service center address of each microservice in <em>microservice.yaml</em> file</p>
+
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code> <span class="s">APPLICATION_ID</span><span class="pi">:</span> <span class="s">saga</span>
+ <span class="s">service_description</span><span class="pi">:</span>
+   <span class="s">name</span><span class="pi">:</span> <span class="s">flight-booking-service</span>
+   <span class="s">version</span><span class="pi">:</span> <span class="s">0.0.1</span>
+ <span class="s">cse</span><span class="pi">:</span>
+   <span class="s">service</span><span class="pi">:</span>
+     <span class="s">registry</span><span class="pi">:</span>
+       <span class="s">address</span><span class="pi">:</span> <span class="s">http://sc.servicecomb.io:30100</span> <span class="c1">#choose Service Center provided by ServiceComb</span>
+   <span class="s">rest</span><span class="pi">:</span>
+     <span class="s">address</span><span class="pi">:</span> <span class="s">0.0.0.0:8080</span>
+   <span class="s">handler</span><span class="pi">:</span>
+     <span class="s">chain</span><span class="pi">:</span>
+       <span class="s">Consumer</span><span class="pi">:</span>
+         <span class="s">default</span><span class="pi">:</span> <span class="s">loadbalance</span>
+</code></pre>
+    </div>
+
+    <p>Set deployment script in <em>saga-demo/docker-compose.yaml</em> file</p>
+
+    <div class="language-yaml highlighter-rouge"><pre class="highlight"><code> <span class="s">version</span><span class="pi">:</span> <span class="s1">'</span><span class="s">2.1'</span>
+
+ <span class="s">services</span><span class="pi">:</span>
+   <span class="s">service-center</span><span class="pi">:</span> <span class="c1">#choose Service Center image provided by ServiceComb</span>
+     <span class="s">image</span><span class="pi">:</span> <span class="s2">"</span><span class="s">servicecomb/service-center"</span>
+     <span class="s">hostname</span><span class="pi">:</span> <span class="s">service-center</span>
+     <span class="s">ports</span><span class="pi">:</span>
+       <span class="pi">-</span> <span class="s2">"</span><span class="s">30100:30100"</span>
+
+   <span class="s">mysql</span><span class="pi">:</span>  <span class="c1">#choose mysql image with 5.7 version</span>
+     <span class="s">image</span><span class="pi">:</span> <span class="s2">"</span><span class="s">mysql/mysql-server:5.7"</span>
+     <span class="s">hostname</span><span class="pi">:</span> <span class="s">mysql</span>
+     <span class="s">environment</span><span class="pi">:</span>
+       <span class="pi">-</span> <span class="s">MYSQL_ROOT_PASSWORD=password</span>
+       <span class="pi">-</span> <span class="s">MYSQL_DATABASE=saga</span>
+       <span class="pi">-</span> <span class="s">MYSQL_USER=saga</span>
+       <span class="pi">-</span> <span class="s">MYSQL_PASSWORD=password</span>
+     <span class="s">ports</span><span class="pi">:</span>
+       <span class="pi">-</span> <span class="s2">"</span><span class="s">3306:3306"</span>
+     <span class="s">healthcheck</span><span class="pi">:</span>
+         <span class="s">test</span><span class="pi">:</span> <span class="pi">[</span><span class="s2">"</span><span class="s">CMD-SHELL"</span><span class="pi">,</span> <span class="s2">"</span><span class="s">nc</span><span class="nv"> </span><span class="s">-z</span><span class="nv"> </span><span class="s">localhost</span><span class="nv"> </span><span class="s">3306</span><span class="nv"> </span><span class="s">&amp;&gt;</span><span class="nv"> </span><span class="s">/dev/null;</span><span class="nv"> </span><span class="s">echo</span><span class="nv"> </span><span class="s">$$?"</span><span class="pi">]</span>
+         <span class="s">interval</span><span class="pi">:</span> <span class="s">30s</span>
+         <span class="s">timeout</span><span class="pi">:</span> <span class="s">10s</span>
+         <span class="s">retries</span><span class="pi">:</span> <span class="s">5</span>
+
+   <span class="s">car-rental-service</span><span class="pi">:</span>
+     <span class="s">image</span><span class="pi">:</span> <span class="s2">"</span><span class="s">car-rental-service:0.0.2-SNAPSHOT"</span>
+     <span class="s">hostname</span><span class="pi">:</span> <span class="s">car</span>
+     <span class="s">links</span><span class="pi">:</span>
+       <span class="pi">-</span> <span class="s2">"</span><span class="s">service-center:sc.servicecomb.io"</span>
+     <span class="s">ports</span><span class="pi">:</span>
+       <span class="pi">-</span> <span class="s2">"</span><span class="s">8080:8080"</span>
+
+   <span class="s">flight-booking-service</span><span class="pi">:</span>
+     <span class="s">image</span><span class="pi">:</span> <span class="s2">"</span><span class="s">flight-booking-service:0.0.2-SNAPSHOT"</span>
+     <span class="s">hostname</span><span class="pi">:</span> <span class="s">flight</span>
+     <span class="s">links</span><span class="pi">:</span>
+       <span class="pi">-</span> <span class="s2">"</span><span class="s">service-center:sc.servicecomb.io"</span>
+     <span class="s">ports</span><span class="pi">:</span>
+       <span class="pi">-</span> <span class="s2">"</span><span class="s">8081:8080"</span>
+
+   <span class="s">hotel-reservation-service</span><span class="pi">:</span>
+     <span class="s">image</span><span class="pi">:</span> <span class="s2">"</span><span class="s">hotel-reservation-service:0.0.2-SNAPSHOT"</span>
+     <span class="s">hostname</span><span class="pi">:</span> <span class="s">hotel</span>
+     <span class="s">links</span><span class="pi">:</span>
+       <span class="pi">-</span> <span class="s2">"</span><span class="s">service-center:sc.servicecomb.io"</span>
+     <span class="s">ports</span><span class="pi">:</span>
+       <span class="pi">-</span> <span class="s2">"</span><span class="s">8082:8080"</span>
+
+   <span class="s">payment-service</span><span class="pi">:</span>
+     <span class="s">image</span><span class="pi">:</span> <span class="s2">"</span><span class="s">payment-service:0.0.2-SNAPSHOT"</span>
+     <span class="s">hostname</span><span class="pi">:</span> <span class="s">payment</span>
+     <span class="s">links</span><span class="pi">:</span>
+       <span class="pi">-</span> <span class="s2">"</span><span class="s">service-center:sc.servicecomb.io"</span>
+     <span class="s">ports</span><span class="pi">:</span>
+       <span class="pi">-</span> <span class="s2">"</span><span class="s">8080"</span>
+
+   <span class="s">saga</span><span class="pi">:</span>
+     <span class="s">image</span><span class="pi">:</span> <span class="s2">"</span><span class="s">saga-spring:0.0.2-SNAPSHOT"</span>
+     <span class="s">hostname</span><span class="pi">:</span> <span class="s">saga</span>
+     <span class="s">links</span><span class="pi">:</span>
+       <span class="pi">-</span> <span class="s2">"</span><span class="s">mysql:mysql.servicecomb.io"</span>
+       <span class="pi">-</span> <span class="s2">"</span><span class="s">service-center:sc.servicecomb.io"</span>
+       <span class="pi">-</span> <span class="s2">"</span><span class="s">car-rental-service:car.servicecomb.io"</span>
+       <span class="pi">-</span> <span class="s2">"</span><span class="s">flight-booking-service:flight.servicecomb.io"</span>
+       <span class="pi">-</span> <span class="s2">"</span><span class="s">hotel-reservation-service:hotel.servicecomb.io"</span>
+       <span class="pi">-</span> <span class="s2">"</span><span class="s">payment-service:payment.servicecomb.io"</span>
+     <span class="s">environment</span><span class="pi">:</span>
+       <span class="pi">-</span> <span class="s">JAVA_OPTS=-Dspring.profiles.active=prd,servicecomb -Dcse.service.registry.address=http://sc.servicecomb.io:30100</span>
+     <span class="s">ports</span><span class="pi">:</span>
+       <span class="pi">-</span> <span class="s2">"</span><span class="s">8083:8080"</span>
+     <span class="s">depends_on</span><span class="pi">:</span>
+       <span class="s">mysql</span><span class="pi">:</span>
+         <span class="s">condition</span><span class="pi">:</span> <span class="s">service_healthy</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p>Run the following command to create docker images in saga project root folder</p>
+
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code> mvn package -DskipTests -Pdocker -Pdemo
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p>Start application up in saga/saga-demo/ with the following command</p>
+
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code> docker-compose up
+</code></pre>
+    </div>
+  </li>
+</ol>
+
+<h2 id="verify-services">Verify services</h2>
+
+<ol>
+  <li>
+    <p>Use <a href="https://github.com/ServiceComb/ServiceComb-Saga/blob/master/docs/api/api.md">Saga API</a> to set request content and save it to <em>request.json</em></p>
+
+    <div class="language-json highlighter-rouge"><pre class="highlight"><code><span class="w"> </span><span class="p">{</span><span class="w">
+   </span><span class="nt">"policy"</span><span class="p">:</span><span class="w"> </span><span class="s2">"BackwardRecovery"</span><span class="p">,</span><span class="w">
+   </span><span class="nt">"requests"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
+     </span><span class="p">{</span><span class="w">
+       </span><span class="nt">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"request-car"</span><span class="p">,</span><span class="w">
+       </span><span class="nt">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"rest"</span><span class="p">,</span><span class="w">
+       </span><span class="nt">"serviceName"</span><span class="p">:</span><span class="w"> </span><span class="s2">"car-rental-service"</span><span class="p">,</span><span class="w">
+       </span><span class="nt">"transaction"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+         </span><span class="nt">"method"</span><span class="p">:</span><span class="w"> </span><span class="s2">"post"</span><span class="p">,</span><span class="w">
+         </span><span class="nt">"path"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/rentals"</span><span class="p">,</span><span class="w">
+         </span><span class="nt">"params"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+           </span><span class="nt">"form"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+             </span><span class="nt">"customerId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mike"</span><span class="w">
+           </span><span class="p">}</span><span class="w">
+         </span><span class="p">}</span><span class="w">
+       </span><span class="p">},</span><span class="w">
+       </span><span class="nt">"compensation"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+         </span><span class="nt">"method"</span><span class="p">:</span><span class="w"> </span><span class="s2">"put"</span><span class="p">,</span><span class="w">
+         </span><span class="nt">"path"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/rentals"</span><span class="p">,</span><span class="w">
+         </span><span class="nt">"params"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+           </span><span class="nt">"form"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+             </span><span class="nt">"customerId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mike"</span><span class="w">
+           </span><span class="p">}</span><span class="w">
+         </span><span class="p">}</span><span class="w">
+       </span><span class="p">}</span><span class="w">
+     </span><span class="p">},</span><span class="w">
+     </span><span class="p">{</span><span class="w">
+       </span><span class="nt">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"request-hotel"</span><span class="p">,</span><span class="w">
+       </span><span class="nt">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"rest"</span><span class="p">,</span><span class="w">
+       </span><span class="nt">"serviceName"</span><span class="p">:</span><span class="w"> </span><span class="s2">"hotel-reservation-service"</span><span class="p">,</span><span class="w">
+       </span><span class="nt">"transaction"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+         </span><span class="nt">"method"</span><span class="p">:</span><span class="w"> </span><span class="s2">"post"</span><span class="p">,</span><span class="w">
+         </span><span class="nt">"path"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/reservations"</span><span class="p">,</span><span class="w">
+         </span><span class="nt">"params"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+           </span><span class="nt">"form"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+             </span><span class="nt">"customerId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mike"</span><span class="w">
+           </span><span class="p">}</span><span class="w">
+         </span><span class="p">}</span><span class="w">
+       </span><span class="p">},</span><span class="w">
+       </span><span class="nt">"compensation"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+         </span><span class="nt">"method"</span><span class="p">:</span><span class="w"> </span><span class="s2">"put"</span><span class="p">,</span><span class="w">
+         </span><span class="nt">"path"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/reservations"</span><span class="p">,</span><span class="w">
+         </span><span class="nt">"params"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+           </span><span class="nt">"form"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+             </span><span class="nt">"customerId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mike"</span><span class="w">
+           </span><span class="p">}</span><span class="w">
+         </span><span class="p">}</span><span class="w">
+       </span><span class="p">}</span><span class="w">
+     </span><span class="p">},</span><span class="w">
+     </span><span class="p">{</span><span class="w">
+       </span><span class="nt">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"request-flight"</span><span class="p">,</span><span class="w">
+       </span><span class="nt">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"rest"</span><span class="p">,</span><span class="w">
+       </span><span class="nt">"serviceName"</span><span class="p">:</span><span class="w"> </span><span class="s2">"flight-booking-service"</span><span class="p">,</span><span class="w">
+       </span><span class="nt">"transaction"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+         </span><span class="nt">"method"</span><span class="p">:</span><span class="w"> </span><span class="s2">"post"</span><span class="p">,</span><span class="w">
+         </span><span class="nt">"path"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/bookings"</span><span class="p">,</span><span class="w">
+         </span><span class="nt">"params"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+           </span><span class="nt">"form"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+             </span><span class="nt">"customerId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mike"</span><span class="w">
+           </span><span class="p">}</span><span class="w">
+         </span><span class="p">}</span><span class="w">
+       </span><span class="p">},</span><span class="w">
+       </span><span class="nt">"compensation"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+         </span><span class="nt">"method"</span><span class="p">:</span><span class="w"> </span><span class="s2">"put"</span><span class="p">,</span><span class="w">
+         </span><span class="nt">"path"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/bookings"</span><span class="p">,</span><span class="w">
+         </span><span class="nt">"params"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+           </span><span class="nt">"form"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+             </span><span class="nt">"customerId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mike"</span><span class="w">
+           </span><span class="p">}</span><span class="w">
+         </span><span class="p">}</span><span class="w">
+       </span><span class="p">}</span><span class="w">
+     </span><span class="p">},</span><span class="w">
+     </span><span class="p">{</span><span class="w">
+       </span><span class="nt">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"request-payment"</span><span class="p">,</span><span class="w">
+       </span><span class="nt">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"rest"</span><span class="p">,</span><span class="w">
+       </span><span class="nt">"serviceName"</span><span class="p">:</span><span class="w"> </span><span class="s2">"payment-service"</span><span class="p">,</span><span class="w">
+       </span><span class="nt">"parents"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
+         </span><span class="s2">"request-car"</span><span class="p">,</span><span class="w">
+         </span><span class="s2">"request-flight"</span><span class="p">,</span><span class="w">
+         </span><span class="s2">"request-hotel"</span><span class="w">
+       </span><span class="p">],</span><span class="w">
+       </span><span class="nt">"transaction"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+         </span><span class="nt">"method"</span><span class="p">:</span><span class="w"> </span><span class="s2">"post"</span><span class="p">,</span><span class="w">
+         </span><span class="nt">"path"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/payments"</span><span class="p">,</span><span class="w">
+         </span><span class="nt">"params"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+           </span><span class="nt">"form"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+             </span><span class="nt">"customerId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mike"</span><span class="w">
+           </span><span class="p">}</span><span class="w">
+         </span><span class="p">}</span><span class="w">
+       </span><span class="p">},</span><span class="w">
+       </span><span class="nt">"compensation"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+         </span><span class="nt">"method"</span><span class="p">:</span><span class="w"> </span><span class="s2">"put"</span><span class="p">,</span><span class="w">
+         </span><span class="nt">"path"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/payments"</span><span class="p">,</span><span class="w">
+         </span><span class="nt">"params"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+           </span><span class="nt">"form"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
+             </span><span class="nt">"customerId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mike"</span><span class="w">
+           </span><span class="p">}</span><span class="w">
+         </span><span class="p">}</span><span class="w">
+       </span><span class="p">}</span><span class="w">
+     </span><span class="p">}</span><span class="w">
+   </span><span class="p">]</span><span class="w">
+ </span><span class="p">}</span><span class="w">
+</span></code></pre>
+    </div>
+  </li>
+  <li>
+    <p>Set content type to <em>text/plain</em>, and send <em>request.json</em> to Saga</p>
+
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code> curl -XPOST -H <span class="s2">"Content-Type: text/plain"</span> -d @./request.json  http://&lt;localhost.ip:8083&gt;/requests
+</code></pre>
+    </div>
+
+    <p>Response(return “success” if execution successfully, otherwise return failed with error info)</p>
+
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code> success
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p>Get all the Saga events</p>
+
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code> curl -XGET http://&lt;localhost.ip:8083&gt;/events
+</code></pre>
+    </div>
+
+    <p>Response</p>
+
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code> <span class="o">{</span>
+     <span class="s2">"bcd27f0d-6b82-49b3-8067-b16eba970e55"</span>: <span class="o">[</span>
+         <span class="o">{</span>
+             <span class="s2">"id"</span>: 1,
+             <span class="s2">"sagaId"</span>: <span class="s2">"bcd27f0d-6b82-49b3-8067-b16eba970e55"</span>,
+             <span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:21Z"</span>,
+             <span class="s2">"type"</span>: <span class="s2">"SagaStartedEvent"</span>,
+             <span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">policy</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">BackwardRecovery</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">requests</span><span class="se">\"</span><span class="s2">: [{</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-car</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="
 s2">car-rental-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/rentals</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">m
 ike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/rentals</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span 
 class="se">\"</span><span class="s2">}}}}, {</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-hotel</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">hotel-reservation-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/reservation
 s</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/reservations</span><s
 pan class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}}, {</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-flight</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</
 span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">flight-booking-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/bookings</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</s
 pan><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/bookings</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class
 ="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}}, {</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-payment</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [</span><span class="se">\"</span><span class="s2">request-car</span><span class="se">\"</span><span class="s2">, </
 span><span class="se">\"</span><span class="s2">request-flight</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">request-hotel</span><span class="se">\"</span><span class="s2">], </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">payment-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/payments</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class
 ="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/payments</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span>
 <span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}}]}"</span>
+         <span class="o">}</span>,
+         <span class="o">{</span>
+             <span class="s2">"id"</span>: 2,
+             <span class="s2">"sagaId"</span>: <span class="s2">"bcd27f0d-6b82-49b3-8067-b16eba970e55"</span>,
+             <span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:21Z"</span>,
+             <span class="s2">"type"</span>: <span class="s2">"TransactionStartedEvent"</span>,
+             <span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-hotel</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [], </span><span class="se">\"</span><span class="s2">fallback</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">NOP</span><span class="se">\"</span><span class="s2">}, </span><span class="se">\"</span><span class="s2">serviceNa
 me</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">hotel-reservation-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/reservations</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">c
 ustomerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/reservations</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</
 span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}, </span><span class="se">\"</span><span class="s2">retries</span><span class="se">\"</span><span class="s2">: 3}}"</span>
+         <span class="o">}</span>,
+         <span class="o">{</span>
+             <span class="s2">"id"</span>: 3,
+             <span class="s2">"sagaId"</span>: <span class="s2">"bcd27f0d-6b82-49b3-8067-b16eba970e55"</span>,
+             <span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:21Z"</span>,
+             <span class="s2">"type"</span>: <span class="s2">"TransactionStartedEvent"</span>,
+             <span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-car</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [], </span><span class="se">\"</span><span class="s2">fallback</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">NOP</span><span class="se">\"</span><span class="s2">}, </span><span class="se">\"</span><span class="s2">serviceName
 </span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">car-rental-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/rentals</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</spa
 n><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/rentals</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="s
 e">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}, </span><span class="se">\"</span><span class="s2">retries</span><span class="se">\"</span><span class="s2">: 3}}"</span>
+         <span class="o">}</span>,
+         <span class="o">{</span>
+             <span class="s2">"id"</span>: 4,
+             <span class="s2">"sagaId"</span>: <span class="s2">"bcd27f0d-6b82-49b3-8067-b16eba970e55"</span>,
+             <span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:21Z"</span>,
+             <span class="s2">"type"</span>: <span class="s2">"TransactionStartedEvent"</span>,
+             <span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-flight</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [], </span><span class="se">\"</span><span class="s2">fallback</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">NOP</span><span class="se">\"</span><span class="s2">}, </span><span class="se">\"</span><span class="s2">serviceN
 ame</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">flight-booking-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/bookings</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">custome
 rId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/bookings</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span
  class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}, </span><span class="se">\"</span><span class="s2">retries</span><span class="se">\"</span><span class="s2">: 3}}"</span>
+         <span class="o">}</span>,
+         <span class="o">{</span>
+             <span class="s2">"id"</span>: 5,
+             <span class="s2">"sagaId"</span>: <span class="s2">"bcd27f0d-6b82-49b3-8067-b16eba970e55"</span>,
+             <span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:22Z"</span>,
+             <span class="s2">"type"</span>: <span class="s2">"TransactionEndedEvent"</span>,
+             <span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">request</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-flight</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [], </span><span class="se">\"</span><span class="s2">fallback</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">NOP<
 /span><span class="se">\"</span><span class="s2">}, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">flight-booking-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/bookings</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form
 </span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/bookings</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span cl
 ass="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}, </span><span class="se">\"</span><span class="s2">retries</span><span class="se">\"</span><span class="s2">: 3}}, </span><span class="se">\"</span><span class="s2">response</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">body</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">{</span><span class="se">\\</span><span class="s2">n  </span><span class="se">\\\"</span><span class="s2">statusCode</span><span class="se">\\\"</span><span class="s2">: 200,</span><span class="se">\\</span><span class="s2">n  </span><span class="se">\\\"</span><span class="s2">content</span><span class="se">\\\"</span><span class="s2">: </span><span class
 ="se">\\\"</span><span class="s2">Flight booked with id f249543b-765e-4e10-9ba3-74fe33d8af83 for customer mike</span><span class="se">\\\"\\</span><span class="s2">n}</span><span class="se">\"</span><span class="s2">}}"</span>
+         <span class="o">}</span>,
+         <span class="o">{</span>
+             <span class="s2">"id"</span>: 6,
+             <span class="s2">"sagaId"</span>: <span class="s2">"bcd27f0d-6b82-49b3-8067-b16eba970e55"</span>,
+             <span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:24Z"</span>,
+             <span class="s2">"type"</span>: <span class="s2">"TransactionEndedEvent"</span>,
+             <span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">request</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-hotel</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [], </span><span class="se">\"</span><span class="s2">fallback</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">NOP</
 span><span class="se">\"</span><span class="s2">}, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">hotel-reservation-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/reservations</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2
 ">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/reservations</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</spa
 n><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}, </span><span class="se">\"</span><span class="s2">retries</span><span class="se">\"</span><span class="s2">: 3}}, </span><span class="se">\"</span><span class="s2">response</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">body</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">{</span><span class="se">\\</span><span class="s2">n  </span><span class="se">\\\"</span><span class="s2">statusCode</span><span class="se">\\\"</span><span class="s2">: 200,</span><span class="se">\\</span><span class="s2">n  </span><span class="se">\\\"</span><span class="s2">content</span><span class="se">\\\"</span><span class="s2">: </span><
 span class="se">\\\"</span><span class="s2">Hotel reserved with id f74049a0-3d3d-49b6-a45b-058a409daecf for customer mike</span><span class="se">\\\"\\</span><span class="s2">n}</span><span class="se">\"</span><span class="s2">}}"</span>
+         <span class="o">}</span>,
+         <span class="o">{</span>
+             <span class="s2">"id"</span>: 7,
+             <span class="s2">"sagaId"</span>: <span class="s2">"bcd27f0d-6b82-49b3-8067-b16eba970e55"</span>,
+             <span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:25Z"</span>,
+             <span class="s2">"type"</span>: <span class="s2">"TransactionEndedEvent"</span>,
+             <span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">request</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-car</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [], </span><span class="se">\"</span><span class="s2">fallback</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">NOP</sp
 an><span class="se">\"</span><span class="s2">}, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">car-rental-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/rentals</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><
 span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/rentals</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">
 \"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}, </span><span class="se">\"</span><span class="s2">retries</span><span class="se">\"</span><span class="s2">: 3}}, </span><span class="se">\"</span><span class="s2">response</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">body</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">{</span><span class="se">\\</span><span class="s2">n  </span><span class="se">\\\"</span><span class="s2">statusCode</span><span class="se">\\\"</span><span class="s2">: 200,</span><span class="se">\\</span><span class="s2">n  </span><span class="se">\\\"</span><span class="s2">content</span><span class="se">\\\"</span><span class="s2">: </span><span class="se">\\\
 "</span><span class="s2">Car rented with id 937d7364-be07-4d47-9e01-af72290d0478 for customer mike</span><span class="se">\\\"\\</span><span class="s2">n}</span><span class="se">\"</span><span class="s2">}}"</span>
+         <span class="o">}</span>,
+         <span class="o">{</span>
+             <span class="s2">"id"</span>: 8,
+             <span class="s2">"sagaId"</span>: <span class="s2">"bcd27f0d-6b82-49b3-8067-b16eba970e55"</span>,
+             <span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:25Z"</span>,
+             <span class="s2">"type"</span>: <span class="s2">"TransactionStartedEvent"</span>,
+             <span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-payment</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [</span><span class="se">\"</span><span class="s2">request-car</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">request-flight</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">request-hotel</span><span class="se">\"</span><span class="s2">], </span><span class="se">\"</span><span
  class="s2">fallback</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">NOP</span><span class="se">\"</span><span class="s2">}, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">payment-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/payments</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span clas
 s="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/payments</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</sp
 an><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}, </span><span class="se">\"</span><span class="s2">retries</span><span class="se">\"</span><span class="s2">: 3}}"</span>
+         <span class="o">}</span>,
+         <span class="o">{</span>
+             <span class="s2">"id"</span>: 9,
+             <span class="s2">"sagaId"</span>: <span class="s2">"bcd27f0d-6b82-49b3-8067-b16eba970e55"</span>,
+             <span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:25Z"</span>,
+             <span class="s2">"type"</span>: <span class="s2">"TransactionEndedEvent"</span>,
+             <span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">request</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-payment</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">parents</span><span class="se">\"</span><span class="s2">: [</span><span class="se">\"</span><span class="s2">request-car</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">request-flight</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class
 ="s2">request-hotel</span><span class="se">\"</span><span class="s2">], </span><span class="se">\"</span><span class="s2">fallback</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">NOP</span><span class="se">\"</span><span class="s2">}, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">payment-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/payments</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span cl
 ass="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/payments</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">metho
 d</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}, </span><span class="se">\"</span><span class="s2">retries</span><span class="se">\"</span><span class="s2">: 3}}, </span><span class="se">\"</span><span class="s2">response</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">body</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">{</span><span class="s
 e">\\</span><span class="s2">n  </span><span class="se">\\\"</span><span class="s2">statusCode</span><span class="se">\\\"</span><span class="s2">: 200,</span><span class="se">\\</span><span class="s2">n  </span><span class="se">\\\"</span><span class="s2">content</span><span class="se">\\\"</span><span class="s2">: </span><span class="se">\\\"</span><span class="s2">Payment made for customer mike and remaining balance is 200</span><span class="se">\\\"\\</span><span class="s2">n}</span><span class="se">\"</span><span class="s2">}}"</span>
+         <span class="o">}</span>,
+         <span class="o">{</span>
+             <span class="s2">"id"</span>: 10,
+             <span class="s2">"sagaId"</span>: <span class="s2">"bcd27f0d-6b82-49b3-8067-b16eba970e55"</span>,
+             <span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:25Z"</span>,
+             <span class="s2">"type"</span>: <span class="s2">"SagaEndedEvent"</span>,
+             <span class="s2">"contentJson"</span>: <span class="s2">"{}"</span>
+         <span class="o">}</span>
+ 	<span class="o">]</span>
+ <span class="o">}</span>
+</code></pre>
+    </div>
+  </li>
+  <li>
+    <p>Sending the request more than once will trigger compensation due to insufficient account balance in payment-service.Do this implement and get Saga events, you can find compensation events in Saga log.</p>
+
+    <div class="language-bash highlighter-rouge"><pre class="highlight"><code> <span class="o">{</span>
+     <span class="s2">"bcd27f0d-6b82-49b3-8067-b16eba970e55"</span>: <span class="o">[</span>
+         ...
+     <span class="o">]</span>,
+     <span class="s2">"2654fa50-71e2-4fc8-afc2-6a5e0d3dafe9"</span>: <span class="o">[</span>
+         <span class="o">{</span>
+             <span class="s2">"id"</span>: 11,
+             <span class="s2">"sagaId"</span>: <span class="s2">"2654fa50-71e2-4fc8-afc2-6a5e0d3dafe9"</span>,
+             <span class="s2">"creationTime"</span>: <span class="s2">"2017-09-20T00:30:45Z"</span>,
+             <span class="s2">"type"</span>: <span class="s2">"SagaStartedEvent"</span>,
+             <span class="s2">"contentJson"</span>: <span class="s2">"{</span><span class="se">\"</span><span class="s2">policy</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">BackwardRecovery</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">requests</span><span class="se">\"</span><span class="s2">: [{</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-car</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="
 s2">car-rental-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/rentals</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">m
 ike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/rentals</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span 
 class="se">\"</span><span class="s2">}}}}, {</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-hotel</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">hotel-reservation-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/reservation
 s</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/reservations</span><s
 pan class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}}, {</span><span class="se">\"</span><span class="s2">id</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">request-flight</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">type</span><span class="se">\"</
 span><span class="s2">: </span><span class="se">\"</span><span class="s2">rest</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">serviceName</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">flight-booking-service</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">transaction</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/bookings</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">post</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</s
 pan><span class="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">mike</span><span class="se">\"</span><span class="s2">}}}, </span><span class="se">\"</span><span class="s2">compensation</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">path</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">/bookings</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">method</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</span><span class="s2">put</span><span class="se">\"</span><span class="s2">, </span><span class="se">\"</span><span class="s2">params</span><span class="se">\"</span><span class
 ="s2">: {</span><span class="se">\"</span><span class="s2">form</span><span class="se">\"</span><span class="s2">: {</span><span class="se">\"</span><span class="s2">customerId</span><span class="se">\"</span><span class="s2">: </span><span class="se">\"</spa

<TRUNCATED>