2.67M
Категория: ИнтернетИнтернет

Преимущества брокеров сообщений для высоконагруженных систем

1.

Цели занятия: теория
● Разобрать преимущества брокеров сообщений для
высоконагруженных систем
● Понять для чего и в каких случаях применяются эти
инструменты
● Разобраться в принципах работы инструментов
○ RabbitMQ
○ Kafka
● Понять какие возможности есть у этих инструментов
3

2.

Цели занятия: практика
● Работа с web-интерфейсом RabbitMQ
● Изучение возможностей
● Создание очередей и привязок (Binding)
● Jmeter
● Настройка Jmeter для работы с RabbitMQ
● Отправка сообщений в RabbitMQ
● Чтение сообщений из RabbitMQ
● Мониторинг
● Подключение telegraf к RabbitMQ
● Разработка собственного дашборда

3.

Примеры целей внедрения очередей
● Забота о «быстрых» компонентах системы
○ построение отчетов
○ аналитические, бухгалтерские запросы
● Оптимизацяи простоев «медленных» компонентов
системы
○ Рендеринг видео
● Результат работы не важен
o Отправка логов
3

4.

Варианты
решений
● использование базы данных
○ медленно, неэффективно
● использование
IPC, shared memory
○ сложная реализация, блокировки
○ отсутствие кластеризации
● использование систем доставки сообщений
○ Rabbitmq
○ Kafka
○ (и другие)
3

5.

Требования к брокерам: гарантии доставки
exact-once
- Гарантированно один раз
- Как правило - сложно (в распределенных системах)
- Promises, two-phase commit, консенсус
- Медленно
at-least-once
- Минимум один раз
- Предполагает что consumer - идемпотентный
- Как правило, через REQ - ACK взаимодействие
at-most-once
- Максимум один раз
- Отправил и забыл
- Не думаем о клиенте
- Самые быстрые (web-sockets, udp)
3

6.

Требования к
брокерам
● гарантия доставки сообщений
○ at least once delivery
○ at most once delivery
○ exactly once
● Порядок передачи сообщений
● Управлению размером очереди (ограничение на передачу)
● Отказоустойчивость (зеркалирование)
● Масштабирование
3

7.

Характеристики
rabbitmq
● гарантия доставки сообщений
○ at least once delivery
○ at most once delivery
● Гарантирует порядок ПЕРЕДАЧИ сообщений (FIFO)
● Возможность сохранения на диск
● Подтверждение отправки, подтверждение получения
● Ограничение кол-ва отправляемых сообщение
● Управление поведением неполученных сообщений
● Кластеризация
● Зеркалирование
3

8.

RabbitMQ - концепция
RabbitMQ – это промежуточный слой
(транспортный) для обмена сообщениями
1. Producer - отправляет сообщение в Exchange
2. Exchange - принимает сообщение и в
зависимости от его атрибутов - отвечает за
роутинг и дальнейший процессинг
3. С помощью Bindings сообщение
отправляется на нужную очередь (Queue)
4. Сообщение будет находится в Queue до тех
пор, пока не будет обработано получателем
(Consumer)
5. Consumer - обрабатывает сообщение,
подключившись к очереди (push
модель)
3

9.

RabbitMQ:
Терминология
● Connection: TCP соединение между приложениями и
менеджером очередей
● Channel: Виртуальное соединение внутри соединения. Когда
вы публикуете или получаете сообщения через очередь –
это все делается в канале.
● Binding: Связь между очередью и обработчиком сообщений
● Routing key: Ключ на который смотрит обработчик и решает
в какую очередь перенаправить сообщение
● Users: Возможность подключится к брокеру сообщений с
помощью имени пользователя и пароля.
● Vhost, virtual host: Способ разделения
используя один и тот же экземпляр RabbitMQ.
приложений

10.

RabbitM
Q

11.

RabbitMQ - Exchanges
Поддерживает несколько
типов Exchanges:
- Default
- Direct
- Topic
- Fanout
- Headers
- *Dead Letter Exchange
3

12.

RabbitMQ – Default
• Не нужно настраивать связь
(Binding) между Exchange и
очередями
• Имя Exchange указывать не
нужно
• Нужно указать имя очереди
в «Routing Key»
• Так можно отправить
сообщение в любую
очередь
(в данном пространстве)
3

13.

RabbitMQ – Direct
• Необходимо настроить связи
между очередью и
обменником (Binding)
• Для отправки сообщения в
очередь нужно указать имя
очереди в «Routing Key»
• Работает очень быстро
3

14.

RabbitMQ – Fanout
• Необходимо настроить связи
между очередью и
обменником (Binding)
• Сообщения отправляются во
все связанные очереди
• Работает очень быстро
3

15.

RabbitMQ – Topic
Exchange
Поддерживает Binding с шаблонами
Работает медленее Direct
Примеры
agreements.eu.berlin.#
agreements.#
agreements.*.headstore
Спецсимволы
# - wildcard (ноль или более слов)
* - одно слово в заданной позиции
3

16.

RabbitMQ – Header Exchange
Поддерживает Binding по заголовкам,
пары key = value
Самый медленный вариант
Примеры
format = pdf, type = log, x-match = any
format = zip, type = report, x-match = all
x-match
Задает стратегию соответствия:
All – все пары должны совпасть
Any - любая пара должна совпасть
3

17.

RabbitMQ: флаги
очередей
Параметры
- durable (true) - постоянная очередь
- exclusive (false) - только один коннект
- auto-delete (false) - после отключения клиента
Аргументы
• x-message-ttl - время жизни сообщений
• x-expires - время жизни очереди
• x-max-length - максимальная длина очереди
• x-over ow - стратегия переполнения
• x-dead-letter-exchange - exchange для недоставленных
сообщений
• x-queue-mode - default / lazy (режим работы очереди,
когда сообщения сразу сбрасываются на диск)

18.

Publisher
отправляет
сообщение на
любую ноду
кластера RabbitMQ
Сервер 1
Сервера RabbitMQ
синхронизируют
состояние
сообщения в
очереди
Очередь
«A»
Очередь
«A»
Сервер 2
Очередь
«A»
Сервер 3
Сообщение, отправленное в очередь
хранится на всех серверах кластера

19.

RabbitMQ:
память
По-умолчанию, в случае если RabbitMQ начинает использовать больше 40%
от общего объема памяти, то все соединения блокируются.
При высвобождении памяти до требуемого уровня нормальный процесс
работы RabbitMQ возобновляется. Порог используемой памяти можно
переопределить:
rabbitmqctl set_vm_memory_high_watermark 0.5
или перманентно в
/etc/rabbitmq/rabbitmq.con g [{rabbit,
[{vm_memory_high_watermark, 0.5}]}].

20.

46

21.

Apache
Kafka

22.

Apache
Kafka
Kafka — это
● распределенный
● реплицированный
● журнал фиксации изменений (commit
log).

23.

Kafka: Почему kafka очень быстрая?

24.

Kafka: Почему kafka очень быстрая?

25.

Kafka:
Характеристики
● Гарантия доставки
● Репликация журнала и синхронизация реплик
● Уведомление о смещении(offset) получателя
● Уведомление о получении сообщения для продюсера
● Передаёт данные с диска в сеть минуя большую
часть работы с памятью
● Активно использует память для кэширования
● Последовательное чтение и запись на диск
● API для producers/consumers
● Поддержка KSQL

26.

Kafka:
Характеристики
● Consumer через pull запрашивает о появлении новых
сообщений
● Журнал очищается на основе настроек времени и размера
● Есть возможность сжатия журнала
● Есть возможность сдвига смещения для переигрывания
приема сообщений
● Для хранения метаданных используется zookeeper, в
последних версиях отдельные топики kafka

27.

Kafka:
Терминология
● Record – Запись, состоящая из ключа и значения
● Topic – категория или имя потока куда публикуются записи
● Producer – процесс публикующий данные в топик
● Consumer – процесс читающий данные из топика
● Offset – позиция записи
● Partition – шард топика

28.

Kafka: Топик и
партиции

29.

Kafka: Consumer
groups

30.

Kafka: Consumers и
партиции

31.

Kafka: Consumer
groups

32.

Kafka:
Cluster
Producer
kafka
Consumer
Producer
Consumer
kafka
push
pull
Producer
Consumer
kafka
Producer
Consumer
ZOOKEEPE
R

33.

Zookeepe
r
Zookeeper – это распределенное хранилище ключей и значений. Оно сильно
оптимизировано для считывания, но записи в нем происходят медленнее.
Применяется для хранения метаданных и обработки механизмов
кластеризации (hearbeat, распределенные операции обновления,
конфигурации, т.д.).
● Offset групп потребителей в рамках секции
● ACL — используются для ограничения доступа /авторизации
● Квоты — максимальные предельные количества сообщений в секунду
● Partition Leaders и уровень их работоспособности

34.

Kafka:
cluster
English     Русский Правила