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

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

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

คำขอที่ละเมิดขีดจำกัดอัตราจะถูกปฏิเสธโดยมีข้อผิดพลาด RESOURCE_TEMPORARILY_EXHAUSTED

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

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

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

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

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

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

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

คำขอแบบกลุ่ม

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

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

การควบคุมและตัวจำกัดอัตรา

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

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

การจัดคิว

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

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

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