Обработка заданий Redis KUE в нескольких модулях / экземплярах kubernetes - PullRequest
0 голосов
/ 19 апреля 2019

Я использую Sails.js для API, который я развертываю из Dockerfile в кластере Google Cloud kubernetes и масштабирую рабочую нагрузку с 3-5 модулями. API предоставляет конечные точки для загрузки отдельных файлов изображений и больших ZIP-файлов, которые я непосредственно извлекаю из текущего модуля / экземпляра API.

Как отдельные файлы изображений, так и извлеченный архивный контент (100-1000 файлов со всем вместе 15-85 МБ контента), я должен загрузить в различные хранилища. Это где Redis Kue вступает в игру. Чтобы API не блокировал запрос на загрузку слишком долго, я создаю отложенные задания kue, чтобы переместить все загруженные файлы и папки в сегменты хранения или цепочки заданий и сначала создать эскизы с помощью ImageMagick.

Все это может занять некоторое время, в зависимости от текущей рабочей нагрузки кластера, иногда больше, а иногда и меньше.

Все это работает довольно хорошо с одним экземпляром, но внутри кластера, это другая история. Поскольку экземпляр kubernetes для API может изменяться от запроса к запросу, закачки могут выполняться в экземпляре A , но задание для файлов обрабатывается и обрабатывается экземпляром B ( рабочий, а также сам API-интерфейс выполняются в одном и том же экземпляре!), который может не иметь доступных загрузок, что приводит к неудачной работе.

Google требуется время, чтобы синхронизировать модули и распространять загруженные файлы на все остальные модули.

Я попробовал следующее:

Поскольку имя текущего модуля доступно через переменную env HOSTNAME , я сохраняю HOSTNAME со всеми заданиями kue и проверяю на рабочем месте, если HOSTNAME из заданий совпадает с именем хоста текущей среды и позволяет обрабатывать задания, только если совпадают оба имени хоста.

Загрузка должна быть доступна как можно скорее; почему я не могу добавить задержку на несколько минут и надеюсь, что к тому времени, когда работа будет обработана, Google синхронизирует свои модули.

Ожидающие задания, которые не соответствуют имени хоста, я возвращаюсь в очередь и добавляю к ней задержку.

Мне нужна очередь, которая не должна заботиться об именах хостов и условных проверках для успешной обработки своих заданий в кластере, подобном моему.

1 Ответ

0 голосов
/ 23 мая 2019

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

В этом случае ваши задания могут работать независимо при поиске извлеченного содержимого архива в общем хранилище.

Надеюсь, что эта справка.Пожалуйста, поделитесь своими выводами.

...