elglin: (Default)
[personal profile] elglin
Хочется писать хороший код. Продуманный. Отлаженный. Самое главное - хорошо спроектированный.
Проблема только в том, что, обычно, вокруг ходит цейтнот. Причем такой цейтнот, что с той стороны контроль классический, а у тебя блицевый. Тут, увы, не до анализа вариантов в схевенингенском варианте сицилианской защиты.
Это я к тому, что я сегодня осознанно вмерджил к себе кусок совершенно потрясающего говнокода. Задача-то банальная - отсыпать нотифайки в такую-то ручку в таких-то случаях. Проблема в том, что ручка же черт знает где, а поэтому все прелести распределенного программирования налицо.
Короче, я просто вогнал еще одну таблицу, куда эти нотифайки разного рода инсертятся. Потом наговнякал еще один воркер (у меня их с десяток, одним больше, одним меньше), который ходит в эту табличку и пытается слать. SELECT FROM notifications ORDER BY notification_id LIMIT 1 FOR UPDATE; получилось - DELETE FROM notifications WHERE notification_id = XXX; не получилось - а ничего не делаем, на следующем проходе поретраим и так ad infinitum. Да-да, никакого вам ограниченного ретрая с экспоненциальным отступом - ручка будет страдать, один хрен она не моя.
По уму надо тут просто что-то, умеющее pub/sub прикрутить, от кафки до амазоновского SNS. Но у меня был постгрес, приклад с воркерами и час времени, набранный кусками по 15-20 минут.

Вот так и живем, мать его так.

(no subject)

Date: 2021-09-09 03:13 am (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

Да нормально. Хотя можно и через Akka.

(no subject)

Date: 2021-09-09 08:03 am (UTC)
beldmit: (Default)
From: [personal profile] beldmit
Всегда так делаю. В смысле, очередь, которая разгребается асинхронно, рулит.

(no subject)

Date: 2021-09-09 04:08 pm (UTC)
beldmit: (Программизм)
From: [personal profile] beldmit
Всё это есть. Но если это очередь однопоточная, то твоего решения более чем достаточно, а в многопоточную это переводится добавлением в запрос SKIP LOCKED или чего-то вроде.

А главное, я подозреваю, что если бы у тебя был там какой-нибудь queue processor, ты бы пихал туда и не парился.
Page generated Jun. 19th, 2025 05:21 pm
Powered by Dreamwidth Studios