示例工程【免费下载链接】52-technologies-in-2016Lets learn a new technology every week. A new technology blog every Sunday in 2016.项目地址https://gitcode.com/gh_mirrors/52/52-technologies-in-2016点击查看免费下载本文是 52-technologies-in-2016 项目第 19 周19-bees/README.md的技术专题以beeswithmachineguns为工具讲解如何召唤一群蜜蜂——批量启动微型 EC2 实例——对一个 Web 应用发起分布式负载测试。读完本文你将掌握该工具从安装、AWS 凭证配置到up/attack/down/report四命令全生命周期的使用流程并理解其底层基于 boto、paramiko 与 Apache Benchmark 的工作原理从而在自有服务器上复现一次完整的 EC2 分布式压测。beeswithmachineguns 是什么beeswithmachineguns是一个 Python 命令行工具它的设计目标非常直接通过启动大量微型 EC2 实例蜜蜂对目标 Web 应用靶子发起分布式负载测试攻击。与在单机上用多线程模拟并发不同它把压力源分布到多台真实的云服务器上从而在接近真实网络环境的前提下产生大规模请求流量。工具本身提供的命令集非常精简运行bees -h即可看到它的全部能力共四个子命令Usage: bees COMMAND [options] Bees with Machine Guns A utility for arming (creating) many bees (small EC2 instances) to attack (load test) targets (web applications). commands: up Start a batch of load testing servers. attack Begin the attack on a specific url. down Shutdown and deactivate the load testing servers. report Report the status of the load testing servers.这四个命令恰好构成一次完整压测的生命周期up创建武装一批 EC2 压测实例report查看当前压测集群的状态与公网地址attack对指定 URL 发起并发请求down压测结束后关闭并注销这批实例。值得一提的是本项目第 10 周曾介绍过另一款压测工具 Gatling见 10-gatling/README.md。Gatling 偏向单机、代码化、异步模拟用户的压测范式而beeswithmachineguns走的是云上弹性集群、命令行一键分发的路线二者思路互补可对照学习。使用前提先读懂官方的严重警告在动手之前原文档引用项目官方主页特别强调了一个不可忽视的前提如果你决定使用 Bees请牢记以下重要警告它在某种程度上就是一个包装精美的分布式拒绝服务攻击DDoS工具。因此如果你把它指向任何不属于你自己的服务器你将行为不道德、导致你的 Amazon Web Services 账户被锁定并对你造成的任何停机事故承担法律责任。这一点必须严肃对待beeswithmachineguns的分布式能力本身是中性的但把它用于未经授权的目标性质就等同于发起 DDoS。本文所有操作仅适用于你自己拥有、且明确授权进行压测的服务器例如自己的应用站点或临时搭建的测试环境。这也是整个系列文档在使用该工具前反复强调的伦理底线。安装 beeswithmachineguns原文档撰写于 2016 年安装步骤基于 Python 2.7 的虚拟环境。建议先创建一个独立的virtualenv避免污染系统 Python$ virtualenv venv --pythonpython2.7 $ source venv/bin/activate激活虚拟环境后可以运行which python确认当前python已指向虚拟环境内的解释器再执行安装$ pip install beeswithmachineguns该工具依赖两个关键 Python 包理解它们有助于后续排查问题botoAWS 官方 Python 客户端库用于与 Amazon EC2 交互负责实例的创建、状态查询与销毁paramikoSSH v2 协议的 Python 实现beeswithmachineguns用它建立到压测实例的 SSH 连接从而在远端执行压测命令。安装完成后验证命令是否可用$ bees -h若能正常输出前文展示的四个子命令帮助信息说明安装成功。环境前提说明上述安装流程是 2016 年原文档的实际步骤基于当时主流的 Python 2.7。Python 2 官方维护已于 2020 年终止若在今天的运行环境中安装需要留意beeswithmachineguns及其依赖boto、paramiko对 Python 版本的兼容性必要时在 Python 2.7 兼容环境或容器中运行。压测目标站点也应确保对压测流量有充分预期与放行策略。配置 AWS 凭证与默认区域beeswithmachineguns需要通过 boto 调用 EC2 API因此在执行任何命令之前必须先配置 AWS 访问凭证。原文档推荐的配置方式是把凭证写入~/.aws/credentials文件[default] aws_access_key_id YOUR_AWS_ACCESS_KEY aws_secret_access_key YOUR_AWS_ACCESS_SECRET同时可以在~/.aws/config文件中设置默认区域例如us-east-1[default] regionus-east-1配置完成后bees才会知道该用哪组密钥、在哪个区域启动实例。区域配置直接影响后续up命令中实例的落点——默认区域是us-east-1时实例默认在该可用区启动也可通过--zone参数指定其他可用区。完整压测实战一次蜂群生命周期1.bees up武装蜂群up命令用于启动一批压测服务器。原文档给出的最小示例是一次启动 1 台实例$ bees up --servers 1 --group default --key my-ssh-key各参数含义如下参数含义--servers要启动的 EC2 实例数量即蜜蜂数量可按压测规模弹性调整--group使用的 EC2 安全组Security Group示例中为default--keySSH 密钥对的名称对应的my-ssh-key.pem必须存放在~/.ssh目录下后续attack阶段用它建立 SSH 连接--zone可选指定可用区默认跟随~/.aws/config中配置的区域执行后终端输出大致如下New bees will use the default EC2 security group. Please note that port 22 (SSH) is not normally open on this group. You will need to use to the EC2 tools to open it before you will be able to attack. Connecting to the hive. Attempting to call up 1 bees. Waiting for bees to load their machine guns... . . . . Bee i-b8581a3f is ready for the attack. The swarm has assembled 1 bees.这段输出包含两个关键信息值得细读安全组警告默认安全组通常不开放 22 端口SSH。由于attack阶段需要通过 SSH 进入实例执行压测你必须在启动实例前用 EC2 管理工具为安全组开放 22 端口入站规则否则后续无法发起攻击。这是新手最容易踩的坑。实例就绪i-b8581a3f是 AWS 为这台实例分配的资源 ID输出表明它已进入可压测状态蜂群集结完毕。2.bees report查看蜂群状态在发起压测前可以用report命令确认实例的运行状态与公网地址$ bees report输出示例Read 1 bees from the roster. Bee i-b8581a3f: running 54.100.99.121这里读取的是花名册roster——即本地记录的已启动实例清单显示实例i-b8581a3f正在运行公网地址为54.100.99.121。3.bees attack对目标发起压测attack命令是压测的核心原文档示例如下$ bees attack -n 1000 -c 25 -u https://my-website.com/这条命令会通过 SSH 在所有已启动的实例上同时发起请求其中-n 1000请求总数total connections本示例共 1000 次连接-c 25并发连接数即同一时刻保持 25 个并发请求-u压测目标 URL。也就是说每个压测实例都会按-n/-c的参数组合对目标 URL 施加负载最终汇聚成分布式的请求洪流。压测结束后bees会收集各实例上压测工具的返回结果并汇总回传给用户。4.bees down解散蜂群压测完成后务必用down命令关闭并注销所有压测实例避免 EC2 持续计费$ bees down输出示例Read 1 bees from the roster. Connecting to the hive. Calling off the swarm. Stood down 1 bees.至此一次完整的召唤蜂群 → 确认状态 → 发起攻击 → 解散蜂群压测闭环就完成了。建议把down视作压测流程的强制收尾动作压测实例本质上是临时资源及时回收既是成本控制也是避免空闲实例被误用或遗忘的必要操作。原理剖析up 与 attack 命令底层做了什么原文档最后一节专门讲解了工具的内部机制这里结合其描述展开说明。up命令boto 启动实例 轮询等待就绪up命令做的事情其实非常简单调用 boto 的 API 启动指定数量的 EC2 实例。关键在于确保实例真正运行起来这一步——up命令会进入一个while循环反复查询实例的当前状态直到实例进入running状态才返回。原因在于实例从创建到进入running状态通常需要一两分钟只有处于running状态的实例才允许 SSH 接入attack阶段依赖 SSH因此up必须保证返回时实例已可连接。前文输出中的Waiting for bees to load their machine guns...以及逐行的.正是这个轮询等待过程的直观体现。attack命令paramiko SSH Apache Benchmarkabattack命令的执行链路分三步建立 SSH 连接使用up命令中指定的.pem密钥存放在~/.ssh目录通过 paramiko 的 API 与每个压测实例建立 SSH v2 连接远程执行压测连接建立后在实例上调用Apache Benchmarkab工具对目标 Web 站点施加负载——你在attack命令中传入的-n、-c、-u等参数会被直接透传给ab汇总结果收集各实例上ab的执行结果返回给用户查看。这正是分布式的由来每一台 EC2 实例都是独立的压测执行者通过 SSH 统一调度最后把多台机器的压测结果合并汇总。理解这条链路也就理解了前文为什么强调安全组必须开放 22 端口——attack的一切都建立在 SSH 可达的前提之上。小结beeswithmachineguns用极简的命令行接口把云上分布式压测这件事压缩成了up、report、attack、down四个动作boto 负责资源编排paramiko 负责远程调度Apache Benchmark 负责实际施压。对于需要评估应用在突发高并发下表现的场景它是一种成本可控、弹性灵活的压测方案。不过请始终牢记官方警告这些蜜蜂只会忠实地执行你的命令把枪口对准谁是你的选择与责任——压测请务必限定在你自己拥有的服务器上。本文为 52-technologies-in-2016 系列第 19 周内容的深度整理原始教程见 19-bees/README.md系列索引见 README.md。文中的命令与配置均以该文档所述环境Python 2.7 时代、AWS EC2为前提实际使用时请结合当前环境与 AWS 控制台配置做相应适配。赞分享示例工程【免费下载链接】52-technologies-in-2016Lets learn a new technology every week. A new technology blog every Sunday in 2016.项目地址https://gitcode.com/gh_mirrors/52/52-technologies-in-2016点击查看免费下载相关推荐Bees with Machine Guns分布式EC2负载测试工具深度解析Bees with Machine Guns分布式EC2负载测试工具深度解析 Bees with Machine Guns是一个创新的分布式负载测试工具由芝性能测试使用 Bitnami Helm Chart 在 Kubernetes 上部署 Grafana k6 Operator 进行分布式负载测试使用 Bitnami Helm Chart 在 Kubernetes 上部署 Grafana k6 Operator 进行分布式负载测试 Grafana k6云原生容器编排C Interfaces and Implementations核心组件详解从数据结构到线程管理C Interfaces and Implementations核心组件详解从数据结构到线程管理 C Interfaces and Implementatio开发工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考