RPC核心原理(整体架构/调用过程)

RPC调用涉及服务提供方(Server)将服务注册到Registry,客户端(Client)通过Registry获取服务地址,然后通过网络通信调用远程服务。关键步骤包括网络模块的使用,序列化和反序列化对象,以及客户端的存根代理对象实现远程方法调用。服务端通过反射调用具体实现并返回结果。
摘要由CSDN通过智能技术生成

在这里插入图片描述
Server: Provider ,暴露服务,服务提供方
Client: Consumer ,服务消费,调用远程服务
Registry:服务注册与发现

RPC的调用过程如下:

第一步:server会将他需要暴露的服务以及他的地址信息注册到Registry这一注册中心。

第二步:client通过注册中心一只关注它所需要的服务在哪里,如果此时server的地址发生改变,server会再次注册入Registry,然后Resgistry会通知给RPC client。

现在client已经有了server的地址以及它暴露服务的信息,就可以做最后一步调用了(即3 call 步)。

其实在这里,注册中心并不是必要的组件,client可以把服务端的信息直接写死进client,然后直接去调用rpc server,实则可以发现3 call这一步才是rpc调用最关键的一步!!

调用(call)

在这里插入图片描述

1.首先是client要去调用client stub(存根)这个接口里面的方法,这时候这个接口的实现在远程,所以需要sockets网络传输,才能达到调用(即通过sockets建立连接,传输数据),在通过sockets进行传输之前,需要第2步的序列化(把传输的对象转成可传输的二进制数据)。

2.假设此时server的sockets拿到了数据,需要第4步的反序列化(将拿到的二进制数据反序列化为对象),在这个对象中包含了这个客户端要调用的服务端的信息(像它调用的是那个接口,也即它调用的是哪个存根,接口里面的什么方法方法里面参数的类型,以及返回值的类型等),之后server去找到这个接口的具体实现类的对象。通常这个对象为了性能考虑,一般会做成单例模式

3.这个server stub找到这个对象之后会通过反射来调用这个方法,方法调用完成后可以拿到计算的结果,拿到结果后又通过第7步的序列化成二进制,然后通过网络传输8响应给client,client拿到这个数据之后也会通过9将其序列化为对象,然后得到结果–第10步。那么本次调用结束

调用关键点:

  • 一定要的网络模块(用于网络传输
  • 序列化模块(对象与二进制数据之间的互转
  • client 端怎么就通过调用一个接口就调用到远程方法呢?其实他内部有一个存根代理对象,而这个网络的交互,序列化操作都是由这个代理对象来完成的)
  • server端肯定需要一个对服务进行管理的组件,里面完成了服务的查找,服务的反射调用等
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值