关于 RPC远程过程调用协议的理解

 运用这个技术的应用场景:在公司里的系统都有成千上万的服务,各个服务都部署在不同的服务器上。如果想调用这个服务的话我们就要像之前老师那样写一个webserveice去访问这个服务才能调用服务里面的方法。这是一个很繁琐的过程,那么我们有没有想过如果我们能直接像平常写方法去调用远程服务上面的方法该有多好。
下面给你们介绍一种新的调用的远端的服务的方式:RPC,市面上很多大互联网公司中被广泛使用像阿里巴巴的dubbo,fecebook的thrift。
 
他的底层的其中一种实现是利用jdk的动态代理,在客户端的动态代理类里面的invoke方法实现了远程的服务连接;(即序列化)里面封装了接口名称,方法名,还要传参数类型和参数值,超时时间,返回值,状态,和请求的ID。
 
 
通信采用的IO模型是NIO
为什么要采用requsetID?用于身份验证
 
 
自己发布服务的时候遇到到的ip写死问题,不能通过人肉去修改Ip,以为很麻烦,所以我们通常会使用zookeeper,这个东西是一个分布式文件系统,我们可以把服务的地址部署到上面,它会帮你分辨出那个,超时参数,服务的主机宕机了,自动切换能用的服务地址,就不用手动去修改了
 
 
  • 1)服务消费方(client)调用以本地调用方式调用服务;
  • 2)客户根存(前哨)接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体;
  • 3)client stub找到服务地址,并将消息发送到服务端;
  • 4)server stub收到消息后进行解码;
  • 5)server stub根据解码结果调用本地的服务;
  • 6)本地服务执行并将结果返回给server stub;
  • 7)server stub将返回结果打包成消息并发送至消费方;
  • 8)client stub接收到消息,并进行解码;
  • 9)服务消费方得到最终结果。
原文地址:https://www.cnblogs.com/wwhai/p/9243817.html