Вадим
проблема в том что оно в общем всегда есть но вот иногда его нету
Михаил
а чо его нету
Дай тогда полную инфу 1) posrgesql ваша субд? 2) используете пулл соединений к бд? 3) приложение живёт в контейнере? 4) как долго это приложение работает без перезапуска?
Михаил
проблема в том что оно в общем всегда есть но вот иногда его нету
Если короткий ответ - сталкивался с таким когда приложение живёт примерно 2 недели, и утилизирует пулл соединений (к примеру pgBouncer) то почему то иногда соединения завершаются вот с такой ошибкой. Со стороны бд она выглядит как «клиент разорвал соединение сам» У моей команды было предположение что если соединение очень долго открыто то pgBouncer насильно рвёт соединение. Если у вас не pg, но 2 и 4 ответ да - всё равно проверьте теорию. Мы её так и не решили.
Михаил
Ну и если решите то поделитесь. Но решать нужно с вашим отделом devops
Вадим
Дай тогда полную инфу 1) posrgesql ваша субд? 2) используете пулл соединений к бд? 3) приложение живёт в контейнере? 4) как долго это приложение работает без перезапуска?
1) таймвеб, ихний "кластер" постгрес 2) что значит пул? 3) да, приложение в контейнере, докер на таймвебовском впс 4) вообще недолго, пару дней, и случалось в разное время основное приложение работает норм, проблема возникает в контейнере которой выполняет роль консьюмера мессаджей
Вадим
Ну и если решите то поделитесь. Но решать нужно с вашим отделом devops
наш отдел девопс это я и есть, в полном составе
Михаил
1) таймвеб, ихний "кластер" постгрес 2) что значит пул? 3) да, приложение в контейнере, докер на таймвебовском впс 4) вообще недолго, пару дней, и случалось в разное время основное приложение работает норм, проблема возникает в контейнере которой выполняет роль консьюмера мессаджей
2) Технические приложение может взять и открыть бесконечное соединений к бд - за это бд вам спасибо не скажет. Но и ограничивать кол-во соединений вы не хотите - так как приложение должно работать. Для этого придумали пуллеры соединений. Они открывают с бд фиксированное количество соединений и их держит. а приложения уже подключаются к пуллеру, он всё выдержит. 4) ну возможно дело в нагрузке. Оно может быть больше чем у нас До меня тут ещё дошло что проблема может быть в том, что приложение открывает больше соединений чем сконфигугрированно в бд
Вадим
как бы его завершать иногда чтоли
Вадим
этот сервис
Вадим
или соединение закрывать
Вадим
ага, сделал так но это ж не про память, а про соединение но хуже не будет, это точно, спасибо
Вадим
Внимательно прочитай
ага, новый процесс создаст
Вадим
да, спасибо
Михаил
Я про time limit🔔
Вадим
Я про time limit🔔
а что тайм лимит
Вадим
это ограничение на обработку одного мессаджа как я понял
Вадим
.
не понял как это связано
Михаил
это ограничение на обработку одного мессаджа как я понял
Нет, это ограничение на работу воркера. Почитать о всех опциях ты можешь через bin/console me:co —help
Вадим
победил вроде, всё в доке написано https://symfony.com/doc/6.4/messenger.html#middleware-doctrine
Ivan
Привет! Кто использует вход по ссылке? Насколько безопасным является способ, если из атрибутов используется только id?
Ivan
Буквы/цифры
Михаил
так же, так как это get запрос - возможна кеширование ссылки в браузере. Но это проблема уже пользователя будет, хотя не желательно давать кешировать. ещё если ссылка не абсолютно случайная - может быть возможность как-то сгенерировать. Одним словом id не должен быть скомпрометирован и он не должен быть динамическим.
Ivan
Насколько я помню, там еще expires, поэтому кэш не должен мешать пользователю при формировании новых ссылок. Вопрос только достаточно ли id, или например добавить туда время последней авторизации?
Михаил
Насколько я помню, там еще expires, поэтому кэш не должен мешать пользователю при формировании новых ссылок. Вопрос только достаточно ли id, или например добавить туда время последней авторизации?
а что это даст? Если вы хотите предотвратить кражу и компрометацию ссылки - советов у меня почти нет. Я бы сам подумал и поресёрчил как это правильно сделать. Но если вы хотите дать возможность пользователю понимать что с аккаунтом происходит что-то не то и его пытаются взломать - ведите логи попыток (успешных или нет) авторизации и сообщайте ему пушами, смсками итд
Ivan
Понятно, спасибо!
Михаил
Но 256 символьный хеш никто не пройдёт. Защита от брутфорса, ttl ссылки, передача ссылки через безопасные каналы, возможность пользователю замораживать активность страницы если что-то происходит не то и ведение логов безопасности (уведомляя пользователя) будет приятным бонусом
Михаил
Вы хотите из почтовых рассылок дать возможность логинится пользаку?
Вадим
Привет! как правильно использовать транзакции в апи платформе? Допустим я удаляю сущность и с ней надо ещё 5 разных удалить паровозом. Как это лучше сделать? Допустим я могу в событии preDelete открыть транзакцию и всё остальное удалить. А как прервать основное удаление если что-то где-то пойдёт не так?
Юра
Кто-то сталкивался с тем что симфони мессенджер через доктрину вызывает большое потребление цпу у мускуля?
Юра
запускаю консюмер и сразу
Юра
Юра
Он постоянно пулит сообщения, раз в две секунды где-то, но все равно почему такое высокое потребление непонятно
Вадим
Привет! как правильно использовать транзакции в апи платформе? Допустим я удаляю сущность и с ней надо ещё 5 разных удалить паровозом. Как это лучше сделать? Допустим я могу в событии preDelete открыть транзакцию и всё остальное удалить. А как прервать основное удаление если что-то где-то пойдёт не так?
А подскажите пожалуйста как мне это реализовать лучше. Я в юзкейсе открываю транзакцию, потом хожу в каждый репозиторий удаляю, потом в юзкейсе вызываю флаш и закрываю транзакцию? Или флаш в каждом репозитории делать?
Kirill
я бы тоже ответ послушал
Вадим
:)
Вадим
хороший вопрос)
а ты тоже никогда так не делал, да?
Вадим
:)))
Kirill
у меня в каждой репке персист+флуш
Вадим
ага
Kirill
но чую что это не очень
Вадим
ну уже почитал, народ разное пишет
Kirill
вообще, выглядит так, что с точки зрения производительности лучше сейв вне репок пускать через какой-нибудь uow
Kirill
ну т.е. uow же и так инфра отвязанная от бд в теории
Kirill
так что в сервисе дёргаешь юзкейсы, которые чёто меняют, и пушишь в uow, а потом на нём флуш
Kirill
не совсем корректно с точки зрения логики: репа должна быть абстракцией над хранилищем, но...
Михаил
Он постоянно пулит сообщения, раз в две секунды где-то, но все равно почему такое высокое потребление непонятно
Индексы есть? Я хз ка мускуль справляется с частым созданием или удалением записей но это странно
Михаил
А ещё желательно глянуть какие запросы идут в рамках работы мессенджера, может ты там жёсткие джоины делаешь или сканы. В общем найти все запросы и заэксплейнить
Вадим
вообще, выглядит так, что с точки зрения производительности лучше сейв вне репок пускать через какой-нибудь uow
ну если продукт не для нагрузки то можно наверное флашить каждый раз в репе, он так вроде как-то атомарно выглядит...
Вадим
и вот ещё вопрос - есть же cascade: ['remove'] но чую я уже путаюсь кто там кого удаляет, а потом вообще не разберусь, наверное лучше всё ручками?
Вадим
там экономия копеешная мне кажется
Михаил
и вот ещё вопрос - есть же cascade: ['remove'] но чую я уже путаюсь кто там кого удаляет, а потом вообще не разберусь, наверное лучше всё ручками?
С этим проблема в том, что ты делегируешь удаление бд, и вроде это не хорошо, если у тебя бизнесовые сущности. Но я допустим пользую
Михаил
Юра
Я вообще ничего не делаю это стейдж где никого нет
Юра
Заметил что проц кушается полез смотреть кто, прибил доктрин консюмер и все стало ок
Вадим
придумал! function remove($entity, $flush = false) {}
Вадим
класс?
Вадим
:)
Nikolay
Вадим
ну блин
Михаил
придумал! function remove($entity, $flush = false) {}
Придумал? Это автогеннрируется вроде?)
Вадим
а чо
Михаил
а чо
А то что это сраный Ларавель
Nikolay
Чем больше с доктриной работаешь, тем понимаешь что половину функционала лучше не использовать
Михаил
У тебя есть возможность отменять транзакции не делая транзакции. Или транзакции коммитить вообще не создавая их. Unit of work и identity map это реально подарок. У тебя есть целый слой на котором ты работаешь с логикой и объектами так, как это в solid и планировалось. А уже на слое ниже сохраняешь всё это дело. А не то что у тебя идёт бл, и тут ХУЯК какой-то репозиторий и какой-то метод save
Михаил
А ещё ты вдруг узнаешь о CDC. Сервис который флашит изменения единой транзакцией неожиданно обнаружит что он очень тихий и очень мало пишет апдетов в кафку. А сервис который на каждый чих делает персист + флюш будет эту кафку засерать и насиловать внешние системы.
Михаил
А так можно? Можно! Это нормально? Это нормально! А если осудят? Да похуй