SlideShare una empresa de Scribd logo
1 de 26
Descargar para leer sin conexión
AdWords API Workshops – All rights reserved
API SERVER

Эффектиные API запросы
и ограничения скорости

Danial Klimkin, Google, Inc.

AdWords API Workshops – All rights reserved
План
● Эффективное использование API
● Ограничения скорости по
запросам (rate limiting)
● Примеры реализации очередей
запросов для API

AdWords API Workshops – All rights reserved
Эффективное использование API
Простые советы как ускорить ваше приложение

AdWords API Workshops – All rights reserved
Объединение операций

AdWords API Workshops – All rights reserved

● Все запросы к API имеют издержки
● Передача по сети, сериализация, авторизация, etc.

● Группировка операция уменьшает издержки
● Метод mutate принимает массив операций
● MutateJobService для асинхронной обработки

AdWords API Workshops – All rights reserved
Объединение по целям
● Несколько операций над одной кампанией
выполняются быстре, чем над разными
● Обращение к одной кампании может вызвать ошибки
типа CONCURRENT_MODIFICATION
● Работайте с одной кампанией только из одного потока
● Фоновые сервисы так же работают с объектами

AdWords API Workshops – All rights reserved
Отправляйте только изменения
● Изменяете объект?
● Отпарвляйте только изменения!
● Отправка объекта целиком замедляет
процесс
●

Происходит проверка значений, сохранение в БД...

AdWords API Workshops – All rights reserved
Кроме того…
● Используйте сжатие gzip для
запросов и ответов.
● Включите в User-Agent “gzip”
● Accept-Encoding: gzip

● Используйте “partial failure”
● Выполяет все операции без ошибок
● Возвращает ошибки для остальных

AdWords API Workshops – All rights reserved
Определение “ограничения скорости”

AdWords API Workshops – All rights reserved
Ограничения скорости запросов
● Не фиксированы
● Зависят от нагрузки на сервер
● Различны для разных сервисов
● Меняются во времени
● Разнятся для разных запросов

AdWords API Workshops – All rights reserved

Defining Rate Limits
Ошибки “ограничения скорости”
● RATE_EXCEEDED
○ пауза на retryAfterSeconds секунд

● CONCURRENT_MODIFICATIONS
○ увеличивающаяся пауза, повтор

● UNEXPECTED_INTERNAL_API_ERROR
○ 1-2 попытки повторить
○ свяжитесь с нами, сообщите об ошибке
AdWords API Workshops – All rights reserved

Defining Rate Limits
Что делать при ограничении?
Careful coding...

AdWords API Workshops – All rights reserved
Простой пример
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
Простой пример -- описание
● Ошибка RateExceededError может возникнуть
при выполнении любого запроса
● Важно обрабатывать эту ошибку
● Подождать и повторить -- простейшая
стратегия в этом случае
● Особенно важно при выполнении
нескольких связанных запросов

AdWords API Workshops – All rights reserved
Важные замечания по примеру
● Решение -- синхронное
● Вызывающий поток заблокирован
● Нет контроля за скоростью выполнения
● Сложно группировать операции

AdWords API Workshops – All rights reserved
Решение на основе очередей
● Очереди сообщений (Message queues)
● Решения для распределения и
управление скоростью (throttling) запросов
● Много готовых решений на рынке
●

ActiveMQ, RabbitMQ, … etc.

● Существуют решения для большинства
платформ / языков

AdWords API Workshops – All rights reserved
1. Одна очередь
Producer

Производитель создает задачи
для выполнения и добавляет из
в очередь

Producer

Consumers
Consumers
Consumers

X

Queue

Throttling

Producer

Logging

Error

Потребитель достает задания из очереди
с заданной скоростью
AdWords API Workshops – All rights reserved

How to handle Rate Limits
Первое решение -- за и против
● За:
● Простота реализации
● Одна точка управления скоростью запросов
● Легко обрабатывать ошибки

● Против:
●
●
●
●

Только одна точка управления скоростью запросов
Сложно группировать операции
Некоторые задачи будут долго выполняться
Нужна приоритезация и не везде она эффективна

AdWords API Workshops – All rights reserved
2. Одна очередь с селекторами
Producers
Producers

Производители создают задачи
разных типов и добавляют в
очередь

Producers
Producers

Каждая группа потребителей
обрабатывает задачи ее типа,
со своей скоростью
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

How to handle Rate Limits
Второе решение -- за и против
● За:
● Группировка заданий по типу
● Частичный контроль за скоростью выполнения по
сервисам
● Хорошая эффективность -- параллельность запросов

● Против:
●
●
●
●

Только одна очередь -- управление ограничено
Нет общего контроля скорости выполнения
Больше движущихся частей -- сложнее
Протоколирование усложняется

AdWords API Workshops – All rights reserved
3. Несколько очередей
Исполнители выполняют
запрос

Producers
Consumer

Producers
Producers

Producers
Consumer

Throttling

Producers
Producers

Producers
Producers
Producers
Producers

Producers
Consumer
Producers
Executors
Executors
Executors

Producers
Consumer
Queues

Потребители получают задачи
Error

Logging

X
X
X
X

Производители
создают задачи

Throttling

AdWords API Workshops – All rights reserved

How to handle Rate Limits
Третье решение -- за и против
● За:
●
●
●
●
●

Полный контроль за скоростью выполнения
Модульность и расширяемость
Возможность управления разными очередями
Масштабируемость
Максимальные параллелизм и эффективность

● Против:
● Сложность реализации

AdWords API Workshops – All rights reserved
Очереди сообщений: итого
● Решение зависит от масштаба задачи
● Внедрение -- инвестиция
● Следите за логами, очередями, ошибками
● Нет одного идеального решения

AdWords API Workshops – All rights reserved
Полезные ресурсы
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
Вопросы?
Спасибо!

AdWords API Workshops – All rights reserved
AdWords API Workshops – All rights reserved

Más contenido relacionado

Similar a Rate limits and performance (russian)

OAuth 2.0 refresher (russian)
OAuth 2.0   refresher (russian)OAuth 2.0   refresher (russian)
OAuth 2.0 refresher (russian)marcwan
 
Api update rundown (russian)
Api update rundown (russian)Api update rundown (russian)
Api update rundown (russian)marcwan
 
Нагрузочное тестирование проектов на Drupal с использованием Apache JMeter
Нагрузочное тестирование проектов на Drupal с использованием Apache JMeterНагрузочное тестирование проектов на Drupal с использованием Apache JMeter
Нагрузочное тестирование проектов на Drupal с использованием Apache JMeterPVasili
 
Гибкие методологии разработки: максимальный результат для бизнеса с минимальн...
Гибкие методологии разработки: максимальный результат для бизнеса с минимальн...Гибкие методологии разработки: максимальный результат для бизнеса с минимальн...
Гибкие методологии разработки: максимальный результат для бизнеса с минимальн...Alexey Tigarev
 
Zherdev icinga 20120423
Zherdev icinga 20120423Zherdev icinga 20120423
Zherdev icinga 20120423kuchinskaya
 
Изоморфные React-приложения производительность и масштабирование / Денис Изма...
Изоморфные React-приложения производительность и масштабирование / Денис Изма...Изоморфные React-приложения производительность и масштабирование / Денис Изма...
Изоморфные React-приложения производительность и масштабирование / Денис Изма...Ontico
 
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»Yulia Tsisyk
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCDevDay
 
C&C for coffee'n'code
C&C for coffee'n'codeC&C for coffee'n'code
C&C for coffee'n'codeIvan Mosiev
 
Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...
Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...
Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...Badoo Development
 
Allure framework. Пример настройки исчерпывающего репорта на реальном проекте
Allure framework. Пример настройки исчерпывающего репорта на реальном проектеAllure framework. Пример настройки исчерпывающего репорта на реальном проекте
Allure framework. Пример настройки исчерпывающего репорта на реальном проектеCOMAQA.BY
 
Worldwide биллинг Badoo глазами QA
Worldwide биллинг Badoo глазами QAWorldwide биллинг Badoo глазами QA
Worldwide биллинг Badoo глазами QASQALab
 
Test automation. Part 2. Уровни. Методики. Стек автоматизации.
Test automation. Part 2. Уровни. Методики. Стек автоматизации.Test automation. Part 2. Уровни. Методики. Стек автоматизации.
Test automation. Part 2. Уровни. Методики. Стек автоматизации.Эдуард Сухарев
 
Что нового в Visual Studio 2015
Что нового в Visual Studio 2015Что нового в Visual Studio 2015
Что нового в Visual Studio 2015GetDev.NET
 
Тестирование веб-проектов в Agile
Тестирование веб-проектов в AgileТестирование веб-проектов в Agile
Тестирование веб-проектов в AgileSQALab
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеSQALab
 
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Ontico
 
Организация процесса ручного тестирования
Организация процесса ручного тестированияОрганизация процесса ручного тестирования
Организация процесса ручного тестированияIT61
 

Similar a Rate limits and performance (russian) (20)

OAuth 2.0 refresher (russian)
OAuth 2.0   refresher (russian)OAuth 2.0   refresher (russian)
OAuth 2.0 refresher (russian)
 
Api update rundown (russian)
Api update rundown (russian)Api update rundown (russian)
Api update rundown (russian)
 
Нагрузочное тестирование проектов на Drupal с использованием Apache JMeter
Нагрузочное тестирование проектов на Drupal с использованием Apache JMeterНагрузочное тестирование проектов на Drupal с использованием Apache JMeter
Нагрузочное тестирование проектов на Drupal с использованием Apache JMeter
 
Гибкие методологии разработки: максимальный результат для бизнеса с минимальн...
Гибкие методологии разработки: максимальный результат для бизнеса с минимальн...Гибкие методологии разработки: максимальный результат для бизнеса с минимальн...
Гибкие методологии разработки: максимальный результат для бизнеса с минимальн...
 
Zherdev icinga 20120423
Zherdev icinga 20120423Zherdev icinga 20120423
Zherdev icinga 20120423
 
Изоморфные React-приложения производительность и масштабирование / Денис Изма...
Изоморфные React-приложения производительность и масштабирование / Денис Изма...Изоморфные React-приложения производительность и масштабирование / Денис Изма...
Изоморфные React-приложения производительность и масштабирование / Денис Изма...
 
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
 
C&C for coffee'n'code
C&C for coffee'n'codeC&C for coffee'n'code
C&C for coffee'n'code
 
Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...
Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...
Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...
 
Swagger 2.0
Swagger 2.0Swagger 2.0
Swagger 2.0
 
Allure framework. Пример настройки исчерпывающего репорта на реальном проекте
Allure framework. Пример настройки исчерпывающего репорта на реальном проектеAllure framework. Пример настройки исчерпывающего репорта на реальном проекте
Allure framework. Пример настройки исчерпывающего репорта на реальном проекте
 
Worldwide биллинг Badoo глазами QA
Worldwide биллинг Badoo глазами QAWorldwide биллинг Badoo глазами QA
Worldwide биллинг Badoo глазами QA
 
Test automation. Part 2. Уровни. Методики. Стек автоматизации.
Test automation. Part 2. Уровни. Методики. Стек автоматизации.Test automation. Part 2. Уровни. Методики. Стек автоматизации.
Test automation. Part 2. Уровни. Методики. Стек автоматизации.
 
Что нового в Visual Studio 2015
Что нового в Visual Studio 2015Что нового в Visual Studio 2015
Что нового в Visual Studio 2015
 
Тестирование веб-проектов в Agile
Тестирование веб-проектов в AgileТестирование веб-проектов в Agile
Тестирование веб-проектов в Agile
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
 
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
 
Introduction to Automation Testing
Introduction to Automation TestingIntroduction to Automation Testing
Introduction to Automation Testing
 
Организация процесса ручного тестирования
Организация процесса ручного тестированияОрганизация процесса ручного тестирования
Организация процесса ручного тестирования
 

Más de marcwan

Mcc scripts deck (日本語)
Mcc scripts deck (日本語)Mcc scripts deck (日本語)
Mcc scripts deck (日本語)marcwan
 
Getting started with Google Analytics and the AdWords API
Getting started with Google Analytics and the AdWords APIGetting started with Google Analytics and the AdWords API
Getting started with Google Analytics and the AdWords APImarcwan
 
Bid Estimation with the AdWords API (v2)
Bid Estimation with the AdWords API (v2)Bid Estimation with the AdWords API (v2)
Bid Estimation with the AdWords API (v2)marcwan
 
Opportunity Analysis with Kratu (v2)
Opportunity Analysis with Kratu (v2)Opportunity Analysis with Kratu (v2)
Opportunity Analysis with Kratu (v2)marcwan
 
Opportunity Analysis with Kratu
Opportunity Analysis with KratuOpportunity Analysis with Kratu
Opportunity Analysis with Kratumarcwan
 
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
 

Más de marcwan (20)

Mcc scripts deck (日本語)
Mcc scripts deck (日本語)Mcc scripts deck (日本語)
Mcc scripts deck (日本語)
 
Getting started with Google Analytics and the AdWords API
Getting started with Google Analytics and the AdWords APIGetting started with Google Analytics and the AdWords API
Getting started with Google Analytics and the AdWords API
 
Bid Estimation with the AdWords API (v2)
Bid Estimation with the AdWords API (v2)Bid Estimation with the AdWords API (v2)
Bid Estimation with the AdWords API (v2)
 
Opportunity Analysis with Kratu (v2)
Opportunity Analysis with Kratu (v2)Opportunity Analysis with Kratu (v2)
Opportunity Analysis with Kratu (v2)
 
Opportunity Analysis with Kratu
Opportunity Analysis with KratuOpportunity Analysis with Kratu
Opportunity Analysis with Kratu
 
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)
 

Rate limits and performance (russian)

  • 1. AdWords API Workshops – All rights reserved
  • 2. API SERVER Эффектиные API запросы и ограничения скорости Danial Klimkin, Google, Inc. AdWords API Workshops – All rights reserved
  • 3. План ● Эффективное использование API ● Ограничения скорости по запросам (rate limiting) ● Примеры реализации очередей запросов для API AdWords API Workshops – All rights reserved
  • 4. Эффективное использование API Простые советы как ускорить ваше приложение AdWords API Workshops – All rights reserved
  • 5. Объединение операций AdWords API Workshops – All rights reserved ● Все запросы к API имеют издержки ● Передача по сети, сериализация, авторизация, etc. ● Группировка операция уменьшает издержки ● Метод mutate принимает массив операций ● MutateJobService для асинхронной обработки AdWords API Workshops – All rights reserved
  • 6. Объединение по целям ● Несколько операций над одной кампанией выполняются быстре, чем над разными ● Обращение к одной кампании может вызвать ошибки типа CONCURRENT_MODIFICATION ● Работайте с одной кампанией только из одного потока ● Фоновые сервисы так же работают с объектами AdWords API Workshops – All rights reserved
  • 7. Отправляйте только изменения ● Изменяете объект? ● Отпарвляйте только изменения! ● Отправка объекта целиком замедляет процесс ● Происходит проверка значений, сохранение в БД... AdWords API Workshops – All rights reserved
  • 8. Кроме того… ● Используйте сжатие gzip для запросов и ответов. ● Включите в User-Agent “gzip” ● Accept-Encoding: gzip ● Используйте “partial failure” ● Выполяет все операции без ошибок ● Возвращает ошибки для остальных AdWords API Workshops – All rights reserved
  • 10. Ограничения скорости запросов ● Не фиксированы ● Зависят от нагрузки на сервер ● Различны для разных сервисов ● Меняются во времени ● Разнятся для разных запросов AdWords API Workshops – All rights reserved Defining Rate Limits
  • 11. Ошибки “ограничения скорости” ● RATE_EXCEEDED ○ пауза на retryAfterSeconds секунд ● CONCURRENT_MODIFICATIONS ○ увеличивающаяся пауза, повтор ● UNEXPECTED_INTERNAL_API_ERROR ○ 1-2 попытки повторить ○ свяжитесь с нами, сообщите об ошибке AdWords API Workshops – All rights reserved Defining Rate Limits
  • 12. Что делать при ограничении? Careful coding... AdWords API Workshops – All rights reserved
  • 13. Простой пример 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. Простой пример -- описание ● Ошибка RateExceededError может возникнуть при выполнении любого запроса ● Важно обрабатывать эту ошибку ● Подождать и повторить -- простейшая стратегия в этом случае ● Особенно важно при выполнении нескольких связанных запросов AdWords API Workshops – All rights reserved
  • 15. Важные замечания по примеру ● Решение -- синхронное ● Вызывающий поток заблокирован ● Нет контроля за скоростью выполнения ● Сложно группировать операции AdWords API Workshops – All rights reserved
  • 16. Решение на основе очередей ● Очереди сообщений (Message queues) ● Решения для распределения и управление скоростью (throttling) запросов ● Много готовых решений на рынке ● ActiveMQ, RabbitMQ, … etc. ● Существуют решения для большинства платформ / языков AdWords API Workshops – All rights reserved
  • 17. 1. Одна очередь Producer Производитель создает задачи для выполнения и добавляет из в очередь Producer Consumers Consumers Consumers X Queue Throttling Producer Logging Error Потребитель достает задания из очереди с заданной скоростью AdWords API Workshops – All rights reserved How to handle Rate Limits
  • 18. Первое решение -- за и против ● За: ● Простота реализации ● Одна точка управления скоростью запросов ● Легко обрабатывать ошибки ● Против: ● ● ● ● Только одна точка управления скоростью запросов Сложно группировать операции Некоторые задачи будут долго выполняться Нужна приоритезация и не везде она эффективна AdWords API Workshops – All rights reserved
  • 19. 2. Одна очередь с селекторами Producers Producers Производители создают задачи разных типов и добавляют в очередь Producers Producers Каждая группа потребителей обрабатывает задачи ее типа, со своей скоростью 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 How to handle Rate Limits
  • 20. Второе решение -- за и против ● За: ● Группировка заданий по типу ● Частичный контроль за скоростью выполнения по сервисам ● Хорошая эффективность -- параллельность запросов ● Против: ● ● ● ● Только одна очередь -- управление ограничено Нет общего контроля скорости выполнения Больше движущихся частей -- сложнее Протоколирование усложняется AdWords API Workshops – All rights reserved
  • 21. 3. Несколько очередей Исполнители выполняют запрос Producers Consumer Producers Producers Producers Consumer Throttling Producers Producers Producers Producers Producers Producers Producers Consumer Producers Executors Executors Executors Producers Consumer Queues Потребители получают задачи Error Logging X X X X Производители создают задачи Throttling AdWords API Workshops – All rights reserved How to handle Rate Limits
  • 22. Третье решение -- за и против ● За: ● ● ● ● ● Полный контроль за скоростью выполнения Модульность и расширяемость Возможность управления разными очередями Масштабируемость Максимальные параллелизм и эффективность ● Против: ● Сложность реализации AdWords API Workshops – All rights reserved
  • 23. Очереди сообщений: итого ● Решение зависит от масштаба задачи ● Внедрение -- инвестиция ● Следите за логами, очередями, ошибками ● Нет одного идеального решения AdWords API Workshops – All rights reserved
  • 24. Полезные ресурсы 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
  • 26. AdWords API Workshops – All rights reserved