Hạn chế tốc độ hoạt động như thế nào? Các chính sách, thuật toán và mã 429

Hạn chế tốc độ hoạt động như thế nào?

Scrapeless Web Unlocker truy xuất nội dung web cho các quy trình thu thập dữ liệu mà trong đó ứng dụng vẫn cần tuân thủ chính sách truy cập nguồn và tự quản lý khối lượng công việc của mình.

Hạn chế tốc độ hoạt động như thế nào?

Hạn chế tốc độ đánh giá hoạt động so với một mức cho phép theo thời gian và quyết định liệu yêu cầu có được tiếp tục hay không. Một chính sách xác định hoạt động đang được đếm, danh tính hoặc phạm vi mà nó thuộc về, tốc độ hoặc mức độ bùng nổ được cho phép, và hành động được thực hiện khi mức cho phép bị dùng hết. Cơ chế này có thể bảo vệ một dịch vụ, phân phối năng lực một cách công bằng hoặc thực thi một thỏa thuận sử dụng.

Mức cho phép yêu cầu không giống với ủy quyền. Một bên gọi có thể có thông tin xác thực hợp lệ nhưng vượt quá mức cho phép của mình, hoặc vẫn dưới ngưỡng tốc độ trong khi lại không có quyền truy cập tài nguyên. Chẩn đoán hai trạng thái này cần phản hồi thực tế và chính sách dịch vụ, chứ không chỉ giả định dựa trên khối lượng lưu lượng.

Tóm tắt

  • Một giới hạn tốc độ cần một danh tính và một quy tắc đếm. Cùng một yêu cầu có thể chịu nhiều chính sách độc lập.
  • Mức cho phép bùng nổ khác với tốc độ duy trì lâu dài. Thuật toán xử lý ranh giới lưu lượng theo những cách khác nhau.
  • Giới hạn đồng thời đếm công việc đang hoạt động. Chúng không trực tiếp định nghĩa số yêu cầu trên mỗi khoảng thời gian.
  • HTTP 429 xác định hạn chế tốc độ ở tầng phản hồi. Các lỗi truy cập và lỗi năng lực khác cần được chẩn đoán riêng.

Chính sách giới hạn tốc độ thực sự đếm cái gì?

Một chính sách giới hạn tốc độ đếm một đơn vị công việc được xác định trong một phạm vi được xác định. Đơn vị có thể là yêu cầu, byte, thao tác hoặc chi phí có trọng số. Phạm vi có thể là một tài khoản, thông tin xác thực, endpoint, tenant hoặc danh tính mạng. Nhiều phạm vi có thể áp dụng đồng thời, như một mức cho phép cho tenant và một mức cho phép riêng cho các thao tác tốn kém.

Danh tính được dùng để đếm ảnh hưởng đến tính công bằng. Một địa chỉ mạng có thể đại diện cho nhiều người dùng không liên quan phía sau hạ tầng chia sẻ. Một tài khoản có thể dùng nhiều thông tin xác thực. Nếu chính sách dự định áp dụng trên toàn tài khoản, việc tạo thêm thông tin xác thực không tạo ra một mức cho phép hợp lệ mới trừ khi dịch vụ nói rõ là có.

Giới hạn có trọng số có thể thể hiện tốt hơn các thao tác tốn kém, nhưng quy tắc chi phí của chúng phải có thể hiểu được. Một truy vấn tìm kiếm trên một bộ sưu tập lớn có thể tiêu thụ nhiều năng lực hơn việc đọc một bản ghi đã được cache. Khách không thể suy ra những trọng số đó chỉ từ kích thước phản hồi hoặc độ trễ.

Tách biệt tốc độ duy trì lâu dài, mức cho phép bùng nổ và hạn ngạch dài hạn. Một dịch vụ có thể cho phép một đợt bùng nổ ngắn trong khi vẫn duy trì tốc độ trung bình thấp hơn. Một quyền sử dụng theo tháng là một ranh giới khác. Đáp ứng được tốc độ ngắn hạn không chứng minh rằng năng lực dài hạn vẫn còn khả dụng.

Cửa sổ cố định và cửa sổ trượt hoạt động như thế nào?

Bộ giới hạn cửa sổ cố định đếm hoạt động trong các khoảng thời gian rời rạc, trong khi bộ giới hạn cửa sổ trượt đánh giá một khoảng thời gian di động. Cửa sổ cố định dễ mô tả, nhưng lưu lượng gần ranh giới khoảng thời gian có thể dồn cụm qua các cửa sổ kề nhau. Đợt bùng nổ đó có chấp nhận được hay không phụ thuộc vào hệ thống được bảo vệ.

Một log trượt có thể giữ lại dấu thời gian cho các yêu cầu liên quan và đếm những yêu cầu vẫn còn nằm trong khoảng thời gian di động. Một bộ đếm trượt có thể xấp xỉ một khoảng thời gian di động từ các bộ đếm lân cận. Hai cách tiếp cận này khác nhau về chi phí trạng thái và độ chính xác, vì vậy “cửa sổ trượt” tự nó không phải là một đặc tả thuật toán đầy đủ.

Bài so sánh thuật toán giới hạn tốc độ mô tả các cửa sổ cố định, cách tiếp cận trượt, token bucket và leaky bucket. Việc lựa chọn nên dựa trên hành vi bùng nổ yêu cầu và ràng buộc triển khai, thay vì khẳng định rằng một phương pháp luôn luôn tốt nhất.

Xác định nguồn thời gian và ngữ nghĩa cập nhật. Trong một dịch vụ phân tán, các worker riêng lẻ đánh giá các bộ đếm đã cũ có thể cho phép nhiều công việc hơn dự kiến. Việc kiểm tra và cập nhật trạng thái cần tính nguyên tử theo yêu cầu của chính sách. Một thuật toán đúng trong một tiến trình đơn lẻ không tự động cung cấp một mức cho phép toàn cục đúng.

Cơ chếÝ tưởng cốt lõiNhược điểm/đánh đổi quan trọng
Cửa sổ cố địnhĐếm trong các khoảng thời gian rời rạcLưu lượng có thể dồn cụm quanh ranh giới
Cửa sổ trượtĐánh giá một khoảng thời gian di độngĐộ chính xác và trạng thái lưu trữ thay đổi theo phương pháp
Token bucketBổ sung mức cho phép có giới hạn theo thời gianCho phép một đợt bùng nổ có kiểm soát
Leaky-bucket shapingPhát hành công việc xếp hàng ở tốc độ kiểm soát đượcCần hàng đợi và chính sách trễ có giới hạn
Bộ giới hạn đồng thờiGiới hạn các thao tác đang hoạt độngThông lượng thay đổi theo thời lượng thao tác

Token bucket và leaky bucket khác nhau như thế nào?

Token bucket bổ sung lại một mức cho phép đến một dung lượng tối đa và tiêu tốn mức cho phép đó khi công việc được chấp nhận. Mức cho phép không dùng đến có thể hỗ trợ một đợt bùng nổ sau đó, được giới hạn bởi dung lượng bucket. Tốc độ bổ sung kiểm soát mức chấp nhận duy trì theo thời gian.

The mô hình lưu lượng token-bucket và leaky-bucket giải thích mối quan hệ giữa tốc độ, kích thước burst và thời gian. Áp dụng các khái niệm đó cho yêu cầu API đòi hỏi phải định nghĩa một token đại diện cho điều gì. Nó có thể đại diện cho một yêu cầu hoặc một đơn vị chi phí khác.

Thuật ngữ leaky-bucket có thể mô tả policing hoặc shaping. Trong một thiết kế shaping, công việc được xếp hàng sẽ được giải phóng với tốc độ được kiểm soát. Hàng đợi cần có kích thước tối đa, chính sách hết hạn và quyết định cho công việc không thể được chấp nhận. Một hàng đợi không giới hạn chỉ đơn giản biến quá tải thành việc sử dụng bộ nhớ và độ trễ ngày càng tăng.

Đừng giả định rằng một khoản burst allowance là dung lượng dự phòng cho mọi endpoint. Nhiều client có thể tiêu thụ allowance của họ cùng một lúc. Lập kế hoạch dung lượng phải tính đến hành vi tổng hợp mà chính sách cho phép.

HTTP 429 Nói Gì Với Client?

HTTP 429 cho biết máy chủ cho rằng client đã gửi quá nhiều yêu cầu trong khoảng thời gian liên quan. Định nghĩa mã trạng thái 429 để cơ chế đếm và chính sách nhận diện client cho máy chủ quyết định. Bản thân mã trạng thái không cho biết allowance thuộc về một credential, người dùng, endpoint hay một phạm vi khác.

Kiểm tra các trường phản hồi được tài liệu hóa và bảng điều khiển của nhà cung cấp để xác định chính sách thực tế. Đừng cho rằng mọi dịch vụ đều dùng cùng tên header hoặc cùng đơn vị. Một giá trị remaining-allowance có thể đề cập đến một chính sách, trong khi một chính sách nghiêm ngặt hơn khác cũng đang được áp dụng.

HTTP 403 mô tả một thao tác bị từ chối hơn là chỉ rõ việc cạn giới hạn tốc độ. HTTP 503 liên quan đến khả dụng của dịch vụ và có thể có nhiều nguyên nhân. Ngữ nghĩa phản hồi HTTP cung cấp sự phân biệt rộng hơn. Một trang truy cập HTML được phục vụ với trạng thái thành công cũng cần được kiểm tra nội dung trước khi một bộ thu nhận chấp nhận nó như dữ liệu.

Khi khối lượng công việc vượt quá allowance đã được tài liệu hóa, hãy dừng chấp nhận công việc bị ảnh hưởng cho đến khi chính sách vận hành của ứng dụng cho phép. Bảo toàn trạng thái nhiệm vụ chưa hoàn thành và báo cáo phạm vi bị giới hạn. Mọi thay đổi về dung lượng hoặc quyền lợi nên thông qua quy trình được nhà cung cấp hỗ trợ.

Tốc Độ Khác Gì Với Độ Đồng Thời?

Tốc độ đo lường hoạt động theo thời gian; độ đồng thời đo có bao nhiêu thao tác đang hoạt động cùng lúc. Một client với một pool worker nhỏ vẫn có thể tạo ra tốc độ yêu cầu cao nếu mỗi thao tác kết thúc nhanh. Tốc độ yêu cầu thấp vẫn có thể tiêu thụ đáng kể dung lượng đồng thời khi các thao tác duy trì hoạt động trong thời gian dài.

Hãy dùng các cơ chế kiểm soát riêng khi cả hai đều quan trọng. Một scheduler có thể quản lý tốc độ chấp nhận, trong khi một worker pool giới hạn công việc đang hoạt động. Các kiểm soát theo nguồn ngăn một hàng đợi toàn cục lớn áp đảo một điểm đến. Các kiểm soát cấp tài khoản bảo toàn allowance kết hợp trên các job vốn độc lập với nhau.

Phân trang minh họa sự khác biệt. Một lần duyệt cursor tuần tự có thể chỉ dùng một yêu cầu đang hoạt động nhưng lại tiêu thụ nhiều yêu cầu trong suốt một lần xuất lớn. Một phiên trình duyệt có thể duy trì hoạt động trong khi chờ tương tác trang ngay cả khi nó gửi ít yêu cầu thu thập. Hãy mô hình hóa những tài nguyên mà nhà cung cấp thực sự giới hạn.

Định nghĩa huỷ bỏ và thời hạn cho công việc đang chờ trong hàng đợi. Một yêu cầu thu thập cũ có thể không còn hữu ích sau thời hạn tươi mới của nó. Loại bỏ công việc đã hết hạn với một lý do được ghi lại trung thực hơn là giao nó muộn dưới một dấu thời gian hoàn thành trông có vẻ hiện tại.

Scrapeless Tham Gia Vào Kiểm Soát Khối Lượng Công Việc Ở Đâu?

Scrapeless cung cấp khả năng thu thập, trong khi ứng dụng của bạn xác định khối lượng công việc được phép và chính sách chấp nhận. Web Unlocker không tạo ra quyền được vượt quá quy tắc truy cập của nguồn. Giữ riêng biệt thông tin đăng nhập thu thập, quyền truy cập nguồn và chính sách lập lịch.

Các yêu cầu về khóa API Scrapeless mô tả xác thực. Một khóa hoạt động không xác nhận đồng thời không giới hạn cũng như không xác nhận quyền truy cập vào mọi sản phẩm. Hãy sử dụng các cơ chế kiểm soát và quyền lợi tài khoản áp dụng cho dịch vụ đã chọn.

Giảm công việc không cần thiết có thể cải thiện cả việc sử dụng dung lượng và độ tươi mới của dữ liệu. Thu thập gia tăng và phát hiện thay đổi bản ghi tách nội dung không đổi khỏi các bản ghi nghiệp vụ đã thay đổi. Chỉ áp dụng các cơ chế đó ở nơi hành vi nguồn hỗ trợ chúng.

Giám sát công việc được chấp nhận, công việc bị từ chối, tuổi hàng đợi, bản ghi được chấp nhận và phạm vi chính sách liên quan. Số lượng yêu cầu thu thập đơn lẻ không thể giải thích liệu một lượt chạy bị giới hạn có tạo ra bộ dữ liệu hữu ích hay không. Sử dụng Scrapeless pricing để lập kế hoạch chi phí song song với các quy tắc truy cập và dung lượng độc lập của nguồn.

Kết luận

Một thiết kế giới hạn tốc độ rõ ràng nêu tên công việc được đếm, danh tính, mô hình thời gian và quyết định khi quá tải. Khớp các kiểm soát chấp nhận và đồng thời với những ranh giới đó, sau đó ghi nhận rõ ràng công việc chưa hoàn thành để việc kiểm soát lưu lượng không âm thầm trở thành dữ liệu bị thiếu.

Đưa Lớp Thu Thập Vào Thực Tiễn

Chọn khả năng thu thập Scrapeless phù hợp với nguồn của bạn, rồi áp dụng các quyết định xác thực và vận hành được mô tả ở trên.

Đăng ký hôm nay và nhận $5 tín dụng miễn phí — không cần thẻ tín dụng.

Nhận $5 Tín Dụng Của Bạn →

FAQ

Mọi phản hồi bị từ chối truy cập có phải là giới hạn tốc độ không?

Không. Truy cập có thể bị từ chối vì quyền hạn, chính sách, xác thực hoặc các điều kiện khác. Hãy sử dụng mã trạng thái, nội dung phản hồi và ngữ cảnh tài khoản được tài liệu hóa để xác định nguyên nhân thực sự.

Một token bucket có thực thi nhịp yêu cầu cố định không?

Không. Một token bucket cho phép các đợt bùng nổ (burst) lên đến mức giới hạn sẵn có của nó. Tốc độ nạp lại quyết định mức chấp nhận duy trì, trong khi một shaping queue có thể kiểm soát tốc độ phát ra.

Giảm số worker có luôn giải quyết được việc cạn giới hạn tốc độ không?

Không. Số lượng worker giới hạn số thao tác đang hoạt động, trong khi tốc độ yêu cầu cũng phụ thuộc vào thời lượng và cách lập lịch. Cần có một chính sách chấp nhận khi dịch vụ giới hạn mức hoạt động theo thời gian.

Nhiều API key có thể dùng chung một giới hạn không?

Có. Nhà cung cấp có thể áp dụng một chính sách trên toàn tài khoản hoặc toàn tenant cho nhiều thông tin xác thực. Hãy tuân theo phạm vi được ghi trong tài liệu thay vì mặc định rằng mỗi key có dung lượng độc lập.

Tài liệu tham khảo