HermitMQ архитектура брокера сообщений на Go с пропускной способностью 3.4 ГБ/с и 2+ млн сообщений в секунду

HermitMQ архитектура брокера сообщений на Go с пропускной способностью 3.4 ГБ/с и 2+ млн сообщений в секунду

HermitMQ это высокопроизводительный брокер сообщений с открытым исходным кодом, написанный на Go специально для highload систем, где стандартные решения создают избыточную задержку и нагрузку на сборщик мусора. За счёт отказа от тяжеловесных фреймворков сериализации в пользу кастомного 29 байтного бинарного протокола, использования mmap-индексированного Write Ahead Log и чтения по принципу zero copy, брокер преодолевает отметку в 2 000 000 сообщений в секунду (пропускная способность свыше 3.4 ГБ/с) на процессоре Apple M1.

  1. Исходный код и документация: GitHub ekhidirov/hermitmq
  2. Стек и технологии: Go (Golang), Custom Binary TCP Protocol, Write Ahead Log, Memory Mapped Files, Zero Copy I/O, Built in Client SDK.

Почему стандартные брокеры становятся узким местом?

В высоконагруженных микросервисных архитектурах классические брокеры сообщений часто упираются в три ограничения: оверхед на сериализацию/десериализацию (JSON/Protobuf), паузы сборщика мусора из за постоянных аллокаций памяти в куче и блокировки потоков при конкурентной записи в одну очередь. Цель разработки HermitMQ заключалась в создании предельно быстрого, предсказуемого по памяти брокера на чистом Go с минимальным временем отклика.

Ключевые архитектурные решения HermitMQ

Узел системыРеализация в HermitMQЧто это даёт бизнесу и инфраструктуре
Сетевой протоколКастомный 29 байтный бинарный протокол поверх TCP без внешних сериализаторовМинимальный сетевой оверхед, отсутствие лишних аллокаций памяти при парсинге заголовков
Хранение данныхМодель Topic Partition на базе Write Ahead Log с mmap-индексированными файламиМгновенный поиск смещений (offset) через отображение индекса в память и последовательная запись на диск
Сетевой ввод-выводПотоковая передача Zero Copy через io.CopyNПередача данных из файлового буфера в сокет в обход пользовательского пространства памяти, скорость чтения до 3.4 ГБ/с
Управление конкурентностьюПаттерн Lock Striping (разделение блокировок по партициям и сегментам)Устранение contention на глобальных мьютексах при одновременной работе десятков продюсеров и консьюмеров
ОтказоустойчивостьВстроенная защита от OOM и контроль размера фреймовСтабильная работа под пиковым трафиком без внезапного падения ноды из за переполнения ОЗУ

Бенчмарки

Тестирование проводилось на локальном стенде (Apple Silicon M1) с использованием встроенного в проект Client SDK:

  1. Пропускная способность при чтении (Zero Copy Read): более 2 000 000 сообщений в секунду.
  2. Полоса пропускания данных: свыше 3.4 ГБ/с.
  3. Потребление памяти: плоский профиль использования RAM и минимальное давление на Go Garbage Collector благодаря zero allocation подходу на критическом пути.

Нужна разработка высоконагруженного бэкенда или оптимизация узких мест на Go?

Подходы, заложенные в архитектуру HermitMQ (проектирование бинарных протоколов, zero allocation обработка данных, кастомные очереди и оптимизация сетевого ввода вывода), я применяю в коммерческих проектах для снижения затрат на серверную инфраструктуру и кратного ускорения отклика систем.

Проектирование и разработка Highload сервисов на Go с нуля.

Профилирование (pprof), устранение утечек памяти и оптимизация медленных узлов существующего бэкенда.

Разработка кастомных стриминговых сервисов, брокеров и сетевых движков.