Load Test Tải Tệp Dung Lượng Lớn Với Grafana k6 & Apache JMeter
Kiểm thử tải endpoint download tệp với hàng trăm kết nối đồng thời sử dụng k6 và JMeter. Đo lường băng thông CDN và khả năng chịu tải origin.
Kiểm thử tải endpoint tải xuống tệp đảm bảo rằng CDN, các quy tắc edge caching và máy chủ object storage origin của bạn xử lý được các đợt tăng đột biến đồng thời mà không bị giới hạn băng thông hoặc tỷ lệ lỗi cao. Hướng dẫn này trình bày cách xây dựng load test bằng Grafana k6 và Apache JMeter.
Viết Load Test Tải Xuống Tệp Với Grafana k6
k6 là công cụ load test hiện đại, thân thiện với lập trình viên, được viết bằng Go với script kiểm thử JavaScript.
import http from 'k6/http';
import { check, sleep } from 'k6';
export const options = {
stages: [
{ duration: '30s', target: 20 }, // Tăng dần lên 20 người dùng
{ duration: '1m', target: 50 }, // Duy trì 50 lượt tải xuống đồng thời
{ duration: '20s', target: 0 }, // Giảm dần
],
thresholds: {
http_req_duration: ['p(95)<1500'], // 95% request phải hoàn thành dưới 1,5 giây
http_req_failed: ['rate<0.01'], // Tỷ lệ lỗi phải dưới 1%
},
};
export default function () {
const url = 'https://filedummy.dev/api/download?type=pdf&size=10mb';
const res = http.get(url, {
responseType: 'binary',
});
check(res, {
'mã trạng thái là 200': (r) => r.status === 200,
'độ dài nội dung khớp': (r) => r.body.length === 10485760,
'có header cache-control': (r) => r.headers['Cache-Control'] !== undefined,
});
sleep(1);
}
Chạy benchmark tải xuống đồng thời cao bằng file test 10MB được cache toàn cầu của chúng tôi.
Tải File Mẫu 10MB PDF Test →Cấu Hình Apache JMeter Cho Load Test Tải Xuống
- Tạo Thread Group với số lượng virtual user đồng thời mong muốn (ví dụ: 100 thread, thời gian ramp-up 30 giây).
- Thêm sampler HTTP Request trỏ đến URL tải xuống của bạn.
- Đánh dấu ô Save response as MD5 hash nếu bạn không muốn JMeter lưu trữ payload nhiều gigabyte trong bộ nhớ test runner.
- Thêm Response Assertion kiểm tra HTTP 200 và header hợp lệ.
Các Chỉ Số Cần Theo Dõi Trong Quá Trình Test Tải Xuống Tệp
- Throughput (MB/s): Tổng lưu lượng mạng egress từ origin hoặc CDN của bạn.
- Time to First Byte (TTFB): Làm nổi bật liệu việc tra cứu origin hay ký presigned URL có đang tạo ra bottleneck hay không.
- Đột biến lỗi (HTTP 429 / 503): Chỉ ra giới hạn tốc độ hoặc connection pool upstream bị bão hòa.
Nguyễn Đại Long
Tác GiảBackend Lead • Chuyên gia Kiến trúc Hệ thống Phân tán & Lưu trữ Đám mây
Hơn 4 năm kinh nghiệm thiết kế các hệ thống xử lý tệp tải lên thông lượng lớn, tối ưu hóa cơ sở dữ liệu và hạ tầng phân tán Cloudflare R2 / AWS S3. Người sáng lập FileDummy và Mạng lưới Hệ sinh thái NDL.
Bài viết này có hữu ích không?
Bấm Thích để ủng hộ tác giả và giúp bài viết lan tỏa tới cộng đồng lập trình viên.
Thảo Luận Kỹ Thuật & Đóng Góp Ý Kiến (0)
Chia sẻ kết quả benchmark, phản hồi các trường hợp biên hoặc đặt câu hỏi chuyên môn.
Chưa có bình luận nào. Hãy là lập trình viên đầu tiên bắt đầu cuộc thảo luận!
Câu Hỏi Thường Gặp (FAQ)
What is the difference between k6 and JMeter for load testing?▾
k6 uses JavaScript test scripts, has a modern CLI, generates no GUI overhead, and integrates well with CI/CD. JMeter is a mature Java tool with a GUI, supports more protocol types (FTP, JDBC, SOAP), and has a larger plugin ecosystem. k6 is preferred for HTTP/API load testing.
How do I measure download throughput in k6?▾
k6 automatically tracks http_req_receiving duration and data_received bytes per request. Calculate throughput as data_received / test_duration. Use k6's Trend metric type for custom throughput measurements.
How many virtual users do I need to load test a CDN?▾
CDNs handle massive concurrency. To meaningfully test, bypass the CDN and test the origin directly. Typical origin servers should handle 50–500 concurrent file download requests before saturating CPU or bandwidth.