Google Ads API thực thi việc giới hạn tốc độ theo số truy vấn mỗi giây (QPS) trên cả mã khách hàng và dự án Google Cloud một cách độc lập. Google Ads API sử dụng thuật toán token bucket để đo lường các yêu cầu và xác định giới hạn QPS phù hợp. Do đó, giới hạn chính xác sẽ thay đổi tuỳ thuộc vào tải tổng thể của máy chủ tại một thời điểm bất kỳ.
Mục đích của việc áp đặt hạn mức là ngăn một người dùng làm gián đoạn dịch vụ cho những người dùng khác bằng cách (cố ý hoặc vô tình) làm quá tải máy chủ Google Ads API với số lượng lớn yêu cầu.
Những yêu cầu vi phạm giới hạn tốc độ sẽ bị từ chối và báo lỗi: RESOURCE_TEMPORARILY_EXHAUSTED.
Bạn có thể kiểm soát ứng dụng và giảm thiểu hạn mức bằng cách chủ động giảm số lượng yêu cầu và điều chỉnh QPS từ phía máy khách.
Có một số cách để giảm khả năng vượt quá giới hạn tốc độ. Việc làm quen với các khái niệm Mẫu tích hợp doanh nghiệp (EIP) như nhắn tin, gửi lại và điều tiết có thể giúp bạn tạo một ứng dụng khách mạnh mẽ hơn.
Sau đây là các phương pháp được đề xuất theo mức độ phức tạp, với các chiến lược đơn giản hơn ở trên cùng và các cấu trúc mạnh mẽ nhưng tinh vi hơn ở phía sau:
Giới hạn số lượng tác vụ đồng thời
Một nguyên nhân gốc rễ của việc vượt quá giới hạn tốc độ là ứng dụng khách đang tạo ra quá nhiều tác vụ song song. Mặc dù chúng tôi không giới hạn số lượng yêu cầu song song mà một ứng dụng khách có thể có, nhưng số lượng này có thể vượt quá giới hạn yêu cầu mỗi giây ở cấp dự án trên đám mây của Google Cloud.
Bạn nên đặt một giới hạn trên hợp lý cho tổng số tác vụ đồng thời sẽ đưa ra yêu cầu (trên tất cả các quy trình và máy), đồng thời điều chỉnh tăng lên để tối ưu hoá thông lượng mà không vượt quá giới hạn tốc độ.
Ngoài ra, bạn có thể cân nhắc việc điều tiết QPS từ phía máy khách (xem phần Điều tiết và bộ giới hạn tốc độ).
Yêu cầu theo lô
Hãy cân nhắc việc gộp nhiều thao tác vào một yêu cầu duy nhất. Điều này áp dụng nhiều nhất cho các lệnh gọi Mutate đối với nhiều dịch vụ. Ví dụ: nếu đang cập nhật trạng thái cho nhiều thực thể của AdGroupAd, bạn có thể gọi MutateAdGroupAds một lần và truyền vào nhiều operations thay vì gọi MutateAdGroupAds một lần cho mỗi AdGroupAd. Hãy tham khảo hướng dẫn về các thao tác hàng loạt của chúng tôi để xem thêm một số ví dụ.
Mặc dù việc xử lý hàng loạt các yêu cầu giúp giảm tổng số yêu cầu và giảm thiểu giới hạn về tần suất đối với số yêu cầu mỗi phút, nhưng việc này có thể kích hoạt giới hạn về tần suất đối với số thao tác mỗi phút nếu bạn thực hiện một số lượng lớn thao tác đối với một tài khoản duy nhất.
Điều tiết và bộ giới hạn tốc độ
Ngoài việc giới hạn tổng số luồng trong ứng dụng, bạn cũng có thể triển khai bộ giới hạn tốc độ ở phía máy khách. Điều này có thể đảm bảo tất cả các luồng trong các quy trình và / hoặc cụm của bạn đều chịu sự điều chỉnh của một giới hạn QPS cụ thể từ phía máy khách.
Bạn có thể xem Guava Rate Limiter hoặc triển khai thuật toán dựa trên token bucket của riêng bạn cho môi trường được phân cụm. Ví dụ: bạn có thể tạo mã thông báo và lưu trữ chúng trong một bộ nhớ giao dịch dùng chung, chẳng hạn như cơ sở dữ liệu, và mỗi ứng dụng sẽ phải lấy và sử dụng mã thông báo trước khi xử lý yêu cầu. Nếu hết mã thông báo, máy khách sẽ phải đợi cho đến khi đợt mã thông báo tiếp theo được tạo.
Danh sách chờ
Hàng đợi thông báo là giải pháp phân phối tải hoạt động, đồng thời kiểm soát tốc độ yêu cầu và tốc độ tiêu thụ. Có một số lựa chọn hàng đợi tin nhắn (một số là nguồn mở, một số là độc quyền) và nhiều lựa chọn trong số đó có thể hoạt động với nhiều ngôn ngữ.
Khi sử dụng hàng đợi tin nhắn, bạn có thể có nhiều nhà sản xuất đẩy tin nhắn vào hàng đợi và nhiều người tiêu dùng xử lý những tin nhắn đó. Bạn có thể triển khai các cơ chế điều tiết ở phía người dùng bằng cách giới hạn số lượng người dùng đồng thời hoặc triển khai bộ giới hạn tốc độ hoặc bộ điều tiết cho nhà sản xuất hoặc người dùng.
Ví dụ: nếu một người dùng thông báo gặp phải lỗi giới hạn về tốc độ, thì người dùng đó có thể trả yêu cầu về hàng đợi để thử lại. Đồng thời, người dùng này cũng có thể thông báo cho tất cả người dùng khác tạm dừng xử lý trong vài giây để khắc phục lỗi.