一、RPC的含义是什么
RPC(Remote Procedure Call,远程过程调用)是一种计算机通信协议,允许程序在不同的服务器或进程之间进行高效通信。它的核心思想是让远程调用像本地调用一样简单,开发者无需关心底层网络细节。
- rpc是一层通信协议:允许程序像调用本地函数一样调用远程服务,屏蔽网络细节,开发者无需手动处理网络连接,数据传输等底层逻辑
- 客户端发起请求,服务器处理并返回结果,客户端存根伪装成本地函数自动封装请求,服务器存根接受请求并调用实际服务
- 参数和结果需要转换成二进制格式(如JSON,protobuf)进网络传输运城调用和本地调用一样,是透明的,通常适用二进制协议(如grpc),比REST的文本协议更快。
- 优点:高性能,缺点,灵活性差(接口变更成本高)
- 在微服务架构和实时系统和高并发场景用的比较多
- grpc,Thrift,Dubbo,这些是目前市场上面的主流框架
二、RPC的作用是什么
- 在分布式系统里,各个服务或许部署于不同的服务器。要是采用传统的网络编程方式,像使用 Socket 进行通信,开发人员就得手动处理网络连接、数据传输、序列化和反序列化等繁杂的操作,这会使代码变得复杂,还容易出错。RPC 能把远程调用封装成类似本地调用的形式,让开发人员无需关注底层网络细节,从而提升开发效率。
- 比如说在我做的项目代驾系统里,往往存在多个服务,像用户服务、司机服务、订单服务等,这些服务可能部署在不同的服务器上。借助 RPC 能够实现服务间的高效通信,把远程调用转化为本地调用,提升开发效率与系统性能。
- rpc调用简单示例,创建 OrderServiceClient 实例连接本地 50052 端口,调用 findNearbyDrivers 方法,最后确保关闭客户端。
简单总结
服务可重用,开发一个公共能力,远程调用都能使用
微服务化,跨平台的服务之间远程调用
三、常见的rpc框架有哪些
- gRPC:由 Google 开源的高性能、开源和通用的 RPC 框架,基于 HTTP/2 协议传输,使用 Protocol Buffers 作为序列化工具。 基于 HTTP/2 二进制分帧协议,支持多路复用、头部压缩、二进制编码等特性,提升了传输效率和性能。支持多种主流编程语言,如 Java、Python、Go、C++ 等,方便不同技术栈的团队协作。使用 Protocol Buffers 进行接口定义,具有严格的类型检查,保证了数据的准确性和一致性。 支持客户端和服务器之间的流式数据传输,适用于大数据量或实时数据传输场景。
- Thrift:由 Facebook 开发的可伸缩的跨语言服务开发框架,它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++、Java、Python 等多种语言间无缝结合的、高效的服务。支持多种编程语言,方便不同语言编写的服务之间进行通信。提供了多种数据序列化方式,如 Binary Protocol、Compact Protocol 等,可根据需求选择。通过代码生成工具生成高效的代码,减少了开发工作量和运行时开销。支持自定义传输协议和序列化方式,具有较好的扩展性。适用于需要跨多种语言进行通信的分布式系统,尤其是在不同技术栈的团队协作开发中。
- Dubbo:阿里巴巴开源的高性能、轻量级的 Java RPC 框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案。 供了丰富的服务治理功能,如服务注册与发现、负载均衡、集群容错、服务监控等,方便管理分布式系统中的服务。 采用 NIO 通信模型和高效的序列化协议,保证了服务调用的高性能。 支持多种扩展点,如协议扩展、集群扩展、负载均衡扩展等,方便根据业务需求进行定制。 与 Spring 框架无缝集成,降低了开发门槛。 适用于基于 Java 技术栈的分布式系统,尤其是大型互联网企业的微服务架构。
四、Dubbo的架构设计详解
- Registry(注册中心):负责服务注册与发现,存储服务提供者的元数据(如地址),支持 ZooKeeper 等工具,是服务地址分发的核心。
- Provider(服务提供者):提供服务的应用,通过
Container(容器)
启动,将服务注册到注册中心。 - Container(容器):服务提供者的运行载体,负责启动、加载 Provider。
- Consumer(服务消费者):调用远程服务的应用,从注册中心获取服务地址并发起调用。
- Monitor(监控中心):统计服务调用次数、耗时等数据,用于监控服务性能与状态。
交互流程
Provider 启动(0. start
)后,向 Registry 注册服务(1. register
)。Consumer 启动后,向 Registry 订阅所需服务(2. subscribe
)。Registry 向 Consumer 异步推送可用的 Provider 列表(3. notify
)Consumer 根据注册中心通知的地址,向 Provider 发起同步服务调用(4. invoke
)。 Provider 和 Consumer 在调用过程中,向 Monitor 发送统计数据(5. count
),用于后续监控分析。
,向 Monitor 发送统计数据(5. count
),用于后续监控分析。
总结:该架构通过服务注册发现、动态通知、监控统计等流程,实现了分布式服务的高效治理,是 Dubbo 支持微服务架构的核心设计。