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

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

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

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

10 ответов

21 просмотр

Привет. ТК крон имеет минимальную точность в 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 инстансов в одно время. потому что другой вариант деплоя - будет с простоем.

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта