之前一直想学习RPC框架的相关内容,正好这次青训营的课程中有<<RPC框架分层设计>>这一节,正好根据课程中的框架梳理下RPC的入门基础。
什么是RPC
RPC(Remote Procedure Call)是一种计算机通信协议,它使得程序能够通过网络调用远程主机上的函数或过程,而无需了解底层的通信细节。RPC框架作为一种常见的分布式通信方式,在微服务架构、分布式系统以及大规模的互联网服务中被广泛应用。通过RPC,开发者可以像调用本地方法一样调用远程服务,使得系统的设计更加简洁、直观。
假设你正在开发一个电商平台,其中有多个服务,如用户服务、订单服务、支付服务、库存服务等。这些服务可能运行在不同的服务器上,甚至在不同的数据中心,彼此之间需要进行通信。比如订单服务需要调用用户服务用来验证用户信息、库存服务用来检查库存是否足够,这里就可以用RPC进行实现和通信。
RPC和API的区别
刚开始学习RPC的时候,它的概念总让我想到API,因为这二者都可以进行通信。那么区别到底是什么呢?
调用
RPC: RPC的调用就像本地方法调用一样,开发者只需编写接口调用代码。例如,在上面电商系统的例子中,订单服务需要调用用户服务,此时的调用是一个远程调用,它会自动被框架转换为网络请求,底层不需要开发者干预。示例代码如下:
User user = userService.getUserInfo(userId);
上面代码可以看出,对于用户服务的远程调用看起来像本地方法调用一样。
API:而通过API进行通信和调用时,开发者需要自行构造请求和处理响应。例如,在上面电商系统的例子中,订单服务使用HTTP请求调用远程用户服务。调用示例如下:
String url = "http://user-service/api/user/" + userId;
ResponseEntity<User> response = restTemplate.getForEntity(url, User.class);
User user = response.getBody();
可以看出,在API调用中,开发者需要手动处理HTTP请求(URL、方法、请求参数等),并解析响应数据(通常是JSON)。
性能
RPC: 由于RPC通常使用二进制协议(如Protobuf),它在性能上通常优于基于文本的API,RPC框架还可以针对数据传输、网络延迟等方面进行优化。因此,RPC通常适用于高效、低延迟的通信场景,尤其是在微服务架构中,多个服务间需要频繁调用时。
API: API通常使用JSON或XML等文本格式,这使得API的性能相对较低。与RPC的二进制协议相比,JSON的传输效率要低一些。因此,API适合用于较为轻量的交互,或需要跨平台、跨语言的通信。