Antipattern: กำหนดค่าโควต้าที่ไม่มีการเผยแพร่

คุณกำลังดูเอกสารประกอบ 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>