微服務選擇Spring Cloud還是Dubbo?
點選關注非同步圖書,置頂公眾號
每天與你分享 IT好書 技術乾貨 職場知識
參與文末話題討論,每日贈送非同步圖書。
——非同步小編
在阿里巴巴的生態中,微服務逐漸成為主要的服務形態,伴隨著容器化的日臻成熟,大量的分散式、領域驅動設計的微服務被快速開發和部署,服務間呈現出搭積木的能力,使不同的業務通過重新組合數個微服務,就能實現新的業務場景。藉助成熟的底層集團中介軟體,天然地支援微服務所需的動態擴縮、服務發現、全鏈路日誌分析等能力。以阿里巴巴達摩院語音對話平臺為例,對話服務、理解服務、問答服務,以及對話管理平臺都是基於SpringBoot和Docker技術棧的。
微服務應該具備的功能
微服務,可以拆分為“微”和“服務”二字。“微”即小的意思,那到底多小才算“微”呢?可能不同的團隊有不同的答案。從參與微服務的人數來講,單個微服務從架構設計、程式碼開發、測試、運維的人數加起來是8~10人才算“微”。那麼何為“服務”呢?按照“微服務”概念提出者Martin Fowler給出的定義:“服務”是一個獨立執行的單元元件,每個單元元件執行在獨立的程式中,元件與元件之間通常使用HTTP這種輕量級的通訊機制進行通訊。
微服務具有以下的特點。
按照業務來劃分服務,單個服務程式碼量小,業務單一,易於維護。
每個微服務都有自己獨立的基礎元件,例如資料庫、快取等,且執行在獨立的程式中。
微服務之間的通訊是通過HTTP協議或者訊息元件,且具有容錯能力。
微服務有一套服務治理的解決方案,服務之間不耦合,可以隨時加入和剔除服務。單個微服務能夠叢集化部署,並且有負載均衡的能力。
整個微服務系統應該有一個完整的安全機制,包括使用者驗證、許可權驗證、資源保護等。
整個微服務系統有鏈路追蹤的能力。
有一套完整的實時日誌系統。
微服務具有以上這些特點,那麼微服務需要具備一些什麼樣的功能呢?微服務的功能主要體現在以下幾個方面。
服務的註冊和發現。
服務的負載均衡。
服務的容錯。
服務閘道器。
服務配置的統一管理。
鏈路追蹤。
實時日誌。
Dubbo
阿里巴巴在2011年開源了Dubbo框架,雖然在2013年停止更新,但在2017年9月又重啟維護併發布了新版本。目前已有很多的公司將自己的業務建立在Dubbo之上,同時阿里雲也推出了企業級分散式應用服務EDAS,為Dubbo提供應用託管。
Dubbo採用Zookeeper作為註冊中心,RPC作為服務呼叫方式,致力於提供高效能和透明化的RPC遠端服務呼叫方案。它與Spring無縫整合,基於服務提供方(服務端)與服務呼叫方(客戶端)角色構建簡單模型,其優點是使用方便、學習成本低。
① 服務提供方釋出服務到服務註冊中心。
② 服務消費方從服務註冊中心訂閱服務。
③ 註冊中心通知訊息呼叫方服務已註冊。
④ 服務消費方呼叫已經註冊的可用服務。
⑤ 監控計數。
Spring Cloud
Spring Cloud基於Spring Boot實現,使用HTTP的RESTful風格API作為呼叫方式。它所包含的多個子專案共同構建了微服務架構體系。
Netflix Eureka
Spring Cloud 的服務註冊中心提供服務註冊、服務發現、負載均衡等功能。
Netflix Hystrix
當某個服務發生故障之後,則觸發熔斷機制(Hystrix)向服務呼叫方返回結果標識錯誤,而不是一直等待服務提供方返回結果,這樣就不會使得執行緒因呼叫故障服務而被長時間佔用不釋放,避免了故障在分散式系統中的蔓延。
Netflix Zuul
代理各模組提供的服務,統一暴露給第三方應用。提供動態路由、監控、彈性、全等的邊緣服務。
Config Server
分散式架構下多微服務會產生非常多的配置檔案,分散式配置中心(Config Server)將所有配置檔案交由GIT或SVN進行統一管理,避免出錯。
Spring Boot
在使用Spring開發時,通常需要完成Spring框架及其他第三方工具配置檔案的編寫,非常麻煩。Spring Boot通過犧牲專案的自由度來減少配置的複雜度,約定一套規則,把這些框架都自動配置整合好,從而達到“開箱即用”。
Spring Clould與Dubbo比較
首先從微服務關注點來比較Spring Cloud和Dubbo兩大服務框架,如表1所示。
表1 從微服務關注點比較Spring Cloud和Dubbo
Spring Cloud擁有很多的專案模組,包含了微服務系統的方方面面。Dubbo是一個非常優秀的服務治理和服務呼叫框架,但缺少很多功能模組,例如閘道器、鏈路追蹤等。在專案模組上,Spring Cloud佔據著更大的優勢。
Spring Cloud的更新速度非常塊,Camden.SR5版本釋出於2017年2月6日,Camden.SR6版本釋出於2017年3月10日,Dalston版本釋出於2017年4月12日,基本每個月會發一次版本的迭代。從GitHub的程式碼倉庫來看,Spring Cloud幾乎每天都有更新。阿里巴巴於2011年10月開源了Dubbo,開源後的Dubbo發展迅速,大概每2~3個月有一次版本更新。然而,從在2013年3月開始,Dubbo暫停了版本更新,並只在2014年10月釋出了一個小版本,修復了一個bug,之後長期處於版本停止更新的狀態。直到2017年9月,阿里巴巴中介軟體部門重新組建了Dubbo團隊,把Dubbo列為重點開源專案,並在2017年9~11月期間,一直保持每月一次版本更新的頻率。
從學習成本上考慮,Dubbo的版本趨於穩定,文件完善,可以即學即用,沒有太大難度。Spring Cloud 基於Spring Boot開發,需要開發者先學會Spring Boot。另外,Spring Cloud版本迭代快,需要快速跟進學習。Spring Cloud文件大多是英文的,要求學習者有一定的英文閱讀能力。此外,Spring Cloud文件很多,不容易快速找到相應的文件。
從開發風格上來講,Dubbo 更傾向於Spring Xml的配置方式,Dubbo官方也推薦這種方式。Spring Cloud基於Spring Boot,Spring Boot採用的是基於註解和JavaBean配置方式的敏捷開發。從開發速度上講,Spring Cloud具有更高的開發和部署速度。
最後,Spring Cloud 的通訊方式大多數是基於HTTP Restful風格的,服務與服務之間完全無關、無耦合。由於採用的是HTTP Rest,因此服務無關乎語言和平臺,只需要提供相應API介面,就可以相互呼叫。Dubbo 的通訊方式基於遠端呼叫,對介面、平臺和語言有強依賴性。如果需要實現跨平臺呼叫服務,需要寫額外的中介軟體,這也是Dubbo存在的原因。
Dubbo和Spring Cloud擁有各自的優缺點。Dubbo更易上手,並且廣泛使用於阿里巴巴的各大站點,經歷了“雙11”期間高併發、大流量的檢驗,Dubbo框架非常成熟和穩定。Spring Cloud服務框架嚴格遵守Martin Fowler 提出的微服務規範,社群異常活躍,它很可能成為微服務架構的標準。
微服務必讀書
方誌朋 著
點選封面購買紙書
CSDN部落格專家、Spring Cloud中國社群聯合創始人全新作品。
本書共分16章,全面涵蓋了Spring Cloud構建微服務相關的知識點。第1、2章詳細介紹了微服務架構和Spring Cloud。第3、4章講解了用Spring Cloud構建微服務的準備工作。第5~12章以案例為切入點,講解了Spring Cloud構建微服務的基礎元件,包括Eureka、Ribbon、Feign、Hystrix、Zuul、Config、Sleuth、Admint等元件。第13~15章講述了使用Spring Cloud OAuth2來保護微服務系統的相關知識。第16章用一個綜合案例,全面講解了如何使用Spring Cloud構建微服務,可以作為實際開發的樣例工程。
龔鵬 著
點選封面購買紙書
為了更快地實施微服務,本書基於開源且穩定的第三方工具,介紹如何構建一個龐大且複雜的分散式系統,用於滿足專案中的實際需求。每一個工具庫為了適應更豐富的使用場景,通常都會把部分引數以配置檔案的方式暴露出來,同時提供用於開發環境的預設配置。本書基於快速使用為主線路,儘可能多地講解配置引數的意義及之間的關係。在掌握足夠多的知識點後建立起對微服務分散式架構的認知,以便為探求更深層次的知識點做好鋪墊。
本書適合Java工程師、初級架構師、大中專院校相關專業師生、Java培訓班學員及獨立開發者與自學讀者使用。
今日互動
針對微服務你有哪方面的問題急需解決?或者試讀圖書說說你的感受?截止時間5月3日17時,留言+轉發本活動到朋友圈,小編將抽獎選出5名讀者贈送e讀版100元非同步社群代金券一張,(留言點贊最多的自動獲得一張)。
推薦閱讀
長按二維碼,可以關注我們喲
每天與你分享IT好文。
在“非同步圖書”後臺回覆“關注”,即可免費獲得2000門線上視訊課程;推薦朋友關注根據提示獲取贈書連結,免費得非同步e讀版圖書一本。趕緊來參加哦!
點選閱讀原文,檢視更多
相關文章
- 微服務架構:Dubbo VS Spring Cloud微服務架構SpringCloud
- 微服務整合Spring Cloud Zipkin實現鏈路追蹤並整合Dubbo微服務SpringCloud
- spring cloud 微服務實戰SpringCloud微服務
- spring cloud 和 阿里微服務spring cloud AlibabaSpringCloud阿里微服務
- 微服務Spring Cloud17_Spring Cloud概述3微服務SpringCloud
- spring cloud分散式微服務:Spring Cloud ConfigSpringCloud分散式微服務
- 微服務:spring-cloud-archaius 起步微服務SpringCloudAI
- [譯] JWT 與 Spring Cloud 微服務JWTSpringCloud微服務
- Dubbo 3.0 前瞻:重塑 Spring Cloud 服務治理SpringCloud
- 怎樣選擇TCP還是選擇UDPTCPUDP
- spring cloud微服務分散式雲架構Spring Cloud ZuulSpringCloud微服務分散式架構Zuul
- spring cloud微服務分散式雲架構-Spring Cloud BusSpringCloud微服務分散式架構
- 微服務 | Spring Cloud(一):從單體SSM 到 Spring Cloud微服務SpringCloudSSM
- Spring Cloud構建微服務架構-spring cloud服務監控中心SpringCloud微服務架構
- Spring Cloud 微服務開發系列整理SpringCloud微服務
- Spring Cloud Stream微服務訊息框架SpringCloud微服務框架
- 微服務閘道器 Spring Cloud Gateway微服務SpringCloudGateway
- 微服務 Spring cloud 各元件介紹微服務SpringCloud元件
- Spring Cloud Alibaba微服務實戰SpringCloud微服務
- Spring Cloud微服務運營配置教程SpringCloud微服務
- spring cloud微服務架構設計SpringCloud微服務架構
- Spring Cloud 微服務的那點事SpringCloud微服務
- Spring Cloud 微服務架構進階SpringCloud微服務架構
- 理解Spring Cloud微服務框架核心元件SpringCloud微服務框架元件
- 部署Azure Spring Cloud微服務應用SpringCloud微服務
- 基於Spring Cloud的微服務落地SpringCloud微服務
- 【docker&spring cloud】微服務化改造DockerSpringCloud微服務
- spring cloud微服務分散式雲架構 - Spring Cloud簡介SpringCloud微服務分散式架構
- Spring cloud(1)-簡介以及選擇SpringCloud
- Spring Cloud是什麼,和Dubbo對比呢?SpringCloud
- java版電子商務spring cloud分散式微服務-大話Spring CloudJavaSpringCloud分散式微服務
- 探索分散式服務框架Dubbo3:為何選擇Dubbo分散式框架
- spring cloud微服務分散式雲架構-Spring Cloud NetflixSpringCloud微服務分散式架構
- (一)spring cloud微服務分散式雲架構-Spring Cloud簡介SpringCloud微服務分散式架構
- (一)spring cloud微服務分散式雲架構 - Spring Cloud簡介SpringCloud微服務分散式架構
- Spring Cloud-honghu Cloud分散式微服務雲系統SpringCloud分散式微服務
- Spring Cloud微服務(一):公共模組的搭建SpringCloud微服務
- Spring Cloud微服務基礎元件實戰SpringCloud微服務元件