ขีดจำกัดอัตรา

Google Ads API บังคับใช้การจำกัดอัตราคำขอตามจำนวนคำค้นหาต่อวินาที (QPS) ทั้งในรหัสลูกค้าและโปรเจ็กต์ Google Cloud แยกกัน Google Ads API ใช้อัลกอริทึม Bucket โทเค็นเพื่อวัดคำขอและกำหนดขีดจำกัด QPS ที่ เหมาะสม ดังนั้นขีดจำกัดที่แน่นอนจะแตกต่างกันไปตามภาระงาน โดยรวมของเซิร์ฟเวอร์ในแต่ละช่วงเวลา

วัตถุประสงค์ของการกำหนดขีดจำกัดอัตราคือเพื่อป้องกันไม่ให้ผู้ใช้รายหนึ่งขัดขวางบริการสำหรับผู้ใช้รายอื่นด้วยการส่งคำขอจำนวนมากไปยังเซิร์ฟเวอร์ Google Ads API (ไม่ว่าจะโดยเจตนาหรือไม่ก็ตาม)

ระบบจะปฏิเสธคำขอที่ละเมิดขีดจำกัดอัตราและแสดงข้อผิดพลาด: RESOURCE_TEMPORARILY_EXHAUSTED

คุณสามารถควบคุมแอปและลดผลกระทบจากขีดจำกัดอัตราได้โดยลดจำนวนคำขอและควบคุม QPS จากฝั่งไคลเอ็นต์

มีหลายวิธีที่จะช่วยลดโอกาสในการส่งคำขอเกินขีดจำกัดอัตรา การทำความคุ้นเคยกับ Enterprise Integration Patterns (EIP) แนวคิด เช่น การรับส่งข้อความ การส่งซ้ำ และการควบคุมปริมาณการรับส่งข้อมูล จะช่วยให้คุณสร้าง แอปไคลเอ็นต์ที่เสถียรมากขึ้นได้

แนวทางปฏิบัติแนะนำต่อไปนี้จัดเรียงตามความซับซ้อน โดยกลยุทธ์ที่ง่ายกว่าจะอยู่ด้านบน และสถาปัตยกรรมที่ซับซ้อนกว่าแต่มีประสิทธิภาพมากกว่าจะอยู่ด้านล่าง

จำกัดงานที่ทำพร้อมกัน

สาเหตุหลักประการหนึ่งที่ทำให้ส่งคำขอเกินขีดจำกัดอัตราคือแอปไคลเอ็นต์สร้างงานแบบขนานมากเกินไป แม้ว่าเราจะไม่ได้จำกัดจำนวนคำขอแบบขนานที่แอปไคลเอ็นต์ส่งได้ แต่การส่งคำขอจำนวนมากอาจทำให้เกินขีดจำกัดคำขอต่อวินาที ที่ระดับโปรเจ็กต์ที่อยู่ในระบบคลาวด์ของ Google ได้

เราขอแนะนำให้กำหนดขอบเขตสูงสุดที่สมเหตุสมผลสำหรับจำนวนงานที่ทำพร้อมกันทั้งหมดซึ่งจะส่งคำขอ (ในทุกกระบวนการและเครื่อง) และปรับเพิ่มขึ้นเพื่อเพิ่มอัตราการส่งข้อมูลให้เหมาะสมโดยไม่เกินการจำกัดอัตราคำขอ

นอกจากนี้ คุณยังพิจารณาควบคุม QPS จากฝั่งไคลเอ็นต์ได้ด้วย (ดู การควบคุมปริมาณการรับส่งข้อมูลและตัวจำกัดอัตรา)

จัดกลุ่มคำขอ

พิจารณาจัดกลุ่มการดำเนินการหลายรายการไว้ในคำขอเดียว วิธีนี้เหมาะที่สุดสำหรับการเรียก Mutate สำหรับบริการต่างๆ เช่น หากคุณ อัปเดตสถานะของ AdGroupAd หลายรายการ คุณ สามารถเรียก MutateAdGroupAds เพียงครั้งเดียวและส่ง operations หลายรายการแทนการเรียก MutateAdGroupAds หนึ่งครั้งสำหรับ AdGroupAd แต่ละรายการ ดูตัวอย่างเพิ่มเติมได้ในคำแนะนำเกี่ยวกับการดำเนินการแบบกลุ่ม

แม้ว่าการจัดกลุ่มคำขอจะช่วยลดจำนวนคำขอทั้งหมดและลดผลกระทบจากขีดจำกัดอัตรา คำขอต่อนาที แต่ก็อาจทำให้เกิดขีดจำกัดอัตราการดำเนินการต่อ นาที หากคุณดำเนินการจำนวนมากกับบัญชีเดียว

การควบคุมปริมาณการรับส่งข้อมูลและตัวจำกัดอัตรา

นอกจากการจำกัดจำนวนเธรดทั้งหมดในแอปพลิเคชันแล้ว คุณยังใช้ตัวจำกัดอัตราในฝั่งไคลเอ็นต์ได้ด้วย ซึ่งจะช่วยให้มั่นใจได้ว่าเธรดทั้งหมดในกระบวนการและ / หรือคลัสเตอร์จะอยู่ภายใต้ขีดจำกัด QPS ที่เฉพาะเจาะจงจากฝั่งไคลเอ็นต์

คุณสามารถดูตัวจำกัดอัตราของ Guava หรือใช้อัลกอริทึม Bucket โทเค็นของคุณเองสำหรับสภาพแวดล้อมแบบคลัสเตอร์ เช่น คุณสามารถสร้างโทเค็นและจัดเก็บไว้ในพื้นที่เก็บข้อมูลธุรกรรมที่แชร์ เช่น ฐานข้อมูล และไคลเอ็นต์แต่ละรายจะต้องรับและใช้โทเค็นก่อนที่จะประมวลผลคำขอ หากใช้โทเค็นหมดแล้ว ไคลเอ็นต์จะต้องรอจนกว่าจะมีการสร้างโทเค็นชุดถัดไป

การจัดคิว

คิวข้อความเป็นโซลูชันสำหรับการกระจายภาระงานการดำเนินการ รวมถึงการควบคุมอัตราคำขอและอัตราผู้ใช้ มีตัวเลือกคิวข้อความมากมายให้เลือกใช้ ทั้งแบบโอเพนซอร์สและแบบเป็นกรรมสิทธิ์ และหลายตัวเลือกสามารถทำงานร่วมกับภาษาต่างๆ ได้

เมื่อใช้คิวข้อความ คุณจะมีผู้ผลิตหลายรายที่ส่งข้อความไปยังคิวและผู้ใช้หลายรายที่ประมวลผลข้อความเหล่านั้นได้ คุณสามารถใช้การควบคุมปริมาณการรับส่งข้อมูลที่ฝั่งผู้ใช้โดยจำกัดจำนวนผู้ใช้ที่ทำพร้อมกัน หรือใช้ตัวจำกัดอัตราหรือการควบคุมปริมาณการรับส่งข้อมูลสำหรับผู้ผลิตหรือผู้ใช้ก็ได้

เช่น หากผู้ใช้ข้อความพบข้อผิดพลาดเกี่ยวกับขีดจำกัดอัตรา ผู้ใช้รายนั้นสามารถส่งคำขอกลับไปยังคิวเพื่อลองอีกครั้ง ในขณะเดียวกัน ผู้ใช้รายนั้นยังสามารถแจ้งให้ผู้ใช้รายอื่นๆ ทั้งหมดหยุดการประมวลผลชั่วคราวเป็นเวลาหลายวินาทีเพื่อกู้คืนจากข้อผิดพลาดได้ด้วย