Giới hạn số lượng yêu cầu
API Google Ads phân nhóm các yêu cầu giới hạn tốc độ theo số truy vấn mỗi giây (QPS) trên mỗi mã khách hàng (CID) và mã của nhà phát triển, nghĩa là việc đo lượng dữ liệu được thực thi độc lập trên cả mã khách hàng và mã của nhà phát triển. API Google Ads sử dụng thuật toán Token Bucket (Giỏ mã thông báo) để đo lượng yêu cầu và xác định giới hạn QPS thích hợp. Vì vậy, giới hạn chính xác sẽ thay đổi tuỳ thuộc vào tải máy chủ tổng thể tại bất kỳ thời điểm nào.
Mục đích của việc áp dụng giới hạn tốc độ là để ngăn một người dùng làm gián đoạn dịch vụ cho người dùng khác bằng cách (có chủ ý hoặc vô tình) làm quá tải các máy chủ API Google Ads bằng một lượng lớn yêu cầu.
Các yêu cầu vi phạm giới hạn tốc độ sẽ bị từ chối kèm theo lỗi:
RESOURCE_TEMPORARILY_EXHAUSTED
.
Bạn có thể kiểm soát ứng dụng và giảm thiểu giới hạn tốc độ bằng cách chủ động giảm số lượng yêu cầu và điều tiết 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 về Mẫu tích hợp doanh nghiệp (EIP) như Thông báo, Phân phối lại và Điều tiết có thể giúp bạn xây dựng một ứng dụng khách mạnh mẽ hơn.
Các phương pháp được đề xuất sau đây được sắp xếp theo độ 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ẽ hơn nhưng phức tạp hơn ở bên dưới:
Giới hạn 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à ứng dụng khách có thể có, nhưng điều này có thể dễ dàng vượt quá giới hạn Yêu cầu mỗi giây ở cấp mã thông báo nhà phát triển.
Bạn nên đặt giới hạn trên hợp lý cho tổng số tác vụ đồng thời sẽ gửi yêu cầu (trên tất cả các quy trình và máy) và điều chỉnh 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 bài viết Điều tiết và giới hạn tốc độ).
Yêu cầu theo lô
Cân nhắc việc gộp nhiều thao tác vào một yêu cầu. Điều này áp dụng nhiều nhất cho các lệnh gọi MutateFoo
. Ví dụ: nếu đang cập nhật trạng thái cho nhiều thực thể của AdGroupAd
, thay vì gọi MutateAdGroupAds
một lần cho mỗi AdGroupAd
, bạn có thể gọi MutateAdGroupAds
một lần và truyền vào nhiều operations
. Hãy tham khảo hướng dẫn về thao tác hàng loạt để biết thêm một số ví dụ.
Mặc dù việc tạo yêu cầu hàng loạt làm giảm tổng số yêu cầu và giảm giới hạn tốc độ Yêu cầu/phút, nhưng việc này có thể kích hoạt giới hạn tốc độ Thao tác/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.
Điều tiết và giới hạn tốc độ
Ngoài việc giới hạn tổng số luồng trong ứng dụng khách, bạn cũng có thể triển khai bộ hạn chế tốc độ ở phía máy khách. Điều này có thể đảm bảo tất cả các luồng trên các quy trình và / hoặc cụm của bạn đều tuân theo một giới hạn QPS cụ thể từ phía máy khách.
Bạn có thể xem Công cụ giới hạn tốc độ Guava hoặc triển khai thuật toán dựa trên Bộ chứa mã thông báo của riêng bạn cho môi trường cụm. Ví dụ: bạn có thể tạo mã thông báo và lưu trữ các mã thông báo đó trong 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 thu nạp và sử dụng một mã thông báo trước khi xử lý yêu cầu. Nếu hết mã thông báo, ứng dụng sẽ phải đợi cho đến khi tạo xong lô mã thông báo tiếp theo.
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à người dùng. Có một số tuỳ chọn hàng đợi thông báo – một số là nguồn mở, một số là độc quyền – và nhiều tuỳ chọn trong số đó có thể hoạt động với nhiều ngôn ngữ.
Khi sử dụng hàng đợi thông báo, bạn có thể có nhiều trình tạo đẩy thông báo vào hàng đợi và nhiều trình tiêu thụ xử lý các thông báo đó. Bạn có thể triển khai bộ đ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 trình dùng thông báo gặp lỗi giới hạn tốc độ, thì trình dùng đó có thể trả về yêu cầu vào hàng đợi để thử lại. Đồng thời, trình tiêu thụ đó cũng có thể thông báo cho tất cả trình tiêu thụ khác tạm dừng xử lý trong một số giây để khắc phục lỗi.