Asyn c Задачи в облачной среде - PullRequest
1 голос

Я пытаюсь найти способ запускать асинхронные c задачи в облаке для java приложения.

Например, мы запускаем наше приложение в GCP, и есть способ запустить Отложенные задачи с по Очереди задач . Но есть проблема с сериализацией задач. Я не всегда могу сделать сериализуемой всю иерархию.

Также есть возможность использовать ExecutorService , но у этого есть обратная сторона: он не может запускать фоновые потоки для экземпляров с автоматическим масштабированием .

Основная цель моей задачи - отделить поток запросов от длительных задач. Также было бы хорошо запускать эти задачи на отдельных машинах. Думаю, должен быть какой-то способ достичь моей цели, но я пока не вижу этого.

1 Ответ

2 голосов
/ 26 мая 2020

Когда у вас есть Java объект, который вы хотите отложить, секрета нет, вы должны сериализовать их. Это может иметь несколько форм:

  • Реализовать сериализуемый интерфейс и использовать Cloud Task
  • Хранить объект где-нибудь (firestore, Google Storage) и передавать задаче только ссылку (documentId of Firestore, BlobId of GCS) для перезагрузки данных и их обработки
  • Publi sh сообщение в PubSub и запуск вашей конечной точки с данными, встроенными в сообщение PubSub

Во всех этих возможностях , вы должны сериализовать данные (в двоичном формате, в JSON, в тексте, ...)

В любом случае, для «длительного задания» все зависит от «длинного» и требуемых ресурсов. Сегодня Cloud Run - отличный кандидат на это с 15-минутным таймаутом (скоро в 4 раза больше) и 2vCPU / 2Gb памяти (скоро больше). Если это соответствует вашим требованиям, я настоятельно рекомендую вам взглянуть на него.

  • Это бессерверное
  • Оно портативное
  • Вы выполняете запуск на другой виртуальной машине
...