คุณกำลังดูเอกสารประกอบ Apigee Edge
ไปที่
เอกสารประกอบเกี่ยวกับ Apigee X. ข้อมูล
Apigee Edge ให้คุณกำหนดค่าจำนวนคำขอที่ได้รับอนุญาตให้กับพร็อกซี API สำหรับ ระยะเวลาที่เจาะจงโดยใช้นโยบายโควต้า
ลาย Antipattern
คำขอพร็อกซี API สามารถให้บริการโดยคอมโพเนนต์ Edge แบบกระจายอย่างน้อย 1 รายการที่เรียกว่า โปรแกรมประมวลผลข้อความ หากมีการกำหนดค่า Message Processor หลายรายการสำหรับ API การแสดงผล อาจทำให้เกินโควต้า เนื่องจากเครื่องมือประมวลผลข้อความแต่ละรายจะเก็บของตัวเองไว้ "จำนวนนับ" ของคำขอที่ประมวลผล
มาลองอธิบายเรื่องนี้ด้วยตัวอย่าง พิจารณานโยบายโควต้าต่อไปนี้สำหรับ API พร็อกซี:
<!-- /antipatterns/examples/1-6.xml --> <Quota name="CheckTrafficQuota"> <Interval>1</Interval> <TimeUnit>hour</TimeUnit> <Allow count="100"/> </Quota>
การกำหนดค่าข้างต้นควรอนุญาตให้มีคำขอรวมทั้งหมด 100 รายการต่อชั่วโมง
อย่างไรก็ตาม ในทางปฏิบัติ เมื่อผู้ประมวลผลข้อความหลายรายให้บริการคำขอ API ดังต่อไปนี้
ในภาพประกอบด้านบน
- นโยบายโควต้าได้รับการกำหนดค่าให้อนุญาตคำขอ 100 รายการต่อชั่วโมง
- คำขอไปยังพร็อกซี API นั้นดำเนินการโดยผู้ประมวลผลข้อความสองราย
- ตัวประมวลผลข้อความแต่ละรายการจะรักษาตัวแปรจำนวนโควต้าของตนเอง
quota_count_mp1
และquota_count_mp2
เพื่อติดตามจำนวนคำขอที่กำลังดำเนินการ - ดังนั้น Message Processor แต่ละรายการจะอนุญาตคำขอ API 100 รายการแยกกัน ผลกระทบสุทธิ คือคำขอที่ได้รับการประมวลผลทั้งหมด 200 รายการ แทนที่จะเป็น 100 คำขอ
ผลกระทบ
สถานการณ์นี้ไม่สามารถทำได้ในการกำหนดค่าโควต้า และมีผลกระทบที่เป็นอันตรายกับ เซิร์ฟเวอร์แบ็กเอนด์ที่ให้บริการคำขอ
โดยเซิร์ฟเวอร์แบ็กเอนด์ทำสิ่งต่อไปนี้ได้
- เครียดเนื่องจากมีปริมาณการเข้าชมขาเข้าสูงกว่าที่คาดไว้
- ไม่ตอบสนองคำขอ API ที่ใหม่กว่าซึ่งนำไปสู่ข้อผิดพลาด 503
แนวทางปฏิบัติแนะนำ
พิจารณาตั้งค่าองค์ประกอบ <Distributed>
เป็น true
ในนโยบายโควต้าเป็น
ตรวจสอบว่ามีการใช้ตัวนับทั่วไปเพื่อติดตามคำขอ API จาก Message Processor ทั้งหมด
คุณตั้งค่าองค์ประกอบ <Distributed>
ได้ดังที่แสดงในข้อมูลโค้ดด้านล่าง
<!-- /antipatterns/examples/1-7.xml --> <Quota name="CheckTrafficQuota"> <Interval>1</Interval> <TimeUnit>hour</TimeUnit> <Distributed>true</Distributed> <Allow count="100"/> </Quota>