第一节:···RPC核心概念


RPC(Remote Procedure Call)是一种进程间通信方式,它允许一个程序在不了解另一个程序内部实现细节的情况下,向另一个程序发送请求并接收响应

RPC 的核心思想是将远程调用封装成一个独立的函数调用,这个函数看起来就像在本地调用一样。调用方只需要知道被调用函数的名称、参数和返回类型,而无需知道被调用函数实际上是在哪个程序上执行的,也无需知道该程序的网络地址和通信协议等细节


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框架,那么对于微服务治理、高并发、开源框架、网络编程、并发编程等领域的技术理解会更上一层楼。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容