grpc负载平衡测试工具

nudnik的Python项目详细描述


纽德尼克

目标

允许在gRPC和基于REST的服务网格中轻松测试负载平衡和故障

功能

  • 速率限制
  • 来自客户端或服务器端的假IO加载
  • 将计时指标导出到具有任何自定义格式的文件或infloxdb

快速启动

  • 安装Nudnik:
# Install package
pip install nudnik
  • 运行示例服务器:
nudnik --server
  • 运行一个将自己标识为barbaz的客户机,fork to 2线程,每5秒发送一次3gRPC消息
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

配置

Configuration文档

Formatting文档

通过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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在jetty请求日志中添加milliscond字段?   java在使用Scanner类从文件读取信息时遇到问题   为什么。类不适用于泛型类型?   SQLite插入上的java空指针异常   java能告诉我们Guava缓存是在禁用统计数据的情况下构建的吗?   java在应用程序中使用常量   java无法使用AutoIT和Selenium Webdriver在所需位置/文件夹保存图像   java如何在jtable中更新jprogress栏   java是比较给定日期和当前日期(在给定时区中没有时间段)的最佳方法   安卓代码中的java错误   java无法访问实体类中的字段   java如何在tomcat中处理三个JDBC连接池?   java无法使用Spring Security保护AngularJS页面   如何在没有TCP/IP协议栈的情况下用Java发送以太帧