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/<your_github_name>/ServiceComb.github.io.git +</code></pre> + </div> + + <p>注æï¼è¯·å° <your_github_name> æ¿æ¢ä¸ºæ¨ç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/<your_github_name>/ServiceComb.github.io.git <span class="o">(</span>fetch<span class="o">)</span> +origin https://github.com/<your_github_name>/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 <your_branch_name> +</code></pre> + </div> + </li> +</ul> + +<p>ããæ³¨æï¼ <your_branch_name> 为æ¨èªå®ä¹ç忝ååã</p> + +<p>ããåå»ºå®æåå¯è¿è¡ä»£ç æ´æ¹ã</p> + +<ul> + <li> + <p>æäº¤ä»£ç å°è¿ç¨åæ¯ï¼</p> + + <div class="language-shell highlighter-rouge"><pre class="highlight"><code>git commit -a -m <span class="s2">"<you_commit_message>"</span> +git push origin <your_branch_name> +</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 页é¢ï¼åæ¢åæ¯å°æäº¤ç忝 <your_branch_name> ï¼ä¾æ¬¡ç¹å» <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>© 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> & <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:[email protected]"> + <meta itemprop="email" content="[email protected]" /> + <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><heapster-ip>:<heapster-port> +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>© 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> & <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:[email protected]"> + <meta itemprop="email" content="[email protected]" /> + <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 -> 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>© 2017 Apache incubator ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> & <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>
