- Видео 6
- Просмотров 23 292
Дмитрий Ш.
Добавлен 14 сен 2014
Spring Webflux - Почему он такой быстрый?
Разбираемся почему WebClient от SpringWebflux работает в 20 раз быстрее обычного http-клиента.
Просмотров: 7 372
Видео
Cassandra / Consistent hashing, LSM Tree, Read repair
Просмотров 4063 года назад
Базовые архитектурные особенности Cassandra: 1. Consistent hashing - Как производится перебалансировка данных при добавлении/удалении ноды из кластера? 2. LSM Tree - почему Cassandra так быстро сохраняет данные 3. Read Repair - как Cassandra поддерживает согласованность данных в кластере?
Spring Webflux - Скачиваем 100 страниц за 2 секунды
Просмотров 3,2 тыс.3 года назад
Spring Webflux - Скачиваем 100 страниц за 2 секунды
Project Reactor. В чем его идея?
Просмотров 2,5 тыс.3 года назад
Разберемся зачем использовать Reactor. В чем его основная идея и какие преимущества он дает.
Apache Zookeeper часть 1
Просмотров 8 тыс.6 лет назад
Зачем нужен Apache Zookeeper? В каких случаях его использовать? Пример использования библиотеки CuratorFramework и рецептов из нее. Примеры кода github.com/dshuplyakov/zk-experiments
Ёмкая наглядная демонстрация, спасибо!
Спасибо за понятное объяснение!
100 страниц за 2 сек это конечно классно - но наверное акцент должен быть не на этом? Ведь на тредпуле можно добиться такой же производительности с классическим блокирующим RestTemplate
руZZиш програмерс?
Ммм, чел сравнил многопоточность с однопоточностью и решил, что это заслуги вебфлакса. А прикол реактивного программирования вообще не в этом. То, что ты сделал, это обычная многопоточность.
Нет, ты ошибаешься. В данном примере будет использован 1 main поток + io потоки netty (их число равно числу ядер). Итого, на 8-ядерной машине одновременное скачивание 256 страниц будет обеспечено 9 потоками. Это не многопоточка. Попробуй в 9 потоков скачать с помощью синхронного http-клиента 1000 страниц, и посмотри сколько у тебя уйдет времени. Гарантирую что удивишься.
Но ведь действительно эта асинхронность достигается через выполнение задачи в отдельном потоке. А поскольку вы запускаете много таких задач, то и получается многопоточность. Вообще я почти уверен, что если сделать загрузки через многопоточность, используя обычный http клиент, то результат будет как на webflux
@@flamencoag это сравнение я делаю в начале видео. Можете пересмотреть и увидеть разницу в скорости 3:51
@@flamencoag Так тут нет многопоточности. Тут ассинхронность. Мы просто избегаем блокировки при выполнении. Ты при многопоточности такого не добьешься, один поток это примерно 1мб, 256 потоков, удачи.
Крутой пример, крутое объяснение! Спасибо!!!
Супер 👍
Странно, только что закончил перф-тест последнего (3.0.3) Spring Boot MVC vs Spring Boot WebFlux - и как-то результаты совсем не порадовали... вот что получилось Throughput/s: Non-DB Calls (Actuator helath/info) MVC: 310.17 WebFlux: 225.94 With DB Calls (create / get) MVC: 115.51 WebFlux (+R2DBC): 33.50 получилось что WebFlux аж в 4 раза медленнее чем MVC, я ожидал все на оборот
Тоже никак не могу получить эту обещанную производительность( Ни db, ни походы на api. Ничего не выигрывает у MVC. Уже устал искать где я ошибаюсь. Методы максимально коробочные - без какой либо моей логики. Чисто вызов webClient/Repository
Товарищ тоже тестил и тоже подметил, что прироста скорости нет. Может разве что по памяти будет выгоднее, что тредов меньше крутится, но такое
Это же основа асинхронного выполнения - асинхронное выполнение всегда медленнее обычного синхронного, потому операция переключения потоков далеко не бесплатная, плюс создание объектов Mono и Flux тоже не бесплатные. Но в асинхронном выполнении минимизируется время простоя потоков, то есть если потоку требуется прождать где-то секунду или несколько, например дождаться ответа от другого сервера, то в синхронном программировании поток будет просто ждать, а в асинхронном поток не ждёт, и может заняться обработкой других вещей - например параллельно отправить другой запрос, или что-то подсчитать. Это очень полезно, потому что практически везде используются пулы потоков с ограниченным количеством потоков, и многие не знают, как увеличить тот или иной пул потоков, плюс вообще то каждый поток по умолчанию тратит 1МБ памяти под стек и приложение с 1000 потоков будет потреблять 1ГБ памяти только для потоков
Отлично, почти понятно стало, но всеравно мутная разница с мультитредом, например можно в раннабл петедать адрес где показать картинку даже тупо одним методом и вуаля получится что у нас асинхронка, т.е. если сделать архитектуру где одни раннаблы и маин ничего не ждет то это вроде называется мультитред но джоина в майне нету а значит это тоже асинхронка, майн же работает дальше....
>>и вуаля получится что у нас асинхронка, Не получится. Будет синхронка в отдельном треде. Тред в этом случае будет заблокирован впустую 95% времени, пока отработает сеть. А в асинхроне такой проблемы нет, там тред не блокируется.
Отличный обзор, спасибо
CAP теорема 8:45
А время отклика от 1 запроса в спринге с webflux при малой нагрузке быстрее? Чем в обычном спринге?
Разницы нет. За время отклика отвечает сервер, т.к. он отдает веб-страницу. И делает он это всегда одинаково, независимо от того, кто у него запрашивают страницу - webflux или обычный httpClient. Если нагрузка маленькая то лучше использовать httpClient, т.к. код будет проще как для написания так и для отладки
супер можете еще снять видео с разбором оператора groupby
Речь наверно идёт об синхронной/асинхронной обработке событий, а не синхронных/асинхронных событиях.🙂
Кроме разработки баз данных, какие есть кейсы когда инстансы твоего софта должны знать друг о друге? Имхо это антипатерн который нужно избегать всеми возможными способами.
Спасибо за видео! Вообще супер )
Extremely interesting! Plz countinue
Дмитрий спасибо! Очень интересная тема, прям нашел то что мне нужно. Продолжайте, отлично объясняете.
Ты говоришь папка и файл - это node. Значение файл-node это некий текст, а что является значением папка-node? Это список подпапок вместе с файлами или как?
Значение папки - тоже текст, как и у файла. Но плюс к этому, папка обязательно содержит дочерние элементы: другие файлы/папки. Другими словами файл становится папкой, когда у нее появляется хотя бы один дочерний элемент.
Спасибо мужики! Хоть кто-то внятно обьяснил что это за хранииель зоопарка блин) С телефона код нифига не видно. Буду на компе пересматривать. Ну это очевидно конечно же.