dotnet core各rpc组件的性能测试
一般rpc
通讯组件都具有高性特性,因为大部分rpc
都是基于二进制和连接复用的特点,相对于HTTP
(2.0以下的版本)来说有着很大的性能优势,非常适合服务间通讯交互。本文针对了dotnet core平台上的一些rpc
组件进行性能测试,主要包括grpc
,Orleans
,xrpc
和netx
;其实平台下的rcp
组件有很多,毕竟个人精力有限并没有一一添加到测试里面去;如果大家有兴趣可以参与进来https://github.com/IKende/dotnet-rpc-benchmark添加或优化测试代码并提交相关PR。
测试描述
为了更好的体现实际应用的情况,功能和网络环境都会多样性测试。调用测试是基于远程对象或接口的方式操作,操作方法包括简单和相对复杂的对象;测试的物理网络环境包括10Gb和普通网络1Gb.分别测试16,32,64,128和256等不同的请求并发并获取相关的总请求量和秒并发值。
测试工具
https://github.com/IKende/CodeBenchmarkDoc
测试物理环境
Client
E3-1230v2 16g
Server
E5-2670v2 32g
Network
10Gb和1Gb
System
Windows server
测试接口描述
public interface IGreeter
{
Task<HelloReply> SayHello(HelloRequest request); Task<User> Register(string name, string email, string password, string title, string city); Task<List<User>> List(int count); }
Hello
client request
SayHello(new HelloRequest { Name = "you" });
server response
return new HelloReply { Message = "Hello " + request.Name };
Register
client request
Greeter.Register("henryfan", "henryfan@msn.com", "", "cxo", "guangzhou");
server response
return Task.FromResult(new User
{
Name = name,
Email = email,
Password = password,
Title = title,
City = city,
CreateTime = DateTime.Now,
ID= Guid.NewGuid().ToString("N")
});
List
client request
Greeter.List();
server response
List<User> items = new List<User>(count);
for(int i=;i<count;i++)
{
var item = new User {
Name = "henryfan",
City = "guangzhou",
Email = "henryfan@msn.com",
Title = "cxo",
Password = "",
ID = Guid.NewGuid().ToString("N"),
CreateTime = DateTime.Now
};
items.Add(item);
}
测试总结
因为测试结果的图比较多,就在这里先总结了,有兴趣的朋友看完总结后再细看结果(本总结只针对现有测试的组件)。
orleans
严格来说
orleans
的功能其实已经超出一rpc
的范围,因为它有集群和Actor
等应用集成;作为rpc
来说它使用简单,基础性能也并不差,如果不考虑多平台交互只是在.net中使用我个人感觉它是首选。缺点没有提供多平台支持,如果需要更高密集的通讯调用在性能上还是相对差了些。grpc
作为
http2.0
和protobuf的结合体有着多平台的通用性,如果你的系统是多环境集成那这个绝对是不二的选择了;不过官方提供的.net实现性能并不出色可以说有点强差人意,官方建议使用.net core 3.0作为基础通讯支持,由于这次测试是基于.net core 2.2 因此测试结果比较差。在使用上也要吐槽一下,proto
描述时不支持基础类型的返回值和参数,所有接口方法参数和返回都必须定义message
.xrpc
高吞吐、易用和支持actor是它的特点,可以轻松应对Gb级以上带宽的
rpc
请求处理,缺点并不提供多语言平台支持……如果应用需要在服务间进行高密集的通讯交互可以考虑。
10Gb网络测试结果
16并发
32并发
64并发
128并发
256并发
1Gb网络测试结果
16并发
32并发
64并发
128并发
256并发
最新文章
- Facebook的Web开发三板斧:React.js、Relay和GraphQL
- MongoDB入门
- Linux之Ganglia源码安装
- .net控件dropdownlist动态绑定数据 ----转
- c++extern关键字详解
- 必须学会git和maven
- Ganglia监控扩展实现机制
- single-cell RNA-seq 工具大全
- Rails项目防止时序攻击
- Spark ML机器学习
- sed 多行处理详细总结
- cStringIO 实现指定大小的字符串缓存
- NOIP模拟赛-2018.10.22
- Effective Java - Item 1: Consider static factory methods instead of constructors
- 树莓派进阶之路 (032) -字符问题(2) - 用c语言怎样得到一个汉字的GB2312编码(转)
- 开源的挖矿软件,sha256
- FJNUOJ the greed of Yehan(最长路 + 权值乘积转化)题解
- [PY3]——pwd | grp 模块
- M(必备),R(需求),C(条件),O(可选)
- MySQL innodb表使用表空间物理文件复制或迁移表