RPC和RMI

本文介绍了RPC(远程过程调用)的概念,解释了RPC如何透明化远程服务调用,以及RPC调用流程,提到了动态代理的角色。接着详细讨论了Java RMI,包括其优点和缺点,以及通信模型。文中还提供了简单的RMI调用示例。
摘要由CSDN通过智能技术生成

1、RPC(远程过程调用)简介

        RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。那么问题来了——RPC到底是什么?

        在校期间,大家多多少少也都写过一些程序,比如写个hello world服务类,然后本地调用下,如下所示。这些程序的特点是服务消费方和服务提供方是本地调用关系。

       而在大型互联网公司,公司的系统都由成千上万大大小小的服务组成,各个服务部署在不同的机器上,由不同的团队负责。

这时就会遇到两个问题:

  1. 要搭建一个新服务,免不了需要依赖他人的服务,而现在他人的服务都在远端(而不是在本地),怎么调用?
  2. 其它团队要使用我们的服务,我们的服务该怎么发布以便他人调用?

       RPC可以解决上面两个问题。简单来说,RPC就是说,假设有两台服务器A和B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。

如何调用他人的远程服务?

      由于各服务部署在不同机器,服务间的调用免不了网络通信过程,服务消费方每调用一个服务都要写一大堆网络通信相关的代码,不仅复杂而且极易出错。

      如果有一种方式能让我们像调用本地服务一样调用远程服务,而让调用者对网络通信这些细节透明,那么将大大提高生产力,比如服务消费方在执行helloWorldService.sayHello(“test”)时,实质上调用的是远端的服务

      RPC的例子有:阿里巴巴的hsf、dubbo(开源)、Facebook的thrift(开源)、Google grpc(开源)、Twitter的finagle等。

首先我们先看下一个RPC调用的流程:

  • 1)服务消费方(client)调用以本地调用方式调用服务;
  • 2)client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体(编码);
  • 3)client stub找到服务地址,并将消息发送到服务端;
  • 4)server stub收到消息后进行解码;
  • 5)server stub根据解码结果调用本地的服务;
  • 6)本地服务执行并将结果返回给server stub;
  • 7)server stub将返回结果打包成消息(编码)并发送至消费方;
  • 8)client stub接收到消息,并进行解码;
  • 9)服务消费方得到最终结果。

RPC的目标就是要2~8这些步骤都封装起来,让用户对这些细节透明。

Q:怎么做到透明化远程服务调用?

答:使用代理!

Q&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值