SlideShare une entreprise Scribd logo
1  sur  27
Télécharger pour lire hors ligne
AdWords API Workshops – All rights reserved
API SERVER

Rate Limits
e boas práticas da API

+GustavoMenezes, Google, Inc.

AdWords API Workshops – All rights reserved
Agenda
● Boas práticas
● O que são Rate Limits?
● Como tratar Rate Limits

AdWords API Workshops – All rights reserved
Boas Práticas
Pequenas 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
Agrupe Operações por Entidade
● 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

AdWords API Workshops – All rights reserved
Apenas Mude o Que Você Precisa
● Vai atualizar um objeto?
● Envie somente os valores diferentes!
● Enviar tudo desperdiça tempo
●

O sistema ainda vai validar tudo, salvar no BD, etc.

AdWords API Workshops – All rights reserved
Algumas Outras Idéias…
● 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

AdWords API Workshops – All rights reserved
Definindo Rate Limits

AdWords API Workshops – All rights reserved
Rate Limits
● Não são fixos!
● Variam com a carga no servidor
● Variam por funcionalidade
● Variam com a hora
● Diferente para cada serviço

AdWords API Workshops – All rights reserved
Erros de Rate Limit
● 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
AdWords API Workshops – All rights reserved
Como Tratar Rate Limits
Preste atenção nos detalhes...

AdWords API Workshops – All rights reserved
Exemplo Básico
Java

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);
}
}
AdWords API Workshops – All rights reserved

How to handle Rate Limits
Exemplo Básico - Explicação
● 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

AdWords API Workshops – All rights reserved
Exemplo Básico - Pontos Importante
● 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

AdWords API Workshops – All rights reserved
Uma Solução Mais Avançada
● 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.

AdWords API Workshops – All rights reserved
Message Queues (cont’d)
● 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...

AdWords API Workshops – All rights reserved
1. Fila Única
Producer

Producers criam tarefas para
serem executadas na API, e
despacham para a fila

Producer

Consumers
Consumers
Consumers

X

Queue

Throttling

Producer

Logging

Error

Consumers recebem as mensagens/tarefas
da fila com um rate controlado
AdWords API Workshops – All rights reserved
Primeira Solução - Pros & Cons
● 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

AdWords API Workshops – All rights reserved
2. Fila Única com Seletores
Producers
Producers

Producers criam tarefas específicas,
e despacham para a fila com o
cabeçalho específico

Producers
Producers

Cada consumer específico agrupa
as operações, e usa seu próprio
rate limit para executá-las
X
X
X
X

Producers
Producers

Queue

Throttling

Producers
Producers

Producers
Consumer

AdWords API Workshops – All rights reserved

Producers
Consumer
Producers
Consumer
Producers
Consumer

Error
Segunda Solução - Pros & Cons
● 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

AdWords API Workshops – All rights reserved
3. Múltiplas Filas
Executors fazem a requisição

Producers
Consumer

Producers
Producers

Producers
Consumer

Throttling

Producers
Producers

Producers
Producers
Producers
Producers

Producers
Consumer
Producers
Consumer

Queues

AdWords API Workshops – All rights reserved

Producers
Executors
Executors
Executors

Consumers agrupam tarefas
Error
X
X
X
X

Producers criam as
tarefas

Throttling

Logging
Terceira Solução - Pros & Cons
● 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

AdWords API Workshops – All rights reserved
Message Queues - Resumo
● 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...

AdWords API Workshops – All rights reserved
Links
API 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
AdWords API Workshops – All rights reserved

Contenu connexe

Similaire à Rate Limits e boas práticas da API AdWords

End to-end how to build a platform
End to-end how to build a platformEnd to-end how to build a platform
End to-end how to build a platformmarcwan
 
AwReporting Tool
AwReporting ToolAwReporting Tool
AwReporting Toolmarcwan
 
Api update rundown
Api update rundownApi update rundown
Api update rundownmarcwan
 
Construindo um micro-serviço Java 100% funcional em 15 minutos
Construindo um micro-serviço Java 100% funcional em 15 minutosConstruindo um micro-serviço Java 100% funcional em 15 minutos
Construindo um micro-serviço Java 100% funcional em 15 minutosRafael Chaves
 
OAuth 2.0 refresher
OAuth 2.0 refresherOAuth 2.0 refresher
OAuth 2.0 refreshermarcwan
 
Reusabilidade na Utilização de Frameworks Automatizados
Reusabilidade na Utilização de Frameworks Automatizados Reusabilidade na Utilização de Frameworks Automatizados
Reusabilidade na Utilização de Frameworks Automatizados Webcasts developerWorks Brasil
 
Scrum e Team Foundation Server - Qualidade ao longo de todo o ciclo de vida d...
Scrum e Team Foundation Server - Qualidade ao longo de todo o ciclo de vida d...Scrum e Team Foundation Server - Qualidade ao longo de todo o ciclo de vida d...
Scrum e Team Foundation Server - Qualidade ao longo de todo o ciclo de vida d...Igor Abade
 
AutomaçãoWeb - Chaordic Academy
AutomaçãoWeb - Chaordic AcademyAutomaçãoWeb - Chaordic Academy
AutomaçãoWeb - Chaordic AcademyFausto Siqueira
 
Menos teste e mais qualidade - como equilibrar essa equação?
Menos teste e mais qualidade - como equilibrar essa equação?Menos teste e mais qualidade - como equilibrar essa equação?
Menos teste e mais qualidade - como equilibrar essa equação?Igor Abade
 
Criando Aplicações Serverless - ARC302 - Sao Paulo Summit
Criando Aplicações Serverless -  ARC302 - Sao Paulo SummitCriando Aplicações Serverless -  ARC302 - Sao Paulo Summit
Criando Aplicações Serverless - ARC302 - Sao Paulo SummitAmazon Web Services
 
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...tdc-globalcode
 
GraphQL na GetNinjas (2017-09-20)
GraphQL na GetNinjas (2017-09-20)GraphQL na GetNinjas (2017-09-20)
GraphQL na GetNinjas (2017-09-20)Bruno Soares
 
[GUTS-RS] Evento julho 2017 - Como iniciar os testes de performance em uma a...
[GUTS-RS] Evento julho 2017 -  Como iniciar os testes de performance em uma a...[GUTS-RS] Evento julho 2017 -  Como iniciar os testes de performance em uma a...
[GUTS-RS] Evento julho 2017 - Como iniciar os testes de performance em uma a...GUTS-RS
 
Contêineres e VMs no mundo dos E-commerces (Devcommerce2016)
Contêineres e VMs no mundo dos E-commerces (Devcommerce2016)Contêineres e VMs no mundo dos E-commerces (Devcommerce2016)
Contêineres e VMs no mundo dos E-commerces (Devcommerce2016)Wellington Silva
 
DevCommerce Conference 2016: Vantagens e resultados de containers e VMs para ...
DevCommerce Conference 2016: Vantagens e resultados de containers e VMs para ...DevCommerce Conference 2016: Vantagens e resultados de containers e VMs para ...
DevCommerce Conference 2016: Vantagens e resultados de containers e VMs para ...iMasters
 
Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...
Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...
Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...Edlaine Zamora
 
AdWords Scripts
AdWords ScriptsAdWords Scripts
AdWords Scriptsmarcwan
 
ERES 2018 - Microserviços: Desafios para Lidar com a Qualidade
ERES 2018 - Microserviços: Desafios para Lidar com a QualidadeERES 2018 - Microserviços: Desafios para Lidar com a Qualidade
ERES 2018 - Microserviços: Desafios para Lidar com a QualidadeAndré Abe Vicente
 
Testes de Performance: Por Onde Começar?
Testes de Performance: Por Onde Começar?Testes de Performance: Por Onde Começar?
Testes de Performance: Por Onde Começar?Alan Cafruni Gularte
 

Similaire à Rate Limits e boas práticas da API AdWords (20)

End to-end how to build a platform
End to-end how to build a platformEnd to-end how to build a platform
End to-end how to build a platform
 
AwReporting Tool
AwReporting ToolAwReporting Tool
AwReporting Tool
 
Api update rundown
Api update rundownApi update rundown
Api update rundown
 
Construindo um micro-serviço Java 100% funcional em 15 minutos
Construindo um micro-serviço Java 100% funcional em 15 minutosConstruindo um micro-serviço Java 100% funcional em 15 minutos
Construindo um micro-serviço Java 100% funcional em 15 minutos
 
OAuth 2.0 refresher
OAuth 2.0 refresherOAuth 2.0 refresher
OAuth 2.0 refresher
 
Reusabilidade na Utilização de Frameworks Automatizados
Reusabilidade na Utilização de Frameworks Automatizados Reusabilidade na Utilização de Frameworks Automatizados
Reusabilidade na Utilização de Frameworks Automatizados
 
Scrum e Team Foundation Server - Qualidade ao longo de todo o ciclo de vida d...
Scrum e Team Foundation Server - Qualidade ao longo de todo o ciclo de vida d...Scrum e Team Foundation Server - Qualidade ao longo de todo o ciclo de vida d...
Scrum e Team Foundation Server - Qualidade ao longo de todo o ciclo de vida d...
 
AutomaçãoWeb - Chaordic Academy
AutomaçãoWeb - Chaordic AcademyAutomaçãoWeb - Chaordic Academy
AutomaçãoWeb - Chaordic Academy
 
Menos teste e mais qualidade - como equilibrar essa equação?
Menos teste e mais qualidade - como equilibrar essa equação?Menos teste e mais qualidade - como equilibrar essa equação?
Menos teste e mais qualidade - como equilibrar essa equação?
 
Criando Aplicações Serverless - ARC302 - Sao Paulo Summit
Criando Aplicações Serverless -  ARC302 - Sao Paulo SummitCriando Aplicações Serverless -  ARC302 - Sao Paulo Summit
Criando Aplicações Serverless - ARC302 - Sao Paulo Summit
 
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
 
GraphQL na GetNinjas (2017-09-20)
GraphQL na GetNinjas (2017-09-20)GraphQL na GetNinjas (2017-09-20)
GraphQL na GetNinjas (2017-09-20)
 
[GUTS-RS] Evento julho 2017 - Como iniciar os testes de performance em uma a...
[GUTS-RS] Evento julho 2017 -  Como iniciar os testes de performance em uma a...[GUTS-RS] Evento julho 2017 -  Como iniciar os testes de performance em uma a...
[GUTS-RS] Evento julho 2017 - Como iniciar os testes de performance em uma a...
 
Contêineres e VMs no mundo dos E-commerces (Devcommerce2016)
Contêineres e VMs no mundo dos E-commerces (Devcommerce2016)Contêineres e VMs no mundo dos E-commerces (Devcommerce2016)
Contêineres e VMs no mundo dos E-commerces (Devcommerce2016)
 
DevCommerce Conference 2016: Vantagens e resultados de containers e VMs para ...
DevCommerce Conference 2016: Vantagens e resultados de containers e VMs para ...DevCommerce Conference 2016: Vantagens e resultados de containers e VMs para ...
DevCommerce Conference 2016: Vantagens e resultados de containers e VMs para ...
 
Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...
Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...
Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...
 
AdWords Scripts
AdWords ScriptsAdWords Scripts
AdWords Scripts
 
ERES 2018 - Microserviços: Desafios para Lidar com a Qualidade
ERES 2018 - Microserviços: Desafios para Lidar com a QualidadeERES 2018 - Microserviços: Desafios para Lidar com a Qualidade
ERES 2018 - Microserviços: Desafios para Lidar com a Qualidade
 
TesteDeSoftware_WorkshopSINFO2014.pdf
TesteDeSoftware_WorkshopSINFO2014.pdfTesteDeSoftware_WorkshopSINFO2014.pdf
TesteDeSoftware_WorkshopSINFO2014.pdf
 
Testes de Performance: Por Onde Começar?
Testes de Performance: Por Onde Começar?Testes de Performance: Por Onde Começar?
Testes de Performance: Por Onde Começar?
 

Plus de marcwan

07. feeds update
07. feeds update07. feeds update
07. feeds updatemarcwan
 
AdWords Scripts and MCC Scripting
AdWords Scripts and MCC ScriptingAdWords Scripts and MCC Scripting
AdWords Scripts and MCC Scriptingmarcwan
 
AwReporting Update
AwReporting UpdateAwReporting Update
AwReporting Updatemarcwan
 
Getting Started with AdWords API and Google Analytics
Getting Started with AdWords API and Google AnalyticsGetting Started with AdWords API and Google Analytics
Getting Started with AdWords API and Google Analyticsmarcwan
 
Shopping Campaigns and AdWords API
Shopping Campaigns and AdWords APIShopping Campaigns and AdWords API
Shopping Campaigns and AdWords APImarcwan
 
API Updates for v201402
API Updates for v201402API Updates for v201402
API Updates for v201402marcwan
 
AdWords API Targeting Options
AdWords API Targeting OptionsAdWords API Targeting Options
AdWords API Targeting Optionsmarcwan
 
Reporting Tips and Tricks (Spanish)
Reporting Tips and Tricks (Spanish)Reporting Tips and Tricks (Spanish)
Reporting Tips and Tricks (Spanish)marcwan
 
Rate limits and performance (Spanish)
Rate limits and performance (Spanish)Rate limits and performance (Spanish)
Rate limits and performance (Spanish)marcwan
 
OAuth 2.0 (Spanish)
OAuth 2.0 (Spanish)OAuth 2.0 (Spanish)
OAuth 2.0 (Spanish)marcwan
 
End to-end how to build a platform (Spanish)
End to-end how to build a platform (Spanish)End to-end how to build a platform (Spanish)
End to-end how to build a platform (Spanish)marcwan
 
AwReporting tool introduction (Spanish)
AwReporting tool introduction (Spanish)AwReporting tool introduction (Spanish)
AwReporting tool introduction (Spanish)marcwan
 
Api update rundown (Spanish)
Api update rundown (Spanish)Api update rundown (Spanish)
Api update rundown (Spanish)marcwan
 
AdWords Scripts (Spanish)
AdWords Scripts (Spanish)AdWords Scripts (Spanish)
AdWords Scripts (Spanish)marcwan
 
Mobile landing pages (Spanish)
Mobile landing pages (Spanish)Mobile landing pages (Spanish)
Mobile landing pages (Spanish)marcwan
 
Mobile landing pages
Mobile landing pagesMobile landing pages
Mobile landing pagesmarcwan
 
Reporting tips & tricks
Reporting tips & tricksReporting tips & tricks
Reporting tips & tricksmarcwan
 
Reporting tips & tricks (russian)
Reporting tips & tricks (russian)Reporting tips & tricks (russian)
Reporting tips & tricks (russian)marcwan
 
Rate limits and performance (russian)
Rate limits and performance (russian)Rate limits and performance (russian)
Rate limits and performance (russian)marcwan
 

Plus de marcwan (19)

07. feeds update
07. feeds update07. feeds update
07. feeds update
 
AdWords Scripts and MCC Scripting
AdWords Scripts and MCC ScriptingAdWords Scripts and MCC Scripting
AdWords Scripts and MCC Scripting
 
AwReporting Update
AwReporting UpdateAwReporting Update
AwReporting Update
 
Getting Started with AdWords API and Google Analytics
Getting Started with AdWords API and Google AnalyticsGetting Started with AdWords API and Google Analytics
Getting Started with AdWords API and Google Analytics
 
Shopping Campaigns and AdWords API
Shopping Campaigns and AdWords APIShopping Campaigns and AdWords API
Shopping Campaigns and AdWords API
 
API Updates for v201402
API Updates for v201402API Updates for v201402
API Updates for v201402
 
AdWords API Targeting Options
AdWords API Targeting OptionsAdWords API Targeting Options
AdWords API Targeting Options
 
Reporting Tips and Tricks (Spanish)
Reporting Tips and Tricks (Spanish)Reporting Tips and Tricks (Spanish)
Reporting Tips and Tricks (Spanish)
 
Rate limits and performance (Spanish)
Rate limits and performance (Spanish)Rate limits and performance (Spanish)
Rate limits and performance (Spanish)
 
OAuth 2.0 (Spanish)
OAuth 2.0 (Spanish)OAuth 2.0 (Spanish)
OAuth 2.0 (Spanish)
 
End to-end how to build a platform (Spanish)
End to-end how to build a platform (Spanish)End to-end how to build a platform (Spanish)
End to-end how to build a platform (Spanish)
 
AwReporting tool introduction (Spanish)
AwReporting tool introduction (Spanish)AwReporting tool introduction (Spanish)
AwReporting tool introduction (Spanish)
 
Api update rundown (Spanish)
Api update rundown (Spanish)Api update rundown (Spanish)
Api update rundown (Spanish)
 
AdWords Scripts (Spanish)
AdWords Scripts (Spanish)AdWords Scripts (Spanish)
AdWords Scripts (Spanish)
 
Mobile landing pages (Spanish)
Mobile landing pages (Spanish)Mobile landing pages (Spanish)
Mobile landing pages (Spanish)
 
Mobile landing pages
Mobile landing pagesMobile landing pages
Mobile landing pages
 
Reporting tips & tricks
Reporting tips & tricksReporting tips & tricks
Reporting tips & tricks
 
Reporting tips & tricks (russian)
Reporting tips & tricks (russian)Reporting tips & tricks (russian)
Reporting tips & tricks (russian)
 
Rate limits and performance (russian)
Rate limits and performance (russian)Rate limits and performance (russian)
Rate limits and performance (russian)
 

Rate Limits e boas práticas da API AdWords

  • 1. AdWords API Workshops – All rights reserved
  • 2. API SERVER Rate Limits e boas práticas da API +GustavoMenezes, Google, Inc. AdWords API Workshops – All rights reserved
  • 3. Agenda ● Boas práticas ● O que são Rate Limits? ● Como tratar Rate Limits AdWords API Workshops – All rights reserved
  • 4. Boas Práticas Pequenas mudanças que melhoram performance AdWords API Workshops – All rights reserved
  • 5. 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
  • 6. Agrupe Operações por Entidade ● 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 AdWords API Workshops – All rights reserved
  • 7. Apenas Mude o Que Você Precisa ● Vai atualizar um objeto? ● Envie somente os valores diferentes! ● Enviar tudo desperdiça tempo ● O sistema ainda vai validar tudo, salvar no BD, etc. AdWords API Workshops – All rights reserved
  • 8. Algumas Outras Idéias… ● 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 AdWords API Workshops – All rights reserved
  • 9. Definindo Rate Limits AdWords API Workshops – All rights reserved
  • 10. Rate Limits ● Não são fixos! ● Variam com a carga no servidor ● Variam por funcionalidade ● Variam com a hora ● Diferente para cada serviço AdWords API Workshops – All rights reserved
  • 11. Erros de Rate Limit ● 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 AdWords API Workshops – All rights reserved
  • 12. Como Tratar Rate Limits Preste atenção nos detalhes... AdWords API Workshops – All rights reserved
  • 13. Exemplo Básico Java 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); } } AdWords API Workshops – All rights reserved How to handle Rate Limits
  • 14. Exemplo Básico - Explicação ● 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 AdWords API Workshops – All rights reserved
  • 15. Exemplo Básico - Pontos Importante ● 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 AdWords API Workshops – All rights reserved
  • 16. Uma Solução Mais Avançada ● 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. AdWords API Workshops – All rights reserved
  • 17. Message Queues (cont’d) ● 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... AdWords API Workshops – All rights reserved
  • 18. 1. Fila Única Producer Producers criam tarefas para serem executadas na API, e despacham para a fila Producer Consumers Consumers Consumers X Queue Throttling Producer Logging Error Consumers recebem as mensagens/tarefas da fila com um rate controlado AdWords API Workshops – All rights reserved
  • 19. Primeira Solução - Pros & Cons ● 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 AdWords API Workshops – All rights reserved
  • 20. 2. Fila Única com Seletores Producers Producers Producers criam tarefas específicas, e despacham para a fila com o cabeçalho específico Producers Producers Cada consumer específico agrupa as operações, e usa seu próprio rate limit para executá-las X X X X Producers Producers Queue Throttling Producers Producers Producers Consumer AdWords API Workshops – All rights reserved Producers Consumer Producers Consumer Producers Consumer Error
  • 21. Segunda Solução - Pros & Cons ● 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 AdWords API Workshops – All rights reserved
  • 22. 3. Múltiplas Filas Executors fazem a requisição Producers Consumer Producers Producers Producers Consumer Throttling Producers Producers Producers Producers Producers Producers Producers Consumer Producers Consumer Queues AdWords API Workshops – All rights reserved Producers Executors Executors Executors Consumers agrupam tarefas Error X X X X Producers criam as tarefas Throttling Logging
  • 23. Terceira Solução - Pros & Cons ● 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 AdWords API Workshops – All rights reserved
  • 24. Message Queues - Resumo ● 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... AdWords API Workshops – All rights reserved
  • 25. Links API 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
  • 27. AdWords API Workshops – All rights reserved