26
© Copyright 2014 Andrey Smirnov Очереди Выполнение вычислительных действий Асинхронные коммуникации почта sms push-нотификации

Курс высокие нагрузки: очереди (отрывок)

Embed Size (px)

DESCRIPTION

Разработка надёжных высоконагруженных систем Москва, 24, 25 и 26 мая http://smira.highload.ru/ Трехдневный мастер-класс с практическими заданиями

Citation preview

Page 1: Курс высокие нагрузки:  очереди (отрывок)

© Copyright 2014 Andrey Smirnov

Очереди• Выполнение вычислительных действий

• Асинхронные коммуникации

• почта

• sms

• push-нотификации

• …

Page 2: Курс высокие нагрузки:  очереди (отрывок)

© Copyright 2014 Andrey Smirnov

Producer-Consumer

Page 3: Курс высокие нагрузки:  очереди (отрывок)

© Copyright 2014 Andrey Smirnov

Publish-Subscribe

• Publisher ничего не знает о subscriber

• Subcriber может указать фильтр получения (маску вида user.*.signup)

Page 4: Курс высокие нагрузки:  очереди (отрывок)

© Copyright 2014 Andrey Smirnov

beanstalkd• Producer-Consumer

• Простой протокол, нет кластеризации

• Очередь задач

• buried-задачи

• TTR

Page 5: Курс высокие нагрузки:  очереди (отрывок)

© Copyright 2014 Andrey Smirnov

Redis• Publish-Subscribe:

• PUBLISH, SUBSCRIBE, PSUBCRIBE, …

• Producer-Consumer:

• BLPOP, LPUSH, BRPOPLPUSH, …

• Сложно реализовать надежного consumer

Page 6: Курс высокие нагрузки:  очереди (отрывок)

© Copyright 2014 Andrey Smirnov

pgq

• Publish-Subscribe

• Реализовано средствами PostgreSQL

• Транзакционность

Page 7: Курс высокие нагрузки:  очереди (отрывок)

© Copyright 2014 Andrey Smirnov

Kafka• Publish-Subcribe, Producer-Consumer

• Распределенные очереди, репликация

• ZooKeeper в качестве динамической конфигурации

• Хранение очередей в файловой системе (последовательный ввод-вывод)

Page 8: Курс высокие нагрузки:  очереди (отрывок)

© Copyright 2014 Andrey Smirnov

Партиционирование очередей

• Очередь делится по ключу

• Каждая часть независима

• События внутри партиции упорядочены

Page 9: Курс высокие нагрузки:  очереди (отрывок)

© Copyright 2014 Andrey Smirnov

Consumer Group

• Consumerы из группы имеют общий указатель чтения

• Одна группа consumer’ов: produce-consume

• Каждый consumer в своей группе: publish-subscribe

Page 10: Курс высокие нагрузки:  очереди (отрывок)

© Copyright 2014 Andrey Smirnov

Failover• За партицией закреплен master и реплики

• Конфигурация в ZooKeeper

• Failover в случае недоступности, данные обновляются в ZooKeeper

• Клиент сам определяет, к какому узлу подсоединяться

Page 11: Курс высокие нагрузки:  очереди (отрывок)

© Copyright 2014 Andrey Smirnov

RabbitMQ

• Erlang

• “Победившая” реализация AMQP

• Реализация AMQP 0-9-1

Page 12: Курс высокие нагрузки:  очереди (отрывок)

© Copyright 2014 Andrey Smirnov

AMQP

• Протокол, разработанный, в частности iMatix

• Enterprise-взгляд

• “Один вариант для всех”

• Последующий отказ создателей от продолжения работы

Page 13: Курс высокие нагрузки:  очереди (отрывок)

© Copyright 2014 Andrey Smirnov

AMQP

Page 14: Курс высокие нагрузки:  очереди (отрывок)

© Copyright 2014 Andrey Smirnov

Direct Exchange

Page 15: Курс высокие нагрузки:  очереди (отрывок)

© Copyright 2014 Andrey Smirnov

Fanout Exchange

Page 16: Курс высокие нагрузки:  очереди (отрывок)

© Copyright 2014 Andrey Smirnov

Topic Exchange

Page 17: Курс высокие нагрузки:  очереди (отрывок)

© Copyright 2014 Andrey Smirnov

AMQP

• Брокер - SPOF

• Брокер конфигурируется API-запросами

• Надежные и ненадежные очереди

Page 18: Курс высокие нагрузки:  очереди (отрывок)

© Copyright 2014 Andrey Smirnov

Clustering

• Erlang кластер (не WAN)

• Дублируется конфигурация, но не очереди

• Клиент может подключаться к любому узлу

Page 19: Курс высокие нагрузки:  очереди (отрывок)

© Copyright 2014 Andrey Smirnov

High Availability

• На основе cluster

• У очереди есть master и slavе’ы

• Master-slave promotion

• Возможны потери и перепосылки сообщений

Page 20: Курс высокие нагрузки:  очереди (отрывок)

© Copyright 2014 Andrey Smirnov

Хранение очередей

• Хранение в памяти (пока возможно)

• Message Index - хранение содержимого сообщений

• Queue Index - принадлежность сообщений очереди

Page 21: Курс высокие нагрузки:  очереди (отрывок)

© Copyright 2014 Andrey Smirnov

Зачем еще нужна очередь?

• RPC ❔

• Метрики: события

• Сбор логов

Page 22: Курс высокие нагрузки:  очереди (отрывок)

© Copyright 2014 Andrey Smirnov

Надежность• Семантика очереди:

• producer положил в очередь, ack - ?

• consume

• at most once

• at least once

Page 23: Курс высокие нагрузки:  очереди (отрывок)

© Copyright 2014 Andrey Smirnov

Надежность

• Брокер очередей - SPOF

• Чем строже семантика, чем хуже производительность

• Распределенность накладывает ограничения

Page 24: Курс высокие нагрузки:  очереди (отрывок)

© Copyright 2014 Andrey Smirnov

Очередь в backend

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

• Корректный shutdown

• Надежность, применимость?

Page 25: Курс высокие нагрузки:  очереди (отрывок)

?© Copyright 2014 Andrey Smirnov

Где нам могут пригодиться очереди в twtr? Какой будет эта очередь?

Page 26: Курс высокие нагрузки:  очереди (отрывок)

© Copyright 2014 Andrey Smirnov

Разработка  надежных  высоконагруженных  систем

• 24,  25  и  26-­‐го  мая,  Москва  

• h4p://smira.highload.ru/  

• Мастер-­‐класс  с  практическими  заданиями