นโยบาย SpikeArrest

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

ไอคอนการป้องกันการเพิ่มขึ้นของทราฟิกอย่างฉับพลันจาก UI ของ Edge

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

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

ลักษณะการทำงานของ Spike Arrest ที่รันไทม์จะแตกต่างจากสิ่งที่คุณอาจคาดหวังที่จะเห็นจากค่าต่อนาทีหรือต่อวินาทีที่คุณป้อน

เช่น สมมติว่าคุณป้อนอัตรา 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 วินาที จะดำเนินการไม่สำเร็จ

มีข้อมูลเพิ่มเติมดังนี้ 1 คำขอ * จำนวนโปรเซสเซอร์ข้อความ

โดยค่าเริ่มต้น ระบบจะไม่กระจายการควบคุมอัตราการเข้าชมที่เพิ่มขึ้นอย่างรวดเร็ว เว้นแต่คุณจะเปิดใช้ <UseEffectiveCount> ซึ่งหมายความว่าระบบจะไม่ซิงค์จำนวนคำขอ ใน MP หากมี Message Processor มากกว่า 1 รายการ โดยเฉพาะรายการที่มีการกำหนดค่าแบบ Round Robin แต่ละรายการจะจัดการการควบคุมการเพิ่มขึ้นของจำนวนคำขออย่างรวดเร็วของตนเองแยกกัน เมื่อใช้ตัวประมวลผลข้อความ 1 รายการ อัตรา 30pm จะทำให้การเข้าชมราบรื่นเป็น 1 คำขอทุกๆ 2 วินาที (60 / 30) เมื่อมีตัวประมวลผลข้อความ 2 ตัว (ค่าเริ่มต้นสำหรับ Edge Cloud) จำนวนดังกล่าวจะเพิ่มเป็น 2 คำขอทุกๆ 2 วินาที ดังนั้น ให้นำจำนวนคำขอแบบเต็มที่คำนวณได้ต่อช่วงเวลาคูณด้วยจำนวนตัวประมวลผลข้อความ เพื่อหาอัตราการหยุดทำงานโดยรวม

ความแตกต่างระหว่างการป้องกันการเพิ่มขึ้นของทราฟิก และการจำกัดโควต้า

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

ใช้โควต้าเพื่อบังคับใช้สัญญาทางธุรกิจหรือ SLA กับนักพัฒนาแอปและพาร์ทเนอร์ แทนที่จะใช้เพื่อการจัดการการเข้าชมในการดำเนินงาน ใช้การจำกัดอัตราการเข้าชมเพื่อป้องกันการเข้าชม API ที่เพิ่มขึ้นอย่างฉับพลัน ดูเพิ่มเติมที่การเปรียบเทียบโควต้า การป้องกันการเพิ่มขึ้นของปริมาณการเข้าชม และนโยบายการจำกัดอัตราพร้อมกัน

วิดีโอ

วิดีโอเหล่านี้แสดงวิธีปกป้อง 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 ไม่มีข้อมูล จำเป็น

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

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

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

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงวิธีที่คุณใช้กฎการควบคุมการเพิ่มขึ้นของทราฟิกได้

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

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

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

ตัวอย่างต่อไปนี้ตั้งค่าอัตราเป็น 300 ต่อนาที

<SpikeArrest async="false" continueOnError="false" enabled="true" name="SpikeArreast">
  <DisplayName>SpikeArreast</DisplayName>
  <Rate>300pm</Rate>
</SpikeArrest>

อัตราที่มีผลคือ 300pm ซึ่งหมายความว่าระบบจะเพิ่มโทเค็นใหม่ลงในที่เก็บทุกๆ 200 มิลลิวินาที ระบบจะกำหนดค่าขนาดกลุ่มให้เป็น 10% ของ messagesPerPeriod เสมอ ดังนั้น เมื่อ messagesPerPeriod เท่ากับ 300 ขนาดของที่เก็บข้อมูลจะเป็น 30 โทเค็น

ตัวอย่างต่อไปนี้จำกัดคำขอเป็น 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> ได้เพิ่มเติม

ตัวอย่างต่อไปนี้จะสั่งให้ 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>

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

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

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

ค่าเริ่มต้น ไม่มี
ต้องระบุหรือไม่ ไม่บังคับ
ประเภท สตริง
องค์ประกอบหลัก <SpikeArrest>
องค์ประกอบย่อย ไม่มี
<SpikeArrest
  continueOnError="[false|true]"
  enabled="[true|false]"
  name="policy_name"
>
  <Identifier ref="flow_variable"/>
</SpikeArrest>
        

ตัวอย่างต่อไปนี้ใช้กับนโยบายการควบคุมอัตราการเข้าชมที่เพิ่มขึ้นตามรหัสนักพัฒนาแอป

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

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

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การมีบุคคลอยู่
ref ระบุตัวแปรที่ Spike Arrest ใช้จัดกลุ่มคำขอขาเข้า คุณใช้ตัวแปรโฟลว์ใดก็ได้เพื่อระบุไคลเอ็นต์ที่ไม่ซ้ำ เช่น ตัวแปรที่ใช้ได้กับ นโยบาย VerifyAPIKey นอกจากนี้ คุณยังตั้งค่าตัวแปรที่กำหนดเองได้โดยใช้นโยบาย 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>

ตัวอย่างต่อไปนี้จำกัดคำขอเป็น 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

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

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

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

ตัวอย่างต่อไปนี้ตั้งค่าอัตราเป็น 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

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

เช่น

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

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

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

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

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

<UseEffectiveCount>

กระจายจำนวนการปฏิเสธการเข้าชมที่เพิ่มขึ้นอย่างรวดเร็วไปยังตัวประมวลผลข้อความ (MP) เมื่อใช้กลุ่มการปรับขนาดอัตโนมัติ

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

ตัวอย่างต่อไปนี้ตั้งค่า <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)

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

ข้อมูลอ้างอิงข้อผิดพลาด

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

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

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

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

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

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

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

ชื่อข้อผิดพลาด สาเหตุ แก้ไข
InvalidAllowedRate หากอัตราการจับกุมที่เพิ่มขึ้นอย่างฉับพลันที่ระบุไว้ในองค์ประกอบ <Rate> ของการจับกุม Spike นโยบายไม่ใช่จำนวนเต็มหรือหากราคาไม่มี 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

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