32添加组件_dotnet core各rpc组件的性能测试

一般rpc通讯组件都具有高性特性,因为大部分rpc都是基于二进制和连接复用的特点,相对于HTTP(2.0以下的版本)来说有着很大的性能优势,非常适合服务间通讯交互。本文针对了dotnet core平台上的一些rpc组件进行性能测试,主要包括grpc,Orleans,xrpcnetx;其实平台下的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 SayHello(HelloRequest request);
Task Register(string name, string email, string password, string title, string city);
Task> 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", "12345678", "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

server response

            List items = new List(count);for(int i=0;i)
{var item = new User {
Name = "henryfan",
City = "guangzhou",
Email = "henryfan@msn.com",
Title = "cxo",
Password = "12345678",
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并发

56c9a87553d88f18378811d2ad735240.png

32并发

6fc57143c4f83ee2933bc45093f13483.png

64并发

87fe5cb23ad44d59459fefc2e5bf8365.png

128并发

 b7bb4b0ab345487e970f2651779db51f.png

256并发

5e1fc8cff66bc964d04443d293a32f24.png

1Gb网络测试结果

16并发

35207c533683e39ed61946914947d8aa.png

32并发

14df55dba622b6fa015704651ee334f4.png

64并发

f77bc5d1eacdef0a16be6617ac532f6b.png

128并发

b9678a10b327874ba5587a28ba3ce0fc.png

256并发

561b6cbef78094d55e394bbfc4b7afc6.png

原文链接:https://www.cnblogs.com/smark/p/11451326.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 

c5d3e4253bc9402c2403bcd0390827b0.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值