什么是RPC框架

RPC框架允许远程服务调用,涉及角色如提供者、消费者、注册中心和监视器。文章介绍了RPC的基本概念,包括服务提供者和消费者的角色转换,以及演变过程中注册中心和监视器的出现。同时,提到了TCP/IP协议和HTTP协议在通信中的作用,并列举了Dubbo、Spring Cloud等主流框架。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

前言:

1.简介

1.1什么是RPC

1.2 演变过程

1.3 框架


前言:

今天在阅读阿里开发规范2016.12时,发现在命名规范中提到,在POJO类中的任何布尔类型的变量,都不要加is,否则部分框架解析会引起序列化错误

比如说:定义基本数据类型boolean isSuccess;的属性,它的方法也是isSuccess(),RPC框架在反向解析的时候会“以为”对应的属性名称是success,导致属性获取不到,抛出异常

我就有了一个疑问,什么是RPC框架?就去了解了下,在此记录

参考网址:什么是RPC框架 - 知乎

1.简介

1.1什么是RPC

RPC框架,全程Remote Procedure Call

其实就是一种远程的程序调用,远程服务调用,具体的实现有下面四种角色构成

  • registry - 注册中心,当服务提供者启动时会向注册中心注册,然后注册中心会告知所有的消费者有新的服务提供者。
  • provider - 服务的提供者,远程调用过程中的被消费方。
  • consumer - 服务的消费者,远程调用过程中的消费方。
  • monitor - 监视器,它主要负责统计服务的消费和调用情况。

1.2 演变过程

什么是提供方,什么是消费方呢?

比如有A,B两台独立的服务器,A定义了一个方法,B想要调用A定义的方法,A提要求,让B如果想要调用自己,得提供姓名和手机号,B同意了,远程调用了A

在这里A就是服务的提供者,在远程调用过程中的 “被消费方“

       而B就是服务的消费者,在远程调用过程中的 “消费方”

 后续如果服务提供方A ,要搬家了,得换地址

 那么服务消费方B,也得跟着改代码,改成A新的地址

 那B就觉得太麻烦了 能不能把修改A新的地址和调用A这两件事绑定在一起呢,这样就不用都改了

 B就把底层逻辑提取出来进行了封装,每次直接使用即可

后续服务提供方A,又提供了一个新方法,有新的功能,新的返回数据

服务消费方B就觉得,你每多一个方法,我就封装一个调用逻辑,太麻烦了,能不能共用同个调用逻辑呢

B就想办法,做一个代理模式来实现共用调用逻辑,解决这个问题

这就形成了简单的一个框架,当然再往下延伸还有很多

  • 那如果有其他用户调用方法怎么办呢,能不能把这些方法放在一个固定的地方,然后他们谁都可以调用。这就是registry (注册中心) ,当服务提供者启动时会向注册中心注册,然后注册中心会告知所有的消费者有新的服务提供者。
  • 如果调用的时候,突然服务不在了怎么办,能不能监控一下这个服务状态,出现问题的时候提前告知消费者一下,这就是monitor(监视器),它主要负责统计服务的消费和调用情况。

还有一些是这些中心之间的通信协议,最基础的是TCP/IP协议,也是最有效不会过时的协议。像HTTP协议等就是基于TCP/IP升级的一种协议,通过URL传输JSON字符串来实现,比web serivce高效一些

1.3 框架

现在主流的框架有Dubbo、Spring Cloud等,微博内部使用的Motan,腾讯内部使用的Tars。

### 什么是RPC框架 远程过程调用(Remote Procedure Call, RPC)是一种允许程序执行位于不同地址空间中的子程序的过程,而无需程序员显式编码细节[^1]。通过这种方式,RPC使得客户端能够像调用本地函数一样调用服务器端的方法。 ### RPC框架的工作原理 RPC框架的主要目标在于屏蔽远程调用和本地调用之间的差异以及隐藏底层网络通信的复杂性,从而使开发人员可以更加关注于应用程序本身的业务逻辑而不是传输层的技术细节[^4]。具体来说: - **请求发送**:当客户端发起一次远程调用时,它实际上是在调用自己的存根(stub),这个存根负责序列化参数并将它们打包成消息形式。 - **网络传输**:接着,该消息会被传递给网络层并通过某种协议(如HTTP/HTTPS、TCP/IP等)发送至服务端。 - **解码处理**:到达目的地之后,服务端接收到的消息由骨架(skeleton)解析并反序列化回原始数据结构,随后真正执行对应的服务方法。 - **响应返回**:一旦完成操作,结果会再次被封装并通过相同的路径传回到客户端,在那里再经历一轮反序列化的流程最终呈现给用户。 ```java // 客户端代码示例 public interface HelloService { String sayHello(String name); } // 使用代理模式创建远程接口实例 HelloService helloService = RpcFramework.getProxy(HelloService.class); // 调用就像调用了本地方法一样简单直观 String response = helloService.sayHello("World"); System.out.println(response); // 输出:"Hello World" ``` ### 应用场景 RPC广泛应用于构建分布式系统和服务间通讯中,尤其是在采用微服务体系架构的企业级应用里扮演着至关重要的角色。以下是几个典型的应用案例: - 微服务之间高效的数据交换; - 实现跨平台间的无缝协作; - 支持异步任务调度与事件驱动编程模型; - 提供统一的服务治理机制,比如负载均衡、熔断降级等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值