让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就是个服务框架,如果没有分布式的需求,其实是不需要用的 ...
随机推荐
- leadcode的Hot100系列--104. 二叉树的最大深度
依然使用递归思想. 思路: 1.树的深度 = max (左子树深度,右子树深度)+ 1 . ------> 这里的加1是表示自己节点深度为1. 2.如果当前节点为null,则说明它的左右子树深度 ...
- 【无线安全实践入门】网络扫描和ARP欺骗
文中可能存在错误操作或错误理解,望大家不吝指正. 同时也希望可以帮助到想要学习接触此方面.或兴趣使然的你,让你有个大概的印象. !阅前须知! 本文是基于我几年前的一本笔记本,上面记录了我学习网络基础时 ...
- MYSQL5.7---ONLY_FULL_GROUP_BY 异常处理
异常介绍: ONLY_FULL_GROUP_BY 指的是你查询的语句使用到了group by 例如 select name,age from person group by sex; 此时你grou ...
- Nginx代理和负载均衡实验
一.构建两个tomcat容器并启动 [root@localhost bin]# ps -ef|grep tomcat root : pts/ :: /usr/bin/java -Djava.util. ...
- Jira 使用手册
Date Revision version Description author 2018-06-14 V1.0.0 Isaac Zhang 2018-06-22 V1.0.1 1,添加git提交操作 ...
- ctrl shift o失效
是这样的.preference -> general -> keys ,找到Organize Imports ,然后 在 “WHEN”里面 要选择 Editing JAVA SOURCE. ...
- Orleans 知多少 | 2. 核心概念一览
Orleans 术语解读 上面这张图中包含了Orleans中的几个核心概念: Grain Silo Orleans Cluster Orleans Client 从这张图,我们应该能理清他们之间的关系 ...
- HIVE之 DDL 数据定义 & DML数据操作
DDL数据库定义 创建数据库 1)创建一个数据库,数据库在 HDFS 上的默认存储路径是/user/hive/warehouse/*.db. hive (default)> create dat ...
- 2019牛客多校第一场 E-ABBA(dp)
ABBA 题目传送门 解题思路 用dp[i][j]来表示前i+j个字符中,有i个A和j个B的合法情况个数.我们可以让前n个A作为AB的A,因为如果我们用后面的A作为AB的A,我们一定也可以让前面的A对 ...
- 多个module实体类集合打一个jar包并上传至远程库
本章内容主要分享多个module中的实体类集合生成到一个jar包中,并且发布到远程库:这里采用maven-assembly-plugin插件的功能来操作打包,内容不长却贴近实战切值得拥有,主要节点内容 ...