中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Dubbo能帶來什么

發布時間:2021-12-08 14:15:17 來源:億速云 閱讀:118 作者:iii 欄目:大數據

本篇內容介紹了“Dubbo能帶來什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

1. 前言

隨著現在互聯網行業的發展,越來越多的框架、中間件、容器等開源技術不斷地涌現,更好地來服務于業務,實現業務并解決問題。然而面對眾多的技術選擇,我們要如何甄別出適合自己團隊業務的技術呢?對于人來說,鞋子過大,可能影響奔跑的速度,鞋子過小,可能影響身體的成長。技術對于業務也是如此的關系。

所以,相對于技術的學習、搭建、使用、運維等技能,我們 對技術的甄別選擇更是重中之重。那么本文要講的Dubbox框架,又是如何在眾多的服務框架中脫穎而出,被團隊選中踐行服務之路?

2. 服務

2.1 為什么要做服務

技術為業務而生,架構也為業務而出現。隨著業務的發展、用戶量的增長,系統數量增多,調用依賴關系也變得復雜,為了確保系統高可用、高并發的要求,系統的架構也從單體時代慢慢遷移至服務SOA時代,根據不同服務對系統資源的要求不同,我們可以更合理的配置系統資源,使系統資源利用率最大化

Dubbo能帶來什么

  1. 單一應用架構 當網站流量很小時,只需一個應用,將所有功能都部署在一起,以減少部署節點和成本。 此時,用于簡化增刪改查工作量的 數據訪問框架(ORM) 是關鍵。

  2. 垂直應用架構 當訪問量逐漸增大,單一應用增加機器帶來的加速度越來越小,將應用拆成互不相干的幾個應用,以提升效率。 此時,用于加速前端頁面開發的 Web框架(MVC) 是關鍵。

  3. 分布式服務架構 當垂直應用越來越多,應用之間交互不可避免,將核心業務抽取出來,作為獨立的服務,逐漸形成穩定的服務中心,使前端應用能更快速的響應多變的市場需求。 此時,用于提高業務復用及整合的 分布式服務框架(RPC) 是關鍵。

  4. 流動計算架構 當服務越來越多,容量的評估,小服務資源的浪費等問題逐漸顯現,此時需增加一個調度中心基于訪問壓力實時管理集群容量,提高集群利用率。 此時,用于提高機器利用率的 資源調度和治理中心(SOA) 是關鍵。

平臺隨著業務的發展 從 All in One 環境 就可以滿足業務需求(以Java來說,可能只是一兩個war包就解決了);發展到需 要拆分多個應用,并且采用MVC的方式 分離前后端,加快開發效率;在發展到服務越來越多,不得不將 一些核心或共用的服務拆分出來,提供實時流動監控計算等,其實發展到此階段,如果服務拆分的足夠精細,并且獨立運行,這個時候至少可以 理解為SOA(Service Oriented Architecture 面向服務的體系結構)架構 了。

2.2 服務帶來的挑戰

當迎來服務SOA時代,我們面臨要解決的問題會很多,比如:系統的復雜度上升、服務依賴關系、服務性能監控、全鏈路日志、容災、斷路器、限流等。那么面對這些問題為什么還要做分布式服務呢?因為在未來只有砥礪前行,才能走的更高更遠。不過看到這些問題不要氣餒,先不管這些問題,讓我們一步步來梳理下現存有什么問題,我們要完成什么目標,問題自然會迎刃而解。

根據現在團隊的業務系統情況,首先我們要梳理出現存的問題是什么:

  1. 多種調用傳輸方式:HTTP方式、WebService方式;

  2. 服務調用依賴關系:人工記錄,查看代碼分析;

  3. 服務調用性能監控:日志記錄,人工查看時間;

  4. 服務與應用緊耦合:服務掛掉,應用無法可用;

  5. 服務集群負載配置:Nginx配置,存在單點問題;

在去選擇技術框架時,技術框架最基本要解決上面現存問題,同時我們也要確認出我們的期望,要達到的目標是什么:

  1. 支持當前業務需求,這是最最基本的條件;

  2. 服務避免單點問題,去中心化;

  3. 服務高可用、高并發,解耦服務依賴;

  4. 服務通用化,支持異構系統調用服務;

  5. 服務依賴關系自維護,可視化;

  6. 服務性能監控自統計,可視化;

  7. 服務需自帶注冊、發現、健康檢查、負載均衡等特性;

  8. 開發人員關注度高,上手快,簡單輕量,低侵入;

還有最重要一點,這也是往往很多技術人員進入的誤區,“對于技術,不要為了使用而使用,用最簡單合適的技術實現解決問題才是正道”。架構是服務于業務的,能快速方便的滿足業務需求的架構才是好的架構

2.3 服務未來的趨勢

一談到服務,可能大家很多聽說過SOA、MSA等服務的概念名詞,近幾年MSA炒的比較火,其實每一個概念的背后都在解決不同的問題。此類名詞的最大特點就是 一解釋就懂,一問就不知,一討論就打架

SOA、MSA兩者說到底都是對外提供接口的一種架構設計方式。我倒覺得微服務其實就是隨著互聯網的發展,復雜的平臺、業務的出現,導致SOA架構向更細粒度、更通用化程度發展,就成了所謂的微服務了。以這種說法做為根據,我覺得SOA與微服務的區別在于如下幾個方面:

  1. 微服務相比于SOA更加精細,微服務更多的以獨立的進程的方式存在,互相之間并無影響;

  2. 微服務提供的接口方式更加通用化,例如HTTP RESTful方式,各種終端都可以調用,無關語言、平臺限制;

  3. 微服務更傾向于分布式去中心化的部署方式,在互聯網業務場景下更適合;

微服務與SOA有很多相同之處。兩者都屬于典型的、包含松耦合分布式組件的系統結構。在圍繞著服務的概念創建架構這一方面,微服務提供了一種更清晰、定義更良好的方式。微服務的原則與敏捷軟件開發思想是高度一致的,而它與SOA原則的演化的目標也是相同的,則減少傳統的企業服務總線開發的高復雜性。兩者之間最關鍵的區別在于,微服務專注于以自治的方式產生價值。但是兩種架構背后的意圖是不同的:SOA嘗試將應用集成,一般采用中央管理模式來確保各應用能夠交互運作。微服務嘗試部署新功能,快速有效地擴展開發團隊。它著重于分散管理、代碼再利用與自動化執行

功能SOA微服務
組件大小大塊業務邏輯單獨任務或小塊業務邏輯
耦合通常松耦合總是松耦合
公司架構任何類型小型、專注于功能交叉的團隊
管理著重中央管理著重分散管理
目標確保應用能夠交互操作執行新功能,快速拓展開發團隊

微服務并不是一種新思想的方法。它更像是一種思想的精煉,一種SOA的精細化演進,并且更好地利用了先進的技術以解決問題,例如容器與自動化等。所以對于我們 去選擇服務技術框架時,并不是非黑即白,而是針對SOA、MSA兩種架構設計同時要考慮到兼容性,對于現有平臺情況架構設計,退則守SOA,進則攻MSA,階段性選擇適合的

3. 框架

現在業界比較成熟的服務框架有很多,比如:Hessian、CXF、Dubbo、Dubbox、Spring Cloud、gRPC、thrift等技術實現,都可以進行遠程調用,具體技術實現優劣參考以下分析,這也是具體在技術方案選擇過程中的重要依據。

3.1 服務框架對比

Dubbo 是阿里巴巴公司開源的一個Java高性能優秀的服務框架,使得應用可通過高性能的 RPC 實現服務的輸出和輸入功能,可以和 Spring框架無縫集成。不過,略有遺憾的是,據說在淘寶內部,dubbo由于跟淘寶另一個類似的框架HSF(非開源)有競爭關系,導致dubbo團隊已經解散,反到是當當網的擴展版本Dubbox仍在持續發展,墻內開花墻外香。其它的一些知名電商如當當、國美維護了自己的分支或者在dubbo的基礎開發,但是官方的庫缺乏維護,相關的依賴類比如Spring,Netty還是很老的版本(Spring 3.2.16.RELEASE, netty 3.2.5.Final),倒是有些網友寫了升級Spring和Netty的插件。

Dubbox和Dubbo本質上沒有區別,名字的含義擴展了Dubbo而已,以下擴展出來的功能,也是選擇Dubbox很重要的考察點。

  1. 支持REST風格遠程調用(HTTP + JSON/XML);

  2. 支持基于Kryo和FST的Java高效序列化實現;

  3. 支持基于Jackson的JSON序列化;

  4. 支持基于嵌入式Tomcat的HTTP remoting體系;

  5. 升級Spring至3.x;

  6. 升級ZooKeeper客戶端;

  7. 支持完全基于Java代碼的Dubbo配置;

Spring Cloud完全基于Spring Boot,是一個非常新的項目,2016年推出1.0的release版本,目前Github上更新速度很快. 雖然Spring Cloud時間最短, 但是相比Dubbo等RPC框架, Spring Cloud提供的全套的分布式系統解決方案。Spring Cloud 為開發者提供了在分布式系統(配置管理,服務發現,熔斷,路由,微代理,控制總線,一次性token,全局瑣,leader選舉,分布式session,集群狀態)中快速構建的工具,使用Spring Cloud的開發者可以快速的啟動服務或構建應用。它們將在任何分布式環境中工作,包括開發人員自己的筆記本電腦,裸物理機的數據中心,和像Cloud Foundry云管理平臺。在未來引領這微服務架構的發展,提供業界標準的一套微服務架構解決方案。

缺點是項目很年輕,很少見到國內業界有人在生產上成套使用,一般都是只有其中一兩個組件。相關的技術文檔大部分是英文的,案例也相對較少,使用的話需要摸索的時間會長一些。

下圖是Spring Cloud和Dubbo對比:

Dubbo能帶來什么

Motan是新浪微博開源的一個Java 框架。它誕生的比較晚,起于2013年,2016年5月開源。Motan 在微博平臺中已經廣泛應用,每天為數百個服務完成近千億次的調用。與Dubbo相比,Motan在功能方面并沒有那么全面,也沒有實現特別多的擴展。用的人比較少,功能和穩定性有待觀望。對跨語言調用支持較差,主要支持java

Hessian采用的是 二進制RPC協議,適用于發送二進制數據。但本身也是一個Web Service框架對RPC調用提供支持,功能簡單,使用起來也方便。基于Http協議進行傳輸。通過Servlet提供遠程服務。通過Hessain本身提供的API來發起請求。響應端根據Hessian提供的API來接受請求。

Hessian優點:

  1. 整個jar很小,輕量;

  2. 配置簡單;

  3. 功能強大,拋開了soap(simple object access protocal 簡單對象訪問協議)、ejb,采用二進制來傳遞對象;

rpcx是Go語言生態圈的Dubbo, 比Dubbo更輕量,實現了Dubbo的許多特性,借助于 Go語言優秀的并發特性和簡潔語法,可以使用較少的代碼實現分布式的RPC服務

gRPC是Google開發的高性能、通用的開源RPC框架,其由Google主要面向移動應用開發并基于HTTP/2協議標準而設計,基于ProtoBuf(Protocol Buffers)序列化協議開發,且支持眾多開發語言。本身它不是分布式的,所以要實現上面的框架的功能需要進一步的開發。

thrift是Apache的一個跨語言的高性能的服務框架,也得到了廣泛的應用。

以上RPC框架功能比較:

功能HessianMontanrpcxgRPCThriftDubboDubboxSpring Cloud
開發語言跨語言JavaGo跨語言跨語言JavaJavaJava
分布式(服務治理)×××
多序列化框架支持hessian√(支持Hessian2、Json,可擴展)× 只支持protobuf)×(thrift格式)
多種注冊中心×××
管理中心×××
跨編程語言×(支持php client和C server)××××
支持REST××××××
關注度
上手難度
運維成本
開源機構CauchoWeiboApacheGoogleApacheAlibabaDangdangApache

實際場景中的選擇

  1. Spring Cloud:Spring全家桶,用起來很舒服,只有你想不到,沒有它做不到。可惜因為發布的比較晚,國內還沒出現比較成功的案例,大部分都是試水,不過畢竟有Spring作背書,還是比較看好。

  2. Dubbox:相對于Dubbo支持了REST,估計是很多公司選擇Dubbox的一個重要原因之一,但如果使用Dubbo的RPC調用方式,服務間仍然會存在API強依賴,各有利弊,懂的取舍吧。

  3. Thrift:如果你比較高冷,完全可以基于Thrift自己搞一套抽象的自定義框架吧。

  4. Montan:可能因為出來的比較晚,目前除了新浪微博16年初發布的,

  5. Hessian:如果是初創公司或系統數量還沒有超過5個,推薦選擇這個,畢竟在開發速度、運維成本、上手難度等都是比較輕量、簡單的,即使在以后遷移至SOA,也是無縫遷移。

  6. rpcx/gRPC:在服務沒有出現嚴重性能的問題下,或技術棧沒有變更的情況下,可能一直不會引入,即使引入也只是小部分模塊優化使用。

3.2 RPC vs REST(JAX-RS)

由于Dubbo是基礎框架,其實現的內容對于我們實施微服務架構是否合理,也需要我們根據自身需求去考慮是否要修改,比如Dubbo的服務調用是通過RPC實現的,但是如果仔細拜讀過Martin Fowler的microservices一文,其定義的服務間通信是HTTP協議的REST API。那么這兩種有何區別呢?

  1. 服務提供方與調用方接口依賴方式太強

    我們為每個微服務定義了各自的service抽象接口,并通過持續集成發布到私有倉庫中,調用方應用對微服務提供的抽象接口存在強依賴關系,因此不論開發、測試、集成環境都需要嚴格的管理版本依賴,才不會出現服務方與調用方的不一致導致應用無法編譯成功等一系列問題,以及這也會直接影響本地開發的環境要求,往往一個依賴很多服務的上層應用,每天都要更新很多代碼并install之后才能進行后續的開發。若沒有嚴格的版本管理制度或開發一些自動化工具,這樣的依賴關系會成為開發團隊的一大噩夢而REST接口相比RPC更為輕量化,服務提供方和調用方的依賴只是依靠一紙契約,不存在代碼級別的強依賴,當然REST接口也有痛點,因為接口定義過輕,很容易導致定義文檔與實際實現不一致導致服務集成時的問題,但是該問題很好解決,只需要通過每個服務整合swagger,讓每個服務的代碼與文檔一體化,就能解決。所以在分布式環境下,REST方式的服務依賴要比RPC方式的依賴更為靈活。

  2. 服務對平臺敏感,難以簡單復用

    通常我們在提供對外服務時,都會 以REST的方式提供出去,這樣可以實現跨平臺的特點,任何一個語言的調用方都可以根據接口定義來實現。那么在Dubbo中我們要提供REST接口時,不得不實現一層代理,用來將RPC接口轉換成REST接口進行對外發布。若我們每個服務本身就以REST接口方式存在,當要對外提供服務時,主要在API網關中配置映射關系和權限控制就可實現服務的復用了。

相信這些痛點也是為什么當當網在dubbox(基于Dubbo的開源擴展)中增加了對REST支持的原因之一。

Dubbo實現了服務治理的基礎,但是要完成一個完備的微服務架構,還需要在各環節去擴展和完善以保證集群的健康,以減輕開發、測試以及運維各個環節上增加出來的壓力,這樣才能讓各環節人員真正的專注于業務邏輯。

而Spring Cloud依然發揚了Spring Source整合一切的作風,以標準化的姿態將一些微服務架構的成熟產品與框架揉為一體,并繼承了Spring Boot簡單配置、快速開發、輕松部署的特點,讓原本復雜的架構工作變得相對容易上手一些。所以,如果選擇Dubbo請務必在各個環節做好整套解決方案的準備,不然很可能隨著服務數量的增長,整個團隊都將疲于應付各種架構上不足引起的困難。而如果選擇Spring Cloud,相對來說每個環節都已經有了對應的組件支持,可能有些也不一定能滿足你所有的需求,但是其活躍的社區與高速的迭代進度也會是你可以依靠的強大后盾。

4. Dubbox帶來什么

4.1 Dubbo服務治理

Dubbo能帶來什么

特性描述
透明遠程調用就像調用本地方法一樣調用遠程方法;只需簡單配置,沒有任何API侵入;
負載均衡機制Client端LB,可在內網替代F5等硬件負載均衡器;
容錯重試機制服務Mock數據,重試次數、超時機制等;
自動注冊發現注冊中心基于接口名查詢服務提 供者的IP地址,并且能夠平滑添加或刪除服務提供者;
性能日志監控Monitor統計服務的調用次調和調用時間的監控中心;
服務治理中心路由規則,動態配置,服務降級,訪問控制,權重調整,負載均衡,等手動配置。
自動治理中心無,比如:熔斷限流機制、自動權重調整等;

4.2 Dubbox擴展特性

  1. 支持REST風格遠程調用(HTTP + JSON/XML);

  2. 支持基于Kryo和FST的Java高效序列化實現;

  3. 支持基于Jackson的JSON序列化;

  4. 支持基于嵌入式Tomcat的HTTP remoting體系;

  5. 升級Spring至3.x;

  6. 升級ZooKeeper客戶端;

  7. 支持完全基于Java代碼的Dubbo配置;

“Dubbo能帶來什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

铜梁县| 合肥市| 寻甸| 页游| 祁连县| 博野县| 克什克腾旗| 武汉市| 瑞金市| 吕梁市| 美姑县| 安丘市| 五华县| 岫岩| 汤阴县| 临安市| 鞍山市| 金川县| 安泽县| 湟源县| 青海省| 巴林右旗| 花垣县| 大理市| 高密市| 镇巴县| 巴马| 南江县| 靖边县| 水富县| 雅安市| 大埔区| 青浦区| 湾仔区| 和静县| 瑞金市| 长治县| 普宁市| 怀远县| 盐源县| 定襄县|