文章部分描述来自参考资料
????RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。
????RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。现在业界有很多开源的优秀 RPC 框架,例如 Spring Cloud、Dubbo、Thrift 等。
Client像调用本地服务似的调用远程服务;
Client stub接收到调用后,将方法、参数序列化
客户端通过sockets将消息发送到服务端
Server stub 收到消息后进行解码(将消息对象反序列化)
Server stub 根据解码结果调用本地的服务
本地服务执行(对于服务端来说是本地执行)并将结果返回给Server stub
Server stub将返回结果打包成消息(将结果消息对象序列化)
服务端通过sockets将消息发送到客户端
Client stub接收到结果消息,并进行解码(将结果消息反序列化)
客户端得到最终结果。
RPC 调用分以下两种:
同步调用:客户方等待调用执行完成并返回结果。
异步调用:客户方调用后不用等待执行结果返回,但依然可以通过回调通知等方式获取返回结果。若客户方不关心调用返回结果,则变成单向异步调用,单向调用不用返回结果。
异步和同步的区分在于是否等待服务端执行完成并返回结果。
应该如何部署服务框架到客户端
各个服务提供者消费时间差异的问题,使用负载均衡 (A1消费得快 ,A2消费得慢)
多机房问题
client 端的流控处理
网络通信实现的选择(BIO AIO NIO)
支持多种异步服务调用方式(Future , Callback )
原文:https://www.cnblogs.com/Benjious/p/12206635.html