Различия между рабочими приложениями и задачами в Pivotal Cloud Foundry и вызовом приложения Linux - PullRequest
0 голосов
/ 12 июля 2019

У меня есть стороннее приложение linux, которое должно быть запущено и завершено до запуска основного приложения Spring Boot. Я читал о рабочих приложениях и одноразовых задачах, но в настоящее время я не знаю, к какой категории относится мой вариант использования. Приложение linux каким-то образом зависит от основного приложения, поэтому я думаю, что мне нужно одноразовое задание (с помощью run-task).

В то же время приложение linux должно завершиться до запуска основного приложения. Если мои предположения верны, я был бы рад узнать, как я могу быть уверен, что приложение linux завершило работу до запуска основного приложения. С другой стороны, я хотел бы знать, как я могу продвинуть приложение linux на Cloud Foundry, если мне нужно рассматривать его как рабочее приложение.

1 Ответ

0 голосов
/ 14 июля 2019

Рабочий - это способ запуска нескольких процессов ОС на основе одной и той же базы кода. Например, если у вас есть веб-приложение и в дополнение к веб-части оно имеет фоновый процесс, который, возможно, обрабатывает долго выполняющиеся задания или что-то в этом роде. И веб-процесс, и рабочий процесс будут рассчитаны на одновременное выполнение и запуск навсегда (т. Е. Никогда не завершаться, если он завершается, это приводит к сбою).

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

Ни один из них не идеально подходит для того, что вы пытаетесь сделать. Вы можете использовать задачу, но вам нужно будет вручную управлять задачей и запустить ее до запуска приложения. Вы можете сделать это с помощью сценария оболочки и cf cli, например: нажмите ваше приложение с помощью --no-start, запустите задачу, дождитесь ее завершения, затем cf start ваше приложение.

Пара других вещей, которые вы могли бы сделать:

  • Пакет .profile сценарий с вашим приложением . Это будет выполнено в том же контейнере, что и ваше приложение, но до его запуска. Приложение не запустится, если скрипт не завершится успешно. Это в значительной степени то, что вы сказали, что хотите, но у него есть серьезное ограничение, заключающееся в том, что у вас есть только небольшое количество времени для завершения сценария .profile (по умолчанию 60 с, максимум 180 с на большинстве платформ, в основном это cf push -t). Если оно не завершится достаточно быстро, ваше приложение будет считаться не запущенным, и оно будет перезапущено. Это также будет запускаться каждый раз, когда запускается ваше приложение, и в каждом экземпляре приложения, что может не соответствовать вашим ожиданиям. И последнее, что есть в документации, что вы не можете использовать это с Java-приложением, но они не правы, это просто сложнее).

  • Измените команду запуска (т. Е. cf push -c). Это в основном то же самое, что и .profile, за исключением того, что вы вводите несколько команд в команду запуска, например cf push -c 'do_something_1 && do_something_2 && do_something_3 ...'). Эта опция имеет ограничения, аналогичные опции .profile, плюс она плохо работает с Java buildpack, который имеет довольно длинную и сложную команду запуска (не используйте эту опцию для приложений Java).

Надеюсь, это поможет!

...