rate limits and performance (spanish)

27
AdWords API Workshops – All rights reserved

Upload: marcwan

Post on 21-Jan-2015

110 views

Category:

Technology


0 download

DESCRIPTION

AdWords API Workshops São Paulo

TRANSCRIPT

Page 1: Rate limits and performance (Spanish)

AdWords API Workshops – All rights reserved

Page 2: Rate limits and performance (Spanish)

AdWords API Workshops – All rights reserved

Rate Limits(Límites de frequencia)y buenas praxis de la API

+GustavoMenezes, Google, Inc.

API SERVER

Page 3: Rate limits and performance (Spanish)

AdWords API Workshops – All rights reserved

● Buenas praxis de la API

● ¿Qué son Rate Limits?

● ¿Cómo manejarlos?

Agenda

Page 4: Rate limits and performance (Spanish)

AdWords API Workshops – All rights reserved

Buenas PraxisPequeños detalles para mejorar el rendimiento

Page 5: Rate limits and performance (Spanish)

AdWords API Workshops – All rights reserved

Agrupar Operaciones AdWords API Workshops – All rights reserved

● Las Peticiones a la API tienen costos

● Transferencia de red, serialización, autenticación, etc.

● Agrupar de las operaciones en una única petición

● Los Métodos mutate aceptan más de una operación

● MutateJobService para agrupar

Page 6: Rate limits and performance (Spanish)

AdWords API Workshops – All rights reserved

● Múltiples operaciones en los mismos AdGroup /

Campaign son más rápidas

● Subsecuentes ediciones en los mismos AdGroup o Campaign pueden generar errores de tipo CONCURRENT_MODIFICATION ● Los servidores pueden tomar tiempo para hacer su trabajo● Intenten hacer todas las operaciones en

AdGroups/Campaigns a la vez

Agrupar Operaciones por Tipo

Page 7: Rate limits and performance (Spanish)

AdWords API Workshops – All rights reserved

● ¿Actualizando un objeto?

● Sólo envíen los valores que cambian!

● Enviar los otros valores es un derroche● El sistema va a validar, guardar en la BD, etc.

Actualizen Sólo lo Necesario

Page 8: Rate limits and performance (Spanish)

AdWords API Workshops – All rights reserved

● Compriman sus peticiones / respuestas con gzip● Aseguren que User-Agent: use “gzip”● Accept-Encoding: con listado gzip

● Usen la función de fallo parcial● Fuerza que la API serielice las

operaciones exitosas● Responde un listado con las operaciones

fallidas

Más Ideas…

Page 9: Rate limits and performance (Spanish)

AdWords API Workshops – All rights reserved

Definiendo Rate Limits

Page 10: Rate limits and performance (Spanish)

AdWords API Workshops – All rights reserved

● No son fijos

● Varían de acuerdo con la carga

● Varían por funcionalidad

● Cambian con el tiempo

● Son diferentes por servicio

Rate Limits

Page 11: Rate limits and performance (Spanish)

AdWords API Workshops – All rights reserved

● RATE_EXCEEDED○ esperen por retryAfterSeconds segundos

● CONCURRENT_MODIFICATIONS○ Parada exponencial, intenten pocas veces

● UNEXPECTED_INTERNAL_API_ERROR○ Parada exponencial, intenten pocas veces○ Informen del problema al CSR o por fórum

Errores de Rate Limits

Page 12: Rate limits and performance (Spanish)

AdWords API Workshops – All rights reserved

Cómo Manejar Los Rate LimitsPrograme con cuidado...

Page 13: Rate limits and performance (Spanish)

AdWords API Workshops – All rights reserved

Ejemplo Básico

ApiError[] errorArray = apiException.getErrors();

for (ApiError apiError : errorArray) {

if (apiError instanceof RateExceededError) {

int seconds = ((RateExceededError) apiError)

.getRetryAfterSeconds();

// esperen por la cantidad de segundos retornados

Thread.sleep(seconds * 1000);

}

}

Java

Page 14: Rate limits and performance (Spanish)

AdWords API Workshops – All rights reserved

● Cualquier petición puede generar un RateExceededError

● Manejar los errores es muy importante● Esperar y volver a intentar es la mejor

estrategia● Aún más importante para múltiples

peticiones

Ejemplo Básico - Explicación

Page 15: Rate limits and performance (Spanish)

AdWords API Workshops – All rights reserved

● Una solución sincrónica para el problema

● Bloquea el thread hasta que tenga éxito o falle

completamente

● No hay control sobre la frecuencia de las peticiones

● Es muy difícil agrupar operaciones

Puntos Importantes del Ejemplo Básico

Page 16: Rate limits and performance (Spanish)

AdWords API Workshops – All rights reserved

● Message Queues

● La solución perfecta para distribuir carga y hacer throttling

● Hay soluciones existentes muy buenas● ActiveMQ, RabbitMQ, … etc.

● Muchas herramientas / client libraries para manejar esta franja de comunicación

Una Solución un Poco Más Avanzada

Page 17: Rate limits and performance (Spanish)

AdWords API Workshops – All rights reserved

● Mayor control de la velocidad y de los límites

● Mejor separación de los módulos

● A continuación estudiaremos tres ejemplos que solucionan el problema...

Message Queues (cont.)

Page 18: Rate limits and performance (Spanish)

AdWords API Workshops – All rights reserved

Consumers

How to handle Rate Limits

1. Cola Única

Queue

Producer

Producer

Producer

ConsumersThrottling

Productores crean tareas que son ejecutadas en la API, y añadidas a la cola

Consumidores obtienen los mensajes/tareas de la cola para ejecutarlas

X Error

Consumers

Logging

Page 19: Rate limits and performance (Spanish)

AdWords API Workshops – All rights reserved

● Pros:● Muy fácil de implementar● Sólo hay un punto de control de velocidad de peticiones● Fácil de manejar errores

● Contras:● Sólo hay un punto de control de velocidad de peticiones● Difícil de agrupar operaciones● Las Tareas pueden retrasar la cola● No todas MQs manejan mensajes prioritarios

Primera Solución - Pros & Contras

Page 20: Rate limits and performance (Spanish)

AdWords API Workshops – All rights reserved

Cada consumidor específico puede agrupar las operaciones y ejecutarlas a su ritmo

Productores crean tareas específicas, y las añaden a la cola con un encabezado específico

Producers

Producers

Producers

Producers

How to handle Rate Limits

2. Cola Única con Selectores

Queue

Producers

Producers

Producers

Producers

Producers

Producers

Producers

Producers

Consumer

Consumer

Consumer

Consumer

Throttling

XXXX Error

Page 21: Rate limits and performance (Spanish)

AdWords API Workshops – All rights reserved

● Pros:● Agrupación de operaciones por tipo● Algún control de throttling por tipo● Mayor eficiencia - mejor acceso paralelo a la API

● Contras:● Sólo una cola - difícil de administrar● No hay control principal de velocidad● Manejar todas las partes puede ser difícil● Logging de operaciones puede ser complicado

Segunda Solución - Pros & Contras

Page 22: Rate limits and performance (Spanish)

AdWords API Workshops – All rights reserved How to handle Rate Limits

3. Colas Múltiples Queues

Producers

Producers

Producers

Producers

Queues

Producers

Producers

Producers

Producers

Producers

Producers

Producers

Producers

Consumer

Consumer

Consumer

Consumer

Throttling

XXXX

Error

ProducersExecutorsExecutorsExecutors

Throttling

Logging

Producers just spawn a lot of tasks

Consumers just group the tasks

Executors do the request

Page 23: Rate limits and performance (Spanish)

AdWords API Workshops – All rights reserved

● Pros:● Total control de velocidad de acceso● Muy robusto - muy fácil de añadir nuevas partes● Visión total de lo que pasa en el sistema● Fácil de crecer basado en demanda● Si esta hecho correctamente, es fácil de mantener!● Muy eficiente - Agrupación paralela; Acceso paralelo a la API

● Contras:● Difícil de implementar correctamente - se necesita práctica

Tercera Solución - Pros & Contras

Page 24: Rate limits and performance (Spanish)

AdWords API Workshops – All rights reserved

● Complejidad de su sistema determina la mejor solución

● Se pueden combinar partes de las soluciones!

● Es un tema complejo, pero le ayudará en el futuro

● Inviertan mucho en monitorizar. ¡Mucho!

● No hay un comodín...

Message Queues - Resumen

Page 26: Rate limits and performance (Spanish)

AdWords API Workshops – All rights reserved

¿Preguntas?¡Muchas gracias!

Page 27: Rate limits and performance (Spanish)

AdWords API Workshops – All rights reserved