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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

การจัดคิว

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

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

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