让techempower帮你通讯服务框架的性能
在编写服务应用框架的时候一般都需要进行性能测试,但自己测试毕竟资源受限所以很难做更高性能上的测试。其实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 updates和Fortunes.每个测试都会进行测试排名,可以针对自己的框架选择性来进行测试,如只实现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的测试结果:

所有框架

让techempower帮你通讯服务框架的性能的更多相关文章
- 一个简单的通讯服务框架(大家发表意见一起研究)JAVA版本
最近研究下java语言,根据一般使用的情况,写了个连接通讯服务的框架: 框架结构 C-Manager-S; 把所有通讯内容抽取成三个方法接口:GetData,SetData,带返还的Get; 所有数据 ...
- 基于netty轻量的高性能分布式RPC服务框架forest<上篇>
工作几年,用过不不少RPC框架,也算是读过一些RPC源码.之前也撸过几次RPC框架,但是不断的被自己否定,最近终于又撸了一个,希望能够不断迭代出自己喜欢的样子. 顺便也记录一下撸RPC的过程,一来作为 ...
- 高性能的分布式服务框架 Dubbo
我思故我在,提问启迪思考! 1. 什么是Dubbo? 官网:http://dubbo.io/,DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及作为SOA服务治理的 ...
- 微服务框架之微软Service Fabric
常见的微服务架构用到的软件&组件: docker(成熟应用) spring boot % spring cloud(技术趋势) Service Fabric(属于后起之秀 背后是微软云的驱动) ...
- 转:微服务框架之微软Service Fabric
常见的微服务架构用到的软件&组件: docker(成熟应用) spring boot % spring cloud(技术趋势) Service Fabric(属于后起之秀 背后是微软云的驱动) ...
- 面试都在问的微服务、服务治理、RPC、下一代微服务框架... 一文带你彻底搞懂!
文章每周持续更新,「三连」让更多人看到是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) 单体式应用程序 与微服务相对的另一个概念是传统的单体式应用程序( ...
- Viper 微服务框架 编写一个hello world 插件-02
1.Viper是什么? Viper 是.NET平台下的Anno微服务框架的一个示例项目.入门简单.安全.稳定.高可用.全平台可监控.底层通讯可以随意切换thrift grpc. 自带服务发现.调用链追 ...
- 为构建大型复杂系统而生的微服务框架 Erda Infra
作者|宋瑞国(尘醉) 来源|尔达 Erda 公众号 导读:Erda Infra 微服务框架是从 Erda 项目演进而来,并且完全开源.Erda 基于 Erda Infra 框架完成了大型复杂项目的 ...
- 阿里巴巴分布式服务框架dubbo学习笔记
Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的 ...
随机推荐
- 机器学习经典算法之Apriori
一. 搞懂关联规则中的几个概念 关联规则这个概念,最早是由 Agrawal 等人在 1993 年提出的.在 1994 年 Agrawal 等人又提出了基于关联规则的 Apriori 算法,至今 Apr ...
- 分享常见的HTTP状态码
本内容摘抄自RUNOOB.COM 当浏览一个网页时,浏览器会向网页所在服务器发出请求.当浏览器确定接收并显示网页之前,此网页所在的服务器会返回一个含有HTTP状态码(HTTP Status Code) ...
- Gin 框架 - 安装和路由配置
目录 概述 Gin 安装 路由配置 推荐阅读 概述 看下 Gin 框架的官方介绍: Gin 是一个用 Go (Golang) 编写的 web 框架. 它是一个类似于 martini 但拥有更好性能的 ...
- 搭建Spring Initializr服务器
前言 按照网上很多教程,出错特别多.首先是GitHub和maven仓库的网络环境比较差,踩了很多坑:其次是SpringInitializr更新迭代几个版本,0.7.0我也没能弄成功.索性就用了旧版本0 ...
- WinForm控件之【CheckedListBox】
基本介绍 复选框列表控件,以复选框的形式将一个或多个项列表展示,从目前的情况来看应用非常有限并不广泛. 常设置属性.事件 CheckOnClick:值为true时单击项即可更改项的勾选状态,值为fal ...
- CSharp初级篇 1-4 this、索引器、静态、常量以及只读
.NET Core CSharp初级篇 1-4 本节内容为this.索引器.静态.常量以及只读 简介 在之前的课程中,我们谈论过了静态函数和字段的一小部分知识,本节内容中,我们将详细的讲解关于对象操作 ...
- VirtualBox下安装Linux系统
Linux 开源的类Unix操作系统,拥有图形界面文字界面,旗下发行版不胜其数(Ubuntu.Deepin.CentOS...)在互联网公司中Linux服务器大多是用的CentOS系统,其他Linux ...
- redis分布式锁的问题和解决
分布式锁 在分布式环境中,为了保证业务数据的正常访问,防止出现重复请求的问题,会使用分布式锁来阻拦后续请求.具体伪代码如下: public void doSomething(String userId ...
- 运用KeyCode在浏览器中按WASD使图形运动
如何实现在浏览器中按WASD四个键使图形上下左右运动呢? 其实很简单,用keyCode方法就可以实现了. 先放个div在html中: <div id="ball" style ...
- [leetcode]375 Guess Number Higher or Lower II (Medium)
原题 思路: miniMax+DP dp[i][j]保存在i到j范围内,猜中这个数字需要花费的最少 money. "至少需要的花费",就要我们 "做最坏的打算,尽最大的努 ...