27
AdWords API Workshops – All rights reserved

Rate limits and performance

  • Upload
    marcwan

  • View
    105

  • Download
    0

Embed Size (px)

DESCRIPTION

São Paulo AdWords API Workshops

Citation preview

Page 1: Rate limits and performance

AdWords API Workshops – All rights reserved

Page 2: Rate limits and performance

AdWords API Workshops – All rights reserved

Rate Limitse boas práticas da API

+GustavoMenezes, Google, Inc.

API SERVER

Page 3: Rate limits and performance

AdWords API Workshops – All rights reserved

● Boas práticas

● O que são Rate Limits?

● Como tratar Rate Limits

Agenda

Page 4: Rate limits and performance

AdWords API Workshops – All rights reserved

Boas PráticasPequenas mudanças que melhoram performance

Page 5: Rate limits and 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

Page 6: Rate limits and performance

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

Page 7: Rate limits and performance

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

Page 8: Rate limits and performance

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…

Page 9: Rate limits and performance

AdWords API Workshops – All rights reserved

Definindo Rate Limits

Page 10: Rate limits and performance

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

Page 11: Rate limits and performance

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

Page 12: Rate limits and performance

AdWords API Workshops – All rights reserved

Como Tratar Rate LimitsPreste atenção nos detalhes...

Page 13: Rate limits and performance

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

Page 14: Rate limits and performance

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

Page 15: Rate limits and performance

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

Page 16: Rate limits and performance

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

Page 17: Rate limits and performance

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)

Page 18: Rate limits and performance

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

Page 19: Rate limits and performance

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

Page 20: Rate limits and performance

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

Page 21: Rate limits and performance

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

Page 22: Rate limits and performance

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

Page 23: Rate limits and performance

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

Page 24: Rate limits and performance

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

Page 26: Rate limits and performance

AdWords API Workshops – All rights reserved

Perguntas?Obrigado!

Page 27: Rate limits and performance

AdWords API Workshops – All rights reserved