热门标签 | 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)是一个不错的选择,因为数据库查询的时间通常也只有几毫秒甚至纳秒。


推荐阅读
  • WinSCP: 跨Windows与Linux系统的高效文件传输解决方案
    本文详细介绍了一款名为WinSCP的开源图形化SFTP客户端,该工具支持SSH协议,适用于Windows操作系统,能够实现与Linux系统之间的文件传输。对于从事嵌入式开发的技术人员来说,掌握WinSCP的使用方法将极大提高工作效率。 ... [详细]
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • 在Linux系统上构建Web服务器的详细步骤
    本文详细介绍了如何在Linux系统上搭建Web服务器的过程,包括安装Apache、PHP和MySQL等关键组件,以及遇到的一些常见问题及其解决方案。 ... [详细]
  • 本文详细介绍了如何在 Java 中使用 com.badlogic.gdx.utils.JsonValue.iterator() 方法来遍历和解析 JSON 数据,并提供了多个实际应用中的代码示例。 ... [详细]
  • 本文介绍了在Android项目中实现时间轴效果的方法,通过自定义ListView的Item布局和适配器逻辑,实现了动态显示和隐藏时间标签的功能。文中详细描述了布局文件、适配器代码以及时间格式化工具类的具体实现。 ... [详细]
  • 本文将介绍如何利用Python爬虫技术抓取国内主流在线学习平台的数据,并以51CTO学院为例,进行详细的技术解析和实践操作。 ... [详细]
  • 全能终端工具推荐:高效、免费、易用
    介绍一款备受好评的全能型终端工具——MobaXterm,它不仅功能强大,而且完全免费,适合各类用户使用。 ... [详细]
  • Linux环境下Git安装及常见问题解析
    本文详细介绍了在Ubuntu系统中安装Git的过程,包括环境检查、软件安装、用户配置以及SSH密钥生成等步骤,并针对安装过程中可能出现的问题提供了有效的解决方案。 ... [详细]
  • 第十一章 Python基本数据类型及内置方法
    一、概述数据类型是用来记录事物状态的,而事物的状态是不断变化的(如:一个人年龄的增长(操作int类型),单个人名的修改(操作str类型),学生列表中增加学生(操作list类型)等) ... [详细]
  • 随着技术社区的发展,越来越多的技术爱好者选择通过撰写博客来分享自己的学习经验和项目进展。本文将介绍一个具体案例,即将一套原本运行于Windows平台的代码成功移植到Linux(Redhat)环境下的过程与挑战。 ... [详细]
  • 本文提供了在 Kali Linux 2020.01 x64 版本上安装 Docker 的详细步骤,包括环境准备、使用清华大学镜像源、配置 APT 仓库以及安装过程中的常见问题处理。 ... [详细]
  • Ubuntu GamePack:专为游戏爱好者打造的Linux发行版
    随着Linux系统在游戏领域的应用越来越广泛,许多Linux用户开始寻求在自己的系统上畅玩游戏的方法。UALinux,一家致力于推广GNU/Linux使用的乌克兰公司,推出了基于Ubuntu 16.04的Ubuntu GamePack,旨在为Linux用户提供一个游戏友好型的操作环境。 ... [详细]
  • Python数据类型6 字典
    字典Python的字典数据类型是基于hash散列算法实现的,采用键值对(key:value)的形式,根据key的值计算value的地址,具有非常快的查取和插入速度。但它是无序的,包 ... [详细]
  • 本文详细介绍了ActivityManagerService (AMS) 的工作原理及其在Android系统中的重要角色。AMS作为system_server进程的一部分,在系统启动时加载,负责管理和协调应用程序中的Activity和服务(Service)。文章将通过具体的接口图和通信流程,帮助读者更好地理解AMS的工作机制。 ... [详细]
  • OBS (Open Broadcaster Software) 架构解析
    本文介绍 OBS(Open Broadcaster Software),一款专为直播设计的开源软件。文章将详细探讨其技术架构、核心组件及其开发环境要求。 ... [详细]
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社区 版权所有