微服務選擇Spring Cloud還是Dubbo?

weixin_34146805發表於2018-04-27

點選關注非同步圖書,置頂公眾號

每天與你分享 IT好書 技術乾貨 職場知識

2414212-66f322efc53f2a74.jpg

​參與文末話題討論,每日贈送非同步圖書。

——非同步小編

在阿里巴巴的生態中,微服務逐漸成為主要的服務形態,伴隨著容器化的日臻成熟,大量的分散式、領域驅動設計的微服務被快速開發和部署,服務間呈現出搭積木的能力,使不同的業務通過重新組合數個微服務,就能實現新的業務場景。藉助成熟的底層集團中介軟體,天然地支援微服務所需的動態擴縮、服務發現、全鏈路日誌分析等能力。以阿里巴巴達摩院語音對話平臺為例,對話服務、理解服務、問答服務,以及對話管理平臺都是基於SpringBoot和Docker技術棧的。

微服務應該具備的功能

微服務,可以拆分為“微”和“服務”二字。“微”即小的意思,那到底多小才算“微”呢?可能不同的團隊有不同的答案。從參與微服務的人數來講,單個微服務從架構設計、程式碼開發、測試、運維的人數加起來是8~10人才算“微”。那麼何為“服務”呢?按照“微服務”概念提出者Martin Fowler給出的定義:“服務”是一個獨立執行的單元元件,每個單元元件執行在獨立的程式中,元件與元件之間通常使用HTTP這種輕量級的通訊機制進行通訊。

微服務具有以下的特點。

按照業務來劃分服務,單個服務程式碼量小,業務單一,易於維護。

每個微服務都有自己獨立的基礎元件,例如資料庫、快取等,且執行在獨立的程式中。

微服務之間的通訊是通過HTTP協議或者訊息元件,且具有容錯能力。

微服務有一套服務治理的解決方案,服務之間不耦合,可以隨時加入和剔除服務。單個微服務能夠叢集化部署,並且有負載均衡的能力。

整個微服務系統應該有一個完整的安全機制,包括使用者驗證、許可權驗證、資源保護等。

整個微服務系統有鏈路追蹤的能力。

有一套完整的實時日誌系統。

微服務具有以上這些特點,那麼微服務需要具備一些什麼樣的功能呢?微服務的功能主要體現在以下幾個方面。

服務的註冊和發現。

服務的負載均衡。

服務的容錯。

服務閘道器。

服務配置的統一管理。

鏈路追蹤。

實時日誌。

Dubbo

阿里巴巴在2011年開源了Dubbo框架,雖然在2013年停止更新,但在2017年9月又重啟維護併發布了新版本。目前已有很多的公司將自己的業務建立在Dubbo之上,同時阿里雲也推出了企業級分散式應用服務EDAS,為Dubbo提供應用託管。

Dubbo採用Zookeeper作為註冊中心,RPC作為服務呼叫方式,致力於提供高效能和透明化的RPC遠端服務呼叫方案。它與Spring無縫整合,基於服務提供方(服務端)與服務呼叫方(客戶端)角色構建簡單模型,其優點是使用方便、學習成本低。

2414212-e444e1d892ce1002.jpg

​① 服務提供方釋出服務到服務註冊中心。

② 服務消費方從服務註冊中心訂閱服務。

③ 註冊中心通知訊息呼叫方服務已註冊。

④ 服務消費方呼叫已經註冊的可用服務。

⑤ 監控計數。

Spring Cloud

Spring Cloud基於Spring Boot實現,使用HTTP的RESTful風格API作為呼叫方式。它所包含的多個子專案共同構建了微服務架構體系。

2414212-7a3e71b9309fdbd5.jpg

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

2414212-d68ff47dc6fb9a6b.jpg

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 提出的微服務規範,社群異常活躍,它很可能成為微服務架構的標準。

微服務必讀書

​​​

2414212-2675a170e6f77367.jpg

​《深入理解Spring Cloud與微服務構建》

方誌朋 著

點選封面購買紙書

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構建微服務,可以作為實際開發的樣例工程。​

2414212-558ecbcb7e2ee4db.jpg

《微服務分散式構架開發實戰》

龔鵬 著 

點選封面購買紙書

為了更快地實施微服務,本書基於開源且穩定的第三方工具,介紹如何構建一個龐大且複雜的分散式系統,用於滿足專案中的實際需求。每一個工具庫為了適應更豐富的使用場景,通常都會把部分引數以配置檔案的方式暴露出來,同時提供用於開發環境的預設配置。本書基於快速使用為主線路,儘可能多地講解配置引數的意義及之間的關係。在掌握足夠多的知識點後建立起對微服務分散式架構的認知,以便為探求更深層次的知識點做好鋪墊。

本書適合Java工程師、初級架構師、大中專院校相關專業師生、Java培訓班學員及獨立開發者與自學讀者使用。

2414212-69b036fe0432a869.gif

​​今日互動

針對微服務你有哪方面的問題急需解決?或者試讀圖書說說你的感受?截止時間5月3日17時,留言+轉發本活動到朋友圈,小編將抽獎選出5名讀者贈送e讀版100元非同步社群代金券一張,(留言點贊最多的自動獲得一張)。

推薦閱讀

2018年4月新書書單

非同步圖書最全Python書單

一份程式設計師必備的演算法書單

第一本Python神經網路程式設計圖書

2414212-7f1a1a6b359fc3ed.jpg

​長按二維碼,可以關注我們喲

每天與你分享IT好文。

在“非同步圖書”後臺回覆“關注”,即可免費獲得2000門線上視訊課程;推薦朋友關注根據提示獲取贈書連結,免費得非同步e讀版圖書一本。趕緊來參加哦!

點選閱讀原文,檢視更多

​閱讀原文

相關文章