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 ответов

32 просмотра

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

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

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к в сек?

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

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

а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Эх кто-то пришел и весь праздник испортил :( You need complex FBX scene importing setup to change things on import? good luck with that. You need navigation and pathfinding? g...
Serg Gini
5
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
Какого хера? /Sources/App/Modules/User/Models/UserLinkApple.swift:21:20: warning: stored property '_id' of 'Sendable'-conforming class 'UserLinkApple' is mutable @ID(...
Alexander Sherbakov
12
У тебя в конфиге нигде нет deny all; или вообще любого deny?
Alexander Sherbakov
10
Почему стало ломаться на D11? "739002.86400000' is not a valid timestamp" function IncDateTime(aStamp:TTimeStamp;aKind:TTriggerKind;aInterval:Integer):TDateTime; //aStamp = 2...
Катерина Свиридова
8
Привет всем. Подскажите где можно посмотреть, какая версия электрон, поддерживает версии windows? Некий changelog. Мне бы желательно, поддержку 7,8,10... latest, как понимаю и...
Anonym Squad
21
Портфолио: Зовут меня Александр, мне 36 лет. Город Пушкино. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github....
Magic
10
думаешь я не смогу также сделать? мне это просто не удобно
int 💳 𝙖𝙞𝙧 𝙗𝙞𝙜 𝙗𝙤𝙗 🔫 check bio / spam block / AFK / nohello.com / GMT+3
9
Ребят, чет я уже не догоняю... Крч в коде на асм там происходит нечто вроде a+число (a+1, a+2 и т.д.). Но почему строка lea ecx, [edx+1] работает как a+1?? В edx берется адрес...
Alan 🔝 Бэброу
4
Карта сайта