本文目錄一覽:
- 1、硬核!Dubbo分布式服務框架入門教程
- 2、Dubbo與Nacos的區別兩者是不是有重疊?
- 3、從零開始認識Dubbo
- 4、說一下Dubbo的工作原理?註冊中心掛了可以繼續通信嗎?
- 5、dubbo和spring cloud區別是什麼?
硬核!Dubbo分布式服務框架入門教程
Dubbo是阿里開源項目,國內很多互聯網公司都在用,已經經過很多線上考驗。
Dubbo內部使用了 Netty、Zookeeper,保證了高性能高可用性,使用Dubbo可以將核心業務抽取出來,作為獨立的服務,逐漸形成穩定的服務中心,可用於提高業務復用和靈活擴展,使前端應用能更快速的響應多變的市場需求。
另外,分布式架構可以承受更大規模的並發流量。
Dubbo開始於電商系統,因此在這裡先從電商系統的演變講起。
當網站流量很小時,只需一個應用,將所有功能如下單支付等都部署在一起,以減少部署節點和成本。
缺點:單一的系統架構,使得在開發過程中,佔用的資源越來越多,而且隨着流量的增加越來越難以維護
垂直應用架構解決了單一應用架構所面臨的擴容問題,流量能夠分散到各個子系統當中,且系統的體積可控,一定程度上降低了開發人員之間協同以及維護的成本,提升了開發效率。
缺點:但是在垂直架構中相同邏輯代碼需要不斷地複製,不能復用。
當垂直應用越來越多,應用之間交互不可避免,將核心業務抽取出來,作為獨立的服務,逐漸形成穩定的服務中心
隨着服務化的進一步發展,服務越來越多,服務之間的調用和依賴關係也越來越複雜,誕生了面向服務的架構體系(SOA),也因此衍生出了一系列相應的技術,如對服務提供、服務調用、連接處理、通信協議、序列化方式、服務發現、服務路由、日誌輸出等行為進行封裝的服務框架。
課程目標:
了解遠程調用PRC的概念,分布式應用為什麼使用RPC, 基於PRC協議的Dubbo的使用。Dubbo框架的特點,框架的組件;基於Dubbo服務提供者,消費者,註冊中心Zookeeper的分布式應用的開發部署, Dubbo的負載均衡實現。微服務的開發. Spring + Dubbo + Zookeeper + Linux
適用人群:
適合有Java基礎,要進入到互聯網行業的開發人員,微服務開發。
動力節點的Dubbo課程以實戰為主講解,從基礎開始手把手式地詳細講解RPC概念,PRC在分布式應用的重要作用。Dubbo分布式服務框架的應用入門基礎。傳統應用到分布式以及微服務的轉變思想。Dubbo協議的特點。Dubbo分布式服務的詳細開發流程、Dubbo服務的實施部署,Zookeeper的服務管理等。
課程目錄:
•001.dubbo視頻教程-dubbo前言
•002.dubbo視頻教程-dubbo概述
•003.dubbo視頻教程-初識dubbo
•004.dubbo視頻教程-dubbo前世今生
•005.dubbo視頻教程-dubbo結構概述-1
•006.dubbo視頻教程-dubbo結構概述-2
•007.dubbo視頻教程-dubbo的使用-直連方式-1
•008.dubbo視頻教程-dubbo的使用-直連方式-2
•009.dubbo視頻教程-dubbo的使用-直連方式-3
•010.dubbo視頻教程-dubbo的使用-直連方式-4
•011.dubbo視頻教程-dubbo服務化最佳實踐-概述
•012.dubbo視頻教程-dubbo服務化最佳實踐-1
•013.dubbo視頻教程-dubbo服務化最佳實踐-2
•014.dubbo視頻教程-dubbo服務化最佳實踐-3
•015.dubbo視頻教程-dubbo服務化最佳實踐-4
•016.dubbo視頻教程-dubbo服務化最佳實踐-5
•017.dubbo視頻教程-註冊中心概述
•018.dubbo視頻教程-windows下安裝及配置zookeeper
•019.dubbo視頻教程-linux下安裝及配置zookeeper
•020.dubbo視頻教程-內容回顧
•021.dubbo視頻教程-dubbo實例-使用註冊中心-1
•022.dubbo視頻教程-dubbo實例-使用註冊中心-2
•023.dubbo視頻教程-dubbo實例-使用註冊中心-3
•024.dubbo視頻教程-dubbo實例-使用註冊中心-4
•025.dubbo視頻教程-dubbo實例-使用註冊中心-5
•026.dubbo視頻教程-dubbo實例使用linux註冊中心
•027.dubbo視頻教程-dubbo實例-版本號version的使用-1
•028.dubbo視頻教程-dubbo實例-版本號version的使用-2
•029.dubbo視頻教程-dubbo實例-版本號version的使用-3
•030.dubbo視頻教程-dubbo實例-版本號version的使用-4
•031.dubbo視頻教程-解決學生問題
•032.dubbo視頻教程-dubbo配置中常見屬性
•033.dubbo視頻教程-dubbo的高穩定性
•034.dubbo視頻教程-監控中心-1
•035.dubbo視頻教程-監控中心-2
Dubbo實戰視頻教程:
Dubbo全套資料下載
Dubbo與Nacos的區別兩者是不是有重疊?
沒有重疊,只是兩者側重點不一樣。Nacos主要功能集中在動態服務發現、服務配置、服務元數據及流量管理。你可以把他簡單的理解為是一個註冊中心和配置中心,而Dubbo是一款高性能、輕量級的開源Java服務框架,主要功能點在於RPC框架。
Dubbo是阿里巴巴公司開源的一個高性能優秀的服務框架,使得應用可通過高性能的RPC實現服務的輸出和輸入功能,可以和Spring框架無縫集成。
Dubbo是一款高性能、輕量級的開源Java RPC框架,它提供了三大核心能力,面向接口的遠程方法調用,智能容錯和負載均衡,以及服務自動註冊和發現。
註冊中心負責服務地址的註冊與查找,相當於目錄服務,服務提供者和消費者只在啟動時與註冊中心交互,註冊中心不轉發請求,壓力較小。
監控中心負責統計各服務調用次數,調用時間等,統計先在內存匯總後每分鐘一次發送到監控中心服務器,並以報表展示。服務提供者向註冊中心註冊其提供的服務,並彙報調用時間到監控中心,此時間不包含網絡開銷。
從零開始認識Dubbo
[TOC]
1.Dubbo是什麼
Apache Dubbo 是一款高性能Java RPC框架。
Dubbo是一個分布式服務框架,致力於提供高性能和透明化的RPC遠程服務調用方案,以及SOA服務治理方案。簡單的說,dubbo就是個服務框架,如果沒有分布式的需求,其實是不需要用的,只有在分布式的時候,才有dubbo這樣的分布式服務框架的需求,並且本質上是個服務調用的東東, 說白了就是個遠程服務調用的分布式框架(告別Web Service模式中的WSdl,以服務者與消費者的方式在dubbo上註冊) 其核心部分包含:
2.Dubbo能做什麼
Dubbo採用全spring配置方式,透明化接入應用,對應用沒有任何API侵入,只需用Spring加載Dubbo的配置即可,Dubbo基於Spring的Schema擴展進行加載。
3.Dubbo架構
節點角色說明:
Provider: 暴露服務的服務提供方。
Consumer: 調用遠程服務的服務消費方。
Registry: 服務註冊與發現的註冊中心。
Monitor: 統計服務的調用次調和調用時間的監控中心。
Container: 服務運行容器。
調用關係說明:
4.Dubbo的使用方法
Dubbo採用全Spring配置方式,透明化接入應用,對應用沒有任何API侵入,只需用Spring加載Dubbo的配置即可,Dubbo基於Spring的Schema擴展進行加載。如果不想使用Spring配置,可以通過API的方式進行調用(註解式,不推薦使用)
下載安裝zookeeper註冊中心(不建議使用multicast)
1.Windows
下載地址:
使用方法:下載解壓即可,進入解壓目錄運行zkServer.cmd啟動註冊服務中心
截圖:
2.MacOS
下載地址:
使用方法:下載解壓即可,進入解壓目錄運行zkServer.sh start啟動註冊服務中心
3.Linux
下載地址:
使用方法:下載解壓即可,進入解壓目錄運行zkServer.sh start啟動註冊服務中心
服務提供者
1.定義服務接口(該接口需單獨打包,在服務提供方和消費方共享)
DemoService.java
2.服務提供方實現接口:(對服務消費方隱藏實現)
DemoServiceImpl.java
dubbo-provider.xml:
4.加載Spring配置,啟動服務:
Provider.java:
或者使用springBoot啟動
服務消費者:
applicationContext-dubbo.xml 中註冊自己需要調用的接口。
1.通過Spring配置引用遠程服務
dubbo-consumer.xml:
2.加載Spring配置,並調用遠程服務:
Consumer.java
或者使用springBoot啟動
並添加對應的restful接口提供接口訪問
修改對應index頁面
3.dubbo管理頁面:
啟動後訪問
輸入賬號密碼root/root
應用頁面:
提供者頁面:
消費者頁面:
服務頁面:
測試是否成功,只要看狀態是否正常,就ok了 ….
provider-log:
5.使用Dubbo可能遇到的問題
1、org.springframework.beans.factory.BeanCreationException
原因分析:
解決方案
2、org.apache.dubbo.rpc.RpcException
原因分析
解決方案
可能是因為providers沒有啟動,或者是provider對應暴露的服務被禁用,啟動providers或者解除禁用即可
3、java.lang.IllegalStateException
原因分析
解決方案
總結以上兩點,通俗點講,就是重啟了工程(可能是因為直接修改代碼,工程reload了), 並且,連過了數據庫(登錄等),才出現了上述報錯信息。原因是因為在tomcat重啟的時候,之前的tomcat的線程還沒有完全關閉,最新啟動tomcat就會報這個異常。
4、org.apache.dubbo.remoting.TimeoutException
原因分析
解決方案
在dubbo-provider.xml增加超時時間
說一下Dubbo的工作原理?註冊中心掛了可以繼續通信嗎?
答案是肯定可以的,我將從下面幾點進行說明:
1.dubbo 的調用流程
2.Dubbo整體設計
3.從源碼上說明註冊中心掛了還是可以繼續通信的
Dubbo 調用流程
架構圖
流程說明:
1.Provider(提供者)綁定指定端口並啟動服務
2.提供者連接註冊中心,並發本機IP、端口、應用信息和提供服務信息發送至註冊中心存儲
3.Consumer(消費者),連接註冊中心 ,並發送應用信息、所求服務信息至註冊中心
4.註冊中心根據 消費 者所求服務信息匹配對應的提供者列表發送至Consumer 應用緩存。
5.Consumer 在發起遠程調用時基於緩存的消費者列表擇其一發起調用。
6.Provider 狀態變更會實時通知註冊中心、在由註冊中心實時推送至Consumer
這麼設計的意義:
Dubbo 整體設計
其協作流程如下:
從源碼上說明註冊中心掛了還是可以繼續通信的
首先要把消費者註冊到Zookeeper註冊中心
然後使用RegistryDirectory 監聽一下幾個目錄(會自動觸發一次去獲取這些目錄上的當前數據)
當前所引入的服務的動態配置目錄:/dubbo/config/dubbo/org.apache.dubbo.demo.DemoService:1.1.1:g1.configurators
比如監控providers 目錄:
當有服務提供者註冊,zookeeper會自動推動給訂閱的消費者,然後轉換為invoker存儲到緩存中
我們在看調用時的代碼:
我們看到 FailoverClusterInvoker 的doInvoke方法
Invoker invoker = select(loadbalance, invocation, copyInvokers, invoked);
此方法根據負載均衡器去緩存中獲取一個invoker,
上面的 copyInvokers 就是上面我們緩存進去的 List
invokers = routerChain.route(getConsumerUrl(), invocation);
總結
在我們系統啟動時,已經緩存了註冊中心上的所有服務,後續的註冊中心掛了只會影響到後續則註冊,不會影響調用!
Dubbo分布式的RPC,微服務框架,
包括三個關鍵功能:基於接口的遠程調用,容錯與負載均衡,服務自動註冊與發現。
Dubbo使得調用遠程服務就像調用本地java服務一樣簡單。
參考Dubbo官方文檔:包括實現細節,遠程調用細節,服務提供者暴露服務。
主要流程。
1、provider向註冊中心去註冊
2、consumer從註冊中心訂閱服務,註冊中心會通知consumer註冊好的服務
3、consumer調用provider
4、consumer和provider都異步的通知監控中心
基於zk作為註冊中心:
【提供者】在【啟動】時,向註冊中心zk 【註冊】自己提供的服務。
【消費者】在【啟動】時,向註冊中心zk 【訂閱】自己所需的服務。
所以是可以的,消費者在啟動時,消費者會從zk拉取註冊的生產者的地址接口等數據,緩存在本地。每次調用時,按照本地存儲的地址進行調用,消費者本地有一個生產者的列表,他會按照列表繼續工作,倒是無法從註冊中心去同步最新的服務列表,短期的註冊中心掛掉是不要緊的,但一定要儘快修復,掛掉是不要緊的,但前提是你沒有增加新的服務,如果你要調用新的服務,則是不能辦到的
dubbo和spring cloud區別是什麼?
dubbo和spring cloud區別是:
1、初始定位不同: SpringCloud定位為微服務架構下的一站式解決方案;Dubbo 是 SOA 時代的產物,它的關注點主要在於服務的調用和治理。
2、生態環境不同: SpringCloud依託於Spring平台,具備更加完善的生態體系;而Dubbo一開始只是做RPC遠程調用,生態相對匱乏,現在逐漸豐富起來。
3、調用方式: SpringCloud是採用Http協議做遠程調用,接口一般是Rest風格,比較靈活;Dubbo是採用Dubbo協議,接口一般是Java的Service接口,格式固定。但調用時採用Netty的NIO方式,性能較好。
4、組件差異比較多,例如SpringCloud註冊中心一般用Eureka,而Dubbo用的Zookeeper,SpringCloud生態豐富,功能完善,更像是品牌機,Dubbo則相對靈活,可定製性強,更像是組裝機。
5、SpringCloud:Spring公司開源的微服務框架,SpirngCloud 定位為微服務架構下的一站式解決方案。
6、Dubbo:阿里巴巴開源的RPC框架,Dubbo 是 SOA 時代的產物,它的關注點主要在於服務的調用,流量分發、流量監控和熔斷。
兩者的生態對比:
1、Spring Cloud 的功能很明顯比 Dubbo 更加強大,涵蓋面更廣,而且作為 Spring 的旗艦項目,它也能夠與 Spring Framework、Spring Boot、Spring Data、Spring Batch 等其他 Spring 項目完美融合,這些對於微服務而言是至關重要的。
2、使用 Dubbo 構建的微服務架構就像組裝電腦,各環節選擇自由度很高,但是最終結果很有可能因為一條內存質量不行就點不亮了,總是讓人不怎麼放心。
3、而 Spring Cloud 就像品牌機,在 Spring Source 的整合下,做了大量的兼容性測試,保證了機器擁有更高的穩定性,但是如果要在使用非原裝組件外的東西,就需要對其基礎原理有足夠的了解。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/243526.html