SlideShare une entreprise Scribd logo
1  sur  26
Télécharger pour lire hors ligne
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

Contenu connexe

Similaire à 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
 
Zherdev icinga 20120423
Zherdev icinga 20120423Zherdev icinga 20120423
Zherdev icinga 20120423
kuchinskaya
 
Изоморфные React-приложения производительность и масштабирование / Денис Изма...
Изоморфные React-приложения производительность и масштабирование / Денис Изма...Изоморфные React-приложения производительность и масштабирование / Денис Изма...
Изоморфные React-приложения производительность и масштабирование / Денис Изма...
Ontico
 
C&C for coffee'n'code
C&C for coffee'n'codeC&C for coffee'n'code
C&C for coffee'n'code
Ivan Mosiev
 
Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...
Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...
Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...
Badoo Development
 
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Ontico
 

Similaire à 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
 
Организация процесса ручного тестирования
Организация процесса ручного тестированияОрганизация процесса ручного тестирования
Организация процесса ручного тестирования
 

Plus de 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 API
marcwan
 
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 Kratu
marcwan
 
07. feeds update
07. feeds update07. feeds update
07. feeds update
marcwan
 
AdWords Scripts and MCC Scripting
AdWords Scripts and MCC ScriptingAdWords Scripts and MCC Scripting
AdWords Scripts and MCC Scripting
marcwan
 
AwReporting Update
AwReporting UpdateAwReporting Update
AwReporting Update
marcwan
 
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
marcwan
 
Shopping Campaigns and AdWords API
Shopping Campaigns and AdWords APIShopping Campaigns and AdWords API
Shopping Campaigns and AdWords API
marcwan
 
API Updates for v201402
API Updates for v201402API Updates for v201402
API Updates for v201402
marcwan
 
AdWords API Targeting Options
AdWords API Targeting OptionsAdWords API Targeting Options
AdWords API Targeting Options
marcwan
 

Plus 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)
 

Dernier

Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Ирония безопасности
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
Хроники кибер-безопасника
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
Ирония безопасности
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
Хроники кибер-безопасника
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
Хроники кибер-безопасника
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
Хроники кибер-безопасника
 

Dernier (9)

Ransomware_Q3 2023. The report [RU].pdf
Ransomware_Q3 2023.  The report [RU].pdfRansomware_Q3 2023.  The report [RU].pdf
Ransomware_Q3 2023. The report [RU].pdf
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
 
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdfMalware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
 
MS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdfMS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdf
 

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