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.zh...@huawei.com";>
+            <meta itemprop="email" content="yangyong.zh...@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.siddiq...@huawei.com";>
+            <meta itemprop="email" 
content="mohammad.asif.siddiq...@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....@gmail.com";>
+            <meta itemprop="email" content="eric.lee....@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>


Reply via email to