นโยบาย SpikeArrest

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

ไอคอน Spike Arrest จาก Edge UI

นโยบาย Spike Arrest ช่วยป้องกันการเข้าชมที่เพิ่มขึ้นอย่างรวดเร็วด้วยองค์ประกอบ <Rate> องค์ประกอบนี้จะควบคุมจำนวนคำขอที่พร็อกซี API ประมวลผลและส่งไปยังแบ็กเอนด์เพื่อป้องกันความล่าช้าด้านประสิทธิภาพและช่วงพัก

องค์ประกอบ <SpikeArrest>

กำหนดนโยบายการจับกุม Spike Arrest

ค่าเริ่มต้น ดูแท็บนโยบายเริ่มต้นด้านล่าง
ต้องระบุหรือไม่ ไม่บังคับ
ประเภท ออบเจ็กต์ที่ซับซ้อน
องค์ประกอบระดับบน ไม่มี
องค์ประกอบย่อย <Identifier>
<MessageWeight>
<Rate> (ต้องระบุ)
<UseEffectiveCount>

ไวยากรณ์

องค์ประกอบ <SpikeArrest> ใช้ไวยากรณ์ต่อไปนี้

<SpikeArrest
  continueOnError="[false|true]"
  enabled="[true|false]"
  name="policy_name"
>
  <DisplayName>display_name</DisplayName>
  <Properties/>
  <Identifier ref="flow_variable"/>
  <MessageWeight ref="flow_variable"/>
  <Rate ref="flow_variable">rate[pm|ps]</Rate>
  <UseEffectiveCount>[false|true]</UseEffectiveCount>
</SpikeArrest>

นโยบายเริ่มต้น

ตัวอย่างต่อไปนี้แสดงการตั้งค่าเริ่มต้นเมื่อคุณเพิ่มนโยบาย Spike Arrest ลงในขั้นตอนใน Edge UI

<SpikeArrest async="false" continueOnError="false" enabled="true" name="Spike-Arrest-1">
  <DisplayName>Spike Arrest-1</DisplayName>
  <Properties/>
  <Identifier ref="request.header.some-header-name"/>
  <MessageWeight ref="request.header.weight"/>
  <Rate>30ps</Rate>
  <UseEffectiveCount>true</UseEffectiveCount>
</SpikeArrest>

องค์ประกอบนี้มีแอตทริบิวต์ต่อไปนี้ซึ่งมักใช้กับนโยบายทั้งหมด

แอตทริบิวต์ ค่าเริ่มต้น จําเป็นไหม คำอธิบาย
name ไม่มีข้อมูล จำเป็น

ชื่อภายในของนโยบาย ค่าของแอตทริบิวต์ name มีตัวอักษร ตัวเลข ช่องว่าง ขีดกลาง ขีดล่าง และจุดได้ ค่านี้ต้องมีความยาวไม่เกิน 255 อักขระ

ใช้องค์ประกอบ <DisplayName> เพื่อติดป้ายกํากับนโยบายในตัวแก้ไขพร็อกซี UI การจัดการด้วยชื่อภาษาอื่นที่เป็นธรรมชาติได้

continueOnError เท็จ ไม่บังคับ ตั้งค่าเป็น "false" เพื่อแสดงข้อผิดพลาดเมื่อนโยบายล้มเหลว ซึ่งเป็นลักษณะการทํางานที่คาดหวังตามนโยบายส่วนใหญ่ ตั้งค่าเป็น "จริง" เพื่อดําเนินการโฟลว์ข้อมูลต่อไป แม้ว่านโยบายจะล้มเหลวก็ตาม
enabled จริง ไม่บังคับ ตั้งค่าเป็น "true" เพื่อบังคับใช้นโยบาย ตั้งค่าเป็น "false" เพื่อ "ปิด" นโยบาย ระบบจะไม่บังคับใช้นโยบายแม้ว่าจะยังคงแนบไปกับโฟลว์
async   เท็จ เลิกใช้ แอตทริบิวต์นี้เลิกใช้งานแล้ว

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงวิธีที่คุณสามารถใช้นโยบาย Spike Arrest ได้

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้กำหนดอัตราเป็น 5 ต่อวินาที

<SpikeArrest name="Spike-Arrest-1">
  <Rate>5ps</Rate>
</SpikeArrest>

นโยบายจะลดอัตราคำขอให้มีคำขอ 1 รายการในทุกๆ 200 มิลลิวินาที (1,000/5)

ตัวอย่างที่ 2

ตัวอย่างต่อไปนี้กำหนดอัตราค่าบริการเป็น 12 ต่อนาที

<SpikeArrest name="Spike-Arrest-1">
  <Rate>12pm</Rate>
</SpikeArrest>

นโยบายตัวอย่างนี้จะลดอัตราคำขอให้มี 1 คำขอในทุกๆ 5 วินาที (60/12) ได้อย่างราบรื่น

ตัวอย่าง 3

ตัวอย่างต่อไปนี้จำกัดคำขอไว้ที่ 12 รายการต่อนาที (1 คำขออนุญาตทุก 5 วินาที หรือ 60/12)

<SpikeArrest name="Spike-Arrest-1">
  <Rate>12pm</Rate>
  <Identifier ref="client_id" />
  <MessageWeight ref="request.header.weight" />
</SpikeArrest>

นอกจากนี้องค์ประกอบ <MessageWeight> ยังยอมรับค่าที่กำหนดเอง (ส่วนหัว weight) ที่ปรับน้ำหนักข้อความสำหรับแอปหรือไคลเอ็นต์เฉพาะด้วย ซึ่งจะช่วยให้ควบคุมการควบคุมได้มากขึ้นสำหรับเอนทิตีที่ระบุด้วยองค์ประกอบ <Identifier>

ตัวอย่าง 4

ตัวอย่างต่อไปนี้สั่งให้ Spike Arrest ค้นหาค่ารันไทม์ที่กําหนดไว้ผ่านคําขอที่ส่งผ่านเป็นตัวแปรโฟลว์ request.header.runtime_rate

<SpikeArrest name="Spike-Arrest-1">
  <Rate ref="request.header.runtime_rate" />
</SpikeArrest>

ค่าของตัวแปรโฟลว์ต้องอยู่ในรูปแบบ intpm หรือ intps

หากต้องการลองใช้ตัวอย่างนี้ ให้ดำเนินการส่งคำขอดังตัวอย่างต่อไปนี้

curl http://myorg-myenv.apigee.net/price -H 'runtime_rate:30ps'

การอ้างอิงองค์ประกอบย่อย

ส่วนนี้อธิบายองค์ประกอบย่อยของ <SpikeArrest>

<DisplayName>

ใช้เพิ่มเติมจากแอตทริบิวต์ name เพื่อติดป้ายกำกับนโยบายในเครื่องมือแก้ไขพร็อกซี UI การจัดการด้วยชื่ออื่นที่ฟังดูเป็นธรรมชาติมากขึ้น

องค์ประกอบ <DisplayName> เหมือนกันในนโยบายทั้งหมด

ค่าเริ่มต้น ไม่มี
ต้องระบุหรือไม่ ไม่บังคับ หากไม่ระบุ <DisplayName> ระบบจะใช้ค่าของแอตทริบิวต์ name ของนโยบาย
ประเภท สตริง
องค์ประกอบระดับบน <PolicyElement>
องค์ประกอบย่อย ไม่มี

องค์ประกอบ <DisplayName> ใช้ไวยากรณ์ต่อไปนี้

ไวยากรณ์

<PolicyElement>
  <DisplayName>policy_display_name</DisplayName>
  ...
</PolicyElement>

ตัวอย่าง

<PolicyElement>
  <DisplayName>My Validation Policy</DisplayName>
</PolicyElement>

องค์ประกอบ <DisplayName> ไม่มีแอตทริบิวต์หรือองค์ประกอบย่อย

<Identifier>

ให้คุณเลือกวิธีการจัดกลุ่มคำขอเพื่อให้ใช้นโยบาย Spike Arrest ได้โดยอิงจากไคลเอ็นต์ ตัวอย่างเช่น คุณจัดกลุ่มคำขอตามรหัสนักพัฒนาซอฟต์แวร์ได้ ซึ่งในกรณีนี้คำขอของนักพัฒนาซอฟต์แวร์แต่ละรายจะนับรวมอยู่ในอัตราการจับกุมตัว (Spike Arrest) ของตนเอง ไม่ใช่คำขอทั้งหมดที่ส่งไปยังพร็อกซี

ใช้ร่วมกับองค์ประกอบ <MessageWeight> เพื่อให้ควบคุมการควบคุมคำขอได้ละเอียดยิ่งขึ้น

หากปล่อยองค์ประกอบ <Identifier> ว่างไว้ ระบบจะบังคับใช้ขีดจำกัดอัตรา 1 อัตราสำหรับคำขอทุกรายการในพร็อกซี API นั้น

ค่าเริ่มต้น ไม่มี
ต้องระบุหรือไม่ ไม่บังคับ
ประเภท สตริง
องค์ประกอบระดับบน <SpikeArrest>
องค์ประกอบย่อย ไม่มี

ไวยากรณ์

<SpikeArrest
  continueOnError="[false|true]"
  enabled="[true|false]"
  name="policy_name"
>
  <Identifier ref="flow_variable"/>
</SpikeArrest>
        

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้ใช้นโยบาย Spike Arrest ต่อรหัสนักพัฒนาแอป

<SpikeArrest name="Spike-Arrest-1">
  <Identifier ref="developer.id"/>
  <Rate>42pm</Rate/>
</SpikeArrest>

ตารางต่อไปนี้อธิบายแอตทริบิวต์ของ <Identifier>

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การมีบุคคลอยู่
ref ระบุตัวแปรที่ Spike Arrest จัดกลุ่มคำขอที่เข้ามาใหม่ คุณใช้ตัวแปรโฟลว์ใดก็ได้เพื่อระบุไคลเอ็นต์ที่ไม่ซ้ำกัน เช่น ที่มีในนโยบาย ConfirmAPIKey คุณยังตั้งค่าตัวแปรที่กำหนดเองโดยใช้นโยบาย JavaScript หรือนโยบาย AssignMessage ได้ด้วย ไม่มี ต้องระบุ

องค์ประกอบนี้ยังมีการกล่าวถึงในโพสต์ชุมชน Apigee อีกด้วย http://community.apigee.com/questions/2807/how-does-the-edge-quota-policy-work-when-no-identi.html

<MessageWeight>

ระบุการถ่วงน้ำหนักที่กำหนดไว้สำหรับแต่ละข้อความ น้ำหนักข้อความจะแก้ไขผลกระทบของคำขอเดียวที่มีต่อการคำนวณอัตราการจับกุมอย่างฉับพลัน น้ำหนักของข้อความอาจเป็นตัวแปรโฟลว์ใดก็ได้ เช่น ส่วนหัว HTTP, พารามิเตอร์การค้นหา, พารามิเตอร์ของฟอร์ม หรือเนื้อหาข้อความ คุณยังใช้ตัวแปรที่กำหนดเองโดยใช้นโยบาย JavaScript หรือนโยบาย AssignMessage ได้อีกด้วย

ใช้ร่วมกับ <Identifier> เพื่อควบคุมคำขอโดยไคลเอ็นต์หรือแอปที่เจาะจง

เช่น หากการจับกุม "การจับกุม" <Rate> คือ 10pm และแอปส่งคำขอที่มีน้ำหนักเท่ากับ 2 ระบบจะอนุญาตเพียง 5 ข้อความต่อนาทีจากไคลเอ็นต์นั้น เนื่องจากคำขอแต่ละรายการจะนับเป็น 2

ค่าเริ่มต้น ไม่มี
ต้องระบุหรือไม่ ไม่บังคับ
ประเภท จำนวนเต็ม
องค์ประกอบระดับบน <SpikeArrest>
องค์ประกอบย่อย ไม่มี

ไวยากรณ์

<SpikeArrest
  continueOnError="[false|true]"
  enabled="[true|false]"
  name="policy_name"
>
  <MessageWeight ref="flow_variable"/>
</SpikeArrest>

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้จำกัดคำขอไว้ที่ 12 รายการต่อนาที (1 คำขออนุญาตทุก 5 วินาที หรือ 60/12)

<SpikeArrest name="Spike-Arrest-1">
  <Rate>12pm</Rate>
  <Identifier ref="client_id" />
  <MessageWeight ref="request.header.weight" />
</SpikeArrest>

ในตัวอย่างนี้ <MessageWeight> ยอมรับค่าที่กำหนดเอง (ส่วนหัว weight ในคำขอ) ที่ปรับน้ำหนักข้อความสำหรับไคลเอ็นต์เฉพาะ ซึ่งจะช่วยให้ควบคุมการควบคุมได้มากขึ้นสำหรับเอนทิตีที่ระบุด้วยองค์ประกอบ <Identifier>

ตารางต่อไปนี้อธิบายแอตทริบิวต์ของ <MessageWeight>

แอตทริบิวต์ คำอธิบาย การมีบุคคลอยู่ ค่าเริ่มต้น
ref ระบุตัวแปรโฟลว์ที่มีน้ำหนักข้อความสำหรับไคลเอ็นต์ที่ระบุ ตัวแปรนี้อาจเป็นตัวแปรโฟลว์ใดก็ได้ เช่น พารามิเตอร์การค้นหา HTTP, ส่วนหัว หรือเนื้อหาข้อความ ดูข้อมูลเพิ่มเติมได้ที่ข้อมูลอ้างอิงตัวแปรโฟลว์ คุณยังตั้งค่าตัวแปรที่กำหนดเองโดยใช้นโยบาย JavaScript หรือนโยบาย AssignMessage ได้ด้วย ต้องระบุ ไม่มีข้อมูล

<Rate>

ระบุอัตราที่จะจำกัดการรับส่งข้อมูลที่เพิ่มขึ้นอย่างรวดเร็ว (หรือการเพิ่มขึ้นอย่างรวดเร็ว) โดยการตั้งค่าจำนวนคำขอที่อนุญาตในช่วงเวลาต่อนาทีหรือต่อวินาที นอกจากนี้ คุณยังใช้องค์ประกอบนี้ร่วมกับ <Identifier> และ <MessageWeight> เพื่อควบคุมการรับส่งข้อมูลได้อย่างราบรื่นระหว่างรันไทม์ด้วยการยอมรับค่าจากไคลเอ็นต์

ค่าเริ่มต้น ไม่มี
ต้องระบุหรือไม่ ต้องระบุ
ประเภท จำนวนเต็ม
องค์ประกอบระดับบน <SpikeArrest>
องค์ประกอบย่อย ไม่มี

ไวยากรณ์

คุณระบุราคาได้ด้วยวิธีใดวิธีหนึ่งต่อไปนี้

  • อัตราคงที่ที่คุณระบุเป็นส่วนเนื้อหาขององค์ประกอบ <Rate>
  • ค่าตัวแปรที่ไคลเอ็นต์ส่งได้ ระบุชื่อตัวแปรโฟลว์โดยใช้แอตทริบิวต์ ref
<SpikeArrest
  continueOnError="[false|true]"
  enabled="[true|false]"
  name="policy_name"
>
  <Rate ref="flow_variable">rate[pm|ps]</Rate>
</SpikeArrest>

ค่าราคาที่ถูกต้อง (กำหนดไว้เป็นค่าตัวแปรหรือในส่วนเนื้อหาขององค์ประกอบ) ต้องสอดคล้องกับรูปแบบต่อไปนี้

  • intps (จำนวนคำขอต่อวินาที โดยปรับให้เป็นช่วงเวลาของมิลลิวินาที)
  • intpm (จำนวนคำขอต่อนาที ปรับเรียบเป็นช่วงวินาที)

ค่าของ int ต้องเป็นจำนวนเต็มบวก ไม่ใช่ 0

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้กำหนดอัตราคำขอเป็น 5 รายการต่อวินาที

<SpikeArrest name="Spike-Arrest-1">
  <Rate>5ps</Rate>
</SpikeArrest>

นโยบายจะลดอัตราคำขอให้มีคำขอ 1 รายการในทุกๆ 200 มิลลิวินาที (1,000/5)

ตัวอย่างที่ 2

ตัวอย่างต่อไปนี้กำหนดอัตราคำขอเป็น 12 คำขอต่อนาที

<SpikeArrest name="Spike-Arrest-1">
  <Rate>12pm</Rate>
</SpikeArrest>

นโยบายตัวอย่างนี้จะลดอัตราคำขอให้มี 1 คำขอในทุกๆ 5 วินาที (60/12) ได้อย่างราบรื่น

ตารางต่อไปนี้อธิบายแอตทริบิวต์ของ <Rate>

แอตทริบิวต์ คำอธิบาย การมีบุคคลอยู่ ค่าเริ่มต้น
ref ระบุตัวแปรโฟลว์ที่ระบุอัตรา ตัวแปรนี้อาจเป็นตัวแปรขั้นตอนใดก็ได้ เช่น พารามิเตอร์การค้นหา HTTP, ส่วนหัว หรือเนื้อหาข้อความ หรือค่าต่างๆ เช่น KVM ดูข้อมูลเพิ่มเติมได้ที่ข้อมูลอ้างอิงตัวแปรโฟลว์

นอกจากนี้คุณยังใช้ตัวแปรที่กำหนดเองได้โดยใช้นโยบาย JavaScript หรือนโยบาย AssignMessage

หากคุณกำหนดทั้ง ref และส่วนเนื้อความขององค์ประกอบนี้ ระบบจะใช้ค่าของ ref และมีลำดับความสำคัญเหนือกว่าเมื่อมีการตั้งค่าตัวแปรโฟลว์ในคำขอ (การย้อนกลับจะเป็นจริงเมื่อตัวแปรที่ระบุใน ref ไม่ได้ตั้งค่าในคำขอ)

เช่น

<Rate ref="request.header.custom_rate">1pm</Rate>

ในตัวอย่างนี้ หากไคลเอ็นต์ไม่ส่งส่วนหัว "custom_rate" อัตราของพร็อกซี API จะเป็น 1 คำขอต่อนาทีสำหรับไคลเอ็นต์ทั้งหมด หากไคลเอ็นต์ส่งส่วนหัว "custom_rate" ขีดจำกัดอัตราจะกลายเป็น 10 คำขอต่อวินาทีสำหรับไคลเอ็นต์ทั้งหมดบนพร็อกซี จนกว่าจะมีการส่งคำขอที่ไม่มีส่วนหัว "custom_rate"

คุณใช้ <Identifier> เพื่อจัดกลุ่มคำขอเพื่อบังคับใช้อัตราที่กำหนดเองสำหรับไคลเอ็นต์ประเภทต่างๆ ได้

หากคุณระบุค่าสำหรับ ref แต่ไม่ได้ตั้งค่าอัตราในส่วนเนื้อหาขององค์ประกอบ <Rate> และไคลเอ็นต์ไม่ส่งค่า นโยบายการระงับการเพิ่มขึ้นจะแสดงข้อผิดพลาด

ไม่บังคับ ไม่มี

<UseEffectiveCount>

กระจายจำนวน Spike Arrest จำนวนผู้ประมวลผลข้อความ (MP) เมื่อใช้กลุ่มการปรับขนาดอัตโนมัติ

ไวยากรณ์

<SpikeArrest
  continueOnError="[false|true]"
  enabled="[true|false]"
  name="policy_name"
>
  <UseEffectiveCount>[false|true]</UseEffectiveCount>
</SpikeArrest>

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้กำหนดให้ <UseEffectiveCount> เป็นจริง

<SpikeArrest name='Spike-Arrest-1'>
  <Rate>40ps</Rate>
  <UseEffectiveCount>true</UseEffectiveCount>
</SpikeArrest>

องค์ประกอบ <UseEffectiveCount> เป็นค่าที่ไม่บังคับ ค่าเริ่มต้นคือ false เมื่อไม่มีองค์ประกอบจากนโยบาย Spike Arrest

ค่าเริ่มต้น ไม่จริง
ต้องระบุหรือไม่ ไม่บังคับ
ประเภท บูลีน
องค์ประกอบระดับบน <SpikeArrest>
องค์ประกอบย่อย ไม่มี

ตารางต่อไปนี้อธิบายแอตทริบิวต์ขององค์ประกอบ <UseEffectiveCount>

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การมีบุคคลอยู่
ref ระบุตัวแปรที่มีค่า <UseEffectiveCount> ตัวแปรนี้อาจเป็นตัวแปรโฟลว์ใดก็ได้ เช่น พารามิเตอร์การค้นหา HTTP, ส่วนหัว หรือเนื้อหาข้อความ ดูข้อมูลเพิ่มเติมได้ที่ข้อมูลอ้างอิงตัวแปรโฟลว์ คุณยังตั้งค่าตัวแปรที่กำหนดเองโดยใช้นโยบาย JavaScript หรือนโยบาย AssignMessage ได้ด้วย ไม่มี ไม่บังคับ

ผลลัพธ์ของ <UseEffectiveCount> ขึ้นอยู่กับค่าดังนี้

  • true: ขีดจำกัดอัตราสูงสุดของ MP คือ <Rate> หารด้วยจำนวน MP ปัจจุบันในพ็อดเดียวกัน ขีดจำกัดรวมคือค่าของ <Rate> เมื่อมีการเพิ่ม (หรือนําออก MP แบบไดนามิก) ขีดจํากัดอัตราที่เพิ่มขึ้นอย่างรวดเร็วแต่ละรายการจะเพิ่มขึ้น (หรือลดลง) แต่ขีดจํากัดรวมจะยังคงเหมือนเดิม
  • false (นี่คือค่าเริ่มต้นหากไม่ระบุ): ขีดจำกัดอัตราสูงสุดของ MP แต่ละรายการเป็นเพียงค่าของ <Rate> ขีดจำกัดแบบรวมคือผลรวมของอัตรา MP ทั้งหมด เมื่อมีการเพิ่ม (หรือนำ MP ออก) ขีดจำกัดอัตราที่เพิ่มขึ้นอย่างฉับพลันแต่ละรายการจะยังคงเหมือนเดิม แต่ขีดจำกัดรวมจะเพิ่มขึ้น (หรือลดลง)

ตารางต่อไปนี้แสดงผลกระทบของ <UseEffectiveCount> ต่อขีดจำกัดอัตราที่แท้จริงของแต่ละ MP

ค่าของ <UseEffectiveCount>
false false false true true true
จำนวน MP 8 4 2 8 4 2
ค่าของ <Rate> 10 10 10 40 40 40
อัตราที่แท้จริงต่อ MP 10 10 10 5 10 20
ขีดจำกัดแบบรวม 80 40 20 40* 40* 40*
* เหมือนกับ <Rate>

ในตัวอย่างนี้ ให้สังเกตว่าเมื่อจำนวน MP ลดลงจาก 4 เป็น 2 และ <UseEffectiveCount> เป็น false อัตราที่แท้จริงต่อ MP จะยังคงเหมือนเดิม (ที่ 10) แต่เมื่อ <UseEffectiveCount> เท่ากับ true อัตราที่แท้จริงต่อ MP จะลดลงจาก 10 เป็น 20 เมื่อจำนวน MP ลดลงจาก 4 เป็น 2

ตัวแปรโฟลว์

เมื่อนโยบายการควบคุมการจับกุมทำงาน ระบบจะเติมค่าตัวแปรโฟลว์ต่อไปนี้

ตัวแปร ประเภท สิทธิ์ คำอธิบาย
ratelimit.policy_name.failed บูลีน อ่านอย่างเดียว ระบุว่านโยบายล้มเหลวหรือไม่ (true หรือ false)

ดูข้อมูลเพิ่มเติมได้ที่ข้อมูลอ้างอิงตัวแปรโฟลว์

การอ้างอิงข้อผิดพลาด

ส่วนนี้อธิบายโค้ดข้อผิดพลาดและข้อความแสดงข้อผิดพลาดที่แสดงผลและตัวแปรข้อผิดพลาดที่ Edge กำหนดเมื่อนโยบายนี้ทริกเกอร์ข้อผิดพลาด ข้อมูลนี้เป็นสิ่งสำคัญที่ต้องทราบหากคุณกำลังกำหนดกฎข้อผิดพลาดเพื่อจัดการกับข้อผิดพลาด ดูข้อมูลเพิ่มเติมได้ที่สิ่งที่คุณจำเป็นต้องทราบเกี่ยวกับข้อผิดพลาดของนโยบายและการจัดการข้อผิดพลาด

ข้อผิดพลาดเกี่ยวกับรันไทม์

ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อนโยบายทำงาน

รหัสข้อผิดพลาด สถานะ HTTP สาเหตุ แก้ไข
policies.ratelimit.FailedToResolveSpikeArrestRate 500 ข้อผิดพลาดนี้เกิดขึ้นหากไม่สามารถแก้ไขการอ้างอิงไปยังตัวแปรที่มีการตั้งค่าอัตราภายในองค์ประกอบ <Rate> เป็นค่าที่อยู่ในนโยบาย Spike Arrest ได้ องค์ประกอบนี้เป็นสิ่งที่จำเป็นและใช้เพื่อระบุอัตราการจับกุมอย่างฉับพลันในรูปแบบ intpm หรือ intps
policies.ratelimit.InvalidMessageWeight 500 ข้อผิดพลาดนี้เกิดขึ้นหากค่าที่ระบุสำหรับองค์ประกอบ <MessageWeight> ผ่านตัวแปรโฟลว์ไม่ถูกต้อง (ค่าที่ไม่ใช่จำนวนเต็ม)
policies.ratelimit.SpikeArrestViolation 429

เกินขีดจำกัดของอัตรา

ข้อผิดพลาดในการทำให้ใช้งานได้

ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อคุณใช้พร็อกซีที่มีนโยบายนี้

ชื่อข้อผิดพลาด สาเหตุ แก้ไข
InvalidAllowedRate หากอัตราการจับกุมอย่างฉับพลันที่ระบุในองค์ประกอบ <Rate> ของนโยบาย Spike Arrest ไม่ใช่จำนวนเต็มหรืออัตราไม่มี ps หรือ pm ต่อท้าย จะทำให้ใช้งานพร็อกซี API ไม่สำเร็จ

ตัวแปรของข้อผิดพลาด

ระบบจะตั้งค่าตัวแปรเหล่านี้เมื่อเกิดข้อผิดพลาดรันไทม์ ดูข้อมูลเพิ่มเติมได้ที่สิ่งที่คุณต้องทราบเกี่ยวกับข้อผิดพลาดของนโยบาย

ตัวแปร สถานที่ ตัวอย่าง
fault.name="fault_name" fault_name คือชื่อของข้อผิดพลาดตามที่แสดงในตารางข้อผิดพลาดรันไทม์ด้านบน ชื่อข้อผิดพลาดคือส่วนสุดท้ายของโค้ดข้อผิดพลาด fault.name Matches "SpikeArrestViolation"
ratelimit.policy_name.failed policy_name คือชื่อที่ผู้ใช้ระบุของนโยบายที่เป็นข้อผิดพลาด ratelimit.SA-SpikeArrestPolicy.failed = true

ตัวอย่างการตอบกลับข้อผิดพลาด

ด้านล่างนี้เป็นตัวอย่างการตอบสนองข้อผิดพลาด

{  
   "fault":{  
      "detail":{  
         "errorcode":"policies.ratelimit.SpikeArrestViolation"
      },
      "faultstring":"Spike arrest violation. Allowed rate : 10ps"
   }
}

ตัวอย่างกฎข้อผิดพลาด

ด้านล่างนี้เป็นตัวอย่างกฎของข้อผิดพลาดเพื่อจัดการกับข้อผิดพลาด SpikeArrestViolation:

<FaultRules>
    <FaultRule name="Spike Arrest Errors">
        <Step>
            <Name>JavaScript-1</Name>
            <Condition>(fault.name Matches "SpikeArrestViolation") </Condition>
        </Step>
        <Condition>ratelimit.Spike-Arrest-1.failed=true</Condition>
    </FaultRule>
</FaultRules>

รหัสสถานะ HTTP ปัจจุบันสำหรับใช้เกินขีดจำกัดอัตราที่กำหนดโดยนโยบายการจับกุมโควต้าหรือการจับกุมดังกล่าวคือ 429 (มีคำขอมากเกินไป) หากต้องการเปลี่ยนรหัสสถานะ HTTP เป็น 500 (ข้อผิดพลาดภายในเซิร์ฟเวอร์) ให้ตั้งค่าพร็อพเพอร์ตี้ features.isHTTPStatusTooManyRequestEnabled เป็น false โดยใช้ API อัปเดตพร็อพเพอร์ตี้องค์กร

เช่น

curl -u email:password -X POST -H "Content-type:application/xml" http://api.enterprise.apigee.com/v1/organizations/myorg -d \
"<Organization type="trial" name="MyOrganization">
    <Properties>
        <Property name="features.isHTTPStatusTooManyRequestEnabled">true</Property>
        . . .
    </Properties>
</Organization>"

สคีมา

นโยบายแต่ละประเภทจะกำหนดโดยสคีมา XML (.xsd) โปรดทราบว่าสคีมานโยบายมีอยู่ใน GitHub

หัวข้อที่เกี่ยวข้อง