.net core ——微服務內通信Thrift和Http客戶端響應比較
阿新 • • 發佈:2019-01-18
知識 type 高並發 要求 generic marker work nag comm 原文:.net core ——微服務內通信Thrift和Http客戶端響應比較
目錄
- 1、Benchmark介紹
- 2、測試下微服務訪問效率
- 3、結果
- 引用鏈接
1、Benchmark介紹
wiki中有定義:基準測試是運行計算機程序,一組程序或其他操作的行為,以便評估對象的相對性能,通常是通過對其運行許多標準測試和試驗。
目前許多成熟的github開源項目,均采用Benchmark測試結果作為性能依據。在 .net 代碼世界中,當然是使用 BenchmarkDotNet類庫。
其支持 :
- 編程環境 .NET Framework (4.6+), .NET Core (2.0+), Mono, CoreRT
- 支持語言: C#, F#, Visual Basic
- 操作系統: Windows, Linux, macOS
其可以方便的產生數據和圖表
2、測試下微服務訪問效率
目前我司采用的是Thrift封裝的微服務框架,而時常有聲音想把它轉為Http Api,其實也未嘗不可,不過測試下性能指標,是不是更靠譜些。
說幹就幹。
因為只有.net core版本,因此其他版本忽略之。
//選擇兩組數據,1000次和10000次訪問
[CoreJob(baseline: true)]
[RPlotExporter, RankColumn]
public class TestAbc
{
[Params(1000, 10000)]
public int N;
private Qt2Api api = new Qt2Api(new UserContext
{
Token = "04100ccc-0ac5-4ec7-ba53-9ad5fcfac2c4"
});
[GlobalSetup]
public void Setup()
{
ServerSetting.Initlize("abb", 1);
SCMBaseServiceRpcProxyManager. Initlize();
}
//這是thrift rpc調用
[Benchmark]
public GetListWmsWareHousesResult RpcCall() => CommTools.GetListWmsWareHouses(new RpcContext(null,new Args<object>
{
tk= "04100ccc-0ac5-4ec7-ba53-9ad5fcfac2c4"
}),out StatusCode code);
//這是Http api調用
[Benchmark]
public Nullables ApiCall() => api.Call<Nullables,Nullables>("/mark/Test",new Nullables());
}
3、結果
window平臺下,僅有 10ms的差距,說明http api性能還是不錯的!從最大值上看相差20ms。如果對性能要求較高,采用RPC是個不錯的選擇,畢竟查下數據庫也不過幾個ms甚至ns。
在此我向大家推薦一個微服務架構學習交流群。交流學習群號:864759589 裏面會分享一些資深架構師錄制的視頻錄像:高並發、高性能、分布式、微服務架構的原理,分布式架構等這些成為架構師必備的知識體系。
引用鏈接
- 口袋代碼倉庫
- 在線計算器
- 本節源碼:github
.net core ——微服務內通信Thrift和Http客戶端響應比較