Rate Limiter là gì?
Một cách hiểu khái quát nhất, Rate Limiter giới hạn số lượng request truy cập một tài nguyên trên hệ thống từ một tác nhân (người dùng, trình duyệt, máy chủ khác...), trong một khoảng thời gian xác định.
Dựa trên một vài kỹ thuật rate limiter, khi vi phạm hoặc đạt một ngưỡng xác định, các requests đó sẽ bị chặn truy cập vào hệ thống.
Ba tác nhân mà mình nhấn mạnh ở trên: số lượng, tác nhân, thời gian cũng chính là Core Concepts
của Rate Limiter. Cũng là trọng tâm trong bài viết hôm nay.
Rate Limiter với những ví dụ thực tiễn
Chắc hẳn các bạn cũng từng đối mặt hoặc chứng kiến một trong các trường hợp sau:
-
Mã PIN của thẻ đã nhập sai quá 5 lần, vui lòng liên hệ với ngân hàng để mở khoá thẻ
-
Ở một số ứng dụng, khi nhập sai mật khẩu quá nhiều lần bạn sẽ nhận thông báo, đại loại như:
Số lượng yêu cầu vượt quá mức cho phép
(như lỗi 2027 của một ứng dụng khá nổi tiếng ở VN) -
Thông thường IP Việt Nam dễ bị block bởi các website thương mại của nước ngoài do các vụ tấn công trước đây
-
Hay khi yêu cầu nhận OTP quá nhiều trong 1 phút, bạn phải đợi hết thời gian quy định mới có thể yêu cầu một tin nhắn OTP mới
Nếu để ý kĩ các bạn sẽ thấy ví dụ 1&2 liên quan đến yếu tố số lượng, ví dụ 3 đề cập đến yếu tố tác nhân, và cuối cùng là yếu tố thời gian. Đây chính là trọng tâm của Rate Limiter, và một Rate Limiter đúng nghĩa thường kết hợp cả 3 yếu tố trên.
Tại sao lại cần Rate Limiter
Nói là cần nhưng thực chất tuỳ thuộc vào hệ thống của bạn, nếu ở quy mô vừa và nhỏ, nghiễm nhiên có hay không một hệ thống phục vụ cho các tác vụ trên không quá quan trọng.
Nhưng khi hệ thống đạt scale lớn hơn, chắc chắn các bạn cần đặt vấn đề và quan tâm hơn dành cho Rate Limiter, như với các vấn đề sau:
- Bảo mật: kể đến đầu tiên phải là DOS và DDOS, còn đó brute force, credential stuffing attacks hay web scraping... chẳng hạn
- Cân bằng tài nguyên: Đảm bảo server không bị quá tải, phân chia tài nguyên hợp lý / công bằng cho từng user trên hệ thống
- Tiết kiệm chi phí: việc truy cập tài nguyên "có kiểm soát", góp phần giảm thiểu sự gia tăng về mặt chi phí hệ thống.
Một số thuật toán được sử dụng trong Rate Limiter
Có thể kể đến một số thuật toán thường dùng nhất như sau:
- Leaky Bucket
- Fixed Window Counter
- Sliding Window Log
- Sliding Window Counter
Trong bài viết Phần 2, mình sẽ nói chi tiết về các thuật toán này. Các bạn cùng theo dõi nhé
Cảm ơn mọi người đã xem bài viết
Xem thêm
Phần 2: Rate Limiter in System Design. Phần 2 - Các thuật toán thường được sử dụng