如果你是在一個中小型項目中應用Spring Cloud,那么你不需要太多的改造和適配,就可以實現微服務的基本功能。但是如果是在大型項目中實踐微服務,可能會發現需要處理的問題還是比較多,尤其是項目中老代碼比較多,沒辦法全部直接升級到Spring Boot框架下開發的話,你會非常希望能有一個侵入性更低的方案來實施微服務架構。在這種場景下,Service Mesh將會成為你的最佳選擇,經過一段時間的發展,目前Service Mesh這個概念已經開始逐步被大家了解和認知。同時,一些Service Mesh的實現方案也逐步成熟和落地,例如Istio、Linkerd、Envoy等。在本系列文章的下一篇中,將為大家對Service Mesh概念做一個系統的介紹。但是在了解Service Mesh概念之前,還是建議大家先對微服務和Spring Cloud這些概念和框架有一個深入的了解,這樣才能體會到應用Service Mesh的價值和意義。
Spring Cloud與Dubbo
網上關於Spring Cloud和Dubbo對比的文章很多,大多數對比結果都是Spring Cloud壓倒性優勢戰勝Dubbo,下表是對Dubbo和Spring Cloud做的一個基礎功能的對比:
實際上,Dubbo的關注點在於服務治理,並不能算是一個真正的微服務框架。包括目前在開發中的Dubbo 3.0,也不能完整覆蓋微服務的各項功能需求。而Spring Cloud一方面是針對微服務而設計,另外一方面Spring Cloud是通過集成各種組件的方式來實現微服務,因此理論上可以集成目前業內的絕大多數的微服務相關組件,從而實現微服務的全部功能。
而對Dubbo而言,如果一定要應用到微服務的使用場景中的話,上表中欠缺的大多數功能都可以通過集成第三方應用和組件的方式來實現,跟Spring Cloud相比主要的缺陷在於集成過程中的便利性和兼容性等問題。
Spring Cloud與Docker
雖然網上也有很多文章寫到如何使用Docker來實現微服務,但是事實上單獨使用Docker是沒辦法完整的實現微服務的所有功能的。在實際上微服務架構中,Spring Cloud和Docker更多的是一種協作的關系,而不是一種競爭的關系。通過Docker容器化技術,可以更好的解決引入Spring Cloud微服務后帶來的部署和運維的復雜性。
Spring Cloud生態圈中的Pivotal Cloud Foundry(PCF)作為PaaS實現,也提供一些類似於Docker的功能支持,但是無論上功能上還是易用性上和Docker還是存在比較大的差異。Pivotal Cloud Foundry和Docker之間的關系更多的是一種兼容關系,而不是競爭關系,Pivotal Cloud Foundry的主要競爭對手是Red Hat的OpenShift。目前,Pivotal Cloud Foundry支持的IaaS包括:AWS、AZURE、GCP、vSphere、OpenStack等。
Spring Cloud與Kubernetes
網上也有一些“Spring Cloud與Kubernetes哪個更好”,“當已經有了Kubernetes之后,還需要使用Spring Cloud么”之類的文章。首先說筆者並不認為Spring Cloud與Kubernetes是競爭關系,但是也不否認二者確實在諸多功能上存在一些重合。下圖是對Spring Cloud與Kubernetes在微服務架構中的一些基礎功能上的對比:
通過對比可以看出,Spring Cloud和Kubernetes確實存在一些功能上的重合,但是二者的定位其實差別很大。Spring Cloud是一個基於Java語言的微服務開發框架,而Kubernetes是一個針對容器應用的自動化部署、伸縮和管理的開源系統,它兼容多種語言且提供了創建、運行、伸縮以及管理分布式系統的原語。Spring Cloud更多的是面向有Spring開發經驗的Java語言開發者,而Kubernetes不是一個針對開發者的平台,它的目的是供有DevOps思想的IT人員使用。
為了區分Spring Cloud和Kubernetes兩個項目的范圍,下面這張圖列出了幾乎是端到端的微服務架構需求,從最底層的硬件,到最上層的DevOps和自服務經驗,並且列出了如何關聯到Spring Cloud和Kubernetes平台。
總結
通過Spring Cloud、Docker和Kubernetes的組合,可以構建更加完整和強大的微服務架構程序。通過三者的整合,使用Spring Boot提供應用的打包,Docker和Kubernetes提供應用的部署和調度。Spring Cloud通過Hystrix線程池提供應用內的隔離,而Kubernetes通過資源、進程和命名空間來提供隔離。Spring Cloud為每個微服務提供健康終端,而Kubernetes執行健康檢查,且把流量導到健康服務。Spring Cloud外部化配置並更新它們,而Kubernetes分發配置到每個微服務。
對於一名開發人員或者架構師來說,想要精通微服務設計與開發,能夠在大中型項目中應用微服務架構,單純掌握Spring Cloud是遠遠不夠的,Docker和Kubernetes等都是需要學習和掌握的內容。同時,由於采用微服務架構后帶來了分布式的相關問題,對於分布式系統理論也必須有一定的了解。當然,最重要的還是對系統業務的深入理解,對整體業務進行合理的規划和拆分,才能真正行之有效的應用微服務架構,構建高效、健壯、靈活、可擴展的微服務應用。