.net core ——微服務內通訊Thrift和Http客戶端響應比較
阿新 • • 發佈:2018-12-07
目錄
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 裡面會分享一些資深架構師錄製的視訊錄影:高併發、高效能、分散式、微服務架構的原理,分散式架構等這些成為架構師必備的知識體系。