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