Hi! From the 9 of July 2019 all new posts in the blog will be published in English. I’ve made such decision based on the blog statistics: for the last two month 90% of visitors were from non-Russian-speaking countries so they probably use translation services to read my articles. Since...
Continue reading...Alex Sergeenko
Experience in WebFlux (Netty) highload optimization
For the last three weeks our team was brainstorming a strange bug. We have a Spring Boot-based microservice deployed on OpenShift cluster which provides a REST endpoint, retrieving a user data from a NoSQL database. For some unknown reasons we were unable to gain more requests-per-second. The mystic power was...
Continue reading...Масштабирование NIO-потоков Reactor-Netty в docker-контейнере и getAvailableProcessors()
При подготовке использовались материалы статьи “CPU considerations for Java applications running in Docker and Kubernetes”, автор – Christopher Batey. Reactor-netty Как гласит Википедия, Netty – это неблокирующий, event-driven, клиент-серверный фреймворк для разработки сетевых Java-приложений. Reactor-Netty, в свою очередь – TCP/HTTP/UDP клиент /сервер, который использует Java Reactor поверх Netty. Для обеспечения...
Continue reading...LeetCode: Find The Difference – найти единственное отличие в строках
Недавно познакомился с крутейшим порталом Leetcode, на котором собрано немыслимое количество алгоритмических задач, обвязанных тестами, качественной постановкой и даже коммьюнити. Если буквально: читаем условие, решаем задачу, дебажим локально, анализируем сложность алгоритма, оптимизируем, копируем тело метода обратно в окошко (сигнатура метода даётся в условии) и прогоняем набор тестов. Портал оценивает среднюю...
Continue reading...Как перестать беспокоится и начать работать с лямбда-выражениями в Java
Это – перевод статьи How to start working with lambda expressions, автора Luis Santiago. Прежде чем лямбда-выражения появились в Java 8 я успел попробовать их аналоги в других языках, например в C# и C++. Появление лямбда-выражений расширило синтаксис Java, придав ему дополнительную выразительность. В этой статье я хочу сосредоточиться на...
Continue reading...Improve your vocabulary
Если честно, то идею этой рубрики я подсмотрел в блоге Фёдора Урванова, который почитываю уже довольно давно. Раз уж блог – это такая штука, которая используется для складирования собственных мыслей “на будущее”, к которой иногда возвращаешься, чтобы вспомнить “что-то”, что помнил “когда-то”, но со временем подзабыл, то почему бы не...
Continue reading...Latency vs. Response Time
Latency (время ожидания) и response time (время ответа) часто используют как синонимы, но это не совсем правильно. Response time – это то, что видно из клиентской части приложения. Помимо непосредственно времени обработки запроса это время включает всевозможные сетевые задержки и задержки в очередях обработки. Latency – это период времени, когда...
Continue reading...Внедрение зависимостей в класс, не являющийся частью контекста Spring
Или, другими словами, как быть, если внедрить зависимость нужно, а класс собирается где-то в недрах проекта через new, то есть контекст Spring о нём даже не догадывается (а значит и никаких зависимостей в него не добавляет)? А столкнулся я с этим на текущем проекте. Есть некий клиентский API для работы...
Continue reading...Метрики асинхронных вызовов в Spring WebFlux (Java Reactor)
Существует множество фреймворков для работы с метриками Java-приложений (например Micrometer, который, к тому же, еще и включён в новые версии Spring Boot). Но когда дело доходит до мониторинга времени выполнения асинхронных запросов у некоторых (у меня!) сразу возникает множество проблем. Передо мной стояла задача настроить JMX-мониторинг для отслеживания асинхронных вызовов...
Continue reading...Backpressure в Spring WebFlux (Java Reactor)
Оригинальные источники: StackOverflow, Medium [Jay Phelps], StackOverflow Backpressure (back pressure) – это то, с чем рано или поздно сталкивается почти любой разработчик, а для некоторых это становится частой и серьезной проблемой. В мире программирования термин “backpressure” является аналогией, позаимствованной из физики. В двух словах, backpressure – это сопротивление или некоторая...
Continue reading...