Criterio di SpikeArrest

Stai visualizzando la documentazione di Apigee Edge.
Vai alla sezione Documentazione di Apigee X.
Informazioni

Icona Spike Arrest dall'interfaccia utente di Edge

Il criterio Spike Arrest protegge dai picchi di traffico con l'elemento <Rate>. Questo limita il numero di richieste elaborate da un proxy API e inviate a un backend, per una protezione contro tempi di inattività e ritardi delle prestazioni.

<SpikeArrest> elemento

Definisce il criterio di arresto dei picchi.

Valore predefinito Consulta la scheda Criterio predefinito di seguito
Obbligatorio? Facoltativo
Tipo Complesso oggetto
Elemento principale n/d
Elementi secondari <Identifier>
<MessageWeight>
<Rate> (obbligatorio)
<UseEffectiveCount>

Sintassi

L'elemento <SpikeArrest> utilizza la seguente sintassi:

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

Criterio predefinito

L'esempio seguente mostra le impostazioni predefinite quando aggiungi un criterio di arresto dei picchi al tuo di flusso nella 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>

Questo elemento ha i seguenti attributi comuni a tutti i criteri:

Attributo Predefinita Obbligatorio? Description (Descrizione)
name N/A Obbligatorio

Il nome interno del criterio. Il valore dell'attributo name può contenere lettere, numeri, spazi, trattini, trattini bassi e punti. Questo valore non può contenere più di 255 caratteri.

Facoltativamente, utilizza l'elemento <DisplayName> per etichettare il criterio nell'editor del proxy dell'interfaccia utente di gestione con un nome diverso in linguaggio naturale.

continueOnError false Facoltativo Imposta su "false" per restituire un errore quando un criterio non va a buon fine. Si tratta di un comportamento previsto per la maggior parte dei criteri. Impostalo su "true" per far sì che l'esecuzione del flusso continui anche dopo l'esito negativo di un criterio.
enabled true Facoltativo Imposta su "true" per applicare il criterio. Imposta su "false" per "disattivare" il criterio. Il criterio non verrà applicato anche se rimane collegato a un flusso.
async   false Deprecazione Questo attributo è obsoleto.

Esempi

I seguenti esempi mostrano alcuni modi in cui è possibile utilizzare il criterio Arresto tramite spike:

Esempio 1

L'esempio seguente imposta la frequenza su cinque al secondo:

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

Il criterio riduce la frequenza a una richiesta consentita ogni 200 millisecondi (1000/5).

Esempio 2

L'esempio seguente imposta la frequenza su 12 al minuto:

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

Questo criterio di esempio attenua la tariffa a una richiesta consentita ogni cinque secondi (60/12).

Esempio 3

L'esempio seguente limita le richieste a 12 al minuto (una richiesta consentita ogni cinque secondi o 60/12):

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

Inoltre, l'elemento <MessageWeight> accetta un valore personalizzato (il weight) che regola le ponderazioni dei messaggi per app o client specifici. Questo fornisce un ulteriore controllo sulla limitazione per le entità identificate con Elemento <Identifier>.

Esempio 4

L'esempio seguente indica a Spike Arrest di cercare un valore di runtime impostato tramite richiesta trasmessa come variabile di flusso request.header.runtime_rate:

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

Il valore della variabile di flusso deve essere nel formato intpm oppure intps.

Per provare questo esempio, esegui una richiesta come la seguente:

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

Riferimento elemento secondario

In questa sezione vengono descritti gli elementi secondari di <SpikeArrest>.

<DisplayName>

Da utilizzare in aggiunta all'attributo name per etichettare il criterio in editor proxy UI di gestione con un nome diverso e più naturale.

L'elemento <DisplayName> è comune a tutti i criteri.

Valore predefinito n/d
Obbligatorio? (Facoltativo) Se ometti <DisplayName>, il valore del valore viene utilizzato l'attributo name del criterio
Tipo Stringa
Elemento principale &lt;PolicyElement&gt;
Elementi secondari Nessuno

L'elemento <DisplayName> utilizza la seguente sintassi:

Sintassi

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

Esempio

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

L'elemento <DisplayName> non ha attributi o elementi secondari.

<Identifier>

Consente di scegliere come raggruppare le richieste in modo che il criterio di arresto dei picchi possa essere applicato in base sul cliente. Ad esempio, puoi raggruppare le richieste per ID sviluppatore, nel qual caso ogni le richieste degli sviluppatori verranno conteggiate ai fini del proprio tasso di arresto dei picchi e non di tutte le richieste al proxy.

Da utilizzare insieme all'elemento <MessageWeight> per avere un'impostazione più granulare sulla limitazione delle richieste.

Se lasci vuoto l'elemento <Identifier>, viene applicato un limite di frequenza per tutte le richieste in quel proxy API.

Valore predefinito n/d
Obbligatorio? Facoltativo
Tipo Stringa
Elemento principale <SpikeArrest>
Elementi secondari Nessuno

Sintassi

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

Esempio 1

Nell'esempio seguente viene applicato il criterio Spike Arrest per ID sviluppatore:

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

Nella tabella seguente vengono descritti gli attributi di <Identifier>:

Attributo Descrizione Predefinito Presenza
ref Identifica la variabile in base alla quale Spike Arrest raggruppa le richieste in entrata. Puoi utilizzare qualsiasi variabile di flusso per indicare un cliente unico, come quelli disponibili con CriterioVerifyAPIKey. Puoi anche impostare variabili personalizzate utilizzando Il criterio JavaScript o il criterioAssignMessage n/d Obbligatorio

Questo elemento è discusso anche nel seguente post della community Apigee: http://community.apigee.com/questions/2807/how-does-the-edge-quota-policy-work-when-no-identi.html.

<MessageWeight>

Specifica la ponderazione definita per ogni messaggio. Il peso del messaggio modifica l'impatto di una singola richiesta sul calcolo del tasso di arresto dei picchi. Il peso del messaggio può essere qualsiasi di flusso, ad esempio un'intestazione HTTP, un parametro di query, un parametro di modulo o i contenuti del corpo del messaggio. Puoi anche utilizzare variabili personalizzate usando il criterio JavaScript o il metodo CriterioAssignMessage:

Da utilizzare insieme a <Identifier> per limitare ulteriormente le richieste del per client o app specifici.

Ad esempio, se l'arresto di picco <Rate> è 10pm e un'app invia richieste con una ponderazione di 2, allora sono consentiti solo cinque messaggi al minuto da perché ogni richiesta viene conteggiata come 2.

Valore predefinito n/d
Obbligatorio? Facoltativo
Tipo Numero intero
Elemento principale <SpikeArrest>
Elementi secondari Nessuno

Sintassi

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

Esempio 1

L'esempio seguente limita le richieste a 12 al minuto (una richiesta consentita ogni cinque secondi o 60/12):

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

In questo esempio, <MessageWeight> accetta un valore personalizzato (il valore weight l'intestazione nella richiesta) che regola le ponderazioni dei messaggi per client specifici. Questo fornisce un ulteriore controllo sulla limitazione per le entità identificate con Elemento <Identifier>.

Nella tabella seguente vengono descritti gli attributi di <MessageWeight>:

Attributo Descrizione Presenza Predefinito
ref Identifica la variabile di flusso che contiene il peso del messaggio per il client specifico. Può essere qualsiasi variabile di flusso, come parametro di query HTTP, intestazione o contenuto del corpo del messaggio. Per ulteriori informazioni, vedi Riferimento per le variabili di flusso. Puoi anche impostare variabili personalizzate utilizzando il criterio JavaScript o il criterioAssignMessage Obbligatorio N/D

<Rate>

Specifica la frequenza con cui limitare i picchi di traffico (o burst) impostando il numero di richieste consentite in intervalli al minuto o al secondo. Puoi utilizzare questo elemento anche in abbinamento con <Identifier> e <MessageWeight> per limitare in modo fluido il traffico in fase di runtime accettando valori dal client.

Valore predefinito n/d
Obbligatorio? Obbligatorio
Tipo Numero intero
Elemento principale <SpikeArrest>
Elementi secondari Nessuno

Sintassi

Puoi specificare le tariffe in uno dei seguenti modi:

  • Una frequenza statica specificata come corpo dell'elemento <Rate>
  • Un valore variabile, che può essere passato dal cliente. identificare nome della variabile di flusso utilizzando l'attributo ref
<SpikeArrest
  continueOnError="[false|true]"
  enabled="[true|false]"
  name="policy_name"
>
  <Rate ref="flow_variable">rate[pm|ps]</Rate>
</SpikeArrest>

I valori delle tariffe validi (definiti come valore variabile o nel corpo dell'elemento) devono saranno conformi al seguente formato:

  • intps (numero di richieste al secondo, semplificate in intervalli di millisecondi)
  • intpm (numero di richieste al minuto, semplificate in intervalli di secondi)

Il valore di int deve essere un numero intero positivo diverso da zero.

Esempio 1

L'esempio seguente imposta la frequenza su cinque richieste al secondo:

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

Il criterio riduce la frequenza a una richiesta consentita ogni 200 millisecondi (1000/5).

Esempio 2

L'esempio seguente imposta la frequenza su 12 richieste al minuto:

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

Questo criterio di esempio attenua la tariffa a una richiesta consentita ogni cinque secondi (60/12).

Nella tabella seguente vengono descritti gli attributi di <Rate>:

Attributo Descrizione Presenza Predefinito
ref Identifica una variabile di flusso che specifica la frequenza. Può essere qualsiasi flusso quali un parametro di query HTTP, un'intestazione, i contenuti del corpo del messaggio o un valore come una KVM. Per saperne di più, consulta Riferimento per le variabili di flusso.

Puoi anche usare le variabili personalizzate utilizzando il criterio JavaScript o il criterioAssignMessage

Se definisci sia ref sia il corpo di questo elemento, viene applicato il valore ref, che ha la precedenza quando la variabile di flusso è impostato nella richiesta. L'inverso è vero quando la variabile identificata in ref non è impostato nella richiesta).

Ad esempio:

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

In questo esempio, se il cliente non passa un valore "custom_rate" l'intestazione, quindi per il proxy API è di 1 richiesta al minuto per tutti i client. Se il cliente supera una "tasso_personalizzato" l'intestazione, la limitazione di frequenza sarà di 10 richieste al secondo per tutti i client il proxy, fino a quando viene inviata una richiesta senza viene inviata un'intestazione.

Puoi utilizzare <Identifier> per raggruppare le richieste in modo da applicare le tariffe personalizzate per tipo diverso di cliente.

Se specifichi un valore per ref ma non imposti la tariffa nel corpo della <Rate> e il client non trasmette un valore, viene quindi applicato il criterio Spike Arrest genera un errore.

Facoltativo n/d

<UseEffectiveCount>

Distribuisce il conteggio dei picchi di arresto tra i processori di messaggi (MP) quando si utilizza la scalabilità automatica gruppi.

Sintassi

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

Esempio 1

Nell'esempio seguente, <UseEffectiveCount> viene impostato su true:

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

L'elemento <UseEffectiveCount> è facoltativo. Il valore predefinito è false quando l'elemento viene omesso dalle norme relative all'arresto dei picchi.

Valore predefinito Falso
Obbligatorio? Facoltativo
Tipo Booleano
Elemento principale <SpikeArrest>
Elementi secondari Nessuno

Nella tabella seguente vengono descritti gli attributi dell'elemento <UseEffectiveCount>:

Attributo Descrizione Predefinito Presenza
ref Identifica la variabile che contiene il valore di <UseEffectiveCount>. Può essere Qualsiasi variabile di flusso, ad esempio un parametro di query HTTP, un'intestazione o i contenuti del corpo di un messaggio. Per ulteriori informazioni informazioni, consulta Riferimento per le variabili di flusso. Puoi anche impostare variabili personalizzate utilizzando il criterio JavaScript o il criterioAssignMessage n/d Facoltativo

L'effetto di <UseEffectiveCount> dipende dal suo valore:

  • true: il limite di frequenza di picco di un MP è <Rate> diviso per il numero corrente di MP nello stesso pod. Il limite aggregato è il valore di <Rate>. Quando gli MP vengono aggiunti (o rimossi) in modo dinamico, il loro singolo picco i limiti di frequenza aumenterà (o diminuiranno), ma il limite aggregato rimarrà invariato.
  • false (questo è il valore predefinito se omesso): il limite di frequenza di picco di ogni MP è ma semplicemente il valore del suo <Rate>. Il limite aggregato è la somma delle tariffe di tutti i MP. Quando vengono aggiunti (o rimossi) MP, i singoli limiti di percentuale di picco rimarranno invariati, ma il limite aggregato aumenterà (oppure diminuiscono).

La tabella seguente mostra l'effetto di <UseEffectiveCount> sul limite di frequenza effettivo di ogni MP:

Valore di <UseEffectiveCount>
false false false true true true
N. di MP 8 4 2 8 4 2
Valore di <Rate> 10 10 10 40 40 40
Tariffa effettiva per MP 10 10 10 5 10 20
Limite aggregato 80 40 20 40* 40* 40*
* Uguale a <Rate>.

In questo esempio, puoi notare che quando il numero di MP viene ridotto da 4 a 2, e <UseEffectiveCount> è false, la tariffa effettiva per MP rimane invariata (a 10). Ma quando <UseEffectiveCount> è true, la tariffa effettiva per MP passa da Da 10 a 20 quando il numero di MP diminuisce da 4 a 2.

Variabili di flusso

Quando viene eseguito un criterio di arresto dei picchi, viene compilata la seguente variabile di flusso:

Variabile Tipo Autorizzazione Descrizione
ratelimit.policy_name.failed Booleano Sola lettura Indica se il criterio non è riuscito (true o false).

Per saperne di più, consulta Riferimento per le variabili di flusso.

Messaggi di errore

Questa sezione descrive i codici e i messaggi di errore restituiti, nonché le variabili di errore. impostate da Edge quando questo criterio attiva un errore. È importante sapere se stai sviluppando regole di errore per per gestire gli errori. Per saperne di più, vedi Cosa devi sapere sugli errori relativi ai criteri e sulla gestione di errore.

Errori di runtime

Questi errori possono verificarsi quando il criterio viene eseguito.

Codice di errore Stato HTTP Causa Correggi
policies.ratelimit.FailedToResolveSpikeArrestRate 500 Questo errore si verifica se il riferimento alla variabile contenente l'impostazione della tariffa all'interno dell'elemento <Rate> non può essere risolto in un valore all'interno della funzione Spike Arrest . Questo elemento è obbligatorio e viene utilizzato per specificare il tasso di arresto dei picchi in nel formato intpm o intps.
policies.ratelimit.InvalidMessageWeight 500 Questo errore si verifica se il valore specificato per l'elemento <MessageWeight> tramite una variabile di flusso non è valida (valore non intero).
policies.ratelimit.SpikeArrestViolation 429

Il limite di frequenza è stato superato.

Errori di deployment

Questi errori possono verificarsi quando esegui il deployment di un proxy contenente questo criterio.

Nome errore Causa Correggi
InvalidAllowedRate Se il tasso di arresto dei picchi specificato nell'elemento <Rate> della funzione di arresto dei picchi Il criterio non è un numero intero o se la tariffa non ha ps o pm come suffisso, il deployment del proxy API non va a buon fine.

Variabili di errore

Queste variabili vengono impostate quando si verifica un errore di runtime. Per ulteriori informazioni, vedi Cosa devi sapere sugli errori relativi alle norme.

Variabili Dove Esempio
fault.name="fault_name" fault_name è il nome dell'errore, come elencato in Tabella Errori di runtime qui sopra. Il nome dell'errore è l'ultima parte del codice di errore. fault.name Matches "SpikeArrestViolation"
ratelimit.policy_name.failed policy_name è il nome specificato dall'utente del criterio che ha generato l'errore. ratelimit.SA-SpikeArrestPolicy.failed = true

Esempio di risposta di errore

Di seguito è riportato un esempio di risposta di errore:

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

Esempio di regola di errore

Di seguito è riportato un esempio di regola di errore per gestire un errore 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>

L'attuale codice di stato HTTP per il superamento di un limite di frequenza impostato da un criterio per le quote o i picchi di arresto è 429 (troppe richieste). Per modificare il codice di stato HTTP in 500 (Errore interno del server), imposta il valore features.isHTTPStatusTooManyRequestEnabled per false utilizzando Aggiorna l'API delle proprietà dell'organizzazione.

.

Ad esempio:

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

Schemi

Ogni tipo di criterio è definito da uno schema XML (.xsd). Come riferimento, consulta gli schemi dei criteri sono disponibili su GitHub.

Argomenti correlati