《springcloud超級入門》Spring Cloud和Dubbo的區別及各自的優缺點《三》

瞭解爲何須要微服務。最初的服務化解決方案是給相同服務提供一個統一的域名,而後服務調用者向這個域發送 HTTP 請求,由 Nginx 負責請求的分發和跳轉。

這種架構存在不少問題:Nginx 做爲中間層,在配置文件中耦合了服務調用的邏輯,這削弱了微服務的完整性,也使得 Nginx 在必定程度上變成了一個重量級的 ESB。圖 1 標識出了 Nginx 的轉發信息流走向。spring

Nginx轉發的信息流
圖 1  Nginx 轉發的信息流安全


服務的信息分散在各個系統,沒法統一管理和維護。每一次的服務調用都是一次嘗試,服務消費方並不知道有哪些實例在給他們提供服務。這帶來了一些問題:架構

  • 沒法直觀地看到服務提供方和服務消費方當前的運行情況與通訊頻率;
  • 消費方的失敗重發、負載均衡等都沒有統一策略,這加大了開發每一個服務的難度,不利於快速演化。


爲了解決上面的問題,咱們須要一個現成的中心組件對服務進行整合,將每一個服務的信息彙總,包括服務的組件名稱、地址、數量等。

服務的調用方在請求某項服務時首先經過中心組件獲取提供服務的實例信息(IP、端口等),再經過默認或自定義的策略選擇該服務的某一提供方直接進行訪問,因此考慮引入 Dubbo。

Dubbo 是阿里開源的一個 SOA 服務治理解決方案,文檔豐富,在國內的使用度很是高。圖 2 爲 Dubbo 的基本架構圖,使用 Dubbo 構建的微服務已經能夠較好地解決上面提到的問題。負載均衡

Dubbo的基本架構圖
圖 2  Dubbo 的基本架構圖框架


從圖 2 中,能夠看出如下幾點:分佈式

  • 調用中間層變成了可選組件,消費方能夠直接訪問服務提供方;
  • 服務信息被集中到 Registry 中,造成了服務治理的中心組件;
  • 經過 Monitor 監控系統,能夠直觀地展現服務調用的統計信息;
  • 服務消費者能夠進行負載均衡、服務降級的選擇。


可是對於微服務架構而言,Dubbo 並非十全十美的,也有一些缺陷,好比:ide

  • Registry 嚴重依賴第三方組件(ZooKeeper 或者 Resid),當這些組件出現問題時,服務調用很快就會中斷。
  • Dubbo 只支持 RPC 調用。這使得服務提供方與調用方在代碼上產生了強依賴,服務提供方須要不斷將包含公共代碼的 Jar 包打包出來供消費方使用。一旦打包出現問題,就會致使服務調用出錯。


筆者認爲,Dubbo 和 SpringCloud並非徹底的競爭關係,二者所解決的問題域並不同。

Dubbo 的定位始終是一款 RPC 框架,而 Spring Cloud 的目標是微服務架構下的一站式解決方案。若是非要比較的話,Dubbo 能夠類比到 Netflix OSS 技術棧,而 Spring Cloud 集成了 Netflix OSS 做爲分佈式服務治理解決方案,但除此以外 Spring Cloud 還提供了配置、消息、安全、調用鏈跟蹤等分佈式問題解決方案。

當前因爲 RPC 協議、註冊中心元數據不匹配等問題,在面臨微服務基礎框架選型時 Dubbo 與 Spring Cloud 只能二選一,這也是你們老是拿 Dubbo 和 Spring Cloud 作對比的緣由之一。

Dubbo 已經適配到 Spring Cloud 生態,好比做爲 Spring Cloud 的二進制通訊方案來發揮 Dubbo 的性能優點,Dubbo 經過模塊化以及對 HTTP 的支持適配到 Spring Cloud。模塊化

Spring Cloud 好在哪裏

做爲新一代的服務框架,Spring Cloud 提出的口號是開發「面向雲的應用程序」,它爲微服務架構提供了更加全面的技術支持。結合咱們一開始提到的微服務的訴求,參見表 1,把Spring Cloud 與 Dubbo 進行一番對比。微服務

                                      表 1 Spring Cloud與Dubbo功能對比性能

Spring Cloud 拋棄了 Dubbo 的 RPC 通訊,採用的是基於 HTTP 的 REST 方式。嚴格來講,這兩種方式各有優劣。雖然從必定程度上來講,後者犧牲了服務調用的性能,但也避免了上面提到的原生 RPC 帶來的問題。並且 REST 相比 RPC 更爲靈活,服務提供方和調用方,不存在代碼級別的強依賴,這在強調快速演化的微服務環境下顯得更加合適。

很明顯,Spring Cloud 的功能比 Dubbo 更增強大,涵蓋面更廣,並且做爲 Spring 的拳頭項目,它也可以與 Spring Framework、Spring Boot、Spring Data、Spring Batch 等其餘 Spring 項目完美融合,這些對於微服務而言是相當重要的。

前面提到,微服務背後一個重要的理念就是持續集成、快速交付,而在服務內部使用一個統一的技術框架,顯然比將分散的技術組合到一塊兒更有效率。

更重要的是,相比於 Dubbo,它是一個正在持續維護的、社區更加火熱的開源項目,這就能夠保證使用它構建的系統持續地獲得開源力量的支持。

下面列舉 Spring Cloud 的幾個優點。

  • Spring Cloud 來源於 Spring,質量、穩定性、持續性均可以獲得保證。
  • Spirng Cloud 自然支持 Spring Boot,更加便於業務落地。
  • Spring Cloud 發展得很是快,從開始接觸時的相關組件版本爲 1.x,到如今將要發佈 2.x 系列。
  • Spring Cloud 是 Java 領域最適合作微服務的框架。


相比於其餘框架,Spring Cloud 對微服務周邊環境的支持力度最大。對於中小企業來說,使用門檻較低。

上一篇《springcloud超級入門》Spring Cloud是什麼?Spring Cloud版本介紹《二》                     

下一篇介紹 Spring Cloud開發環境的準備和Lombok安裝步驟《四》

相關文章
相關標籤/搜索