серверами, там нейросети картинки делают, клал бы я задачи в очередь и получал бы результат, но есть но
1) У разных серверов разный набор моделей и они могут меняться и обновляться
2) Если GPU занят генерацией то другую работу он делать не может, т.е. только одна картинка в один момент времени
И вот я пробовал создавать на каждую модель свою очередь, но поскольку в серверах по несколько моделей то они подписываются на несколько очередей, и проблема в том, что даже если я укажу в MassTransit лимит на одновременную обработку только 1 задания в момент времени, сервер все равно заблокирует минимум по 1 заданию в других тасках и не даст другим взять их в работу
Пробовал как-то сделать фильтрацию по типу модели в одной обей очереди, чтобы каждый подписчик вообще не мог брать задания с моделями которых у него нет, но тут кажется это вообще не поддерживается
В общем, как можно еще реализовать? Сам я начал изучать эту технологию день назад и для меня многое непонятно
Одним реббитом врядли получится. Как я бы сделал такую задачу. Для начала один эксейндж куда залетают задачи с роутинг кеями=моделям. Сервер декларирует под каждый свой гпу очередь (представим что там по одному гпу, значит сервер генерирует себе одну индивидуальную очередь) затем он биндит жту очередь на тот самый эксчейндж всеми присутсаующими у него моделями-роутинг кеями. Таким образом в каждую очередь каждого сервера будут попадать только задачи которые он может обработать. Остаётся проблема дедупликации (потому что задача появится в очереди у всех серверов с одинаковыми моделями) Тут уже реббит не помощник, ставим редиску и в начале обработки сообщения проверяем - никто еще не начинал обработку жтооо сообщения? Если начал - то просто отбрасываем, если мы первые - ставим признак в редис и начинаем обработку.
Тут идеально ложатся селекторы на очередь. В этом случае можно обойтись одной очередью и консьюмеры сами решают что им нужно. Но в rabbit их нет. Есть в activemq, соответственно если смена mq допустима, то вариант прекрасный. Если нет, то я бы пожалуй складывал всё в базу и оттуда уже выбирал нужное, городить что-то на кролике не вижу смысла
well, это были увлекательные 2 дня с кроликом, но я уже поднял activemq, спасибо за совет
Обсуждают сегодня