SpikeArrest politikası

Apigee Edge belgelerini görüntülüyorsunuz.
. Git: Apigee X belgeleri.
bilgi

Edge kullanıcı arayüzündeki Çivi Sabitleme simgesi

Spike Arrest politikası, <Rate> öğesiyle trafik dalgalanmalarına karşı koruma sağlar. Bu öğesi, bir API proxy'si tarafından işlenen ve arka uca gönderilen isteklerin sayısını kısıtlar. performans gecikmelerine ve kapalı kalma sürelerine karşı koruma sağlar.

<SpikeArrest> öğe

Spike Arrest politikasını tanımlar.

Varsayılan Değer Aşağıdaki Varsayılan Politika sekmesine bakın
Zorunlu mu? İsteğe bağlı
Tür Karmaşık nesne
Üst Öğe Yok
Alt Öğeler <Identifier>
<MessageWeight>
<Rate> (Zorunlu)
<UseEffectiveCount>

Söz dizimi

<SpikeArrest> öğesi şu söz dizimini kullanır:

<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>

Varsayılan Politika

Aşağıdaki örnekte, hesabınıza Spike Arrest politikası eklediğinizde varsayılan ayarlar akışı hakkında:

<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>

This element has the following attributes that are common to all policies:

Attribute Default Required? Description
name N/A Required

The internal name of the policy. The value of the name attribute can contain letters, numbers, spaces, hyphens, underscores, and periods. This value cannot exceed 255 characters.

Optionally, use the <DisplayName> element to label the policy in the management UI proxy editor with a different, natural-language name.

continueOnError false Optional Set to "false" to return an error when a policy fails. This is expected behavior for most policies. Set to "true" to have flow execution continue even after a policy fails.
enabled true Optional Set to "true" to enforce the policy. Set to "false" to "turn off" the policy. The policy will not be enforced even if it remains attached to a flow.
async   false Deprecated This attribute is deprecated.

Örnekler

Aşağıdaki örneklerde Spike Arrest politikasının kullanım şekillerinden bazıları gösterilmektedir:

1. Örnek

Aşağıdaki örnekte bu hız saniyede beş olarak ayarlanmaktadır:

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

Politika, bu hızı yumuşatarak her 200 milisaniyede bir izin verilen bir isteğe olanak tanır (1000/5).

2. Örnek

Aşağıdaki örnekte bu hız dakika başına 12 olarak ayarlanmaktadır:

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

Bu örnek politika, oranı yumuşatarak her beş isteğe yalnızca bir isteğe izin verir saniye (60/12).

3. Örnek

Aşağıdaki örnekte istekler dakikada 12 ile kısıtlanır (her beş isteğe bir isteğe izin verilir) saniye veya 60/12):

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

Buna ek olarak, <MessageWeight> öğesi özel bir değeri ( weight üstbilgisi) kullanabilirsiniz. Bu <Identifier> öğesi.

4. Örnek

Aşağıdaki örnekte, Spike Arrest'e request.header.runtime_rate akış değişkeni olarak aktarılan istek:

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

Akış değişkeninin değeri şu biçimde olmalıdır: intpm veya intps.

Bu örneği denemek için aşağıdaki gibi bir istek yürütün:

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

Alt öğe referansı

Bu bölümde, <SpikeArrest> alt öğeleri açıklanmaktadır.

<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>

Spike Arrest politikasının uygulanabilmesi için taleplerin nasıl gruplandırılacağını seçebilmenizi sağlar. gerekir. Örneğin, istekleri geliştirici kimliğine göre gruplandırabilirsiniz. Bu durumda her geliştiricinin talepleri, kendi Spike Arrest oranlarına dahil edilecektir. temsil eder.

Daha ayrıntılı bilgi için <MessageWeight> öğesiyle birlikte kullanın kontrol olanağı sunar.

<Identifier> öğesini boş bırakırsanız tüm istekler için bir hız sınırı uygulanır içine koymanız gerekir.

Varsayılan Değer Yok
Zorunlu mu? İsteğe bağlı
Tür Dize
Üst Öğe <SpikeArrest>
Alt Öğeler Yok

Söz dizimi

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

1. Örnek

Aşağıdaki örnekte, geliştirici kimliği bazında Spike Arrest politikası geçerlidir:

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

Aşağıdaki tabloda <Identifier> özellikleri açıklanmaktadır:

Özellik Açıklama Varsayılan Varlık
ref Spike Arrest'in gelen talepleri gruplandırdığı değişkeni tanımlar. Benzersiz bir müşteriyi belirtmek için (örneğin, VerifyAPIKey politikası. Ayrıca, JavaScript politikası veya AssignmentMessage politikası. Yok Zorunlu

Bu unsur, şu Apigee Topluluk gönderisinde de ele alınmaktadır: http://community.apigee.com/questions/2807/how-does-the-edge-quota-policy-work-when-no-identi.html.

<MessageWeight>

Her ileti için tanımlanan ağırlıklandırmayı belirtir. Mesaj ağırlığı, etkiyi değiştirir artış oranı. Mesaj ağırlığı herhangi bir değer olabilir HTTP üstbilgisi, sorgu parametresi, form parametresi veya ileti gövdesi içeriği gibi bir akış değişkeni Ayrıca, JavaScript politikasını veya AssignmentMessage politikası.

İstekleri daha fazla daraltmak için <Identifier> ile birlikte kullanın. veya uygulamalara sahip olmanız gerekir.

Örneğin, Spike Arrest <Rate> değeri 10pm olduğunda bir uygulama tarafından gönderilir. ağırlığı 2 olan isteklere sahipse, şuradan dakikada yalnızca beş iletiye izin verilir: çünkü her istek 2 olarak sayılır.

Varsayılan Değer Yok
Zorunlu mu? İsteğe bağlı
Tür Tamsayı
Üst Öğe <SpikeArrest>
Alt Öğeler Yok

Söz dizimi

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

1. Örnek

Aşağıdaki örnekte istekler dakikada 12 ile kısıtlanır (her beş isteğe bir isteğe izin verilir) saniye veya 60/12):

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

Bu örnekte, <MessageWeight> özel bir değeri (weight üstbilgisi) ekleyebilirsiniz. Bu <Identifier> öğesi.

Aşağıdaki tabloda <MessageWeight> özellikleri açıklanmaktadır:

Özellik Açıklama Varlık Varsayılan
ref Belirli bir istemcinin mesaj ağırlığını içeren akış değişkenini tanımlar. Bu değişken, HTTP sorgu parametresi, üstbilgi veya ileti gövdesi içeriği olarak değiştirebilirsiniz. Daha fazla bilgi için bkz. Akış değişkenleri referansı. Ayrıca, özelleştirilebilen değişkenleri JavaScript politikasını veya AssignmentMessage politikasını kullanarak da yapabilirsiniz. Zorunlu Yok

<Rate>

izin verilen isteklerin sayısını gösterir. Bu öğeyi <Identifier> ve <MessageWeight> ile birlikte şunun için: İstemciden değer kabul ederek çalışma zamanında trafiği sorunsuz şekilde kısıtlar.

Varsayılan Değer Yok
Zorunlu mu? Zorunlu
Tür Tamsayı
Üst Öğe <SpikeArrest>
Alt Öğeler Yok

Söz dizimi

Ücretleri aşağıdaki yollardan biriyle belirtebilirsiniz:

  • <Rate> öğesinin gövdesi olarak belirttiğiniz statik ücret
  • İstemci tarafından aktarılabilecek bir değişken değeri; tanımlama, ref özelliğini kullanan akış değişkeninin adı
<SpikeArrest
  continueOnError="[false|true]"
  enabled="[true|false]"
  name="policy_name"
>
  <Rate ref="flow_variable">rate[pm|ps]</Rate>
</SpikeArrest>

Geçerli ücret değerleri (değişken değer olarak veya öğenin gövdesinde tanımlanır) olmalıdır şu biçime uygun olmalıdır:

  • intps (saniyedeki istek sayısı, aralıklar halinde yumuşatılmış) / milisaniye)
  • intpm (dakika başına istek sayısı, aralıklar halinde düzeltilmiştir / saniye)

int değeri pozitif, sıfır olmayan bir tam sayı olmalıdır.

1. Örnek

Aşağıdaki örnekte, hız saniyede beş istek olarak ayarlanmaktadır:

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

Politika, bu hızı yumuşatarak her 200 milisaniyede bir izin verilen bir isteğe olanak tanır (1000/5).

2. Örnek

Aşağıdaki örnekte, hızı dakikada 12 istek olarak ayarlanmaktadır:

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

Bu örnek politika, oranı yumuşatarak her beş isteğe yalnızca bir isteğe izin verir saniye (60/12).

Aşağıdaki tabloda <Rate> özellikleri açıklanmaktadır:

Özellik Açıklama Varlık Varsayılan
ref Ücreti belirten bir akış değişkenini tanımlar. Herhangi bir akış olabilir HTTP sorgu parametresi, üstbilgi veya ileti gövdesi içeriği gibi bir değişken ya da buna dahildir. Daha fazla bilgi için Akış değişkenleri referansı bölümüne bakın.

Özelleştirilebilen değişkenleri JavaScript politikasını veya AssignmentMessage politikasını kullanarak da yapabilirsiniz.

Bu öğenin hem ref hem gövdesini tanımlarsanız ref değeri uygulanır ve akış değişkeni şöyle olduğunda öncelikli olur: bu verileri kullanabilirsiniz. (Değişken ref içinde tanımlandığında tersi doğrudur değeri, istekte belirtilmemiştir.)

Örneğin:

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

Bu örnekte, müşteri bir "custom_rate" iletmezse başlığı, ardından API proxy'si ücreti, tüm istemciler için dakikada 1 istektir. Müşteri, "custom_rate" [özel_oran] hız sınırı, bu kampanyadaki tüm müşteriler için saniyede 10 istek proxy ("custom_rate" içermeyen bir isteğe kadar) üstbilgisi gönderilir.

Aşağıdakiler için özel oranlar uygulamak amacıyla istekleri gruplandırmak üzere <Identifier> aracını kullanabilirsiniz: son derece önemlidir.

ref için bir değer belirtir ancak fiyatı <Rate> öğesi ve istemci bir değer iletmez. Bu durumda Spike Arrest politikası hata verir.

İsteğe bağlı Yok

<UseEffectiveCount>

Otomatik ölçeklendirme kullanılırken Spike Arrest sayınızı mesaj işlemcileri (MP) arasında dağıtır. gruplar.

Söz dizimi

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

1. Örnek

Aşağıdaki örnekte <UseEffectiveCount> değeri doğru olarak ayarlanmaktadır:

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

<UseEffectiveCount> öğesi isteğe bağlıdır. Varsayılan değer: false Öğe, Spike Arrest politikanızdan çıkarıldığında gösterilir.

Varsayılan Değer Yanlış
Zorunlu mu? İsteğe bağlı
Tür Boole
Üst Öğe <SpikeArrest>
Alt Öğeler Yok

Aşağıdaki tabloda <UseEffectiveCount> öğesinin özellikleri açıklanmaktadır:

Özellik Açıklama Varsayılan Varlık
ref <UseEffectiveCount> değerini içeren değişkeni tanımlar. Bu özellik, HTTP sorgu parametresi, üstbilgi veya ileti gövdesi içeriği gibi herhangi bir akış değişkeni. Daha fazla daha fazla bilgi için Akış değişkenleri referansı bölümüne bakın. Ayrıca, özelleştirilebilen değişkenleri JavaScript politikasını veya AssignmentMessage politikasını kullanarak da yapabilirsiniz. Yok İsteğe bağlı

<UseEffectiveCount> işlevinin etkisi, değerine bağlıdır:

  • true: MP'in artış oranı sınırı <Rate> değerinin aynı kapsüldeki mevcut MP sayısına bölümü. Toplam sınır, / <Rate>. MP'ler dinamik olarak eklendiğinde (veya kaldırıldığında), hız sınırları artar (veya azalır) ancak toplam sınır aynı kalır.
  • false (atlanırsa bu varsayılan değerdir): Her MP'nin artış hızı sınırı: <Rate> değerini alır. Toplam sınır, tüm MP'lerin oranlarının toplamıdır. MP'ler eklendiğinde (veya kaldırıldığında) bağımsız artış oranı sınırları aynı kalır ancak toplam sınır artar (veya azalması) anlamına gelir.

Aşağıdaki tabloda, <UseEffectiveCount> işlevinin geçerli ücret sınırı üzerindeki etkisi gösterilmektedir: her MP:

<UseEffectiveCount> değeri
false false false true true true
Milletvekili sayısı 8 4 2 8 4 2
<Rate> değeri 10 10 10 40 112 40
MP başına geçerli oran 10 10 10 5 10 20
Toplama Sınırı 80 40 20 40* 40* 40*
* <Rate> ile aynıdır.

Bu örnekte, MP'lerin sayısı 4'ten 2'ye düşürüldüğünde <UseEffectiveCount> false, MP başına geçerli ücret aynı kalır ( 10). Ancak <UseEffectiveCount> true olduğunda MP başına geçerli oran MP sayısı 4'ten 2'ye düşürüldüğünde 10'dan 20'ye.

Akış değişkenleri

Spike Arrest politikası yürütüldüğünde aşağıdaki akış değişkeni doldurulur:

Değişken Tür İzin Açıklama
ratelimit.policy_name.failed Boole Salt Okunur Politikanın başarısız olup olmadığını gösterir (true veya false) tıklayın.

Daha fazla bilgi için Akış değişkenleri referansı bölümüne bakın.

Hata referansı

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.
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).
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.

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>

Kota veya Ani artış politikası tarafından belirlenen hız sınırını aşmak için geçerli HTTP durum kodu 429 (Çok Fazla İstek). HTTP durum kodunu 500 olarak değiştirmek için (Dahili Sunucu Hatası), false için features.isHTTPStatusTooManyRequestEnabled özelliğini kullanarak Kuruluş özelliklerini güncelleme API'si.

Örneğin:

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>"

Şemalar

Her politika türü bir XML şemasıyla (.xsd) tanımlanır. Referans olması amacıyla politika şemaları GitHub'da bulabilirsiniz.

İlgili konular