RPC框架的理解

RPC框架的理解

RPC框架的含义

RPC(Remote Procedure Call Protocol)远程过程调用协议。RPC是一种进程间的通信方式,而不是一个规范
简单的说,客户端在不知道调用细节的情况下,调用存在于远程计算机上的某个对象,就像调用本地应用程序中的对象一样。RPC是一套协议,并不关注被调用方使用何种语言,以及如何实现的。

RPC框架的流程

在这里插入图片描述
RPC的核心模块是通讯和编解码。
Client:调用端,以本地调用方式调用服务。
client stub:接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体(序列化);client stub找到服务地址,并将消息发送到服务端。
server stub:收到消息后进行解码,反序列化;server stub根据解码结果调用本地的服务;本地服务执行并将结果返回给server stub。server stub将返回结果打包成消息并发送至消费方。
client stub接收到消息,并进行解码,反序列化,服务消费方得到最终结果。
**

如何对消息进行编码和解码

**

  1. 确定消息数据结构

客户端的请求消息结构一般需要包括以下内容:

  • 接口名称:在我们的例子里接口名是“HelloWorldService”,如果不传,服务端就不知道调用哪个接口了;

    方法名:一个接口内可能有很多方法,如果不传方法名服务端也就不知道调用哪个方法;

    参数类型&参数值:参数类型有很多,比如有bool、int、long、double、string、map、list,甚至如struct等,以及相应的参数值;

    超时时间 + requestID(标识唯一请求id)

服务端返回的消息结构一般包括以下内容:

  • 状态code + 返回值
  • requestID
  1. 序列化

一旦确定了消息的数据结构后,下一步就是要考虑序列化与反序列化了。

序列化就是将数据结构或对象转换成二进制串的过程,也就是编码的过程。转换为二进制串后好进行网络传输

反序列化是将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程。将二进制转换为对象才好进行后续处理

RPC框架的好处

RPC是实现服务化 、微服务和分布式系统架构的基础场景的有力方式

  • 解决分布式系统中,服务之间的调用问题。
  • 远程调用时,要能够像本地调用一样方便,让调用者感知不到远程调用的逻辑。

RPC框架的实现

对java来说就是使用代理,java代理有两种方式:1) jdk 动态代理;2)字节码生成。尽管字节码生成方式实现的代理更为强大和高效,但代码维护不易,大部分公司实现RPC框架时还是选择动态代理方式。
常用的RPC框架
Thrift:thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的、高效的服务。

gRPC:一开始由 google 开发,是一款语言中立、平台中立、开源的远程过程调用(RPC)系统。

Dubbo:Dubbo是一个分布式服务框架,以及SOA治理方案。其功能主要包括:高性能NIO通讯及多协议集成,服务动态寻址与路由,软负载均衡与容错,依赖分析与降级等。Dubbo是阿里巴巴内部的SOA服务化治理方案的核心框架,Dubbo自2011年开源后,已被许多非阿里系公司使用。

Spring Cloud:Spring Cloud由众多子项目组成,如Spring Cloud Config、Spring Cloud Netflix、Spring Cloud Consul 等,提供了搭建分布式系统及微服务常用的工具,如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性token、全局锁、选主、分布式会话和集群状态等,满足了构建微服务所需的所有解决方案。Spring Cloud基于Spring Boot, 使得开发部署极其简单。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值