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

PRC框架-Dubbo

RPC框架

RPC(Remote Procedure Call,远程过程调用)框架是一种允许客户端通过网络调用服务器端程序的技术。以下是常见的RPC框架及其特点:

1. 基于HTTP/REST的RPC框架

  • 特点:简单易用,与Web开发无缝集成,适合轻量级服务调用。

  • 代表性框架

    • Spring Boot + RESTful API:基于Spring Boot框架,通过注解和控制器实现RESTful风格的RPC调用。适合Java开发,广泛应用于微服务架构。

    • Flask/Django + RESTful API:基于Python的Flask或Django框架,通过定义路由和视图函数实现RPC调用。适合Python开发,适合轻量级和中等规模的服务。

    • Express.js:基于Node.js的Express框架,通过定义路由和中间件实现RPC调用。适合JavaScript开发,适合构建轻量级的后端服务。

2. 基于gRPC的RPC框架

  • 特点

    • 基于HTTP/2协议,支持双向通信和流控制。

    • 使用Protocol Buffers(Protobuf)作为接口定义语言(IDL),性能高,支持多种语言。

    • 提供内建的服务发现、负载均衡和认证机制。

  • 代表性框架

    • gRPC:由Google开发,支持多种语言(如Java、Python、C++、Go、Node.js等)。适用于高性能、高并发的微服务架构。

    • gRPC Web:用于在浏览器中调用gRPC服务,通过代理将HTTP/1.1请求转换为HTTP/2请求。

3. 基于Thrift的RPC框架

  • 特点

    • 由Facebook开发,支持多种语言(如Java、C++、Python、PHP等)。

    • 提供丰富的数据类型和接口定义语言(Thrift IDL)。

    • 支持多种传输协议(如TCP、HTTP、Framed Transport等)。

  • 代表性框架

    • Apache Thrift:适用于大规模分布式系统,性能高,支持多种语言和协议。

4. 基于JSON-RPC的RPC框架

  • 特点

    • 基于JSON格式的RPC协议,简单易用。

    • 适合轻量级服务调用,支持多种语言。

  • 代表性框架

    • JSON-RPC 2.0:标准化的JSON-RPC协议,支持错误处理、批处理等特性。

    • Flask-JSONRPC:基于Python Flask框架的JSON-RPC实现。

    • json-rpc-js:基于Node.js的JSON-RPC实现。

5. 基于XML-RPC的RPC框架

  • 特点

    • 基于XML格式的RPC协议,数据结构丰富。

    • 适合与Web服务集成,支持多种语言。

  • 代表性框架

    • XML-RPC:标准化的XML-RPC协议,广泛应用于早期的Web服务。

    • Flask-XML-RPC:基于Python Flask框架的XML-RPC实现。

6. 基于消息队列的RPC框架

  • 特点

    • 基于消息队列(如RabbitMQK、afka等)实现异步RPC调用。

    • 适合高并发、分布式系统,支持解耦和负载均衡。

  • 代表性框架

    • RabbitMQ:支持AMQP协议,适用于异步RPC调用。

    • Kafka:支持高吞吐量的异步消息传递,适用于分布式系统。

7. 其他RPC框架

  • Dubbo:由阿里巴巴开发的高性能RPC框架,支持多种协议(如Dubbo、HTTP、gRPC等),广泛应用于Java微服务架构。

  • Apache Avro:由Apache开发,支持二进制编码的RPC框架,性能高,适合大数据处理。

  • ZeroMQ:轻量级的消息传递库,支持多种模式(如请求-响应、发布-订阅等),适用于分布式系统。

总结

  • 轻量级服务:推荐使用基于HTTP/REST的框架(如Spring Boot、Flask)或JSON-RPC框架。

  • 高性能、高并发服务:推荐使用gRPC或Thrift框架。

  • 异步RPC调用:推荐使用基于消息队列的框架(如RabbitMQ、Kafka)。

  • Java微服务架构:推荐使用Dubbo框架。

根据具体需求选择合适的RPC框架可以提高开发效率和系统性能。

Dubbo

以下是Dubbo常见面试题及其答案解析,结合最新的搜索结果整理如下:

1. 为什么要用Dubbo?

  • Dubbo是一个高性能的RPC框架,支持服务注册与发现、负载均衡、容错、监控等功能。

  • 适用于大规模分布式系统,能够简化服务之间的调用。

2. Dubbo的整体架构设计有哪些分层?

  • RPC层:定义了远程调用的接口和实现。

  • Cluster层:封装了集群容错逻辑。

  • Proxy层:生成服务代理。

  • Registry层:封装了服务注册与发现。

  • Config层:封装了配置加载。

3. 默认使用的是什么通信框架,还有别的选择吗?

  • 默认使用Netty作为通信框架。

  • 其他选择包括Mina。

4. 服务调用是阻塞的吗?

  • 默认是阻塞的,但可以通过异步调用实现非阻塞。

5. 一般使用什么注册中心?还有别的选择吗?

  • 通常使用Zookeeper作为注册中心。

  • 其他选择包括Redis、Consul。

6. 默认使用什么序列化框架,你知道的还有哪些?

  • 默认使用Hessian序列化。

  • 其他选择包括FastJson、Java自带序列化。

7. 服务提供者能实现失效踢出是什么原理?

  • 基于Zookeeper的临时节点原理,当服务提供者下线时,注册中心会自动移除其节点。

8. 如何解决服务调用链过长的问题?

  • 可以结合Zipkin实现分布式服务追踪。

9. Dubbo推荐用什么协议?

  • 推荐使用Dubbo协议。

10. 同一个服务多个注册的情况下可以直连某一个服务吗?

  • 可以通过修改配置实现点对点直连。

11. 画一画服务注册与发现的流程图?

  • 服务提供者启动后,向注册中心注册服务;服务消费者启动后,从注册中心订阅服务。

12. Dubbo集群容错有几种方案?

  • 包括Failover、Failfast、Failsafe、Failback、Forking。

13. Dubbo服务降级,失败重试怎么做?

  • 通过dubbo:reference中的mock属性设置降级逻辑。

14. Dubbo使用过程中都遇到了些什么问题?

  • 常见问题包括网络延迟、超时、服务注册失败、序列化失败等。

15. Dubbo Monitor实现原理?

  • Dubbo Monitor通过收集服务调用的性能数据,提供监控功能。

16. Dubbo用到哪些设计模式?

  • 包括工厂模式、代理模式、单例模式、策略模式。

17. Dubbo配置文件是如何加载到Spring中的?

  • 通过Spring的BeanFactory加载配置文件。

18. Dubbo SPI和Java SPI区别?

  • Dubbo SPI是Java SPI的扩展,提供了更灵活的扩展机制。

19. Dubbo支持分布式事务吗?

  • Dubbo本身不直接支持分布式事务,但可以通过集成其他框架(如Seata)实现。

20. Dubbo可以对结果进行缓存吗?

  • 可以通过配置实现结果缓存。

21. 服务上线怎么兼容旧版本?

  • 可以通过多版本部署实现。

22. Dubbo必须依赖的包有哪些?

  • 包括dubbozookeepernetty等。

23. Dubbo telnet命令能做什么?

  • 可以用于远程管理Dubbo服务,如查看服务状态、调用服务。

24. Dubbo支持服务降级吗?

  • 支持,通过配置mock属性实现。

25. Dubbo如何优雅停机?

  • 可以通过配置优雅停机参数实现。

26. Dubbo和Dubbox之间的区别?

  • Dubbox是Dubbo的一个分支,增加了对REST协议的支持。

27. Dubbo和Spring Cloud的区别?

  • Dubbo侧重于RPC通信,Spring Cloud侧重于微服务架构。

这些面试题和答案涵盖了Dubbo的核心概念、架构设计、使用场景以及常见问题,是面试中常见的考点。

相关文章:

PRC框架-Dubbo

RPC框架 RPC(Remote Procedure Call,远程过程调用)框架是一种允许客户端通过网络调用服务器端程序的技术。以下是常见的RPC框架及其特点: 1. 基于HTTP/REST的RPC框架 特点:简单易用,与Web开发无缝集成&am…...

智能检测摄像头模块在客流统计中的应用

工作原理 基于视频分析技术:智能检测摄像头模块通过捕捉监控区域内的视频画面,运用图像识别算法对视频中的人体进行检测、跟踪和分析。可以识别出人体的轮廓、姿态等特征,进而区分不同的个体,实现对客流的统计。 基于红外感应技…...

[LLM面试题] 指示微调(Prompt-tuning)与 Prefix-tuning区别

一、提示调整(Prompt Tuning) Prompt Tuning是一种通过改变输入提示语(input prompt)以获得更优模型效果的技术。举个例子,如果我们想将一条英语句子翻译成德语,可以采用多种不同的方式向模型提问,如下图所示&#xf…...

【CubeMX+STM32】SD卡 U盘文件系统 USB+FATFS

本篇,将使用CubeMXKeil, 创建一个 USBTF卡存储FatFS 的虚拟U盘读写工程。 目录 一、简述 二、CubeMX 配置 SDIO DMA FatFs USB 三、Keil 编辑代码 四、实验效果 串口助手,实现效果: U盘,识别效果: 一、简述 上…...

在JVM的栈(虚拟机栈)中,除了栈帧(Stack Frame)还有什么?

在JVM的栈(虚拟机栈)中,除了栈帧(Stack Frame),还有其他一些与方法调用相关的重要信息。栈的主要作用是存储方法调用的执行过程中的上下文信息,栈帧是其中最关键的组成部分。 栈的组成 栈帧&am…...

# 解析Excel文件:处理Excel xlsx file not supported错误 [特殊字符]

解析Excel文件:处理Excel xlsx file not supported错误 🧩 嘿,数据分析的小伙伴们!👋 我知道在处理Excel文件的时候,很多人可能会遇到这样一个错误:Excel xlsx file not supported。别担心&…...

图片下载不下来?即便点了另存为也无法下载?两种方法教你百分之百下载下来

前言,我要讲的是网站没有禁鼠标右键,可以右键,也可以打开控制台,图片也不用付费这种。 一、用鼠标按住图片直接往桌面拖动,也可以打开开发者工具,在里面往外拖。 二、这个方法很有意思,在电脑的…...

Unity项目实战-Player玩家控制脚本实现

玩家控制脚本设计思路 1. 代码演变过程 1.1 初始阶段:单一Player类实现 最初的设计可能是一个包含所有功能的Player类: public class Player : MonoBehaviour {private CharacterController controller;private Animator animator;[SerializeField] …...

CP AUTOSAR标准之ICUDriver(AUTOSAR_SWS_ICUDriver)(更新中……)

1 简介和功能概述 该规范指定了AUTOSAR基础软件模块ICU驱动程序的功能、API和配置。   ICU驱动程序是一个使用输入捕获单元(ICU)来解调PWM信号、计数脉冲、测量频率和占空比、生成简单中断和唤醒中断的模块。   ICU驱动程序提供服务 信号边缘通知控制唤醒中断周期信号时间测…...

Python3 ImportError: cannot import name ‘XXX‘ from ‘XXX‘

个人博客地址&#xff1a;Python3 ImportError: cannot import name XXX from XXX | 一张假钞的真实世界 例如如下错误&#xff1a; $ python3 git.py Traceback (most recent call last):File "git.py", line 1, in <module>from git import RepoFile &quo…...

[学习笔记] Kotlin Compose-Multiplatform

Compose-Multiplatform 原文&#xff1a;https://github.com/zimoyin/StudyNotes-master/blob/master/compose-multiplatform/compose.md Compose Multiplatform 是 JetBrains 为桌面平台&#xff08;macOS&#xff0c;Linux&#xff0c;Windows&#xff09;和Web编写Kotlin UI…...

【R语言】t检验

t检验&#xff08;t-test&#xff09;是用于比较两个样本均值是否存在显著差异的一种统计方法。 t.test()函数的调用格式&#xff1a; t.test(x, yNULL, alternativec("two.sided", "less", "greater"), mu0, pairedFALSE, var.equalFALSE, co…...

flutter ListView Item复用源码解析

Flutter 的 ListView 的 Item 复用机制是其高性能列表渲染的核心&#xff0c;底层实现依赖于 Flutter 的渲染管线、Element 树和 Widget 树的协调机制。以下是 ListView 复用机制的源码级解析&#xff0c;结合关键类和核心逻辑进行分析。 1. ListView 的底层结构 ListView 的复…...

Spring Boot 配置 Mybatis 读写分离

JPA 的读写分离配置不能应用在 Mybatis 上, 所以 Mybatis 要单独处理 为了不影响原有代码, 使用了增加拦截器的方式, 在拦截器里根据 SQL 的 CRUD 来路由到不同的数据源 需要单独增加Mybatis的配置 Beanpublic SqlSessionFactory sqlSessionFactory(DataSource dataSource) t…...

网络初识-

网络的相关概念 一、局域网和广域网 将各种计算机、外部设备等相互连接起来&#xff0c;实现在这个范围内数据通信和资源共享的计算机网络。它的覆盖范围通常在几百米到几公里之内。例如&#xff0c;一个小型企业的办公室&#xff0c;通过交换机将多台电脑连接在一起&#xf…...

DNS污染:网络世界的“隐形劫持”与防御

在互联网的底层架构中&#xff0c;DNS&#xff08;域名系统&#xff09;如同数字世界的“导航员”&#xff0c;将用户输入的域名翻译成机器可读的IP地址。然而&#xff0c;DNS污染&#xff08;DNS Poisoning&#xff09;正像一场无声的“地址篡改”危机&#xff0c;威胁着全球网…...

MQTT(Message Queuing Telemetry Transport)协议(三)

主题是什么 2. TCP 协议封装 tcp.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h>// 建立 TCP 连接 int tcp_connect(const char *server_ip, int s…...

多核cpu与时间片多线程的问题

在多核处理器中&#xff0c;每个核心可以独立运行一个线程。操作系统负责管理和调度这些线程&#xff0c;以确保高效利用处理器资源。下面详细解释如何获取时间片以及四个线程如何在四个核心上同时工作。 ### 时间片和调度 #### 1. 时间片&#xff08;Time Slice&#xff09;…...

电脑出现蓝屏英文怎么办?查看修复过程

电脑出现蓝屏英文是一种常见的电脑故障&#xff0c;它通常表示电脑遇到了严重的错误&#xff0c;需要停止运行以防止进一步的损坏。电脑蓝屏英文的原因可能有很多&#xff0c;比如硬件故障、驱动程序错误、系统文件损坏、病毒感染等。那么&#xff0c;当电脑出现蓝屏英文时&…...

安卓基础(第一集)

SharedPreferences&#xff08;本地存储简单数据&#xff09; 在 Android 中&#xff0c;SharedPreferences 用于存储小型数据。 &#xff08;1&#xff09;存储数据 // 获取 SharedPreferences 对象 SharedPreferences sharedPreferences getSharedPreferences("MyPre…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...