Upload
marcwan
View
105
Download
0
Tags:
Embed Size (px)
DESCRIPTION
São Paulo AdWords API Workshops
Citation preview
AdWords API Workshops – All rights reserved
AdWords API Workshops – All rights reserved
Rate Limitse boas práticas da API
+GustavoMenezes, Google, Inc.
API SERVER
AdWords API Workshops – All rights reserved
● Boas práticas
● O que são Rate Limits?
● Como tratar Rate Limits
Agenda
AdWords API Workshops – All rights reserved
Boas PráticasPequenas mudanças que melhoram performance
AdWords API Workshops – All rights reserved
Execute Operações em Batch AdWords API Workshops – All rights reserved
● Requisições a API são custosas
● Transferência de rede, serialização, autenticação, etc.
● Agrupar operações reduz o custo
● Métodos mutate aceitam arrays de operações
● MutateJobService executa em batch
AdWords API Workshops – All rights reserved
● Multiplas operações nos mesmo AdGroups ou
Campanhas são rápidas
● Operações seguidas em AdGroups/Campanhas causam CONCURRENT_MODIFICATION errors● Servidor pode precisar de tempo para propagar● Tente editar tudo de uma única vez
Agrupe Operações por Entidade
AdWords API Workshops – All rights reserved
● Vai atualizar um objeto?
● Envie somente os valores diferentes!
● Enviar tudo desperdiça tempo● O sistema ainda vai validar tudo, salvar no BD, etc.
Apenas Mude o Que Você Precisa
AdWords API Workshops – All rights reserved
● Comprima as requisições com gzip● Inclua gzip no User-Agent● Accept-Encoding: contém gzip
● Use falha parcial● A API vai computar as operações
que deram certo● A API vai retornar as que falharam
Algumas Outras Idéias…
AdWords API Workshops – All rights reserved
Definindo Rate Limits
AdWords API Workshops – All rights reserved
● Não são fixos!
● Variam com a carga no servidor
● Variam por funcionalidade
● Variam com a hora
● Diferente para cada serviço
Rate Limits
AdWords API Workshops – All rights reserved
● RATE_EXCEEDED○ espere retryAfterSeconds segundos
● CONCURRENT_MODIFICATIONS○ Backoff exponencial, tente algumas vezes
● UNEXPECTED_INTERNAL_API_ERROR○ Backoff exponencial, tente algumas vezes○ Relate o problema no fórum
Erros de Rate Limit
AdWords API Workshops – All rights reserved
Como Tratar Rate LimitsPreste atenção nos detalhes...
AdWords API Workshops – All rights reserved
Exemplo Básico
ApiError[] errorArray = apiException.getErrors();
for (ApiError apiError : errorArray) {
if (apiError instanceof RateExceededError) {
int seconds = ((RateExceededError) apiError)
.getRetryAfterSeconds();
// wait the amount of seconds the server asked
Thread.sleep(seconds * 1000);
}
}
Java
How to handle Rate Limits
AdWords API Workshops – All rights reserved
● Qualquer req. pode gerar um RateExceededError ● Tratar esses errors é muito importante● Wait and retry é a melhor estratégia
nesse caso● Mais importante ainda quando
executando mais de um request
Exemplo Básico - Explicação
AdWords API Workshops – All rights reserved
● Solução síncrona para o problema
● Bloqueia a Thread até ter sucesso, ou falhar
● Sem controle sobre o rate speed
● Difícil de agrupar operações
Exemplo Básico - Pontos Importante
AdWords API Workshops – All rights reserved
● Message Queues
● A melhor solução para distribuir carga e fazer throttling
● Boas soluções disponíveis no mercado● ActiveMQ, RabbitMQ, … etc.
● Muitas ferramentas / bibliotecas para gerenciar a camada de comn.
Uma Solução Mais Avançada
AdWords API Workshops – All rights reserved
● Mais controle sobre os rate limits
● Melhor distribuição do código em módulos
● Vamos ver três possíveis soluções para o problema...
Message Queues (cont’d)
AdWords API Workshops – All rights reserved
Consumers
1. Fila Única
Queue
Producer
Producer
Producer
ConsumersThrottling
Producers criam tarefas para serem executadas na API, e despacham para a fila
Consumers recebem as mensagens/tarefas da fila com um rate controlado
X Error
Consumers
Logging
AdWords API Workshops – All rights reserved
● Pros:● Muito fácil de implementar● Apenas um ponto de controle na velocidade● Fácil de tratar os erros
● Cons:● Apenas um ponto de controle na velocidade● Difícil de agrupar operações● Tarefas podem demorar muito para serem executadas● Nem todas as filas implementam prioridade de mensagens
Primeira Solução - Pros & Cons
AdWords API Workshops – All rights reserved
Producers
Producers
Producers
Producers
2. Fila Única com Seletores
Queue
Producers
Producers
Producers
Producers
Producers
Producers
Producers
Producers
Consumer
Consumer
Consumer
Consumer
Throttling
Producers criam tarefas específicas, e despacham para a fila com o cabeçalho específico
Cada consumer específico agrupa as operações, e usa seu próprio rate limit para executá-las
XXXX Error
AdWords API Workshops – All rights reserved
● Pros:● Agrupa operações por tipo● Algum controle na velocidade por tipo● Mais eficiente - melhor acesso em paralelo da API
● Cons:● Apenas uma fila - difícil de administrar● Sem um controle principal de acesso a API● Gerenciar todas as partes pode ser difícil● Log de operações também pode ser difícil
Segunda Solução - Pros & Cons
AdWords API Workshops – All rights reserved
3. Múltiplas Filas
Producers
Producers
Producers
Producers
Queues
Producers
Producers
Producers
Producers
Producers
Producers
Producers
Producers
Consumer
Consumer
Consumer
Consumer
Throttling
XXXX
Error
ProducersExecutorsExecutorsExecutors
Throttling
Logging
Producers criam as tarefas
Consumers agrupam tarefas
Executors fazem a requisição
AdWords API Workshops – All rights reserved
● Pros:● Controle total sobre rate limits● Bastante robusta - fácil adicionar módulos novos● Visão completa do que está acontecendo na fila● Fácil de escalar baseado em demanda● Feito corretamente, é fácil de manter!● Super eficiente - Grouping paralelo; Acesso paralelo a API
● Cons:● Difícil de implementar corretamente - time experiente
Terceira Solução - Pros & Cons
AdWords API Workshops – All rights reserved
● Complexidade da plataforma que escolhe a solução
● Combine partes das soluções!
● Assunto complexo, mas existe retorno no futuro
● Invista muito em monitoramento. MUITO!
● Não existe silver bullet...
Message Queues - Resumo
AdWords API Workshops – All rights reserved
LinksAPI Best Practices - https://developers.google.com/adwords/api/docs/guides/bestpractices
ActiveMQ - http://activemq.apache.org/RabbitMQ - http://www.rabbitmq.com/
AdWords API Workshops – All rights reserved
Perguntas?Obrigado!
AdWords API Workshops – All rights reserved