Ответ
RabbitMQ — это производительный брокер, но у него есть технические ограничения, которые важно учитывать при проектировании системы. В основном они связаны с потреблением ресурсов (память, CPU, файловые дескрипторы).
Основные ограничения:
-
Размер сообщения. По умолчанию сообщения не должны быть слишком большими. Хотя лимит можно настроить, отправка больших сообщений (десятки и сотни МБ) неэффективна, так как это сильно увеличивает потребление памяти и нагрузку на сеть. Лучшая практика — передавать сами данные через другие каналы (например, S3), а в сообщении отправлять только ссылку на них.
-
Количество очередей и соединений. Каждая очередь, соединение и канал потребляют память и ресурсы CPU на сервере RabbitMQ. Десятки тысяч очередей могут привести к деградации производительности. Лимит также упирается в максимальное количество файловых дескрипторов, доступных для процесса в ОС.
-
Длина имени очереди. Имя очереди не может превышать 255 байт в кодировке UTF-8.
-
Производительность диска. Для
durable(устойчивых) очередей иpersistent(постоянных) сообщений производительность сильно зависит от скорости дисковой подсистемы, так как каждое такое сообщение должно быть записано на диск.
Настройки для управления ресурсами обычно задаются в конфигурационном файле rabbitmq.conf.
Пример rabbitmq.conf для увеличения максимального размера фрейма:
# Устанавливаем максимальный размер фрейма в 256 МБ (268435456 байт)
# По умолчанию 131072 байт (128 КБ)
# Это необходимо для передачи сообщений, превышающих стандартный лимит
channel_max = 2047
frame_max = 268435456 Ответ 18+ 🔞
Да ты послушай, что за зверь этот RabbitMQ! Вроде шустрый брокер, аж дух захватывает, но, блядь, у него есть свои технические тараканы, которые в проекте потом могут такую подлянку устроить, что мало не покажется. Всё упирается в жадность до ресурсов — память, процессор, файловые дескрипторы. Овердохуища всего требует, сука!
Вот на что смотреть, чтобы не обосраться:
-
Размер сообщения. По дефолту там лимит, конечно, но его можно подкрутить. Только вот, ёпта, зачем? Тыкать в него сообщения по сто мегабайт — это же ебать мои старые костыли! Память сожрёт, сеть загрузит, все сосутки встанут. Умные дяди так не делают. Кидают данные куда-то на S3, а в очередь пиздюльку — ссылочку. Красота!
-
Количество очередей и соединений. Каждая очередь, каждый канал — это ж как глисты, сука, ресурсы высасывают. Захотел ты десять тысяч очередей — и привет, производительность накрылась медным тазом. А ещё эти файловые дескрипторы, блядь, в системе кончаются, и всё, пидары налетели, сервер ложится.
-
Длина имени очереди. Тут вроде мелочь, но тоже прикол: больше 255 байт в UTF-8 не впихнёшь. Хуй с горы, не больше.
-
Производительность диска. А вот это, блядь, важно! Если ты сделал очередь
durableи сообщенияpersistent, то готовься — каждую хуйню на диск пишут. Если диск тормозной, как черепаха в сиропе, то и вся система такой же станет. Терпения ноль ебать!
Короче, чтобы этого не было, всё настраивается в конфиге rabbitmq.conf. Там и лимиты повысить можно, и поведение поправить.
Вот, смотри, пример rabbitmq.conf, чтобы размер сообщения увеличить:
# Ставим максимальный размер фрейма аж на 256 МБ (268435456 байт)
# А то по умолчанию там 128 КБ, смех один, хуй вставишь и тот не влезет
channel_max = 2047
frame_max = 268435456
Вот так вот, подкрутил — и уже можно не мелочиться. Но помни, чувак, с большой силой приходит и большая, блядь, ответственность. Не нахуйчись с настройками!