蜜蜂与机枪:用 beeswithmachineguns 在 AWS EC2 上开展分布式 Web 负载测试
示例工程【免费下载链接】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),仅供参考

相关新闻

从内存到磁盘:2-3树、B树与B+树插入原理及数据库索引设计

从内存到磁盘:2-3树、B树与B+树插入原理及数据库索引设计

1. 从内存到磁盘:为什么需要重新理解数据的存储原理很多人学数据结构,学到树这一章就开始犯迷糊。数组、链表还能在纸上画一画,到了2-3树、B树、B树,脑子里就只剩下一堆圆圈和箭头,根本想不明白这些结构到底在解决什么…

2026/10/15 14:50:28 阅读更多 →
form-create 富文本组件 @form-create/component-wangeditor 接入指南与源码解析

form-create 富文本组件 @form-create/component-wangeditor 接入指南与源码解析

低代码前端UI组件 【免费下载链接】form-create :fire::fire::fire: 强大的低代码动态表单组件,通过 JSON 数据驱动表单渲染,适配移动端,支持可视化设计。提高开发者对表单的开发效率。目前在政务系统、OA系统、ERP系统、电商系统、流程管理等…

2026/10/15 14:50:28 阅读更多 →
从体验到旗舰:什么信号说明该加量

从体验到旗舰:什么信号说明该加量

体验档跑通后,常有人问要不要加量。信号不在焦虑,而在产能是否真吃紧:未发队列是否排满、授权号是否已齐、素材是否周周有、现有日更是否仍吃不完。 市面加购常按篇加价;加量前若还在同站连发,先停手。风控没消&#x…

2026/10/15 14:50:28 阅读更多 →

最新新闻

PyQt5平移动画实战:从QPropertyAnimation到性能优化

PyQt5平移动画实战:从QPropertyAnimation到性能优化

直接开始正文。1. 先搞清楚一件事:PyQt5里实现平移动画,你到底有几种选择我在群里经常看到有人问“PyQt5怎么做平移动画”,结果下面回复五花八门,有说用QTimer循环改坐标的,有说直接上QPropertyAnimation的&#xff0c…

2026/10/15 18:09:21 阅读更多 →
从URL到HTTPS:一次请求背后的加密与身份认证全链路解析

从URL到HTTPS:一次请求背后的加密与身份认证全链路解析

1. URL不只是“一个链接”,它是整套通信约定的起点1.1 五个基础字段:协议类型、主机、端口、路径与查询参数我们先回到最前端。你在浏览器地址栏里敲下的那串字符,平时可能叫“网址”“链接”“域名”,但在网络协议体系里&#xf…

2026/10/15 18:09:21 阅读更多 →
MFC标签切换:Tab Control与子对话框页面管理实战

MFC标签切换:Tab Control与子对话框页面管理实战

简介:这是一份用于演示 MFC 对话框程序中标签控件切换页面并同步数据的完整开发工程,目标读者是具备基础 C 知识、需要实现多页签交互的 Windows 桌面开发者。压缩包采用 RAR 封装,共含 39 个文件,体积约 16.2 兆字节;…

2026/10/15 18:09:21 阅读更多 →
v3-admin-vite 的 TypeScript 开发规范全解析:从类型设计到源码实践

v3-admin-vite 的 TypeScript 开发规范全解析:从类型设计到源码实践

前端 【免费下载链接】v3-admin-vite ☀️ AI-friendly Vue3 admin template | Vue Admin | Vue Template | Vue3 Admin | Vue3 Template | Vue 后台 | Vue 模板 | Vue3 后台 | Vue3 模板 项目地址: https://gitcode.com/un-pany/v3-admin-vite 点击查看 免费下载 …

2026/10/15 18:09:21 阅读更多 →
PyQt5平移动画实战:从属性动画到缓动曲线

PyQt5平移动画实战:从属性动画到缓动曲线

你有没有遇到过这种情况:按钮点了,面板该出现的出现、该消失的消失,功能都正常,但就是生硬得跟换台一样。想给界面加个pyqt5 平移动画,网上搜来搜去都是“用 QPropertyAnimation,setPropertyName("pos…

2026/10/15 18:09:21 阅读更多 →
C#串口通信三菱PLC实战:MC协议3E帧稳定读DWord与心跳保活

C#串口通信三菱PLC实战:MC协议3E帧稳定读DWord与心跳保活

简介:本资源是一套基于C#实现串口与三菱PLC通信的完整工程实践方案,面向工业自动化领域的初/中级.NET开发者及工控系统集成工程师,解决PLC底层数据交互中单点/批量布尔量、Word/Dword数值读写、心跳监测与多线程稳定通信等核心问题。压缩包共…

2026/10/15 18:08:19 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →