RPC(Remote Procedure Call)是一种进程间通信方式,它允许一个程序在不了解另一个程序内部实现细节的情况下,向另一个程序发送请求并接收响应
RPC 的核心思想是将远程调用封装成一个独立的函数调用,这个函数看起来就像在本地调用一样。调用方只需要知道被调用函数的名称、参数和返回类型,而无需知道被调用函数实际上是在哪个程序上执行的,也无需知道该程序的网络地址和通信协议等细节
RPC中涉及到的技术点比较多,我用一张图来罗列下RPC的核心技术点

通信协议
通信协议的选型一般要考虑以下几个方面:
协议的紧凑性、通用性、灵活性、扩展性、是否跨语言等。所以一个成熟的RPC框架在通信协议模块需要给用户足够的自主权,以适应不同场景下的业务需求
连接管理
为了保证性能与可靠性,几乎所有的主流RPC框架在传输层协议的选型上都使用的是基于可靠性、长连接的TCP协议。高效的连接管理是RPC框架必备的功能。微服务中一个服务往往既是提供者、又是消费者,作为服务提供者,需要与很多个消费者保持长链接,作为消费者,需要与多个提供者保持长链接,稳定的连接管理是高性能RPC必备的的基础。
IO模型
业界所有的RPC框架或web框架都是用的更高性能Reactor反应器模型。了解不同IO模型的优缺点以及适用场景,可以更好的理解RPC框架的底层原理
线程模型
线程模型是说我们如何根据需求如何分配网络传输的IO线程与具体负责方法调用的业务线程
负载均衡
微服务场景下服务都是多节点部署,负载均衡的作用就是帮助请求的发起者更高效、智能、安全的选择服务的提供者
调用方式
成熟的RPC框架一般会提供4中调用方式:同步调用、异步调用、回调调用、oneway
动态代理
RPC是进程之间的通信,动态代理技术用来帮助使用者屏蔽RPC底层的通信细节,可以让调用者就像调用本地服务一样调用远程服务。实现方式有以下几种:JDK动态代理、CGLIB动态代理、ASM动态代理、Javassist动态代理、ByteBuddy动态代理
SPI机制
一种服务发现机制,本质是将接口实现类的全限定名配置在文件中,由服务加载器读取配置文件来加载实现类,可以在运行时,动态为接口替换实现类
典型的是JDK的SPI技术,dubbo框架中的SPI
Spring
严格来说,Spring 并不属于RPC的核心范畴,但是为了更好的融入Spring体系,我们需要对Spring提供的扩展技术有一定的了解。比如bean后置处理器、bean工厂后置处理器,bean工厂、工厂bean等
其他技术
流量隔离、系统优雅的上下线、限流、熔断、降级
一款优秀的RPC框架中涉及的技术点范围广,深度深,如果能完整的学习完RPC框架并能够自己手写出一款简易版的RPC框架,那么对于微服务治理、高并发、开源框架、网络编程、并发编程等领域的技术理解会更上一层楼。