Статьи

Java: выпуск Speedment 3.2 — теперь включены легковесные микросервисы баз данных

Некоторые традиционные ORM не полностью соблюдают инкапсуляцию модулей Java (JPMS). Это часто означает, что при развертывании микросервисов используется много ненужных файлов и классов. Последний основной выпуск 3.2 с открытым исходным кодом
Ускорение решает эту проблему путем введения поддержки модульной системы, позволяющей эффективно развертывать облачные приложения и обеспечивающей более строгий API.

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

Поддержка Java Platform Module System (JPMS)

Самая большая особенность Speedment 3.2 — это, несомненно, встроенная поддержка JPMS. Каждый модуль в Speedment теперь содержит свой
Файл module-info.java и module-info.java строгую инкапсуляцию.

Как разработчик, совершенно необязательно использовать модульную систему, и благодаря многократным JAR-файлам Speedment все еще можно запускать под Java 8. Вы можете перейти на JPMS сейчас, позже или никогда.

Другие ORM, такие как Hibernate, могут поддерживать части JPMS, но не соблюдают строгую инкапсуляцию (например, требуют
--add-opens для добавления вручную, что позволяет обойти защиту от доступа к внутренним / защищенным классам).

Дополнительные модули позволяют использовать меньшие микросервисы

Модули Speedment были внутренне реструктурированы для уменьшения межмодульной связи. В результате некоторые из модулей теперь являются дополнительными, что позволяет развертывать даже более мелкие микросервисы. Например, различные разъемы базы данных теперь выбираются индивидуально, а
JoinComponent также не является обязательным.

Уменьшение размера

Потребность в нескольких внутренних модулях (таких как «ленивый» и «изменяемый поток») была устранена, а некоторые другие были оптимизированы и уменьшены в размере.

Сильная Инкапсуляция

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

Пример облачного развертывания

Можно создать пользовательские библиотеки JRE + для приложения + ускорения, которые в 10 раз меньше и используют на 25% меньше памяти по сравнению с запуском приложения под стандартным JDK. Если у вас в облаке работает большое количество микросервисов, это создает огромную разницу.

Следующий пример более подробно описан в моей статье «
Java: как создать легковесные микросервисы баз данных ». Приложение базы данных подключается к общедоступному облачному экземпляру MySQL базы данных «Сакила» с фильмами, актерами и т. Д. Оно извлекает десять самых длинных фильмов и печатает их на консоли в порядке длины.

В пользовательском JRE все еще есть все наработки настоящего JVM, такие как сборщик мусора, JIT-компилятор и т. Д. Это только неиспользуемые модули и инструменты, которые были удалены.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
final Speedment app = new SakilaApplicationBuilder()
    .withPassword("sakila")
    .build();
 
final FilmManager films = app.getOrThrow(FilmManager.class);
 
System.out.println("These are the ten longest films rated as PG-13:");
 
films.stream()
    .filter(Film.RATING.equal("PG-13"))
    .sorted(Film.LENGTH.reversed())
    .limit(10)
    .map(film -> String.format(
        "%-18s %d min",
        film.getTitle(),
        film.getLength().orElse(0))
    )
 
    .forEach(System.out::println);

Приложение выдаст следующий вывод:

01
02
03
04
05
06
07
08
09
10
11
12
These are the ten longest films rated as PG-13:
 
GANGS PRIDE        185 min
CHICAGO NORTH      185 min
POND SEATTLE       185 min
THEORY MERMAID     184 min
CONSPIRACY SPIRIT  184 min
FRONTIER CABIN     183 min
REDS POCUS         182 min
HOTEL HAPPINESS    181 min
JACKET FRISCO      181 min
MIXED DOORS        180 min

Оказывается, требование к памяти для стандартного открытого JDK 11 составляет 300 МБ по сравнению с пользовательским JRE, который занимает только 30 МБ (даже включая приложение и среду выполнения Speedment). Таким образом, можно снизить требования к хранению примерно на 90%. При изучении использования кучи с
jmap , был сделан вывод, что использование оперативной памяти также сократилось примерно на 25%.

Как получить скорость 3.2

Новые пользователи могут загрузить Speedment 3.2 с помощью
Инициализатор .

Существующие пользователи могут просто обновить версию ускорения в своих
файл pom.xml и заново сгенерируйте модель домена, pom.xml следующую команду:

1
mvn speedment:generate

Вот и все. Теперь ваше старое приложение Speedment будет работать под новой версией.

Если вы хотите использовать систему модулей, добавьте следующее
Файл module-info.java каталог вашего приложения Java 8+:

1
2
3
4
module your.module.name {
    requires com.speedment.runtime.application;
    requires com.speedment.runtime.connector.mysql; // (*)
}

(*) В зависимости от типа базы данных, вы должны заменить модуль MySQL соответствующим модулем для вашей базы данных. Прочитайте все о различных модулях соединителя базы данных
здесь

Ресурсы

Основы о модулях JPMS

Полная история заметок о выпуске Speedment может быть найдена здесь

Ускорение на GitHub

Speedment Initializer, способный генерировать шаблоны проектов

См. Оригинальную статью здесь: Java: выпуск Speedment 3.2 — теперь включены облегченные микросервисы баз данных

Мнения, высказанные участниками Java Code Geeks, являются их собственными.