天天看點

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

​​​

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

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

龔鵬 著 

為了更快地實施微服務,本書基于開源且穩定的第三方工具,介紹如何建構一個龐大且複雜的分布式系統,用于滿足項目中的實際需求。每一個工具庫為了适應更豐富的使用場景,通常都會把部分參數以配置檔案的方式暴露出來,同時提供用于開發環境的預設配置。

本書基于快速使用為主線路,盡可能多地講解配置參數的意義及之間的關系。在掌握足夠多的知識點後建立起對微服務分布式架構的認知,以便為探求更深層次的知識點做好鋪墊。

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

​​今日互動
針對微服務你有哪方面的問題急需解決?或者試讀圖書說說你的感受?截止時間5月3日17時,留言+轉發本活動到朋友圈,小編将抽獎選出5名讀者 贈送e讀版100元異步社群代金券 一張,(留言點贊最多的自動獲得一張)。
推薦閱讀 2018年4月新書書單 異步圖書最全Python書單 一份程式員必備的算法書單 第一本Python神經網絡程式設計圖書

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

每天與你分享IT好文。

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

點選閱讀原文,檢視更多

​閱讀原文