深度解析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…...

【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...

linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...