RPC框架基础简介
RPC(Remote Procedure Call,远程过程调用)是一种计算机通信协议,它允许程序在不同的地址空间(通常在不同的机器上)调用远程的子程序(或称为过程、函数),就像调用本地的函数一样。RPC框架是为了简化和抽象远程调用过程,提供一套工具和机制,使得远程调用更加方便和可靠。
分层设计
RPC框架的编解码层、协议层和网络通信层是实现远程调用的关键组成部分。它们一起协同工作,负责将方法调用、参数和结果在不同机器间进行传输和通信。
编解码层
- 编码:编码层负责将应用层的方法调用、参数和结果转化为协议层指定的格式,通常是序列化为字节流。不同的RPC框架可能支持不同的序列化格式,如JSON、Protocol Buffers、XML等。
- 解码:在接收端,编解码层将字节流解码为应用层可用的数据结构,以便进行方法调用和参数传递。这样,远程调用就可以在网络上传输复杂的数据类型和对象。
协议层
- 协议定义:协议层定义了远程调用的通信协议,包括请求和响应的结构、错误处理、身份验证和安全性要求等。它规定了如何封装方法调用、参数和结果,以及如何进行通信的各个方面。
- 数据格式:协议层定义了数据的格式,使得不同的系统可以理解并解析请求和响应。例如,协议层可以指定请求包含方法名、参数列表等信息,以及响应包含结果或错误信息。
网络通信层
- 连接管理:网络通信层负责建立、维护和关闭网络连接。在大多数情况下,RPC框架会使用底层的网络协议,如TCP或HTTP/2,来实现稳定的数据传输。
- 数据传输:网络通信层将编码后的数据通过网络传输到远程服务端。它处理数据的分割、传输和接收,确保数据完整性和正确性。
- 异常处理:网络通信层处理网络异常,如连接断开、超时等情况。它可以触发错误处理机制,确保远程调用的可靠性。
关键指标
稳定性
- 熔断保护调用方,防止被调用的服务出现问题而影响到整个链路
- 限流保护被调用方,防止大流量把服务压垮,让服务器直接降级处理或者返回给调用方一个限流异常
- 超时控制下游服务主动停掉一些不太重要的业务,释放出服务器资源,避免浪费资源在不可用节点上
易用性
- 开箱即用合理的默认参数选项、丰富的文档
- 周边工具生成代码工具、脚手架工具
扩展性
拥有Middleware、Option、编解码层、协议层、网络传输层、代码生成工具插件这样的扩展。
观测性
Log、Metirc、Tracing、内置观测性服务如当前的环境变量、配置、Client/Server初始化参数、缓存信息等。
高性能
高性能意味着高吞吐和低延迟,两者都很重要,甚至大部分场景下低延迟更重要。多路复用可以大大减少连接带来的资源消耗,并且提升服务器端的性能。
学习建议
学习RPC框架可以帮助你理解远程调用的概念、实现和应用,从而构建分布式系统。可以阅读文档、示例代码,尝试编写代码并解决问题。