【开源服务框架】Dubbo

news2024/9/22 22:51:52

🎄欢迎来到@边境矢梦°的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.coloradmin.cn/o/2156049.html

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

相关文章

C++标准库容器类——string类

引言 在c中,string类的引用极大地简化了字符串的操作和管理,相比 C 风格字符串(char*或cahr[]),std::string 提供了更高效和更安全的字符串操作。接下来让我们一起来深入学习string类吧! 1.string 的构造…

sqli-lab靶场学习(三)——Less8-10(盲注、时间盲注)

Less8 第八关依然是先看一般状态 http://localhost/sqli-labs/Less-8/?id1 然后用单引号闭合: http://localhost/sqli-labs/Less-8/?id1 这关的问题在于报错是不显示,那没办法通过上篇文章的updatexml大法处理。对于这种情况,需要用“盲…

【C++笔记】C++编译器拷贝优化和内存管理

【C笔记】C编译器拷贝优化和内存管理 🔥个人主页:大白的编程日记 🔥专栏:C笔记 文章目录 【C笔记】C编译器拷贝优化和内存管理前言一.对象拷贝时的编译器优化二.C/C内存管理2.1练习2.2 C内存管理方式2.3 operator new与operator…

线程池动态设置线程大小踩坑

在配置线程池核心线程数大小和最大线程数大小后,如果调用线程池setCorePoolSize方法来调整线程池中核心线程的大小,需要特别注意,可能踩坑,说不定增加了线程让你的程序性能更差。 ThreadPoolExecutor有提供一个动态变更线程池核心…

.bixi勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复

导言 在当今数字化时代,勒索软件已成为企业和个人面临的重大安全威胁。.bixi勒索病毒作为其中一种新型恶意软件,以其快速加密文件的能力和高效传播机制引发了广泛关注。该病毒不仅能够迅速锁定用户的关键数据,还常常在感染后施加极大的心理压…

【devops】devops-ansible之介绍和基础使用

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8…

微信公众号文章自动化排版实现思路

文章目录 一、前言1.1 个人写作的痛点1.2 自动化排版工具实现的功能 二、我的文章创作与发布流程三、公众号文章自动化排版实现思路3.1 Typora软件展示3.2 96微信公众号排版平台展示3.3 自动化排版实现思路3.3.1 先构建一个空的文章html模版3.3.2 读取md文章,对内容…

大学生请码住!分享10款AI论文工具搞定论文开题到答辩全过程!

在当今学术研究和论文写作领域,AI工具的出现极大地提高了写作效率和质量。对于大学生来说,这些工具不仅能够帮助他们快速生成高质量的论文初稿,还能进行内容优化、查重和排版等操作。以下是10款值得推荐的AI论文工具,其中特别推荐…

STL-set/multiset关联式容器

目录 一、常见接口 1.0 迭代器 1.1 构造函数 1.2 增删查 1.3 查找和统计 二、multiset 2.1 构造 2.2 查找 2.3 删除 2.4 统计 关联式容器是⽤来存储数据的,与序列式容器不同的是,关联式容器逻辑结构通常是⾮线性结构,两个位置有紧密…

社交电商中“信任”基础与“链动 2+1 模式 O2O 商城小程序”的价值探索

摘要:本文深入探讨了在基于社交的商业模式中,“信任”作为重要基础条件的关键作用。详细分析了在产品同质化日益严重的当下,人与人之间口口相传的宣传方式优势。同时,全面引入“链动 21 模式 O2O 商城小程序”,深入阐述…

Java面试篇-AOP专题(什么是AOP、AOP的几个核心概念、AOP的常用场景、使用AOP记录操作日志、Spring中的事务是如何实现的)

文章目录 1. 什么是AOP2. AOP的几个核心概念3. AOP的常用场景4. 使用AOP记录操作日志4.1 准备工作4.1.1 引入Maven依赖4.1.2 UserController.java4.1.3 User.java4.1.4 UserService.java 4.2 具体实现(以根据id查询用户信息为例)4.2.1 定义切面类&#x…

整合多方大佬博客以及视频 一文读懂 servlet

参考文章以及视频 文章: 都2023年了,Servlet还有必要学习吗?一文带你快速了解Servlet_servlet用得多吗-CSDN博客 【计算机网络】HTTP 协议详解_3.简述浏览器请求一个网址的过程中用到的网络协议,以及协议的用途(写关键点即可)-CSDN博客 【…

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

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

Mysql----索引与事务

1.索引 1.1什么是MYSQL的索引 MySQL官方对于索引的定义:索引是帮助Mysql高效获取数据的数据结构 Mysql在存储数据之外,数据库系统中还维护着满足特定查找算法的数据结构,这些数据结构以某种引用(指向)表中的数据&…

萤石云平台接入SVMSPro平台

萤石云平台接入SVMSPro平台 步骤一:进入萤石云官网:https://open.ys7.com/ ,点右上角的登陆,填写自己的用户名密码; 步骤二:登陆进去后,开发者服务—>我的账号—>应用信息,在…

电气自动化入门07:开关电源、三相异步电动机多地与顺序控制电路

视频链接:3.5 电工知识:三相交流异步电动机多地与顺序控制及开关电源选型_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1PJ41117PW?p9&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 1.开关电源功能与选型说明: 2.三相异步电动机…

数据结构与算法之间有何关系?

相信很多人都应该上个《数据结构与算法》这门课吧,而这两个概念也如孪生兄弟一样经常被拿出来一起讨论。那它们究竟是一个什么样子的关系呢? 听到数据结构与算法我第一反应是想到了Pascal 语言之父尼古拉斯沃斯在他的《Algorithms Data Structures Pro…

esp32s3分区表配置及读写

一、分区表介绍 每片 ESP32-S3 的 flash 可以包含多个应用程序,以及多种不同类型的数据(例如校准数据、文件系统数据、参数存储数据等)。因此,在 flash 的 默认偏移地址 0x8000 处烧写一张分区表。 分区表中的每个条目都包括以下…

【d47】【Java】【力扣】997.找到小镇的法官

思路 记录入度和出度 一个人可以连接多个,一个人也可以被多个人连接,就是图的性质 一个人可以信任多人,一个人也可以被多个人信任 统计入度出度, 法官:入度n-1,出度0 其他人:因为被所有其他人信任的 只能…

JS执行机制(同步和异步)

JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事。 异步:在做这件事的同时,你还可以去处理其他事 他们的本质区别:这条流水线上各个流程的执行顺序不同。 同步任务 同步任务都在主线程上执行,形成一个执行栈。 异步…