摘要:而微服務架構能否成功實踐,利用各種工具解決潛在問題是關鍵。因此,微服務本身可以通過庫和運行時代理解決客戶端服務發現負載均衡配置更新統計跟蹤等。與相比,解決了更廣的微服務架構問題。和處理了不同范圍的微服務架構技術點,而且是用了不同的方法。
Spring Cloud vs. Kubernetes,誰才是部署微服務的最佳拍檔?
Spring Cloud和Kubernetes都聲稱自己是開發和運行微服務的最佳環境,但兩者在特性上并不相同,解決的問題點也不一樣。本文將探討這兩種平臺對于微服務架構的交付有何作用、兩者在哪些方面表現更好以及如何利用這兩種平臺在微服務架構的路上取得成功。
背景故事我最近拜讀了 A.Lukyanchikov關于如何利用Spring Cloud和Docker搭建微服務的文章,推薦大家也看一看。
想要搭建一個可以十倍、百倍擴展服務的彈性伸縮微服務系統,需要借助具有寬泛構建時間和運行時能力的工具集進行集中的管理和治理。
Spring Cloud包括了各種功能性服務(如統計服務,帳戶服務和通知服務)和支持基礎設施服務(如日志分析,配置服務器,服務發現,授權服務)。
下圖展示使用Spring Cloud的微服務架構:
(Spring Cloud微服務架構,by A. Lukyanchikov)
該圖展示了運行時的方方面面,但沒有包括打包、持續集成、伸縮、高可用和自我修復等在微服務架構中重要點。本文假設大多數JAVA開發者熟悉Spring Cloud,采用類比的形式,通過解決以上要點問題,帶大家了解Kubernetes和Spring Cloud之間的關系。
微服務要點我們在此不進行特性的逐個對比,而是從大面上看一看微服務的要點并聊一聊Spring Cloud和Kubernetes如何實現。
微服務架構的一大優勢是易于理解的架構風格,可實現強大的模塊邊界,并且具有獨立的部署和技術多樣性,但需要付出的代價也是顯而易見的——開發分布式系統的成本和運維開銷。
而微服務架構能否成功實踐,利用各種工具解決潛在問題是關鍵。把啟動過程變得快速簡單很重要,但通往生產環境的旅程是漫長的,你需要不斷進步才能成功。
上圖是需要在微服務架構中最常見的技術要點(在這里,我們不涉及那些非技術要點,比如組織結構、公司文化等等)
技術對比Spring Cloud和Kubernetes有很大的不同,并沒有直接可比的特性,如果對照微服務架構的要點,可以得出如下的技術對比圖表:
從上表我們可以得知:
Spring Cloud有一套豐富且集成良好的JAVA庫,作為應用棧的一部分解決所有運行時問題。因此,微服務本身可以通過庫和運行時代理解決客戶端服務發現、負載均衡、配置更新、統計跟蹤等。工作模式就像單實例服務集群(譯者注:集群中master節點工作,當master掛掉后,slave節點被選舉頂替。)并且一批工作也是在JVM中被管理。
Kubernetes是多語言的,不僅僅針對Java平臺,而是以通用的方式為所有語言解決分布式計算問題。Kubernetes提供了配置管理、服務發現、負載均衡、跟蹤、統計、單實例、平臺級和應用棧之外的調度工作。該應用不需要任何客戶端邏輯的庫或代理程序,可以用任何語言編寫。
兩個平臺依靠相似的第三方工具,如ELK和EFK stacks, tracing libraries等。Hystrix和Spring Boot等庫,在兩個環境中都表現良好。很多情況下,Spring Cloud和Kubernetes可以形成互補,組建出更強大的解決方案(例如KubeFlix和Spring Cloud Kubernetes)。
微服務需求想要進一步理解Spring Cloud和Kubernetes的適用范圍,可以參考下圖微服務架構需求。
有些需求,Spring Cloud表現更好,有需求則是Kubernetes,也有些需求,兩者可以用不同的方式滿足。好消息是,Spring Cloud和Kubernetes在使用上并不沖突。例如,Spring Cloud提供Maven插件來創建多帶帶JAR應用程序包。結合Docker、Kubernetes的聲明式部署和調度能力,輕松運行微服務。同樣,Sring Cloud以應用程序內的包裝庫的形式來支持彈性伸縮,微服務容錯使用Hystrix(bulkhead和斷路器模式)與Ribbon(負載均衡)。但這些是不夠的,當組合Kubernetes健康檢查、程序重啟和自動伸縮能力,微服務才真正變成一個強壯的系統。
優缺點Spring Cloud
Spring Cloud為開發者提供了快速構建分布式系統中的一些常見模式的工具,例如配置管理,服務發現,斷路器,路由等。它是為Java開發人員使用,構建在Netflix OSS庫之上的。
優點
Spring Platform提供的統一編程模型和Spring Boot的快速應用程序創建能力,為開發人員提供了很好的微服務開發體驗。使用很少的注解,就可以創建一個配置服務器或獲得客戶端庫來配置您的服務。
豐富的庫支持,覆蓋大多數運行時需求。Spring Cloud的所有庫均由JAVA編寫,提供多特性、高控制和易配置。
不同的Spring Cloud庫彼此完全兼容。例如,Feign客戶端還將使用Hystrix用于斷路器、Ribbon用于負載均衡請求。一切都是注解驅動的,易于Java開發者開發。
缺點
僅使用JAVA,既是Spring Cloud的優點,也是一大缺陷。微服務架構之所以吸引人,在于按需交換各種技術棧、庫,甚至語言的能力。這一點,Spring Cloud做不到。如果你想使用Spring Cloud/Netflix OSS基礎設置服務,例如配置管理、服務發現或者負載均衡,解決方案是不優雅的。雖然Netflix Prana項目實現了sidecar模式,顯示基于Java客戶類庫越過HTTP,使得用non-JVM語言編寫的應用程序存在于NetflixOSS生態系統變得可能,但它仍然不是很優雅。
除了JAVA應用程序,還有太多與開發無關的事情需要Java開發人員處理。每個微服務需要運行各種客戶端以進行配置檢索、服務發現和負載均衡。雖然很容易設置,但這并不會降低對環境的構建時間和運行的依賴性。例如,開發人員可以使用@EnableConfigServer創建一個配置服務器,但這只是開心的假象。每當開發人員想要運行單個微服務時,他們需要啟動并運行Config Server。對于受控環境,開發人員必須考慮使Config Server高度可用,并且由于它可以由Git或SVN支持,因此它們需要一個共享文件系統。同樣,對于服務發現,開發人員也是需要首先啟動Eureka服務器。為了創建一個受控的環境,他們需要在每個AZ上使用多個實例實現集群。可以說,開發人員除了實現所有功能外,還需要額外管理一個復雜的微服務平臺。
Spring Cloud目前在微服務方面覆蓋的面相對有限,開發人員還需要考慮自動化部署、調度、資源管理、過程隔離、自我修復、構建流水線等,以獲得完整的微服務體驗。對于這點,我認為拿Spring Cloud和Kubernetes比較是不公平的,應該比較Spring Cloud + Cloud Foundry (or Docker Swarm)和Kubernetes。但這也意味著對于一個完整的端到端微服務體驗,Spring Cloud必須補充一個像Kubernetes這樣的應用程序平臺。
Kubernetes
Kubernetes是一個用于自動化部署、擴展和管理容器化應用程序的開源系統。支持多種語言并且提供用于支持、運行、擴展和管理分布式系統的操作系統。
優點
Kubernetes是多語言且語言不敏感的容器管理平臺,能夠運行云原生和傳統的容器化應用程序。Kubernetes提供的服務(如配置管理、服務發現、負載均衡、測試指標收集和日志聚合)可供各種語言使用。這意味著一個平臺可以被多個團隊(包括使用Spring的Java開發人員)使用,并提供多種用途:應??用程序開發、測試環境、構建環境(源碼運行、構建服務、依賴倉庫)等。
與Spring Cloud相比,Kubernetes解決了更廣的微服務架構問題。除了提供運行時服務,Kubernetes也可以讓你制定環境、設置資源限制、RBAC、管理應用程序生命周期、允許自動擴容和自我修復(幾乎表現得像一個抗脆弱平臺)。
Kubernetes技術基于Google十五年的研發和容器管理經驗。此外,Kubernetes有近1000個貢獻者,是Github上最活躍的開源社區之一。
缺點
Kubernetes是多語言的,因此它的服務是通用的,并不針對不同的平臺(如Spring Cloud for JVM)進行優化。例如,配置會作為環境變量傳遞給應用程序或掛載的文件系統。它沒有像Spring Cloud Config提供的配置更新功能。
Kubernetes不是一個以開發者為中心的平臺,更偏向于DevOps的IT人員使用。因此,Java開發人員需要學習一些新的概念,需要學習解決問題的新方法。盡管通過MiniKuber開始一個Kubernetes開發實例很簡單,但手動安裝一個高可用的Kubernetes集群仍顯得有些復雜。
Kubernetes是一個相對較新的平臺(2歲),仍然在發展和成長,每個版本都添加了很多新功能,可能很難跟上。好消息是,這一點已經被考慮到了,Kubernetes的API將是可擴展和向后兼容的。
Spring Cloud和Kubernetes的最佳實踐如你所見,Spring Cloud和Kubernetes在核心領域都很強,并且正在其他領域努力改進。Spring Cloud可以快速使用,對開發者比較友好;而Kubernetes是DevOps的絕配,雖然學起來可能有點難,但是覆蓋了更廣泛的微服務技術要點。
Spring Cloud和Kubernetes處理了不同范圍的微服務架構技術點,而且是用了不同的方法。Spring Cloud方法是試圖解決在JVM中的微服務架構要點,而Kubernetes方法是試圖讓問題消失,為開發者在平臺層解決。Spring Cloud在JVM中非常強大,Kubernetes管理那些JVM很強大。看起來各取所長,充分利用這兩者的優勢是自然而然的趨勢了。
結合使用Spring Cloud和Kubernetes,用Spring Cloud提供應用程序打包,Docker和Kubernetes提供部署和調度;Spring通過Hystrix線程池提供應用程序內隔離,Kubernetes通過資源、進程和命名空間隔離;Spring為每個微服務提供健康終端,Kubernetes執行健康檢查并且為健康服務的通信提供路由;Spring外部化且升級配置,Kubernetes給每個微服務分配配置......這樣的例子還有很多。
作者:Bilgin Ibryam
原文:https://dzone.com/articles/deploying-microservices-spring-cloud-vs-kubernetes
搬運:好雨科技
為方便閱讀原文略有刪改
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/32522.html
摘要:然而,敏銳的已經意識到,德邦快遞率先引入的微服務架構,正在成為企業數字化轉型升級戰略成功的基石,成為企業引領行業創新的秘密武器。 2018年雙11,中國網民釋放出來超過2000億元的購買力,給快遞公司帶來了新的一輪考驗。剛剛從大件快遞切入快遞市場的德邦快遞,卻無驚無險地完成了客戶的托付。信任德邦快遞的店主和買家并不知道,在這戰績背后,德邦快遞投入了每年5億元的數字化建設成本,并采用了先...
摘要:服務實例在啟動時注冊到服務注冊表,并在關閉時注銷。配置變更是調整系統運行時的行為的有效手段之一。相對于來說,更強大。通過和實現配置的動態變更。通過和實現服務的注冊與發現。 showImg(https://segmentfault.com/img/remote/1460000017759710?w=841&h=339); 什么是 Nacos? Nacos 是阿里巴巴推出來的一個新開源項目...
摘要:服務網關服務網關涵蓋的功能包括路由,鑒權,限流,熔斷,降級等對入站請求的統一攔截處理。具體可以進一步劃分為外部網關面向互聯網和內部網關面向服務內部管理。應用服務應用服務是企業業務核心。到此實際上已經完成服務遷移工作。 導讀 Spring Cloud基于Spring Boot開發,提供一套完整的微服務解決方案,具體包括服務注冊與發現,配置中心,全鏈路監控,API...
摘要:是一個相對比較新的微服務框架,年才推出的版本雖然時間最短但是相比等框架提供的全套的分布式系統解決方案。提供線程池不同的服務走不同的線程池,實現了不同服務調用的隔離,避免了服務器雪崩的問題。通過互相注冊的方式來進行消息同步和保證高可用。 Spring Cloud 是一個相對比較新的微服務框架,...
閱讀 1108·2021-11-16 11:45
閱讀 3128·2021-10-13 09:40
閱讀 720·2019-08-26 13:45
閱讀 1199·2019-08-26 13:32
閱讀 2172·2019-08-26 13:23
閱讀 915·2019-08-26 12:16
閱讀 2827·2019-08-26 11:37
閱讀 1753·2019-08-26 10:32