ребята, а какой всё-таки идеологически верный вариант работы с очередями у нас? если нужно, чтобы задания жили при перезапуске сервера?
Мне недавно такая идея пришла в голову: хранить стейт в самом процессе (например, Agent), а при остановке процесса (при перезапуске) сериализировать и выгружать, например, в базу данных. При запуске инициализировать из базы данных. Есть в этом смысл, или я чего-то не учитываю?
Еще такой вопрос: натыкался ли кто-нибудь на DSL для написания stateful bots - например, телеграм-бота, который принимает заказ и оплату на него. Другими словами, есть ли удобный способ конвертировать обычный web browser wizard в бота.
Я еще понимаю так, что сам Agent может рухнуть, не сохранив стейт, но это, наверное, можно предотвратить путем того, чтобы этот модуль был максимально простым, только для хранения стейта, например, и устойчивым.
Мне недавно такая идея пришла в голову: хранить стейт в самом процессе (например, Agent), а при остановке процесса (при перезапуске) сериализировать и выгружать, например, в базу данных. При запуске инициализировать из базы данных. Есть в этом смысл, или я чего-то не учитываю?
Потом придёт мысль сохранять только при изменении стейта. Потом ещё, ещё, и получится в итоге глючная самописная СУБД
Потом придёт мысль сохранять только при изменении стейта. Потом ещё, ещё, и получится в итоге глючная самописная СУБД
"Потом придёт мысль сохранять только при изменении стейта." -> тут же перескочу на что-нибудь внешнее, но пока исходное условие в том, что это не требуется
Мне недавно такая идея пришла в голову: хранить стейт в самом процессе (например, Agent), а при остановке процесса (при перезапуске) сериализировать и выгружать, например, в базу данных. При запуске инициализировать из базы данных. Есть в этом смысл, или я чего-то не учитываю?
Я так делал, работало сносно. Сейчас думаю, что все что касается консьюминга данных и того что нельзя терять - писать в персистентную очередь (eg rabbitmq). Получается проще, понятней и с масштабированием из коробки
А, да, тут, видимо, еще важно определиться: насколько "нельзя терять". Если иногда можно (game state, например, или стейт переписки с ботом), то идея, вероятно, не худшая, раз ты говоришь, что работало.
Мне недавно такая идея пришла в голову: хранить стейт в самом процессе (например, Agent), а при остановке процесса (при перезапуске) сериализировать и выгружать, например, в базу данных. При запуске инициализировать из базы данных. Есть в этом смысл, или я чего-то не учитываю?
Не очень понятно какая проблема решается. Если остановка штатная то зачем что-то сохранять а не дать процессу доработать? Если нештатная то всё равно потеряются данные.
Может если сохранять каждый раз когда задача делает какой-то ценный прогресс? Только это породит фоновый поток записей в БД. И есть риск что разметка этих точек прогресса засорит бизнесовый код.