聊聊RPC通信,经常被问到的一道面试题。源码+笔记,包懂

rpc 是远程方法调用,其实质就分布式进程间通信(ip/port),底层是TCP/IP(socket)通信

  1. rpc客户端通过代理静态方法a,获取到接口实现类的代理对象,通过代理对象调用方法获取数据;
  2. rpc客户端通过代理静态方法a,底层将接口类、方法名、参数类型、参数序列化后传输到Server端;
  3. Server端收到数据后,通过(从服务注册表找到具体的类)反射获取到接口的具体实现类,调用实现类对应的方法 将数据传输回Client端 主要技术点:动态代理、序列化、反序列化、反射、获取数据、序列化、反序列化、传输、接收数据

    从单从到分布式 -> 分布式通信 -> 最基本:二进制数据传输TCP/IP(高低电平)

源码下载链接:RPC研究,从浅到深,含研究笔记:超级全面,包懂.zip

源码从浅入深逐个讲解:分了好几个版本

源码效果截图:

聊聊RPC通信,经常被问到的一道面试题。源码+笔记,包懂_第1张图片

源码组成:

  • rpc01 是最原始最原始的RPC方式,不够灵活;但是是最基本的通信方式
  • rpc02 增加一个单独的代理Stub,负责网络通信通过id获取user; 代理Stub屏蔽网络细节
  • rpc03 rpc02这种方式,如果方法增加了或者接口变动了,Stub代理都得跟着变,rpc03解决此问题
  •       在rpc03中,Stub提供接口实现类,至于客户端Client调用哪个接口方法,client自己决定
  •       动态代理,动态生成一个接口IUserService实现类 XXXX,
  • rpc04 在rpc03中,只能正常运行findUserById,如果接口增加saveUser就不能正常运行了
  •       在rpc04中,客户端将方法名、参数列表、参数传到server端,所以即便接口名字变更了,都可以兼容
  •       所以服务器端的解析也是跟着修改,不然就不能适配了
  •       服务器端,获取到方法名、参数类型,能过反射拿到方法
  •       但是,还不够完善,因为接收数据还是最原始的方式,一个个拆解
  • rpc05 返回值用Object封装,支持任意类型
  •       这个版本解决客户端接收数据一个个需要拆解问题
  •       接口可以增中新的接口方法,实体类也可以添加新的属性
  •       但是,此版本只能拿到一个接口的实现类
  • rpc06 解决可以多个接口实现类,屏蔽底层通信细节

大数据技术链接:超全干货--Flink思维导图,花了3周左右编写、校对


文章最后,给大家推荐一些受欢迎的技术博客链接

  1. Hadoop相关技术博客链接
  2. Spark 核心技术链接
  3. JAVA相关的深度技术博客链接
  4. 超全干货--Flink思维导图,花了3周左右编写、校对
  5. 深入JAVA 的JVM核心原理解决线上各种故障【附案例】
  6. 请谈谈你对volatile的理解?--最近小李子与面试官的一场“硬核较量”
  7. 聊聊RPC通信,经常被问到的一道面试题。源码+笔记,包懂

 


欢迎扫描下方的二维码或 搜索 公众号“10点进修”,我们会有更多、且及时的资料推送给您,欢迎多多交流!

                                           聊聊RPC通信,经常被问到的一道面试题。源码+笔记,包懂_第2张图片

       

你可能感兴趣的:(java,java,rpc,分布式)