Rate limiting là một kỹ thuật để hạn chế số lượng yêu cầu mà một người dùng hoặc một ứng dụng có thể gửi đến một máy chủ trong một khoảng thời gian nhất định. Rate limiting có thể giúp bảo vệ máy chủ khỏi bị quá tải, ngăn chặn các cuộc tấn công từ chối dịch vụ (DDoS) và cải thiện hiệu suất của ứng dụng.
Tags: #system-designRate limiting là một kỹ thuật để hạn chế số lượng yêu cầu mà một người dùng hoặc một ứng dụng có thể gửi đến một máy chủ trong một khoảng thời gian nhất định.
Rate limiting có thể giúp bảo vệ máy chủ khỏi bị quá tải, ngăn chặn các cuộc tấn công từ chối dịch vụ (DDoS) và cải thiện hiệu suất của ứng dụng.
Rate limiting cũng có thể giúp người dùng có trải nghiệm tốt hơn khi sử dụng ứng dụng, vì họ sẽ không phải đợi quá lâu để nhận được phản hồi từ máy chủ.
Một ví dụ về rate limiting là khi bạn sử dụng một ứng dụng nhắn tin như WhatsApp hoặc Telegram. Bạn không thể gửi hàng trăm tin nhắn trong một giây đến cùng một người, vì điều đó sẽ làm cho máy chủ của ứng dụng bị quá tải và có thể gây phiền nhiễu cho người nhận. Thay vào đó, ứng dụng sẽ áp dụng giới hạn số lượng tin nhắn mà bạn có thể gửi trong một khoảng thời gian, ví dụ là 10 tin nhắn mỗi phút. Nếu bạn vượt quá giới hạn đó, bạn sẽ nhận được một thông báo lỗi hoặc phải chờ đợi một thời gian nhất định trước khi có thể gửi tiếp.
Rate limiting là một kỹ thuật hữu ích và cần thiết để đảm bảo hoạt động bền vững và an toàn của các ứng dụng trên internet. Tuy nhiên, rate limiting cũng có thể gây khó chịu cho người dùng nếu không được thiết lập hợp lý. Khi áp dụng rate limiting, bạn nên cân nhắc đến các yếu tố như: mục tiêu của ứng dụng, nhu cầu của người dùng, khả năng của máy chủ và các tiêu chuẩn công nghiệp. Chẳng hạn, bạn không nên giới hạn ứng dụng chat chỉ gửi 5 tin nhắn mỗi phút, nhu cầu của người dùng lớn hơn mức này.
Denial of Service (DoS) là một loại tấn công mạng nhằm làm giảm hoặc ngăn chặn khả năng truy cập của người dùng đến một dịch vụ hoặc tài nguyên trực tuyến. Mục tiêu của DoS là làm quá tải hệ thống của nạn nhân bằng cách gửi nhiều yêu cầu hoặc gói tin không hợp lệ đến máy chủ, máy tính hoặc thiết bị mạng của họ.
Kết quả là hệ thống bị chậm, treo hoặc sập, khiến người dùng không thể sử dụng dịch vụ hoặc tài nguyên đó.
Gần như tất cả các API được công bố bởi các công ty công nghệ lớn đều áp dụng một hình thức Rate limiting nào đó.
Giới hạn các request thừa giúp giảm tài nguyên tính toán như CPU, RAM. Nó giúp giảm thiểu số máy chủ cần dùng và phân bổ nhiều tài nguyên hơn cho các API có độ ưu tiên cao. Chẳng hạn các trang thương mại điện tử, các yêu cầu đặt hàng sẽ quan trọng hơn và cần được ưu tiên hơn so với loại yêu cầu khác. Cho nên có thể đặt rate limit cho các yêu cầu đặt hàng ở mức cao hơn.
Rate limiting rất quan trọng đối với các công ty sử dụng các API bên thứ ba có tính phí. Ví dụ, bạn phải trả phí theo mỗi lần gọi đến các API bên ngoài như: kiểm tra tín dụng, thực hiện thanh toán, truy xuất hồ sơ sức khỏe, v.v. Giới hạn số lần gọi API là rất cần thiết để giảm chi phí.
Để giảm tải máy chủ, rate limiter được sử dụng để lọc ra các yêu cầu thừa do bot hoặc hành vi xấu do người dùng gây ra.
Ngoài ra, trong các thời điểm đặc biệt, số lượng request cũng có thể tăng đột biến, chẳng hạn thời điểm mở bán vé bóng đá hoặc show ca nhạc, số lượng request đặt mua tăng cao rất nhanh.
Nếu không có rate limiter, khả năng cao cả hệ thống sẽ quá tải và không còn ai có thể đặt mua vé được nữa.
Rate limiting có thể được sử dụng trong nhiều tình huống để quản lý tài nguyên tính toán một cách hiệu quả.
Rate limiting thường được áp dụng ở cấp độ người dùng, tức là giới hạn sẽ phụ thuộc vào từng người dùng. Hãy xem xét một nền tảng truyền thông xã hội phổ biến nơi người dùng thường xuyên đăng nội dung và bình luận. Để ngăn chặn spam hoặc hoạt động độc hại của bot, nền tảng có thể áp dụng Rate limiting ở cấp độ người dùng. Nó giới hạn số lượng bài đăng hoặc bình luận mà một người dùng có thể thực hiện trong một giờ nhất định.
Rate limiting cũng có thể được áp dụng ở cấp độ toàn ứng dụng, nghĩa là rate limiting sẽ áp dùng cho toàn bộ request, không quan tâm là nó từ đâu đến. Một ví dụ là một nền tảng bán vé trực tuyến. Trong ngày bán vé cho một buổi hòa nhạc lớn, nền tảng có thể dự kiến sẽ có một lượng truy cập rất lớn. Rate limiting ở cấp độ ứng dụng có thể rất hữu ích trong trường hợp này. Nó giới hạn tổng số vé được mua mỗi phút. Việc này bảo vệ hệ thống khỏi việc quá tải và đảm bảo cơ hội công bằng cho mọi người cố gắng mua vé.
Rate limiting ở cấp độ API cũng phổ biến. Hãy xem xét một dịch vụ lưu trữ đám mây cung cấp API để tải lên và tải xuống tệp tin. Để bảo vệ hệ thống khỏi lạm dụng, dịch vụ có thể áp dụng giới hạn cho số lượng request gọi API mà mỗi người dùng có thể thực hiện mỗi phút.
Rate limiting cũng có thể được áp dụng dựa trên loại tài khoản người dùng. Một nền tảng SaaS cung cấp nhiều loại dịch vụ có thể có giới hạn sử dụng khác nhau cho mỗi loại tài khoản người dùng. Người dùng miễn phí có thể có Rate limiting thấp hơn so với người dùng trả tiền. Việc này nâng cao hiệu quả sử dụng tài nguyên trong khi khuyến khích người dùng nâng cấp lên các gói dịch vụ cao hơn.Trên đây chỉ là một số ví dụ để minh hoạ rate limiting có thể được áp dụng cho nhiều trường hợp khác nhau tuỳ vào từng trường hợp và loại hình dịch vụ khác nhau.
Các thuật toán cài đặt rate limiting hiện nay có 3 thành phần chủ đạo
Khi số lượng request vượt ngưỡng cho phép, chúng ta có thể thực hiện các hành động sau:
Mỗi thành phần khác nhau như trên sẽ có các thuật toán khác nhau để cài đặt.