SlideShare a Scribd company logo
Очереди:
теория и
практика
Константин
Осипов
kostja@tarantool.org
Москва, 2015-05-21
Очереди как паттерн
отказоустойчивой архитектуры
• СУБД – пионер технологии очередей
• транзакции необходимы, но не достаточны
• пример: банковский перевод
Очереди: за и против
+ клиент и сервер полностью “развязаны”
+ состояние задачи всегда известно
+ применимо для load balancing
+ поддержка приоритетов
- дополнительная. сущность
- больше операций на задачу
- очередь должна быть персистентной
Очереди в Web Apps
● Рассылка email
● Сжатие картинок ← мультиплексирование
● Сборка email!
● мессенджеры
Практика применения
● отложенное выполнение
● управление “плохими” задачами
● таймауты выполнения
● приоритеты и повторное выполнение
● вложенные очереди и зависимые задачи
зависшие воркеры
Балансировка нагрузки
● задачи балансировки нагрузки
● два подхода к балансировке нагрузки:
моделирование (теория очередей) и
симуляция (бенчмарки).
● типичные ошибки при бенчмаркинге
● предотвращение перегрузки
1
10
100
1000
10000
Запросов/секунду
Время
обработки
одного
запроса
Диаграмма насыщения системы
массового обслуживания
Перегрузка
Насыщение
Минимум
Оптимально
Что такое load balancing
Wikipedia: “…методология
распределения запросов на несколько
компьютеров …  позволяющая достичь
оптимальной утилизации ресурсов,
максимизировать пропускную
способность системы, минимизировать
время ответа на запрос, и избежать
перегрузки”
Все части графика нагрузки
1
10
100
1000
10000
Запросов/секунду
Время
обработки
одного
запроса
Ограничиваем latency
Перегрузка
Насыщение
Минимум
Оптимально
Допустимый
максимум
1
10
100
1000
10000
Запросов/секунду
Время
обработки
одного
запроса
Максимизируем RPS
Перегрузка
Насыщение
Минимум
Оптимально
Максимальный RPS
при разумном latency
Основы теории очередей
•
Виды очередей – нотация Кендалла
•
Модель с одним сервером
•
Модель с несколькими серверами –
лучше не влезать...
Нотация Кендалла (Kendall)
A/B/c/K/m/Z
• A — распределение времени между
прибытиями
• B — распределение времени
обслуживания
• c — количество серверов
• K — ёмкость системы обслуживания
• m — популяция источника клиентов
• Z — принцип обслуживания
Модели для одного сервера
= /  = степень утилизации (traffic intensity)
k = вероятность k задач в очереди
0 = 1 –   и k = k(1 – )
L = мат. ожидание числа задач в очереди
L = /(-) если   
Lq = 2/(-)мат. ожидание длины очереди
(не включая задачи в работе)
Lq = 2/(-)
2
(-)
Теория очередей: выводы
• среднее время выполнения запроса
отличается от минимального
пропорционально длине очереди
• при приближении загрузки к 100%
длина очереди может расти
полиномиально
• единая очередь на несколько серверов
позволяет снизить дисперсию, и,
повысить утилизацию при сохранении
необходимого latency
Использование глобальной
очереди
1 2 3 4 5 6 7 8 9 10
0.1
1
10
Random assignment
Global Job Queue
Размер кластера
Latency
при 80%
загрузке
Закон Литтла
Q = R*W
• (Q)ueue size = (R)ate * (W)ait-time
• Q – средняя длина очереди
• R – скорость поступления запросов
(запросов/секунду)
• W – среднее время ожидания (секундах)
• для любой (!) системы в стабильном
состоянии
Закон Литтла – пример
Q = R*W
• Система получает R=10,000 запросов
в секунду
• Врема обработки одного запроса – 1
мс (W = 0.001)
• Закон Литтла: средняя длина очереди
10
Закон Литтла: выводы
Q = R*W
• В распределённой системе:
– R масштабируется с ростом числа
серверов
– W остаётся неизменным или несколько
ухудшается
• Для масштабирования, необходимо
пропорционально увеличивать число
задач “в обработке”
Конфликт требований к
оптимизации
• Для того, чтобы снизить latency, необходимо
уменьшить среднюю длину очереди
(очередей) в системе
• Для того, чтобы увеличить RPS (throughput),
необходимо увеличить среднюю длину
очередей в системе, чтобы избежать
простоев на фoне неравномерной нагрузки
• Для равномерного распределения нагрузки
в распределённой системе, необходимо,
чтобы очереди к разным узлам были
примерно одного размера
Симуляция/бенчмарки
Лучший способ исследования поведения
распределённой системы
Что измеряем:
- конечно rps!?
- время обработки одного запроса
- средняя длина очереди
- осцилляцию?
→ ищем причины задержек
Как правильно измерять
время выполнения запроса
• Необходимо измерять распределение
(гистограмма) времени обработки, а
не среднее
• Обращаем внимание на среднее,
минимум, максимум, и дисперсию (!)
Гистограмма распределения
latency
Определяем SLA
Проблема наивной симуляции:
coordinated omission
Проблема наивной симуляции:
coordinated omission
1
10
100
1000
10000
Запросов/секунду
Время
обработки
одного
запроса
Борьба с перегрузкой
Перегрузка
Ограничение размера
очереди
0 2 4 6 8 10 12 14 16 18 20
0
5
10
15
20
25
30
35
40
Queued job limit
% of dropped jobs
Каскад очередей
Общая идея: backpressure
Колебания
производительности
1 1.5 2 2.5 3 3.5 4 4.5 5
0
10
20
30
40
50
60
70
Node A
Node B
Utilization %
Сглаживаем колебания
• Это уже теория управления —avoid if
possible!
• Чем выше частота контроля, тем
сложнее добиться результата
• Стратегии:
– Увеличить масштаб (реже изменять
параметры системы)
– “загрубить” контроль, т.е. не реагировать
на мелкие колебания
Спасибо!

More Related Content

PDF
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
PDF
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
PDF
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
PDF
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
PPTX
Dennis Anikin - Tarantool Case Studies in Mail.Ru Group
PDF
Ровная балансировка нагрузки на фронтенд-кластере
PPTX
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
PDF
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Dennis Anikin - Tarantool Case Studies in Mail.Ru Group
Ровная балансировка нагрузки на фронтенд-кластере
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...

What's hot (20)

PDF
Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)
PPTX
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
PPTX
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
PDF
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
PDF
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
PPTX
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
PDF
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
PPTX
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
PDF
My talk at Highload++ 2015
PDF
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
PDF
Дмитрий Новиков - Tarantool в Badoo
PPTX
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
PPTX
Поиск наизнанку
PDF
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
PDF
Функциональное тестирование высоконагруженных проектов / Илья Пастушков (2ГИС)
PPTX
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
PDF
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
PDF
Архитектура HAWQ / Алексей Грищенко (Pivotal)
PDF
Игнат Корчагин "Как Cloudflare помогает справиться с крупнейшими атаками в Сети"
PDF
Балансировка нагрузки и отказоустойчивость в Одноклассниках
Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
My talk at Highload++ 2015
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
Дмитрий Новиков - Tarantool в Badoo
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Поиск наизнанку
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
Функциональное тестирование высоконагруженных проектов / Илья Пастушков (2ГИС)
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Архитектура HAWQ / Алексей Грищенко (Pivotal)
Игнат Корчагин "Как Cloudflare помогает справиться с крупнейшими атаками в Сети"
Балансировка нагрузки и отказоустойчивость в Одноклассниках
Ad

Viewers also liked (15)

PPTX
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
PPTX
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
PDF
С чего начать внедрение Hadoop в компании / Алексей Еремихин (Badoo)
PDF
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
PDF
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...
PDF
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
PDF
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
PDF
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
PDF
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
PPTX
Какие бывают провайдеры услуг дата-центров и как выбрать оптимальный? / Игорь...
PDF
Современная операционная система: что надо знать разработчику / Александр Кри...
PPTX
Как устроен поиск / Андрей Аксенов (Sphinx)
PDF
Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...
PPT
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
PDF
Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
С чего начать внедрение Hadoop в компании / Алексей Еремихин (Badoo)
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
Какие бывают провайдеры услуг дата-центров и как выбрать оптимальный? / Игорь...
Современная операционная система: что надо знать разработчику / Александр Кри...
Как устроен поиск / Андрей Аксенов (Sphinx)
Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...
Ad

More from Ontico (20)

PDF
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
PPTX
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
PDF
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
PDF
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PDF
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PDF
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
PDF
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
PPTX
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
PPTX
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
PDF
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
PPTX
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
PPTX
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
PDF
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
PPT
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
PPTX
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
PPTX
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
PPTX
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
PPTX
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
PDF
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
PDF
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)

Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)