top of page

Как запускать джобы

  • Фото автора: Алик Ким
    Алик Ким
  • 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


Околокомпьютерный блог Алика

  • alt.text.label.Facebook

© Околокомпьютерный блог Алика , 2022. Сайт создан на Wix.com

bottom of page