一般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<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", "12345678", "cxo", "guangzhou");
复制代码

server response

复制代码
            return Task.FromResult(new User             {                 Name = name,                 Email = email,                 Password =