本文為阿裡雲容器服務spring cloud應用開發系列文章的第七篇。
七、高可用和容錯(本文)
spring cloud 提供了netflix hystrix智能斷路器能力。當服務調用逾時或出錯的時候,可以将對失效服務的調用斷路,盡量使得錯誤不會在系統中産生雪崩效應。
在build.gradle中添加項目對hystrix和eureka的依賴包。
在應用裡添加<code>@enablecircuitbreaker</code>注解。由于已經引入了hystrix依賴,這實際上是使用hystrix的熔斷器能力。
在服務調用時,針對可能出錯的下遊服務通過<code>@hystrixcommand</code>設定出錯時的fallback方法,一旦調用逾時或出錯會調用fallback方法。
通過引入hystrix,可以完成服務一級的出錯斷路功能,提供了fallback方法後,可以在下遊服務失效的時候傳回臨時替代結果,一定程度上實作了服務降級的能力。
實作應用的高可用的方式之一是将容器執行個體部署到多個可用區中。阿裡雲容器服務支援跨可用區的編排,以及其它很多部署模式。
比如我們想按照如下架構部署應用:

容器叢集的節點分布在兩個可用區裡,每個服務至少為兩個容器執行個體,同一容器執行個體不要在一個可用區内。外面申請一個slb将流量導入,進行跨可用區的負載均衡。
這樣的部署描述檔案可以聲明如下:
在<code>svc2</code>的描述中<code>affinity:service!=svc2</code>表示<code>svc2</code>不能部署在<code>svc1</code>所在節點。
<code>foo</code>的描述中<code>aliyun.scale: "2"</code>表示有兩個節點,這兩個節點必須在不同的可用區(<code>'availability:az==2'</code>)
容器服務支援對docker容器的重新排程:當一個節點失效時,容器可以被自動排程到其他可用節點自動運作。預設情況下,容器的重新排程政策是關閉的。根據需要可以用如下配置來讓重排程政策生效:
本文示範了如何利用阿裡雲容器服務的服務編排能力實作應用的高可用,以及spring cloud hystrix 熔斷器的使用方式。