没有版权的图片网站,wordpress调用上传,自家企业网络推广,金昌百度seo更多个人笔记见#xff1a; #xff08;注意点击“继续”#xff0c;而不是“发现新项目”#xff09; github个人笔记仓库 https://github.com/ZHLOVEYY/IT_note gitee 个人笔记仓库 https://gitee.com/harryhack/it_note 个人学习#xff0c;学习过程中还会不断补充 注意点击“继续”而不是“发现新项目” github个人笔记仓库 https://github.com/ZHLOVEYY/IT_note gitee 个人笔记仓库 https://gitee.com/harryhack/it_note 个人学习学习过程中还会不断补充 后续会更新在github上 文章目录 对比功能没有rabbitMQ有rabbitMQwrk 测试分析 链接
项目连接,完整项目代码仓库下载 https://gitee.com/harryhack/it_note/tree/main/%E5%90%8E%E7%AB%AF%E7%AC%94%E8%AE%B0/%E5%B8%B8%E7%94%A8Web%E6%8A%80%E6%9C%AF/RabbitMQ 对比功能
为了说明 RabbitMQ 的引入有什么好处
下载wrk brew install wrk测试指令wrk -t 10 -c 100 -d 30s --latency http://localhost:8080/posts -s post.lua-t使用 10 个线程 并发发送请求。 -c总共建立并保持 100 个 TCP 连接即并发数。 -d 30s测试持续 30 秒。 –latency在测试结束后输出 延迟统计信息 -s post.lua指定 lua 脚本lua 脚本
wrk.method POST
wrk.body {title:Test Post,content:This is a test}
wrk.headers[Content-Type] application/json没有rabbitMQ
图见仓库中 ![[…/…/…/…/attachments/Pasted image 20250601114039.png]]
有rabbitMQ
![[…/…/…/…/attachments/Pasted image 20250601115515.png]]
wrk 测试分析
请求延迟 有 RabbMQ整体效果更好平均值低了 9倍 有 RabbMQ 的里50% 请求延迟6.21ms99% 请求延迟74.02ms 都显著更好吞吐量 显然有 RabbitMQ 的总吞吐量更大总的 request 和每秒的 request稳定性 查看请求延迟百分比以及 stdev 越小越好可以发现有 RabbitMQ 更加稳定
补充
RabbitMQ 支持多个消费者并行处理消息通过增加消费者实例–scale app3可进一步提高吞吐量和降低延迟。 docker-compose up --scale app3 同步版本受限于 MySQL 写入性能扩展性较差需优化数据库如分片或读写分离停止消费者发送 100 个请求然后查看 http://localhost:15672 可以检查数据的完整性存在里面
疑问
问为什么同样都是数据库读取RabbitMQ 的话我的理解就是中间“多了一个管道”这样但是数据库还是一个个读取的理论上应该加了 rabbitMQ 的延迟更高么 答虽然 RabbitMQ 增加了一个中间层消息队列但它带来的 异步处理 和 解耦 效应显著降低了 API 端的延迟 没rabbitMQ 的同步版本流程 用户发送 POST /posts 请求。Gin 服务接收请求解析 JSON 数据。Gin 直接调用 GORM 将帖子写入 MySQLdb.Create(post)。等待 MySQL 完成写入操作包括磁盘 I/O、事务提交等。返回响应给用户。 延迟来自MySQL 写入延迟通常在 10-50ms 级别取决于数据库负载、索引、锁等。以及高并发下MySQL 可能出现锁竞争或连接池瓶颈进一步增加延迟 异步版本有 RabbitMQ 流程 用户发送 POST /posts 请求。Gin 服务接收请求解析 JSON 数据。Gin 将帖子序列化为 JSON推送至 RabbitMQ 队列ch.Publish。立即返回响应给用户不等待数据库写入。消费者后台 goroutine从 RabbitMQ 队列读取消息调用 GORM 写入 MySQL。 延迟来自推送消息到 RabbitMQ通常在 1-2ms 级别RabbitMQ 是内存操作速度很快。API 响应时间仅包含推送消息的耗时不包括数据库写入。 结论RabbitMQ 并没有增加 API 请求的延迟而是将数据库写入的延迟“转移”到消费者端