Hurley:用 Rust 打造的高性能 HTTP 客户端 + 压测工具
在微服务和分布式系统盛行的今天,几乎所有系统间的通信都离不开 HTTP 协议。开发者通常会面临两个核心需求:
- 需要一个好用的 HTTP 客户端,来验证 API 接口的功能是否正确
- 需要压测工具,来评估系统在高并发下的表现
传统做法往往要切换两套工具:日常调试用 curl / Postman / Insomnia,压测时再换成 wrk、ab、locust、k6 之类。上下文切换成本很高。
而 hurley 想解决的就是这个问题——它把「日常 HTTP 客户端」和「命令行压测工具」合二为一,用一套工具就能完成从单次调试到万级并发压测的全流程,极大降低开发和测试中的割裂感。
核心功能一:作为现代 HTTP 客户端
hurley 在客户端模式下基本实现了现代 HTTP 标准需要的大部分能力,特别适合 RESTful 接口调试。
支持所有常用 Method:GET、POST、PUT、DELETE、PATCH、HEAD
常用参数风格跟 curl 非常接近,迁移成本很低:
# 带自定义 header 和 json body 的 POST 请求
hurley -X POST https://api.example.com/v1/users \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
-d '{"username":"alice","age":28}'
其他常用能力:
-H添加任意 header-d直接传字符串 body-f从文件读取 body(适合传大文件或复杂 JSON)-L自动跟随 301/302 重定向- 支持超时设置、代理、自定义 CA 等(具体参数可查 --help)
核心功能二:一键变成压测工具
最有特色的地方在于:你写好的单条请求,几乎不需要改动,就能直接变成压测场景。
只需要额外加上两个最关键的参数:
-cconcurrency,并发连接数-nnumber,总请求数
# 100 并发发 10 万次请求
hurley -c 100 -n 100000 https://api.example.com/health
更进一步,它还支持基于数据集的随机化压测,非常适合模拟真实用户行为,避免缓存预热导致的假象。
你可以准备一个 JSON 文件(格式很简单):
[
{"method": "GET", "path": "/api/users/1001"},
{"method": "GET", "path": "/api/users/1002"},
{"method": "POST", "path": "/api/orders", "body": {"item_id": 55, "qty": 2}},
{"method": "PUT", "path": "/api/cart/abc123", "body": {"status": "paid"}}
]
然后运行:
hurley -c 50 -n 50000 --dataset requests.json https://staging.api.example.com
hurley 会从中随机(或顺序)挑选请求发送,能有效打散热点、减少缓存命中率偏差,测出更真实的系统表现。
压测结果输出:不止有平均值
hurley 的报告比很多传统工具更关注尾部延迟,输出的统计信息对 SLA 敏感型业务非常有参考价值:
Statistical Summary
Total Requests: 100000
Error Rate: 0.12%
Requests/sec: 1248.7 RPS
Latency Distribution (ms)
p50 (median) : 42.3 ms
p95 : 118.6 ms
p99 : 245.1 ms
p99.9 : 781.4 ms
StdDev / Jitter : 68.2 ms
国内大部分中大型公司对 p99 / p99.9 都非常敏感,平均值好看但 p99 爆炸的场景太常见了,hurley 把这些关键指标放在显眼位置。
底层技术选型(为什么快且安全)
- 异步运行时:tokio
- HTTP 客户端底层:reqwest(但做了大量定制)
- 高精度延迟统计:hdrhistogram(HDR Histogram,工业级延迟统计库)
- 错误处理:thiserror + Rust 强类型系统
这些组合让 hurley 在保持内存安全的前提下,性能可以接近甚至部分场景超过用 C/C++ 写的同类工具。
安装方式(国内开发者最常用两种)
- 推荐:直接用 cargo 安装(需要已安装 Rust 工具链)
cargo install hurley
- 从源码编译(适合需要改代码或用最新版)
git clone https://github.com/dursunkoc/hurley.git
cd hurley
cargo build --release
# 二进制文件在 target/release/hurley
总结与展望
hurley 目前还是一个年轻的开源项目(GitHub: github.com/dursunkoc/h… curl + wrk 的全部工作**,并且用 Rust 的现代异步能力把性能和安全性都做到很高水准。
作者在 roadmap 里提到未来会支持:
- 分布式压测(多机协同)
- HTTP/3 (QUIC) 支持
- 更丰富的断言和结果校验能力
如果你平时既写接口文档、调试联调,又需要做一些轻量级 / 中量级的压测,不想在终端里来回切工具,不妨试试 hurley。它很可能成为你日常工具链里的「瑞士军刀」之一。
有兴趣的同学可以直接去 GitHub star 一波,支持作者继续迭代~