RPC(Remote Procedure Calls)是一种远程函数调用的机制,它允许一个程序在不同的计算机上调用另一个计算机上的函数,就像调用本地函数一样。下面是RPC的原理与实现概念:
1,本地函数调用: 在本地函数调用中,函数的执行过程如下:
· 当前状态被保存(压栈)。
· 函数被计算,结果被存储在栈中(少量结果参数可能存储在寄存器中)。
· 返回状态,并传递返回结果值。
2,远程函数调用: 远程函数调用需要解决以下问题:
· 函数映射:通过函数ID确定执行哪个函数。
· 将数据转换成字节流。
· 进行高效稳定的网络传输。
3,RPC概念模型: RPC的概念模型包括以下组件:
· 调用端:用户在本地调用User-stub将数据打包,并将其传递给RPC运行时(RPCRuntime)。
· RPC运行时将数据传送给被调用端的RPC运行时。
· 被调用端:被调用端将数据传递给Server-stub,解压数据并将其传递给服务器。服务器处理数据后,进行相反的过程将数据传递给用户。
4,一次RPC的完整过程: 一次RPC的完整过程包括以下步骤:
· IDL文件:使用IDL文件描述接口,使得不同平台上的对象和用不同语言编写的程序可以相互通信。
· 生成代码:通过编译器工具将IDL文件转换为语言对应的静态库。
· 编解码:将内存中表示的数据转换为字节序列(编码),反之称为解码。这也被称为序列化和反序列化。
· 通信协议:规范了数据在网络中传输的内容和格式,除了必需的请求/响应数据外,通常还包含额外的元数据。
· 网络传输:通常基于成熟的网络库进行TCP/UDP传输。
5,RPC的好处: RPC具有以下好处:
· 单一职责:有利于分工协作和开发运维。开发、部署和运维可以独立进行。
· 可扩展性强:能够扩展和缩放资源,实现资源复用,提高资源利用率。
· 故障隔离:整体服务可靠性更高。
6,RPC框架需要解决的问题: RPC框架需要解决以下问题:
· 服务宕机:如何处理对方服务宕机的情况。
· 网络异常:如何保证消息在调用过程中的可达性。
· 请求突增导致的处理问题:如何应对请求突增导致服务无法及时处理的情况。