自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

到底孰優(yōu)孰劣?Dubbo和Spring Cloud微服務(wù)架構(gòu)終極對(duì)決!

開(kāi)發(fā) 架構(gòu) 服務(wù)器 開(kāi)發(fā)工具
Dubbo 出生于阿里系,是阿里巴巴服務(wù)化治理的核心框架,并被廣泛應(yīng)用于中國(guó)各互聯(lián)網(wǎng)公司;只需要通過(guò) Spring 配置的方式即可完成服務(wù)化,對(duì)于應(yīng)用無(wú)入侵,設(shè)計(jì)的目的還是服務(wù)于自身的業(yè)務(wù)為主。

微服務(wù)架構(gòu)是互聯(lián)網(wǎng)很熱門的話題,是互聯(lián)網(wǎng)技術(shù)發(fā)展的必然結(jié)果。它提倡將單一應(yīng)用程序劃分成一組小的服務(wù),服務(wù)之間互相協(xié)調(diào)、互相配合,為用戶提供最終價(jià)值。

[[211246]]

雖然微服務(wù)架構(gòu)沒(méi)有公認(rèn)的技術(shù)標(biāo)準(zhǔn)和規(guī)范或者草案,但業(yè)界已經(jīng)有一些很有影響力的開(kāi)源微服務(wù)架構(gòu)框架提供了微服務(wù)的關(guān)鍵思路,例如 Dubbo 和 Spring Cloud。

各大互聯(lián)網(wǎng)公司也有自研的微服務(wù)框架,但其模式都與這二者相差不大。

微服務(wù)主要的優(yōu)勢(shì)

降低復(fù)雜度

將原來(lái)耦合在一起的復(fù)雜業(yè)務(wù)拆分為單個(gè)服務(wù),規(guī)避了原本復(fù)雜度無(wú)止境的積累。

每一個(gè)微服務(wù)專注于單一功能,并通過(guò)定義良好的接口清晰表述服務(wù)邊界;每個(gè)服務(wù)開(kāi)發(fā)者只專注服務(wù)本身,通過(guò)使用緩存、DAL 等各種技術(shù)手段來(lái)提升系統(tǒng)的性能,而對(duì)于消費(fèi)方來(lái)說(shuō)完全透明。

可獨(dú)立部署

由于微服務(wù)具備獨(dú)立的運(yùn)行進(jìn)程,所以每個(gè)微服務(wù)可以獨(dú)立部署。當(dāng)業(yè)務(wù)迭代時(shí)只需要發(fā)布相關(guān)服務(wù)的迭代即可,降低了測(cè)試的工作量同時(shí)也降低了服務(wù)發(fā)布的風(fēng)險(xiǎn)。

容錯(cuò)

在微服務(wù)架構(gòu)下,當(dāng)某一組件發(fā)生故障時(shí),故障會(huì)被隔離在單個(gè)服務(wù)中。比如通過(guò)限流、熔斷等方式降低錯(cuò)誤導(dǎo)致的危害,保障核心業(yè)務(wù)正常運(yùn)行。

擴(kuò)展

單塊架構(gòu)應(yīng)用也可以實(shí)現(xiàn)橫向擴(kuò)展,就是將整個(gè)應(yīng)用完整的復(fù)制到不同的節(jié)點(diǎn)。

當(dāng)應(yīng)用的不同組件在擴(kuò)展需求上存在差異時(shí),微服務(wù)架構(gòu)便體現(xiàn)出其靈活性,因?yàn)槊總€(gè)服務(wù)可以根據(jù)實(shí)際需求獨(dú)立進(jìn)行擴(kuò)展。

本文主要圍繞微服務(wù)的技術(shù)選型、通訊協(xié)議、服務(wù)依賴模式、開(kāi)始模式、運(yùn)行模式等幾方面來(lái)綜合比較 Dubbo 和 Spring Cloud 這 2 種開(kāi)發(fā)框架。

架構(gòu)師可以根據(jù)公司的技術(shù)實(shí)力并結(jié)合項(xiàng)目的特點(diǎn)來(lái)選擇某個(gè)合適的微服務(wù)架構(gòu)平臺(tái),以此穩(wěn)妥地實(shí)施項(xiàng)目的微服務(wù)化改造或開(kāi)發(fā)進(jìn)程。

核心部件

微服務(wù)的核心要素在于服務(wù)的發(fā)現(xiàn)、注冊(cè)、路由、熔斷、降級(jí)、分布式配置,基于上述幾種必要條件對(duì) Dubbo 和 Spring Cloud 做出對(duì)比。

總體架構(gòu)

Dubbo 核心部件(如下圖):

  • Provider:暴露服務(wù)的提供方,可以通過(guò) jar 或者容器的方式啟動(dòng)服務(wù)。
  • Consumer:調(diào)用遠(yuǎn)程服務(wù)的服務(wù)消費(fèi)方。
  • Registry:服務(wù)注冊(cè)中心和發(fā)現(xiàn)中心。
  • Monitor:統(tǒng)計(jì)服務(wù)和調(diào)用次數(shù),調(diào)用時(shí)間監(jiān)控中心。(Dubbo 的控制臺(tái)頁(yè)面中可以顯示,目前只有一個(gè)簡(jiǎn)單版本。)
  • Container:服務(wù)運(yùn)行的容器。

Dubbo 總體架構(gòu)

Spring Cloud總體架構(gòu)(如下圖):

  • Service Provider: 暴露服務(wù)的提供方。
  • Service Consumer:調(diào)用遠(yuǎn)程服務(wù)的服務(wù)消費(fèi)方。
  • EureKa Server: 服務(wù)注冊(cè)中心和服務(wù)發(fā)現(xiàn)中心。

Spring Cloud 總體架構(gòu)

點(diǎn)評(píng):從整體架構(gòu)上來(lái)看,二者模式接近,都需要服務(wù)提供方,注冊(cè)中心,服務(wù)消費(fèi)方。

微服務(wù)架構(gòu)核心要素

Dubbo 只是實(shí)現(xiàn)了服務(wù)治理,而 Spring Cloud 子項(xiàng)目分別覆蓋了微服務(wù)架構(gòu)下的眾多部件,服務(wù)治理只是其中的一個(gè)方面。

Dubbo 提供了各種 Filter,對(duì)于上述中“無(wú)”的要素,可以通過(guò)擴(kuò)展 Filter 來(lái)完善。例如:

  • 分布式配置:可以使用淘寶的 diamond、百度的 disconf 來(lái)實(shí)現(xiàn)分布式配置管理。
  • 服務(wù)跟蹤:可以使用京東開(kāi)源的 Hydra,或者擴(kuò)展 Filter 用 Zippin 來(lái)做服務(wù)跟蹤。
  • 批量任務(wù):可以使用當(dāng)當(dāng)開(kāi)源的 Elastic-Job、tbschedule。

點(diǎn)評(píng):從核心要素來(lái)看,Spring Cloud 更勝一籌,在開(kāi)發(fā)過(guò)程中只要整合 Spring Cloud 的子項(xiàng)目就可以順利的完成各種組件的融合,而 Dubbo 卻需要通過(guò)實(shí)現(xiàn)各種 Filter 來(lái)做定制,開(kāi)發(fā)成本以及技術(shù)難度略高。

通訊協(xié)議

基于通訊協(xié)議層面對(duì) 2 種框架支持的協(xié)議類型以及運(yùn)行效率方面進(jìn)行比較。

支持協(xié)議

Dubbo

Dubbo 使用 RPC 通訊協(xié)議,提供序列化方式如下:

  • Dubbo:Dubbo 缺省協(xié)議采用單一長(zhǎng)連接和 NIO 異步通訊,適合于小數(shù)據(jù)量大并發(fā)的服務(wù)調(diào)用,以及服務(wù)消費(fèi)者機(jī)器數(shù)遠(yuǎn)大于服務(wù)提供者機(jī)器數(shù)的情況。
  • RMI:RMI 協(xié)議采用 JDK 標(biāo)準(zhǔn)的 java.rmi.* 實(shí)現(xiàn),采用阻塞式短連接和 JDK 標(biāo)準(zhǔn)序列化方式。
  • Hessian:Hessian 協(xié)議用于集成 Hessian 的服務(wù),Hessian 底層采用 HTTP 通訊,采用 Servlet 暴露服務(wù),Dubbo 缺省內(nèi)嵌 Jetty 作為服務(wù)器實(shí)現(xiàn)。
  • HTTP:采用 Spring 的 Http Invoker 實(shí)現(xiàn)。
  • Webservice:基于 CXF 的 frontend-simple 和 transports-http 實(shí)現(xiàn)。

Spring Cloud

Spring Cloud 使用 HTTP 協(xié)議的 REST API。

性能比較

使用一個(gè) Pojo 對(duì)象包含 10 個(gè)屬性,請(qǐng)求 10 萬(wàn)次,Dubbo 和 Spring Cloud 在不同的線程數(shù)量下,每次請(qǐng)求耗時(shí)(ms)如下:

說(shuō)明:客戶端和服務(wù)端配置均采用阿里云的 ECS 服務(wù)器,4 核 8G 配置,Dubbo 采用默認(rèn)的 Dubbo 協(xié)議。

點(diǎn)評(píng):Dubbo 支持各種通信協(xié)議,而且消費(fèi)方和服務(wù)方使用長(zhǎng)鏈接方式交互,通信速度上略勝 Spring Cloud,如果對(duì)于系統(tǒng)的響應(yīng)時(shí)間有嚴(yán)格要求,長(zhǎng)鏈接更合適。

服務(wù)依賴方式

Dubbo

服務(wù)提供方與消費(fèi)方通過(guò)接口的方式依賴,服務(wù)調(diào)用設(shè)計(jì)如下:

  • Interface 層:服務(wù)接口層,定義了服務(wù)對(duì)外提供的所有接口。
  • Molel 層:服務(wù)的 DTO 對(duì)象層。
  • Business層:業(yè)務(wù)實(shí)現(xiàn)層,實(shí)現(xiàn) Interface 接口并且和 DB 交互。

因此需要為每個(gè)微服務(wù)定義各自的 Interface 接口,并通過(guò)持續(xù)集成發(fā)布到私有倉(cāng)庫(kù)中。調(diào)用方應(yīng)用對(duì)微服務(wù)提供的抽象接口存在強(qiáng)依賴關(guān)系,開(kāi)發(fā)、測(cè)試、集成環(huán)境都需要嚴(yán)格的管理版本依賴。

通過(guò) maven 的 install & deploy 命令把 Interface 和 Model 層發(fā)布到倉(cāng)庫(kù)中,服務(wù)調(diào)用方只需要依賴 Interface 和 Model 層即可。

在開(kāi)發(fā)調(diào)試階段只發(fā)布 Snapshot 版本,等到服務(wù)調(diào)試完成再發(fā)布 Release 版本,通過(guò)版本號(hào)來(lái)區(qū)分每次迭代的版本。通過(guò) xml 配置方式即可接入 Dubbo,對(duì)程序無(wú)入侵。

Dubbo 接口依賴方式

Spring Cloud

服務(wù)提供方和服務(wù)消費(fèi)方通過(guò) Json 方式交互,因此只需要定義好相關(guān) Json 字段即可,消費(fèi)方和提供方無(wú)接口依賴。通過(guò)注解方式來(lái)實(shí)現(xiàn)服務(wù)配置,對(duì)于程序有一定入侵。

點(diǎn)評(píng):Dubbo 服務(wù)依賴略重,需要有完善的版本管理機(jī)制,但是程序入侵少。

而 Spring Cloud 通過(guò) Json 交互,省略了版本管理的問(wèn)題,但是具體字段含義需要統(tǒng)一管理,自身 Rest API 方式交互,為跨平臺(tái)調(diào)用奠定了基礎(chǔ)。

組件運(yùn)行流程

Dubbo

下圖中的每個(gè)組件都是需要部署在單獨(dú)的服務(wù)器上,Gateway 用來(lái)接受前端請(qǐng)求、聚合服務(wù),并批量調(diào)用后臺(tái)原子服務(wù)。每個(gè) Service 層和單獨(dú)的 DB 交互。

Dubbo 組件運(yùn)行流程

Dubbo 組件運(yùn)行:

  • Gateway:前置網(wǎng)關(guān),具體業(yè)務(wù)操作,Gateway 通過(guò) Dubbo 提供的負(fù)載均衡機(jī)制自動(dòng)完成。
  • Service:原子服務(wù),只提供該業(yè)務(wù)相關(guān)的原子服務(wù)。
  • Zookeeper:原子服務(wù)注冊(cè)到 ZK 上。

Spring Cloud 組件運(yùn)行

Spring Cloud

Spring Cloud組件運(yùn)行:

  • 所有請(qǐng)求都統(tǒng)一通過(guò) API 網(wǎng)關(guān)(Zuul)來(lái)訪問(wèn)內(nèi)部服務(wù)。
  • 網(wǎng)關(guān)接收到請(qǐng)求后,從注冊(cè)中心(Eureka)獲取可用服務(wù)。
  • 由 Ribbon 進(jìn)行均衡負(fù)載后,分發(fā)到后端的具體實(shí)例。
  • 微服務(wù)之間通過(guò) Feign 進(jìn)行通信處理業(yè)務(wù)。

點(diǎn)評(píng):業(yè)務(wù)部署方式相同,都需要前置一個(gè)網(wǎng)關(guān)來(lái)隔絕外部直接調(diào)用原子服務(wù)的風(fēng)險(xiǎn)。

Dubbo 需要自己開(kāi)發(fā)一套 API 網(wǎng)關(guān),而 Spring Cloud 則可以通過(guò) Zuul 配置即可完成網(wǎng)關(guān)定制。使用方式上 Spring Cloud 略勝一籌。

微服務(wù)架構(gòu)組成以及注意事項(xiàng)

到底使用是 Dubbo 還是 Spring Cloud 并不重要,重點(diǎn)在于如何合理的利用微服務(wù)。

下面是一張互聯(lián)網(wǎng)通用的架構(gòu)圖,其中每個(gè)環(huán)節(jié)都是微服務(wù)的核心部分。

架構(gòu)分解:

  • 網(wǎng)關(guān)集群:數(shù)據(jù)的聚合、實(shí)現(xiàn)對(duì)接入客戶端的身份認(rèn)證、防報(bào)文重放與防數(shù)據(jù)篡改、功能調(diào)用的業(yè)務(wù)鑒權(quán)、響應(yīng)數(shù)據(jù)的脫敏、流量與并發(fā)控制等。
  • 業(yè)務(wù)集群:一般情況下移動(dòng)端訪問(wèn)和瀏覽器訪問(wèn)的網(wǎng)關(guān)需要隔離,防止業(yè)務(wù)耦合。
  • Local Cache:由于客戶端訪問(wèn)業(yè)務(wù)可能需要調(diào)用多個(gè)服務(wù)聚合,所以本地緩存有效的降低了服務(wù)調(diào)用的頻次,同時(shí)也提示了訪問(wèn)速度。本地緩存一般使用自動(dòng)過(guò)期方式,業(yè)務(wù)場(chǎng)景中允許有一定的數(shù)據(jù)延時(shí)。
  • 服務(wù)層:原子服務(wù)層,實(shí)現(xiàn)基礎(chǔ)的增刪改查功能,如果需要依賴其他服務(wù)需要在 Service 層主動(dòng)調(diào)用。
  • Remote Cache:訪問(wèn) DB 前置一層分布式緩存,減少 DB 交互次數(shù),提升系統(tǒng)的TPS。
  • DAL:數(shù)據(jù)訪問(wèn)層,如果單表數(shù)據(jù)量過(guò)大則需要通過(guò) DAL 層做數(shù)據(jù)的分庫(kù)分表處理。
  • MQ:消息隊(duì)列用來(lái)解耦服務(wù)之間的依賴,異步調(diào)用可以通過(guò) MQ 的方式來(lái)執(zhí)行。
  • 數(shù)據(jù)庫(kù)主從:服務(wù)化過(guò)程中必經(jīng)的階段,用來(lái)提升系統(tǒng)的 TPS。

注意事項(xiàng):

  • 服務(wù)啟動(dòng)方式建議使用jar方式啟動(dòng),啟動(dòng)速度快,更容易監(jiān)控。
  • 緩存、緩存、緩存,系統(tǒng)中能使用緩存的地方盡量使用緩存,通過(guò)合理的使用緩存可以有效的提高系統(tǒng)的TPS。
  • 服務(wù)拆分要合理,盡量避免因服務(wù)拆分而導(dǎo)致的服務(wù)循環(huán)依賴。
  • 合理的設(shè)置線程池,避免設(shè)置過(guò)大或者過(guò)小導(dǎo)致系統(tǒng)異常。

總結(jié)

Dubbo 出生于阿里系,是阿里巴巴服務(wù)化治理的核心框架,并被廣泛應(yīng)用于中國(guó)各互聯(lián)網(wǎng)公司;只需要通過(guò) Spring 配置的方式即可完成服務(wù)化,對(duì)于應(yīng)用無(wú)入侵,設(shè)計(jì)的目的還是服務(wù)于自身的業(yè)務(wù)為主。

雖然阿里內(nèi)部原因 Dubbo 曾經(jīng)一度暫停維護(hù)版本,但是框架本身的成熟度以及文檔的完善程度,完全能滿足各大互聯(lián)網(wǎng)公司的業(yè)務(wù)需求。

如果我們使用配置中心、分布式跟蹤這些內(nèi)容都需要自己去集成,這樣無(wú)形中增加了使用 Dubbo 的難度。

Spring Cloud 是大名鼎鼎的 Spring 家族的產(chǎn)品, 專注于企業(yè)級(jí)開(kāi)源框架的研發(fā)。

Spring Cloud 自從發(fā)布到現(xiàn)在,仍然在不斷的高速發(fā)展,幾乎考慮了服務(wù)治理的方方面面,開(kāi)發(fā)起來(lái)非常的便利和簡(jiǎn)單。

Dubbo 于 2017 年開(kāi)始又重啟維護(hù),發(fā)布了更新后的 2.5.7 版本,而 Spring Cloud 更新的非??欤壳耙呀?jīng)更新到 Finchley.M2。

因此,企業(yè)需要根據(jù)自身的研發(fā)水平和所處階段選擇合適的架構(gòu)來(lái)解決業(yè)務(wù)問(wèn)題,不管是 Dubbo 還是 Spring Cloud 都是實(shí)現(xiàn)微服務(wù)有效的工具。

責(zé)任編輯:武曉燕 來(lái)源: talkwithtrend
相關(guān)推薦

2023-06-04 13:51:08

2022-04-18 16:15:31

UbuntuArchLinux

2022-10-12 07:11:38

哈希加密系統(tǒng)

2016-05-05 09:56:59

Angular 2React

2011-03-04 09:17:40

GNOMEUnityUbuntu

2024-02-19 18:06:04

PythonJuliaRust

2012-05-29 13:10:50

HTML5

2011-11-28 09:31:23

NIST云計(jì)算云服務(wù)

2012-08-10 10:12:24

傳統(tǒng)網(wǎng)絡(luò)云計(jì)算

2020-05-06 11:04:52

Elasticsear架構(gòu)運(yùn)維

2023-03-23 08:00:00

人工智能ChatGPTGoogle Bar

2014-04-18 14:26:07

AndroidiOS對(duì)比

2016-10-12 11:56:39

原生混合移動(dòng)開(kāi)發(fā)

2012-08-17 14:55:52

OS X MountaWindows 8

2019-09-09 09:15:00

2015-03-18 10:04:05

VoLTEVoWiFi基于IP傳輸語(yǔ)音

2019-06-05 10:11:10

英特爾NUCCPU

2019-03-04 09:22:09

WiFi無(wú)線網(wǎng)絡(luò)AP

2021-09-29 13:37:11

博睿數(shù)據(jù)短信評(píng)測(cè)

2016-09-22 09:12:26

云存儲(chǔ)實(shí)體存儲(chǔ)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)