近年来,gRPC 与 Dubbo 作为两大主流 RPC 框架,备受开发者关注。国内究竟哪款框架更受欢迎?不妨从性能测试这一直观角度切入,或许能提供有价值的参考。


gRPC
gRPC 是由谷歌开源的一款高性能、跨语言的远程过程调用(RPC)框架。它借助可插拔的负载均衡、链路追踪、健康检查与身份认证等模块,高效连接数据中心内外的服务。此外,在分布式计算的“最后一公里”场景中,gRPC 还能使设备、移动应用和浏览器顺畅接入后端服务。

下面进行实际测试。首先从 GitHub 克隆 gRPC 示例项目:
git clone https://github.com/grpc/grpc-ja va
然后使用 Maven 运行项目,并循环调用 1,000,000 次:
mvn exec:ja va -Dexec.mainClass=io.grpc.examples.helloworld.HelloWorldServer
mvn exec:ja va -Dexec.mainClass=io.grpc.examples.helloworld.HelloWorldClient
测试结果如下:
spend time: 126 can handle 7936 per second
Dubbo
Dubbo 源自阿里巴巴,是一套基于 Java 实现的分布式服务框架。简而言之,Dubbo 是 RPC 的一种具体实现,专注于高性能与透明化远程调用,同时也是一套 SOA 服务治理方案。

采用相同的测试逻辑,对 Dubbo 进行编码与性能测试:
@Service(version = "1.0.0")
public class HelloServiceImpl implements HelloService {
@Override
public String SayHello(String name) {
return "Hello , " + name;
}
}
@RestController
public class HelloController {
private final Long testScale = 1000000L;
@Reference(version = "1.0.0")
HelloService helloService;
@GetMapping("sayHello")
public String sayHello(String name) {
name = " world";
Long now = Instant.now().getEpochSecond();
for (int idx = 0; idx < testScale; idx++) {
System.out.println(helloService.SayHello(String.format("%s:%d", name, idx)));
}
Long duration = Instant.now().getEpochSecond() - now;
System.out.println(String.format("can handle %d per second", testScale / duration));
return String.format("can handle %d per second", testScale / duration);
}
}
运行结果
实际测试中,Dubbo 的耗时表现如下:
can handle 12987 per second
结论
Dubbo 性能更优,国内也更受青睐
从测试数据来看,Dubbo 性能表现更为出色。此外,作为阿里巴巴出品的国产框架,它更贴合国内开发者的使用习惯与技术生态。
然而,市面上能同时支持两种接口调试的工具屈指可数,Apifox 便是其中一款能同时管理 gRPC 和 Dubbo 接口的得力工具。
创建 gRPC 项目
Apifox 支持基于 .proto 文件的 gRPC 调试,涵盖一元调用与流式调用。只需在创建项目时选择「gRPC 项目」→「导入 .proto 文件」,无需编码即可直接调用 gRPC 接口。

调试前需导入作为 API 定义的 .proto 文件。若多个 .proto 文件存在依赖关系,需手动添加依赖目录。

一元调用
在地址栏填写 URL,点击「调用」按钮即可发起一元调用,操作直观便捷。

流式调用
流式调用支持服务端流、客户端流和双向流三种模式。发起调用后,在 Message 标签下编写消息并发送。Apifox 会以时间线视图集中展示调用状态、发送的消息及接收的消息,点击任意消息即可查看详情。

创建 Dubbo 项目
创建项目时选择「Dubbo 项目」即可。目前 Dubbo 项目功能处于测试阶段,敬请关注。

导入阿里云 EDAS
首先从阿里云控制台获取 EDAS 相关信息,然后在导入接口时填写对应参数。

导入后,即可在 Apifox 可视化页面设计或调试 Dubbo 接口。
发送一个 Dubbo 请求
进入运行页面,填写请求的 body 参数,点击发送即可获取 Dubbo 服务返回的数据。

关于 Apifox
总结而言,Apifox 的核心能力可概括为三点:
- API 文档、调试、Mock 与自动化测试一体化协作平台;
- 更先进的 API 设计、开发和测试工具;
- Apifox = Postman + Swagger + Mock + JMeter。

知识扩展:
- 分布式系统框架对比:gRPC 与 Dubbo
- API 开发:gRPC 还是 GraphQL?
