分布式 RPC 框架比较:dubbo、dubbox、motan、thrift、grpc

本文将比较当前流行的 RPC 框架,包括dubbo、dubbox、motan、thrift 和 grpc,帮助读者选择最适合自己的框架。

用 Apifox,节省研发团队的每一分钟

分布式 RPC 框架比较:dubbo、dubbox、motan、thrift、grpc

免费使用 Apifox

相关推荐

最新文章

API

一体化协作平台

API 设计

API 文档

API 调试

自动化测试

API Mock

API Hub

立即体验 Apifox
目录

RPC

RPC 协议是一种远程过程调用的实现方式。假设现在有两台服务器 A 和 B。部署在 A 服务器上的服务,想调用正在 B 服务器上运行的另一个进程。但由于双方服务并不在一个内存空间而导致无法直接调用,那么就必须通过网络通讯来达到调用效果。

分布式 RPC 框架比较:dubbo、dubbox、motan、thrift、grpc
本地调用与远程过程调用

在面向对象编程范式中,RPC 由远程方法调用(RMI)表示。RPC 模型暗示了一定程度的位置透明性,即调用过程在很大程度上是相同的,无论它们是本地的还是远程的。这对于微服务场景下十分友好,开发人员无需关心网络通讯细节就能够在复杂的内网环境下调用函数或传递参数。

分布式 RPC 框架比较:dubbo、dubbox、motan、thrift、grpc

流行的 RPC 框架

服务治理型:

  • Dubbo:阿里巴巴开源的 Java RPC 框架,广泛用于解决分布式服务治理问题。
  • Spring Cloud: Spring 生态系统的分布式 RPC 解决方案。
  • Motan: 致力于简化分布式系统之间的远程调用的RPC框架。

多语言型:

  • gRPC: 谷歌开源的高性能、通用的 RPC 框架,支持多种语言。
  • Thrift: 由 Facebook 开源的跨语言服务开发框架。
  • JSON-RPC: 使用 JSON 进行轻量级 RPC 的实现方案。
  • XML-RPC: 使用 XML 格式进行 RPC 调用的通信协议。

Dubbo

Apache Dubbo 是一个易于使用、高性能的 WEB 和 RPC 框架,具有内置的服务发现、流量管理、可观察性、安全功能、工具和构建企业级微服务的最佳实践。

Dubbo 是阿里巴巴推出的,多年来一直在成功支持数十亿的服务。

分布式 RPC 框架比较:dubbo、dubbox、motan、thrift、grpc
Dubbo 官网

Dubbo 能做的事情有:

  • Dubbo 在调用远程方法的时候,更加透明化,调用远程方法就跟调用本地的方法一样。
  • 有了 Dubbo,可以不要那些硬件负载均衡器了,因为 Dubbo 本身就有软负载均衡,并具备容错性。
  • 地址可以不用写死了,它能灵活查询服务提供者的 IP,并平滑地完成添加或者删除服务提供者。

Dubbo的架构包含了:

  • Provider:服务提供方的地方
  • Consumer:服务消费方
  • Registry:服务的注册的地方
  • Monitor:统计服务调用的地方
  • Container:服务的运行容器
分布式 RPC 框架比较:dubbo、dubbox、motan、thrift、grpc

gRPC

gRPC 是一个开源的 RPC 框架,可以在多种开发环境中运行并连接不同的应用程序和服务。它是由谷歌基于其名为 Stubby 的内部 RPC 基础设施开发的。它使用 HTTP/2、协议缓冲区和各种功能,如身份验证、流式传输和负载平衡。它还可以为 API 接口生成文档。

分布式 RPC 框架比较:dubbo、dubbox、motan、thrift、grpc
gRPC 官网

在 gRPC 中,客户端应用程序可以直接调用不同机器上的服务器应用程序上的方法,就好像它是本地对象一样,这样可以更容易地创建分布式应用程序和服务。与许多 RPC 系统一样,gRPC 基于定义服务的思想,可以通过指定参数和返回类型进行远程调用。

分布式 RPC 框架比较:dubbo、dubbox、motan、thrift、grpc
gRPC 服务

Motan

Motan 是一个 RPC 框架,使用 Java 开发的,用于快速开发高性能分布式服务。Motan 生态系统中的相关项目:Motan go 是 golang 的实现。Motan PHP 是 PHP 客户端可以直接或通过 Motan go 代理与 Motan 服务器交互。

分布式 RPC 框架比较:dubbo、dubbox、motan、thrift、grpc
Motan

Thrift

thrift 允许您在一个简单的定义文件中定义数据类型和服务接口。以该文件为输入,编译器生成代码,用于轻松构建跨编程语言无缝通信的RPC客户端和服务器。您可以直接进入业务,而不是编写大量样板代码来序列化和传输对象以及调用远程方法。

分布式 RPC 框架比较:dubbo、dubbox、motan、thrift、grpc
Thrift

Apifox 支持调试 gRPC

我们需要使用 API 工具来进行 gRPC 接口的请求,今天我选择了 Apifox 来进行请求,因为它支持中文,且免费使用。

Apifox 调试 gRPC 接口是基于 .proto 文件的 gRPC 调试,包括一元调用和流式调用。

创建 gRPC 项目

在创建项目时「选择 gRPC 项目」-->「导入 .proto 文件」,无需写代码即可直接调用 gRPC 接口。

创建 gRPC 项目

在调试 gRPC 接口之前,也需要先导入作为 API 定义的 .proto 文件。如果一个 .proto 文件依赖于其他 .proto 文件,那么需要手动添加依赖关系目录。

添加 Proto

调用 gRPC 接口

一元调用

只需要在地址栏填写 URL 后点击「调用」按钮,即可发起一元调用。

一元调用

流式调用

流式调用包含服务端流、客户端流、双向流

在发起调用之后,你可以在 Message 标签下撰写消息并发送。Apifox 提供了一个时间线视图,按照时间顺序集中展示调用状态、发送的消息、收到的消息。点击消息之后,可以非常方便地查看消息的详情。

流式调用

关于 Apifox

官网:https://www.apifox.cn/

  • 集成了 API 文档、API 调试、API Mock、API 自动化测试 API 一体化协作平台
  • 拥有更先进的 API 设计/开发/测试工具
  • Apifox = Postman + Swagger + Mock + JMeter

欢迎体验一下,完全免费的哦:在线使用 Apifox

Apifox 接口调试工具

知识扩展: