Очереди и блокировки. Теория и практика / Александр...
TRANSCRIPT
![Page 2: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/2.jpg)
О чём речь ...
• Зачем нужна очередь• Где и как она используется• Протоколы • AMQP (на примере RabbitMQ)• Блокировки
![Page 3: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/3.jpg)
WEB
Типовая архитектураJunior проект
![Page 4: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/4.jpg)
WEB
Типовая архитектураJunior проект
![Page 5: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/5.jpg)
WEB
Типовая архитектураJunior проект
![Page 6: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/6.jpg)
WEB
Типовая архитектураJunior проект
![Page 7: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/7.jpg)
WEB
Типовая архитектураJunior проект
HTTP ERROR 504504 Gateway Timeout error
![Page 8: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/8.jpg)
WEB
Типовая архитектураJunior проект
WEB
![Page 9: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/9.jpg)
WEB
Типовая архитектураJunior проект
WEB
![Page 10: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/10.jpg)
WEB
Типовая архитектураJunior проект
WEB
![Page 11: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/11.jpg)
WEB
Типовая архитектураJunior проект
WEBMySQL ERROR 2006MySQL gone away
![Page 12: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/12.jpg)
Типовая архитектурауже не Junior проект
Master
WEB
WEB
Slave
![Page 13: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/13.jpg)
Типовая архитектурауже не Junior проект
Master
WEB
WEB
Slave
HTTP ERROR 502Bad Gaetway
![Page 14: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/14.jpg)
Типовая архитектурауже не Junior проект
Master
WEB
WEB
Slave
![Page 15: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/15.jpg)
Типовая архитектурауже не Junior проект
Master
WEB
WEB
Slave
![Page 16: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/16.jpg)
Типовая архитектурауже не Junior проект
Быстрая часть
Критическая часть
Медленная часть
Не очень важная часть
![Page 17: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/17.jpg)
Типовая архитектурауже не Junior проект
Быстрая часть
Критическая часть
Медленная часть
Не очень важная часть
![Page 18: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/18.jpg)
Типовая архитектурауже не Junior проект
Быстрая часть
Критическая часть
Медленная часть
Не очень важная часть
WEB
Backend
![Page 19: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/19.jpg)
Паттерн: хитрый ученик
Быстрая часть
Критическая часть
Медленная часть
Не очень важная часть
WEB
Backend© СоюзМультФильм
![Page 20: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/20.jpg)
Паттерн: хитрый ученик
© СоюзМультФильм
Сперва скажу, что выучил уроки, а потом сделаю...
![Page 21: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/21.jpg)
Паттерн: хитрый ученикотложенные вычисления
© СоюзМультФильм
Вычисляем по мере необходимости
![Page 22: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/22.jpg)
Использование Backend сервера
BackendWEB
![Page 23: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/23.jpg)
Проблема синхронизации и обмена данными
BackendWEB
WEB Backend
![Page 24: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/24.jpg)
Проблема синхронизации и обмена данными
BackendWEB
WEB Backend
?
![Page 25: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/25.jpg)
Проблема синхронизации и обмена данными
BackendWEB
WEB Backend
Очередь
![Page 26: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/26.jpg)
Очередь – это список
FIFO – First Input First Output
![Page 27: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/27.jpg)
Поговорим о ...
• Зачем нужна очередь• Где и как она используется• Протоколы • AMQP (на примере RabbitMQ)• Блокировки
![Page 28: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/28.jpg)
![Page 29: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/29.jpg)
Взаимодействие частей проекта
ЗагрузкаYML
Сведениев pricelist
ПарсингYML
Загрузкаimg
![Page 30: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/30.jpg)
Взаимодействие частей проекта
ЗагрузкаYML
Сведениев pricelist
ПарсингYML
Загрузкаimg
![Page 31: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/31.jpg)
Очередь через БД
CREAE TABLE queue ( id BIGINT AUTOINCREMENT NOT NULL, data VARCHAR (…), PRIMARYKEY (id))
![Page 32: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/32.jpg)
Очередь через БД
Запись в очередь:
INSERT INTO queue (data) VALUES (...);
![Page 33: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/33.jpg)
Очередь через БД
Чтение из очереди:
SELECT * FROM queue ORDER BY id LIMIT 1 DELETE FROM queue WHERE id = ?
![Page 34: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/34.jpg)
Очередь через БД
Чтение из очереди:
LOCK TABLE queue;SELECT * FROM queue ORDER BY id LIMIT 1 DELETE FROM queue WHERE id = ?UNLOCK TABLE queue;
![Page 35: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/35.jpg)
Очередь через БД
НадежноМедленноМожно хранить историю (UDATE SET deleted=1 вместо DELETE)
![Page 36: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/36.jpg)
Очередь через MongoDb
Вставка: db.queue.insert(...);
![Page 37: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/37.jpg)
Очередь через MongoDb
Вставка: db.queue.insert(...);
Чтение: db.queue.findAndModify({ query : {}, remove:1 })
![Page 38: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/38.jpg)
Очередь через MongoDb
Надежно
Медленно, быстрее, чем БД
![Page 39: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/39.jpg)
Использование Tarantool
![Page 40: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/40.jpg)
Использование Tarantool
WEB
![Page 41: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/41.jpg)
Использование Tarantool
BackendWEB
![Page 42: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/42.jpg)
Использование Tarantool
• Memory Only хранилище •Необходимо следить за памятью•Необходим мониторинг системы
![Page 43: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/43.jpg)
Использование Tarantool
●Репликация из коробки●Возможен шардинг (дополнительный пакет)
●Персистентность данных
![Page 44: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/44.jpg)
Использование 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)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/45.jpg)
Использование Tarantool
Синхронный:while(1) { $data= $tnt->call('queue.tube.q1:take' )); … /* обработка данных */}
![Page 46: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/46.jpg)
Использование Tarantool
Асинхронный:while(1) { $data= $tnt->call('queue.tube.q1:take', 0.1 )); If (!$data) { usleep(1000); continue; } … /* обработка данных */}
![Page 47: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/47.jpg)
Использование TarantoolПакет Queue
●Очереди с приоритетом●Жизнь элемента очереди ttl●Подтверждение доставки●Синхронные / асинхронные запросы●Можно самому менять логику
![Page 48: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/48.jpg)
Использование Redis
Операции со списками
●RPUSH●LPOP
Head
Tail
![Page 49: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/49.jpg)
Использование Redis
![Page 50: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/50.jpg)
Использование Redis
WEB
![Page 51: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/51.jpg)
Использование Redis
WEB
Curl
![Page 52: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/52.jpg)
Использование Redis
WEB Backend
Curl
![Page 53: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/53.jpg)
Использование Redis
Memory Only хранилище●Необходимо следить за памятью, мониторинг●Персистентно
![Page 54: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/54.jpg)
Использование Redis
Операции со списками
● RPUSH {key} {data}
● LPOP {key}, BLPOP (блокирующий)
● COUNT {key}
![Page 55: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/55.jpg)
Использование Redis (часть 2)
Проект загрузки видео
Youtube
Vimeo
Vk
![Page 56: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/56.jpg)
Использование Redis (часть 2)
LoadConvertWEB
CurlКлиентскийскрипт
![Page 57: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/57.jpg)
Использование Redis (часть 2)
LoadConvertWEB
Клиентскийскрипт
![Page 58: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/58.jpg)
Использование Redis (часть 2)
LoadConvertWEB
Клиентскийскрипт
Необходимо проинформировать
![Page 59: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/59.jpg)
Использование Redis (часть 2)
LoadConvertWEB
Клиентскийскрипт
Постоянно Проверяем статус
Способ – I Push
Curl
![Page 60: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/60.jpg)
Использование Redis (часть 2)
LoadConvertWEB
Клиентскийскрипт
устанавливаемстатус: Выполнено
Способ – I Push
![Page 61: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/61.jpg)
Использование Redis (часть 2)
LoadConvertWEB
Клиентскийскрипт
Отдаёт статус: Выполнено
Способ – I Push
![Page 62: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/62.jpg)
Использование Redis (часть 2)
LoadConvertWEB
Клиентскийскрипт
Способ – I Push
Загружаем файл
![Page 63: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/63.jpg)
Использование Redis (часть 2)
LoadConvertWEB
Клиентскийскрипт
WebSocketsПодписываемся на канал SUBRIBE
Способ – II Pull
Curl
![Page 64: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/64.jpg)
Использование Redis (часть 2)
LoadConvertWEB
Клиентскийскрипт
PUSH: Выполнено
Способ – II Pull
![Page 65: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/65.jpg)
Использование Redis (часть 2)
LoadConvertWEB
Клиентскийскрипт
Способ – II Pull
Получаем статусВыполнено
![Page 66: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/66.jpg)
Использование Redis (часть 2)
LoadConvertWEB
Клиентскийскрипт
Способ – II Pull
Загружаем файл
![Page 67: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/67.jpg)
Паттерн Писатель / Читатель Подписка / Публикация
●PUBLISH {channel} {data}
●SUBSCRIBE {channel}
●UNSUBSCRIBE {channel}
![Page 68: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/68.jpg)
Паттерн Писатель / Читатель Подписка / Публикация
Приемникданных
Внешнийисточник
PUBLISH
SUBSCR
![Page 69: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/69.jpg)
MemcachedQ
Протокол memcached●SET {key} {data}●GET {key}
memcached + berkeleyDb
![Page 70: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/70.jpg)
MemcachedQ● Быстро● Работает, пока есть память● Масштабируется в рамках клиента libmemcached● Не возможен мониторинг
![Page 71: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/71.jpg)
Zerro MQ
Это встраиваемое решениеOтсутствует брокер
Очень быстрое решение: - Запрос / Ответ - Подписка / Публикация - Потоковой обмен
![Page 72: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/72.jpg)
Apache Kafka
●Система потоковой обработки сообщений, разрабатывалась для сбора логов●Распределённоe решение●С подтверждением доставки
![Page 73: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/73.jpg)
Apache Kafka
●Очень производителен в кластере●Требует синхронизации кластера через Zookeper
![Page 74: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/74.jpg)
О чём речь ...
• Зачем нужна очередь• Где и как она используется• Протоколы (кратко) • AMQP (на примере RabbitMQ)• Блокировки
![Page 75: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/75.jpg)
Протоколы• STOMP- Simple (or Streaming) Text Oriented Message Protocol
• MQTT - Message Queue Telemetry Transport
• AMQP - Advanced Message Queuing Protocol
![Page 76: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/76.jpg)
Протокол STOMP
• Текстовый (по верх HTTP, Websocket)
• Сообщение имеет тело и заголовок
• Сообщение может быть разделено на фреймы
• Подписка / Публикация
• Подтверждение доставки, Авторизация
![Page 77: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/77.jpg)
Протокол MQTT
• Бинарный
• Сообщение имеет тело и заголовок
• Сообщение может быть разделено на фреймы
• Подписка / Публикация
• Подтверждение доставки, Авторизация
![Page 78: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/78.jpg)
Поддержка протоколов
Реализация Java
Реализация erlang
Реализация Java / C++
![Page 79: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/79.jpg)
Поговорим о ...
• Зачем нужна очередь• Где и как она используется• Протоколы • AMQP (на примере RabbitMQ)• Блокировки
![Page 80: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/80.jpg)
Exchange
AMQP : Exchange (обмен)
● Принимает сообщения
● Имеет имя
● Имеет тип:- fanout- direct- topic
![Page 81: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/81.jpg)
Exchange
Имеет свойства:- autodelete- transit- durable
AMQP : Exchange (обмен)
![Page 82: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/82.jpg)
Exchange
AMQP : Exchange (обмен)
$exchange = new AMQPExchange($channel);$exchange->setName('MyExchange';)$exchange->declare();
![Page 83: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/83.jpg)
● Отдает сообщения адресату по принципу FIFO
● Имеет имя● Имеет свойства:
- autodelete- durable
Queue
AMQP : Queue (очередь)
![Page 84: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/84.jpg)
Queue
AMQP : Queue (очередь)
$queue = new AMQPQueue($channel);$queue->setName('MyQueue');$queue->declare();
![Page 85: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/85.jpg)
● Между Exchange и Queue определяем связь (или маршрут): Bind
● Имеет ключ, в соответствии с которым определяется маршрут сообщения
QueueExchangeBind
AMQP : Bind (связь)
![Page 86: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/86.jpg)
QueueExchangeBind
AMQP : Bind (связь)
$queue = new AMQPQueue($channel);$queue->setName('MyQueue');$queue->bind('MyExchange', $key);
![Page 87: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/87.jpg)
Exchange
Состоит:
● тела
● routing key
● заголовки
● свойства
AMQP : Message
![Page 88: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/88.jpg)
Exchange
В зависимости от типа
Exchange и routingKey
сообщения
определяется маршрут
сообщения
AMQP : Message
![Page 89: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/89.jpg)
Exchange
Fanout – ключ не учитываем
Direct – полное совпадение
Topic – совпадение по маске
AMQP : Message использование Routing key
В зависимости от типа Exchange:
![Page 90: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/90.jpg)
Exchange
AMQP : Message использование Routing key
$exchange = new AMQPExchange($channel);$exchange->setName('MyExchange';)$exchange->publish($message, $key);
![Page 91: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/91.jpg)
● Забывают устанавливать связь Bind:
$queue->bind($exchange, $key);● Забывают объявлять очередь/обмен:
$queue->declare($name);● Если Обмен/Очередь не autodelete,
то достаточно объявить их один раз
AMQP : Типичные ошибки
![Page 92: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/92.jpg)
Rabbit MQ● Довольно сложное решение, требует администрирования
● Требовательно по памяти● Можно объединять в кластер● Возможно расширение plugins
![Page 93: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/93.jpg)
Rabbit MQ
2015 № 11
Кролик в песочнице
![Page 94: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/94.jpg)
Rabbit MQ
2015 № 12
RabbitMQ. Вырастаем из штанишек.
![Page 95: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/95.jpg)
И в заключение
• Зачем нужна очередь• Где и как она используется• Протоколы • AMQP (на примере RabbitMQ)• Блокировки
![Page 96: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/96.jpg)
ЗагрузкаYML
Сведениев pricelist
ПарсингYML
Загрузкаimg
![Page 97: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/97.jpg)
ЗагрузкаYML
Сведениев pricelist
ПарсингYML
Загрузкаimg
![Page 98: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/98.jpg)
Apache Zookeeper
Иерархическое хранилище Основное понятие znode Аналог inode в ФС
•Операции:- GetData / SetData- Create / GetChildren
![Page 99: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/99.jpg)
Apache Zookeeper
znode: •простые •эфемерные•последовательности
Операции: exist / sync
![Page 100: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/100.jpg)
Пример: обновление конфигурации на лету
Процесс 1
Процесс 2a
Процесс 2b
Процесс 2c
192.168.100.1
192.168.100.2
192.168.100.3
![Page 101: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/101.jpg)
Пример: обновление конфигурации на лету
Процес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)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/102.jpg)
Пример: обновление конфигурации на лету
Процесc 1
Процесс 2a
Процесc 2b
Процесc 2c
192.168.100.1
192.168.100.2
192.168.100.3
Останавливается процесс
![Page 103: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/103.jpg)
Пример: обновление конфигурации на лету
Процесc 1
Процесc 2a
Процесc 2b
Процесc 2c
192.168.100.1
192.168.100.2
192.168.100.3
Рвется соединение
![Page 104: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/104.jpg)
Пример: обновление конфигурации на лету
Процес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)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/105.jpg)
Пример: обновление конфигурации на лету
Процесc 1 Процесc 2b
Процесc 2c
192.168.100.2
192.168.100.3
Пересчитываем конфигурацию
![Page 106: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/106.jpg)
Пример: обновление конфигурации на лету
Процес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)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/107.jpg)
Apache Zookeeper
•Используется для синхронизации процессов в кластере
•На последовательностях можно организовать очереди
![Page 108: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/108.jpg)
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)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/109.jpg)
Выводы:
1) Не стоит микроскопом забивать гвозди
2) Cкорость * надежность = const
3) Мониторинг – третий глаз админа
![Page 110: Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042511/586f8fa51a28ab54768b76b3/html5/thumbnails/110.jpg)