Как запускать джобы
- Алик Ким
- 11 авг. 2023 г.
- 2 мин. чтения
поизучал немного, какие есть кошерные способы запускать фоновые задачи (джобы) на .net.
(в основном изучение свелось к общению с ChatGPT🙂 )
как обычно, немного отдает потоком сознания, писал изначально для себя.
не читайте!
Hangfire - хранит данные о джобах в БД. это дает доп. надёжность: типа, если приложение было в дауне в момент, когда длжоб должен был быть выполнен - он будет выполнен, когда приложение запустится (ну, наверное, есть гибкие настройки для этого)
Quartz.NET - ну, вот, запуск по расписанию простой старый-добрый. много настроек расписания, я так понимаю
Hangfire ,вроде, проще в настройках. но требует БД обязательно. Quartz - ну может персиститься в БД или в другие хранилища, а может, вот, просто в памяти
BackgroundService (IHostedService) - тема, встроенная в Core. я так понял, все, что оно может - запускаться параллельно с запуском основного приложения. нельзя рассматривать, как нормальный планировщик заданий, пожалуй.
если на Azure:
Azure Functions - ограничение по времени - несколько минут, ну, просто запускает по расписанию задачу. или по веб-триггеру.
Azure Logic Apps - какая то визуальная тема ~скриптов, которая может интегрироваться с разными службами. кажется, невизуальные алгоритмы тут не приветствуются.
WebJobs - привязана к вэб-приложению (App Service). типа, у каждого приложения есть джобы.
минус - вроде, их нет на линуксе.
немного посмотрел попутно насчет развертывания вэб-приложения на Azure:
самый кошерный способ развертывания вэб-приложения на Azure - App Service. альтернатива - контейнеры, но они сложнее (они - для больших нагрузок).
Functions - не являются нормальной альтернативой. чуть ли не сессию не поддерживают, в общем, для чисто информационных страничек могут подходить.
насчет затратности - GPT не сказал явно ничего плохого относительно App Service. (ну, там, все зависит...)
(изначально решил посмотреть, потому что краем уха слышал, что , мол, новомодный способ хостить вэб-приложения - через Azure Functions)
возвращаясь к джобам:
в ~разделяемой (ну, когда серверами не заморачиваешься) среде Azure при работе через Quartz (и, видимо, ему подобных) могут быть проблемы:
могут быть ограничения на количество запущенных потоков
может быть перезапуск инстанса приложения
может накапать дополнительная оплата за использование вычислительных мощностей
на форуме упоминалась такая тема как App Pool Recycle - насколько я помню, после этого все (в т.ч. и джобы) запускалось только после первого URL-запроса
не раз упоминают подход, когда Function просто дергает Url, внутри которого уже выполняется работа. или Logic Apps.
но GPT говорит, ограничение по времени выполнения HTTP-запроса "в тарифном плане Free" - 30 секунд. Bard говорит - 10 секунд
поэтому для долгих джобов, наверное, это не вариант
важное отличие Functions от WebJobs в плане, в частности, запуска джобов: функции масштабируются по отдельности. а в случае WebJobs масштабируется все ~основное приложение (App Service)
оо, а еще, возможно: имея ~App Service, можно использовать в нем вэб-джобы нахаляву, а за добавление функции придется платить (но не факт)
"Triggered WebJobs" - подразумеваются джобы, которые вызываются по урлу
IHostedService - (уже упоминался выше) Core-овский интерфейс, который позволяет запускать некий код параллельно с запуском основного приложения. используется как точка входа для, например, планировщика джобов Quartz.Net
Если подытожить: наверное, на Azure стоит использовать WebJob'ы (для этого надо будет прописать как то деплоймент, видимо)
Comments