AdWords API Workshops – All rights reserved
API SERVER

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

Danial Klimkin, Google, Inc.

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

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

AdWords API Workshops – All rights reserved

● Все запросы к API имеют издержки
● Передача по сети, ...
Объединение по целям
● Несколько операций над одной кампанией
выполняются быстре, чем над разными
● Обращение к одной камп...
Отправляйте только изменения
● Изменяете объект?
● Отпарвляйте только изменения!
● Отправка объекта целиком замедляет
проц...
Кроме того…
● Используйте сжатие gzip для
запросов и ответов.
● Включите в User-Agent “gzip”
● Accept-Encoding: gzip

● Ис...
Определение “ограничения скорости”

AdWords API Workshops – All rights reserved
Ограничения скорости запросов
● Не фиксированы
● Зависят от нагрузки на сервер
● Различны для разных сервисов
● Меняются в...
Ошибки “ограничения скорости”
● RATE_EXCEEDED
○ пауза на retryAfterSeconds секунд

● CONCURRENT_MODIFICATIONS
○ увеличиваю...
Что делать при ограничении?
Careful coding...

AdWords API Workshops – All rights reserved
Простой пример
Java

ApiError[] errorArray = apiException.getErrors();
for (ApiError apiError : errorArray) {
if (apiError...
Простой пример -- описание
● Ошибка RateExceededError может возникнуть
при выполнении любого запроса
● Важно обрабатывать ...
Важные замечания по примеру
● Решение -- синхронное
● Вызывающий поток заблокирован
● Нет контроля за скоростью выполнения...
Решение на основе очередей
● Очереди сообщений (Message queues)
● Решения для распределения и
управление скоростью (thrott...
1. Одна очередь
Producer

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

Producer

Consumers
Consum...
Первое решение -- за и против
● За:
● Простота реализации
● Одна точка управления скоростью запросов
● Легко обрабатывать ...
2. Одна очередь с селекторами
Producers
Producers

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

Produc...
Второе решение -- за и против
● За:
● Группировка заданий по типу
● Частичный контроль за скоростью выполнения по
сервисам...
3. Несколько очередей
Исполнители выполняют
запрос

Producers
Consumer

Producers
Producers

Producers
Consumer

Throttlin...
Третье решение -- за и против
● За:
●
●
●
●
●

Полный контроль за скоростью выполнения
Модульность и расширяемость
Возможн...
Очереди сообщений: итого
● Решение зависит от масштаба задачи
● Внедрение -- инвестиция
● Следите за логами, очередями, ош...
Полезные ресурсы
API Best Practices - https://developers.google.
com/adwords/api/docs/guides/bestpractices
ActiveMQ - http...
Вопросы?
Спасибо!

AdWords API Workshops – All rights reserved
AdWords API Workshops – All rights reserved
Upcoming SlideShare
Loading in …5
×

Rate limits and performance (russian)

281 views
201 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
281
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Rate limits and performance (russian)

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

×