Dubbo生態之初識dubbo協議

1.RPC框架

在java的發展中,隨著業務的越來越龐大,單體架構的工作繁瑣且耦合度高,因此單體架構過渡到了分布式架構,而分布式架構就必然涉及到各個服務之間的遠程通信(RPC框架),RPC框架如圖所示:

工作流程:

a.客戶端調用客戶端Sub(client stub).這個調用是在本地

b.客戶端stub會將要傳輸的參數進行包裝,并通過系統調用發送到服務端機器。打包的過程就叫做序列化。(常見的方式有:XML、JSON、二進制編碼)

c.客戶端本地操作系統發送信息至服務器。(可通過自定義TCP協議或HTTP傳輸)

d.服務器系統將信息傳送至服務端stub(server stub)

e.服務端stub(server stub)解析信息。該過程叫反序列化

f.服務端(server stub)調用程序,并通過類似的方法返回給客戶端

這樣來講:我們調用遠程服務,一是要遵守能夠傳輸的消息格式,二是傳輸的方式,三是調用異常的怎么辦。這些我們客戶端都是不可行自行去管理的,交給RPC框架去處理;

RPC協議正是定義了這樣的一種通信的標準規范,為了滿足不同的場景需求,于是很多標準化的RPC框架就在這個協議的基礎上產生了。

2.dubbo

????????dubbo就是在rpc協議的基礎上誕生的,但是它不僅僅是一個RPC框架,更是一款微服務框架,為大規模微服務時間提供高性能RPC通信、流量治理、可觀測性等解決方案。

思考: 我們講了dubbo的由來,那么dubbo為什么能夠被快速用起來呢? 肯定是解決了一些棘手的問題。

(1) 服務越來越多了,那是不是就說明服務調服務,服務鏈路越來越長了,如何對服務鏈路進行跟蹤和監控呢?

(2)服務通信之間的異常,是否會牽一發而動全身呢?因此我們需要有一種保護機制防止一個節點故障引發大規模的系統故障,就是說要有容錯機制

(3)服務的大規模集群之間是怎么互相發現互相感知的,因此需要有一個注冊中心對服務進行集體管理

(4)服務的大規模集群請求量的分發需要引入負載均衡機制。

3.dubbo特性

dubbo有著一系列高性能的對上述問題的解決方案

a.面向接口代理的高性能RPC調用,服務以接口為粒度,屏蔽了遠程調用底層細節

b.智能負載均衡,內置了多種負載均衡策略,智能感知下游節點健康狀況,顯著減少調用延遲,提高系統吞吐量

c.服務自動注冊與發現,支持多種注冊中心服務,服務實例上下線實時感知

d.可視化的服務治理與運維,提供豐富的服務治理、運維工具。可以隨時查詢服務元數據、服務健康狀況及調用統計,實時下發路由策略,調整配置參數

e.運行期流量調度,內置條件、腳本等路由策略,通過配置不同的路由規則,輕松實現灰度發布,同機房優先等功能。

f.高度可擴展能力,遵循微內核+插件的設計原則,平等對待內置實現和第三方實現。

4.dubbo架構

Provider:暴露服務的服務提供方

Consumer:條用遠程服務的服務消費方

Registry: 服務注冊與發現的注冊中心

Monitor: 統計服務的調用次數和調用時間的監控中心

Container: 服務運行容器

5.demo案例

假設我們有這樣的一個簡單的需求,需要查詢當前用戶還可以領取的優惠券列表。則基于dubbo的實現架構為分析: user為一個獨立部署的服務,coupon也為一個獨立部署的服務。

我們這樣來學習dubbo協議,我們知道dubbo協議是一個遠程網絡通信框架,那么我們user服務如果想要調用到coupon服務,那么我們就需要在user服務中配置conpon服務提供的這個接口url地址才能夠訪問。這就是dubbo的點對點通信。

    <!-- 提供方應用信息,用于計算依賴關系 --><dubbo:application name="coupon-portal"/><!-- 使用multicast廣播注冊中心暴露服務地址 --><dubbo:registry address="N/A"/><!-- 用dubbo協議在20880端口暴露服務 --><!-- 聲明需要暴露的服務接口 --><dubbo:referenceinterface="zsc.com.cn.user.IUserService" id="userService"url="dubbo://192.168.36.1:20881/zsc.com.cn.user.IUserService"/>

于是我們使用dubbo協議的這個需求的整個流程就是? 前端訪問--> REST接口->dubbo協議點對點訪問user-api--->user api的實現類---> dubbo協議點對點訪問coupon-api ---> coupon api的實現類-->再將結果返回。

思考: 我們的接口越來越多怎么辦,如果服務是集群部署呢,我們的url也需要配置多個的嗎?如何集體管理這么多個服務? 于是注冊中心就派上了大用場,將這些接口都統一注冊到注冊中心中,其它服務如果引用,去注冊中心上訂閱即可。顯然,從dubbo架構圖中我們可以看出來,dubbo天然就支持服務注冊與發現,目前dubbo能夠支持的注冊中心如consul,etcd,nacos,sofa,zookeeper,eureka,redis等已經很多了。

Springboot有著天生集成dubbo的優勢,那么在springboot中如何使用dubbo

a.首先引入jar包依賴

<dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-bom</artifactId><version>${dubbo.version}</version><type>pom</type><scope>import</scope>
</dependency>

spring-boot與dubbo的兼容包以及注冊中心zookeeper包

        <dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-dependencies-zookeeper</artifactId><type>pom</type></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId></dependency>

b.在啟動類上開啟dubbo

c.? dubbo的相關配置(在properties中進行配置)

# 應用名稱
spring.application.name=coupon-service-providerdubbo.application.name=coupon-service# dubbo的協議 -1代表的是端口號隨機生成
dubbo.protocol.port=-1
dubbo.protocol.name=dubbo# 注冊中心 配置中心 元數據中心  id為key
dubbo.registry.id=zk-registry
dubbo.registry.address=zookeeper://192.168.8.133:2181?timeout=20000
dubbo.config-center.address=zookeeper://192.168.8.133:2181?timeout=20000
dubbo.metadata-report.address=zookeeper://192.168.8.133:2181?timeout=20000

d. 服務怎么發布 增加@DubboService注解即可,就會自動進行掃描,并發布到注冊中心

e. 服務怎么引用訂閱 增加@DubboReference 注解即可,就會從注冊中心中引用這個接口

分析: c中我們配置了3個中心地址,registry注冊中心,接口服務url的存儲,config-center 配置中心,這是dubbo的公共配置可以單獨抽取出來(dubbo.properties),metadata 元數據中心,這是dubbo的url過于長的話,把url上攜帶的相關參數進行剝離開來。注冊中心,元數據中心和配置中心都是可以單獨部署的。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/13542.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/13542.shtml
英文地址,請注明出處:http://en.pswp.cn/web/13542.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

查看當前Shell系統環境變量

查看當前Shell系統環境變量 查看命令 env效果 查看Shell變量(系統環境變量自定義變量函數) 命令 set效果 常用系統環境變量 變量名稱含義PATH與windows環境變量PATH功能一樣&#xff0c;設置命令的搜索路徑&#xff0c;以冒號為分割HOME當前用戶主目錄&#xff1a;/rootSH…

有道:一季度業績超市場預期,生成式AI商業化落地進程加快

5月23日&#xff0c;教育科技公司網易有道&#xff08;NYSE&#xff1a;DAO&#xff09;公布了2024年第一季度未經審計的財務報告。報告期內&#xff0c;受益于“AI”加“教育”雙輪驅動&#xff0c;業績表現超市場預期&#xff0c;業務健康度大幅改善。 財報顯示&#xff0c;…

5.23小結

1.java項目創新 目前想添加一個自動回復的功能和設置驗證方式有&#xff08;允許任何人添加&#xff0c;禁止添加&#xff0c;設置回答問題添加&#xff0c;普通驗證添加&#xff09; 目前只完成畫好前端界面&#xff0c;前端發送請求&#xff0c;還有表的修改 因為涉及表字…

leetcode 210.課程表II

思路&#xff1a;拓補排序 其實就是對于第一個題的問題變了一個問法&#xff0c;上一個題本質上是求有沒有環&#xff0c;這道題本質上就是讓你求出來符合沒有環的路徑輸出而已&#xff0c;本質上沒有什么區別。 不同就在于這里需要你額外開一個數組用來存儲你遍歷這個有向圖…

大語言模型量化方法對比:GPTQ、GGUF、AWQ 包括顯存和速度

GPTQ: Post-Training Quantization for GPT Models GPTQ是一種4位量化的訓練后量化(PTQ)方法&#xff0c;主要關注GPU推理和性能。 該方法背后的思想是&#xff0c;嘗試通過最小化該權重的均方誤差將所有權重壓縮到4位。在推理過程中&#xff0c;它將動態地將其權重去量化為f…

nn.Linear

文章目錄 一、nn.Linear 一、nn.Linear nn.Linear 是 PyTorch 中的一個類&#xff0c;用于定義線性變換&#xff08;全連接層&#xff09;。它是神經網絡中常用的一種層類型&#xff0c;作為輸入張量與權重矩陣之間的線性變換。 nn.Linear(in_features, out_features, biasTru…

決策樹最優屬性選擇

本文以西瓜數據集為例演示決策樹使用信息增益選擇最優劃分屬性的過程 西瓜數據集下載&#xff1a;傳送門 首先計算根節點的信息熵&#xff1a; 數據集分為好瓜、壞瓜&#xff0c;所以|y|2根結點包含17個訓練樣例&#xff0c;其中好瓜共計8個樣例&#xff0c;所占比例為8/17壞…

2024-5-4-從0到1手寫配置中心Config之基于h2的config-server

添加依賴 新建的web工程中添加h2的依賴 添加h2的配置 設置數據源和密碼設置初始化sql語句打開h2的控制臺 初始化語句創建一個config表&#xff0c;保存服務配置信息。 完成CRUD接口 controller類 mapper接口 測試 在web控制臺可以看到sql已經初始化完成&#xff0c;crud接口…

前端基礎入門三大核心之HTML篇:深入解析PNG8、PNG16、PNG24與PNG32的差異及網頁應用指南

前端基礎入門三大核心之HTML篇&#xff1a;深入解析PNG8、PNG16、PNG24與PNG32的差異及網頁應用指南 基礎概念與作用說明PNG8PNG16PNG24PNG32 代碼示例與使用場景PNG8示例PNG24示例PNG32示例 性能優化與最佳實踐防范漏洞提示結語與討論 在網頁設計與前端開發中&#xff0c;選擇…

PLC工程師按這個等級劃分是否靠譜?

在工業自動化領域&#xff0c;PLC工程師扮演著至關重要的角色&#xff0c;他們負責構建、維護自動化系統&#xff0c;推動工業4.0進程的發展。成為一名優秀的PLC工程師需要經歷不同境界的發展階段&#xff0c;每個階段都對應著不同的技能要求和責任。以下是PLC工程師的六種級別…

Kotlin協程在android中的使用總結

認識協程 引用官方的一段話 協程通過將復雜性放入庫來簡化異步編程。程序的邏輯可以在協程中順序地表達&#xff0c;而底層庫會為我們解決其異步性。該庫可以將用戶代碼的相關部分包裝為回調、訂閱相關事件、在不同線程&#xff08;甚至不同機器&#xff01;&#xff09;上調度…

JDK、JRE、編譯指令和垃圾回收機制詳解

JDK 全稱 Java SE Development Kit (Java 開發工具包) JVM虛擬機&#xff1a;Java運行的地方 核心類庫&#xff1a;Java提前編好的東西 開發工具&#xff1a; javac,java,jdb,jhat javac:Java編譯器&#xff0c;用于將Java源代碼編譯成Java字節碼文件(.class)。 java: java…

[STM32-HAL庫]AS608-指紋識別模塊-STM32CUBEMX開發-HAL庫開發系列-主控STM32F103C8T6

目錄 一、前言 二、詳細步驟 1.光學指紋模塊 2.配置STM32CUBEMX 3.程序設計 3.1 輸出重定向 3.2 導入AS608庫 3.3 更改端口宏定義 3.4 添加中斷處理部分 3.5 初始化AS608 3.6 函數總覽 3.7 錄入指紋 3.8 驗證指紋 3.9 刪除指紋 3.10 清空指紋庫 三、總結及資源 一、前言 …

[力扣題解] 797. 所有可能的路徑

題目&#xff1a;797. 所有可能的路徑 思路 深度搜索 代碼 // 圖論哦!class Solution { private:vector<vector<int>> result;vector<int> path;// x : 當前節點void function(vector<vector<int>>& graph, int x){int i;// cout <&l…

解決鼠標滾動時element-ui日期選擇器錯位的問題

解決方案&#xff1a;監聽鼠標滾動事件&#xff0c;在鼠標滾動時隱藏element-ui日期選擇器下拉框 1、先在util文件夾下創建個hidePicker.js文件&#xff0c;代碼如下&#xff1a; let el nullconst fakeClickOutSide () > {const SELECTWRAP_BODY document.body // bod…

Day37 貪心算法part04

LC860檸檬水找零(未掌握) 未掌握分析&#xff1a;20的時候找零卡住&#xff0c;同時貪心思路就想了很久 當bill[i]20的時候&#xff0c;我們有兩種找零范式&#xff0c;找零10、5和找零三個5&#xff0c;優先找零10、5&#xff0c;因為三個5是可以替代10、5的情況的&#xff0…

Nebula街機模擬器 Mac移植版(400+游戲roms)漢化版

nebula星云模擬器是電腦上最熱門的街機游戲模擬器之一&#xff0c;玩家可以通過這個小巧的模擬器軟件進行多款經典街機游戲啟動和暢玩&#xff0c;本次移植的包含400多款游戲roms&#xff0c;經典的三國志、三國戰紀、拳皇、街霸、合金彈頭、1941都包含在內。 下載地址&#xf…

CompletableFuture的主要用途是什么?

CompletableFuture 的主要用途是為復雜的異步編程模型提供一種更簡單&#xff0c;更具可讀性的方式。它主要用于以下幾個方面&#xff1a; 非阻塞計算&#xff1a;CompletableFuture 為處理高延遲的計算任務提供了非阻塞的解決方案。你可以啟動一個計算任務&#xff0c;而不需要…

前端 CSS 經典:好看的標題動畫

前言&#xff1a;好看的標題動畫實現。 效果&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><…

YOLOv5 AssertionError: “XXX” acceptable suffix is [‘.pt‘]

使用終端訓練YOLOv5模型報錯&#xff0c;原命令為&#xff1a; “python train.py --img 640 --batch 1 --epochs 25 --data "C:\Users\GRT\PycharmProjects\yolov5-7.0\animal_training\dataset.yaml " --weights “C:\Users\GRT\PycharmProjects\yolov5-7.0\MyFunc…