ขีดจำกัดอัตรา
Google Ads API จะจัดกลุ่มคำขอสำหรับการจำกัดอัตราตามคำค้นหาต่อวินาที (QPS) ต่อรหัสลูกค้า (CID) ของไคลเอ็นต์และโทเค็นของนักพัฒนาแอป ซึ่งหมายความว่าระบบจะบังคับใช้การวัดการใช้งานกับทั้ง CID และโทเค็นของนักพัฒนาแอปแยกกัน Google Ads API ใช้การวัดคำขอด้วยอัลกอริทึม Token Bucket และกำหนดขีดจำกัด QPS ที่เหมาะสม ดังนั้นขีดจำกัดที่แน่นอนจะแตกต่างกันไปตามภาระงานโดยรวมของเซิร์ฟเวอร์ในแต่ละ ช่วงเวลา
วัตถุประสงค์ของการกำหนดขีดจำกัดอัตราคือเพื่อป้องกันไม่ให้ผู้ใช้รายหนึ่งขัดขวางบริการสำหรับผู้ใช้รายอื่นด้วยการส่งคำขอจำนวนมากไปยังเซิร์ฟเวอร์ Google Ads API (ไม่ว่าจะโดยเจตนาหรือไม่ก็ตาม)
ระบบจะปฏิเสธคำขอที่ละเมิดขีดจำกัดอัตราและแสดงข้อผิดพลาด:
RESOURCE_TEMPORARILY_EXHAUSTED
คุณสามารถควบคุมแอปและลดผลกระทบจากขีดจำกัดอัตราได้โดยลดจำนวนคำขออย่างจริงจังและควบคุม QPS จากฝั่งไคลเอ็นต์
มีหลายวิธีที่จะช่วยลดโอกาสในการส่งคำขอเกินขีดจำกัดอัตรา การทำความคุ้นเคยกับ แนวคิด Enterprise Integration Patterns (EIP) เช่น การรับส่งข้อความ การส่งซ้ำ และการควบคุมปริมาณการรับส่งข้อมูล จะช่วยให้คุณสร้างแอปไคลเอ็นต์ที่มีประสิทธิภาพมากขึ้นได้
แนวทางปฏิบัติแนะนำต่อไปนี้จัดเรียงตามความซับซ้อน โดยกลยุทธ์ที่ง่ายกว่าจะอยู่ด้านบน และสถาปัตยกรรมที่มีประสิทธิภาพแต่ซับซ้อนกว่าจะอยู่ด้านล่าง
จำกัดงานที่ทำพร้อมกัน
สาเหตุหลักอย่างหนึ่งที่ทำให้ส่งคำขอเกินขีดจำกัดอัตราคือแอปไคลเอ็นต์สร้างงานแบบขนานมากเกินไป แม้ว่าเราจะไม่ได้จำกัดจำนวนคำขอแบบขนานที่แอปไคลเอ็นต์ส่งได้ แต่การส่งคำขอจำนวนมากอาจทำให้เกินขีดจำกัดคำขอต่อวินาทีที่ระดับโทเค็นของนักพัฒนาแอป
เราขอแนะนำให้ตั้งค่าขอบเขตสูงสุดที่สมเหตุสมผลสำหรับจำนวนงานทั้งหมดที่ทำพร้อมกันซึ่งจะส่งคำขอ (ในทุกกระบวนการและเครื่อง) และปรับเพิ่มขึ้นเพื่อเพิ่มปริมาณงานให้เหมาะสมโดยไม่เกินขีดจำกัดอัตรา
นอกจากนี้ คุณยังพิจารณาควบคุม QPS จากฝั่งไคลเอ็นต์ได้ด้วย (ดู การควบคุมปริมาณการรับส่งข้อมูลและตัวจำกัดอัตรา)
การจัดกลุ่มคำขอ
พิจารณาจัดกลุ่มการดำเนินการหลายรายการไว้ในคำขอเดียว วิธีนี้เหมาะที่สุดสำหรับการเรียก MutateFoo เช่น หากคุณกำลังอัปเดตสถานะสำหรับ
อินสแตนซ์ AdGroupAd หลายรายการ คุณสามารถเรียก
MutateAdGroupAds เพียงครั้งเดียวและ
ส่ง operations หลายรายการแทนที่จะ
เรียก MutateAdGroupAds
หนึ่งครั้งสำหรับ AdGroupAd แต่ละรายการ ดูตัวอย่างเพิ่มเติมได้ในคำแนะนำการดำเนินการแบบกลุ่ม
แม้ว่าการจัดกลุ่มคำขอจะช่วยลดจำนวนคำขอทั้งหมดและลดผลกระทบจากขีดจำกัดอัตราคำขอต่อนาที แต่ก็อาจทำให้เกิดขีดจำกัดอัตราการดำเนินการต่อนาทีหากคุณดำเนินการจำนวนมากกับบัญชีเดียว
การควบคุมปริมาณการรับส่งข้อมูลและตัวจำกัดอัตรา
นอกจากการจำกัดจำนวนเธรดทั้งหมดในแอปพลิเคชันไคลเอ็นต์แล้ว คุณยังใช้ตัวจำกัดอัตราในฝั่งไคลเอ็นต์ได้ด้วย ซึ่งจะช่วยให้มั่นใจได้ว่าเธรดทั้งหมดในกระบวนการและ / หรือคลัสเตอร์จะอยู่ภายใต้ขีดจำกัด QPS ที่เฉพาะเจาะจงจากฝั่งไคลเอ็นต์
คุณสามารถดู Guava Rate Limiter หรือใช้อัลกอริทึม Token Bucket ของคุณเองสำหรับสภาพแวดล้อมแบบคลัสเตอร์ เช่น คุณสามารถสร้างโทเค็นและจัดเก็บไว้ในพื้นที่เก็บข้อมูลธุรกรรมที่แชร์ เช่น ฐานข้อมูล และไคลเอ็นต์แต่ละรายจะต้องได้รับและใช้โทเค็นก่อนที่จะประมวลผลคำขอ หากใช้โทเค็นหมดแล้ว ไคลเอ็นต์จะต้องรอจนกว่าระบบจะสร้างโทเค็นชุดถัดไป
การจัดคิว
คิวข้อความเป็นโซลูชันสำหรับการกระจายภาระงานการดำเนินการ รวมถึงการควบคุมอัตราคำขอและอัตราผู้ใช้ มีตัวเลือกคิวข้อความมากมายให้เลือกใช้ ทั้งแบบโอเพนซอร์สและแบบเป็นกรรมสิทธิ์ และหลายตัวเลือกสามารถทำงานร่วมกับภาษาต่างๆ ได้
เมื่อใช้คิวข้อความ คุณจะมีผู้ผลิตหลายรายที่ส่งข้อความไปยังคิวและผู้ใช้หลายรายที่ประมวลผลข้อความเหล่านั้นได้ คุณสามารถใช้การควบคุมปริมาณการรับส่งข้อมูลที่ฝั่งผู้ใช้โดยจำกัดจำนวนผู้ใช้ที่ทำพร้อมกัน หรือใช้ตัวจำกัดอัตราหรือตัวควบคุมปริมาณการรับส่งข้อมูลสำหรับผู้ผลิตหรือผู้ใช้ก็ได้
ตัวอย่างเช่น หากผู้ใช้ข้อความพบข้อผิดพลาดเกี่ยวกับขีดจำกัดอัตรา ผู้ใช้รายนั้นสามารถส่งคำขอกลับไปยังคิวเพื่อลองอีกครั้งได้ ในขณะเดียวกัน ผู้ใช้รายนั้นยังสามารถแจ้งให้ผู้ใช้รายอื่นๆ ทั้งหมดหยุดการประมวลผลชั่วคราวเป็นเวลา 2-3 วินาทีเพื่อกู้คืนจากข้อผิดพลาดได้ด้วย