Download - Курс высокие нагрузки: очереди (отрывок)
© Copyright 2014 Andrey Smirnov
Очереди• Выполнение вычислительных действий
• Асинхронные коммуникации
• почта
• sms
• push-нотификации
• …
© Copyright 2014 Andrey Smirnov
Producer-Consumer
© Copyright 2014 Andrey Smirnov
Publish-Subscribe
• Publisher ничего не знает о subscriber
• Subcriber может указать фильтр получения (маску вида user.*.signup)
© Copyright 2014 Andrey Smirnov
beanstalkd• Producer-Consumer
• Простой протокол, нет кластеризации
• Очередь задач
• buried-задачи
• TTR
© Copyright 2014 Andrey Smirnov
Redis• Publish-Subscribe:
• PUBLISH, SUBSCRIBE, PSUBCRIBE, …
• Producer-Consumer:
• BLPOP, LPUSH, BRPOPLPUSH, …
• Сложно реализовать надежного consumer
© Copyright 2014 Andrey Smirnov
pgq
• Publish-Subscribe
• Реализовано средствами PostgreSQL
• Транзакционность
© Copyright 2014 Andrey Smirnov
Kafka• Publish-Subcribe, Producer-Consumer
• Распределенные очереди, репликация
• ZooKeeper в качестве динамической конфигурации
• Хранение очередей в файловой системе (последовательный ввод-вывод)
© Copyright 2014 Andrey Smirnov
Партиционирование очередей
• Очередь делится по ключу
• Каждая часть независима
• События внутри партиции упорядочены
© Copyright 2014 Andrey Smirnov
Consumer Group
• Consumerы из группы имеют общий указатель чтения
• Одна группа consumer’ов: produce-consume
• Каждый consumer в своей группе: publish-subscribe
© Copyright 2014 Andrey Smirnov
Failover• За партицией закреплен master и реплики
• Конфигурация в ZooKeeper
• Failover в случае недоступности, данные обновляются в ZooKeeper
• Клиент сам определяет, к какому узлу подсоединяться
© Copyright 2014 Andrey Smirnov
RabbitMQ
• Erlang
• “Победившая” реализация AMQP
• Реализация AMQP 0-9-1
© Copyright 2014 Andrey Smirnov
AMQP
• Протокол, разработанный, в частности iMatix
• Enterprise-взгляд
• “Один вариант для всех”
• Последующий отказ создателей от продолжения работы
© Copyright 2014 Andrey Smirnov
AMQP
© Copyright 2014 Andrey Smirnov
Direct Exchange
© Copyright 2014 Andrey Smirnov
Fanout Exchange
© Copyright 2014 Andrey Smirnov
Topic Exchange
© Copyright 2014 Andrey Smirnov
AMQP
• Брокер - SPOF
• Брокер конфигурируется API-запросами
• Надежные и ненадежные очереди
© Copyright 2014 Andrey Smirnov
Clustering
• Erlang кластер (не WAN)
• Дублируется конфигурация, но не очереди
• Клиент может подключаться к любому узлу
© Copyright 2014 Andrey Smirnov
High Availability
• На основе cluster
• У очереди есть master и slavе’ы
• Master-slave promotion
• Возможны потери и перепосылки сообщений
© Copyright 2014 Andrey Smirnov
Хранение очередей
• Хранение в памяти (пока возможно)
• Message Index - хранение содержимого сообщений
• Queue Index - принадлежность сообщений очереди
© Copyright 2014 Andrey Smirnov
Зачем еще нужна очередь?
• RPC ❔
• Метрики: события
• Сбор логов
© Copyright 2014 Andrey Smirnov
Надежность• Семантика очереди:
• producer положил в очередь, ack - ?
• consume
• at most once
• at least once
© Copyright 2014 Andrey Smirnov
Надежность
• Брокер очередей - SPOF
• Чем строже семантика, чем хуже производительность
• Распределенность накладывает ограничения
© Copyright 2014 Andrey Smirnov
Очередь в backend
• После выполнения запроса часть действий остается во внутренней очереди
• Корректный shutdown
• Надежность, применимость?
?© Copyright 2014 Andrey Smirnov
Где нам могут пригодиться очереди в twtr? Какой будет эта очередь?
© Copyright 2014 Andrey Smirnov
Разработка надежных высоконагруженных систем
• 24, 25 и 26-‐го мая, Москва
• h4p://smira.highload.ru/
• Мастер-‐класс с практическими заданиями