Spring Cloud或Kubernetes都宣稱它們是開發(fā)運(yùn)行微服務(wù)的最好環(huán)境,哪個(gè)更好?答案是兩個(gè)都是,但他們擁有各自不同的特征方式。背景故事最近,Lukyanchikov發(fā)表了一篇使用Spring Cloud和Docker建立微服務(wù)架構(gòu)的文章。 它給出了如何使用Spring Cloud創(chuàng)建一個(gè)簡(jiǎn)單的基于微服務(wù)的系統(tǒng)所需的全面概述。 為構(gòu)建一個(gè)可擴(kuò)展到數(shù)十或數(shù)百個(gè)服務(wù)的伸縮彈性的微服務(wù)系統(tǒng),必須借助具有寬泛的構(gòu)建時(shí)間和運(yùn)行能力的工具集進(jìn)行集中管理和管理。 Spring Cloud包括實(shí)現(xiàn)功能性服務(wù)(如統(tǒng)計(jì)服務(wù),帳戶服務(wù)和通知服務(wù))和支持基礎(chǔ)設(shè)施服務(wù)(如日志分析,配置服務(wù)器,服務(wù)發(fā)現(xiàn),授權(quán)服務(wù))。 這些服務(wù)涵蓋了系統(tǒng)的運(yùn)行時(shí)各個(gè)方面,但不涉及打包,持續(xù)集成,擴(kuò)展,高可用性和自我修復(fù),這在MSA(微服務(wù)架構(gòu))世界中也非常重要。 假設(shè)大多數(shù)Java開發(fā)人員熟悉Spring Cloud,在本文中,我們將繪制一個(gè)平行圖,通過解決這些額外的問題,了解Kubernetes與Spring Cloud的關(guān)系。有關(guān)MSA的好處是,它有一種架構(gòu)風(fēng)格很好理解的好處,微服務(wù)可實(shí)現(xiàn)強(qiáng)大的模塊邊界,具有獨(dú)立的部署和技術(shù)多樣性。 但代價(jià)是開發(fā)分布式系統(tǒng)成本和顯著運(yùn)營(yíng)開銷 。一個(gè)關(guān)鍵的成功因素是使用各種工具解決這些問題,微服務(wù)關(guān)注點(diǎn)微服務(wù)關(guān)注方面有:配置管理、服務(wù)發(fā)現(xiàn)與負(fù)載平衡、彈性和失敗冗余、API管理、安全服務(wù)、中央集中日志、集中測(cè)量、分布式跟蹤、調(diào)度部署和自動(dòng)擴(kuò)展self Healing等幾個(gè)方面。根據(jù)這些觀點(diǎn),得出Spring Cloud和Kubernetes兩個(gè)平臺(tái)映射:1.配置管理:配置服務(wù)器、Consul和Netflix Archaius(Spring Cloud);Kubernetes ConfigMap&Secrets ;2.服務(wù)發(fā)現(xiàn): Netflix Eureka,Hashicorp Consul(Spring Cloud);Kubernetes Service&Ingress Resource;3.負(fù)載平衡:Netflix Ribbon(Spring Cloud);Kubernetes Service4.API網(wǎng)關(guān):Netflix Zuul(SpringCloud);Kubernetes Service&Ingress Resource5.安全服務(wù):SpringCloud Security6.中央集中日志:ELK Stack(LogStash);EFKstack(Fluentd)。7.集中測(cè)量:Netflix Spectator& Atlas;Heapster、Prometheus、Grafana。8.分布式跟蹤:SpringCloud Sleuth,Zipkin;OpenTracing、Zipkin9.彈性和失敗冗余:Netflix Hystrix、Turbine&Ribbon;Kubernetes Health Check&resource isolation10.自動(dòng)擴(kuò)展self Healing:Spring Cloud無;Kubernetes Health Check、SelfHealing、Autoscaling11.打包 部署和調(diào)度部署:Spring Boot;Docker/Rkt、Kubernetes Scheduler&Deployment12.任務(wù)工作管理:Spring Batch;Kubernetes Jobs&Scheduled Jobs13.單個(gè)應(yīng)用:Spring Cloud Cluster ;Kubernetes PodsSpring Cloud有一套豐富的集成良好的Java庫(kù),作為應(yīng)用程序棧一部分解決所有運(yùn)行時(shí)問題。 因此,微服務(wù)本身通過庫(kù)和運(yùn)行時(shí)作為代理來執(zhí)行客戶端服務(wù)發(fā)現(xiàn),負(fù)載平衡,配置更新,度量跟蹤等。諸如單例集群服務(wù)和批處理作業(yè)的模式也在JVM中進(jìn)行管理。Kubernetes是多語言的,不僅針對(duì)Java平臺(tái),并以通用的方式為所有語言解決分布式計(jì)算的挑戰(zhàn)。 它提供應(yīng)用程序棧外部的配置管理,服務(wù)發(fā)現(xiàn),負(fù)載平衡,跟蹤,度量,單例,平臺(tái)調(diào)度作業(yè)等平臺(tái)級(jí)別功能。 該應(yīng)用系統(tǒng)不需要任何庫(kù)或代理程序用于客戶端邏輯,它可以用任何語言編寫。在某些方面,這兩個(gè)平臺(tái)都依賴類似的第三方工具。例如,ELK和EFK堆棧,跟蹤庫(kù)等一些庫(kù),如Hystrix和Spring Boot,在這兩種環(huán)境中同樣有用。有些情況下這兩個(gè)平臺(tái)是互補(bǔ)的,并且可以結(jié)合在一起,創(chuàng)造一個(gè)更加強(qiáng)大的解決方案,例如,Spring Boot提供了用于構(gòu)建單個(gè)JAR應(yīng)用程序包的Maven插件。結(jié)合Docker和Kubernetes的聲明性部署和調(diào)度功能,使微服務(wù)運(yùn)行變得輕而易舉。 類似地,Spring Cloud具有應(yīng)用程序庫(kù),用于使用Hystrix(斷路器)和Ribbon(用于負(fù)載平衡)創(chuàng)建彈性的,容錯(cuò)的微服務(wù)。 但是單單這是不夠的,當(dāng)它與Kubernetes的健康檢查,進(jìn)程重新啟動(dòng)和自動(dòng)擴(kuò)展功能相結(jié)合時(shí),微服務(wù)成為一個(gè)真正的抗脆弱的系統(tǒng)。長(zhǎng)處和短處由于兩個(gè)平臺(tái)不具有直接的可比性特征,下面是逐項(xiàng)總結(jié)其優(yōu)點(diǎn)和缺點(diǎn)。Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中的一些常見模式的工具,例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,路由等。它是為Java開發(fā)人員使用,構(gòu)建在Netflix OSS庫(kù)之上的。優(yōu)勢(shì)1.Spring Platform提供的統(tǒng)一編程模型和Spring Boot的快速應(yīng)用程序創(chuàng)建能力為開發(fā)人員提供了巨大的微服務(wù)開發(fā)體驗(yàn)。 例如,使用很少的注釋,您可以創(chuàng)建一個(gè)配置服務(wù)器,并且?guī)缀鯖]有更多的注釋,您可以獲得客戶端庫(kù)來配置您的服務(wù)。2.有豐富的庫(kù)選擇,覆蓋大多數(shù)運(yùn)行時(shí)關(guān)注。由于所有庫(kù)都是用Java編寫的,它提供了多種功能,更好的控制和精細(xì)調(diào)整選項(xiàng)。3.不同的Spring Cloud庫(kù)彼此完全集成。例如,F(xiàn)eign客戶端還將使用Hystrix用于斷路器,并且Ribbon用于負(fù)載平衡請(qǐng)求。 一切都是注釋驅(qū)動(dòng)的,使其易于為Java開發(fā)人員開發(fā)。弱點(diǎn)1.Spring Cloud的一個(gè)主要優(yōu)點(diǎn)是它的缺點(diǎn) - 它僅限于Java。MSA的強(qiáng)大動(dòng)力是在需要時(shí)交換各種技術(shù)棧,庫(kù),甚至語言的能力。 只是使用Spring Cloud是不可能的。 如果您想要使用Spring Cloud / Netflix OSS基礎(chǔ)架構(gòu)服務(wù)(如配置管理,服務(wù)發(fā)現(xiàn)或負(fù)載平衡),那么解決方案就不那么優(yōu)雅。 在Netflix的 Prana項(xiàng)目通過基于HTTP暴露Java客戶端實(shí)現(xiàn)了sidecar模式,使其可能讓非JVM語言運(yùn)行在NetflixOSS生態(tài)系統(tǒng)中,但它不是很優(yōu)雅。2.Java開發(fā)人員關(guān)心Java應(yīng)用程序并需要處理太多與開發(fā)無關(guān)的事情。每個(gè)微服務(wù)需要運(yùn)行各種客戶端以進(jìn)行配置檢索,服務(wù)發(fā)現(xiàn)和負(fù)載平衡。雖然很容易設(shè)置,但這并不會(huì)降低對(duì)環(huán)境的構(gòu)建時(shí)間和運(yùn)行時(shí)依賴性。例如,開發(fā)人員可以使用@EnableConfigServer創(chuàng)建一個(gè)配置服務(wù)器,但這只是開心的假象。 每當(dāng)開發(fā)人員想要運(yùn)行單個(gè)微服務(wù)時(shí),他們需要啟動(dòng)并運(yùn)行Config Server。對(duì)于受控環(huán)境,開發(fā)人員必須考慮使Config Server高度可用,并且由于它可以由Git或Svn支持,因此它們需要一個(gè)共享文件系統(tǒng)。 類似地,對(duì)于服務(wù)發(fā)現(xiàn),開發(fā)人員需要首先啟動(dòng)Eureka服務(wù)器。 為了創(chuàng)建一個(gè)受控的環(huán)境,他們需要在每個(gè)AZ上使用多個(gè)實(shí)例實(shí)現(xiàn)集群。像開發(fā)人員一樣,除了實(shí)現(xiàn)所有功能服務(wù)之外,Java開發(fā)人員還必須構(gòu)建和管理一個(gè)非平凡的微服務(wù)平臺(tái)。3.Spring Cloud在微服務(wù)發(fā)展過程只有很短歷程,開發(fā)人員還需要考慮自動(dòng)化部署,調(diào)度,資源管理,過程隔離,自我修復(fù),構(gòu)建管道等,以獲得完整的微服務(wù)體驗(yàn)。 對(duì)于這點(diǎn),我認(rèn)為這是不公平的比較,應(yīng)該比較 Spring Cloud + Cloud Foundry (or Docker Swarm) 和Kubernetes。但這也意味著對(duì)于一個(gè)完整的端到端微服務(wù)體驗(yàn),Spring Cloud必須補(bǔ)充一個(gè)像Kubernetes本身這樣的應(yīng)用程序平臺(tái)。Kubernetes是一個(gè)用于自動(dòng)化部署,擴(kuò)展和管理容器化應(yīng)用程序的開源系統(tǒng)。 它是多種語言并且提供用于供應(yīng),運(yùn)行,擴(kuò)展和管理分布式系統(tǒng)的操作系統(tǒng)。優(yōu)勢(shì)1.Kubernetes是一個(gè)多語言和語言不可知的容器管理平臺(tái),能夠運(yùn)行云本地和傳統(tǒng)的容器化應(yīng)用程序。其提供的服務(wù)(如配置管理,服務(wù)發(fā)現(xiàn),負(fù)載平衡,測(cè)量指標(biāo)收集和日志聚合)可供各種語言使用。 這允許在一個(gè)組織中有一個(gè)平臺(tái),可以被多個(gè)團(tuán)隊(duì)(包括使用Spring的Java開發(fā)人員)使用,并提供多種用途:應(yīng)??用程序開發(fā),測(cè)試環(huán)境,構(gòu)建環(huán)境(運(yùn)行源代碼控制系統(tǒng),構(gòu)建服務(wù)器,工件存儲(chǔ)庫(kù))等。2.與Spring Cloud相比,Kubernetes解決了更廣泛的MSA問題。 除了提供運(yùn)行時(shí)服務(wù),Kubernetes也可以讓你規(guī)定的環(huán)境中,設(shè)置資源限制,RBAC,管理應(yīng)用程序生命周期,啟用自動(dòng)縮放和自我修復(fù)(幾乎表現(xiàn)得像一個(gè)抗脆弱平臺(tái))。3.Kubernetes技術(shù)基于Google 15年的研發(fā)經(jīng)驗(yàn)和管理容器的經(jīng)驗(yàn)。此外,有近1000個(gè)提交者,它是Github上最活躍的開源社區(qū)之一。弱點(diǎn)1. Kubernetes是多語言的,因此它的服務(wù)是通用的,并不針對(duì)不同的平臺(tái)(如Spring Cloud for JVM)進(jìn)行優(yōu)化。 例如,配置作為環(huán)境變量或安裝的文件系統(tǒng)傳遞到應(yīng)用程序。 它沒有Spring Cloud Config提供的奇特的配置更新功能。2.Kubernetes不是一個(gè)以開發(fā)人員為中心的平臺(tái)。 它旨在由DevOps的IT人員使用。因此,Java開發(fā)人員需要學(xué)習(xí)一些新的概念,并開放學(xué)習(xí)解決問題的新方法。手動(dòng)安裝高度可用的Kubernetes集群有一個(gè)顯著操作的開銷。3.Kubernetes仍然是一個(gè)相對(duì)較新的平臺(tái)(2歲),它仍然積極發(fā)展和成長(zhǎng)。因此,每個(gè)版本都添加了很多新功能,可能很難跟上。 好消息是,這已經(jīng)被考慮到,API將是可擴(kuò)展和向后兼容的。最好的兩個(gè)世界正如你所看到的,這兩個(gè)平臺(tái)在某些領(lǐng)域有優(yōu)勢(shì),在其他領(lǐng)域有待改進(jìn)。 Spring Cloud是一個(gè)快速開始的開發(fā)者友好平臺(tái),而Kubernetes是DevOps友好的,具有更陡峭的學(xué)習(xí)曲線,但涵蓋了更廣泛的微服務(wù)關(guān)注點(diǎn)。這兩個(gè)框架涉及不同范圍的MSA關(guān)注,他們以一種根本不同的方式去實(shí)現(xiàn)。 Spring Cloud方法試圖解決JVM中的每個(gè)MSA挑戰(zhàn),而Kubernetes方法試圖通過在平臺(tái)層面解決為開發(fā)人員解決問題。 Spring Cloud在JVM內(nèi)部非常強(qiáng)大,Kubernetes在管理這些JVM方面功能強(qiáng)大。結(jié)合他們,并從兩個(gè)項(xiàng)目的最好的部分受益。有了這樣的組合,Spring提供了應(yīng)用程序打包,而Docker和Kubernetes提供了部署和調(diào)度。 Spring通過Hystrix線程池提供應(yīng)用程序防火墻,Kubernetes通過資源,進(jìn)程和命名空間隔離提供防火墻。Spring為每個(gè)微服務(wù)提供健康端點(diǎn),Kubernetes執(zhí)行健康檢查和流量路由到健康的服務(wù)。 Spring負(fù)責(zé)外部化和更新配置,Kubernetes將配置分發(fā)到每個(gè)微服務(wù)。
微服務(wù)Spring Cloud與Kubernetes比較
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
推薦閱讀更多精彩內(nèi)容
- Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
- 軟件是有生命的,你做出來的架構(gòu)決定了這個(gè)軟件它這一生是坎坷還是幸福。 本文不是講解如何使用Spring Cloud...
- 鳶尾花的誘惑 的確,一開始我兩手托著下巴,胳膊肘支在窗臺(tái)上半爬在哪,專心看著那盆開放的鳶尾花。當(dāng)時(shí),也只是...
- 好的婚姻長(zhǎng)什么樣兒? 有人說:“好的婚姻是就當(dāng)沒結(jié)過婚但也不想離婚。” 有人說:“好的婚姻是就是平淡生活中的相敬如...