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