Ибо грешен я
Sep. 8th, 2021 09:55 pmХочется писать хороший код. Продуманный. Отлаженный. Самое главное - хорошо спроектированный.
Проблема только в том, что, обычно, вокруг ходит цейтнот. Причем такой цейтнот, что с той стороны контроль классический, а у тебя блицевый. Тут, увы, не до анализа вариантов в схевенингенском варианте сицилианской защиты.
Это я к тому, что я сегодня осознанно вмерджил к себе кусок совершенно потрясающего говнокода. Задача-то банальная - отсыпать нотифайки в такую-то ручку в таких-то случаях. Проблема в том, что ручка же черт знает где, а поэтому все прелести распределенного программирования налицо.
Короче, я просто вогнал еще одну таблицу, куда эти нотифайки разного рода инсертятся. Потом наговнякал еще один воркер (у меня их с десяток, одним больше, одним меньше), который ходит в эту табличку и пытается слать. 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 минут.
Вот так и живем, мать его так.
Проблема только в том, что, обычно, вокруг ходит цейтнот. Причем такой цейтнот, что с той стороны контроль классический, а у тебя блицевый. Тут, увы, не до анализа вариантов в схевенингенском варианте сицилианской защиты.
Это я к тому, что я сегодня осознанно вмерджил к себе кусок совершенно потрясающего говнокода. Задача-то банальная - отсыпать нотифайки в такую-то ручку в таких-то случаях. Проблема в том, что ручка же черт знает где, а поэтому все прелести распределенного программирования налицо.
Короче, я просто вогнал еще одну таблицу, куда эти нотифайки разного рода инсертятся. Потом наговнякал еще один воркер (у меня их с десяток, одним больше, одним меньше), который ходит в эту табличку и пытается слать. 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 минут.
Вот так и живем, мать его так.