热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

.NETCore微服务内部通信:Thrift与HTTP客户端性能对比

本文通过基准测试(Benchmark)对.NETCore环境下Thrift和HTTP客户端的微服务通信性能进行对比分析。基准测试是一种评估系统或组件性能的方法,通过运行一系列标准化的测试来衡量其表现。

1、基准测试简介

基准测试(Benchmark)是指通过运行一系列标准化的测试来评估系统或组件的性能。根据维基百科的定义,基准测试是运行计算机程序、一组程序或其他操作的行为,以评估对象的相对性能,通常是通过对其运行许多标准测试和试验。

许多成熟的GitHub开源项目都采用了基准测试结果作为性能依据。在.NET代码世界中,我们通常使用BenchmarkDotNet类库来进行性能测试。

BenchmarkDotNet支持以下环境:

  • 编程环境:.NET Framework (4.6+), .NET Core (2.0+), Mono, CoreRT
  • 支持语言:C#, F#, Visual Basic
  • 操作系统:Windows, Linux, macOS

该工具可以方便地生成测试数据和图表,帮助开发者更好地理解系统的性能表现。

.NET Core 微服务内部通信:Thrift与HTTP客户端性能对比

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.Initialize("abb", 1);
        SCMBaseServiceRpcProxyManager.Initialize();
    }
    
    // 这是Thrift RPC调用
    [Benchmark]
    public GetListWmsWareHousesResult RpcCall() => CommTools.GetListWmsWareHouses(new RpcContext(null, new Args
    {
        tk = "04100ccc-0ac5-4ec7-ba53-9ad5fcfac2c4"
    }), out StatusCode code);
    
    // 这是HTTP API调用
    [Benchmark]
    public Nullables ApiCall() => api.Call("/mark/Test", new Nullables());
}

3、测试结果

.NET Core 微服务内部通信:Thrift与HTTP客户端性能对比

在Windows平台下,Thrift和HTTP API的性能差异仅为10毫秒,这表明HTTP API的性能表现相当不错。从最大值来看,两者相差20毫秒。如果对性能有较高要求,选择RPC(如Thrift)是一个不错的选择,因为数据库查询的时间通常也只有几毫秒甚至纳秒。


推荐阅读
author-avatar
mobiledu2502870193
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有