Pull to refresh
9
Денис@Snaret

Java developer

10
Subscribers
Send message

State-first архитектура: поиск другого способа управления бизнес-логикой

Level of difficultyHard
Reading time10 min
Reach and readers5.1K

За последние годы разработчики в распределённых системах почти решили инфраструктурные проблемы: масштабирование, деплой, отказоустойчивость. Ценой этого прогресса стал экспоненциальный рост сложности бизнес-логики, которая всё чаще выражается не в коде, а в порядке сервисных вызовов.

Современные команды научились разбивать монолиты на микросервисы, оркестрировать их в Kubernetes и наблюдать через распределённые трассировки. Инфраструктура стала управляемой, но сама бизнес-логика — нет. И чем больше сервисов создаётся, тем сложнее сохранять целостность данных, порядок действий и предсказуемость поведения.

Типичный сценарий: бизнес приходит с задачей "Если в корзине три товара категории "Электроника", положи в подарок чехол, но только если регион доставки не "Дальний Восток". Звучит как if-else на пять строк. Но в распределённой системе это превращается в такой себе квест: BasketService синхронно обращается к Catalog, затем к Warehouse, затем к GeoService. Где-то посередине случается таймаут, где-то - сетевой сбой, и в коде начинают появляться саги, компенсации и ретраи.

В результате бизнес-логика перестаёт быть просто кодом. Она превращается в топологию вызовов: тонкий слой условий, размазанный по HTTP-клиентам и контроллерам. И чем сложнее система, тем страшнее становится трогать эти цепочки.

Я приглашаю сегодня взглянуть на проблему под другим углом. Что если пересмотреть не инструменты, а саму парадигму управления состоянием?

Читать далее

Осознанная стоимость абстракций: Autoboxing в современной Java

Reading time14 min
Reach and readers11K

Мы живём во времена, когда на оперативной памяти для heap Java-приложений почти не экономят, а архитектурные решения, которые ещё недавно можно было назвать расточительными, всё чаще воспринимаются как best practices.

Но не все коту масленица. Благодаря AI - буму, облачным вычислениям и микросервисной архитектуре с сотнями одновременно работающих инстансов, мы можем воочию наблюдать неукротимый рост стоимости оперативной памяти, что обязывает вернуться к рассмотрению принципов её экономии.

В этих условиях привычные абстракции требуют переоценки.

Сегодня я хочу напомнить об одной из самых распространенных в Java — autoboxing — механизме автоматической упаковки примитивных типов в соответствующие объекты-обертки.

Приглашаю вас посмотреть на знакомый Java-код не глазами разработчика, а глазами JVM, сборщика мусора и процессора, и разобраться, как незаметные на уровне синтаксиса решения превращаются в аллокации, давление на GC и раздувание heap.

Погрузиться

Field vs Constructor Injection в Java: ошибка объектного дизайна или вопрос синтаксиса?

Level of difficultyMedium
Reading time10 min
Reach and readers8.1K

Знаю, знаю... Прочитав заголовок, хочется голосом волка из мультфильма «Жил был пёс» сказать — «Шо, опять?». Ведь битва этих подходов давно закончилась и разработчики Spring уже поставили точку.

Но недавняя публикация в одном довольно крупном Telegram‑канале заставила меня вернуться к этому вопросу. В качестве главных аргументов против field injection там приводились лишь сложность изоляции в тестах и неудобство создания экземпляров для unit‑тестов.

И хотя с этими пунктами не поспоришь, у многих разработчиков и не только начинающих, остаются вопросы: каковы реальные последствия для самого объекта? Можно ли считать его полноценным сразу после создания new? И почему все современные рекомендации так настаивают на конструкторах?

Поиск ответов показал мне, что аргумент о тестах лишь верхушка айсберга. В глубине, куда я Вас сегодня приглашаю заглянуть, скрываются куда более фундаментальные вопросы принципов объектно‑ориентированного дизайна, гарантий Java Memory Model и уважения к жизненному циклу объекта.

Читать далее

Под капотом многопоточной синхронизации в Java: как потоки договариваются через Mark Word

Level of difficultyMedium
Reading time6 min
Reach and readers12K

Когда вы пишете synchronized(obj), под капотом происходит целая цепочка событий, которую можно отследить до Mark Word — восьмибайтового служебного поля в каждом Java-объекте. В современных реализациях JVM (таких как HotSpot, OpenJ9, GraalVM) используется динамическая, адаптивная система, которая выбирает наиболее эффективную стратегию блокировки в зависимости от реального поведения потоков.

Читать далее

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity

Specialization

Бэкенд разработчик
Средний
From 250,000 ₽
Java
SQL
REST
Spring Boot
Hibernate
ООП
Docker
Redis
Apache Kafka
PostgreSQL