Spring Cloud或Kubernetes都宣稱它們是開(kāi)發(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開(kāi)發(fā)人員熟悉Spring Cloud耕餐,在本文中,我們將繪制一個(gè)平行圖辟狈,通過(guò)解決這些額外的問(wèn)題肠缔,了解Kubernetes與Spring Cloud的關(guān)系。有關(guān)MSA的好處是哼转,它有一種架構(gòu)風(fēng)格很好理解的好處明未,微服務(wù)可實(shí)現(xiàn)強(qiáng)大的模塊邊界,具有獨(dú)立的部署和技術(shù)多樣性壹蔓。 但代價(jià)是開(kāi)發(fā)分布式系統(tǒng)成本和顯著運(yùn)營(yíng)開(kāi)銷 趟妥。一個(gè)關(guān)鍵的成功因素是使用各種工具解決這些問(wè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無(wú)撒妈;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èn)題挨队。 因此谷暮,微服務(wù)本身通過(guò)庫(kù)和運(yùn)行時(shí)作為代理來(lái)執(zhí)行客戶端服務(wù)發(fā)現(xiàn),負(fù)載平衡盛垦,配置更新湿弦,度量跟蹤等。諸如單例集群服務(wù)和批處理作業(yè)的模式也在JVM中進(jìn)行管理腾夯。Kubernetes是多語(yǔ)言的颊埃,不僅針對(duì)Java平臺(tái),并以通用的方式為所有語(yǔ)言解決分布式計(jì)算的挑戰(zhàn)蝶俱。 它提供應(yīng)用程序棧外部的配置管理班利,服務(wù)發(fā)現(xiàn),負(fù)載平衡跷乐,跟蹤肥败,度量,單例愕提,平臺(tái)調(diào)度作業(yè)等平臺(tái)級(jí)別功能馒稍。 該應(yīng)用系統(tǒng)不需要任何庫(kù)或代理程序用于客戶端邏輯,它可以用任何語(yǔ)言編寫(xiě)浅侨。在某些方面纽谒,這兩個(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為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中的一些常見(jiàn)模式的工具,例如配置管理舶赔,服務(wù)發(fā)現(xiàn)扫倡,斷路器,路由等竟纳。它是為Java開(kāi)發(fā)人員使用撵溃,構(gòu)建在Netflix OSS庫(kù)之上的。優(yōu)勢(shì)1.Spring Platform提供的統(tǒng)一編程模型和Spring Boot的快速應(yīng)用程序創(chuàng)建能力為開(kāi)發(fā)人員提供了巨大的微服務(wù)開(kāi)發(fā)體驗(yàn)锥累。 例如缘挑,使用很少的注釋,您可以創(chuàng)建一個(gè)配置服務(wù)器桶略,并且?guī)缀鯖](méi)有更多的注釋语淘,您可以獲得客戶端庫(kù)來(lái)配置您的服務(wù)。2.有豐富的庫(kù)選擇际歼,覆蓋大多數(shù)運(yùn)行時(shí)關(guān)注惶翻。由于所有庫(kù)都是用Java編寫(xiě)的,它提供了多種功能鹅心,更好的控制和精細(xì)調(diào)整選項(xiàng)吕粗。3.不同的Spring Cloud庫(kù)彼此完全集成。例如旭愧,F(xiàn)eign客戶端還將使用Hystrix用于斷路器颅筋,并且Ribbon用于負(fù)載平衡請(qǐng)求宙暇。 一切都是注釋驅(qū)動(dòng)的,使其易于為Java開(kāi)發(fā)人員開(kāi)發(fā)议泵。弱點(diǎn)1.Spring Cloud的一個(gè)主要優(yōu)點(diǎn)是它的缺點(diǎn) - 它僅限于Java占贫。MSA的強(qiáng)大動(dòng)力是在需要時(shí)交換各種技術(shù)棧,庫(kù)肢簿,甚至語(yǔ)言的能力靶剑。 只是使用Spring Cloud是不可能的蜻拨。 如果您想要使用Spring Cloud / Netflix OSS基礎(chǔ)架構(gòu)服務(wù)(如配置管理池充,服務(wù)發(fā)現(xiàn)或負(fù)載平衡),那么解決方案就不那么優(yōu)雅缎讼。 在Netflix的 Prana項(xiàng)目通過(guò)基于HTTP暴露Java客戶端實(shí)現(xiàn)了sidecar模式收夸,使其可能讓非JVM語(yǔ)言運(yùn)行在NetflixOSS生態(tài)系統(tǒng)中,但它不是很優(yōu)雅血崭。2.Java開(kāi)發(fā)人員關(guān)心Java應(yīng)用程序并需要處理太多與開(kāi)發(fā)無(wú)關(guān)的事情卧惜。每個(gè)微服務(wù)需要運(yùn)行各種客戶端以進(jìn)行配置檢索澜沟,服務(wù)發(fā)現(xiàn)和負(fù)載平衡躁锁。雖然很容易設(shè)置,但這并不會(huì)降低對(duì)環(huán)境的構(gòu)建時(shí)間和運(yùn)行時(shí)依賴性贸街。例如舰讹,開(kāi)發(fā)人員可以使用@EnableConfigServer創(chuàng)建一個(gè)配置服務(wù)器茅姜,但這只是開(kāi)心的假象。 每當(dāng)開(kāi)發(fā)人員想要運(yùn)行單個(gè)微服務(wù)時(shí)月匣,他們需要啟動(dòng)并運(yùn)行Config Server钻洒。對(duì)于受控環(huán)境,開(kāi)發(fā)人員必須考慮使Config Server高度可用锄开,并且由于它可以由Git或Svn支持素标,因此它們需要一個(gè)共享文件系統(tǒng)。 類似地萍悴,對(duì)于服務(wù)發(fā)現(xiàn)头遭,開(kāi)發(fā)人員需要首先啟動(dòng)Eureka服務(wù)器。 為了創(chuàng)建一個(gè)受控的環(huán)境癣诱,他們需要在每個(gè)AZ上使用多個(gè)實(shí)例實(shí)現(xiàn)集群计维。像開(kāi)發(fā)人員一樣,除了實(shí)現(xiàn)所有功能服務(wù)之外狡刘,Java開(kāi)發(fā)人員還必須構(gòu)建和管理一個(gè)非平凡的微服務(wù)平臺(tái)享潜。3.Spring Cloud在微服務(wù)發(fā)展過(guò)程只有很短歷程,開(kāi)發(fā)人員還需要考慮自動(dòng)化部署嗅蔬,調(diào)度剑按,資源管理疾就,過(guò)程隔離,自我修復(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)用程序的開(kāi)源系統(tǒng)胯盯。 它是多種語(yǔ)言并且提供用于供應(yīng)懈费,運(yùn)行,擴(kuò)展和管理分布式系統(tǒng)的操作系統(tǒng)博脑。優(yōu)勢(shì)1.Kubernetes是一個(gè)多語(yǔ)言和語(yǔ)言不可知的容器管理平臺(tái)憎乙,能夠運(yùn)行云本地和傳統(tǒng)的容器化應(yīng)用程序。其提供的服務(wù)(如配置管理叉趣,服務(wù)發(fā)現(xiàn)泞边,負(fù)載平衡,測(cè)量指標(biāo)收集和日志聚合)可供各種語(yǔ)言使用疗杉。 這允許在一個(gè)組織中有一個(gè)平臺(tái)阵谚,可以被多個(gè)團(tuán)隊(duì)(包括使用Spring的Java開(kāi)發(fā)人員)使用,并提供多種用途:應(yīng)??用程序開(kāi)發(fā)乡数,測(cè)試環(huán)境椭蹄,構(gòu)建環(huán)境(運(yùn)行源代碼控制系統(tǒng),構(gòu)建服務(wù)器净赴,工件存儲(chǔ)庫(kù))等绳矩。2.與Spring Cloud相比,Kubernetes解決了更廣泛的MSA問(wèn)題玖翅。 除了提供運(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上最活躍的開(kāi)源社區(qū)之一丢胚。弱點(diǎn)1. Kubernetes是多語(yǔ)言的翩瓜,因此它的服務(wù)是通用的,并不針對(duì)不同的平臺(tái)(如Spring Cloud for JVM)進(jìn)行優(yōu)化携龟。 例如兔跌,配置作為環(huán)境變量或安裝的文件系統(tǒng)傳遞到應(yīng)用程序。 它沒(méi)有Spring Cloud Config提供的奇特的配置更新功能峡蟋。2.Kubernetes不是一個(gè)以開(kāi)發(fā)人員為中心的平臺(tái)坟桅。 它旨在由DevOps的IT人員使用。因此蕊蝗,Java開(kāi)發(fā)人員需要學(xué)習(xí)一些新的概念仅乓,并開(kāi)放學(xué)習(xí)解決問(wèn)題的新方法。手動(dòng)安裝高度可用的Kubernetes集群有一個(gè)顯著操作的開(kāi)銷匿又。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è)快速開(kāi)始的開(kāi)發(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方法試圖通過(guò)在平臺(tái)層面解決為開(kāi)發(fā)人員解決問(wèn)題。 Spring Cloud在JVM內(nèi)部非常強(qiáng)大袋倔,Kubernetes在管理這些JVM方面功能強(qiáng)大雕蔽。結(jié)合他們,并從兩個(gè)項(xiàng)目的最好的部分受益宾娜。有了這樣的組合批狐,Spring提供了應(yīng)用程序打包,而Docker和Kubernetes提供了部署和調(diào)度前塔。 Spring通過(guò)Hystrix線程池提供應(yīng)用程序防火墻嚣艇,Kubernetes通過(guò)資源缘眶,進(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)系作者
- 文/潘曉璐 我一進(jìn)店門因痛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人岸更,你說(shuō)我怎么就攤上這事鸵膏。” “怎么了怎炊?”我有些...
- 文/不壞的土叔 我叫張陵谭企,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我评肆,道長(zhǎng)债查,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任瓜挽,我火速辦了婚禮盹廷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘秸抚。我一直安慰自己速和,他們只是感情好,可當(dāng)我...
- 文/花漫 我一把揭開(kāi)白布剥汤。 她就那樣靜靜地躺著颠放,像睡著了一般。 火紅的嫁衣襯著肌膚如雪吭敢。 梳的紋絲不亂的頭發(fā)上碰凶,一...
- 那天,我揣著相機(jī)與錄音,去河邊找鬼欲低。 笑死辕宏,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的砾莱。 我是一名探鬼主播瑞筐,決...
- 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼腊瑟!你這毒婦竟也來(lái)了聚假?” 一聲冷哼從身側(cè)響起,我...
- 序言:老撾萬(wàn)榮一對(duì)情侶失蹤闰非,失蹤者是張志新(化名)和其女友劉穎膘格,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體财松,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡瘪贱,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了辆毡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片菜秦。...
- 正文 年R本政府宣布,位于F島的核電站闹获,受9級(jí)特大地震影響期犬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜避诽,卻給世界環(huán)境...
- 文/蒙蒙 一龟虎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧沙庐,春花似錦鲤妥、人聲如沸。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至铸抑,卻和暖如春贡耽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
- 正文 我出身青樓滥嘴,卻偏偏與公主長(zhǎng)得像木蹬,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子若皱,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理镊叁,服務(wù)發(fā)現(xiàn),斷路器是尖,智...
- 軟件是有生命的意系,你做出來(lái)的架構(gòu)決定了這個(gè)軟件它這一生是坎坷還是幸福。 本文不是講解如何使用Spring Cloud...
- 愛(ài)情啊饺汹,愛(ài)情蛔添, 為何你如此神秘。 就像伊甸園里的果子兜辞, 吸引著人們向你靠近迎瞧! 愛(ài)情啊,愛(ài)情逸吵, 為何你如此甜蜜凶硅? 又...
- 鳶尾花的誘惑 的確,一開(kāi)始我兩手托著下巴扫皱,胳膊肘支在窗臺(tái)上半爬在哪足绅,專心看著那盆開(kāi)放的鳶尾花。當(dāng)時(shí)韩脑,也只是...
- 好的婚姻長(zhǎng)什么樣兒氢妈? 有人說(shuō):“好的婚姻是就當(dāng)沒(méi)結(jié)過(guò)婚但也不想離婚《味啵” 有人說(shuō):“好的婚姻是就是平淡生活中的相敬如...