1. 前言
入门篇咱们曾经胜利运行hello.benchmarks.yml并输入测试后果,本篇咱们就hello.benchmarks.yml、以及运行的shell脚本具体解读下其中的含意
2. 分析hello.benchmarks.yml
2.1. job
- 在hello.benchmarks.yml中咱们定义了一个新的job: server,并指定了仓库信息 ( 近程仓库 ):
repository:https://github.com/doddgu/crank.git # 仓库源 branchOrCommit:sample # 分支 project: samples/hello/hello.csproj # 我的项目
- 并通过import导入了bombardier.yml,其中定义了另外一个job: bombardier,并指定了仓库信息 ( 近程仓库 ):
repository: https://github.com/doddgu/crank.git branchOrCommit: sample project: src/Microsoft.Crank.Jobs.Bombardier/Microsoft.Crank.Jobs.Bombardier.csproj sourceKey: bombardier # 服务器应用它来重用雷同的源文件夹。 noBuild: true # 定义 SourceKey时,批示是否仍应进行构建
2.2. scenarios
在hello.benchmarks.yml中咱们定义了场景: hello,并为此场景指定了两个工作:
- 第一个工作名为application,应用的是我的项目server
- 第二个工作名为load,并指定应用我的项目bombardier
2.3. variables 变量
在bombardier.yml中
- 定义了全局变量: headers、presetHeaders(预设header)
- 定义了局部变量: connections、warmup、duration、requests、rate、transport、serverScheme等等
- 在hello.benchmarks.yml中为load定义了局部变量serverPort、path
2.4. profiles 配置
在hello.benchmarks.yml中咱们
- 定义了配置local
- 并指定了局部变量: serverAddress = localhost
- 为工作application、load指定了部署作业的endpoint 是 http://localhost:5010 (指定执行工作的Agent地址)
2.5. arguments 参数
- 在bombardier.yml中与variables同级的配置: arguments,此参数是在启动job后传递的参数,其中定义的全局参数、局部参数信息也都是为构建残缺的参数做筹备,bombardier实在的参数信息是:
-c {{connections}} -w {{warmup}} -d {{duration}} -n {{requests}} --insecure -l {% if rate != 0 %} --rate {{ rate }} {% endif %} {% if transport %} --{{ transport}} {% endif %} {{headers[presetHeaders]}} {% for h in customHeaders %}{% assign s = h | split : ':' %}--header \"{{ s[0] }}: {{ s[1] | strip }}\" {% endfor %} {% if serverUri == blank or serverUri == empty %} {{serverScheme}}://{{serverAddress}}:{{serverPort}}{{path}} {% else %} {{serverUri}}:{{serverPort}}{{path}} {% endif %} {% if bodyFile != blank and bodyFile != empty %} -f {{bodyFile}} {% endif %} {% if verb != blank and verb != empty %} -m {{verb}} {% endif %}
3. 革新hello.benchmarks.yml
革新hello.benchmarks.yml,不思考重用,最原始的代码如下
variables: headers: none: '' plaintext: '--header "Accept: text/plain,text/html;q=0.9,application/xhtml+xml;q=0.9,application/xml;q=0.8,*/*;q=0.7" --header "Connection: keep-alive"' html: '--header "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" --header "Connection: keep-alive"' json: '--header "Accept: application/json,text/html;q=0.9,application/xhtml+xml;q=0.9,application/xml;q=0.8,*/*;q=0.7" --header "Connection: keep-alive"' connectionclose: '--header "Connection: close"' presetHeaders: nonejobs: bombardier: source: repository: https://github.com/dotnet/crank.git branchOrCommit: main project: src/Microsoft.Crank.Jobs.Bombardier/Microsoft.Crank.Jobs.Bombardier.csproj sourceKey: bombardier noBuild: true readyStateText: Bombardier Client waitForExit: true variables: connections: 256 warmup: 15 duration: 15 requests: 0 rate: 0 transport: fasthttp # | http1 | http2 serverScheme: http serverAddress: localhost serverPort: 5000 path: bodyFile: # path or url for a file to use as the body content verb: # GET when nothing is specified customHeaders: [ ] # list of headers with the format: '<name1>: <value1>', e.g. [ 'content-type: application/json' ] arguments: "-c {{connections}} -w {{warmup}} -d {{duration}} -n {{requests}} --insecure -l {% if rate != 0 %} --rate {{ rate }} {% endif %} {% if transport %} --{{ transport}} {% endif %} {{headers[presetHeaders]}} {% for h in customHeaders %}{% assign s = h | split : ':' %}--header \"{{ s[0] }}: {{ s[1] | strip }}\" {% endfor %} {% if serverUri == blank or serverUri == empty %} {{serverScheme}}://{{serverAddress}}:{{serverPort}}{{path}} {% else %} {{serverUri}}:{{serverPort}}{{path}} {% endif %} {% if bodyFile != blank and bodyFile != empty %} -f {{bodyFile}} {% endif %} {% if verb != blank and verb != empty %} -m {{verb}} {% endif %}" onConfigure: # - job.timeout = Number(job.variables.duration) + Number(job.variables.warmup) + 10; endpoints: - http://localhost:5010 server: source: repository: https://github.com/doddgu/crank branchOrCommit: sample project: samples/hello/hello.csproj readyStateText: Application started. endpoints: - http://localhost:5010scenarios: hello: application: job: server load: job: bombardier variables: serverPort: 5000 path: /
4. 解读crank shell
之前咱们通过shell执行:
crank --config hello.benchmarks.yml --scenario hello --profile local --load.framework net5.0 --application.framework net5.0
- 其中crank 是固定的、代表:Crank Controller
- --config:固定的配置,指执行哪个yml配置,每次仅能指定一个yml配置
- --scenario:固定的配置,设置场景是hello
- --profile:固定的配置,非必选,可屡次设置,指定以后Crank命令申请的配置是local,应用local下配置的所有信息
- --load.framework: 格局:<工作名>.framework,为工作load指定framework的运行框架版本是net5.0、--application.framework同理
- 革新hello.benchmarks.yml,因为移除了profile,所以执行: crank --config hello.yml --scenario hello --load.framework net5.0 --application.framework net5.0 即可
查看crank更多文档
5. 疑难
为什么启动crank时要减少--application.framework net5.0?
- 装置crank要求必须有net5.0的环境,所以指定net5.0不须要再独自装置框架环境
为什么启动crank时不指定framework时默认是netcore3.1呢?
- 应用记事本关上hello.csproj、Microsoft.Crank.Jobs.Bombardier.csproj 即可理解
scenarios节点下application以及load两个节点名称能够更换吗?只能有两个节点?
- 节点名称不固定,能够更换,也没有限度必须是两个节点,具体多少个节点依据本人的须要来
6. 结尾
通过下面的学习,咱们也曾经齐全的理解了各配置的作用,但对bombardier.yml与开源我的项目bombardier存在什么样的分割还不分明,以及为什么叫做bombardier.yml而不是其余名字,并且是如何实现性能指标的输入,接下来就会讲到bombardier.yml与开源我的项目bombardier的关系,以及wrk.yml与wrk的关系
源码地址:https://github.com/doddgu/cra...
开源地址
MASA.BuildingBlocks:https://github.com/masastack/...
MASA.Contrib:https://github.com/masastack/...
MASA.Utils:https://github.com/masastack/...
MASA.EShop:https://github.com/masalabs/M...
MASA.Blazor:https://github.com/BlazorComp...
如果你对咱们的 MASA Framework 感兴趣,无论是代码奉献、应用、提 Issue,欢送分割咱们