总结Dubbo开源RPC框架

news2024/9/21 14:54:21

一、分布式系统

1.1 集群和分布式

集群:多个机器提供一样的服务(实现高性能、高可用、 可伸缩、高可扩展 )
分布式:多个机器提供不同的服务,合起来为一个大服务

1.2 架构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、Dubbo

dubbo是一个高性能、轻量级的开源RPC框架,由十层模型构成。

  • 业务逻辑层:提供接口和实现
  • RPC调用核心层:封装整个RPC的调用过程、负载均衡、集群容错、代理等功能
  • remoting:对网络核心协议和数据转化的封装
    在这里插入图片描述

2.1 核心能力

面向接口代理的高性能RPC调用
智能容错和负载均衡
服务的自动注册和发现
高度可扩展能力
运行期流量调度
可视化的服务治理和运维

2.2 负载均衡算法

  • 1 随机(通过区间的随机算法获取目标服务器,可针对某一个服务器增加权重 )
@Service(weight=100)
@Service(weight=200)

@Reference(loadbalance="random")

在这里插入图片描述

  • 2 轮询(123123分配,可针对性能好的服务器增加权重)
  • 3 一致性哈希(相同参数的请求落在同一台机器上)
  • 4 最少活跃调用数(服务者活跃数,初始值为0,收到请求+1,完成请求-1,处理请求快的活跃数下降的越快。使慢的服务器收到更少的请求)
  • 5 最短响应时间(计算目标服务请求的响应时间,响应时间短的配置更高的权重,再根据区间随机算法获取目标服务器)

2.3 工作原理

在这里插入图片描述

在这里插入图片描述

  • 1 服务启动时,服务提供者和服务消费者根据配置信息连接到注册中心,分别向注册中心注册和订阅服务,
  • 2 注册中心会根据注册信息返回服务提供者的信息给服务消费者,
  • 3 服务消费者把服务提供者的信息缓存到本地(避免多次访问注册中心带来的性能消耗),如果信息发生变更,消费者会收到注册中心的推送更新本地的缓存
  • 4 服务消费者会生成代理对象, 根据负载均衡策略选择目标服务提供者定时向monitor记录接口的调用次数和时间信息,拿到代理对象后,服务消费者通过代理对象发起接口的调用
  • 5 服务提供者收到请求后,根据数据进行反序列化,通过代理调用具体的接口的一个实现

2.4 超时与重试

超时:
当消费者调用服务者发生阻塞或者等待情形时,会一直等待下去
在某一峰值时刻,大量请求同时请求消费者,会造成线程的大量堆积,造成雪崩
dubbo会设置超时时间(这个时间段内无法完成服务访问则自动断开连接)

@Service(timeout=3000)

重试:
当出现网络抖动时,一次请求就会失败
dubbo可设置重试次数

//3s超时,重试2次,一共发送3次请求
@Service(timeout=3000,retries=2)

2.5 多版本

灰度发布:当出现新功能时,让一部分用户使用新功能,用户反馈没问题时再将所有用户迁移到新功能

dubbo使用version属性设置和调用同一个接口的不同版本

@Service(version="v1.0")
@Service(version="v2.0")

@Reference(version="v1.0")
private UserService userService;

在这里插入图片描述

2.6 集群容错

  • 1 重试(读操作),
  • 2 快速失败(写操作),
  • 3 安全失败(返回null),
  • 4 定时重发(不断请求直到成功),
  • 5 并行调用(一个成功即返回),
  • 6 广播调用(一个报错及报错)
@Reference(cluster="failover")

在这里插入图片描述

2.7 服务降级

// 调用失败返回null
@Reference(mock="fail:return null")

// 不调用直接返回null
@Reference(mock="force:return null")

在这里插入图片描述

2.8 Dubbo和SpringCloud的区别

  • 1 关注点不同。dubbo定位服务治理,主要解决服务的远程调用、流量分发、服务治理、流量控制;springcloud关注微服务整个的生态的解决方案,依托于Spring和Springboot
  • 2 底层原理不同。dubbo底层使用netty这种nio框架,基于tcp协议传输,通过Hession等序列化方式完成RPC通信;springcloud是基于http协议+rest风格的接口实现远程通信,http请求会有更大的报文,占用的带宽会更多,效率低一些 ,但rest相比RPC(代码级别的强依赖)更加灵活,服务提供者和服务调用方只需要根据http协议的契约完成通信。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1527704.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQLiteC/C++接口详细介绍sqlite3_stmt类简介

返回:SQLite—系列文章目录 上一篇:SQLiteC/C接口详细介绍之sqlite3类(十八) 下一篇:SQLiteC/C接口详细介绍sqlite3_stmt类(一) 预准备语句对象 typedef struct sqlite3_stmt sqlite3_stmt…

Linux docker1--环境及docker安装

一、基础环境要求 Docker分为ce版本(免费,试用7个月)和ee版本(收费)。 最低配置要求:64位操作系统,centOS 7及以上,内核版本不低于3.10 二、部署docker 1、查看服务的基础环境是否满…

基于深度学习YOLOv8+Pyqt5的工地安全帽头盔佩戴检测识别系统(源码+跑通说明文件)

wx供重浩:创享日记 对话框发送:318安全帽 获取完整源码源文件7000张已标注的数据集训练好的模型配置说明文件 可有偿59yuan一对一远程操作配置环境跑通程序 效果展示(图片检测批量检测视频检测摄像头检测) 基于深度学习YOLOv8Pyqt…

【HTTP】面试题整理

HTTP:什么是队头阻塞以及怎么解决? 队头阻塞(Head-of-Line Blocking) 计算机网络中的一个概念,特别是在处理HTTP请求时。当多个HTTP请求被发送到一个服务器,并且这些请求被放置在一个队列中等待处理时&…

uniapp微信小程序随机生成canvas-id报错?

uniapp微信小程序随机生成canvas-id报错? 文章目录 uniapp微信小程序随机生成canvas-id报错?效果图遇到问题解决 场景: 子组件,在 mounted 绘制 canvas;App、H5端正常显示,微信小程序报错; 效…

【Map和Set】(二叉搜索树 查找操作 插入操作 删除操作 Map的使用 Map.Entry<K, V> Set的说明)

文章目录 二叉搜索树查找操作插入操作删除操作 Map的使用Map.Entry<K, V> Set的说明 二叉搜索树 二叉搜索树&#xff1a;是空树或者是具有下面性质的二叉树 若左子树不为空,则左子树上所有节点的值都小于根节点的值;若右子树不为空,则右子树上所有节点的值都大于根节点的…

CSS案例-5.margin产品模块练习

效果1 相关数据 整体长&#xff1a;298px&#xff0c;高&#xff1a;415px 效果2 知识点 外边距margin 块级盒子水平居中 条件&#xff1a; 必须有宽度左右外边距设为auto 三种写法&#xff1a; margin-left&#xff1a;auto&#xff1b;margin-right&#xff1a;auto&…

数据可视化-ECharts Html项目实战(3)

在之前的文章中&#xff0c;我们学习了如何创建堆积折线图&#xff0c;饼图以及较难的瀑布图并更改图标标题。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵的点赞&#xff0c;谢谢。 …

服务器病毒木马通用排查处理应急响应流程

目录 一、勒索病毒发作的特征 二、勒索病毒的应急响应 三、勒索病毒预防与事后加固 一、勒索病毒发作的特征 如果发现大量统一后缀的文件&#xff1b;发现勒索信在Linux/home、/usr等目录&#xff0c;在Windows 桌面或者是被加密文件的文件夹下。如果存在以上特…

01|模型IO:输入提示、调用模型、解析输出

Model I/O 可以把对模型的使用过程拆解成三块&#xff0c;分别是输入提示&#xff08;对应图中的Format&#xff09;、调用模型&#xff08;对应图中的Predict&#xff09;和输出解析&#xff08;对应图中的Parse&#xff09;。这三块形成了一个整体&#xff0c;因此在LangCha…

【Ubuntu】Ubuntu的安装和配置

下载ubuntu镜像 https://releases.ubuntu.com/22.04.4/ubuntu-22.04.4-desktop-amd64.iso 一、Ubuntu安装 1.新建虚拟机 1.1按照它的提示创建用户&#xff1b;后面一直下一步就好 2.启动Ubuntu虚拟机 2.1设置为中文键盘 2.2默认即可&#xff1b;若是有低需求也可以选择最小…

YoloV8改进策略:Block改进|焦点调制网络

摘要 FocalNets是一个新型的神经网络架构&#xff0c;它的核心特点是用焦点调制模块完全取代了自注意力&#xff08;SA&#xff09;机制&#xff0c;用于在视觉任务中建模令牌&#xff08;token&#xff09;之间的交互。这种架构的设计旨在提高模型的可解释性&#xff0c;并在…

Tomcat:Session ID保持会话

目录 前言 ​一、部署环境 二、部署nginx反向代理服务器 三、部署tomcat服务器1 四、部署tomcat服务器2 五、客户端测试&#xff08;Session ID不断变动&#xff09; 六、配置Session ID会话保持 七、客户端测试&#xff08;Session ID保持&#xff09; 前言 此次实验…

拌合楼管理系统开发(六) 海康威视摄像头调用拍照

前言&#xff1a;无人值守过磅摄像头拍照 无人值守过程很重要的一个环节就是车辆过磅等车辆到到磅上指定位置后&#xff0c;触发车牌识别&#xff0c;以及车辆前后左右四个方位摄像头拍照&#xff0c;并存入到系统中。 一、支持设备&#xff1a; 建议都采用600万像素以上的海康…

jQuery+CSS3自动轮播焦点图特效源码

jQueryCSS3自动轮播焦点图特效源码&#xff0c;源码由HTMLCSSJS组成&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面 下载地址 jQueryCSS3自动轮播焦点图特效源码

javaweb day20

dml 写法 更新数据 写法 删除 写法

Java并发编程之ReactiveSteams

Reactive Steams 一、Reactive Steams介绍 在聊Reactive Steams之前&#xff0c;先了解一下Reactive Programming&#xff08;反应式/响应式编程&#xff09;。为了解决异步编程中出现的各种问题&#xff0c;程序员们提出了各种的思路去解决这些问题&#xff0c;这些解决问题…

docker init 生成Dockerfile和docker-compose.yml —— 筑梦之路

官网&#xff1a;https://docs.docker.com/engine/reference/commandline/init/ 简介 docker init是一个命令行实用程序&#xff0c;可帮助初始化项目中的 Docker 资源。.dockerignore它根据项目的要求创建 Dockerfile、Compose 文件。这简化了为项目配置 Docker 的过程&#…

Linux 文件系统:文件描述符、管理文件

目录 一、三个标注输入输出流 二、文件描述符fd 1、通过C语言管理文件—理解文件描述符fd 2、文件描述符实现原理 3、文件描述符0、1、2 4、总结 三、如何管理文件 1、打开文件的过程 2、内核空间的结构 struct task_struct&#xff08;PCB&#xff09; struct file…

html5播放flv视频

参考&#xff1a;flv-h265 - npmHTML5 FLV Player. Latest version: 1.7.0, last published: 6 months ago. Start using flv-h265 in your project by running npm i flv-h265. There are no other projects in the npm registry using flv-h265.https://www.npmjs.com/packag…