让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就是个服务框架,如果没有分布式的需求,其实是不需要用的 ...
随机推荐
- Java多线程(2)线程锁
多线程访问同一个资源进行读写操作,就很容易出一些问题(比如我们常见的读者写者,生产者消费者模型)所以我们会选择对他们设置信号量或者加锁,来限制同一个时刻只有一个线程对某个对象进行操作. 多线程是一个蛮 ...
- 在Ubuntu16.04 TLS 安装LAMP
准备在虚拟机上搭建一个靶机系统(DoraBox),但是还不想使用一键搭建所以起了心思准备使用LAMP框架搭载这个靶机系统,于是有了以下文章,先从百度搜索一下,Ubuntu搭建LAMP. 然后点进去第一 ...
- Design Principles (设计原则)
这是我在2018年4月写的英语演讲稿,可惜没人听得懂(实际上就没几个人在听). 文章的内容是我从此前做过的项目中总结出来的经验,从我们的寝室铃声入手,介绍了可扩展性.兼容性与可复用性等概念,最后提出良 ...
- 嵊州D4T2 硬币 有人来教教我吗!
嵊州D4T2 硬币 [问题描述] 卡拉赞的展览馆被入侵了. 展览馆是一条长长的通道,依次摆放着 n 个展柜(从西到东编号依次 为 1—n). 入侵者玛克扎尔在第 n 个展柜东边召唤了一个传送门,一共施 ...
- Java - 格式化输出JSON字符串的两种方式
目录 1 使用阿里的fastjson 1.1 项目的pom.xml依赖 1.2 Java示例代码 2 使用谷歌的gson 2.1 项目的pom.xml依赖 2.2 Java示例代码 1 使用阿里的fa ...
- Q&A-Ray-20180710
Q: 如果集群多个客户端订阅会不会重复接收消息? A: 集群环境用,有另外一个参数. NodeManager类没有在框架里面: public interface INodeManager : IGra ...
- Web API POST [FromBody] string value 接受参数
网上看到很多关于这这个问题的解决方案,但是都不正确,我也恰巧遇到这个问题,所有把正确的解决方案写出来,希望给后来人参考,如有不同意见欢迎指正 namespace WebApi.Controllers ...
- js深入之call、apply和bind
一. call和apply 1. 代码完整实现 Function.prototype.mycall = function (context, ...argus) { if (typeof this ! ...
- spring boot入门篇
Spring Boot[快速入门] Spring Boot 概述 Build Anything with Spring Boot:Spring Boot is the starting point ...
- tar 命令详解(持续更新)
可以用man tar查看tar命令使用的权威解释 Main operation mode: -c: 建立压缩档案 -r:向压缩归档文件末尾追加文件 -t:查看内容 -u:更新原压缩包中的文件 -x:解 ...