Spring Cloud 和Kubernetes都自稱本身是部署和運行微服務的最好環境,可是它們在本質上和解決不一樣問題上是有很大差別的。在本文中,咱們將看到每一個平臺如何幫助交付基於微服務的架構(MSA),它們擅長哪一個領域,而且如何一箭雙鵰的使用從而在微服務之旅上得到成功。html
最近我讀了 A. Lukyanchikov的一篇很是棒的文章(https://dzone.com/articles/microservice-architecture-with-spring-cloud-and-do),關於使用Spring Cloud和Docker來構建微服務架構。若是你還沒看過,建議你看一下,它給出了一個綜合的概述:如何使用Spring Cloud來建立一個簡單的基於微服務的系統。爲了建立一個可增加到數十或上百個服務的可擴展、彈性的微服務系統,必須在一個擁有普遍構建時和運行能力工具集的幫助下集中管理和治理。經過Spring Cloud,涉及到實現功能性服務(例如統計服務、帳戶服務和通知服務)而且支持基礎服務(例如日誌分析、配置服務器、服務發現、服務受權)。一個使用Spring Cloud的MSA描述圖表以下:java
用Spring Cloud的MSA(來自A. Lukyanchikov)spring
這張圖涵蓋了系統的運行方面,可是不涉及打包、持續集成、縮放、高可用和自我修復,這些在MSA中一樣很是重要。咱們假設大部分Java開發人員熟悉Spring Cloud,在本文中,咱們將作個類比而且看看Kubernetes如何聯繫Spring Cloud來處理這些額外的障礙。docker
經過特徵對比而不是作一個比較,咱們來看一下廣闊的微服務障礙和Spring Cloud與Kubernetes如何處理這些障礙。現在MSA的優勢就是它是一種得益於易理解和權衡下的架構風格。微服務經過獨立部署和多樣化技術使得模塊邊界強化。可是它們以開發分佈式系統成本和巨大的運營開銷爲代價。一個關鍵的成功要素就是集中在周圍的工具上,將會幫你處理儘量多的MSA問題。啓動過程快而簡單是很重要的,可是產品過程是很長的,你須要變得更厲害才能成功。編程
微服務關注點服務器
在上面的圖中,咱們能夠看到一個最多見的技術障礙列表(不涵蓋非技術性的障礙,例如組織結構、文化等等)須要在MSA中處理。架構
兩個平臺Spring Cloud和Kubernetes很是不一樣而且它們之間沒有直接的相同特徵。若是在兩個平臺上每一個MSA障礙映射到技術/項目之前經常使用來處理它,會提出以下圖表。負載均衡
Spring Cloud和Kubernetes技術框架
上面的圖表主要的結論就是:分佈式
爲了演示每一個項目的範圍,這裏有個(幾乎)端到端的MSA需求表格,在底部從硬件開始,上到頂部DevOps和自服務經驗,以及它如何將Spring Cloud和Kubernetes平臺聯繫到一塊兒。
微服務需求
在某些狀況下,兩個項目用不一樣的方法知足一樣的需求,在一些方面,一個項目能夠比另外一個項目更強。但也有個sweet的地方,就是兩個平臺能夠互補並組合成一個更出衆的微服務體驗。例如,Spring Cloud提供Maven插件來建立單獨JAR應用程序包。結合Docker、Kubernetes的聲明式部署和調度能力,輕鬆運行微服務。一樣,Sring Cloud有應用程序內類庫來建立彈性、容錯微服務,使用Hystrix(bulkhead和斷路器模式)與Ribbon(負載均衡)。但這是不夠的,當組合Kubernetes健康檢查、過程重啓和自動伸縮能力,微服務變成一個真正的抗脆弱系統。
由於兩個平臺沒有直接可比的功能特徵,不是挖掘每一個條目,如下是每一個平臺的優缺點總結。
Spring Cloud爲開發人員提供工具,在分佈式系統中來快速構建一些經常使用模塊,例如配置管理、服務發現、斷路機制、路由等等。在Netflix OSS庫頂層構建,用java編寫,面向Java開發人員。
Kubernetes是一個開源系統,用來自動部署、縮放和管理容器應用。它可使用多語言而且提供原語服務開通、運行、縮放和分佈式系統管理。
如你所見,兩個平臺在覈心領域都很強,而且在其餘領域改進。Spring Cloud能夠快速使用、對開發者友好的平臺,然而Kubernetes對DevOps友好,艱難的學習曲線,可是覆蓋更普遍的微服務障礙。如下是這些點的總結。
優勢和缺點
兩種架構處理了不一樣範圍的MSA障礙,而且它們從根本上用了不一樣的方法。Spring Cloud方法是試圖解決在JVM中每一個MSA挑戰,然而Kubernetes方法是試圖讓問題消失,爲開發者在平臺層解決。Spring Cloud在JVM中很是強大,Kubernetes管理那些JVM很強大。一樣的,它就像一個天然發展,結合兩種工具而且從兩個項目中最好的部分受益。
經過Kubernetesd支持的Spring Cloud
經過這樣一種結合,Spring提供應用程序打包,Docker和Kubernetes提供部署和調度。Spring經過Hystrix線程池提供應用程序內隔板,Kubernetes經過資源、進程和命名空間隔離提供隔板。Spring爲每一個微服務提供健康終端,Kubernetes執行健康檢查而且爲健康服務通訊路由。Spring外部化且升級配置,Kubernetes給每一個微服務分配配置。這樣的還有不少。
我喜歡的微服務堆棧
我最喜歡哪一個微服務平臺?兩個都喜歡。我喜歡Spring框架帶來的開發者體驗。所有都是註解驅動的,類庫覆蓋全部種類的功能需求。我也喜歡Apache Camel(寧願Spring Spring Integration)爲集成、鏈接器、消息、路由、彈性和在應用層的容錯所作的。而後與集羣和多種應用程序實例管理,我更喜歡Kubernetes神奇的力量。每當有一個功能重疊,例如服務發現、負載均衡、配置管理,我試着使用Kubernetes提供的多語言原語。
參考資料:
http://blog.csdn.net/qq_34463875/article/details/53816943
spring-boot 和 docker 集成:http://www.open-open.com/lib/view/open1450684294167.html