深度解析Dubbo的基本应用与高级应用:负载均衡、服务超时、集群容错、服务降级、本地存根、本地伪装、参数回调等关键技术详解
负载均衡
官网地址: http://dubbo.apache.org/zh/docs/v2.7/user/examples/loadbalance/
如果在消费端和服务端都配置了负载均衡策略, 以消费端为准。
这其中比较难理解的就是最少活跃调用数是如何进行统计的?
讲道理, 最少活跃数应该是在服务提供者端进行统计的, 服务提供者统计有多少个请求正在执行中。 但在Dubbo中, 就是不讲道理, 它是在消费端进行统计的, 为什么能在消费端进行统计?
逻辑是这样的:
1. 消费者会缓存所调用服务的所有提供者, 比如记为p1 、p2 、p3三个服务提供者, 每个提供者内都有一 个属性记为active, 默认位0
2. 消费者在调用次服务时, 如果负载均衡策略是leastactive
3. 消费者端会判断缓存的所有服务提供者的active, 选择最小的, 如果都相同, 则随机
4. 选出某一 个服务提供者后, 假设位p2, Dubbo就会对p2 .active+1
5. 然后真正发出请求调用该服务
6. 消费端收到响应结果后, 对p2 .active-1
7. 这样就完成了对某个服务提供者当前活跃调用数进行了统计, 并且并不影响服务调用的性能
服务超时在服务提供者和服务消费者上都可以配置服务超时时间, 这两者是不一 样的。
消费者调用 一 个服务, 分为三步:
1. 消费者发送请求 ( 网络传输)
2. 服务端执行服务
3. 服务端返回响应 ( 网络传输)
如果在服务端和消费端只在其中一 方配置了timeout, 那么没有歧义, 表示消费端调用服务的超时时间, 消 费端如果超过时间还没有收到响应结果, 则消费端会抛超时异常, 但, 服务端不会抛异常, 服务端在执行 服务后, 会检查执行该服务的时间, 如果超过timeout, 则会打印一 个超时日志 。服务会正常的执行完。
如果在服务端和消费端各配了一 个timeout, 那就比较复杂了, 假设
1. 服务执行为5s
2. 消费端timeout=3s
3. 服务端timeout=6s
那么消费端调用服务时, 消费端会收到超时异常 ( 因为消费端超时了), 服务端一 切正常 ( 服务端没有超 时) 。
集群容错
官网地址: http://dubbo.apache.org/zh/docs/v2.7/user/examples/fault-tolerent-strategy/
集群容错表示: 服务消费者在调用某个服务时, 这个服务有多个服务提供者, 在经过负载均衡后选出其中 一 个服务提供者之后进行调用 , 但调用报错后, Dubbo所采取的后续处理策略。
服务降级
官网地址: http://dubbo.apache.org/zh/docs/v2.7/user/examples/service-downgrade/
服务降级表示: 服务消费者在调用某个服务提供者时, 如果该服务提供者报错了, 所采取的措施。
集群容错和服务降级的区别在于:
1. 集群容错是整个集群范围内的容错
2. 服务降级是单个服务提供者的自身容错
本地存根
官网地址: http://dubbo.apache.org/zh/docs/v2.7/user/examples/local-stub/
本地存根, 名字很抽象, 但实际上不难理解, 本地存根就是一 段逻辑, 这段逻辑是在服务消费端执行的 , 这段逻辑一 般都是由服务提供者提供, 服务提供者可以利用这种机制在服务消费者远程调用服务提供者之
前或之后再做一些其他事情,比如结果缓存,请求参数验证等等。
本地伪装
官网地址: http://dubbo.apache.org/zh/docs/v2.7/user/examples/local-mock/
本地伪装就是Mock,Dubbo 中Mock 的功能相对于本地存根更简单一点,Mock 其实就是Dubbo 中的服务
容错的解决方案。
参数回调
官网地址: http://dubbo.apache.org/zh/docs/v2.7/user/examples/callback-parameter/
官网上的Demo 其实太复杂,可以看课上的Demo 更为简单。
首先,如果当前服务支持参数回调,意思就是:对于某个服务接口中的某个方法,如果想支持消费者在调 用这个方法时能设置回调逻辑,那么该方法就需要提供一个入参用来表示回调逻辑。
因为Dubbo 协议是基于长连接的,所以消费端在两次调用同一个方法时想指定不同的回调逻辑,那么就需 要在调用时在指定一定key 进行区分。
异步调用
官网地址:http://dubbo.apache.org/zh/docs/v2.7/user/examples/async-call/
理解起来比较容易,主要要理解CompletableFuture , 如果不理解,就直接把它理解为Future
其他异步调用方式: Dubbo 同步调用太慢,也许你可以试试异步处理
泛化调用
官网地址: http://dubbo.apache.org/zh/docs/v2.7/user/examples/generic-reference/
泛化调用可以用来做服务测试。
在Dubbo中, 如果某个服务想要支持泛化调用 , 就可以将该服务的generic属性设置为true, 那对于服务消 费者来说, 就可以不用依赖该服务的接口 , 直接利用GenericService接口来进行服务调用 。
泛化服务
官网地址: http://dubbo.apache.org/zh/docs/v2.7/user/examples/generic-service/
实现了GenericService接口的就是泛化服务
Dubbo中的REST
官网地址: http://dubbo.apache.org/zh/docs/v2.7/user/rest/
注意Dubbo的REST也是Dubbo所支持的一 种协议。
当我们用Dubbo提供了一 个服务后, 如果消费者没有使用Dubbo也想调用服务, 那么这个时候我们就可以 让我们的服务支持REST协议, 这样消费者就可以通过REST形式调用我们的服务了。
管理台
github地址: GitHub - apache/dubbo-admin: The ops and reference implementation for Apache Dubbo
动态配置
官网地址: http://dubbo.apache.org/zh/docs/v2.7/user/examples/config-rule/
注意动态配置修改的是服务参数, 并不能修改服务的协议 、IP 、PORT 、VERSION 、GROUP, 因为这5个 信息是服务的标识信息, 是服务的身份证号, 是不能修改的。
服务路由
官网地址: http://dubbo.apache.org/zh/docs/v2.7/user/examples/routing-rule/
什么是蓝绿发布、灰度发布
什么是蓝绿部署、滚动发布和灰度发布? - 知乎
Zookeeper 可视化客户端工具
Zookeeper 可视化客户端:
Zoolnspector.zip
相关文章:

深度解析Dubbo的基本应用与高级应用:负载均衡、服务超时、集群容错、服务降级、本地存根、本地伪装、参数回调等关键技术详解
负载均衡 官网地址: http://dubbo.apache.org/zh/docs/v2.7/user/examples/loadbalance/ 如果在消费端和服务端都配置了负载均衡策略, 以消费端为准。 这其中比较难理解的就是最少活跃调用数是如何进行统计的? 讲道理, 最少活跃数…...

备战2024美赛数学建模,文末获取历史优秀论文
总说(历年美赛优秀论文可获取) 数模的题型千变万化,我今天想讲的主要是一些「画图」、「建模」、「写作」和「论文结构」的思路,这些往往是美赛阅卷官最看重的点,突破了这些点,才能真正让你的美赛论文更上…...
Java加密解密大全(MD5、RSA)
目录 一、MD5加密二、RSA加解密(公加私解,私加公解)三、RSA私钥加密四、RSA私钥加密PKCS1Padding模式 一、MD5加密 密文形式:5eb63bbbe01eeed093cb22bb8f5acdc3 import java.math.BigInteger; import java.security.MessageDigest; import java.security…...
C语言程序设计考试掌握这些题妥妥拿绩点(写给即将C语言考试的小猿猴们)
目录 开篇说两句1. 水仙花数题目描述分析代码示例 2. 斐波那契数列题目描述分析代码示例 3. 猴子吃桃问题题目描述分析代码示例 4. 物体自由落地题目描述分析代码示例 5. 矩阵对角线元素之和题目描述分析代码示例 6. 求素数题目描述分析代码示例 7. 最大公约数和最小公倍数题目…...

编译ZLMediaKit(win10+msvc2019_x64)
前言 因工作需要,需要ZLMediaKit,为方便抓包分析,最好在windows系统上测试,但使用自己编译的第三方库一直出问题,无法编译通过。本文档记录下win10上的编译过程,供有需要的小伙伴使用 一、需要安装的软件…...

JS-基础语法(一)
JavaScript简单介绍 变量 常量 数据类型 类型转换 案例 1.JavaScript简单介绍 JavaScript 是什么? 是一种运行在客户端(浏览器)的编程语言,可以实现人机交互效果。 JS的作用 JavaScript的组成 JSECMAScript( 基础语法 )…...

18款Visual Studio实用插件(更新)
前言 俗话说的好工欲善其事必先利其器,安装一些Visual Studio实用插件对自己日常的开发和工作效率能够大大的提升,避免996从选一款好的IDE实用插件开始。以下是我认为比较实用的Visual Studio插件希望对大家有用,大家有更好的插件推荐可在文…...
三、java线性表(顺序表、链表、栈、队列)
java线性表 三、线性表1.1 顺序表1.2 链表1.2.1 单向链表(Singly Linked List)1.2.2 双向链表(Doubly Linked List) 1.3 LinkedList VS ArrayList1.3.7 使用 LinkedList 的场景 1.4 栈1.5 队列 三、线性表 线性表是一种经典的数据…...

PiflowX-MysqlCdc组件
MysqlCdc组件 组件说明 MySQL CDC连接器允许从MySQL数据库读取快照数据和增量数据。 计算引擎 flink 组件分组 cdc 端口 Inport:默认端口 outport:默认端口 组件属性 名称展示名称默认值允许值是否必填描述例子hostnameHostname“”无是MySQL…...

2023春季李宏毅机器学习笔记 03 :机器如何生成文句
资料 课程主页:https://speech.ee.ntu.edu.tw/~hylee/ml/2023-spring.phpGithub:https://github.com/Fafa-DL/Lhy_Machine_LearningB站课程:https://space.bilibili.com/253734135/channel/collectiondetail?sid2014800 一、大语言模型的两种…...
dplayer播放hls格式视频并自动开始播放
监控视频流为hls格式,需要打开或刷新页面自动开始播放,需要安装dplayer和hls.js插件,插件直接npm装就行,上代码 import DPlayer from dplayer import Hls from hls.js //jquery是用来注册点击事件,实现自动开始播放 i…...

使用Vivado Design Suite平台板、将IP目录与平台板流一起使用
使用Vivado Design Suite平台板流 Vivado设计套件允许您使用AMD目标设计平台板(TDP)创建项目,或者已经添加到板库的用户指定板。当您选择特定板,Vivado设计工具显示有关板的信息,并启用其他设计器作为IP定制的一部分以…...

PACS医学影像报告管理系统源码带CT三维后处理技术
PACS从各种医学影像检查设备中获取、存储、处理影像数据,传输到体检信息系统中,生成图文并茂的体检报告,满足体检中心高水准、高效率影像处理的需要。 自主知识产权:拥有完整知识产权,能够同其他模块无缝对接 国际标准…...

介绍几种常见的质数筛选法
质数筛选法 1.暴力筛选法 :smirk:2.普通优化 :rofl:3.埃氏筛法:cold_sweat:4.线性筛选法:scream: 质数:除了1和他本身没有其它因数的正整数就是质数。1不是质数,2是质数。 1.暴力筛选法 😏 原理 求x的质数,令y从2到 x \sqrt[]{x…...
Qt/QML编程学习之心得:Linux下读写GPIO(23)
在linux嵌入式系统中,经常需要一些底层操作,Linux就如window一样,也对底层BSP进行了封装,对device driver进行了封装,使用的话基本就是文件读写的方式来读取,所以也大大简化了上层应用对底层硬件的访问难度。 比如要对GPIO口进行访问,在Qt中有几种方法: 使用命令行方…...

Unity中URP下深度图的线性转化
文章目录 前言一、_ZBufferParams参数有两组值二、LinearEyeDepth1、使用2、Unity源码推导:3、使用矩阵推导: 三、Linear01Depth1、使用2、Unity源码推导3、数学推导: 前言 在之前的文章中,我们实现了对深度图的使用。因为&#…...

Low Poly Cartoon House Interiors
400个独特的低多边形预制件的集合,可以轻松创建高质量的室内场景。所有模型都已准备好放入场景中,并使用一个纹理创建,以提高性能!包含演示场景! 模型分类: - 墙壁(79件) - 地板(28块) - 浴室(33个) - 厨房(36件) - 厨房道具(68件) - 房间道具(85件) - 灯具(…...
[算法与数据结构][c++]:左值、右值、左值引用、右值引用和std::move()
左值、右值、左值引用、右值引用和std::move 1. 什么是左值、右值2. 什么是左值引用、右值引用3. **右值引用和std::move的应用场景**3.1 实现移动语义3.2 **实例:vector::push_back使用std::move提高性能** **4. 完美转发 std::forward**5. Reference 写在前面&…...

【QT】day3
1.登陆界面 2.登陆失败 3.登陆成功弹窗 4.点击OK后跳转 #include "mainwindow.h" #include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this); }MainWindow::~MainWindow…...
c++ fork, execl 参数 logcat | grep
Linux进程编程(PS: exec族函数、system、popen函数)_linux popen函数会新建进程吗-CSDN博客 execvp函数详解_如何在C / C 中使用execvp()函数-CSDN博客 C语言的多进程fork()、函数exec*()、system()与popen()函数_c语言 多进程-CSDN博客 Linux---fork…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...

网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...

基于Java+VUE+MariaDB实现(Web)仿小米商城
仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...