http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/docs/company-on-kubernetes/index.html ---------------------------------------------------------------------- diff --git a/content/cn/docs/company-on-kubernetes/index.html b/content/cn/docs/company-on-kubernetes/index.html new file mode 100644 index 0000000..66b4651 --- /dev/null +++ b/content/cn/docs/company-on-kubernetes/index.html @@ -0,0 +1,895 @@ +<!doctype html> +<!-- + Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose + Copyright 2017 Michael Rose - mademistakes.com | @mmistakes + Free for personal and commercial use under the MIT license + https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt +--> +<html lang="cn" class="no-js"> + <head> + <meta charset="utf-8"> + +<!-- begin SEO --> + + + + + + + + + +<title>å¨kubernetesä¸ä¸é®å¼é¨ç½²company - Apache incubator ServiceComb</title> + + + + +<meta name="description" content="æ¬ç¯å°ä»ç»å¨kubernetesé群ä¸ä¸é®å¼é¨ç½²åºäºServiceCombå¼åçcompany示ä¾"> + + + + +<meta name="author" content="Zen Lin"> + +<meta property="og:locale" content="cn"> +<meta property="og:site_name" content="Apache incubator ServiceComb"> +<meta property="og:title" content="å¨kubernetesä¸ä¸é®å¼é¨ç½²company"> + + + <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/company-on-kubernetes/"> + <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/company-on-kubernetes/"> + + + + <meta property="og:description" content="æ¬ç¯å°ä»ç»å¨kubernetesé群ä¸ä¸é®å¼é¨ç½²åºäºServiceCombå¼åçcompany示ä¾"> + + + + <meta name="twitter:site" content="@ServiceComb"> + <meta name="twitter:title" content="å¨kubernetesä¸ä¸é®å¼é¨ç½²company"> + <meta name="twitter:description" content="æ¬ç¯å°ä»ç»å¨kubernetesé群ä¸ä¸é®å¼é¨ç½²åºäºServiceCombå¼åçcompany示ä¾"> + <meta name="twitter:url" content=""> + + + <meta name="twitter:card" content="summary"> + + + + + <meta name="twitter:creator" content="@"> + + + + + + + + + + + + + <meta property="og:type" content="article"> + <meta property="article:published_time" content="2017-08-21T00:00:00+08:00"> + + + + + + + + + <script type="application/ld+json"> + { + "@context" : "http://schema.org", + "@type" : "Person", + "name" : "Apache incubator ServiceComb", + "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io", + "sameAs" : null + } + </script> + + + + <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" /> + + + + +<!-- end SEO --> + + +<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed"> + +<!-- http://t.co/dKP3o1e --> +<meta name="HandheldFriendly" content="True"> +<meta name="MobileOptimized" content="320"> +<meta name="viewport" content="width=device-width, initial-scale=1.0"> + +<script> + document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js '; +</script> +<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script> +<script src="/assets/js/prism.js"></script> + +<script type="text/javascript" async + src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML"> +</script> + +<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous"> + +<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script> +<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script> +<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script> +<!-- For all browsers --> +<link rel="stylesheet" href="/assets/css/main.css"> +<link rel="stylesheet" href="/assets/css/prism.css"> + +<!--[if lte IE 9]> + <style> + /* old IE unsupported flexbox fixes */ + .greedy-nav .site-title { + padding-right: 3em; + } + .greedy-nav button { + position: absolute; + top: 0; + right: 0; + height: 100%; + } + </style> +<![endif]--> + +<meta http-equiv="cleartype" content="on"> + + <!-- start custom head snippets --> + +<!-- insert favicons. use http://realfavicongenerator.net/ --> +<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet"> +<script src="/assets/js/custom.js"></script> +<!-- end custom head snippets --> + + </head> + + <body class="layout--single"> + + <!--[if lt IE 9]> +<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div> +<![endif]--> + <div class="masthead"> + <div class="masthead__inner-wrap"> + <div class="masthead__menu"> + <nav id="site-nav" class="greedy-nav"> + + <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a> + + <ul class="visible-links"> + + + <li class="masthead__menu-item"> + + + + <a href="/cn/docs/quick-start/">å¿«éå ¥é¨</a> + + </li> + + + <li class="masthead__menu-item"> + + + + <a href="/cn/users/">ç¨æ·æå</a> + + </li> + + + <li class="masthead__menu-item"> + + + + <a href="/cn/developers/">å¼åè æå</a> + + </li> + + + <li class="masthead__menu-item"> + + + + <a href="/cn/year-archive/">åæ</a> + + </li> + + + <li class="masthead__menu-item"> + + + + <a href="/cn/faqs/">常è§é®é¢</a> + + </li> + + </ul> + <button><div class="navicon"></div></button> + <ul class="hidden-links hidden"></ul> + <div class="nav-lang"> + + + + <a href=/docs/company-on-kubernetes/>English</a> + + </div> + </nav> + </div> + </div> +</div> + + + + + + +<div id="main" role="main"> + + <div class="sidebar sticky"> + + <div class="back-to-home">é¦é¡µ > <a href="/cn/">ServiceComb</a></div> + + + +<div itemscope itemtype="http://schema.org/Person"> + + + + <div class="author__content"> + <h3 class="author__name" itemprop="name">Zen Lin</h3> + + <p class="author__bio" itemprop="description"> + + + To enjoy in opensource community. + + + </p> + + </div> + + <div class="author__urls-wrapper"> + <button class="btn btn--inverse">å ³æ³¨</button> + <ul class="author__urls social-icons"> + + + + <li> + <a href="http://zenlintechnofreak.github.io" itemprop="url"> + <i class="fa fa-fw fa-chain" aria-hidden="true"></i> ç½ç« + </a> + </li> + + + + <li> + <a href="mailto:zenlintechnofr...@gmail.com"> + <meta itemprop="email" content="zenlintechnofr...@gmail.com" /> + <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> çµåé®ç®± + </a> + </li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <!-- + <li> + <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs"> + <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link + </a> + </li> +--> + </ul> + </div> +</div> + + + </div> + + + + <article class="page" itemscope itemtype="http://schema.org/CreativeWork"> + <meta itemprop="headline" content="å¨kubernetesä¸ä¸é®å¼é¨ç½²company"> + <meta itemprop="description" content="æ¬ç¯å°ä»ç»å¨kubernetesé群ä¸ä¸é®å¼é¨ç½²åºäºServiceCombå¼åçcompany示ä¾"> + <meta itemprop="datePublished" content="August 21, 2017"> + + + <div class="page__inner-wrap"> + + + <header> + <h1 class="page__title" itemprop="headline">å¨kubernetesä¸ä¸é®å¼é¨ç½²company +</h1> + + <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> + + + + + 1 åé é 读 + +</p> + + </header> + + + + <section class="page__content" itemprop="text"> + <p>ãã<a href="/cn/docs/linuxcon-workshop-demo/">Linux Con Workshop Demo</a> åæä»ç»äºå¦ä½ä½¿ç¨å¾®æå¡å¼æºå¼åæ¡æ¶ServiceCombå¿«éå¼åcompany示ä¾ï¼å°å ¸åçä¼ä¸çº§åºç¨company示ä¾è¿è¡å¿«éå¾®æå¡åã</p> + +<p>ããç°å¨ï¼<a href="https://github.com/ServiceComb/ServiceComb-Company-WorkShop.git">github</a>ä¸å·²ç»æä¾äºå¨kubernetesé群ä¸ä¸é®å¼é¨ç½²çåè½ãæ¬æå°çé讲解ç¸åºçyamlæ件åæå¡é´éä¿¡ï¼è¿å¯¹äºå¼åè åºäºCompany 模åè¿è¡å¾®æå¡å¼å并ä¸é¨ç½²å°äºä¸å°ä¼ææ帮å©ã</p> + +<h2 id="ä¸é®é¨ç½²">ä¸é®é¨ç½²</h2> + +<p>ãã<a href="https://github.com/ServiceComb/ServiceComb-Company-WorkShop/blob/master/kubernetes/README.md">Run Company on Kubernetes Cluster</a> æä¾äºè¯¦ç»ç使ç¨æ¹æ³ï¼è¯»è åªééè¿ä»¥ä¸3æ¡æ令ï¼å°±å¯å°companyå¨kubernetesé群ä¸é¨ç½²èµ·æ¥ï¼</p> + +<div class="language-shell highlighter-rouge"><pre class="highlight"><code>git clone https://github.com/ServiceComb/ServiceComb-Company-WorkShop.git + +<span class="nb">cd </span>ServiceComb-Company-WorkShop/kubernetes/ + +bash start.sh +</code></pre> +</div> + +<h2 id="yamlæ件解读">Yamlæ件解读</h2> + +<p>ãã以ä½è çå®é ç¯å¢ä¸ºä¾ï¼</p> + +<div class="language-shell highlighter-rouge"><pre class="highlight"><code><span class="gp">root@zenlin:~/src/LinuxCon-Beijing-WorkShop/kubernetes# </span>kubectl get pod -owide +NAME READY STATUS RESTARTS AGE IP NODE +company-beekeeper-3737555734-48sxf 1/1 Running 0 17s 10.244.2.49 zenlinnode2 +company-bulletin-board-4113647782-th91w 1/1 Running 0 17s 10.244.1.53 zenlinnode1 +company-doorman-3391375245-g0p8c 1/1 Running 0 17s 10.244.1.55 zenlinnode1 +company-manager-454733969-0c1g8 1/1 Running 0 16s 10.244.2.50 zenlinnode2 +company-worker-1085546725-x7zl4 1/1 Running 0 17s 10.244.1.54 zenlinnode1 +zipkin-508217170-0khr3 1/1 Running 0 17s 10.244.2.48 zenlinnode2 +</code></pre> +</div> + +<p>ããå¯ä»¥çå°ï¼ä¸å ±å¯å¨äº6个podï¼åå«ä¸ºï¼å ¬å¸ç»çï¼company-managerï¼ãé¨å«ï¼company-doormanï¼ãå ¬åæ ï¼company-bulletin-boardï¼ãæå·¥ï¼company-workerï¼ãå »è人ï¼company-beekeeperï¼ãè°ç¨é¾è·è¸ªï¼zipkinï¼ï¼K8Sé群åå«ä¸ºä»ä»¬åé 对åºçé群IPã</p> + +<div class="language-bash highlighter-rouge"><pre class="highlight"><code><span class="gp">root@zenlin:~/src/LinuxCon-Beijing-WorkShop/kubernetes# </span>kubectl get svc -owide +NAME CLUSTER-IP EXTERNAL-IP PORT<span class="o">(</span>S<span class="o">)</span> AGE SELECTOR +company-bulletin-board 10.99.70.46 <none> 30100/TCP 12m io.kompose.service<span class="o">=</span>company-bulletin-board +company-manager 10.100.61.227 <nodes> 8083:30301/TCP 12m io.kompose.service<span class="o">=</span>company-manager +zipkin 10.104.92.198 <none> 9411/TCP 12m io.kompose.service<span class="o">=</span>zipkin +</code></pre> +</div> + +<p>ããä» å¯å¨äº3个serviceï¼è°ç¨é¾è·è¸ªï¼zipkinï¼ãå ¬åæ ï¼company-bulletin-boardï¼ä»¥åç»çï¼company-managerï¼ï¼è¿æ¯å 为ï¼è°ç¨é¾è·è¸ªåå ¬åæ éè¦å¨é群å è¢«å ¶ä»æå¡éè¿ååæ¥è°ç¨ï¼èç»çéè¦ä½ä¸ºå¯¹å¤ä½ä¸ºç½å ³ï¼ç»ä¸æ´é²æå¡ç«¯å£ã</p> + +<p>ããæ¥çcompany-bulletin-board-service.yamlæ件ï¼</p> + +<div class="language-yaml highlighter-rouge"><pre class="highlight"><code> <span class="s">apiVersion</span><span class="pi">:</span> <span class="s">v1</span> + <span class="s">kind</span><span class="pi">:</span> <span class="s">Service</span> + <span class="s">metadata</span><span class="pi">:</span> + <span class="s">creationTimestamp</span><span class="pi">:</span> <span class="s">null</span> + <span class="s">labels</span><span class="pi">:</span> +<span class="err"> </span><span class="s">io.kompose.service</span><span class="pi">:</span> <span class="s">company-bulletin-board</span> + <span class="s">name</span><span class="pi">:</span> <span class="s">company-bulletin-board</span> + <span class="s">spec</span><span class="pi">:</span> + <span class="s">ports</span><span class="pi">:</span> +<span class="err"> </span><span class="pi">-</span> <span class="s">name</span><span class="pi">:</span> <span class="s2">"</span><span class="s">30100"</span> + <span class="s">port</span><span class="pi">:</span> <span class="s">30100</span> + <span class="s">targetPort</span><span class="pi">:</span> <span class="s">30100</span> + <span class="s">selector</span><span class="pi">:</span> + <span class="s">io.kompose.service</span><span class="pi">:</span> <span class="s">company-bulletin-board</span> + <span class="s">status</span><span class="pi">:</span> + <span class="s">loadBalancer</span><span class="pi">:</span> <span class="pi">{}</span> +</code></pre> +</div> + +<p>ãã该æ件å®ä¹äºå ¬åæ 对åºçserviceï¼ç»serviceå®ä¹äºnameãportåtargetPortï¼è¿æ ·éè¿kubectl exposeå建çserviceä¼å¨é群å å ·å¤DNSè½åï¼å¨å ¶ä»æå¡åå¯å¨è¿æªæ³¨åå°å ¬åæ ï¼æå¡æ³¨ååç°ä¸å¿ï¼æ¶ï¼å°±æ¯ä½¿ç¨è¯¥è½åæ¥è®¿é®å°å ¬åæ 并注åæå¡çã</p> + +<p>ãã对äºlabelåselectorçä½ç¨ï¼å¨ä¸ä¸ªserviceå¯å¨å¤ä¸ªpodçåºæ¯ä¸å°ä¼é常æç¨ï¼å½æ个podå´©æºæ¶ï¼æå¡çselectorå°ä¼èªå¨å°æ»äº¡çpodä»endpointsä¸ç§»é¤ï¼å¹¶ä¸éæ©æ°çpodå å ¥å°endpointsä¸ã</p> + +<p>ããæ¥çcompany-worker-deployment.yaml æ件ï¼</p> + +<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">apiVersion</span><span class="pi">:</span> <span class="s">extensions/v1beta1</span> +<span class="s">kind</span><span class="pi">:</span> <span class="s">Deployment</span> +<span class="s">metadata</span><span class="pi">:</span> + <span class="s">creationTimestamp</span><span class="pi">:</span> <span class="s">null</span> + <span class="s">labels</span><span class="pi">:</span> +<span class="err"> </span><span class="s">io.kompose.service</span><span class="pi">:</span> <span class="s">company-worker</span> + <span class="s">name</span><span class="pi">:</span> <span class="s">company-worker</span> +<span class="s">spec</span><span class="pi">:</span> + <span class="s">replicas</span><span class="pi">:</span> <span class="s">1</span> + <span class="s">strategy</span><span class="pi">:</span> <span class="pi">{}</span> + <span class="s">template</span><span class="pi">:</span> +<span class="err"> </span><span class="s">metadata</span><span class="pi">:</span> +<span class="err"> </span><span class="s">creationTimestamp</span><span class="pi">:</span> <span class="s">null</span> + <span class="err"> </span><span class="s">labels</span><span class="pi">:</span> +<span class="err"> </span><span class="s">io.kompose.service</span><span class="pi">:</span> <span class="s">company-worker</span> +<span class="s">spec</span><span class="pi">:</span> + <span class="s">containers</span><span class="pi">:</span> + <span class="pi">-</span> <span class="s">env</span><span class="pi">:</span> + <span class="pi">-</span> <span class="s">name</span><span class="pi">:</span> <span class="s">ARTIFACT_ID</span> + <span class="s">value</span><span class="pi">:</span> <span class="s">worker</span> + <span class="pi">-</span> <span class="s">name</span><span class="pi">:</span> <span class="s">JAVA_OPTS</span> + <span class="s">value</span><span class="pi">:</span> <span class="s">-Dcse.service.registry.address=http://company-bulletin-board:30100 -Dservicecomb.tracing.collector.adress=http://zipkin:9411</span> + <span class="s">image</span><span class="pi">:</span> <span class="s">servicecomb/worker:0.0.1-SNAPSHOT</span> + <span class="s">name</span><span class="pi">:</span> <span class="s">company-worker</span> + <span class="s">ports</span><span class="pi">:</span> + <span class="pi">-</span> <span class="s">containerPort</span><span class="pi">:</span> <span class="s">7070</span> + <span class="pi">-</span> <span class="s">containerPort</span><span class="pi">:</span> <span class="s">8080</span> + <span class="s">resources</span><span class="pi">:</span> <span class="pi">{}</span> + <span class="s">restartPolicy</span><span class="pi">:</span> <span class="s">Always</span> +<span class="s">status</span><span class="pi">:</span> <span class="pi">{}</span> +</code></pre> +</div> + +<p>ãã该yamlæ件å®ä¹äºå¯æ¬æ°ä¸º1ï¼replicas: 1ï¼çpodï¼å¯ä»¥éè¿ä¿®æ¹è¯¥å¯æ¬æ°æ§å¶æéå¯å¨çpodçå¯æ¬æ°éï¼å½ç¶ä¹å¯ä»¥ä½¿ç¨K8Sçå¼¹æ§ä¼¸ç¼©è½åå»å®ç°æéå¨æ水平伸缩ï¼å¼¹æ§ä¼¸ç¼©é¨åå°å¨åé¢çåæä¸æä¾ï¼ãåé¢æ们æå°è¿company-bulletin-boardå ·å¤äºDNSçè½åï¼æ ç°å¨å¯ä»¥éè¿è¯¥Deploymentä¸çenvä¼ écse.service.registry.addressçå¼ç»podå çæå¡ä½¿ç¨ï¼å¦ï¼ -Dcse.service.registry.address=http://company-bulletin-board:30100ï¼<a href="https://github.com/kubernetes/kubernetes/blob/master/cluster/addons/dns/README.md">kube-dns</a>å°ä¼èªå¨è§£æ该servicenameã</p> + +<p>ãã对äºkuberneteså¦ä½å®ç°æå¡é´éä¿¡ï¼å¯ä»¥é 读<a href="https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/">connect-applications-service</a>ã</p> + +<p>ããå ¶ä»çdeployment.yaml以åservice.yamlé½è·ä»¥ä¸å¤§åå°å¼ï¼å¯ä¸ä¾å¤çæ¯company-manageræå¡ï¼æ们å¯ä»¥çå°å¨company-manager-service.yamlä¸çå°å®ä¹äºnodePortï¼è¿å°ä½¿è½company-manager对é群å¤é¨æä¾å ¬ç½IPåæå¡ç«¯å£ï¼å¦ä¸ï¼</p> + +<div class="language-yaml highlighter-rouge"><pre class="highlight"><code><span class="s">spec</span><span class="pi">:</span> + <span class="s">ports</span><span class="pi">:</span> + <span class="pi">-</span> <span class="s">name</span><span class="pi">:</span> <span class="s2">"</span><span class="s">8083"</span> +<span class="err"> </span><span class="s">port</span><span class="pi">:</span> <span class="s">8083</span> + <span class="err"> </span><span class="s">targetPort</span><span class="pi">:</span> <span class="s">8080</span> + <span class="err"> </span><span class="s">nodePort</span><span class="pi">:</span> <span class="s">30301</span> + <span class="err"> </span><span class="s">protocol</span><span class="pi">:</span> <span class="s">TCP</span> + <span class="s">type</span><span class="pi">:</span> <span class="s">NodePort</span> +</code></pre> +</div> + +<p>ããå¯ä»¥éè¿ä»¥ä¸æ¹æ³è·å¾å ¬ç½IPåæå¡ç«¯å£ï¼</p> + +<div class="language-shell highlighter-rouge"><pre class="highlight"><code>kubectl get svc company-manager -o yaml | grep ExternalIP -C 1 +kubectl get svc company-manager -o yaml | grep nodePort -C 1 +</code></pre> +</div> + +<p>ããæ¥ä¸æ¥ä½ å°±å¯ä»¥ä½¿ç¨å ¬ç½IPåæå¡ç«¯å£è®¿é®å·²ç»é¨ç½²å¥½çcompanyäºï¼å¨<a href="https://github.com/ServiceComb/ServiceComb-Company-WorkShop/blob/master/kubernetes/README.md">github.com/ServiceComb/ServiceComb-Company-WorkShop/kubernetes</a>ä¸è¯¦ç»æä¾äºéè¿å¨é群å 访é®åé群å¤è®¿é®çæ¹æ³ã</p> + +<h2 id="模åå½çº³">模åå½çº³</h2> + +<p>ããéè¿è¯¦ç»é 读ææçdeployment.yamlåservice.yamlï¼å¯ä»¥æ´çåºä»¥ä¸ç模åï¼</p> + +<p><img src="/assets/images/kubernetes-company-cn.PNG" alt="kubernetes-company" class="align-center" /></p> + +<p>ããå¦å¤ï¼ç»å ¸çèªç©ºè®¢ç¥¨ç³»ç»Acmeairä¹å·²ç»æ¯æå¨kubernetesä¸ä¸é®å¼é¨ç½²åºäºServiceCombæ¡æ¶å¼åççæ¬ï¼ç¹å»è®¿é®<a href="https://github.com/WillemJiang/acmeair/tree/master/kubernetes">Run Acmeair on Kubernetes</a>è·å ã</p> + + + </section> + + <footer class="page__meta"> + + + + + + + + + + <p class="page__taxonomy"> + <strong><i class="fa fa-fw fa-tags" aria-hidden="true"></i> æ ç¾: </strong> + <span itemprop="keywords"> + + + + <a href="/tags/#kubernetes" class="page__taxonomy-item" rel="tag">kubernetes</a><span class="sep">, </span> + + + + <a href="/tags/#%E9%83%A8%E7%BD%B2" class="page__taxonomy-item" rel="tag">é¨ç½²</a> + + </span> + </p> + + + + + + + + + <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> ææ°ç:</strong> <time datetime="2017-08-21T00:00:00+08:00">2017å¹´8æ21æ¥</time></p> + + + + </footer> + + <section class="page__share"> + + <h4 class="page__share-title">å享</h4> + + + <a href="https://twitter.com/intent/tweet?via=ServiceComb&text=å¨kubernetesä¸ä¸é®å¼é¨ç½²company /cn/docs/company-on-kubernetes/" class="btn btn--twitter" title="å享 Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a> + + <a href="https://www.facebook.com/sharer/sharer.php?u=/cn/docs/company-on-kubernetes/" class="btn btn--facebook" title="å享 Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a> + + <a href="https://plus.google.com/share?url=/cn/docs/company-on-kubernetes/" class="btn btn--google-plus" title="å享 Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a> + + <a href="https://www.linkedin.com/shareArticle?mini=true&url=/cn/docs/company-on-kubernetes/" class="btn btn--linkedin" title="å享 LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a> +</section> + + + + <nav class="pagination"> + + <a href="/docs/company-on-kubernetes/" class="pagination--pager" title="One-click Deployment at Kubernetes +">åå</a> + + + <a href="/docs/autoscale-on-company/" class="pagination--pager" title="On-demand Resource Control for Micro-serviced Company by Autoscale +">åå</a> + + </nav> + + + </div> + + + <div class="page__comments"> + + + <section id="static-comments"> + + <!-- Start static comments --> + <div class="js-comments"> + + </div> + <!-- End static comments --> + + <!-- Start new comment form --> + <h4 class="page__comments-title">çä¸è¯è®º</h4> + <p class="small">æ¨ççµåé®ç®±å°å并ä¸ä¼è¢«å±ç¤ºã请填åæ è®°ä¸ºå¿ é¡»çå段ã <span class="required">*</span></p> + <form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/ServiceComb/servicesomb.github.io/master"> + <div class="form__spinner"> + <i class="fa fa-spinner fa-spin fa-3x fa-fw"></i> + <span class="sr-only">æ£å¨å è½½...</span> + </div> + + <fieldset> + <label for="comment-form-message">è¯è®º <small class="required">*</small></label> + <textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea> + <div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">Markdownè¯æ³å·²æ¯æã</a></div> + </fieldset> + <fieldset> + <label for="comment-form-name">å§å <small class="required">*</small></label> + <input type="text" id="comment-form-name" name="fields[name]" tabindex="2" /> + </fieldset> + <fieldset> + <label for="comment-form-email">çµåé®ç®± <small class="required">*</small></label> + <input type="email" id="comment-form-email" name="fields[email]" tabindex="3" /> + </fieldset> + <fieldset> + <label for="comment-form-url">ç½ç«ï¼å¯éï¼</label> + <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/> + </fieldset> + <fieldset class="hidden" style="display: none;"> + <input type="hidden" name="options[slug]" value="company-on-kubernetes"> + <label for="comment-form-location">Not used. Leave blank if you are a human.</label> + <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/> + </fieldset> + <!-- Start comment form alert messaging --> + <p class="hidden js-notice"> + <strong class="js-notice-text"></strong> + </p> + <!-- End comment form alert messaging --> + <fieldset> + <button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--large">æ交è¯è®º</button> + </fieldset> + </form> + <!-- End new comment form --> + + </section> + +</div> + + + </article> + + + + <div class="page__related"> + <h4 class="page__related-title">çæ¨è¿å欢</h4> + <div class="grid__wrapper"> + + + + + +<div class="grid__item"> + <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork"> + + <h2 class="archive__item-title" itemprop="headline"> + + <a href="/cn/docs/jira_beginner_guide/" rel="permalink">èå¸æºå¸¦ä½ å·ä»»å¡ - ServiceComb JIRAå ¥é¨æå +</a> + + </h2> + <p class="archive__item-excerpt" itemprop="description">ServiceComb JIRAå ¥é¨æå +</p> + + <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> + + + + + å°äº 1 åé é 读 + +</p> + + </article> +</div> + + + + + + +<div class="grid__item"> + <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork"> + + <h2 class="archive__item-title" itemprop="headline"> + + <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console +</a> + + </h2> + <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console +</p> + + <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> + + + + + 2 åé é 读 + +</p> + + </article> +</div> + + + + + + +<div class="grid__item"> + <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork"> + + <h2 class="archive__item-title" itemprop="headline"> + + <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console +</a> + + </h2> + <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console +</p> + + <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> + + + + + 2 åé é 读 + +</p> + + </article> +</div> + + + + + + +<div class="grid__item"> + <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork"> + + <h2 class="archive__item-title" itemprop="headline"> + + <a href="/cn/docs/how-to-reform-a-legacy-system/" rel="permalink">æ头ç¼çéçç³»ç»è¯¥å¦ä½æ¹é ï¼ +</a> + + </h2> + <p class="archive__item-excerpt" itemprop="description">å¾®æå¡æ¯å¦æ¯ä¸çæå¾ å·²ä¹ çä¼ä¸æ¶æ解å³æ¹æ¡ï¼å¨å¯¹éçç³»ç»è¿è¡å¾®æå¡çæ¹é è¿ç¨ä¸åå¨ææ ·çå°é¾åææï¼åºè¯¥æ³¨æäºä»ä¹ï¼ +</p> + + <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> + + + + + 1 åé é 读 + +</p> + + </article> +</div> + + + </div> + </div> + +</div> + + + <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> + <div align="center" style="margin: 0 0;"> + <ins class="adsbygoogle" + style="display:block; border-bottom: initial;" + data-ad-client="ca-pub-7328585512091257" + data-ad-slot="3049671934" + data-ad-format="auto"></ins> + </div> + + <div class="page__footer"> + <footer> + <!-- start custom footer snippets --> + +<!-- end custom footer snippets --> + <div class="container"> + <div class="row justify-content-md-center"> + + <div class="col"> + <ul> + <p class="header">èµæº</p> + <li><a href="/cn/docs/quick-start/">å¿«éå ¥é¨</a></li> + <li><a href="/cn/users/user-guide/">ç¨æ·æå</a></li> + <li><a href="/cn/slides/">èµæ</a></li> + <li><a href="/cn/users/faq/">常è§é®é¢</a></li> + </ul> + </div> + <div class="col"> + <ul> + <p class="header">è´¡ç®</p> + <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _posts/cn/2017-08-21-company-on-kubernetes.md">æ¥åæ¬ç½é¡µé®é¢</a></li> + <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_posts/cn/2017-08-21-company-on-kubernetes.md">å¨Githubä¸ç¼è¾æ¤é¡µ</a></li> + <li><a href="/cn/developers/submit-codes/">代ç æ交æå</a></li> + </ul> + </div> + <div class="col"> + <ul class="social-icons"> + <p class="header">社åº</p> + <li> + <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">å¼åè </span></a> | + <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">ç¨æ·</span></a> + </li> + <li> + <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a> + </li> + <li> + <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a> + </li> + <li> + <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a> + </li> + </ul> + </div> + </div> +</div> +<div class="page__footer-bottom"> + <div>© 2017 Apache incubator ServiceComb. ææ¯æ¥èªäº <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> æ£å¨å è½½...'); + + $.ajax({ + type: $(this).attr('method'), + url: $(this).attr('action'), + data: $(this).serialize(), + contentType: 'application/x-www-form-urlencoded', + success: function (data) { + $('#comment-form-submit').html('å·²æ交'); + $('.page__comments-form .js-notice').removeClass('notice--danger'); + $('.page__comments-form .js-notice').addClass('notice--success'); + showAlert('æè°¢æ¨çè¯è®ºï¼è¢«æ¹ååå®ä¼ç«å³å¨æ¤ç«ç¹å±ç¤ºã'); + }, + error: function (err) { + console.log(err); + $('#comment-form-submit').html('æ交è¯è®º'); + $('.page__comments-form .js-notice').removeClass('notice--success'); + $('.page__comments-form .js-notice').addClass('notice--danger'); + showAlert('å¾æ±æï¼æ¨çæ交åå¨é误ã请确ä¿ææå¿ å¡«å段é½å·²å¡«åæ£ç¡®ï¼ç¶ååè¯ä¸æ¬¡ã'); + $(form).removeClass('disabled'); + } + }); + + return false; + }); + + function showAlert(message) { + $('.page__comments-form .js-notice').removeClass('hidden'); + $('.page__comments-form .js-notice-text').html(message); + } + })(jQuery); + </script> + + + + + + + + </body> +</html>
http://git-wip-us.apache.org/repos/asf/incubator-servicecomb-website/blob/08e1b43f/content/cn/docs/distributed_saga_1/index.html ---------------------------------------------------------------------- diff --git a/content/cn/docs/distributed_saga_1/index.html b/content/cn/docs/distributed_saga_1/index.html new file mode 100644 index 0000000..201cd1d --- /dev/null +++ b/content/cn/docs/distributed_saga_1/index.html @@ -0,0 +1,880 @@ +<!doctype html> +<!-- + Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose + Copyright 2017 Michael Rose - mademistakes.com | @mmistakes + Free for personal and commercial use under the MIT license + https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt +--> +<html lang="cn" class="no-js"> + <head> + <meta charset="utf-8"> + +<!-- begin SEO --> + + + + + + + + + +<title>ServiceCombä¸çæ°æ®æç»ä¸è´æ§æ¹æ¡ - part 1 - Apache incubator ServiceComb</title> + + + + +<meta name="description" content="å¨å¾®æå¡åºæ¯ä¸çæ°æ®ä¸è´æ§é®é¢èæ¯"> + + + + +<meta name="author" content="Sean Yin"> + +<meta property="og:locale" content="cn"> +<meta property="og:site_name" content="Apache incubator ServiceComb"> +<meta property="og:title" content="ServiceCombä¸çæ°æ®æç»ä¸è´æ§æ¹æ¡ - part 1"> + + + <link rel="canonical" href="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/distributed_saga_1/"> + <meta property="og:url" content="http://github.com/pages/ServiceComb/servicesomb.github.io/cn/docs/distributed_saga_1/"> + + + + <meta property="og:description" content="å¨å¾®æå¡åºæ¯ä¸çæ°æ®ä¸è´æ§é®é¢èæ¯"> + + + + <meta name="twitter:site" content="@ServiceComb"> + <meta name="twitter:title" content="ServiceCombä¸çæ°æ®æç»ä¸è´æ§æ¹æ¡ - part 1"> + <meta name="twitter:description" content="å¨å¾®æå¡åºæ¯ä¸çæ°æ®ä¸è´æ§é®é¢èæ¯"> + <meta name="twitter:url" content=""> + + + <meta name="twitter:card" content="summary"> + + + + + <meta name="twitter:creator" content="@seanyinx"> + + + + + + + + + + + + + <meta property="og:type" content="article"> + <meta property="article:published_time" content="2017-09-13T00:00:00+08:00"> + + + + + + + + + <script type="application/ld+json"> + { + "@context" : "http://schema.org", + "@type" : "Person", + "name" : "Apache incubator ServiceComb", + "url" : "http://github.com/pages/ServiceComb/servicesomb.github.io", + "sameAs" : null + } + </script> + + + + <meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" /> + + + + +<!-- end SEO --> + + +<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache incubator ServiceComb Feed"> + +<!-- http://t.co/dKP3o1e --> +<meta name="HandheldFriendly" content="True"> +<meta name="MobileOptimized" content="320"> +<meta name="viewport" content="width=device-width, initial-scale=1.0"> + +<script> + document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js '; +</script> +<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script> +<script src="/assets/js/prism.js"></script> + +<script type="text/javascript" async + src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML"> +</script> + +<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous"> + +<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script> +<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script> +<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script> +<!-- For all browsers --> +<link rel="stylesheet" href="/assets/css/main.css"> +<link rel="stylesheet" href="/assets/css/prism.css"> + +<!--[if lte IE 9]> + <style> + /* old IE unsupported flexbox fixes */ + .greedy-nav .site-title { + padding-right: 3em; + } + .greedy-nav button { + position: absolute; + top: 0; + right: 0; + height: 100%; + } + </style> +<![endif]--> + +<meta http-equiv="cleartype" content="on"> + + <!-- start custom head snippets --> + +<!-- insert favicons. use http://realfavicongenerator.net/ --> +<link href="https://fonts.cat.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet"> +<script src="/assets/js/custom.js"></script> +<!-- end custom head snippets --> + + </head> + + <body class="layout--single"> + + <!--[if lt IE 9]> +<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div> +<![endif]--> + <div class="masthead"> + <div class="masthead__inner-wrap"> + <div class="masthead__menu"> + <nav id="site-nav" class="greedy-nav"> + + <a class="site-title active" href="/cn"><img src="//assets/images/ServiceComb-logo-1.png"></a> + + <ul class="visible-links"> + + + <li class="masthead__menu-item"> + + + + <a href="/cn/docs/quick-start/">å¿«éå ¥é¨</a> + + </li> + + + <li class="masthead__menu-item"> + + + + <a href="/cn/users/">ç¨æ·æå</a> + + </li> + + + <li class="masthead__menu-item"> + + + + <a href="/cn/developers/">å¼åè æå</a> + + </li> + + + <li class="masthead__menu-item"> + + + + <a href="/cn/year-archive/">åæ</a> + + </li> + + + <li class="masthead__menu-item"> + + + + <a href="/cn/faqs/">常è§é®é¢</a> + + </li> + + </ul> + <button><div class="navicon"></div></button> + <ul class="hidden-links hidden"></ul> + <div class="nav-lang"> + + + + <a href=/docs/distributed_saga_1/>English</a> + + </div> + </nav> + </div> + </div> +</div> + + + + + + +<div id="main" role="main"> + + <div class="sidebar sticky"> + + <div class="back-to-home">é¦é¡µ > <a href="/cn/">ServiceComb</a></div> + + + +<div itemscope itemtype="http://schema.org/Person"> + + + + <div class="author__content"> + <h3 class="author__name" itemprop="name">Sean Yin</h3> + + <p class="author__bio" itemprop="description"> + + + Nothing but speed is indestructible + + + </p> + + </div> + + <div class="author__urls-wrapper"> + <button class="btn btn--inverse">å ³æ³¨</button> + <ul class="author__urls social-icons"> + + + + <li> + <a href="http://seanyinx.github.io" itemprop="url"> + <i class="fa fa-fw fa-chain" aria-hidden="true"></i> ç½ç« + </a> + </li> + + + + <li> + <a href="mailto:seany...@gmail.com"> + <meta itemprop="email" content="seany...@gmail.com" /> + <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> çµåé®ç®± + </a> + </li> + + + + + + <li> + <a href="https://twitter.com/seanyinx" itemprop="sameAs"> + <i class="fa fa-fw fa-twitter-square" aria-hidden="true"></i> Twitter + </a> + </li> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <!-- + <li> + <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs"> + <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link + </a> + </li> +--> + </ul> + </div> +</div> + + + </div> + + + + <article class="page" itemscope itemtype="http://schema.org/CreativeWork"> + <meta itemprop="headline" content="ServiceCombä¸çæ°æ®æç»ä¸è´æ§æ¹æ¡ - part 1"> + <meta itemprop="description" content="å¨å¾®æå¡åºæ¯ä¸çæ°æ®ä¸è´æ§é®é¢èæ¯"> + <meta itemprop="datePublished" content="September 13, 2017"> + <meta itemprop="dateModified" content="September 13, 2017"> + + <div class="page__inner-wrap"> + + + <header> + <h1 class="page__title" itemprop="headline">ServiceCombä¸çæ°æ®æç»ä¸è´æ§æ¹æ¡ - part 1 +</h1> + + <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> + + + + + å°äº 1 åé é 读 + +</p> + + </header> + + + + <section class="page__content" itemprop="text"> + <p>æ°æ®ä¸è´æ§æ¯è®¸å¤ç³»ç»çå ³é®é¨åï¼ç¹å«æ¯å¨å¾®æå¡åäºçç¯å¢ä¸ãæ们æè¿å¨ServiceCombä¸åå¸äº<a href="https://github.com/ServiceComb/saga">Saga</a>项ç®ï¼ +以解å³æ°æ®ä¸è´æ§é®é¢ãä½ä¸ºä»ä¹æ°æ®ä¸è´æ§å¦æ¤éè¦ï¼Sagaåæ¯ä»ä¹ï¼</p> + +<h2 id="åä½åºç¨çæ°æ®ä¸è´æ§">åä½åºç¨çæ°æ®ä¸è´æ§</h2> +<p>æ³è±¡ä¸ä¸å¦ææ们ç»è¥çä¸å®¶å¤§åä¼ä¸ï¼ä¸å±æèªç©ºå ¬å¸ãç§è½¦å ¬å¸ãåè¿éé åºãæ们为客æ·æä¾ä¸ç«å¼çæ 游è¡ç¨è§åæå¡ï¼è¿æ ·å®¢æ·åªéè¦æä¾åºè¡ç®çå°ï¼ +æ们帮å©å®¢æ·é¢è®¢æºç¥¨ãç§è½¦ã以åé¢è®¢é åºãä»ä¸å¡çè§åº¦ï¼æä»¬å¿ é¡»ä¿è¯<strong>ä¸è¿°ä¸ä¸ªæå¡çé¢è®¢é½å®ææè½æ»¡è¶³ä¸ä¸ªæåçæ 游è¡ç¨ï¼å¦åä¸è½æè¡</strong>ã</p> + +<p>æ们çåä½åºç¨è¦æ»¡è¶³è¿ä¸ªéæ±é常ç®åï¼åªéå°è¿ä¸ªä¸ä¸ªæå¡è¯·æ±æ¾å°åä¸ä¸ªæ°æ®åºäºå¡ä¸ï¼æ°æ®åºä¼å¸®æ们ä¿è¯å ¨é¨æåæè å ¨é¨åæ»ã</p> + +<p><img src="/assets/images/saga.monolithic.png" alt="åä½åºç¨" class="align-center" /></p> + +<p>å½è¿ä¸ªåè½ä¸çº¿ä»¥åï¼å ¬å¸é常满æï¼å®¢æ·ä¹é常é«å ´ã</p> + +<h2 id="å¾®æå¡åºæ¯ä¸çæ°æ®ä¸è´æ§">å¾®æå¡åºæ¯ä¸çæ°æ®ä¸è´æ§</h2> +<p>è¿å å¹´ä¸ï¼æ们çè¡ç¨è§åæå¡é常æåï¼ä¼ä¸è¸è¸æ¥ä¸ï¼ç¨æ·éä¹ç¿»äºæ°ååãä¼ä¸çä¸å±èªç©ºå ¬å¸ãç§è½¦å ¬å¸ãåè¿éé åºä¹ç¸ç»§æ¨åºäºæ´å¤æå¡ä»¥æ»¡è¶³å®¢æ·éæ±ï¼ +æ们çåºç¨åå¼åå¢éä¹å æ¤æ¥æ¸åºå¤§ãå¦ä»æ们çåä½åºç¨å·²åå¾å¦æ¤å¤æï¼ä»¥è³äºæ²¡äººäºè§£æ´ä¸ªåºç¨æ¯æä¹è¿ä½çãæ´ç³çæ¯æ°åè½çä¸çº¿ç°å¨éè¦ææç åå¢éåä½ï¼ +æ¥å¤å¥ææ°å¨æè½å®æãççå¸åºå æçæ¯åµæä¸ï¼å ¬å¸é«å±å¯¹ç åé¨é¨è¶æ¥è¶ä¸æ»¡æã</p> + +<p>ç»è¿æ°è½®è®¨è®ºï¼æ们æç»å³å®å°åºå¤§çåä½åºç¨ä¸å为åï¼æºç¥¨é¢è®¢æå¡ãç§è½¦æå¡ãé åºé¢è®¢æå¡ãåæ¯ä»æå¡ãæå¡åèªä½¿ç¨èªå·±çæ°æ®åºï¼å¹¶éè¿HTTPåè®®éä¿¡ã +è´è´£åæå¡çå¢éæ ¹æ®å¸åºéæ±æç §èªå·±çå¼åèå¥åçä¸çº¿ãå¦ä»æ们é¢ä¸´æ°çææï¼å¦ä½ä¿è¯æå<strong>ä¸ä¸ªæå¡çé¢è®¢é½å®ææè½æ»¡è¶³ä¸ä¸ªæåçæ 游è¡ç¨ï¼ +å¦åä¸è½æè¡</strong>çä¸å¡è§åï¼ç°å¨æå¡æåèªçè¾¹çï¼èä¸æ°æ®åºéåä¹ä¸å°½ç¸åï¼éè¿æ°æ®åºä¿è¯æ°æ®ä¸è´æ§çæ¹æ¡å·²ä¸å¯è¡ã</p> + +<p><img src="/assets/images/saga.service.boundary.png" alt="æå¡è¾¹ç" class="align-center" /></p> + +<h2 id="sagas">Sagas</h2> +<p>幸è¿çæ¯æ们å¨äºèç½æ¾å°ä¸ç¯ç²¾å½©ç<a href="https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf">论æ</a>ï¼æä¸æåºçæ°æ®ä¸è´æ§è§£å³æ¹æ¡<em>Saga</em>æ°å¥½æ»¡è¶³æ们çä¸å¡è¦æ±ã</p> + +<blockquote> + <p>Sagaæ¯ä¸ä¸ªé¿æ´»äºå¡ï¼å¯è¢«å解æå¯ä»¥äº¤éè¿è¡çåäºå¡éåãå ¶ä¸æ¯ä¸ªåäºå¡é½æ¯ä¸ä¸ªä¿ææ°æ®åºä¸è´æ§ççå®äºå¡ã[<a href="https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf">1</a>]</p> +</blockquote> + +<p>å¨æ们çä¸å¡åºæ¯ä¸ï¼ä¸ä¸ªè¡ç¨è§åçäºå¡å°±æ¯ä¸ä¸ªSagaï¼å ¶ä¸å å«å个åäºå¡ï¼æºç¥¨é¢è®¢ãç§è½¦ãé åºé¢è®¢ãåæ¯ä»ã</p> + +<p><img src="/assets/images/saga.transactions.png" alt="äºå¡" class="align-center" /></p> + +<p><a href="http://www.chrisrichardson.net/">Chris Richardson</a>å¨ä»çæç« <a href="http://microservices.io/patterns/data/saga.html">Pattern: Saga</a>ä¸å¯¹Sagaæææè¿°ã +Caitie McCaffreyä¹å¨å¥¹ç<a href="https://www.youtube.com/watch?v=xDuwrtwYHu8">æ¼è®²</a>ä¸æå°å¦ä½å¨å¾®è½¯ç<a href="https://en.wikipedia.org/wiki/Halo_4">å æ 4</a>游æä¸å¦ä½åºç¨saga解å³æ°æ®ä¸è´æ§é®é¢ã</p> + +<h3 id="sagaçè¿è¡åç">Sagaçè¿è¡åç</h3> +<blockquote> + <p>Sagaä¸çäºå¡ç¸äºå ³èï¼åºä½ä¸ºï¼éååï¼åä½æ§è¡ãä»»ä½æªå®å ¨æ§è¡çSagaæ¯ä¸æ»¡è¶³è¦æ±çï¼å¦æåçï¼å¿ é¡»å¾å°è¡¥å¿ãè¦ä¿®æ£æªå®å ¨æ§è¡çé¨åï¼ +æ¯ä¸ªsagaå交æT<sub>1</sub>åºæä¾å¯¹åºè¡¥å¿äºå¡C<sub>1</sub>[<a href="https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf">1</a>]</p> +</blockquote> + +<p>æä»¬æ ¹æ®ä¸è¿°è§åå®ä¹ä»¥ä¸äºå¡åå ¶ç¸åºçäºå¡è¡¥å¿ï¼</p> + +<table> + <thead> + <tr> + <th style="text-align: center">æå¡</th> + <th style="text-align: center">äºå¡</th> + <th style="text-align: center">è¡¥å¿</th> + </tr> + </thead> + <tbody> + <tr> + <td style="text-align: center">æºç¥¨é¢è®¢</td> + <td style="text-align: center">é¢è®¢æºç¥¨</td> + <td style="text-align: center">åæ¶é¢è®¢</td> + </tr> + <tr> + <td style="text-align: center">ç§è½¦</td> + <td style="text-align: center">ç§è½¦</td> + <td style="text-align: center">åæ¶é¢è®¢</td> + </tr> + <tr> + <td style="text-align: center">é åºé¢è®¢</td> + <td style="text-align: center">é¢è®¢æ¿é´</td> + <td style="text-align: center">åæ¶é¢è®¢</td> + </tr> + <tr> + <td style="text-align: center">æ¯ä»</td> + <td style="text-align: center">æ¯ä»</td> + <td style="text-align: center">é款</td> + </tr> + </tbody> +</table> + +<blockquote> + <p>å½æ¯ä¸ªsagaåäºå¡ T<sub>1</sub>, T<sub>2</sub>, â¦, T<sub>n</sub> é½æ对åºçè¡¥å¿å®ä¹ C<sub>1</sub>, C<sub>2</sub>, â¦, C<sub>n-1</sub>, +é£ä¹sagaç³»ç»å¯ä»¥ä¿è¯ [<a href="https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf">1</a>]</p> + <ul> + <li>åäºå¡åºå T<sub>1</sub>, T<sub>2</sub>, â¦, T<sub>n</sub>å¾ä»¥å®æ (æä½³æ åµ)</li> + <li>æè åºå T<sub>1</sub>, T<sub>2</sub>, â¦, T<sub>j</sub>, C<sub>j</sub>, â¦, C<sub>2</sub>, C<sub>1</sub>, 0 < j < n, å¾ä»¥å®æ</li> + </ul> +</blockquote> + +<p>æ¢å¥è¯è¯´ï¼éè¿ä¸è¿°å®ä¹çäºå¡/è¡¥å¿ï¼sagaä¿è¯æ»¡è¶³ä»¥ä¸ä¸å¡è§åï¼</p> +<ul> + <li>ææçé¢è®¢é½è¢«æ§è¡æåï¼å¦æä»»ä½ä¸ä¸ªå¤±è´¥ï¼é½ä¼è¢«åæ¶</li> + <li>å¦ææåä¸æ¥ä»æ¬¾å¤±è´¥ï¼ææé¢è®¢ä¹å°è¢«åæ¶</li> +</ul> + +<h3 id="sagaçæ¢å¤æ¹å¼">Sagaçæ¢å¤æ¹å¼</h3> +<p><a href="https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf">å论æ</a>ä¸æè¿°äºä¸¤ç§ç±»åçSagaæ¢å¤æ¹å¼ï¼</p> +<ul> + <li><strong>ååæ¢å¤</strong> <em>è¡¥å¿</em>ææå·²å®æçäºå¡ï¼å¦æä»»ä¸åäºå¡å¤±è´¥</li> + <li><strong>ååæ¢å¤</strong> <em>éè¯</em>失败çäºå¡ï¼å设æ¯ä¸ªåäºå¡æç»é½ä¼æå</li> +</ul> + +<p>æ¾ç¶ï¼ååæ¢å¤æ²¡æå¿ è¦æä¾è¡¥å¿äºå¡ï¼å¦æä½ çä¸å¡ä¸ï¼åäºå¡ï¼æç»ï¼æ»ä¼æåï¼æè¡¥å¿äºå¡é¾ä»¥å®ä¹æä¸å¯è½ï¼ååæ¢å¤æ´ç¬¦åä½ çéæ±ã</p> + +<p>ç论ä¸è¡¥å¿äºå¡æ°¸ä¸å¤±è´¥ï¼ç¶èï¼å¨åå¸å¼ä¸çä¸ï¼æå¡å¨å¯è½ä¼å®æºï¼ç½ç»å¯è½ä¼å¤±è´¥ï¼çè³æ°æ®ä¸å¿ä¹å¯è½ä¼åçµãå¨è¿ç§æ åµä¸æ们è½åäºä»ä¹ï¼ +æåçæ段æ¯æä¾åéæªæ½ï¼æ¯å¦äººå·¥å¹²é¢ã</p> + +<h3 id="使ç¨sagaçæ¡ä»¶">使ç¨Sagaçæ¡ä»¶</h3> +<p>Sagaçèµ·æ¥å¾æå¸æ满足æ们çéæ±ãææé¿æ´»äºå¡é½å¯ä»¥è¿æ ·ååï¼è¿éæä¸äºéå¶ï¼</p> +<ul> + <li>Sagaåªå 许两个å±æ¬¡çåµå¥ï¼é¡¶çº§çSagaåç®ååäºå¡ [<a href="https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf">1</a>]</li> + <li>å¨å¤å±ï¼å ¨ååæ§ä¸è½å¾å°æ»¡è¶³ãä¹å°±æ¯è¯´ï¼sagaså¯è½ä¼çå°å ¶ä»sagasçé¨åç»æ [<a href="https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf">1</a>]</li> + <li>æ¯ä¸ªåäºå¡åºè¯¥æ¯ç¬ç«çååè¡ä¸º [2]</li> +</ul> + +<p>å¨æ们çä¸å¡åºæ¯ä¸ï¼èªçé¢è®¢ãç§è½¦ãé åºé¢è®¢åä»æ¬¾æ¯èªç¶ç¬ç«çè¡ä¸ºï¼èä¸æ¯ä¸ªäºå¡é½å¯ä»¥ç¨å¯¹åºæå¡çæ°æ®åºä¿è¯ååæä½ã</p> + +<p>æ们å¨è¡ç¨è§åäºå¡å±é¢ä¹ä¸éè¦ååæ§ãä¸ä¸ªç¨æ·å¯ä»¥é¢è®¢æåä¸å¼ æºç¥¨ï¼èåç±äºä¿¡ç¨å¡ä½é¢ä¸è¶³è被åæ¶ãåæ¶å¦ä¸ä¸ªç¨æ·å¯è½å¼å§ä¼çå°å·²æ ä½ç¥¨ï¼ +æ¥çç±äºåè é¢è®¢è¢«åæ¶ï¼æåä¸å¼ æºç¥¨è¢«éæ¾ï¼èæ¢å°æåä¸ä¸ªåº§ä½å¹¶å®æè¡ç¨è§åã</p> + +<p>è¡¥å¿ä¹æéèèçäºé¡¹ï¼</p> +<blockquote> + <p>è¡¥å¿äºå¡ä»è¯ä¹è§åº¦æ¤æ¶äºäºå¡T<sub>i</sub>çè¡ä¸ºï¼ä½æªå¿ è½å°æ°æ®åºè¿åå°æ§è¡T<sub>i</sub>æ¶çç¶æãï¼ä¾å¦ï¼å¦æäºå¡è§¦å导弹åå°ï¼ +åå¯è½æ æ³æ¤æ¶æ¤æä½ï¼[<a href="https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf">1</a>]</p> +</blockquote> + +<p>ä½è¿å¯¹æ们çä¸å¡æ¥è¯´ä¸æ¯é®é¢ãå ¶å®é¾ä»¥æ¤æ¶çè¡ä¸ºä¹æå¯è½è¢«è¡¥å¿ãä¾å¦ï¼åéçµé®çäºå¡å¯ä»¥éè¿åé解éé®é¢çå¦ä¸å°çµé®æ¥è¡¥å¿ã</p> + +<h2 id="æ»ç»">æ»ç»</h2> +<p>ç°å¨æ们æäºéè¿Sagaæ¥è§£å³æ°æ®ä¸è´æ§é®é¢çæ¹æ¡ãå®å 许æ们æåå°æ§è¡ææäºå¡ï¼æå¨ä»»ä½äºå¡å¤±è´¥çæ åµä¸ï¼è¡¥å¿å·²æåçäºå¡ã +è½ç¶Sagaä¸æä¾<a href="https://en.wikipedia.org/wiki/ACID">ACID</a>ä¿è¯ï¼ä½ä»éç¨äºè®¸å¤æ°æ®æç»ä¸è´æ§çåºæ¯ãé£æ们å¦ä½è®¾è®¡ä¸ä¸ªSagaç³»ç»ï¼ +让æ们å¨ä¸ä¸ç¯åææ¥åçè¿ä¸ªé®é¢ã</p> + +<h2 id="åè">åè</h2> +<ol> + <li><a href="https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf">Original Paper on Sagas</a> by By Hector Garcia-Molina & Kenneth Salem</li> + <li>Gifford, David K and James E Donahue, âCoordinating Independent Atomic Actionsâ, Proceedings of IEEE COMPCON, San Francisco, CA, February, 1985</li> + <li>Chris Richardson: http://www.chrisrichardson.net/</li> + <li>ServiceComb Saga Project: https://github.com/ServiceComb/saga</li> +</ol> + + + + </section> + + <footer class="page__meta"> + + + + + + + + <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> ææ°ç:</strong> <time datetime="2017-09-13">2017å¹´9æ13æ¥</time></p> + + + + </footer> + + <section class="page__share"> + + <h4 class="page__share-title">å享</h4> + + + <a href="https://twitter.com/intent/tweet?via=ServiceComb&text=ServiceCombä¸çæ°æ®æç»ä¸è´æ§æ¹æ¡ - part 1 /cn/docs/distributed_saga_1/" class="btn btn--twitter" title="å享 Twitter"><i class="fa fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a> + + <a href="https://www.facebook.com/sharer/sharer.php?u=/cn/docs/distributed_saga_1/" class="btn btn--facebook" title="å享 Facebook"><i class="fa fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a> + + <a href="https://plus.google.com/share?url=/cn/docs/distributed_saga_1/" class="btn btn--google-plus" title="å享 Google Plus"><i class="fa fa-fw fa-google-plus" aria-hidden="true"></i><span> Google+</span></a> + + <a href="https://www.linkedin.com/shareArticle?mini=true&url=/cn/docs/distributed_saga_1/" class="btn btn--linkedin" title="å享 LinkedIn"><i class="fa fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a> +</section> + + + + <nav class="pagination"> + + <a href="/docs/distributed_saga_1/" class="pagination--pager" title="Eventual Data Consistency Solution in ServiceComb - part 1 +">åå</a> + + + <a href="/cn/docs/maven_dependency_management/" class="pagination--pager" title="使ç¨maven管çå¤æä¾èµå ³ç³»çæå·§ +">åå</a> + + </nav> + + + </div> + + + <div class="page__comments"> + + + <section id="static-comments"> + + <!-- Start static comments --> + <div class="js-comments"> + + </div> + <!-- End static comments --> + + <!-- Start new comment form --> + <h4 class="page__comments-title">çä¸è¯è®º</h4> + <p class="small">æ¨ççµåé®ç®±å°å并ä¸ä¼è¢«å±ç¤ºã请填åæ è®°ä¸ºå¿ é¡»çå段ã <span class="required">*</span></p> + <form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/ServiceComb/servicesomb.github.io/master"> + <div class="form__spinner"> + <i class="fa fa-spinner fa-spin fa-3x fa-fw"></i> + <span class="sr-only">æ£å¨å è½½...</span> + </div> + + <fieldset> + <label for="comment-form-message">è¯è®º <small class="required">*</small></label> + <textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea> + <div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">Markdownè¯æ³å·²æ¯æã</a></div> + </fieldset> + <fieldset> + <label for="comment-form-name">å§å <small class="required">*</small></label> + <input type="text" id="comment-form-name" name="fields[name]" tabindex="2" /> + </fieldset> + <fieldset> + <label for="comment-form-email">çµåé®ç®± <small class="required">*</small></label> + <input type="email" id="comment-form-email" name="fields[email]" tabindex="3" /> + </fieldset> + <fieldset> + <label for="comment-form-url">ç½ç«ï¼å¯éï¼</label> + <input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/> + </fieldset> + <fieldset class="hidden" style="display: none;"> + <input type="hidden" name="options[slug]" value="saga-background"> + <label for="comment-form-location">Not used. Leave blank if you are a human.</label> + <input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/> + </fieldset> + <!-- Start comment form alert messaging --> + <p class="hidden js-notice"> + <strong class="js-notice-text"></strong> + </p> + <!-- End comment form alert messaging --> + <fieldset> + <button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--large">æ交è¯è®º</button> + </fieldset> + </form> + <!-- End new comment form --> + + </section> + +</div> + + + </article> + + + + <div class="page__related"> + <h4 class="page__related-title">çæ¨è¿å欢</h4> + <div class="grid__wrapper"> + + + + + +<div class="grid__item"> + <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork"> + + <h2 class="archive__item-title" itemprop="headline"> + + <a href="/cn/docs/jira_beginner_guide/" rel="permalink">èå¸æºå¸¦ä½ å·ä»»å¡ - ServiceComb JIRAå ¥é¨æå +</a> + + </h2> + <p class="archive__item-excerpt" itemprop="description">ServiceComb JIRAå ¥é¨æå +</p> + + <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> + + + + + å°äº 1 åé é 读 + +</p> + + </article> +</div> + + + + + + +<div class="grid__item"> + <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork"> + + <h2 class="archive__item-title" itemprop="headline"> + + <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console +</a> + + </h2> + <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console +</p> + + <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> + + + + + 2 åé é 读 + +</p> + + </article> +</div> + + + + + + +<div class="grid__item"> + <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork"> + + <h2 class="archive__item-title" itemprop="headline"> + + <a href="/docs/service-center-ui/" rel="permalink">Service-Center Management UI Console +</a> + + </h2> + <p class="archive__item-excerpt" itemprop="description">An introduction Service-Center Management Console +</p> + + <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> + + + + + 2 åé é 读 + +</p> + + </article> +</div> + + + + + + +<div class="grid__item"> + <article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork"> + + <h2 class="archive__item-title" itemprop="headline"> + + <a href="/cn/docs/how-to-reform-a-legacy-system/" rel="permalink">æ头ç¼çéçç³»ç»è¯¥å¦ä½æ¹é ï¼ +</a> + + </h2> + <p class="archive__item-excerpt" itemprop="description">å¾®æå¡æ¯å¦æ¯ä¸çæå¾ å·²ä¹ çä¼ä¸æ¶æ解å³æ¹æ¡ï¼å¨å¯¹éçç³»ç»è¿è¡å¾®æå¡çæ¹é è¿ç¨ä¸åå¨ææ ·çå°é¾åææï¼åºè¯¥æ³¨æäºä»ä¹ï¼ +</p> + + <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> + + + + + 1 åé é 读 + +</p> + + </article> +</div> + + + </div> + </div> + +</div> + + + <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> + <div align="center" style="margin: 0 0;"> + <ins class="adsbygoogle" + style="display:block; border-bottom: initial;" + data-ad-client="ca-pub-7328585512091257" + data-ad-slot="3049671934" + data-ad-format="auto"></ins> + </div> + + <div class="page__footer"> + <footer> + <!-- start custom footer snippets --> + +<!-- end custom footer snippets --> + <div class="container"> + <div class="row justify-content-md-center"> + + <div class="col"> + <ul> + <p class="header">èµæº</p> + <li><a href="/cn/docs/quick-start/">å¿«éå ¥é¨</a></li> + <li><a href="/cn/users/user-guide/">ç¨æ·æå</a></li> + <li><a href="/cn/slides/">èµæ</a></li> + <li><a href="/cn/users/faq/">常è§é®é¢</a></li> + </ul> + </div> + <div class="col"> + <ul> + <p class="header">è´¡ç®</p> + <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/issues/new?title=Issue with _posts/cn/2017-09-13-saga-background.md">æ¥åæ¬ç½é¡µé®é¢</a></li> + <li><a href="https://github.com/ServiceComb/ServiceComb.github.io/edit/master/_posts/cn/2017-09-13-saga-background.md">å¨Githubä¸ç¼è¾æ¤é¡µ</a></li> + <li><a href="/cn/developers/submit-codes/">代ç æ交æå</a></li> + </ul> + </div> + <div class="col"> + <ul class="social-icons"> + <p class="header">社åº</p> + <li> + <a href="https://groups.google.com/forum/#!forum/servicecomb-developers" target="_blank"><span class="group">å¼åè </span></a> | + <a href="https://groups.google.com/forum/#!forum/servicecomb-users" target="_blank">ç¨æ·</span></a> + </li> + <li> + <a href="http://github.com/ServiceComb" target="_blank"><span class="github">Github</span></a> + </li> + <li> + <a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a> + </li> + <li> + <a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a> + </li> + </ul> + </div> + </div> +</div> +<div class="page__footer-bottom"> + <div>© 2017 Apache incubator ServiceComb. ææ¯æ¥èªäº <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> æ£å¨å è½½...'); + + $.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>