什么是RPC

        有些玩意儿可能是平时一直用,但是不知道叫啥玩意儿,比如天天开发微服务,微服务之间的通信也算是一种RPC。

        项目场景:现有一个数据报表服务部署在内网服务器A上(不对公网暴露且考虑到数据安全禁止对公网暴露),另有一个集成门户服务部署在服务器B上(对公网有映射)。现要求将报表页面整合到集成门户中,实现外网用户通过访问门户页面也能访问报表页面(单点登录等细节不再赘述)。

        这种场景下,如果仅仅使用iframe整合将报表页面URL放到a标签中让浏览器直接访问是访问不通的。相当于外网环境直接访问内网地址,网络不通。但是直接再服务器B做反向代理,其实与直接将A暴露到公网无异。此时就需要两边服务进行内部通信,让服务器去向另一个服务器进行资源请求,实现客户端→服务器B→服务器A→服务器B→客户端这样一个路径。既保证了服务器A不暴露到公网,也能实现外网访问内网的资源。

RPC(Remote Procedure Call,远程过程调用)是一种计算机通信协议,它允许程序在不同的地址空间(通常是不同的计算机)上执行代码,就像调用本地函数一样。RPC的主要目的是简化分布式系统中不同组件之间的通信,使得开发人员可以像调用本地函数一样调用远程服务。

RPC的工作原理

  1. 客户端调用:客户端程序调用一个本地代理(stub),这个代理看起来像是一个普通的函数调用。

  2. 序列化:本地代理将调用参数打包(序列化)成可以在网络上传输的格式。

  3. 传输:打包后的数据通过网络传输到远程服务器。

  4. 服务器端接收:服务器接收到请求后,解包(反序列化)数据,并调用实际的服务器端函数。

  5. 执行:服务器端函数执行相应的操作,并返回结果。

  6. 返回结果:服务器将结果打包(序列化)并通过网络返回给客户端。

  7. 客户端接收:客户端接收到结果后,解包(反序列化)并返回给调用者。

RPC的特点

  1. 透明性:RPC使得远程调用看起来像本地调用,对开发人员透明。

  2. 效率:RPC通常设计为高效,尽量减少网络开销和延迟。

  3. 灵活性:RPC可以支持多种编程语言和平台,使得不同语言编写的系统可以相互通信。

  4. 复杂性:虽然RPC简化了远程调用,但它也引入了一些复杂性,如网络故障处理、序列化/反序列化、安全性等。

RPC的实现

RPC有多种实现方式和框架,常见的包括:

  1. Sun RPC:最早的RPC实现之一,主要用于UNIX系统。

  2. DCE/RPC:由Open Group开发的分布式计算环境(DCE)的一部分。

  3. Java RMI(Remote Method Invocation):Java平台上的RPC实现,允许Java对象在不同的JVM之间进行远程调用。

  4. gRPC:由Google开发的RPC框架,基于HTTP/2和Protocol Buffers,支持多种编程语言。

  5. Thrift:由Apache开发的多语言RPC框架,支持多种编程语言和数据传输协议。

应用场景

RPC广泛应用于分布式系统中,特别是在微服务架构中。它使得不同的服务可以独立开发、部署和扩展,同时保持高效的通信。

微服务之间的通信通常属于RPC(Remote Procedure Call,远程过程调用)的范畴。在微服务架构中,各个服务是独立的、自治的单元,它们通过网络进行通信,以协同完成复杂的业务逻辑。RPC是一种常见的通信方式,用于在不同的微服务之间进行交互。

微服务通信的特点

  1. 分布式:微服务架构中的服务通常部署在不同的服务器或容器中,因此通信需要通过网络进行。

  2. 独立性:每个微服务通常是独立开发、部署和扩展的,因此需要一种机制来确保它们可以相互调用。

  3. 语言无关性:不同的微服务可能使用不同的编程语言和技术栈,因此通信协议需要支持多语言。

  4. 高效性:微服务之间的通信需要高效,以减少延迟和网络开销。

RPC在微服务中的应用

在微服务架构中,RPC通常用于以下场景:

  1. 服务间调用:一个微服务需要调用另一个微服务的方法或函数来完成某个业务逻辑。

  2. 数据交换:微服务之间需要交换数据,RPC可以用于传递请求和响应数据。

  3. 状态同步:某些微服务可能需要同步状态信息,RPC可以用于发送状态更新。

常见的RPC框架和协议

在微服务架构中,常见的RPC框架和协议包括:

  1. gRPC:由Google开发的RPC框架,基于HTTP/2和Protocol Buffers,支持多种编程语言。

  2. Thrift:由Apache开发的多语言RPC框架,支持多种编程语言和数据传输协议。

  3. RESTful API:虽然RESTful API通常被认为是基于HTTP的API,但它也可以看作是一种轻量级的RPC实现,特别是在微服务架构中。

  4. GraphQL:一种用于API的查询语言,虽然不是传统的RPC,但在某些场景下可以用于微服务之间的通信。

示例

假设有一个电商系统,包含以下微服务:

  • 用户服务:管理用户信息。

  • 订单服务:管理订单信息。

  • 支付服务:处理支付操作。

当用户下单时,订单服务需要调用用户服务来验证用户信息,并调用支付服务来处理支付。这些调用通常通过RPC来实现。

总结

RPC是一种强大的工具,用于简化分布式系统中的通信。它使得开发人员可以像调用本地函数一样调用远程服务,从而提高了开发效率和系统灵活性。然而,使用RPC也需要注意网络延迟、故障处理和安全性等问题。

微服务之间的通信属于RPC的范畴,RPC是微服务架构中常见的通信方式。通过使用RPC,微服务可以像调用本地函数一样调用远程服务,从而简化了分布式系统的开发和维护。常见的RPC框架和协议包括gRPC、Thrift和RESTful API等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值