О чём расскажут на JPoint: от профайлеров до контейнеров

от автора

Конференция JPoint в этот раз особенная. Во-первых, помимо онлайн-части, впервые за два года будет возможность увидеться в офлайне. А во-вторых, офлайн-день пройдёт в Санкт-Петербурге (вместо привычной для JPoint Москвы). Но если до Петербурга добраться не можете, то и этот последний день можно увидеть хотя бы в виде онлайн-трансляции.

А вот с точки зрения программы таких разительных изменений нет. Нас по-прежнему интересуют доклады про инструменты, JVM, Spring, архитектуру, JVM-языки вроде Kotlin — в общем, про всё, что интересует опытных джавистов. Представляем Хабру описания докладов (и из онлайновой части, и из офлайновой).

Оглавление


Инструменты

Ноутбуки Kotlin для обучения и прототипирования

Александр Нозик

МФТИ

Для дата-сайентистов или преподавателей Python «ноутбук» — это не привычное всем раскладное компьютерное устройство, а другой стандартный рабочий инструмент. Но могут ли эти ноутбуки помочь закоренелым Java-бэкендерам?

Затащить ноутбуки в JVM-мир (в основном в Scala) пытались неоднократно, но дальше дата-сайентистов дело обычно не доходило. 

Александр покажет скриптовое расширение компилятора Kotlin, которое не только позволяет писать на Kotlin в ноутбуке, как в случае с Python, но и решает ряд проблем в этой области. Например, воспроизводимость окружения или сборки и (частично) загрузки визуализационных плагинов. Также за счет бесшовной интеграции с Java-библиотеками есть возможность загружать привычные инструменты и даже скомпилированные классы в REPL-окружение ноутбука и работать с ними.

Еще один плюс — это обучение: ноутбук позволяет приступить к работе с тем или иным кодом без длительной настройки окружения и правильного раскладывания зависимостей. Ну и, конечно, при помощи ноутбука легко делиться друг с другом готовыми примерами и инструкциями.


Юнит-тесты писать не нужно!

Владислав Янченко

Mschinet.net

Без юнит-тестов жить непросто, но и писать их разработчики ужас как не любят. Вот и задумаешься, действительно ли нужно писать юнит-тесты в 2022 году?

Владислав расскажет, как создавать юнит-тесты быстрее, а покрывать ими больше. Как всегда, решение — искусственный интеллект.

Вы увидите, как современный ИИ может служить спутником в повседневной борьбе за качество кода: как его можно использовать, а где он может быть опасен. Спикер покажет, как ИИ справляется с написанием тестов для наиболее распространенных фреймворков и приложений. 

Если вы не признаете TDD и пишете сначала код, а потом к нему тесты, то этот доклад для вас.


Log4j: ломай меня полностью

Григорий Кошелев

Контур

Уязвимость Log4Shell в инструменте Log4j наделала много шума. В своем докладе Григорий разберет известные уязвимости в Log4j 2 и похакает Java-сервис. Между делом он потравит байки о том, как спасались от напасти, почему уязвимость опасна не только для Java-приложений и как так вышло, что SQL-injection снова в моде.

Доклад вам пригодится, если хотите разобраться, откуда взялась эта уязвимость, как с ней бороться и как не допустить такой же уязвимости в своей библиотеке.


Что в POM тебе моем?

Андрей Когунь

Croc Code

Maven дает декларативность при объявлении конфигурации сборки, он стабильный и безотказный, поэтому широко применяется в промышленной разработке. Но при этом в его использовании есть много скрытых и неочевидных моментов.

Разработка на Java изменилась: на смену многомодульным сборкам и упаковке результатов в war или ear пришли микросервисы на спрингбуте. Но сам Maven за 10 лет практически не изменился  — добавились новые плагины, а проблемы с конфигурацией сборок никуда не ушли.

Сегодня с запуском и настройкой сборки все больше помогают IDE и DevOps-инженеры, а разработчики все дальше от контроля и понимания того, что на самом деле происходит. Например, если консоль в ответ на заветные слова mvn clean install не выдает результат BUILD SUCCESS, зачастую уже не ясно, с какой стороны подойти. А ведь с прошлой успешной сборки даже код не менялся!

Андрей проведет разбор неочевидных возможностей Maven в части: определения зависимостей, конфигурирования плагинов и работы с жизненным циклом сборки. Обсудим типовые проблемы, нюансы работы в закрытом корпоративном окружении и разработку собственных плагинов и архетипов. Все эти фазы, цели, скоупы, bom, parent, параметры, транзитивные зависимости, профили, репозитории, архетипы и прочее. 


Воркшоп: Java Flight Recorder, Mission Control, Visual VM: экспресс-курс по опенсорс-профайлерам

часть 1, часть 2

Алексей Рагозин

Deutsche Bank

Рост нагрузки, медленная работа, утечки памяти — все эти ситуации требуют применения специальных инструментов профилирования. В Java-экосистеме хватает профайлеров, которые одновременно и хорошие, и бесплатные. Но ими еще надо уметь пользоваться. Вот и поучимся: в этом воркшопе Алексей на практике покажет, как работать с популярными опенсорс-инструментами Mission Control и VisualVM.


Сложный Rate-Limiting — это просто с Bucket4j

Максим Бартков

RooX Solutions

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

К сожалению, не всегда можно разобраться на уровне инфраструктуры. Задача становится еще сложнее, когда система распределенная. Только представьте, что кластеры из десятков и сотен JVM должны корректно соблюдать общий для кластера лимит на частоту входящих запросов при входящем потоке в десятки тысяч запросов в секунду.

Один из вариантов реализации, который может помочь в решении всех этих задач — это библиотека Bucket4j. Максим поговорит о том, что умеет Bucket4j и объяснит, какие алгоритмы он использует внутри.

Если у вас есть интеграции с внешними системами или хотите разобраться в механизмах работы rate limiter — советуем вам не пропустить этот доклад.


Многопоточный конвейер в Java

Андрей Сундуков

Natera

Современные инструменты для создания многопоточного несинхронизированного кода кажутся простыми. Однако в самом подходе все еще много подводных камней.

Андрей объяснит, как бороться с неравномерной утилизацией ресурсов — как с недоутилизацией, так и с переутилизацией. Он детально разберет, как можно спрогнозировать, сколько ресурсов понадобится многопоточному приложению и сколько железа ему надо выделить. И, разумеется, покажет, как построить многопоточный конвейер.


VM/Рантайм

Thread Wars: проект Loom наносит ответный удар

Иван Углянский

Huawei

На фоне приближающегося к релизу проекта Loom в Java-мире только и разговоров, что о корутинах да о легковесной многопоточности!

Но ведь Java на этом поле далеко не первая, скорее наоборот: это один из последних современных языков, куда добавляют корутины. Так что же, мы просто получаем в точности то, что уже есть у соседей? 

Отличаются ли чем-нибудь корутины в Java от корутин в Kotlin? А от горутин в Go? Или от async/await в C#? Будут ли наши корутины лучше или хуже? И почему их так долго делают, когда в других языках все уже давно есть?

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


Непрерывное профилирование в облаке с помощью eBPF

Андрей Паньгин

Одноклассники

Артем Дроздов

Одноклассники

Леонид Талалаев

Одноклассники

Сегодня вряд ли кого удивит профилирование работающего в продакшене Java-приложения. Но вот как найти проблему с одним из тысячи хостов, если запускать профайлер уже поздно? Было бы классно увидеть профиль любого приложения на любом отрезке времени в прошлом.

Так вот. Такая «машина времени» уже есть в «Одноклассниках», в масштабах всей их облачной инфраструктуры.

Спикеры расскажут о сложностях реализации непрерывного профилирования — нельзя же просто так взять и запустить везде async-profiler. Они уделят внимание и технологии eBPF, и её роли в получившемся решении.

Разумеется, мы отдельно остановимся на инфраструктуре для сбора, хранения и отображения профилей, а также посмотрим на конечный результат глазами пользователя.


ОС «Фантом» и Java: сборка мусора

Дмитрий Завалишин

DZ SYSTEMS

Операционная система с персистентной памятью — задача амбициозная, и неудивительно, что возникает множество интересных технических вопросов. Например, о сборке мусора.

Различия между виртуальными машинами ОС «Фантом» и Java накладывают требования на механизм преобразования байт-кода Java в байт-код «Фантом». Основной список задач по этой теме: генерация и проверка конструкторов, статический вызов методов, проверка типов runtime и реализация классов, к которым обращается кодогенератор Java.

Сборка мусора в персистентной среде выглядит существенно иначе, нежели в традиционной. Как минимум по той причине, что персистентная память по размеру соответствует дисковой и находится в области терабайтных размеров. Это означает, что требуется реализация двух параллельно работающих сборщиков: быстрого, но неполного и тяжелого, но полного.

Обо всём этом расскажет сам создатель ОС «Фантом» — Дмитрий Завалишин.


OpenJDK Project CRaC (Coordinated Restore at Checkpoint): задачи и проблемы

Антон Козлов

Azul

В этом докладе освещается текущее состояние проекта OpenJDK CRaC, о котором Антон — основной разработчик проекта — рассказывал на Joker 2020.

Он расскажет о проблемах и задачах, которые затрагивают реализацию в JDK, Hotspot и взаимодействие с Linux. Свежим взглядом посмотрим на интересные примеры использования технологии, которые не просто выглядят круто, но и могут пригодится в реальной жизни, а также заглянем под капот некоторых операций стандартных классов JDK и JVM через призму проблемы быстрого рестарта.


Как поймать рекурсию за хвост

Владимир Парфиненко

Huawei

Закончим этот раздел темой из области фундаментального программирования. Речь пойдет не о прикладных фреймворках, и не о библиотеках — поговорим о преобразовании хвостовой рекурсии в цикл.

Да, в функциональных языках — это популярная оптимизация , но в Java-мире это преобразование окутано загадками.

В своем докладе Владимир поднимет тему: можно ли в Java заменить хвостовой рекурсивный вызов на цикл, зачем вообще это делать и какие виртуальные машины этим занимаются (и легально ли?). Он также покажет сторонние инструменты, которые помогают оптимизировать программы в функциональном стиле. И, конечно, уделит внимание дружественным JVM-языкам, имеющим более выраженные функциональные наклонности (Scala, Kotlin и т. д.).

Доклад рассчитан на широкую аудиторию. Он поможет начинающим инженерам углубиться в то, как на практике исполняется их код. А более опытные разработчики смогут расширить свой кругозор и вникнуть в детали реализаций.


DevOps

Не клади все яйца в один билдпак

Дмитрий Чуйко

BellSoft

Контейнеры — это полезный инструмент, но это не значит, что можно не думать о повышении их эффективности.

Есть же средства автоматической сборки контейнеров, такие как Paketo Buildpack для Spring Boot приложений. Однако при такой сборке мы получаем либо «черный ящик» с нерелевантной начинкой, либо случайные образы с устаревшей Java или неэффективными скриптами. Автоматически собранные контейнеры становятся проблемой при увеличении нагрузки и количества инстансов.

По сути, заоблачных счетов за облачные ресурсы можно избежать, если использовать оптимальные контейнеры. Для этого нужно вовлечь разработчиков в процесс оптимизации деплоймента.

Оптимизация подразумевает под собой следующее:

  • уменьшение время создания контейнера, а следовательно, и срока вывода продукта на рынок;

  • упрощение процесса создания контейнеров и разработки в целом, включая тестирование и вывод в производство;

  • соблюдение баланса между созданием и обкаткой контейнеров и оптимизацией использования ресурсов.

Помня о предыдущем докладе «Не клади все яйца в один контейнер», можно догадаться, что если мы положим случайные яйца в наш контейнер, Kubernetes не улучшит ситуацию, а просто масштабирует неоптимальные сущности. Используя K8s, важно понимать:

  • как могут проявиться проблемы, связанные с неэффективными контейнерами, при масштабировании;

  • как с с этими проблемами бороться;

  • что делают конфигурируемые скрипты и как повысить их эффективность;

  • сколько мы потеряем в производительности, если не будем предпринимать никаких действий.

Что можно сделать в сложившейся ситуации? Можно оптимизировать контейнеры с помощью встроенных инструментов, а можно собирать контейнеры самостоятельно и уже потом интегрировать в рабочий процесс K8s.

В своем докладе Дмитрий покажет, на что следует обратить внимание при последнем подходе. Кроме того, речь пойдет про технологию Native Image, так как все обозначенные выше проблемы и задачи применимы и к ней.


Готовим свой Kubernetes operator на примере Spring Cloud Gateway

Игорь Киричук

Райффайзенбанк

Когда все те, кто активно использовал Spring Cloud, взялись за k8s, часть «запчастей» вроде service registry перешла в ведение operations. Но давайте мы как джависты еще раз заглянем в инфраструктуру и поймем: есть ли там интересное для нас, можем ли мы там что-то сделать, чтобы органичнее вписывать свои приложения в инфраструктуру.

В докладе обнаружим, что писать свой k8s operator & controller можно легко и просто и на JVM-стеке. Игорь покажет, как сделать k8s operator на примере создания Spring Cloud Gateway operator, который управляет своей конфигурацией через Custom Resource Definition (CRD).

Доклад для разработчиков любого уровня, которым интересно заглянуть в инфраструктуру, а может, даже немного адаптировать ее под себя.

Стек: Kotlin, Spring Boot, Helm, k8s (kind).


Spring и базы данных

Индексы в PostgreSQL. Как понять, что создавать

Андрей Сальников

Data Egret

Любой разработчик знает, что индексы — это мощный инструмент, который может улучшить работу запросов в базе данных и, как следствие, сократить отклик приложения или сервиса на внешние запросы.

Но опыт Андрея, как ДБА, показывает, что у разработчиков нет понимания, какой, когда и из каких соображений можно создавать индекс. Спикер приведет простые и понятные примеры, которые вы сможете легко повторить на своих реальных базах данных.


Spring Data JPA. Антипаттерны тестирования

Семен Киреков

МТС Диджитал

За свою карьеру Семен столкнулся с рядом (а некоторые даже попробовал) антипаттернов тестирования при использовании Spring Data JPA. Они не только не помогают, но и усложняют поддержку кода и вызывают раздражение. 

В рамках доклада Семен расскажет вам о таких антипаттернах, как избыточный coupling на декларацию сущностей, лишние зависимости, best practices для создания тестовых данных и транзакционные сценарии. А также покажет паттерны, на которые следует их заменить, чтобы упростить жизнь при написании тестов.


Антипаттерн orisnull: коварство иллюзорной простоты

Илья Сазонов

Всегда.Да

Федор Сазонов

Сбер

Есть мнение, что фреймворки вроде Hibernate и Spring Data создают абстракцию над базой данных, которая сразу из коробки работает идеально. Но идеально не работают даже сами базы данных — даже когда между ними и приложением нет ничего кроме SQL.

Например, в случае необходимости получить данные из базы по динамическому фильтру часто пишут запросы вида: where user.name = :name or :name is null.

Из-за комбинации удобства и неочевидности сколько проблем с производительностью это удобство создает, запросы такого вида спонтанно «самозарождаются» в любом проекте и продолжают там появляться, даже когда эти запросы пару раз положили на прод.

О таких запросах и о том, как кодогенерация помогает свести ущерб от них к минимуму, и пойдет речь в докладе.


Используем @Transactional like a Pro

Никита Летов

Росбанк

Поговорим о том, как не ошибиться при использовании аннотации @Transactional в коде, как не бояться блокировок на БД и сохранить консистентность ваших данных при их динамическом обновлении.

Доклад посвящен использованию транзакций и блокировок при обработке данных БД в условиях асинхронных вызовов высоконагруженного приложения. Будет немного лайвкодинга: спикер покажет возможные ошибки и нюансы использования тех или иных технологий (стек: Java, Spring Data JPA, Kafka).

Иногда разработчики не задумываются, в какой момент транзакция нужна , а в какой нет, когда нужно открыть новую, а когда продолжить текущую. Какие блокировки на БД будут происходить во время выполнения транзакции и как не перегрузить БД очередью из row lock, где использовать таймауты запросов. И как обойтись без блокировки на БД.

Целевая аудитория: рядовые бэкенд-разработчики, так как большинство сервисов в той или иной мере работает с динамически обновляемыми данными.


Почему мы решили переходить на R2DBC и чем это закончилось

Антон Котов

Сбер

Если Spring WebFlux, то Spring Data R2DBC. Часто выбор совсем нового способа реактивного взаимодействия с реляционными базами данных строится именно по такой логике. Что мы покупаем и чем платим? Какие трудности ждать, если годами писали на JDBC, а теперь грядет переезд в новую реактивную реальность? Когда это оправдано? Обо всем этом Антон расскажет в своем докладе.


Архитектура

BPM(N,S, engine) — нужны или нет?

Денис Котов

Тинькофф

Перечисленные термины частенько витают вокруг мира Enterprise-разработки. Кому-то посчастливилось с ними столкнуться и сэкономить сотни часов времени, а кто-то получил только боль и гигантский техдолг. 

В докладе спикер расставит все точки над i в тематике автоматизации бизнес-процессов с использованием BPM(N,S,engine) на примере Тинькофф, расскажет о хороших и плохих практиках и покажет, как можно ускорить автоматизацию бизнес-процессов прямо сейчас.


Воркшоп: создание онлайн-маркетплейса на платформе Micronaut, Kotlin, Java 11+

часть 1, часть 2

Иван Кочергин

МТС

Игорь Тресоумов

МТС

Спикеры покажут на практике, как построить эффективное с точки зрения многопоточности приложение, которое будет получать у партнеров предложения и показывать их клиенту. Рассмотрим, как применять корутины в полевых условиях, а не просто в теории. 

Взаимодействие с партнерами происходит по протоколам REST и SOAP.

Используемые технологии:

  • Micronaut

  • Kotlin Coroutines

  • Java 11+

  • WebSocket/JSON-Streaming

Целевая аудитория: Java/Kotlin-разработчики уровня Middle и выше.


Vostok Hercules: 3 года доставляем телеметрию — полёт нормальный

Григорий Кошелев

Контур

Поговорим про преимущества и недостатки event-driven архитектуры на примере высоконагруженной системы обработки и доставки данных телеметрии Vostok Hercules  с Apache Kafka в её основе.


Apache Arrow. В погоне за скоростью

Игорь Селиверстов

Querify Labs

На JPoint и раньше много говорили о производительности, но о концепции Zero-copy речь особо не заходила. Исправим этот пробел.

Apache Arrow — это векторный формат данных, а также набор инструментов для хранения, обработки и передачи данных в векторном формате. Arrow реализует концепции Zero-Copy и No Marshalling (исключает копирование при обработке данных: по сети данные передаются как есть, без сериализации). Два этих фактора значительно увеличивают производительность приложений, чем обеспечили популярность формата в системах обработки данных. 

Спикер рассмотрит следующие вопросы:

  • Как Arrow помогает в работе с данными.

  • Что стоит за Zero-Copy и No Marshalling.

  • На что идут разработчики ради бескомпромиссной производительности.


Kotlin

Kotlinx.serialization: готовим свою собственную библиотеку для сериализации

Андрей Кулешов

Huawei

Автор расскажет о kotlinx.serialization: как работать с этой библиотекой непосредственному пользователю и создателям сериализаторов, которые будут основываться на этом фреймворке.

Основываясь на своем опыте разработки мультиплатформенной библиотеки KToml для сериализации формата TOML, Андрей расскажет о подводных камнях написания собственной опенсорс-библиотеки для сериализации и десериализации на Kotlin. Речь пойдет об особенностях использования библиотек из kotlinx.serialization в коде, о том, как устроена эта библиотека и как лучше организовать архитектуру своего сериализатора.

Доклад будет интересен Kotlin-программистам разных уровней, как пользователям сериализаторов, так и тем, кого можно заинтересовать созданием своего собственного сериализатора.


Два года жизни одной библиотеки глубокого обучения на Kotlin: от прототипа к четвертому релизу

Алексей Зиновьев

AproximaLabs

Вас ждет черно-белая история о том, как Алексей намазал Kotlin поверх вычислительного ядра TensorFlow и что из этого вышло. А ведь еще несколько лет назад он был молод, не имел седых волос в бороде и хотел не так много: всего лишь тренировать и дообучать нейросети на JVM-языке со скоростью TensorFlow или PyTorch. Ну и конечно, чтобы весь MLOps был из коробки, не писать же свой! 

Не успел он моргнуть, как стремительно пролетели два года работы над библиотекой Deep Learning для Kotlin в составе команды JetBrains (Kotlin for Data Science) и был пройден тернистый путь от MVP размером в 1 класс и 3 метода до многомодульного проекта с сотнями классов, тестов, десятками туториалов, статей и несколькими тысячами пользователей. KotlinDL стал проектом, в который контрибьютит 30 человек со всего земного шара: из Польши, Китая, Ирана, Индии, Германии, Канады и России. Проектом, на основе которого пользователи создают мультиплатформенные библиотеки и игровые движки с элементами AI, да и просто балуются с детекцией объектов со своих видеокамер. 

Этот доклад не про Deep Learning, как таковой, а про непростой путь взращивания JVM-библиотеки для Data Science экосистемы с нуля и о преодолении трудностей на стыках с мирами: нативным и змеиным, где не ступала нога типов и промышленных Ява Бобов. Мы будем говорить и том, как ставить задачи тем, кому ты не платишь, и о том, как парсить веса моделей. О том, как правильно использовать ресурсы компании, в которой ты работаешь, для развития OSS-проекта и о разнице между JNI и JavaCPP, а также о поиске истины в недрах Github Issues титанов, на чьих плечах это все и стоит.

Если считать это «смузи-докладом для начинающих», то это смузи с пенкой из стали.


Разбор доклада

Разбор доклада Ted Neward «Iconoclasm»

часть 1, часть 2

Владимир Ситников

Алексей Стукалов

HAULMONT

Напоследок — необычный формат: разбор классического доклада. Исходное выступление Тед Ньюард сделал на Joker ещё в 2015-м, но и в 2022-м оно позволяет обо многом задуматься — и теперь Владимир и

Иконоборцы меняют наш мир. От Брэнча Рики, изменившего бейсбол, до Стива Джобса c его подходом к дизайну. Сколько таких людей среди разработчиков? Какие качества определяют истинного иконоборца? Что мы можем перенять от них, чтобы изменить к лучшему себя и ближайшее окружение? На эти вопросы Ted Neward ответил в докладе «Iconoclasm» на Joker 2015.

На JPoint 2022 этот доклад во всех подробностях разберут Владимир Ситников и Алексей Стукалов.


Напоминаем: доклады — это интересно, но это ещё не всё. В этот раз на JPoint будут не только они (в основном на онлайн-части 13-15 июня), но и много живого общения на офлайн-дне (24 июня в Петербурге).

Расписание, подробности, билеты — всё на сайте.

Будем рады видеть и в онлайне, и в Петербурге!


ссылка на оригинал статьи https://habr.com/ru/company/jugru/blog/669070/