Pull to refresh
132
0
Send message

Миллиарды сообщений в минуту по протоколу TCP/IP

Level of difficulty Easy
Reading time 16 min
Views 15K

Одной из наиболее важных проблем при создании распределенных приложений является вопрос представления данных. Мы должны убедиться, что данные, отправленные компонентом «удаленному» компоненту (т. е. компоненту, который является частью другого процесса), будут получены правильно с теми же значениями. 

Это может показаться простым, но помните, что взаимодействующие компоненты могут быть написаны на совершенно разных языках. Ситуация усложняется еще больше, если учесть, что разные аппаратные/системные архитектуры, скорее всего, имеют различные способы представления «одинаковых» значений. Простого копирования байтов из одного компонента в другой недостаточно. Даже в Java, где мы можем считать себя «защищенными» от такого рода ситуаций, нет требования, чтобы две разные реализации JVM или разные версии от одного производителя использовали одно и то же внутреннее представление для объектов.

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

Существует несколько таких «форматов передачи», начиная от текстовых стандартов, таких как YAML, JSON или XML, до бинарных вариантов, таких как Protobuf, которые включают метаданные или являются полностью неструктурированными.

В компании Chronicle Software разработан ряд библиотек для поддержки создания приложений, оптимизированных для обмена сообщениями с низкой задержкой, в основном в сфере финансовых услуг. 

Читать далее
Total votes 7: ↑5 and ↓2 +3
Comments 4

Продвинутый GraphQL со Spring Boot

Level of difficulty Easy
Reading time 13 min
Views 6.5K

В этой статье вы узнаете, как использовать Spring for GraphQL в своем приложении Spring Boot. 

Spring for GraphQL — относительно новый проект. Версия 1.0 была выпущена несколько месяцев назад. До этого релиза нам приходилось подключать сторонние библиотеки, чтобы упростить реализацию GraphQL в приложении Spring Boot. Я уже описал два альтернативных решения в своих предыдущих статьях. В следующей статье вы узнаете о проекте GraphQL Java Kickstart. В другой статье вы увидите, как создавать более сложные запросы GraphQL с помощью библиотеки Netflix DGS.

Мы будем использовать очень похожую схему и модель сущностей, как и в этих двух статьях о Spring Boot и GraphQL.

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

Читать далее
Total votes 4: ↑4 and ↓0 +4
Comments 2

Как создавать SBOM в Java с помощью Maven и Gradle

Level of difficulty Easy
Reading time 9 min
Views 5.9K

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

Эти вложенные (транзитивные) зависимости создают проблему, заключающуюся в том, что вы как разработчик, вероятно, не знаете всех библиотек, которые на самом деле используете.

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

Но что, если вы передаете свое Java-приложение клиенту?

Как они узнают, какие зависимости включены?

Что еще важнее, как они могут проверить, не уязвимы ли эти зависимости для проблем безопасности?

Ответом является спецификация программного обеспечения SBOM (software bill of materials).

Читать далее
Total votes 2: ↑2 and ↓0 +2
Comments 1

Сопоставление с шаблоном в Java — 5 примеров для занятых разработчиков

Level of difficulty Easy
Reading time 9 min
Views 4.9K

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

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

Давайте начнем!
Total votes 9: ↑7 and ↓2 +5
Comments 2

Использование PostgreSQL Pager с MariaDB Xpand

Level of difficulty Easy
Reading time 4 min
Views 791

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

Я не являюсь противником GUI. На самом деле, я написал три книги о разработке графического веб-интерфейса с помощью Java. Однако мне также нравится интерфейс командной строки (CLI), особенно текстовые пользовательские интерфейсы. 

После года изучения MariaDB и мира DevOps я открыл для себя и поэкспериментировал со многими текстовыми инструментами CLI, о существовании которых я даже не подозревал. Эти инструменты особенно полезны при подключении к удаленным серверам без графического интерфейса.

Одним из специальных инструментов CLI, который я часто использую, является SQL-клиентmariadb (или mysq в мире MySQL) — программа CLI, используемая для подключения к базам данных, совместимым с MariaDB. С ее помощью вы можете отправлять SQL-запросы и другие команды на сервер базы данных.

Читать далее
Total votes 4: ↑4 and ↓0 +4
Comments 0

Выражение Hibernate запросов в виде типо‑безопасных Java-потоков

Level of difficulty Easy
Reading time 5 min
Views 4.6K

В этой статье вы узнаете, как расширение JPAstreamer Quarkus упрощает выполнение типо‑безопасных запросов Hibernate без излишней многословности и сложности.

Читать далее
Total votes 1: ↑1 and ↓0 +1
Comments 2

Как запустить Java-приложение с помощью CRaC в контейнере Docker

Reading time 4 min
Views 4.1K

CRaC (Coordinated Restore at Checkpoint) — это проект OpenJDK, разработанный Azul для решения проблемы «медленного» запуска виртуальной машины Java в микросервисной среде.

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

В механизме восстановления контрольной точки (checkpoint-restore) нет ничего нового, и большинство из вас уже знают и используют его ежедневно. 

Если вы работаете на ноутбуке и закрываете крышку, операционная система обнаруживает это и сохраняет текущее состояние на диск. Как только вы снова открываете крышку, операционная система восстанавливает сохраненное состояние с диска.
CRaC предоставляет тот же механизм, но для JVM и вашего запущенного приложения.

Вы запускаете свое приложение, применяете к нему некоторую рабочую нагрузку (чтобы убедиться, что важные части вашего кода будут затронуты и оптимизированы JVM), а затем создаете контрольную точку. Это приведет к закрытию всех открытых ресурсов, таких как открытые файлы и сокетные соединения, а затем сохранит состояние JVM, включая ваше приложение, на диск.

После этого вы сможете восстанавливать состояние JVM, включая состояние вашего приложения, из этой сохраненной контрольной точки так часто, как вам захочется.

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

Читать далее
Total votes 9: ↑8 and ↓1 +7
Comments 0

Разрушение PostgreSQL БД некорректными ограничениями целостности типа CHECK

Level of difficulty Easy
Reading time 7 min
Views 3.5K

Я в ударе! После того, как я написал о разрушении вашей базы данных и обертывании идентификатора транзакции, здесь я пишу о повреждениях, вызванных CHECK ограничениями! 

Поверьте мне, я не хочу разрушать базы данных PostgreSQL. Просто это сообщение в Твиттере привлекло мое внимание и вызвало воспоминания о других сообщениях о CHECK ограничениях, вызвавших проблемы.

Читать далее
Total votes 7: ↑7 and ↓0 +7
Comments 1

JDK 20 и JDK 21: что мы знаем на сегодняшний день

Level of difficulty Easy
Reading time 8 min
Views 12K

JDK 20, третий не-LTS-релиз после JDK 17, достиг начальной фазы релиз-кандидата, как заявил Марк Рейнхольд, главный архитектор Java Platform Group в Oracle. Основной репозиторий исходного кода, форкнутый в стабилизационный репозиторий JDK в середине декабря 2022 г. (Rampdown Phase One), определяет набор функций для JDK 20. Критические ошибки, такие как регрессии или серьезные функциональные проблемы, могут быть устранены, но должны быть одобрены в процессе Fix-Request. Согласно графику выпуска, JDK 20 будет официально выпущен 21 марта 2023 года. Стоит отметить, что JEP 438 был добавлен в набор функций в начале марта 2023 года.

В сентябре 2023 года планируется выпустить общедоступный и следующий выпуск LTS В настоящее время в качестве целевых для JDK 21 предлагается два (2) JEP.

Также можно предположить, какие дополнительные JEP могут быть включены в JDK 21, основываясь на ряде проектов и кандидатов JEP.

Читать далее
Total votes 12: ↑11 and ↓1 +10
Comments 1

SourceBuddy динамически компилирует исходный код Java

Reading time 3 min
Views 2.9K

Через два месяца после первого коммита в октябре 2022 года Питер Верхас, старший архитектор EPAM Systems, выпустил версию 2.0.0 SourceBuddy, новой утилиты, которая компилирует динамически исходный код Java, заданный в строке или файле, в файл класса. 

Утилит SourceBuddy требует Java 17 и представляет собой упрощенный фасад для компилятора javac, который обеспечивает ту же функциональность.

Версия 2.0.0 поддерживает комбинацию скрытых и нескрытых классов во время компиляции и выполнения. Кроме того, был упрощен API, включая критические изменения, такие как изменение метода loadHidden() на метод hidden(), поэтому и выпущен новый основной релиз. Полный обзор изменений для каждой версии доступен в документации по выпускам на GitHub.

Читать далее
Total votes 4: ↑2 and ↓2 0
Comments 13

Визуализация архитектуры модели PyTorch

Level of difficulty Easy
Reading time 5 min
Views 5.4K

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

В этом посте вы узнаете:

Как сохранить модель PyTorch в формате обмена

Как использовать Netron для создания графического представления.

Читать далее
Total votes 6: ↑6 and ↓0 +6
Comments 6

Первая информация о JDK 21: что принесет следующий LTS релиз?

Reading time 3 min
Views 5.9K

Поскольку мы все с нетерпением ждем скорого выпуска JDK 20, список функций, которые появятся в JDK 21 этой осенью, также постепенно проясняется.

Сегодня мы рассмотрим тему того, что принесет следующий LTS релиз JDK 21.

Читать далее
Total votes 9: ↑9 and ↓0 +9
Comments 6

Полезные и неизвестные библиотеки Java

Level of difficulty Easy
Reading time 14 min
Views 9.5K

Из этой статьи вы узнаете о некоторых не очень известных, но полезных библиотеках Java. Это вторая статья из серии «Полезное и неизвестное». Предыдущая описывала несколько привлекательных, но малоизвестных возможностей Java. Подробнее об этом можно прочитать здесь.

Сегодня мы сосредоточимся на библиотеках Java. Обычно мы используем в своих проектах несколько внешних библиотек — даже если не включаем их напрямую. Например, Spring Boot поставляется с определенным набором зависимостей, включенным стартерами. Если мы включаем, например, spring-boot-starter-test, то одновременно мы включаем такие библиотеки, как mockito, junit-jupiter или hamcrest. Конечно, это известные библиотеки для сообщества.

На самом деле существует множество различных Java‑библиотек. Обычно мне не нужно использовать многие из них (или даже они мне не нужны) при работе с такими фреймворками, как Spring Boot или Quarkus.

Однако есть несколько очень интересных библиотек, которые могут пригодиться везде. Возможно, вы не слышали ни об одной из них. Я собираюсь представить 5 моих любимых «полезных и неизвестных» Java‑библиотек. Давай начнем!

Читать далее
Total votes 12: ↑9 and ↓3 +6
Comments 4

Лучшие практики для Java-приложений в Kubernetes

Level of difficulty Medium
Reading time 14 min
Views 11K

В этой статье вы прочитаете о лучших практиках запуска Java-приложений в Kubernetes. Большинство из этих рекомендаций будут справедливы и для других языков. 

Однако я рассматриваю все правила в рамках характеристик Java, а также показываю решения и инструменты, доступные для приложений на базе JVM. 

Некоторые из этих рекомендаций по Kubernetes навязаны дизайном при использовании самых популярных Java-фреймворков, таких, как Spring Boot или Quarkus. Я покажу вам, как эффективно использовать их для упрощения жизни разработчиков.

Читать далее
Total votes 12: ↑10 and ↓2 +8
Comments 0

Руководство по возможностям языка Java версий 8-19

Level of difficulty Easy
Reading time 18 min
Views 32K

Вы можете использовать это руководство для получения практической информации о том, как найти и установить последнюю версию Java, понять различия между дистрибутивами Java (Adoptium, AdoptOpenJdk, OpenJDK, OracleJDK и т. д.), а также получить обзор функций языка Java, включая версии 8–19.

Читать далее
Total votes 39: ↑37 and ↓2 +35
Comments 10

Testcontainers с Kotlin и Spring Data R2DBC

Reading time 11 min
Views 3.4K

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

В приведенном примере я буду использовать простое приложение, работающее с рецензиями некоторых курсов. 

По сути, приложение представляет собой сервис, который предоставляет несколько конечных точек GraphQL для создания, запроса и удаления рецензий из базы данных PostgreSQL через Spring Data R2DBC. Приложение написано на Kotlin с использованием Spring Boot 2.7.3. 

Я решил написать эту статью специально для Spring Data R2DBC, поскольку в случае Spring Data JPA интеграционное тестирование с testcontainers не вызывает затруднений. Тем не менее, когда дело доходит до R2DBC, возникают некоторые проблемы, которые необходимо решить.

Читать далее
Total votes 2: ↑2 and ↓0 +2
Comments 2

Использование SEDA со Spring Integration и Apache Camel

Reading time 13 min
Views 3.2K

SEDA, или Staged Event-Driven Architecture, представляет собой архитектурный стиль, предложенный Мэттом Уэлшем в его докторской диссертации. диссертация. Его основными преимуществами являются масштабируемость, поддержка высококонкурентного трафика и удобство эксплуатации.

В этом туториале мы будем использовать SEDA для подсчета уникальных слов в предложении с помощью двух разных реализаций: Spring Integration и Apache Camel.

Читать далее
Total votes 7: ↑7 and ↓0 +7
Comments 0

Java 20: огромные разреженные сегменты памяти

Reading time 4 min
Views 3.9K

Знаете ли вы, что можно выделять сегменты памяти, которые больше, чем физический размер оперативной памяти вашего компьютера, и даже больше, чем размер всей вашей файловой системы? Прочтите эту статью и узнайте, как использовать сопоставленные (mapped) сегменты памяти, которые могут быть или не быть «разреженными», и как выделить 64 терабайта разреженных данных на ноутбуке.

Читать далее
Total votes 6: ↑6 and ↓0 +6
Comments 2

Управление зависимостями в IntelliJ IDEA

Reading time 5 min
Views 12K

В этом руководстве, в продолжение темы просмотра зависимостей, мы рассмотрим управление зависимостями в IntelliJ IDEA.

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

Читать далее
Total votes 6: ↑6 and ↓0 +6
Comments 6

Spring Modulith: достигли ли мы зрелости модульности

Reading time 6 min
Views 5.4K

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

Однако минусы микросервисов настолько огромны, что это все равно, что отрубить себе правую руку, чтобы научиться писать левой; есть более управляемые (и менее болезненные!) способы достижения того же результата.

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

Многие выбирают микросервисы, потому что приложение, над которым они работают, напоминает блюдо со спагетти. Если бы их приложение было лучше спроектировано, притяжение микросервисов не было бы таким сильным.

Читать далее
Total votes 4: ↑4 and ↓0 +4
Comments 13

Information

Rating
Does not participate
Registered
Activity