一般rpc通訊組件都具有高性特性,因?yàn)榇蟛糠謗pc都是基于二進(jìn)制和連接復(fù)用的特點(diǎn),相對(duì)于HTTP
(2.0以下的版本)來說有著很大的性能優(yōu)勢(shì),非常適合服務(wù)間通訊交互。本文針對(duì)了dotnet core平臺(tái)上的一些rpc組件進(jìn)行性能測(cè)試,主要包括grpc,
Orleans,xrpc和netx;其實(shí)平臺(tái)下的rcp組件有很多,畢竟個(gè)人精力有限并沒有一一添加到測(cè)試?yán)锩嫒?;如果大家有興趣可以參與進(jìn)來
https://github.com/IKende/dotnet-rpc-benchmark
<https://github.com/IKende/dotnet-rpc-benchmark>添加或優(yōu)化測(cè)試代碼并提交相關(guān)PR。
測(cè)試描述
為了更好的體現(xiàn)實(shí)際應(yīng)用的情況,功能和網(wǎng)絡(luò)環(huán)境都會(huì)多樣性測(cè)試。調(diào)用測(cè)試是基于遠(yuǎn)程對(duì)象或接口的方式操作,操作方法包括簡(jiǎn)單和相對(duì)復(fù)雜的對(duì)象;測(cè)試的物理網(wǎng)絡(luò)環(huán)境包括10Gb和普通網(wǎng)絡(luò)1Gb.分別測(cè)試16,32,64,128和256等不同的請(qǐng)求并發(fā)并獲取相關(guān)的總請(qǐng)求量和秒并發(fā)值。
測(cè)試工具
https://github.com/IKende/CodeBenchmarkDoc
<https://github.com/IKende/CodeBenchmarkDoc>
測(cè)試物理環(huán)境
*
Client
E3-1230v2 16g
*
Server
E5-2670v2 32g
*
Network
10Gb和1Gb
*
System
Windows server
測(cè)試接口描述
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", "[email protected]", "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
Greeter.List(10);
server response
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); }
測(cè)試總結(jié)
因?yàn)闇y(cè)試結(jié)果的圖比較多,就在這里先總結(jié)了,有興趣的朋友看完總結(jié)后再細(xì)看結(jié)果(本總結(jié)只針對(duì)現(xiàn)有測(cè)試的組件)。
*
orleans
嚴(yán)格來說orleans的功能其實(shí)已經(jīng)超出一rpc的范圍,因?yàn)樗屑汉虯ctor等應(yīng)用集成;作為rpc
來說它使用簡(jiǎn)單,基礎(chǔ)性能也并不差,如果不考慮多平臺(tái)交互只是在.net中使用我個(gè)人感覺它是首選。缺點(diǎn)沒有提供多平臺(tái)支持,如果需要更高密集的通訊調(diào)用在性能上還是相對(duì)差了些。
*
grpc
作為http2.0
和protobuf的結(jié)合體有著多平臺(tái)的通用性,如果你的系統(tǒng)是多環(huán)境集成那這個(gè)絕對(duì)是不二的選擇了;不過官方提供的.net實(shí)現(xiàn)性能并不出色可以說有點(diǎn)強(qiáng)差人意,官方建議使用.net
core 3.0作為基礎(chǔ)通訊支持,由于這次測(cè)試是基于.net core 2.2 因此測(cè)試結(jié)果比較差。在使用上也要吐槽一下,proto
描述時(shí)不支持基礎(chǔ)類型的返回值和參數(shù),所有接口方法參數(shù)和返回都必須定義message.
*
xrpc
高吞吐、易用和支持actor是它的特點(diǎn),可以輕松應(yīng)對(duì)Gb級(jí)以上帶寬的rpc
請(qǐng)求處理,缺點(diǎn)并不提供多語言平臺(tái)支持……如果應(yīng)用需要在服務(wù)間進(jìn)行高密集的通訊交互可以考慮。
10Gb網(wǎng)絡(luò)測(cè)試結(jié)果
16并發(fā)
32并發(fā)
64并發(fā)
128并發(fā)
?
?
256并發(fā)
1Gb網(wǎng)絡(luò)測(cè)試結(jié)果
16并發(fā)
32并發(fā)
64并發(fā)
128并發(fā)
256并發(fā)
熱門工具 換一換