Giới thiệu
Trong thế giới phát triển backend, mọi kỹ sư đều cần một vài công cụ kiểm tra tải trong bộ công cụ của mình. Khi muốn kiểm tra nhanh hiệu suất của một API, ab thường là công cụ đầu tiên được nghĩ đến. Nếu chúng ta muốn tối đa hóa QPS trên một máy, wrk là lựa chọn phổ biến. Còn khi cần viết các kịch bản kiểm tra phức tạp, k6 với khả năng lập trình mạnh mẽ đã trở thành sự lựa chọn của nhiều đội nhóm. Tất nhiên, còn nhiều công cụ khác nữa.
Tất cả những công cụ này đều tuyệt vời, nhưng công nghệ không ngừng phát triển. HTTP/3 đã chuyển từ "tương lai" sang "hiện tại", việc sử dụng WebSocket ngày càng phổ biến, và trong thế giới DevOps ngày nay, những báo cáo hiệu suất tĩnh không còn đủ nữa. Chúng ta thực sự cần dữ liệu hiệu suất theo thời gian thực, tích hợp liền mạch vào hệ thống giám sát của mình.
Điều này đặt ra một câu hỏi:
Có công cụ nào đơn giản và dễ sử dụng như ab, hỗ trợ các giao thức hiện đại như HTTP/3 và WebSocket, và tích hợp với các hệ thống giám sát như Prometheus dễ dàng như k6 không?
Câu trả lời là có. Xin giới thiệu với bạn một ngôi sao đang nổi—perftest.
PerfTest là gì?
perftest là một công cụ kiểm tra tải nhẹ, hiệu suất cao được tích hợp vào framework Sponge Go. Hãy nghĩ về nó như một “chiến binh tinh nhuệ” được thiết kế cho các giao thức mạng hiện đại và giám sát đám mây.
Điểm nổi bật chính:
- Đa dạng về giao thức: Hỗ trợ natively cho HTTP/1.1, HTTP/2, HTTP/3 và WebSocket.
- Chế độ linh hoạt: Chạy một số lượng yêu cầu cố định (
--total) hoặc áp dụng tải liên tục trong một khoảng thời gian nhất định (--duration). - Tích hợp giám sát liền mạch: Tính năng nổi bật của nó.
perftestcó thể truyền phát các số liệu thời gian thực (QPS, độ trễ, v.v.) trực tiếp vào Prometheus hoặc bất kỳ điểm cuối HTTP tùy chỉnh nào—các bảng điều khiển Grafana của bạn sẽ ngay lập tức sáng lên. - Đơn giản: Tất cả đều được điều khiển thông qua các tham số CLI sạch sẽ, tối giản, khiến việc học trở nên cực kỳ dễ dàng.
Khi nào nên sử dụng PerfTest?
perftest thực sự tỏa sáng trong một số tình huống:
-
Kiểm tra các giao thức tiên tiến
Nếu dịch vụ của bạn hỗ trợ HTTP/3 hoặc gRPC-Web (dựa trên HTTP/2+),perftestgiúp bạn đo lường lợi ích hiệu suất mà không gặp rắc rối. -
Kiểm tra tải giao tiếp thời gian thực
Có một ứng dụng trò chuyện, nền tảng giao dịch thời gian thực hoặc trình soạn thảo cộng tác sử dụng WebSockets?perftestcó thể mô phỏng tải lớn của khách hàng và các cơn bão tin nhắn tần suất cao để xác thực khả năng của backend của bạn. -
Kiểm tra hiệu suất trong CI/CD
Thêmperftestnhư một bước trong pipeline của bạn. Sau mỗi lần hợp nhất, nó có thể đo lường các điểm cuối quan trọng, gửi số liệu đến Prometheus và kích hoạt cảnh báo khi hiệu suất giảm. -
Xác thực nhanh và đơn giản
Không muốn viết một kịch bảnk6đầy đủ chỉ để kiểm tra một API? Vớiperftest, bạn có thể chạy một bài kiểm tra đồng thời chỉ trong vài giây và nhận báo cáo chi tiết.
Bắt đầu với PerfTest
Vì perftest được xây dựng bằng Go, việc cài đặt cực kỳ đơn giản:
go install github.com/go-dev-frame/sponge/cmd/sponge@latest
Sau khi cài đặt, bạn đã sẵn sàng để chạy các bài kiểm tra. Hãy xem một số ví dụ.
Ví dụ kiểm tra tải HTTP
Đo lường một điểm cuối HTTP/1.1 với 50 worker và 1 triệu yêu cầu:
sponge perftest http \
--worker=50 \
--total=1000000 \
--url=http://localhost:8080/user/1
Chạy một bài kiểm tra liên tục trong 1 phút:
sponge perftest http \
--worker=50 \
--duration=1m \
--url=http://localhost:8080/user/1
Chuyển sang HTTP/2 hoặc HTTP/3? Chỉ cần thay thế http bằng http2 hoặc http3. Mọi thứ còn lại vẫn giữ nguyên.
Muốn có số liệu thời gian thực trong Prometheus? Thêm --prometheus-job-name và --push-url.
Cuối cùng, bạn sẽ nhận được một báo cáo chi tiết:
========== Báo cáo Kiểm tra Hiệu suất HTTP/1.1 ==========
[Yêu cầu]
• Tổng số yêu cầu: 1000000
• Thành công: 1000000 (100%)
• Thất bại: 0
• Tổng thời gian: 8.55 s
• Tốc độ (QPS): 116914.5 req/sec
[Độ trễ]
• Trung bình: 0.42 ms
• Tối thiểu: 0 ms
• Tối đa: 22.41 ms
• P25: 0 ms
• P50: 0.51 ms
• P95: 1.18 ms
[Chuyển dữ liệu]
• Đã gửi: 25000000 Bytes
• Đã nhận: 49000000 Bytes
[Mã trạng thái]
• 200: 1000000
[Thống kê đẩy]
• ok
Thích giao diện người dùng hơn thay vì CLI? Chỉ cần chạy:
sponge run
Sau đó, điều hướng đến Public → Tạo Báo cáo Kiểm tra Hiệu suất, điền các tham số và bắt đầu kiểm tra.
Mô phỏng cơn bão tin nhắn WebSocket
Hãy mô phỏng 100 người dùng trò chuyện đồng thời, mỗi người gửi 2 tin nhắn mỗi giây (mỗi 500ms) trong 5 phút:
sponge perftest websocket \
--worker=100 \
--duration=5m \
--send-interval=500ms \
--body={\"event\":\"message\",\"payload\":\"Hello, perftest!\"} \
--url=ws://localhost:8080/ws
Cuối cùng, bạn sẽ thấy các thống kê rõ ràng về tỷ lệ kết nối thành công, số tin nhắn đã gửi/nhận và tốc độ.
So sánh PerfTest với ab, wrk, k6
perftest so với các công cụ truyền thống như thế nào?
| Tính năng / Công cụ | ab | wrk / wrk2 | k6 | perftest |
|---|---|---|---|---|
| Tập trung chính | Xác thực đơn giản | Hiệu suất cực cao | Kịch bản phức tạp & UX cho nhà phát triển | Giao thức hiện đại & giám sát |
| HTTP/1.1 | ✅ | ✅ | ✅ | ✅ |
| HTTP/2 | ❌ | ❌ (nhánh đặc biệt) | ✅ | ✅ |
| HTTP/3 (QUIC) | ❌ | ❌ | ❌ (cộng đồng thêm vào) | ✅ (natively) |
| WebSocket | ❌ | ❌ (cần kịch bản) | ✅ | ✅ |
| Số liệu thời gian thực | ❌ | ❌ | ✅ | ✅ (natively) |
| Lập trình | Không | Lua | JavaScript | Không |
| Dễ sử dụng | Rất thấp | Trung bình | Trung bình | Rất thấp |
Phân tích sâu
- ab (Người bảo vệ cũ): Đơn giản và đáng tin cậy, nhưng giới hạn ở HTTP/1.1.
- wrk (Tốc độ): Nhanh như chớp, tuyệt vời cho thông lượng thô, nhưng hỗ trợ giao thức yếu.
- k6 (Cỗ máy mạnh mẽ): Hệ sinh thái phong phú, lập trình mạnh mẽ, được sử dụng rộng rãi, nhưng hỗ trợ HTTP/3 vẫn chưa chính thức.
- perftest (Chuyên gia): Xuất sắc trong hai lĩnh vực:
- Hỗ trợ giao thức tiên tiến (HTTP/3, WebSocket).
- Tích hợp natively với Prometheus cho khả năng quan sát dễ dàng.
Kết luận
perftest là một công cụ kiểm tra tải hiện đại, tập trung vào hiệu suất được thiết kế cho thế giới đám mây ngày nay.
Nó hoàn hảo nếu bạn cần:
- Đo lường các giao thức mới như HTTP/3 hoặc WebSocket.
- Truyền tải số liệu hiệu suất trực tiếp vào Prometheus và trực quan hóa chúng trong Grafana.
- Thêm kiểm tra hiệu suất nhẹ vào pipeline CI/CD của bạn.
- Sử dụng một thứ mạnh mẽ hơn
abnhưng nhẹ hơnk6.
Tóm lại, perftest giống như một con dao sắc bén: chính xác, hiệu quả và được xây dựng cho kiểm tra hiệu suất hiện đại. Trong thời đại mà các công cụ ngày càng lớn và nặng, tiện ích nhỏ nhưng mạnh mẽ này có thể chính là thứ bạn đang tìm kiếm.
Sắp tới: Kiểm tra cụm phân tán, với một bộ điều phối trung tâm quản lý nhiều nút.
💡 Về Sponge
Sponge là một framework Go mạnh mẽ và dễ sử dụng. Với triết lý “Định nghĩa là Mã”, nó giúp việc xây dựng các dịch vụ backend ổn định, đáng tin cậy và hiệu suất cao trở nên dễ dàng thông qua cách tiếp cận low-code. Nó hỗ trợ RESTful API, gRPC, HTTP+gRPC và gRPC Gateway.
Trợ lý AI tích hợp của nó có thể phân tích mã dịch vụ của bạn trong ngữ cảnh và tạo ra logic kinh doanh một cách thông minh, cải thiện đáng kể hiệu quả phát triển.
👉 GitHub: https://github.com/go-dev-frame/sponge