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

คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่ เอกสารประกอบของ Apigee X
info

Apigee Edge มีความสามารถในการกำหนดค่าจำนวนคำขอที่อนุญาตไปยังพร็อกซี API สำหรับ ช่วงเวลาที่เฉพาะเจาะจงโดยใช้นโยบายโควต้า

รูปแบบที่ไม่แนะนำ

คำขอพร็อกซี API สามารถให้บริการโดยคอมโพเนนต์ Edge แบบกระจายตั้งแต่ 1 รายการขึ้นไปที่เรียกว่า Message Processor หากมีการกำหนดค่า Message Processor หลายรายการเพื่อให้บริการคำขอ API โควต้ามีแนวโน้มที่จะเกินเนื่องจาก Message Processor แต่ละรายการจะเก็บ "จำนวน" คำขอที่ประมวลผลไว้เอง

มาอธิบายเรื่องนี้ด้วยตัวอย่างกัน ลองพิจารณานโยบายโควต้าต่อไปนี้สำหรับพร็อกซี API

<!-- /antipatterns/examples/1-6.xml -->
<Quota name="CheckTrafficQuota">
  <Interval>1</Interval>
  <TimeUnit>hour</TimeUnit>
  <Allow count="100"/>
</Quota>

การกำหนดค่าข้างต้นควรอนุญาตคำขอทั้งหมด 100 รายการต่อชั่วโมง

อย่างไรก็ตาม ในทางปฏิบัติ เมื่อ Message Processor หลายรายการให้บริการคำขอ API สิ่งต่อไปนี้จะเกิดขึ้น

ในภาพประกอบด้านบน

  • นโยบายโควต้าได้รับการกำหนดค่าให้คำขอ 100 รายการต่อชั่วโมง
  • คำขอไปยังพร็อกซี API ได้รับการให้บริการโดย Message Processor 2 รายการ
  • Message Processor แต่ละรายการจะเก็บตัวแปรจำนวนโควต้าของตัวเอง 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>