LINUX.ORG.RU

RabbitMQ - использование общих ресурсов

 ,


0

1

Есть задача: отправить разные команды 100 клиентам. После получения команды клиент начинает скачивать файл с сервера. Но если они начнут скачивать одновременно, то сеть будет перегружена и более важные сервисы могут отвалиться. Поэтому хотелось бы сделать так, чтобы одновременно работали только например 10 клиентов.

По этой ссылке примерно то, что я хочу сделать: https://www.rabbitmq.com/blog/2014/02/19/distributed-semaphores-with-rabbitmq/ Но выглядит костыльно и в конце статьи написано, что решение не устойчиво к сбоям сети, а это неприемлемо. Я уже столкнулся с проблемой бесконечной блокировки на самописном сервере(без RabbitMQ).

Подскажите, можно ли подобное сделать на AMQP(конкретно RabbitMQ) или стоит выбрать что-то другое / продолжить писать свой велосипед?



Последнее исправление: nuke666 (всего исправлений: 1)

разные команды 100 клиентам
одновременно работали только например 10 клиентов.

Почему бы не завести 10 отдельных клиентов которые выполняют ровно эту задачу?

vladimir-vg ★★
()
Ответ на: комментарий от vladimir-vg

Каждый их этих клиентов будет выполнять именно свою задачу, а не 10 клиентов одну. Да, сервер может складывать в очереди задачи по 10 штук, а потом ждать завершения и складывать ещё. Но было бы интереснее записать сразу все 100 в очередь, чтобы вся логика была на брокере/клиентах. Хотя конечно не уверен, что это правильный подход.

nuke666
() автор топика
Ответ на: комментарий от nuke666

я имел ввиду один вид задачи. 10 клиентов занимающиеся только скачиванием файлов. Для других операций — другие клиенты.

vladimir-vg ★★
()
Ответ на: комментарий от vladimir-vg

Все клиенты одинаковы, они скачивают индивидуальные медиаресурсы для себя.

nuke666
() автор топика
Ответ на: комментарий от AF

Я читал это. Но как я понял там происходит распределение сообщений по клиентам в соответствии с каким-то алгоритмом. У меня же каждая команда адресована конкретному клиенту.

nuke666
() автор топика
Ответ на: комментарий от nuke666

Алгоритм там не какой-то, а вполне конкретный! Достаточно лишь внимательнее читать и все станет понятно.

RabbitMQ нужен для гибкой доставки сообщений. Закачкой файлов он не занимается.Так что раскидывай сообщений ч-з RabbitMQ, а ограничения на загрузку файлов ставь на том серваке, который эти файлы отдает. Он для этого предназначен, он это должен уметь.

AF ★★★
()
Ответ на: комментарий от AF

Тогда придётся писать свой велосипед вместо http, с очередями. Может быть есть какие-то готовые решения?

nuke666
() автор топика
Ответ на: комментарий от nuke666

На вскидку: в апаче есть mod_ratelimit, mod_limitipconn, Mod_cband

Так что читай внимательнее маны

AF ★★★
()

А в чем проблема сделать вот так: Даешь команду 10 клиентам скачивать. Если клиент отвалился или скачал. Даешь команду скачивать следующему клиенту. Если отвалившийся клиент опят онлайн, говоришь ему прекратить скачивать.

Int0l ★★
()
Ответ на: комментарий от Int0l

Сейчас работаю именно над таким вариантом. Веб интерфейс складывает все команды в одну очередь, а сервер уже передаёт из неё команды клиентам последовательно.

nuke666
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.