一般 rpc rpc HTTP rpc grpc Orleans xrpc netx rcp
通訊元件都具有高性特性,因為大部分
都是基于二進制和連接配接複用的特點,相對于
(2.0以下的版本)來說有着很大的性能優勢,非常适合服務間通訊互動。本文針對了dotnet core平台上的一些
元件進行性能測試,主要包括
,
和
;其實平台下的
元件有很多,畢竟個人精力有限并沒有一一添加到測試裡面去;如果大家有興趣可以參與進來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
Greeter.Register("henryfan", "[email protected]", "12345678", "cxo", "guangzhou");
return Task.FromResult(new User
{
Name = name,
Email = email,
Password = password,
Title = title,
City = city,
CreateTime = DateTime.Now,
ID= Guid.NewGuid().ToString("N")
});
List
Greeter.List(10);
List<User> items = new List<User>(count);
for(int i=0;i<count;i++)
{
var item = new User {
Name = "henryfan",
City = "guangzhou",
Email = "[email protected]",
Title = "cxo",
Password = "12345678",
ID = Guid.NewGuid().ToString("N"),
CreateTime = DateTime.Now
};
items.Add(item);
}
測試總結
因為測試結果的圖比較多,就在這裡先總結了,有興趣的朋友看完總結後再細看結果(本總結隻針對現有測試的元件)。
-
orleans
嚴格來說
的功能其實已經超出一orleans
的範圍,因為它有叢集和rpc
等應用內建;作為Actor
來說它使用簡單,基礎性能也并不差,如果不考慮多平台互動隻是在.net中使用我個人感覺它是首選。缺點沒有提供多平台支援,如果需要更高密集的通訊調用在性能上還是相對差了些。rpc
-
grpc
作為
和protobuf的結合體有着多平台的通用性,如果你的系統是多環境內建那這個絕對是不二的選擇了;不過官方提供的.net實作性能并不出色可以說有點強差人意,官方建議使用.net core 3.0作為基礎通訊支援,由于這次測試是基于.net core 2.2 是以測試結果比較差。在使用上也要吐槽一下,http2.0
描述時不支援基礎類型的傳回值和參數,所有接口方法參數和傳回都必須定義proto
.message
-
xrpc
高吞吐、易用和支援actor是它的特點,可以輕松應對Gb級以上帶寬的
請求處理,缺點并不提供多語言平台支援……如果應用需要在服務間進行高密集的通訊互動可以考慮。rpc
10Gb網絡測試結果
16并發

32并發
64并發
128并發
256并發
1Gb網絡測試結果
通路Beetlex的Github