【开源服务框架】Dubbo

🎄欢迎来到@边境矢梦°的csdn博文🎄
🎄本文主要梳理Java面试中开源服务框架Dubbo会涉及到的知识点 🎄
🌈我是边境矢梦°,一个正在为秋招和算法竞赛做准备的学生🌈
🎆喜欢的朋友可以关注一下🫰🫰🫰,下次更新不迷路🎆

学习Dubbo最好的资源:Dubbo 文档 | Apache Dubbo

前言

Dubbo是SOA架构(服务的演变在Nacos中)

概述

Dubbo是一款高性能、轻量级的开源服务框架。

Dubbo是阿里巴巴公司开源的一个高性能、轻量级的Java RPC框架。

Dubbo是一个分布式服务框架,它提供了高性能和透明化的RPC远程服务调用方案以及SOA服务治理方案。Dubbo致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案,使得应用可通过高性能RPC实现服务的输出、输入功能和Spring框架无缝集成。

RPC

RPC,即:Remote Procedure Call,是指远程过程调用,是一种进程间的通信方式; 他是一种技术思想,而不是规范。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不是程序员显示编码这个远程调用的细节。即: 开发者无论是调用本地的方法还是远程的方法,编写调用代码的方式基本相同。

SPI

SPI的核心:

SPI(Service Provider Interface)

SPI 是 Java 提供的一种服务发现机制。它允许在运行时动态地为接口查找服务实现

例如,有一个定义了某种功能的接口,通过在特定的配置文件(通常位于META-INF/services/目录下)中指定该接口的具体实现类,运行时可以根据这个配置来加载并使用相应的实现类。

SPI 的主要步骤:

  1. 定义一个接口,规定服务的规范。
  2. 第三方实现这个接口。
  3. META-INF/services/目录下创建一个与接口全限定名相同的文件,文件内容为具体实现类的全限定名。
  4. 在运行时,通过java.util.ServiceLoader类来加载这些实现类。

双亲委派机制

双亲委派机制是 Java 类加载器的一种加载机制。当一个类加载器收到类加载请求时,它首先不会自己去尝试加载这个类,而是把请求委派给父类加载器去完成。只有当父类加载器无法完成加载请求时,子类加载器才会尝试自己去加载。

双亲委派机制的主要目的是保证 Java 核心类库的安全性和一致性防止用户自定义的类替换核心类库中的类

SPI 与双亲委派机制的关系

SPI 在一定程度上打破了双亲委派机制。因为在通过ServiceLoader加载服务实现类时,是由应用程序类加载器(AppClassLoader)去加载配置文件中指定的实现类,而不是遵循双亲委派的顺序。

这是因为如果按照双亲委派机制,这些由应用程序提供的实现类可能无法被加载到。通过这种方式,SPI 能够在运行时灵活地扩展和使用自定义的服务实现

例如,JDBC 驱动就是通过 SPI 机制来实现不同数据库驱动的动态加载和使用。

总之,SPI 为 Java 提供了一种动态扩展和发现服务实现的方式,而它与双亲委派机制相互补充,以满足不同的类加载需求。


IDL

(Interface Description Language)接口描述语言

IDL是用来描述软件组件接口的一种计算机 语言。IDL通过一种中立的方式(不偏向谁)来描述接口, 使得在不同平台上运行的对象和用不同语言编写的程序可以相互通信交流;比如,一个组件用C++写成,另一个组件用Java写成。

Java IDL 为分布式应用的开发提供了一种方式,使得不同语言编写的对象可以在网络上进行交互,但由于其开发和部署成本较高,目前已较少使用。如果你需要进行分布式应用的开发,可能需要考虑更现代和轻量级的技术。

特点

  1. 规范语言,类似 C 语言。
  2. 分离接口和实现。
  3. 支持多种数据类型定义。
  4. 剥离了编程语言和硬件的依赖性。

应用

  1. 实现跨语言的分布式系统通信
  2. 集成不同语言编写的软件模块。
  3. 定义和规范服务接口,便于系统扩展和集成。

Dubbo工作原理

深入解析Dubbo架构层次_dubbo架构有哪些分层-CSDN博客

工作原理分 10 层:

  • 第一层:service 层,接口层,给服务提供者和消费者来实现的(留给开发人员来实现);
  • 第二层:config 层,配置层,主要是对 Dubbo 进行各种配置的,Dubbo 相关配置;
  • 第三层:proxy 层,服务代理层,透明生成客户端的 stub 和服务端的 skeleton,调用的是接口,实现类没有,所以得生成代理,代理之间再进行网络通讯、负责均衡等;
  • 第四层:registry 层,服务注册层,负责服务的注册与发现;
  • 第五层:cluster 层,集群层,封装多个服务提供者的路由以及负载均衡,将多个实例组合成一个服务;
  • 第六层:monitor 层,监控层,对 rpc 接口的调用次数和调用时间进行监控;
  • 第七层:protocol 层,远程调用层,封装 rpc 调用;
  • 第八层:exchange 层,信息交换层,封装请求响应模式,同步转异步;
  • 第九层:transport 层,网络传输层,抽象 mina 和 netty 为统一接口;
  • 第十层:serialize 层,数据序列化层。

Dubbo框架

Dubbo高级特性

序列化

地址缓存

超时与重试

超时时间建议配置在服务的提供方,因为提供方知道操作大概是什么和操作的耗时大概是多少

多版本

服务提供方的serviceImpl里的类,有两个版本

服务消费方的controller里的方法

负载均衡

集群容错

官网

failover cluster 模式

provider 宕机重试以后,请求会分到其他的 provider 上,默认两次,可以手动设置重试次数,建

议把写操作重试次数设置成 0。

failback 模式

失败自动恢复会在调用失败后,返回一个空结果给服务消费者。并通过定时任务对失败的调用进行

重试,适合执行消息通知等操作。

failfast cluster 模式

快速失败只会进行一次调用,失败后立即抛出异常。适用于幂等操作、写操作,类似于 failover

cluster 模式中重试次数设置为 0 的情况。

failsafe cluster 模式

失败安全是指,当调用过程中出现异常时,仅会打印异常,而不会抛出异常。适用于写入审计日志

等操作。

forking cluster 模式

并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多

服务资源。可通过 forks="2" 来设置最大并行数。

broadcacst cluster 模式

广播调用所有提供者,逐个调用,任意一台报错则报错。通常用于通知所有提供者更新缓存或日志

等本地资源信息。

服务降级

部分图片来自黑马教程 (为了更好的准备面试特此整理)

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

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

相关文章

GAMES101(15节)

Irradiance辐射度量学 辐射度量学在渲染领域,可以帮助理解基于物理的光照模型 radiant energy辐射能量Q,累计总能量(单位J joule焦耳),就像太阳能板,光照时间越长接收能量越多,收到的能量总和…

jetlinks物联网平台学习2(加盐算法登陆)

加盐算法 加盐算法加密验证密码是否正确 对于传统的MD5加密,比更传统的直接保存账号密码稍微安全一点。 md5加密是一种hash算法 比如对于123456来说,md5算法结果一定是e10adc3949ba59abbe56e057f20f883e 这个结果是固定的。于是有的人准备一张彩虹表 预先…

ECharts基础使用方法 ---vue

1.安装依赖文件 仔细看项目" README.md " 描述,确定用什么安装 npm npm install echarts --save //官网推荐使用 pnpm pnpm install echarts --save 其他也是 在项目根目录,打开当前目录命令控制栏,输入以上命令并运行 安装成功后…

第十三章:使用html和css做一个静态登录网页练习

我们在使用浏览器 浏览某些网站的时候 有可能会遇到登录这种网页,这种网页是怎么制作出来的呢? 下面 我就来分享一个简单的 登录页 实现方案! 登录页面的作用: 身份验证:登录页面的核心作用就是验证用户身份。用户输入用户名(或邮箱、手机号)和密码,系统通过验证来判断…

[数据结构]无头单向非循环链表的实现与应用

文章目录 一、引言二、线性表的基本概念1、线性表是什么2、链表与顺序表的区别3、无头单向非循环链表 三、无头单向非循环链表的实现1、结构体定义2、初始化3、销毁4、显示5、增删查改 四、分析无头单向非循环链表1、存储方式2、优点3、缺点 五、总结1、练习题2、源代码 一、引…

尚品汇-秒杀商品定时任务存入缓存、Redis发布订阅实现状态位(五十一)

目录: (1)秒杀业务分析 (2)搭建秒杀模块 (3)秒杀商品导入缓存 (4)redis发布与订阅实现 (1)秒杀业务分析 需求分析 所谓“秒杀”&#xff0…

百度智能云API调用

植物识别API import base64 import urllib import requestsAPI_KEY = "你的图像识别API_KEY" SECRET_KEY = "你的图像识别SECRET_KEY"def main():url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/plant?access_token=" + get_acc…

12、等保安全通用要求

数据来源:12.等保安全通用要求_哔哩哔哩_bilibili 基本要求

docker启动mysql未读取my.cnf配置文件问题

描述 在做mysql主从复制配置两台mysql时,从节点的my.cnf配置为: [mysqld] datadir /usr/local/mysql/slave1/data character-set-server utf8 lower-case-table-names 1 # 主从复制-从机配置# 从服务器唯一 ID server-id 2 # 启用中继日志 relay-l…

thop计算模型复杂度(params,flops)

thop安装 -pip install thop在线安装失败 -离线安装 github网址: pytorch-OpCounter:Count the MACs / FLOPs of your PyTorch model. - GitCode python setup.py install 测试: from options import config as c import os os.environ["CUD…

【高分系列卫星简介——高分三号卫星(GF-3)】

高分三号卫星(GF-3) 高分三号(GF-3)是我国首颗高分辨率、C频段、多极化合成孔径雷达(SAR)卫星,由中国空间技术研究院北京空间飞行器总部设计部研制,并于2016年8月10日成功发射。该卫…

vue实现扫雷代码复制即可用,vue2和vue3都可适用

效果预览 代码实现 <template><div id"app"><div class"mine-sweeper"><div class"board" v-for"row in board" :key"row-${row.index}"><divclass"cell":class"{ no-clickable…

Vue3:mitt实现组件通信

目录 一.性质 1.轻量级 2.单例 3.异步 4.事件绑定与解绑 二.作用 1.组件间通信 2.解耦 3.状态管理 4.事件的集中处理 三.使用 1.安装mitt 2.引入mitt&#xff1b;调用mitt&#xff1b;暴露mitt 3.组件1 4.组件2 四.代码 1.组件1 2.组件2 五.效果 一.性质 1…

qt-C++笔记之Q_DECLARE_METATYPE和qRegisterMetaType

qt-C笔记之Q_DECLARE_METATYPE和qRegisterMetaType code review! 文章目录 qt-C笔记之Q_DECLARE_METATYPE和qRegisterMetaType一.Q_DECLARE_METATYPE使用方法应用场景 二.为什么需要注册类型&#xff1f;三.使用 Q_DECLARE_METATYPE 处理自定义类型的简短示例3.1.自定义类型定…

ElasticSearch-2-核心语法集群高可用实战-Week2-3

ES批量操作 1.批量获取文档数据 这里多个文档是指&#xff0c;批量操作多个文档&#xff0c;搜索查询文档将在之后的章节讲解 批量获取文档数据是通过_mget的API来实现的 (1)在URL中不指定index和type 请求方式&#xff1a;GET 请求地址&#xff1a;_mget 功能说明 &#…

(C++23) expected 基础使用

文章目录 ⭐前言⭐expected&#x1f39b;️基础使用&#x1f39b;️单子操作 (Monadic operations)&#x1f39a;️and_then & or_else&#x1f39a;️transform & transform_error ⭐END&#x1f31f;跋&#x1f31f;交流方式 ⭐前言 在 C17 中&#xff0c;提出了 op…

嵌入式系统stm32cube本地安装出现的问题

stm32cube在线安装很慢&#xff0c;本地安装中出现的一个bug stm32cube_fw_f4_v1281安装成功之后&#xff0c;如果想安装stm32cube_fw_f4_v1281会提示stm32cube_fw_f4_v1280未安装。 如果先安装stm32cube_fw_f4_v1280之后&#xff0c;再安装stm32cube_fw_f4_v1281还会提示这个…

算法练习题24——leetcode3296移山所需的最小秒数(二分模拟)

【题目描述】 【代码示例&#xff08;java&#xff09;】 class Solution {// 计算让工人们将山的高度降到0所需的最少时间public long minNumberOfSeconds(int mountainHeight, int[] workerTimes) {long left 0; // 最少时间初始为0long right 0; // 最大时间初始化为0// …

java--面向对象编程(中级部分)

IDE&#xff08;集成开发环境&#xff09; java-----IDE&#xff08;集成开发环境&#xff09;-CSDN博客 包 包的三大作用 区分相同名字的类 当类很多时,可以很好的管理类[看Java API 文档] 控制访问范围 包基本语 package com.hsppedu; 说明: 1. package 关键字,表示打…

Java内存泄漏排查

内存泄漏排查 1. 堆内存快照导出2. 导入内存分析工具 1. 堆内存快照导出 获取 Java 进程 ID Windows&#xff1a;执行 jps 命令&#xff0c;或任务管理器查看&#xff0c;又或者执行 tasklist 命令。 注意&#xff1a;当有多个 Java 进程时&#xff0c;任务管理器或 tasklist |…