RPC简介

RPC简介

一、为什么要有RPC

    随着项目业务越来越复杂,业务量越来越大,单个应用或者一台机器的资源肯定是背负不起的。那现在应该怎么做?将核心业务抽取出来,作为独立的服务,放到其他服务器上或者形成集群。这个时候就会请出RPC,系统演变为分布式的架构。
在这里插入图片描述

二、什么是RPC

    RPC,Remote Procedure Call,远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络的技术。

三、一次完整的RPC同步调用流程

    (1)服务消费方(client)以本地调用的方式调用客户端存根
        客户端存根就是远程方法在本地的模拟对象,一样也有方法名,方法参数。client stub接收到调用后负责将方法名、方法参数等包装,并将包装后的消息通过网络发送到服务端。
    (2)服务端收到消息后,交给代理存根在服务器的部分后进行解码为实际的方法名和参数。
    (3)server stub根据解码结果调用服务器上本地的实际服务。
    (4)本地服务执行并将结果返回给server stub。
    (5)server stub将返回结果打包成消息并发送至消费方。
    (6)client stub接收到消息,并进行解码。
    (7)服务消费方得到最终结果。
    RPC框架的目标是要将中间步骤都封装起来,让我们进行远程方法调用的时候感觉到就像在本地调用一样。
在这里插入图片描述

四、RPC和HTTP

    rpc字面意思就是远程过程调用,只是对不同应用间相互调用的一种描述,一种思想。
    实现方式可以是最直接的tcp通信,也可以是http方式,甚至可以是消息中间件。例如:dubbo是基于tcp的,gRPC是基于http2.0的。
    所以,RPC和HTTP完全是两个不同层级的东西,他们之间并不具有可比性。

五、实现RPC框架需要解决的问题

1、代理问题

    代理要解决的是被调用服务本质上是远程的服务,但是调用者不知道也不关心,调用者只要结果,具体的事情由代理的那个对象来负责这件事。在RPC使用代理要添加的额外功能就是通过网络访问远程服务。

2、序列化问题

    序列化问题在计算机里具体是什么?我们的方法调用,有方法名,方法参数,这些可能是字符串,可能是我们自己定义的java类,但是在网络上传输或者保存在硬盘的时候,网络或者硬盘并不认得什么字符串或者javabean,它只认得二进制的01串,怎么办?要进行序列化,网络传输后要进行实际调用,就要把二进制的01串变回我们实际的java类,叫反序列化。java里为我们提供了相关的机制:Serializable。

3、通信问题

    将内容序列化后如何在网络中传输,BIO、NIO等。

4、登记的服务实例化

    登记的服务有可能在我们系统中就是一个名字,怎样变成实际执行的对象实例,反射机制。
    反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能调用它的任意一个方法和属性;这种动态获取信息以及动态调用对象的方法的功能称为java语言的反射机制。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值