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

Кто-Нибудь может поделиться опытом по переезду с кронов на очереди

в минимальном комплекте?

есть какие-то начитанные данные, но пока не понимаю назначения всего что начитал "что зачем и для чего", просто вижу "можно так-то"

например.
задачи (для примера):
1) когда юзер авторизуется заносить его в три места.
2) покупки юзеров агрегировать и пересчитывать время от времени

exchange:
user, payment

queue:
user.events.registered, payment.commands, payment.events.processed

consumer:
user.events.registered.app1
user.events.registered.app2
user.events.registered.app3
payments.events.processed
payments.commands

Как при обработке команд например будет перейти к цепочкам если понадобится более одного действия на консюмере?

Чем лучше запускать процессы, в каком месте позволять обрабатывать сообщения параллельно? Так-то команды обычно выполняются одна за другой, но есть какие-то точки (которые я пока не понимаю) позволяющие некоторые из них выполнять не мешая другим

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

Ну вот эти моменты разжевать... псевдокодом ли, или примерами на "птичках"

20 ответов

88 просмотров

Давай начнем с кейса периодически чет пересчитывать. Чем крон не устраивает?

Кроны и очереди вообще разные штуки. Они не заменяемые.

The Ant 🐜
Кроны и очереди вообще разные штуки. Они не заменя...

Ну можно поэмулировать очереди через крон. Складываешь таски в базу, а потом выполняешь раз в минуту батчами.

Павел Г.
Ну можно поэмулировать очереди через крон. Складыв...

Почему эмулировать? это будет настоящая очередь, просто консьюмер раз с минуту запускается ) Крон это штук которая запускает задачи интервально, или по времени разово. Ни больше ни меньше. Шедулер короче.

Г.-Разработчик ПО / Web Автор вопроса
Павел Г.
Ну можно поэмулировать очереди через крон. Складыв...

А для сборки батчей чем пользоваться удобно? Я вот доклад послушал сейчас где рекомендовали для кроля на клиентской стороне батч формировать. В моем случае юзеры регаются то часто то редко. Если бы это был псевдокод на каком-то rxjs то там стояло бы два триггера - временной и количественный, и по одному из них срабатывала бы отправка батча в очередь. Но это значит что мне сначала надо эти регистрации накопить где-то, и поскольку пхп это разные таки процессы на каждого юзера, то снова бд. и из бд в очередь, чтобы... запустить обработку. То есть получается что крон как раз временной триггер, тогда как количественный может быть сделан на хендлере закидывающем в БД чтоли? Закинул одну, увидел что их двадцать собралось, пнул очередь, та запустила скрипт тот же что и в кроне висит. Тогда очередь что-то вроде управляющего исполнителями, которые могут быть на других машинах.

Г. Разработчик ПО / Web
А для сборки батчей чем пользоваться удобно? Я во...

Я честно говоря вопроса не понял, у вас уже какая то комбинация крона кролика и батчей пошла. Зачем вам какие то временные, количественные батчи уже? Я про батч упомянул, потому что кроном забирать по 1 таске раз в минуту, но это прям для совсем лоу трафика

Г.-Разработчик ПО / Web Автор вопроса
Павел Г.
Я честно говоря вопроса не понял, у вас уже какая ...

В оригинале звучало, что крон и очереди дополняют друг друга, и был контраргумент что одно можно заменить другим. Я попробовал прокомментировать свою точку зрения и ждал либо опровержения либо поддержки на самом деле, нежели ответа на вопрос. То есть если бы код писался на реактивном каком-то языке, то была бы переменная в которую накапливается батч, к примеру обработка каждые 10 входящих, пакетная. Но бывает так что поток остановился и месяц висит 5 входящих. И тогда нужен таймер и запустить по времени, не важно сколько скопилось. С этой точки зрения и крон и очередь дополняют друг друга. С другой стороны в некоторых очередях должно быть какое-то решение для запуска каждые N секунд, но они вроде не совсем про это предназначены... В технике сначала был генератор который валил в 1000 тактов, поверху поставили импульсный генератор, который собирал по 3-4-5 тактов по необходимости, и получился публичный канал, где кто не прочитал - тот пропустил. Поверху накатили накопитель - получился приватный канал, где ты точно прочтешь, но позже. А потом накатили подтверждение, чтобы знать что делать если ты прочел, получилась шина команд. Можно накатить еще "что делать если через 5 сек не прочел" но крон именно с этой стороны начинает, а в остальное не умеет

The Ant 🐜
Почему эмулировать? это будет настоящая очередь, п...

А в MQ нельзя таймаутить события очереди?

Г.-Разработчик ПО / Web Автор вопроса
Павел Г.
Мы все еще про кролика и его очереди?

Просто прокомментировал, что одно другое скорее дополняет чем заменяет, но от крона врядли удатся отказаться в целях контроля застывших пачек. Впрочем пока задачи не перешли в фазу "делать пачками" можно отказаться. Когда перешли - либо очередь надо учить по времени само-тригерриться, либо крон должен вызывать скрипт, который пинает очередь

Г. Разработчик ПО / Web
Просто прокомментировал, что одно другое скорее до...

Сорри тут не понял, а для чего пачками? (пока выглядит как сильно лишнее)

Г. Разработчик ПО / Web
Просто прокомментировал, что одно другое скорее до...

Или я что-то не понимаю, или вы про очередь. Как ее тригерить, чем ее тригерить? Она не в памяти приложения. Мы же все еще про php и кролика? Ну да есть какие то особые кейсы, где надо что то пробатчить, чтобы например потом в одном запросе куда то отправить, но это вопросы оптимизации уже, и они врядли у вас, когда вы говорите что трафика у вас не так уж и много Очередь в кролике, а вы просто достаете оттуда по 1 сообщению, если оно там есть

Г.-Разработчик ПО / Web Автор вопроса
Владимир
Сорри тут не понял, а для чего пачками? (пока выгл...

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

Г.-Разработчик ПО / Web Автор вопроса
Павел Г.
Или я что-то не понимаю, или вы про очередь. Как е...

триггерить в смысле отправить команду "скажи консюмерам начать делать задачу"

Г.-Разработчик ПО / Web Автор вопроса
Павел Г.
Зачем? Они и так ее делают.

тот редкий кейз когда в секунду может прийти 30000 заявок, и 10000 из них потеряются из-за того что кролик лимитирован как апи гугла - 20тыщ в сек

Г. Разработчик ПО / Web
тот редкий кейз когда в секунду может прийти 30000...

Чтобы накопить такой объем перед батчем, вам нужно минимум неумирающее приложение которое выдержит такой rps, что уже маловероятно на 1 машине

Г.-Разработчик ПО / Web Автор вопроса
Павел Г.
Чтобы накопить такой объем перед батчем, вам нужно...

думаю да, я так теоретически размышляю, я ж в этом не варю почти

Г. Разработчик ПО / Web
тот редкий кейз когда в секунду может прийти 30000...

Можно получается поднять 2 кролика в кубере и проблема решится до 30к в сек?

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

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

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
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
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта