Estás viendo la documentación de Apigee Edge.
Ve a la
Documentación de Apigee X. información
La política Spike Arrest protege contra los aumentos de tráfico con el elemento <Rate>
. Este elemento regula la cantidad de solicitudes que procesa un proxy de API y se envía a un backend, lo que protege contra los retrasos de rendimiento y el tiempo de inactividad.
Elemento <SpikeArrest>
Define la política de Spike Arrest
Valor predeterminado | Consulta la pestaña Política predeterminada, a continuación |
¿Es obligatorio? | Opcional |
Tipo | Objeto complejo |
Elemento principal | n/a |
Elementos secundarios |
<Identifier> <MessageWeight> <Rate> (Obligatorio)<UseEffectiveCount> |
Sintaxis
El elemento <SpikeArrest>
usa la siguiente sintaxis:
<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>
Política predeterminada
En el siguiente ejemplo, se muestra la configuración predeterminada cuando se agrega una política de Spike Arrest a tu en la IU de 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>
Este elemento tiene los siguientes atributos que son comunes a todas las políticas:
Atributo | Predeterminada | (obligatorio) | Descripción |
---|---|---|---|
name |
N/A | Obligatorio |
El nombre interno de la política. El valor del atributo De forma opcional, usa el elemento |
continueOnError |
falso | Opcional | Si la estableces como "false", muestra un error cuando falla una política. Este es el comportamiento previsto para la mayoría de las políticas. Si su valor es "true", la ejecución del flujo continuará incluso después de que falle la política. |
enabled |
true | Opcional | Si estableces la política como "true", la aplicarás. Si la estableces como "false", se desactivará la política. La política no se aplicará, incluso si permanece conectada a un flujo. |
async |
falso | Funciones obsoletas | Este atributo dejó de estar disponible. |
Ejemplos
En los siguientes ejemplos, se muestran algunas de las formas en que puedes usar la política Spike Arrest:
Ejemplo 1
En el siguiente ejemplo, se establece la frecuencia en cinco por segundo:
<SpikeArrest name="Spike-Arrest-1"> <Rate>5ps</Rate> </SpikeArrest>
La política suaviza la tasa a una solicitud permitida cada 200 milisegundos (1,000/5).
Ejemplo 2
En el siguiente ejemplo, se establece la frecuencia en 12 por minuto:
<SpikeArrest name="Spike-Arrest-1"> <Rate>12pm</Rate> </SpikeArrest>
Esta política de ejemplo mitiga la frecuencia a una solicitud permitida cada cinco segundos (60/12).
Ejemplo 3
En el siguiente ejemplo, se restringen las solicitudes a 12 por minuto (una solicitud permitida cada cinco segundos o 60/12):
<SpikeArrest name="Spike-Arrest-1"> <Rate>12pm</Rate> <Identifier ref="client_id" /> <MessageWeight ref="request.header.weight" /> </SpikeArrest>
Además, el elemento <MessageWeight>
acepta un valor personalizado (el encabezado weight
) que ajusta el peso del mensaje para apps o clientes específicos. Esto proporciona un control adicional sobre el límite para las entidades que se identifican con el elemento <Identifier>
.
Ejemplo 4
En el siguiente ejemplo, se indica a Spike Arrest que busque un valor de tiempo de ejecución establecido a través del
solicitud que se pasa como la variable de flujo request.header.runtime_rate
:
<SpikeArrest name="Spike-Arrest-1"> <Rate ref="request.header.runtime_rate" /> </SpikeArrest>
El valor de la variable de flujo debe tener el formato intpm
o intps
.
Para probar este ejemplo, ejecuta una solicitud como la siguiente:
curl http://myorg-myenv.apigee.net/price -H 'runtime_rate:30ps'
Referencia del elemento secundario
En esta sección, se describen los elementos secundarios de <SpikeArrest>
.
<DisplayName>
Se usan además del atributo name
para etiquetar la política en el editor de proxy de la IU de administración con un nombre de lenguaje natural diferente.
El elemento <DisplayName>
es común a todas las políticas.
Valor predeterminado | N/A |
¿Es obligatorio? | Opcional. Si omites <DisplayName> , se usa el valor del atributo name de la política. |
Tipo | String |
Elemento principal | <PolicyElement> |
Elementos secundarios | Ninguna |
El elemento <DisplayName>
usa la siguiente sintaxis:
Sintaxis
<PolicyElement> <DisplayName>policy_display_name</DisplayName> ... </PolicyElement>
Ejemplo
<PolicyElement> <DisplayName>My Validation Policy</DisplayName> </PolicyElement>
El elemento <DisplayName>
no tiene atributos ni elementos secundarios.
<Identifier>
Te permite elegir cómo agrupar las solicitudes para que se pueda aplicar la política Spike Arrest según en el cliente. Por ejemplo, puedes agrupar las solicitudes por ID de desarrollador, en cuyo caso cada las solicitudes de los desarrolladores se contabilizarán en su propia tasa de Spike Arrest y no todas las solicitudes a proxy.
Instala junto con el elemento <MessageWeight>
para obtener un control más preciso sobre la regulación de solicitudes.
Si dejas el elemento <Identifier>
vacío, se aplica un límite de frecuencia para todas las solicitudes a ese proxy de API.
Valor predeterminado | N/A |
¿Es obligatorio? | Opcional |
Tipo | String |
Elemento principal |
<SpikeArrest>
|
Elementos secundarios | Ninguno |
Sintaxis
<SpikeArrest continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Identifier ref="flow_variable"/> </SpikeArrest>
Ejemplo 1
En el siguiente ejemplo, se aplica la política Spike Arrest por ID de desarrollador:
<SpikeArrest name="Spike-Arrest-1"> <Identifier ref="developer.id"/> <Rate>42pm</Rate/> </SpikeArrest>
En la siguiente tabla, se describen los atributos de <Identifier>
:
Atributo | Descripción | Predeterminado | Presencia |
---|---|---|---|
ref |
Identifica la variable por la que Spike Arrest agrupa las solicitudes entrantes. Puedes usar cualquier variable de flujo para indicar un cliente único, como los disponibles con la política VerifyAPIKey. También puedes usar variables personalizadas mediante la política de JavaScript o la Política de AssignMessage. | n/a | Obligatorio |
Este elemento también se analiza en la siguiente publicación de la Comunidad de Apigee: http://community.apigee.com/questions/2807/how-does-the-edge-quota-policy-work-when-no-identi.html.
<MessageWeight>
Especifica la ponderación definida para cada mensaje. El peso del mensaje modifica el impacto de una única solicitud sobre el cálculo de la tasa de Spike Arrest. El peso del mensaje puede ser cualquier variable de flujo, como un encabezado HTTP, un parámetro de consulta, un parámetro de formulario o contenido del cuerpo del mensaje. También puedes usar variables personalizadas mediante la política de JavaScript o la Política de AssignMessage.
Usa junto con <Identifier>
para limitar aún más las solicitudes de clientes o apps específicos.
Por ejemplo, si el argumento Spike Arrest <Rate>
es 10pm
y una app envía
con un peso de 2
, entonces solo se permiten cinco mensajes por minuto desde
porque cada solicitud cuenta como 2.
Valor predeterminado | N/A |
¿Es obligatorio? | Opcional |
Tipo | Entero |
Elemento principal |
<SpikeArrest>
|
Elementos secundarios | Ninguno |
Sintaxis
<SpikeArrest continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <MessageWeight ref="flow_variable"/> </SpikeArrest>
Ejemplo 1
En el siguiente ejemplo, se restringen las solicitudes a 12 por minuto (una solicitud permitida cada cinco segundos o 60/12):
<SpikeArrest name="Spike-Arrest-1"> <Rate>12pm</Rate> <Identifier ref="client_id" /> <MessageWeight ref="request.header.weight" /> </SpikeArrest>
En este ejemplo, <MessageWeight>
acepta un valor personalizado (el encabezado weight
en la solicitud) que ajusta la ponderación de los mensajes para clientes específicos. Esto proporciona un control adicional sobre el límite para las entidades que se identifican con el elemento <Identifier>
.
En la siguiente tabla, se describen los atributos de <MessageWeight>
:
Atributo | Descripción | Presence | Predeterminado |
---|---|---|---|
ref |
Identifica la variable de flujo que contiene la ponderación del mensaje para el cliente específico. Puede ser cualquier variable de flujo, como un parámetro de búsqueda HTTP, un encabezado o contenido del cuerpo del mensaje. Para obtener más información, consulta Referencia de variables de flujo. También puedes usar variables personalizadas mediante la política de JavaScript o la Política de AssignMessage. | Obligatorio | N/A |
<Rate>
Especifica la frecuencia a la que se deben limitar los aumentos repentinos de tráfico (o aumentos de actividad) mediante la configuración de la cantidad de solicitudes permitidas en intervalos por minuto o por segundo. También puedes usar este elemento junto con <Identifier>
y <MessageWeight>
a fin de limitar el tráfico en el entorno de ejecución con facilidad. Para ello, debes aceptar valores del cliente.
Valor predeterminado | N/A |
¿Es obligatorio? | Obligatorio |
Tipo | Entero |
Elemento principal |
<SpikeArrest>
|
Elementos secundarios | Ninguno |
Sintaxis
Puedes especificar tasas de una de las siguientes maneras:
- Una tasa estática que especificas como cuerpo del elemento
<Rate>
- Un valor variable, que el cliente puede pasar. Identificar el nombre de la variable de flujo con el atributo
ref
.
<SpikeArrest continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Rate ref="flow_variable">rate[pm|ps]</Rate> </SpikeArrest>
Los valores de las tarifas válidas (definidas como valores de variables o en el cuerpo del elemento) deben cumplir con el siguiente formato:
intps
(cantidad de solicitudes por segundo, se suman en intervalos de milisegundos)intpm
(cantidad de solicitudes por minuto, se suman en intervalos de segundos)
El valor de int debe ser un número entero positivo que no sea cero.
Ejemplo 1
En el ejemplo siguiente, se establece la frecuencia en cinco solicitudes por segundo:
<SpikeArrest name="Spike-Arrest-1"> <Rate>5ps</Rate> </SpikeArrest>
La política suaviza la tasa a una solicitud permitida cada 200 milisegundos (1,000/5).
Ejemplo 2
En el siguiente ejemplo, se establece la frecuencia a 12 solicitudes por minuto:
<SpikeArrest name="Spike-Arrest-1"> <Rate>12pm</Rate> </SpikeArrest>
Esta política de ejemplo mitiga la frecuencia a una solicitud permitida cada cinco segundos (60/12).
En la siguiente tabla, se describen los atributos de <Rate>
:
Atributo | Descripción | Presence | Predeterminado |
---|---|---|---|
ref |
Identifica una variable de flujo que especifica la frecuencia. Puede ser cualquier variable de flujo, como un parámetro de búsqueda HTTP, un encabezado o contenido del cuerpo del mensaje, o un valor, como una KVM. Para obtener más información, consulta Referencia de variables de flujo.
También puedes usar variables personalizadas mediante la política de JavaScript o la Política de AssignMessage. Si defines Por ejemplo: <Rate ref="request.header.custom_rate">1pm</Rate> En este ejemplo, si el cliente no pasa un valor de “custom_rate” y, luego, el para el proxy de API es de 1 solicitud por minuto para todos los clientes. Si el cliente pasa un “tasa_personalizada” encabezado, el límite de frecuencia será de 10 solicitudes por segundo el proxy, hasta que se genere una solicitud sin el valor de “custom_rate” de que se envíe el encabezado. Puedes usar Si especificas un valor para |
Opcional | N/A |
<UseEffectiveCount>
Distribuye los recuentos de Spike Arrest entre Message Processor (MP) cuando se usa el ajuste de escala automático. grupos.
Sintaxis
<SpikeArrest continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <UseEffectiveCount>[false|true]</UseEffectiveCount> </SpikeArrest>
Ejemplo 1
En el siguiente ejemplo, se configura <UseEffectiveCount>
como verdadero:
<SpikeArrest name='Spike-Arrest-1'> <Rate>40ps</Rate> <UseEffectiveCount>true</UseEffectiveCount> </SpikeArrest>
El elemento <UseEffectiveCount>
es opcional. El valor predeterminado es false
.
Cuando se omite el elemento de tu política Spike Arrest.
Valor predeterminado | Falso |
¿Es obligatorio? | Opcional |
Tipo | Booleano |
Elemento principal |
<SpikeArrest>
|
Elementos secundarios | Ninguna |
En la siguiente tabla, se describen los atributos del elemento <UseEffectiveCount>
:
Atributo | Descripción | Predeterminado | Presence |
---|---|---|---|
ref |
Identifica la variable que contiene el valor de <UseEffectiveCount> . Puede ser cualquier variable de flujo, como un parámetro de búsqueda HTTP, un encabezado o contenido del cuerpo del mensaje. Para obtener más información, consulta Referencia de variables de flujo. También puedes usar variables personalizadas mediante la política de JavaScript o la Política de AssignMessage. |
n/a | Opcional |
El efecto de <UseEffectiveCount>
depende de su valor:
true
: El límite de frecuencia de aumento de un MP es el<Rate>
dividido por la cantidad actual de miembros del Parlamento en el mismo grupo de anuncios. El límite agregado es el valor de<Rate>
. Cuando se agregan (o se quitan miembros del Parlamento de forma dinámica), sus aumentos los límites de frecuencia aumentarán (o disminuirán), pero el límite global se mantendrá igual.false
(este es el valor predeterminado si se omite): El límite de tasa de aumento de cada MP es solo el valor de su<Rate>
. El límite agregado es la suma de las tasas de todos los MP. Cuando se agregan (o se eliminan los MP) sus límites de tasa de aumento repentinos individuales se mantendrán iguales, pero el límite agregado aumentará (o disminuir).
En la siguiente tabla, se muestra el efecto de <UseEffectiveCount>
en el límite de tasa efectivo de
cada MP:
Valor de <UseEffectiveCount> |
||||||
---|---|---|---|---|---|---|
false |
false |
false |
true |
true |
true |
|
Cant. de MP | 8 | 4 | 2 | 8 | 4 | 2 |
Valor de <Rate> |
10 | 10 | 10 | 40 | 40 | 40 |
Tarifa efectiva por MP | 10 | 10 | 10 | 5 | 10 | 20 |
Límite total | 80 | 40 | 20 | 40* | 40* | 40* |
* Igual que <Rate> . |
En este ejemplo, observa que cuando la cantidad de MP se reduce de 4 a 2, y
<UseEffectiveCount>
es false
, la tarifa efectiva por MP no cambia (en
10). Pero cuando <UseEffectiveCount>
es true
, la tasa efectiva por MP pasa de
De 10 a 20 cuando la cantidad de MPS disminuye de 4 a 2.
Variables de flujo
Cuando se ejecuta una política de Spike Arrest, se propaga la siguiente variable de flujo:
Variable | Tipo | Permiso | Descripción |
---|---|---|---|
ratelimit.policy_name.failed |
Booleano | Solo lectura | Indica si la política falló o no (true o false ). |
Para obtener más información, consulta Referencia de variables de flujo.
Referencia de errores
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>
El código de estado HTTP actual para exceder un límite de frecuencia establecido por una política de Quota o Spike Arrest
es 429
(Demasiadas solicitudes). Para cambiar el código de estado HTTP a 500
, sigue estos pasos:
(Error interno del servidor), configura el
propiedad features.isHTTPStatusTooManyRequestEnabled
a false
con
el
Actualiza la API de propiedades de la organización.
Por ejemplo:
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>"
Esquemas
Un esquema XML (.xsd
) define cada tipo de política. Como referencia, los esquemas de políticas están disponibles en GitHub.
Temas relacionados
- Política de cuotas: Política de cuotas, para limitar el tráfico en clientes individuales
- Límite de frecuencia para una descripción general sobre el límite de frecuencia
- Comparación Políticas de cuota y SpikeArrest
- Muestras de trabajo de proxies de API