Очереди и блокировки. Теория и практика / Александр...

111
Очереди и блокировки Календарёв Александр [email protected] www.slideshare.net/akalend

Transcript of Очереди и блокировки. Теория и практика / Александр...

Page 1: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Очереди и блокировки

Календарёв Александр

[email protected]

www.slideshare.net/akalend

Page 2: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

О чём речь ...

• Зачем нужна очередь• Где и как она используется• Протоколы • AMQP (на примере RabbitMQ)• Блокировки

Page 3: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

WEB

Типовая архитектураJunior проект

Page 4: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

WEB

Типовая архитектураJunior проект

Page 5: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

WEB

Типовая архитектураJunior проект

Page 6: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

WEB

Типовая архитектураJunior проект

Page 7: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

WEB

Типовая архитектураJunior проект

HTTP ERROR 504504 Gateway Timeout error

Page 8: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

WEB

Типовая архитектураJunior проект

WEB

Page 9: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

WEB

Типовая архитектураJunior проект

WEB

Page 10: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

WEB

Типовая архитектураJunior проект

WEB

Page 11: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

WEB

Типовая архитектураJunior проект

WEBMySQL ERROR 2006MySQL gone away

Page 12: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Типовая архитектурауже не Junior проект

Master

WEB

WEB

Slave

Page 13: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Типовая архитектурауже не Junior проект

Master

WEB

WEB

Slave

HTTP ERROR 502Bad Gaetway

Page 14: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Типовая архитектурауже не Junior проект

Master

WEB

WEB

Slave

Page 15: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Типовая архитектурауже не Junior проект

Master

WEB

WEB

Slave

Page 16: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Типовая архитектурауже не Junior проект

Быстрая часть

Критическая часть

Медленная часть

Не очень важная часть

Page 17: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Типовая архитектурауже не Junior проект

Быстрая часть

Критическая часть

Медленная часть

Не очень важная часть

Page 18: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Типовая архитектурауже не Junior проект

Быстрая часть

Критическая часть

Медленная часть

Не очень важная часть

WEB

Backend

Page 19: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Паттерн: хитрый ученик

Быстрая часть

Критическая часть

Медленная часть

Не очень важная часть

WEB

Backend© СоюзМультФильм

Page 20: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Паттерн: хитрый ученик

© СоюзМультФильм

Сперва скажу, что выучил уроки, а потом сделаю...

Page 21: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Паттерн: хитрый ученикотложенные вычисления

© СоюзМультФильм

Вычисляем по мере необходимости

Page 22: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Использование Backend сервера

BackendWEB

Page 23: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Проблема синхронизации и обмена данными

BackendWEB

WEB Backend

Page 24: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Проблема синхронизации и обмена данными

BackendWEB

WEB Backend

?

Page 25: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Проблема синхронизации и обмена данными

BackendWEB

WEB Backend

Очередь

Page 26: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Очередь – это список

FIFO – First Input First Output

Page 27: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Поговорим о ...

• Зачем нужна очередь• Где и как она используется• Протоколы • AMQP (на примере RabbitMQ)• Блокировки

Page 28: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)
Page 29: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Взаимодействие частей проекта

ЗагрузкаYML

Сведениев pricelist

ПарсингYML

Загрузкаimg

Page 30: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Взаимодействие частей проекта

ЗагрузкаYML

Сведениев pricelist

ПарсингYML

Загрузкаimg

Page 31: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Очередь через БД

CREAE TABLE queue ( id BIGINT AUTOINCREMENT NOT NULL, data VARCHAR (…), PRIMARYKEY (id))

Page 32: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Очередь через БД

Запись в очередь:

INSERT INTO queue (data) VALUES (...);

Page 33: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Очередь через БД

Чтение из очереди:

SELECT * FROM queue ORDER BY id LIMIT 1 DELETE FROM queue WHERE id = ?

Page 34: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Очередь через БД

Чтение из очереди:

LOCK TABLE queue;SELECT * FROM queue ORDER BY id LIMIT 1 DELETE FROM queue WHERE id = ?UNLOCK TABLE queue;

Page 35: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Очередь через БД

НадежноМедленноМожно хранить историю (UDATE SET deleted=1 вместо DELETE)

Page 36: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Очередь через MongoDb

Вставка: db.queue.insert(...);

Page 37: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Очередь через MongoDb

Вставка: db.queue.insert(...);

Чтение: db.queue.findAndModify({ query : {}, remove:1 })

Page 38: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Очередь через MongoDb

Надежно

Медленно, быстрее, чем БД

Page 39: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Использование Tarantool

Page 40: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Использование Tarantool

WEB

Page 41: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Использование Tarantool

BackendWEB

Page 42: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Использование Tarantool

• Memory Only хранилище •Необходимо следить за памятью•Необходим мониторинг системы

Page 43: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Использование Tarantool

●Репликация из коробки●Возможен шардинг (дополнительный пакет)

●Персистентность данных

Page 44: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Использование Tarantool

Есть специальный пакет Queue$tnt = new Tarantool('localhost', 3301);$tnt->connect(); $tnt->select('q1');

$tnt->call('queue.tube.q1:put', $data);$tnt->call('queue.tube.q1:take', 0.1 ));

Page 45: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Использование Tarantool

Синхронный:while(1) { $data= $tnt->call('queue.tube.q1:take' )); … /* обработка данных */}

Page 46: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Использование Tarantool

Асинхронный:while(1) { $data= $tnt->call('queue.tube.q1:take', 0.1 )); If (!$data) { usleep(1000); continue; } … /* обработка данных */}

Page 47: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Использование TarantoolПакет Queue

●Очереди с приоритетом●Жизнь элемента очереди ttl●Подтверждение доставки●Синхронные / асинхронные запросы●Можно самому менять логику

Page 48: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Использование Redis

Операции со списками

●RPUSH●LPOP

Head

Tail

Page 49: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Использование Redis

Page 50: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Использование Redis

WEB

Page 51: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Использование Redis

WEB

Curl

Page 52: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Использование Redis

WEB Backend

Curl

Page 53: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Использование Redis

Memory Only хранилище●Необходимо следить за памятью, мониторинг●Персистентно

Page 54: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Использование Redis

Операции со списками

● RPUSH {key} {data}

● LPOP {key}, BLPOP (блокирующий)

● COUNT {key}

Page 55: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Использование Redis (часть 2)

Проект загрузки видео

Youtube

Vimeo

Vk

Page 56: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Использование Redis (часть 2)

LoadConvertWEB

CurlКлиентскийскрипт

Page 57: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Использование Redis (часть 2)

LoadConvertWEB

Клиентскийскрипт

Page 58: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Использование Redis (часть 2)

LoadConvertWEB

Клиентскийскрипт

Необходимо проинформировать

Page 59: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Использование Redis (часть 2)

LoadConvertWEB

Клиентскийскрипт

Постоянно Проверяем статус

Способ – I Push

Curl

Page 60: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Использование Redis (часть 2)

LoadConvertWEB

Клиентскийскрипт

устанавливаемстатус: Выполнено

Способ – I Push

Page 61: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Использование Redis (часть 2)

LoadConvertWEB

Клиентскийскрипт

Отдаёт статус: Выполнено

Способ – I Push

Page 62: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Использование Redis (часть 2)

LoadConvertWEB

Клиентскийскрипт

Способ – I Push

Загружаем файл

Page 63: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Использование Redis (часть 2)

LoadConvertWEB

Клиентскийскрипт

WebSocketsПодписываемся на канал SUBRIBE

Способ – II Pull

Curl

Page 64: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Использование Redis (часть 2)

LoadConvertWEB

Клиентскийскрипт

PUSH: Выполнено

Способ – II Pull

Page 65: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Использование Redis (часть 2)

LoadConvertWEB

Клиентскийскрипт

Способ – II Pull

Получаем статусВыполнено

Page 66: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Использование Redis (часть 2)

LoadConvertWEB

Клиентскийскрипт

Способ – II Pull

Загружаем файл

Page 67: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Паттерн Писатель / Читатель Подписка / Публикация

●PUBLISH {channel} {data}

●SUBSCRIBE {channel}

●UNSUBSCRIBE {channel}

Page 68: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Паттерн Писатель / Читатель Подписка / Публикация

Приемникданных

Внешнийисточник

PUBLISH

SUBSCR

Page 69: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

MemcachedQ

Протокол memcached●SET {key} {data}●GET {key}

memcached + berkeleyDb

Page 70: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

MemcachedQ● Быстро● Работает, пока есть память● Масштабируется в рамках клиента libmemcached● Не возможен мониторинг

Page 71: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Zerro MQ

Это встраиваемое решениеOтсутствует брокер

Очень быстрое решение: - Запрос / Ответ - Подписка / Публикация - Потоковой обмен

Page 72: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Apache Kafka

●Система потоковой обработки сообщений, разрабатывалась для сбора логов●Распределённоe решение●С подтверждением доставки

Page 73: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Apache Kafka

●Очень производителен в кластере●Требует синхронизации кластера через Zookeper

Page 74: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

О чём речь ...

• Зачем нужна очередь• Где и как она используется• Протоколы (кратко) • AMQP (на примере RabbitMQ)• Блокировки

Page 75: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Протоколы• STOMP- Simple (or Streaming) Text Oriented Message Protocol

• MQTT - Message Queue Telemetry Transport

• AMQP - Advanced Message Queuing Protocol

Page 76: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Протокол STOMP

• Текстовый (по верх HTTP, Websocket)

• Сообщение имеет тело и заголовок

• Сообщение может быть разделено на фреймы

• Подписка / Публикация

• Подтверждение доставки, Авторизация

Page 77: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Протокол MQTT

• Бинарный

• Сообщение имеет тело и заголовок

• Сообщение может быть разделено на фреймы

• Подписка / Публикация

• Подтверждение доставки, Авторизация

Page 78: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Поддержка протоколов

Реализация Java

Реализация erlang

Реализация Java / C++

Page 79: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Поговорим о ...

• Зачем нужна очередь• Где и как она используется• Протоколы • AMQP (на примере RabbitMQ)• Блокировки

Page 80: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Exchange

AMQP : Exchange (обмен)

● Принимает сообщения

● Имеет имя

● Имеет тип:- fanout- direct- topic

Page 81: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Exchange

Имеет свойства:- autodelete- transit- durable

AMQP : Exchange (обмен)

Page 82: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Exchange

AMQP : Exchange (обмен)

$exchange = new AMQPExchange($channel);$exchange->setName('MyExchange';)$exchange->declare();

Page 83: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

● Отдает сообщения адресату по принципу FIFO

● Имеет имя● Имеет свойства:

- autodelete- durable

Queue

AMQP : Queue (очередь)

Page 84: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Queue

AMQP : Queue (очередь)

$queue = new AMQPQueue($channel);$queue->setName('MyQueue');$queue->declare();

Page 85: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

● Между Exchange и Queue определяем связь (или маршрут): Bind

● Имеет ключ, в соответствии с которым определяется маршрут сообщения

QueueExchangeBind

AMQP : Bind (связь)

Page 86: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

QueueExchangeBind

AMQP : Bind (связь)

$queue = new AMQPQueue($channel);$queue->setName('MyQueue');$queue->bind('MyExchange', $key);

Page 87: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Exchange

Состоит:

● тела

● routing key

● заголовки

● свойства

AMQP : Message

Page 88: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Exchange

В зависимости от типа

Exchange и routingKey

сообщения

определяется маршрут

сообщения

AMQP : Message

Page 89: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Exchange

Fanout – ключ не учитываем

Direct – полное совпадение

Topic – совпадение по маске

AMQP : Message использование Routing key

В зависимости от типа Exchange:

Page 90: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Exchange

AMQP : Message использование Routing key

$exchange = new AMQPExchange($channel);$exchange->setName('MyExchange';)$exchange->publish($message, $key);

Page 91: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

● Забывают устанавливать связь Bind:

$queue->bind($exchange, $key);● Забывают объявлять очередь/обмен:

$queue->declare($name);● Если Обмен/Очередь не autodelete,

то достаточно объявить их один раз

AMQP : Типичные ошибки

Page 92: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Rabbit MQ● Довольно сложное решение, требует администрирования

● Требовательно по памяти● Можно объединять в кластер● Возможно расширение plugins

Page 93: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Rabbit MQ

2015 № 11

Кролик в песочнице

Page 94: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Rabbit MQ

2015 № 12

RabbitMQ. Вырастаем из штанишек.

Page 95: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

И в заключение

• Зачем нужна очередь• Где и как она используется• Протоколы • AMQP (на примере RabbitMQ)• Блокировки

Page 96: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

ЗагрузкаYML

Сведениев pricelist

ПарсингYML

Загрузкаimg

Page 97: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

ЗагрузкаYML

Сведениев pricelist

ПарсингYML

Загрузкаimg

Page 98: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Apache Zookeeper

Иерархическое хранилище Основное понятие znode Аналог inode в ФС

•Операции:- GetData / SetData- Create / GetChildren

Page 99: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Apache Zookeeper

znode: •простые •эфемерные•последовательности

Операции: exist / sync

Page 100: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Пример: обновление конфигурации на лету

Процесс 1

Процесс 2a

Процесс 2b

Процесс 2c

192.168.100.1

192.168.100.2

192.168.100.3

Page 101: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Пример: обновление конфигурации на лету

Процесc 1

Процесc 2a

Процесc 2b

Процесc 2c

192.168.100.1

192.168.100.2

192.168.100.3

/config/nodes/n1/config/nodes/n2/config/nodes/n3 config

nodes

n-1 n-2 n-3

/config/nodes/n-1/config/nodes/n-2/config/nodes/n-3

Page 102: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Пример: обновление конфигурации на лету

Процесc 1

Процесс 2a

Процесc 2b

Процесc 2c

192.168.100.1

192.168.100.2

192.168.100.3

Останавливается процесс

Page 103: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Пример: обновление конфигурации на лету

Процесc 1

Процесc 2a

Процесc 2b

Процесc 2c

192.168.100.1

192.168.100.2

192.168.100.3

Рвется соединение

Page 104: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Пример: обновление конфигурации на лету

Процесc 1

Процесc 2a

Процесc 2b

Процесc 2c

192.168.100.1

192.168.100.2

192.168.100.3

Посылаем event

Page 105: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Пример: обновление конфигурации на лету

Процесc 1 Процесc 2b

Процесc 2c

192.168.100.2

192.168.100.3

Пересчитываем конфигурацию

Page 106: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Пример: обновление конфигурации на лету

Процесc 1 Процесc 2b

Процесc 2c

192.168.100.2

192.168.100.3

Процесc 1

/config/nodes/n1/config/nodes/n2/config/nodes/n3 config

nodes

n-2 n-3

/config/nodes/n-2/config/nodes/n-3

Page 107: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Apache Zookeeper

•Используется для синхронизации процессов в кластере

•На последовательностях можно организовать очереди

Page 108: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

speed scale memory replika ACL/SSL Prototokol Safety Extend

Kafka критичен

RabbitMQ критичен AMQPSTOMPMQTTActiveMQ ? ?

ZMQ Отсутствует брокер

MemcacheQ Memcached

Tarantool MsgPack

Redis ? ? Redis

MongoDb BSON

Databases ?

Page 109: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Выводы:

1) Не стоит микроскопом забивать гвозди

2) Cкорость * надежность = const

3) Мониторинг – третий глаз админа

Page 110: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)
Page 111: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)

Очереди и блокировки

Календарёв Александр

[email protected]

www.slideshare.net/akalend