Hurley:用 Rust 打造的高性能 HTTP 客户端 + 压测工具

0 阅读4分钟

Hurley:用 Rust 打造的高性能 HTTP 客户端 + 压测工具

img

在微服务和分布式系统盛行的今天,几乎所有系统间的通信都离不开 HTTP 协议。开发者通常会面临两个核心需求:

  1. 需要一个好用的 HTTP 客户端,来验证 API 接口的功能是否正确
  2. 需要压测工具,来评估系统在高并发下的表现

传统做法往往要切换两套工具:日常调试用 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)

核心功能二:一键变成压测工具

最有特色的地方在于:你写好的单条请求,几乎不需要改动,就能直接变成压测场景

只需要额外加上两个最关键的参数:

  • -c concurrency,并发连接数
  • -n number,总请求数
# 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++ 写的同类工具。

安装方式(国内开发者最常用两种)

  1. 推荐:直接用 cargo 安装(需要已安装 Rust 工具链)
cargo install hurley
  1. 从源码编译(适合需要改代码或用最新版)
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 一波,支持作者继续迭代~