grpc负载平衡测试工具
nudnik的Python项目详细描述
纽德尼克
目标
允许在gRPC和基于REST的服务网格中轻松测试负载平衡和故障
功能
- 速率限制
- 来自客户端或服务器端的假IO加载
- 将计时指标导出到具有任何自定义格式的文件或infloxdb
快速启动
- 安装Nudnik:
# Install package
pip install nudnik
- 运行示例服务器:
nudnik --server
- 运行一个将自己标识为
barbaz
的客户机,fork to2
线程,每5
秒发送一次3
gRPC消息
nudnik --name barbaz --streams 2 --interval 3 --rate 5
Docker-快速启动
- 使用docker compose在本地/远程docker守护进程上运行:
docker-compose up
发动机罩下
服务器绑定到指定的host:port,并侦听传入的grpc消息。 每条消息都包含几个字段:
- name:客户端的名称,任意字符串
- 流id:流id,流的编号从
0
到通过streams
参数配置的任何内容 - 消息id:在每个
interval
处,客户端发送rate
消息,此id是该消息的自动增量索引 - CTime:创建请求的时间戳
- rtime:重新传输请求的时间戳(如果不适用,则为0)
- rcount:重新传输此邮件的次数(如果不适用,则为0)
- meta:只是另一个不起作用的字符串字段,您可以发送额外的任意数据来增加消息大小,或者指定
random
来生成每个请求的随机数据 - 加载:此字段可能重复多次,它指示服务器在答复之前创建某种类型的假加载。
收到邮件后,服务器将:
- 分析
load
字段 - 执行所需负载
- 使用配置的
out_format
打印日志消息
- 回复客户机一个
OK
,同时添加字段ptime
,它表示在服务器上解析请求的时间, 这允许客户端计算准确的rtt,即使ntp没有同步。
地方发展
根据经验,我们推荐使用virtualenv。 需求是Python 3.7+requirements.txt文件
- 克隆并初始化nudnik:
# Install python requirements pip install grpcio grpcio-tools requests-unixsocket # Clone and configure the repository git clone https://github.com/salosh/nudnik.git git config --global push.default matching git config --global user.name "Your Name" git config --global user.email your.email@salosh.org # "Compile" the entity protobufcd nudnik python -m grpc_tools.protoc --proto_path=./nudnik/ --python_out=./nudnik/ --grpc_python_out=./nudnik/ ./entity.proto
配置
通过Nudnik
命令行参数:
nudnik -h usage: nudnik [-h][--config-file CONFIG_FILE][--host HOST][--port PORT][--server][--name NAME][--name-mismatch-error {prefix,suffix,exact}][--meta META][--workers WORKERS][--streams STREAMS][--initial-stream-index INITIAL_STREAM_INDEX][--interval INTERVAL][--rate RATE][--count COUNT][--chaos CHAOS][--load load_type load_value][--retry-count RETRY_COUNT][--fail-ratio FAIL_RATIO][--ruok][--metrics {stdout,file,influxdb,prometheus}][--stats {stdout,file,influxdb,prometheus}][--extra EXTRA][--debug][--verbose][--version] Nudnik - gRPC load tester optional arguments: -h, --help show this help message and exit --config-file CONFIG_FILE, -f CONFIG_FILE Path to YAML config file --host HOST, -H HOST host --port PORT, -p PORT port --server, -S Operation mode (default: client) --name NAME, -n NAME Parser name --name-mismatch-error {prefix,suffix,exact} Fail request on name mismatch (default: None) --meta META, -M META Send this extra data with every request --workers WORKERS, -w WORKERS Number of workers (Default: Count of CPU cores) --streams STREAMS, -s STREAMS Number of streams (Default: 1) --initial-stream-index INITIAL_STREAM_INDEX Calculate stream ID from this initial index (Default: 0) --interval INTERVAL, -i INTERVAL Number of seconds per stream message cycle (Default: 1) --rate RATE, -r RATE Number of messages per interval (Default: 10) --count COUNT, -C COUNT Count of total messages that should be sent (Default: 0== unlimited) --chaos CHAOS, -c CHAOS Compute statistical process level random crashes [0, 3600/interval](Default: 0) --load load_type load_value, -l load_type load_value Add artificial load [rtt, rttr, cpu, mem, cmd, fcmd](Default: None) --retry-count RETRY_COUNT Number of times to re-send failed messages (Default: -1, which means infinite times) --fail-ratio FAIL_RATIO Percent of requests to intentionally fail (Default: 0) --ruok, -R Enable "Are You OK?" HTTP/1.1 API (default: False) --metrics {stdout,file,influxdb,prometheus}, -m {stdout,file,influxdb,prometheus} Enable metrics outputs (Default: None) --stats {stdout,file,influxdb,prometheus}, -t {stdout,file,influxdb,prometheus} Enable stats outputs (Default: None) --extra EXTRA, -e EXTRA Extra args (Default: None) --debug, -d Debug mode (default: False) --verbose, -v Verbose mode, specify multiple timesfor extra verbosity (default: None) --version, -V Display Nudnik version 2018(C) Salo Shp <https://github.com/salosh/nudnik.git>
通过配置文件:
nano ./config.yml
入门
请参考我们的examples repository了解多个指南和用法示例
请访问我们的网站https://salosh.org