คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ
Apigee X info
นโยบายการควบคุมการเพิ่มขึ้นของทราฟิกจะป้องกันการเพิ่มขึ้นของทราฟิกด้วยองค์ประกอบ <Rate> องค์ประกอบนี้จะจำกัดจำนวนคำขอที่พร็อกซี API ประมวลผลและส่งไปยังแบ็กเอนด์
เพื่อป้องกันไม่ให้ประสิทธิภาพลดลงและหยุดทำงาน
องค์ประกอบ <SpikeArrest>
กำหนดนโยบายการควบคุมอัตราการเข้าชม
| ค่าเริ่มต้น | ดูแท็บนโยบายเริ่มต้นด้านล่าง |
| ต้องระบุหรือไม่ | ไม่บังคับ |
| ประเภท | ออบเจ็กต์ ที่ซับซ้อน |
| องค์ประกอบหลัก | ไม่มี |
| องค์ประกอบย่อย |
<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>
นโยบายเริ่มต้น
ตัวอย่างต่อไปนี้แสดงการตั้งค่าเริ่มต้นเมื่อคุณเพิ่มนโยบายการควบคุมอัตราการเข้าชมที่เพิ่มขึ้นอย่างรวดเร็วลงใน โฟลว์ใน UI ของ Edge
<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 |
ไม่มีข้อมูล | จำเป็น |
ชื่อภายในของนโยบาย ค่าของแอตทริบิวต์ ใช้องค์ประกอบ |
continueOnError |
เท็จ | ไม่บังคับ | ตั้งค่าเป็น "false" เพื่อแสดงข้อผิดพลาดเมื่อนโยบายล้มเหลว ซึ่งเป็นลักษณะการทํางานที่คาดหวังตามนโยบายส่วนใหญ่ ตั้งค่าเป็น "จริง" เพื่อดําเนินการโฟลว์ข้อมูลต่อไป แม้ว่านโยบายจะล้มเหลวก็ตาม |
enabled |
จริง | ไม่บังคับ | ตั้งค่าเป็น "true" เพื่อบังคับใช้นโยบาย ตั้งค่าเป็น "false" เพื่อ "ปิด" นโยบาย ระบบจะไม่บังคับใช้นโยบายแม้ว่าจะยังคงแนบไปกับโฟลว์ |
async |
เท็จ | เลิกใช้ | แอตทริบิวต์นี้เลิกใช้งานแล้ว |
ตัวอย่าง
ตัวอย่างต่อไปนี้แสดงวิธีที่คุณใช้กฎการจำกัดจำนวนคำขอได้
ตัวอย่างที่ 1
ตัวอย่างต่อไปนี้จะตั้งค่าอัตราเป็น 5 ต่อวินาที
<SpikeArrest name="Spike-Arrest-1"> <Rate>5ps</Rate> </SpikeArrest>
นโยบายจะปรับอัตราให้เป็นคำขอ 1 รายการทุกๆ 200 มิลลิวินาที (1000/5)
ตัวอย่างที่ 2
ตัวอย่างต่อไปนี้กำหนดอัตราเป็น 300 ต่อนาที
<SpikeArrest async="false" continueOnError="false" enabled="true" name="SpikeArreast"> <DisplayName>SpikeArreast</DisplayName> <Rate>300pm</Rate> </SpikeArrest>
อัตราที่มีผลคือ 300pm ซึ่งหมายความว่าระบบจะเพิ่มโทเค็นใหม่ลงในที่เก็บทุกๆ 200 มิลลิวินาที ระบบจะกำหนดค่าขนาดกลุ่มให้เป็น 10% ของ messagesPerPeriod เสมอ ดังนั้น เมื่อ messagesPerPeriod เท่ากับ 300 ขนาดของที่เก็บข้อมูลจะเป็น 30 โทเค็น
ตัวอย่างที่ 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>
Use in addition to the name attribute to label the policy in the
management UI proxy editor with a different, more natural-sounding name.
The <DisplayName> element is common to all policies.
| Default Value | n/a |
| Required? | Optional. If you omit <DisplayName>, the value of the
policy's name attribute is used |
| Type | String |
| Parent Element | <PolicyElement> |
| Child Elements | None |
The <DisplayName> element uses the following syntax:
Syntax
<PolicyElement> <DisplayName>policy_display_name</DisplayName> ... </PolicyElement>
Example
<PolicyElement> <DisplayName>My Validation Policy</DisplayName> </PolicyElement>
The <DisplayName> element has no attributes or child elements.
<Identifier>
ช่วยให้คุณเลือกวิธีจัดกลุ่มคำขอเพื่อให้ใช้นโยบายการควบคุมอัตราการเข้าชมได้ตามไคลเอ็นต์ เช่น คุณจัดกลุ่มคำขอตามรหัสนักพัฒนาแอปได้ ในกรณีนี้ คำขอของนักพัฒนาแอปแต่ละรายจะนับรวมในอัตราการป้องกันการเพิ่มขึ้นของทราฟิกของนักพัฒนาแอปรายนั้นๆ และไม่ใช่คำขอทั้งหมดที่ส่งไปยังพร็อกซี
ใช้ร่วมกับองค์ประกอบ <MessageWeight> เพื่อควบคุมการจำกัดคำขอได้ละเอียดยิ่งขึ้น
หากปล่อยองค์ประกอบ <Identifier> ว่างไว้ ระบบจะบังคับใช้การจำกัดอัตรา 1 รายการสำหรับคำขอทั้งหมด
ในพร็อกซี API นั้น
| ค่าเริ่มต้น | ไม่มี |
| ต้องระบุหรือไม่ | ไม่บังคับ |
| ประเภท | สตริง |
| องค์ประกอบหลัก |
<SpikeArrest>
|
| องค์ประกอบย่อย | ไม่มี |
ไวยากรณ์
<SpikeArrest continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Identifier ref="flow_variable"/> </SpikeArrest>
ตัวอย่างที่ 1
ตัวอย่างต่อไปนี้ใช้กับนโยบายการควบคุมอัตราการเข้าชมที่เพิ่มขึ้นตามรหัสนักพัฒนาแอป
<SpikeArrest name="Spike-Arrest-1"> <Identifier ref="developer.id"/> <Rate>42pm</Rate/> </SpikeArrest>
ตารางต่อไปนี้จะอธิบายแอตทริบิวต์ของ <Identifier>
| แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ |
|---|---|---|---|
ref |
ระบุตัวแปรที่ Spike Arrest ใช้จัดกลุ่มคำขอขาเข้า คุณสามารถใช้ตัวแปรโฟลว์ใดก็ได้เพื่อระบุไคลเอ็นต์ที่ไม่ซ้ำกัน เช่น ตัวแปรที่ใช้ได้กับ นโยบาย VerifyAPIKey นอกจากนี้ คุณยังตั้งค่าตัวแปรที่กำหนดเองได้โดยใช้นโยบาย JavaScript หรือนโยบาย AssignMessage | ไม่มี | ต้องระบุ |
นอกจากนี้ องค์ประกอบนี้ยังกล่าวถึงในโพสต์ชุมชน Apigee ต่อไปนี้ด้วย ตัวระบุโควต้าในนโยบายต่างๆ
<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 มิลลิวินาที (1000/5)
ตัวอย่างที่ 2
ตัวอย่างต่อไปนี้ตั้งค่าอัตราเป็น 12 คำขอต่อนาที
<SpikeArrest async="false" continueOnError="false" enabled="true" name="SpikeArreast"> <DisplayName>SpikeArreast</DisplayName> <Rate>300pm</Rate> </SpikeArrest>
นโยบายตัวอย่างนี้จะปรับอัตราให้เป็นคำขอ 1 รายการที่อนุญาตทุกๆ 5 วินาที (60/12)
ตารางต่อไปนี้จะอธิบายแอตทริบิวต์ของ <Rate>
| แอตทริบิวต์ | คำอธิบาย | การมีบุคคลอยู่ | ค่าเริ่มต้น |
|---|---|---|---|
ref |
ระบุตัวแปรโฟลว์ที่ระบุอัตรา ซึ่งอาจเป็นตัวแปรโฟลว์
ใดก็ได้ เช่น พารามิเตอร์การค้นหา HTTP, ส่วนหัว หรือเนื้อหาของข้อความ หรือค่า
เช่น KVM ดูข้อมูลเพิ่มเติมได้ที่ข้อมูลอ้างอิงตัวแปรโฟลว์
คุณยังใช้ตัวแปรที่กำหนดเองได้ โดยใช้นโยบาย JavaScript หรือนโยบาย AssignMessage หากคุณกำหนดทั้ง เช่น <Rate ref="request.header.custom_rate">1pm</Rate> ในตัวอย่างนี้ หากไคลเอ็นต์ไม่ส่งส่วนหัว "custom_rate" อัตราสำหรับพร็อกซี API จะเป็น 1 คำขอต่อนาทีสำหรับไคลเอ็นต์ทั้งหมด หากไคลเอ็นต์ส่งส่วนหัว "custom_rate" ขีดจำกัดอัตราจะกลายเป็น 10 คำขอต่อวินาทีสำหรับไคลเอ็นต์ทั้งหมดในพร็อกซี จนกว่าจะมีการส่งคำขอที่ไม่มีส่วนหัว "custom_rate" คุณสามารถใช้ หากคุณระบุค่าสำหรับ |
ไม่บังคับ | ไม่มี |
Rate ที่กำหนดลักษณะการควบคุมอัตราการรับส่งข้อมูล
| แอตทริบิวต์ | คำอธิบาย |
|---|---|
messagesPerPeriod |
ระบุจำนวนข้อความที่อนุญาตภายในระยะเวลาที่กำหนด เช่น หากกำหนดค่านโยบายเป็น "10ps" (10 ต่อวินาที) ค่า
messagesPerPeriod จะเป็น 10 |
periodInMicroseconds |
กำหนดระยะเวลาเป็นไมโครวินาทีที่ใช้ในการคำนวณ
messagesPerPeriod สำหรับการกำหนดค่า "10ps" ค่านี้จะเป็น 1,000,000 ซึ่งเทียบเท่ากับ 1 วินาที |
maxBurstMessageCount |
แสดงจำนวนคำขอสูงสุดที่อนุญาตได้ทันทีหรือในระยะเวลาสั้นๆ ที่จุดเริ่มต้นของช่วงเวลาใหม่ |
<UseEffectiveCount>
กระจายจำนวนการบล็อกการเพิ่มขึ้นของทราฟิกไปยังตัวประมวลผลข้อความ (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 ขีดจำกัดอัตราการเพิ่มขึ้นของแต่ละรายการจะยังคงเหมือนเดิม แต่ขีดจำกัดรวมจะเพิ่มขึ้น (หรือ ลดลง)
นโยบาย SpikeArrest ใช้อัลกอริทึม "ถังโทเค็น" ที่ช่วยลดการเพิ่มขึ้นของการเข้าชมอย่างรวดเร็วด้วยการแบ่งโควต้ารับส่งที่คุณระบุออกเป็นช่วงเวลาที่สั้นลง ข้อเสียของแนวทางนี้คือคำขอที่ถูกต้องหลายรายการซึ่งเข้ามาในช่วงเวลาสั้นๆ อาจถูกปฏิเสธ
เช่น สมมติว่าคุณป้อนอัตรา 30pm (คำขอ 30 รายการต่อนาที) ในการทดสอบ คุณอาจคิดว่าส่งคำขอ 30 รายการใน 1 วินาทีได้ ตราบใดที่คำขอเหล่านั้นอยู่ในช่วง 1 นาที แต่ไม่ใช่ วิธีที่นโยบายบังคับใช้การตั้งค่า หากลองพิจารณาดูแล้ว คำขอ 30 รายการภายในระยะเวลา 1 วินาที อาจถือเป็นช่วงที่มีการใช้งานเพิ่มขึ้นเล็กน้อยในบางสภาพแวดล้อม
- อัตราต่อนาทีจะได้รับการปรับให้เป็นคำขอแบบเต็มที่อนุญาตในช่วงเวลา
วินาที
เช่น 30pm จะได้รับการปรับให้ราบรื่นดังนี้
60 วินาที (1 นาที) / 30pm = ช่วงเวลา 2 วินาที หรืออนุญาตคำขอ 1 รายการทุกๆ 2 วินาที คำขอที่ 2 ภายใน 2 วินาทีจะล้มเหลว นอกจากนี้ คำขอที่ 31 ภายใน 1 นาทีจะ ล้มเหลว - อัตราต่อวินาทีจะได้รับการปรับให้เป็นคำขอแบบเต็มที่อนุญาตในช่วงเวลา
มิลลิวินาที
เช่น 10ps จะได้รับการปรับให้ราบรื่นดังนี้
1,000 มิลลิวินาที (1 วินาที) / 10ps = ช่วงเวลา 100 มิลลิวินาที หรืออนุญาตคำขอ 1 รายการทุกๆ 100 มิลลิวินาที คำขอที่ 2 ภายใน 100 มิลลิวินาทีจะล้มเหลว นอกจากนี้ คำขอที่ 11 ภายใน 1 วินาที จะดำเนินการไม่สำเร็จ
ตารางต่อไปนี้แสดงผลของ <UseEffectiveCount> ต่อขีดจํากัดอัตราที่มีผลของ MP แต่ละรายการ
ค่าของ <UseEffectiveCount> |
||||||
|---|---|---|---|---|---|---|
false |
false |
false |
true |
true |
true |
|
| จำนวน สส. | 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) |
ดูข้อมูลเพิ่มเติมได้ที่ข้อมูลอ้างอิงตัวแปรโฟลว์
ข้อมูลอ้างอิงข้อผิดพลาด
This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.
Runtime errors
These errors can occur when the policy executes.
| Fault code | HTTP status | Cause | Fix |
|---|---|---|---|
policies.ratelimit.FailedToResolveSpikeArrestRate |
500 |
This error occurs if the reference to the variable containing the rate setting
within the <Rate> element cannot be resolved to a value within the Spike Arrest
policy. This element is mandatory and used to specify the spike arrest rate in
the form of intpm or intps. |
build |
policies.ratelimit.InvalidMessageWeight |
500 |
This error occurs if the value specified for the <MessageWeight> element through
a flow variable is invalid (a non-integer value). |
build |
policies.ratelimit.SpikeArrestViolation |
429 |
The rate limit was exceeded. |
Deployment errors
These errors can occur when you deploy a proxy containing this policy.
| Error name | Cause | Fix |
|---|---|---|
InvalidAllowedRate |
If the spike arrest rate specified in the <Rate> element of the Spike Arrest
Policy is not an integer or if the rate does not have ps or pm as a suffix,
then the deployment of the API proxy fails. |
build |
Fault variables
These variables are set when a runtime error occurs. For more information, see What you need to know about policy errors.
| Variables | Where | Example |
|---|---|---|
fault.name="fault_name" |
fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. | fault.name Matches "SpikeArrestViolation" |
ratelimit.policy_name.failed |
policy_name is the user-specified name of the policy that threw the fault. | ratelimit.SA-SpikeArrestPolicy.failed = true |
Example error response
Shown below is an example error response:
{ "fault":{ "detail":{ "errorcode":"policies.ratelimit.SpikeArrestViolation" }, "faultstring":"Spike arrest violation. Allowed rate : 10ps" } }
Example fault rule
Shown below is an example fault rule to handle a SpikeArrestViolation fault:
<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 สำหรับใช้อ้างอิง
หัวข้อที่เกี่ยวข้อง
- นโยบายโควต้า: นโยบายโควต้า เพื่อจำกัดการเข้าชมในไคลเอ็นต์แต่ละราย
- การจำกัดอัตราคำขอสำหรับภาพรวมการจำกัดอัตราคำขอ
- การเปรียบเทียบ นโยบายโควต้าและ SpikeArrest
- ตัวอย่างพร็อกซี API ที่ใช้งานได้