170 похожих чатов

Господа, есть необходимость напилить джобы, которые будут храниться в бд

(постргрес) и периодически выполняться приложением по расписанию. Приложение в одной реплике (монолит). Расписание хранится в самой джобе, джобы многошаговые (для этого в джобе прописывается статус, а обработчик по некоему fsm по-очереди исполняет некоторые действия, обновляет статус джобы, и забывает до следующей итерации).
Вопрос: как лучше реализовать расписание?

Приходит на ум формат cron, но нет ни малеишей идеи, как это подружить с SQL

10 ответов

4 просмотра

Привет. ТК крон имеет минимальную точность в 1 секунду, а для некоторых тасок и реже, то можно раз в N доставать крон записи из таблицы, по ним генерить конкретные таски воркерам и их тоже сохранять в бд. Сложнее поддержать какие-нибудь правила выполнения на запуск сервера - там есть пара таких кейсов.

1. По поводу нескольких инстансов: SELECT FOR UPDATE SKIP LOCKED 2. По поводу пропущенных тасок: брать прошедшие таски со статусом «в ожидании» и на пару минут вперёд. С кроном все равно так же надо будет делать

Ilya-Kaznacheev Автор вопроса

Я говорил про расписание не в виде временных точек, а в виде периодичности, как например cron

Ilya Kaznacheev
Я говорил про расписание не в виде временных точек...

Тогда можно использовать тикер. Создаёшь задачи и каждому назначаешь период выполнения. Ну или крон. Я подумал про другое расписание.

Vadim
1. По поводу нескольких инстансов: SELECT FOR UPDA...

1) не до конца понятно - что именно нужно будет лочить и что апдейтить под локом? запись вида * * * * * не меняется все время. Вот 2 демона сделали с ней select for update одновременно - сначала первый, потом он снял свой лок и затем второй сделал то же самое. запись остается неизменной; как второму понять, что ему уже не надо порождать таски на выполнение задачи после первого?

Vadim
Статус в бд поменять

видимо не поменять, а вставить запись статус, тип таски + время. в бд лежит вот такое: * * * * * task1 надо вставить - task1 17.00 created

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

Ilya-Kaznacheev Автор вопроса
Elmanov Anton
если эту вставляемую запись совмещать со статусом ...

У меня в данном случае ничего, кроме одного инстанса го и одного инстанса постгри нету 🙂 Поэтому завязываюсь на них

Ilya Kaznacheev
У меня в данном случае ничего, кроме одного инстан...

ОК, но имхо при деплое есть шанс всеж наличия 2 инстансов в одно время. потому что другой вариант деплоя - будет с простоем.

Похожие вопросы

Обсуждают сегодня

Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
55
подскажите пожалуйста, как мне освободить результат записанный в переменную result? в чем проблема подскажите если МОЖЕТЕ?
Михаил Helper
28
кто-то пользуется компонентами rx ? как их лучше ставить, через OPM? (lazarus)
Iluha Companets
15
есть тут кто-то , кто только начал изучать си? если проходите курс на степике или как-то сами изучаете, пишите, может, скооперируемся?..
Eule
25
Слушайте, ещё такая интересная задачка. Сделан аудит действий пользователей через триггеры в базе, соответственно каждый пользователь имеет свой логин и пароль в базе. Это пре...
Сергей Бычков
12
Скажите, тут нет проблемы? IMyInterface1 = interface function GetInterface2: IInterface2; ... function TMyInterface.GetInterface2: IInterface2; begin Result := TI...
Ruslan aka DUDE
18
вопрос по москвину - не понимаю вот такого вопроса похоже Сколько разных всегда завершающихся функций с типом a -> a -> b -> a -> a можно реализовать? Две функции одинаково...
Fedor
11
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Кстати, раз про скачивание файлов разговор зашел) Сделал бота для себя (транскрибирующего и суммаризирующего встречи) но не ожидал что за 2 месяца 10к пользователей набежит😅...
Andrey Obolenskiy
8
что, сложно ифдеф на версию компилятора сделать?
Iluha Companets
6
Карта сайта