当前位置: 首页 > news >正文

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

注意DubboREST也是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任务计划。本文将详细介绍这些方法,并提供…...