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

让techempower帮你通讯服务框架的性能

在编写服务应用框架的时候一般都需要进行性能测试,但自己测试毕竟资源受限所以很难做更高性能上的测试。其实GitHub上有一个项目可以让开发人员提交自己的框架服务代码然后进行一个标准测

在编写服务应用框架的时候一般都需要进行性能测试,但自己测试毕竟资源受限所以很难做更高性能上的测试。其实GitHub上有一个项目可以让开发人员提交自己的框架服务代码然后进行一个标准测试;现在已经有上百个框架提交了相关测试代码,包括netty(java),aspcore(.netcore)和swoole(php)等等(对.net core来说有些少,暂只有ms提供的aspcore-kestrel和本人的beetlex,其实.net core下的通讯框架不少有兴趣的朋友可以提交上去)。官网会每隔一段时间公布测试框架排名,接下来介绍测试的要求和如何提交框架测试。

测试描述

框架测试基于HTTP 1.1,所以需要服务框架基础上实现一个简单的HTTP服务,这个服务要求并不需要完全整的HTTP服务,只需要满足测试用例需求即可。完整测试用例用6个,分别是Plaintext,JSON serialization,Single query,Multiple queries,Data updatesFortunes.每个测试都会进行测试排名,可以针对自己的框架选择性来进行测试,如只实现Plaintext也是可以加入测试的。每个测试用例的具体要求如下:

https://www.techempower.com/benchmarks/#section=code

测试对代码没有严格的要求,所以很多框架会提供多个测试版本的代码,包括完整功能和精简功能。精简功能则更多用于测试用在实际应用开发过程中会实现比较麻烦。 

提交测试代码

首先要有一个GitHub帐号,如果没有就自行注册一个;然后Fork项目https://github.com/TechEmpower/FrameworkBenchmarks

Fork后就可以添加自己服务的测试代码,frameworks目录下有不同的语言目录,在你框架对应的语言的目录下创建对应测试框架的目录具体如下:

然后在相应目录下添加框架测试代码即可,当所有测试内容添加完成后提交相关PR即可,如果CI构建通过后techempower技术人员会合并到测试的Master分支中(可以针对自己的情况只实现个别用例进行测试)。

构建docker文件

测试服务部署是以docker的方式进行,所以需要描述相关测试程序所运行的docker描述。以下是针对Beetlex的描述

  • BeetleX webapi
FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /app
COPY Benchmarks .
RUN dotnet publish -c Release -o out

FROM microsoft/dotnet:2.2-aspnetcore-runtime AS runtime
ENV COMPlus_ReadyToRun 0
WORKDIR /app
COPY --from=build /app/out ./
ENTRYPOINT ["dotnet", "Benchmarks.dll"]
  • BeetleX core
FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /app
COPY PlatformBenchmarks .
RUN dotnet publish -c Release -o out

FROM microsoft/dotnet:2.2-aspnetcore-runtime AS runtime
ENV COMPlus_ReadyToRun 0
WORKDIR /app
COPY --from=build /app/out ./
ENTRYPOINT ["dotnet", "PlatformBenchmarks.dll"]

每个框架都可以针对不同的测试用例制定不同的测试环境,每个环境的测试结果都会反映到测试报告中。更详细的运行描述环境可以参考相应语言下相关测试的描述文件。

构建测试描述文件

除了描述docker文件外,还需要描述benchmark_config.json测试文件,这个文件是告诉techempower需要测试那些内容和一些测试描述.BeetleX描述如下

{
  "framework": "beetlex",
  "tests": [
    {
      "default": {
        "fortune_url": "/fortunes",
        "plaintext_url": "/plaintext",
        "json_url": "/json",
        "db_url": "/db",
        "query_url": "/queries?queries=",
        "port": 8080,
        "approach": "Realistic",
        "classification": "Fullstack",
        "database": "Postgres",
        "framework": "beetlex",
        "language": "C#",
        "orm": "Raw",
        "platform": ".NET",
        "flavor": "CoreCLR",
        "webserver": "beetlex",
        "os": "Linux",
        "database_os": "Linux",
        "display_name": "beetlex webapi",
        "notes": "",
        "versus": "beetlex"
      },
      "core": {
        "fortune_url": "/fortunes",
        "plaintext_url": "/plaintext",
        "json_url": "/json",
        "db_url": "/db",
        "query_url": "/queries?queries=",
        "port": 8080,
        "approach": "Realistic",
        "classification": "Platform",
        "database": "Postgres",
        "framework": "beetlex",
        "language": "C#",
        "orm": "Raw",
        "platform": ".NET",
        "flavor": "CoreCLR",
        "webserver": "beetlex",
        "os": "Linux",
        "database_os": "Linux",
        "display_name": "beetlex core",
        "notes": "",
        "versus": "beetlex-core"
      }
    }
  ]
}

测试优化

官网的测试公告需要很久才能发布长则几个月不等,所以不能等这个结果公布后才优化;开始并不知道,BeetleX第一交提交后就没进行优化等结果(所以BeetleX在最近一次公布并没有理想的结果)。其实techempower会不停地构造和测试,每次大概4-5天。你可以针对这些测试结果不停地进行优化调整和提交。可以通过https://tfb-status.techempower.com/ 查看详细测试情况。

BeetleX的测试情况

Beetlex也提供两个测试代码分别BeetleX作为一个完整的webapi对应aspcore mvc api,而beetleX-core则作为一个精简版对应aspcore。可以测试平台并不提供测试的完整日志,最基础的Plaintext测试一直无法完成。不过在其他测试用例BeetleX测试表现还比较理想;综合来说涉及到数据库查询的综合测试中.net core平的表现都不算理想,希望.net core 3.0在性能上有着更大的提升。

以下是2019-08-01针对.net core的测试结果:

 


推荐阅读
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
author-avatar
萱恭俊逸明靖
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有