这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天
- RPC(Remote Procedure Call,远程过程调用)是一种用于分布式系统中实现远程过程调用的技术。它的基本思想是,让应用程序调用远程计算机上的函数或服务,就像调用本地函数或服务一样。
在分布式系统中,不同的计算机或进程可能运行在不同的机器上,它们之间的通信必须经过网络。RPC 技术可以使得远程计算机上的服务和本地应用程序之间的通信过程对应于函数调用过程,对程序员来说更加方便和自然。RPC 框架可以自动完成序列化、反序列化、网络传输、调用远程服务等过程,大大降低了分布式系统中远程过程调用的开发难度和复杂度。
通常,RPC 框架提供了一套完整的实现,包括通信协议、序列化协议、网络传输、服务注册与发现、负载均衡等功能。目前,广泛使用的 RPC 框架包括 Google 的 gRPC、Apache 的 Dubbo、Facebook 的 Thrift、阿里的 HSF 等。
RPC 技术在分布式系统中被广泛应用,例如在微服务架构、分布式计算、分布式存储等领域都有广泛的应用。
RPC的基本流程
RPC(Remote Procedure Call,远程过程调用)的基本流程如下:
- 客户端调用本地代理函数:客户端应用程序调用本地代理函数(Proxy),并传递参数。
- 代理函数序列化参数:本地代理函数将参数序列化为二进制格式,然后通过网络发送给远程服务。
- 网络传输参数:序列化后的参数通过网络传输到远程计算机上。
- 远程服务接收参数:远程计算机上的 RPC 框架接收到请求,并将参数反序列化为原始数据类型。
- 远程服务调用本地函数:RPC 框架将反序列化后的参数传递给本地服务函数,让其执行相应的逻辑操作。
- 本地服务函数返回结果:本地服务函数将处理结果返回给 RPC 框架。
- 远程服务序列化结果:RPC 框架将本地服务函数的结果序列化为二进制格式,通过网络返回给客户端。
- 网络传输结果:序列化后的结果通过网络传输到客户端。
- 代理函数接收结果:客户端的本地代理函数接收到结果,并将其反序列化为原始数据类型。
- 客户端接收结果:客户端应用程序接收到最终结果,完成远程过程调用。
以上流程描述的是一个简单的 RPC 调用过程,实际上,RPC 框架还需要处理超时、错误、服务注册和发现等复杂情况,保证 RPC 调用的可靠性和可扩展性。
RPC的关键指标
在 RPC(Remote Procedure Call,远程过程调用)系统中,有一些关键指标用来衡量系统的性能和可用性。以下是一些常见的关键指标:
- 延迟(Latency):从客户端发起请求到服务端响应完成的时间。延迟通常是客户端和用户感受到的最重要的指标之一。
- 吞吐量(Throughput):单位时间内可以处理的请求数量。吞吐量通常是系统扩展性和容量规划的重要指标之一。
- 错误率(Error Rate):系统处理请求时出现错误的比例。错误率通常是系统可靠性和稳定性的重要指标之一。
- 并发度(Concurrency):同时处理的请求数量。并发度通常是系统性能和资源利用率的重要指标之一。
- CPU 使用率(CPU Usage):系统处理请求时 CPU 的利用率。CPU 使用率通常是系统资源消耗的重要指标之一。
- 内存使用率(Memory Usage):系统处理请求时内存的利用率。内存使用率通常是系统资源消耗的重要指标之一。
- 网络带宽(Network Bandwidth):系统处理请求时网络带宽的利用率。网络带宽通常是系统扩展性和容量规划的重要指标之一。
它们可以根据具体的业务场景和系统架构进行调整和扩展。同时,这些指标也可以用来制定 SLA(Service Level Agreement,服务水平协议),并为系统运维和性能优化提供重要的参考