掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
微服務(wù)架構(gòu)是互聯(lián)網(wǎng)很熱門的話題,是互聯(lián)網(wǎng)技術(shù)發(fā)展的必然結(jié)果。它提倡將單一應(yīng)用程序劃分成一組小的服務(wù),服務(wù)之間互相協(xié)調(diào)、互相配合,為用戶提供最終價值。

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:空間域名、網(wǎng)頁空間、營銷軟件、網(wǎng)站建設(shè)、通山網(wǎng)站維護、網(wǎng)站推廣。
雖然微服務(wù)架構(gòu)沒有公認的技術(shù)標準和規(guī)范或者草案,但業(yè)界已經(jīng)有一些很有影響力的開源微服務(wù)架構(gòu)框架提供了微服務(wù)的關(guān)鍵思路,例如 Dubbo 和 Spring Cloud。
各大互聯(lián)網(wǎng)公司也有自研的微服務(wù)框架,但其模式都與這二者相差不大。
微服務(wù)主要的優(yōu)勢
降低復(fù)雜度
將原來耦合在一起的復(fù)雜業(yè)務(wù)拆分為單個服務(wù),規(guī)避了原本復(fù)雜度無止境的積累。
每一個微服務(wù)專注于單一功能,并通過定義良好的接口清晰表述服務(wù)邊界;每個服務(wù)開發(fā)者只專注服務(wù)本身,通過使用緩存、DAL 等各種技術(shù)手段來提升系統(tǒng)的性能,而對于消費方來說完全透明。
可獨立部署
由于微服務(wù)具備獨立的運行進程,所以每個微服務(wù)可以獨立部署。當業(yè)務(wù)迭代時只需要發(fā)布相關(guān)服務(wù)的迭代即可,降低了測試的工作量同時也降低了服務(wù)發(fā)布的風險。
容錯
在微服務(wù)架構(gòu)下,當某一組件發(fā)生故障時,故障會被隔離在單個服務(wù)中。比如通過限流、熔斷等方式降低錯誤導(dǎo)致的危害,保障核心業(yè)務(wù)正常運行。
擴展
單塊架構(gòu)應(yīng)用也可以實現(xiàn)橫向擴展,就是將整個應(yīng)用完整的復(fù)制到不同的節(jié)點。
當應(yīng)用的不同組件在擴展需求上存在差異時,微服務(wù)架構(gòu)便體現(xiàn)出其靈活性,因為每個服務(wù)可以根據(jù)實際需求獨立進行擴展。
本文主要圍繞微服務(wù)的技術(shù)選型、通訊協(xié)議、服務(wù)依賴模式、開始模式、運行模式等幾方面來綜合比較 Dubbo 和 Spring Cloud 這 2 種開發(fā)框架。
架構(gòu)師可以根據(jù)公司的技術(shù)實力并結(jié)合項目的特點來選擇某個合適的微服務(wù)架構(gòu)平臺,以此穩(wěn)妥地實施項目的微服務(wù)化改造或開發(fā)進程。
核心部件
微服務(wù)的核心要素在于服務(wù)的發(fā)現(xiàn)、注冊、路由、熔斷、降級、分布式配置,基于上述幾種必要條件對 Dubbo 和 Spring Cloud 做出對比。
總體架構(gòu)
Dubbo 核心部件(如下圖):
Dubbo 總體架構(gòu)
Spring Cloud總體架構(gòu)(如下圖):
Spring Cloud 總體架構(gòu)
點評:從整體架構(gòu)上來看,二者模式接近,都需要服務(wù)提供方,注冊中心,服務(wù)消費方。
微服務(wù)架構(gòu)核心要素
Dubbo 只是實現(xiàn)了服務(wù)治理,而 Spring Cloud 子項目分別覆蓋了微服務(wù)架構(gòu)下的眾多部件,服務(wù)治理只是其中的一個方面。
Dubbo 提供了各種 Filter,對于上述中“無”的要素,可以通過擴展 Filter 來完善。例如:
點評:從核心要素來看,Spring Cloud 更勝一籌,在開發(fā)過程中只要整合 Spring Cloud 的子項目就可以順利的完成各種組件的融合,而 Dubbo 卻需要通過實現(xiàn)各種 Filter 來做定制,開發(fā)成本以及技術(shù)難度略高。
通訊協(xié)議
基于通訊協(xié)議層面對 2 種框架支持的協(xié)議類型以及運行效率方面進行比較。
支持協(xié)議
Dubbo
Dubbo 使用 RPC 通訊協(xié)議,提供序列化方式如下:
Spring Cloud
Spring Cloud 使用 HTTP 協(xié)議的 REST API。
性能比較
使用一個 Pojo 對象包含 10 個屬性,請求 10 萬次,Dubbo 和 Spring Cloud 在不同的線程數(shù)量下,每次請求耗時(ms)如下:
說明:客戶端和服務(wù)端配置均采用阿里云的 ECS 服務(wù)器,4 核 8G 配置,Dubbo 采用默認的 Dubbo 協(xié)議。
點評:Dubbo 支持各種通信協(xié)議,而且消費方和服務(wù)方使用長鏈接方式交互,通信速度上略勝 Spring Cloud,如果對于系統(tǒng)的響應(yīng)時間有嚴格要求,長鏈接更合適。
服務(wù)依賴方式
Dubbo
服務(wù)提供方與消費方通過接口的方式依賴,服務(wù)調(diào)用設(shè)計如下:
因此需要為每個微服務(wù)定義各自的 Interface 接口,并通過持續(xù)集成發(fā)布到私有倉庫中。調(diào)用方應(yīng)用對微服務(wù)提供的抽象接口存在強依賴關(guān)系,開發(fā)、測試、集成環(huán)境都需要嚴格的管理版本依賴。
通過 maven 的 install & deploy 命令把 Interface 和 Model 層發(fā)布到倉庫中,服務(wù)調(diào)用方只需要依賴 Interface 和 Model 層即可。
在開發(fā)調(diào)試階段只發(fā)布 Snapshot 版本,等到服務(wù)調(diào)試完成再發(fā)布 Release 版本,通過版本號來區(qū)分每次迭代的版本。通過 xml 配置方式即可接入 Dubbo,對程序無入侵。
Dubbo 接口依賴方式
Spring Cloud
服務(wù)提供方和服務(wù)消費方通過 Json 方式交互,因此只需要定義好相關(guān) Json 字段即可,消費方和提供方無接口依賴。通過注解方式來實現(xiàn)服務(wù)配置,對于程序有一定入侵。
點評:Dubbo 服務(wù)依賴略重,需要有完善的版本管理機制,但是程序入侵少。
而 Spring Cloud 通過 Json 交互,省略了版本管理的問題,但是具體字段含義需要統(tǒng)一管理,自身 Rest API 方式交互,為跨平臺調(diào)用奠定了基礎(chǔ)。
組件運行流程
Dubbo
下圖中的每個組件都是需要部署在單獨的服務(wù)器上,Gateway 用來接受前端請求、聚合服務(wù),并批量調(diào)用后臺原子服務(wù)。每個 Service 層和單獨的 DB 交互。
Dubbo 組件運行流程
Dubbo 組件運行:
Spring Cloud 組件運行
Spring Cloud
Spring Cloud組件運行:
點評:業(yè)務(wù)部署方式相同,都需要前置一個網(wǎng)關(guān)來隔絕外部直接調(diào)用原子服務(wù)的風險。
Dubbo 需要自己開發(fā)一套 API 網(wǎng)關(guān),而 Spring Cloud 則可以通過 Zuul 配置即可完成網(wǎng)關(guān)定制。使用方式上 Spring Cloud 略勝一籌。
微服務(wù)架構(gòu)組成以及注意事項
到底使用是 Dubbo 還是 Spring Cloud 并不重要,重點在于如何合理的利用微服務(wù)。
下面是一張互聯(lián)網(wǎng)通用的架構(gòu)圖,其中每個環(huán)節(jié)都是微服務(wù)的核心部分。
架構(gòu)分解:
注意事項:
總結(jié)
Dubbo 出生于阿里系,是阿里巴巴服務(wù)化治理的核心框架,并被廣泛應(yīng)用于中國各互聯(lián)網(wǎng)公司;只需要通過 Spring 配置的方式即可完成服務(wù)化,對于應(yīng)用無入侵,設(shè)計的目的還是服務(wù)于自身的業(yè)務(wù)為主。
雖然阿里內(nèi)部原因 Dubbo 曾經(jīng)一度暫停維護版本,但是框架本身的成熟度以及文檔的完善程度,完全能滿足各大互聯(lián)網(wǎng)公司的業(yè)務(wù)需求。
如果我們使用配置中心、分布式跟蹤這些內(nèi)容都需要自己去集成,這樣無形中增加了使用 Dubbo 的難度。
Spring Cloud 是大名鼎鼎的 Spring 家族的產(chǎn)品, 專注于企業(yè)級開源框架的研發(fā)。
Spring Cloud 自從發(fā)布到現(xiàn)在,仍然在不斷的高速發(fā)展,幾乎考慮了服務(wù)治理的方方面面,開發(fā)起來非常的便利和簡單。
Dubbo 于 2017 年開始又重啟維護,發(fā)布了更新后的 2.5.7 版本,而 Spring Cloud 更新的非???,目前已經(jīng)更新到 Finchley.M2。
因此,企業(yè)需要根據(jù)自身的研發(fā)水平和所處階段選擇合適的架構(gòu)來解決業(yè)務(wù)問題,不管是 Dubbo 還是 Spring Cloud 都是實現(xiàn)微服務(wù)有效的工具。
分享題目:到底孰優(yōu)孰劣?Dubbo和SpringCloud微服務(wù)架構(gòu)終極對決!
鏈接URL:http://uogjgqi.cn/article/copoege.html

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流