Владимир Озеров — Как устроена многопоточность в Hazelcast

YOUTUBE · 20.11.2025 03:19

Ключевые темы и таймкоды

Введение

0:00
  • В видео рассказывается о том, как устроена многопоточность в системе Hazelcast.

Блокирующий подход

0:32
  • Блокирующий подход используется для обработки запросов от клиентов, где один сервер обрабатывает один клиентский поток.
  • Такой подход хорошо масштабируется, но не справляется с нагрузкой, когда количество клиентских потоков превышает количество серверных потоков.

Мультиплексирование

1:59
  • Мультиплексирование используется для обработки большого количества клиентских запросов, где один сервер обрабатывает несколько клиентских потоков.
  • Такой подход хорошо справляется с нагрузкой, но не масштабируется, когда одно ядро перестает справляться.

Распределенная обработка данных

4:20
  • Распределенная обработка данных используется для обработки запросов, которые требуют доступа к данным из разных партишинов.
  • Такой подход хорошо работает для простых запросов, но не справляется с более сложными запросами, такими как раскольные запросы.

Альтернативные подходы

7:09
  • Альтернативные подходы включают использование нескольких потоков, каждый из которых отвечает за свое подмножество данных, и общение между потоками через соты или очереди.
  • Такие системы хорошо справляются с разнородными нагрузками, но требуют дублирования данных и дополнительных накладных расходов на администрирование.

Кооперативная многозадачность

9:07
  • Кооперативная многозадачность используется для обработки длительных операций, которые самостоятельно принимают решение пропустить другие операции.
  • Такой подход позволяет обрабатывать разноплановые нагрузки в параллель, но требует дополнительных усилий для определения типа операции и передачи ее в соответствующий тредпул для исполнения.

Архитектура Hazelcast

9:53
  • Hazelcast использует подход с отдельными тредпулами для обработки разных типов запросов, что позволяет обрабатывать разноплановые нагрузки в параллель.
  • Такой подход является простым и гибким с точки зрения пользователя, так как к нему можно прикручивать любые нагрузки.

Введение

10:50
  • В хакасте есть четыре основных тредпула: а пул, который отвечает за сетевое взаимодействие, дженерик пул, который отвечает за компьютер с задачей, партишный пул, который отвечает за кивели операции, и джет- пул, который отвечает за стриминг.

А пул

11:44
  • А пул отвечает за установление соединения с сервером и создание ченелов.
  • Воркеры висят на селекторе и получают пакеты от клиентов.

Дженерик пул

13:44
  • В дженерик пуле исполняются компьютер операции, которые пользователь передает в хакаст.

Партишный пул

15:15
  • Партишный пул отвечает за исполнение кивели операций.
  • Используется шардирование доступа к данным по потокам.

Джет- пул

17:12
  • В джет- пуле исполняются стриминг операции.
  • Используются однопоточные структуры данных для хранения данных.

Улучшение движка запросов

19:09
  • В будущем возможно улучшение движка запросов для улучшения работы с однопоточными структурами данных.

Тредпулы и кооперативная многозадачность

20:00
  • Тредпулы используются для распределения задач между потоками.
  • В джете используется кооперативная многозадачность, где задачи сами решают, когда передать контроль над системой другой задаче.

Оптимизация и натификация потоков

25:00
  • Оптимизации включают батчинг и использование эксклюзивного доступа к ресурсам потока.
  • Натификация потоков может быть уменьшена путем использования этих оптимизаций и улучшения протокола сетевого взаимодействия.

Оптимизация многопоточности в распределенных системах

30:13
  • В видео обсуждается оптимизация многопоточности в распределенных системах, таких как Hazelcast.
  • Рассматриваются различные архитектурные решения, которые принимаются при проектировании таких систем, и их компромиссы.

Блокирующее и неблокирующее исполнение

31:52
  • Блокирующее исполнение используется в Hazelcast, но не рекомендуется для систем с высокими нагрузками.
  • Альтернативный подход - использование неблокирующего исполнения, которое позволяет обрабатывать длительные операции и запросы.

Выбор оптимального количества потоков

33:52
  • В Hazelcast используется подход с отдельными тредпулами для разных типов задач.
  • Рекомендуется играть с количеством потоков и афинити процессов для оптимизации производительности системы.

Рекомендации для пользователей

37:56
  • Важно понимать, как многопоточность реализована в распределенных системах и как она может влиять на производительность.
  • Рекомендуется экспериментировать с количеством потоков и афинити процессов, чтобы найти оптимальное решение для конкретной нагрузки.

Оптимизация работы с быкапом

41:59
  • В докладе обсуждается оптимизация работы с быкапом, которая позволяет отвечать клиенту до того, как быкап подтвердит запись.
  • В случае потери согласованности, узлы узнают о смерти быкапа и завершают операцию за него.

Использование хип-канкан коллекции

43:12
  • Хип-канкан коллекция позволяет улучшить производительность запросов, но имеет некоторые накладные расходы.
  • В однопоточных структурах данных запросы работают быстрее, но обновление конкурентных структур данных дороже.

Разделение задач на дженерик пулы

48:29
  • В дженерик пулах задачи отправляются в партишин пулы, где они исполняются.
  • Для выполнения операций на ключах используются необычные рано было или кола и эн процесс.

Бэк-преш между потоками

51:02
  • Количество очередей зависит от реализации тред-пула.
  • Бэк-преш появляется естественным образом, когда клиенты запускают операции и ждут ответа от них.
  • В данный момент бэк-преш реализован примитивно, планируется улучшить его в будущем.

Обсуждение принципа шардинга

53:29
  • В видео обсуждается принцип шардинга, который используется в Hazelcast для оптимизации работы с данными.
  • Шардинг позволяет использовать один поток для работы с данными, что уменьшает время выполнения операций.

Многопоточность в Hazelcast

54:25
  • В Hazelcast используется конкурентная структура данных, но запросы к данным выполняются последовательно в одном потоке.
  • Для оптимизации запросов рекомендуется не выполнять тяжелые операции на конкретном ключе.

Сравнение с Apache HBase и Apache Geode

56:44
  • Hazelcast имеет схожую архитектуру с Apache HBase и Apache Geode, но отличается в некоторых аспектах.
  • В Hazelcast данные могут быть однопоточными или многопоточными, в зависимости от типа операции.

Возможность разделения нагрузки между узлами

57:13
  • В Hazelcast можно разделить нагрузку между узлами, запустив два инстанса на разных узлах или используя потоки для работы на разных ядрах.
  • В ближайших релизах планируется добавить возможность указать конкретный поток для работы на определенном узле.