rate limits and performance (russian)
DESCRIPTION
TRANSCRIPT
AdWords API Workshops – All rights reserved
AdWords API Workshops – All rights reserved
Эффектиные API запросыи ограничения скорости
Danial Klimkin, Google, Inc.
API SERVER
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 Defining Rate Limits
● Не фиксированы
● Зависят от нагрузки на сервер
● Различны для разных сервисов
● Меняются во времени
● Разнятся для разных запросов
Ограничения скорости запросов
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
Что делать при ограничении?Careful coding...
AdWords API Workshops – All rights reserved
Простой пример
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
AdWords API Workshops – All rights reserved
● Ошибка 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
Consumers
How to handle Rate Limits
1. Одна очередь
Queue
Producer
Producer
Producer
ConsumersThrottling
Производитель создает задачи для выполнения и добавляет из в очередь
Потребитель достает задания из очереди с заданной скоростью
X Error
Consumers
Logging
AdWords API Workshops – All rights reserved
● За:● Простота реализации● Одна точка управления скоростью запросов● Легко обрабатывать ошибки
● Против:● Только одна точка управления скоростью запросов● Сложно группировать операции● Некоторые задачи будут долго выполняться● Нужна приоритезация и не везде она эффективна
Первое решение -- за и против
AdWords API Workshops – All rights reserved
Producers
Producers
Producers
Producers
How to handle Rate Limits
2. Одна очередь с селекторами
Queue
Producers
Producers
Producers
Producers
Producers
Producers
Producers
Producers
Consumer
Consumer
Consumer
Consumer
Throttling
Производители создают задачи разных типов и добавляют в очередь
Каждая группа потребителей обрабатывает задачи ее типа, со своей скоростью
XXXX Error
AdWords API Workshops – All rights reserved
● За:● Группировка заданий по типу● Частичный контроль за скоростью выполнения по
сервисам● Хорошая эффективность -- параллельность запросов
● Против:● Только одна очередь -- управление ограничено● Нет общего контроля скорости выполнения● Больше движущихся частей -- сложнее● Протоколирование усложняется
Второе решение -- за и против
AdWords API Workshops – All rights reserved How to handle Rate Limits
3. Несколько очередей
Producers
Producers
Producers
Producers
Queues
Producers
Producers
Producers
Producers
Producers
Producers
Producers
Producers
Consumer
Consumer
Consumer
Consumer
Throttling
XXXX
Error
ProducersExecutorsExecutorsExecutors
Throttling
Logging
Производители создают задачи
Потребители получают задачи
Исполнители выполняют запрос
AdWords API Workshops – All rights reserved
● За:● Полный контроль за скоростью выполнения● Модульность и расширяемость● Возможность управления разными очередями● Масштабируемость● Максимальные параллелизм и эффективность
● Против:● Сложность реализации
Третье решение -- за и против
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