Павел
Тут зависит от размера проекта
Ну а как от размера проекта зависит что смски перестанут слаться, которые слались по ивентам?
Nikolay
Ну а как от размера проекта зависит что смски перестанут слаться, которые слались по ивентам?
Так какой смысл от данного удаления, если честно не очень понятно
Юра
Ну а как от размера проекта зависит что смски перестанут слаться, которые слались по ивентам?
Просто обычно все болт клали на ивенты, и просто дёргают руками кругом этот смс сервис и всё
Юра
И никак ты его не выпилишь
Павел
Так какой смысл от данного удаления, если честно не очень понятно
Ну тут весь разговор о том, что horse хочет чтобы можно было удалять фичи простым удалением папки. В целом разговор чисто для поболтать не более
Nikolay
Но мы решаем ее )
Вы пишете код чтобы его удалить?
Юра
Проблем удаления тесно связана с темой loose coupling
Юра
В идеале ты типо должен иметь возможность удалить
Павел
Вы пишете код чтобы его удалить?
Мы просто обсуждаем это
Nikolay
Проблем удаления тесно связана с темой loose coupling
Это больше проблема независимого изменения
Юра
Ну на практике вот выясняем возможно ли это или это просто болтовня умных писателей всяких книг
Konstantin
Просто обычно все болт клали на ивенты, и просто дёргают руками кругом этот смс сервис и всё
ивенты тоже штука так себе: хер концы потом найдешь с непрямой диспетчеризацией. хер тест напишешь что гарантирует отправку смс когда ты чет купил
Юра
Ивенты решают одну проблему, и добавляют другие
Павел
ивенты тоже штука так себе: хер концы потом найдешь с непрямой диспетчеризацией. хер тест напишешь что гарантирует отправку смс когда ты чет купил
Ну для тестов решения есть, от самых простых - синхронных дипатчей в тестах. До - задержки в тестах на время выполнения всего - но вот тесты усложняются, тесты становится писать бОлее влом
Юра
Поэтому короче не бывает идеальных проектов
Юра
Такой вот итог )
Юра
Та же симфа со своими абстракциями в старой версии секьюрити это просто трындец же полный. Да и сейчас тоже там хватает абстракций всяких
Konstantin
Ну для тестов решения есть, от самых простых - синхронных дипатчей в тестах. До - задержки в тестах на время выполнения всего - но вот тесты усложняются, тесты становится писать бОлее влом
еще онбординг сильно усложняется: новый разраб в команде гарантированно будет не очень счастлив, разгребая общение основанное на ивентах
Юра
Апи платформ кстати на ивентах же вся
Павел
еще онбординг сильно усложняется: новый разраб в команде гарантированно будет не очень счастлив, разгребая общение основанное на ивентах
Ну это скорее зависит от его общего уровня. Кто ивенты любит, вкатится с той же скоростью что и без них. Хотя соглашусь, что-то дебажить несколько сложнее. Короче ща скорее большинство топят за них, чем против.
Юра
Хукт ивенты суть в том что код который что-то делает вызывается неявно
Юра
И дебажитл такое то ещё удовольствие
Павел
И дебажитл такое то ещё удовольствие
Да, это сложнее. Но зато OpenClose )
Юра
Плюс можно напортачить с приоритетом и отхватить баги которые тоже сложно обнаружить
Konstantin
типа если ... то прокинем ивент дальше. или нет!
Павел
Мы ивент кинули в очередь, какой то может быть приоритет, там все слушают))
Юра
Был у меня кейс где они поменяли приоритет своего сериалайзера или что-то такое. И все сломалось
Юра
Пол дня ушло чтобы понять че случилось
Павел
Был у меня кейс где они поменяли приоритет своего сериалайзера или что-то такое. И все сломалось
Ну это завязались на фрейме. Это можно схватить пендаля и без приоритета. Вы завязались на функции, а она изменилась, что-то сломалось
Юра
Они просто впихнули это в минорное обновление
Юра
Хотя изменение приоритета чего бы там ни было, это уже BC
Юра
Ибо это часть публичного апи
Павел
Они просто впихнули это в минорное обновление
Ну я больше к тому, что это скорее не проблема ивентов и т.д. а зависимости от вендорного кода. Такое можно провернуть с чем угодно.
Юра
Ну делайте просто норм семвер и норм ченджлог )
Юра
И не будет к вам вопросов )
Павел
Ну делайте просто норм семвер и норм ченджлог )
Ну это да, понятно что касяк :) У меня так что-то сломалось в сонате вообще в патч версии. Ну всякая фигня возможна при использовании стороннего кода.
Павел
Приветствую. Хэлпаните плиз с тривиальной задачкой, но не делал просто. Есть инстансы приложения. У каждого есть свой кэш. Кэш нужно чистить по определнным ивентам на всех инстансах. Правильно ли я понимаю, что нужен fanout exchange в котором прописать количество очередей по количеству инстансов, а каждый инстанс должен слушать только свою очередь? Ну т.е. messenger:consume --queues=queue_name_N на каждом инстансе?
Konstantin
а кеш локальный что ли (в файлах?)?
Павел
а кеш локальный что ли (в файлах?)?
Редис. Девопс сказал, что лучше делать не общий а свой, для распределнности и масштабирования
Konstantin
господи какая чушь
Konstantin
протоколы согласования (когерентности) распределенных кешей - это действительно сложная задача, которая решается мягко говоря нетривиально
Konstantin
если не одна из самых сложных задач в distributed-мире
Павел
Приехали :(
Konstantin
редис сам прекрасно кластеризуется. если на пальцах (это исключительно упрощенный пример), то он сам может собраться в определенный кластер, с дублированием, резервированием, разделением нагрузки, а вот приложение с ним работает будто это локальный сингл-инстанс базы на десятки терабайт
Konstantin
то есть операции из прикладного кода будут такими же - сделали $redis->del($key) а ключ магически удалился на всех инстанса одномоментно
Konstantin
бля)
Konstantin
у него качественная каша в голове, я не могу это ничем иным объяснить. https://redis.io/docs/manual/scaling/
Konstantin
однопоточность плоха только если у тебя одна команда съедает много времени (сложные операции с линейной сложностью O(N) над огромными листами, долгие lua-скрипты и всё такое). тогда последующие за этой командой встают в очередь и долго ее ждут, это правда не очень приятно. но это довольно сложно сделать, используя редис как кеш. в остальном редис достаточно спокойно переживает 200-400 krps на среднем железе, несмотря на однопоточность
Konstantin
с независимыми кешами легко себе представить, что какой-то воркер не получил команду (рестартился в этот момент, или еще что) и не сбросил кеш своего инстанса. и тогда запросы за одними данными будут отвечать разными ответами в зависимости от того, на какую ноду упал запрос, это же сущий кошмар, который замучаешься дебажить
Konstantin
Спасибо, я читал про 80к+- на средненьком железе, а тут вон оно как. Но 200-400, все равно упираемся потом и надо уже делать распределнный кэш?
если у вас 200 тысяч запросов в секунду за кешем, то вам тем более обязательно надо идти в кластеризацию, хотя бы с целью распределения нагрузки по нескольким машинам, вы ходите в районе физического предела одной машины
Konstantin
и если упретесь в него, резко станет херово всему приложению. то есть если у вас условных 200 krps, и вы их параллелите, у вас сейчас N инстансов с такой нагрузкой. которые суммарно все равно пережевывают эти 200к. если их соединить в кластер, этот кластер на тех же ресурсах потянет условных 700к, при тех же затратах
Konstantin
с независимыми кешами легко себе представить, что какой-то воркер не получил команду (рестартился в этот момент, или еще что) и не сбросил кеш своего инстанса. и тогда запросы за одними данными будут отвечать разными ответами в зависимости от того, на какую ноду упал запрос, это же сущий кошмар, который замучаешься дебажить
вот достаточный аргумент, на мой взгляд. распределенный кеш должен быть транзакционным: типа записали/сбросили или везде, или нигде, строго. для этого нужно строить систему с distributed transactions (а значит проектировать откат одной операции, если следующая сфейлилась), обмазываться сагами и вот этим всем. ну нахер, проще кластер 10 строчками настроить
Konstantin
А что насчет однопоточности, без вычислений в нее не упремся?
это "слышал звон, да не знаю где он" типа. не упретесь, я там выше накидал простую арифметику того, что вы и так упретесь в нее. типа сейчас вы параллелите абсолютно одинаковые запросы на каждый редис
Konstantin
на чтение ведь тоже, там строгая линеаризуемость операций
Konstantin
и никакой eventually consistency нет. это нельзя никак иначе гарантировать, кроме однопоточности и/или глобальных блокировок (что суть та же однопоточность)
The Ant
врятле, иначе он не мог бы читать сотни тыщ рпс
Konstantin
да почему, он же просто в сокет байты срет из памяти
Konstantin
на больших нагрузках там ядро больше тюнить приходится и в драйвере пайплайнинг делать, самому редису довольно пофигу
Konstantin
то что он делает (в случае простого get-а) - это очень примитивная работа
Павел
Так, ну а если не получится переубедить. Мое решение с точки зрения использования фрейма норм? Или есть другие варианты
Konstantin
ребята, главное не ведитесь на буллшит и не ставьте "многопоточный редис, лишенный всех недостатков" - https://keydb.dev/ это прям драматически говенный софт, который даже в лабе разваливается на каждый чих
Юра
Главное что разваливается быстрее редиса
Юра
Киллер фича
Алексей
Ребят есть в системе очередей фишка передавать на кластер а распределять чтение на каждом сервере отдельно?
Алексей
Может какой ни будь флаг выставлять можно?