Зачем нужно уменьшать Java-контейнеры

Преимущества маленьких Java-контейнеров с Axiom Runtime Container Pro


Август 10, 2023


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

Помимо среды исполнения Axiom JDK Pro команда Axiom JDK разрабатывает ряд других полезных инструментов, среди которых — Axiom Runtime Container Pro, комплексное решение по созданию легковесных Docker-образов для Java-приложений.

Базовый образ Axiom Runtime Container Pro с Linux и JRE весит около 40 или 47 Мб в зависимости от реализации библиотеки Си. Но какие конкретные преимущества дают маленькие образы?

В этой статье мы расскажем, в чем польза маленьких контейнеров для Java, и как Axiom Runtime Container Pro помогает ИТ-командам закрывать текущие задачи по импортозамещению и оптимизации расходов.

Преимущества маленьких Java-контейнеров

Снижение ИТ-затрат

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

Для разработчиков «возвращение на землю» будет означать многократное увеличение привычной рабочей нагрузки: там, где ИТ-команды полностью полагались на автоматизированные облачные решения, придется переписывать код с нуля. При этом возрастут расходы, связанные с эксплуатацией серверного оборудования.

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

Ускорение процесса разработки

Рутинный процесс разработки подразумевает частое перемещение контейнеров между средами разработки, тестирования и продакшна. Микроконтейнеры позволяют уменьшить время выполнения docker push/pull с 30 до пары секунд, что экономит время и нервы разработчиков.

Уменьшение размера кеша на диске

Если разработчики не чистят регулярно кеш на дисках, велика вероятность того, что Docker-образы занимают значительный объем памяти компьютера. Чтобы убедиться в этом, запустите команду

docker system df

В колонке Reclaimable содержится информация о памяти, которая занята образами, не используемыми в данный момент ни в одном запущенном контейнере. Объем занятой памяти может достигать нескольких сотен гигабайт!

К счастью, очистить память, ничего не нарушив, можно с помощью команды docker system prune, удаляющей с компьютера все неиспользуемые образы. Но если среди них были те, которые могут пригодиться вам в дальнейшем, придется подгружать их снова. Вот тут-то и пригодятся микроконтейнеры: загружать большие образы долго и психологически неприятно, а с микроконтейнерами и кеш меньше, и заполнять его проще.

Снижение рисков безопасности

Уязвимости ПО являются одним из наиболее серьезных факторов риска информационной безопасности. Контейнеры, содержащие среду исполнения Java и Linux с большим количеством установленных по умолчанию пакетов потенциально может содержать много уязвимостей. Для минимизации этого риска некоторые разработчики предпочитают использовать distroless образы, содержащие только приложение с необходимыми зависимостями и сильно урезанный Linux. Однако такие образы не всегда могут сослужить хорошую службу:

  • Distroless хоть и позиционируются как не содержащие ОС, все равно включают Linux дистрибутив, а значит, проблема уязвимостей остается;
  • Самые маленькие distroless образы, весящие около 2,5 Мб, подходят только для приложений со статической линковкой (написанных на C/C++). Для Java приложений требуются дополнительные компоненты и среда исполнения. В итоге получается обычный контейнер около 200 Мб, и все преимущества distroless нивелируются;
  • Из-за отсутствия shell и менеджера пакетов образы distroless с трудом поддаются отладке, мониторингу и конфигурации. Разработчикам придется тратить много времени, чтобы настроить контейнер под свой проект или разобраться с проблемами, если что-то пойдет не так.

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

Axiom Runtime Container Pro

Мы рассмотрели общую пользу легковесных Docker-образов, но какие дополнительные преимущества дает Axiom Runtime Container Pro отечественным разработчикам?

Только российское ПО

Axiom Runtime Container Pro входит в Реестр российского ПО, а значит, подходит для интеграции с отечественными ИТ-проектами, включая объекты критической информационной инфраструктуры (КИИ). Решение включает в себя:

  • Доверенную среду исполнения Java Axiom JDK Pro Lite, оптимизированную для облачных инстансов. Версия Lite отличается от стандартной JDK лучшей компрессией модулей, что уменьшает потребление памяти рантаймом. Кроме того, Axiom JDK Pro Lite включает ряд бэкпортов из новых версий Java для дополнительного улучшения производительности;
  • Axiom Linux, легковесный Линукс, поддерживающий две имплементации libc: glibc и оптимизированную musl с производительностью, равной или превышающей производительность glibc. Базовый образ весит всего 3,28 или 8,67 МБ (с musl и glibc соответственно; данные актуальны на момент написания статьи). Более подробно о нашем дистрибутиве Linux мы расскажем в одной из следующих статей;
  • Инструментарий Нативных Образов Axiom NIK, преобразующий Java-приложения в нативные образы с почти мгновенным запуском;
  • Техподдержку напрямую от инженеров Axiom JDK.

Удобная миграция

Axiom JDK Pro Lite на 100% совместим с OpenJDK и стандартным рантаймом, а поддержка двух libc в Axiom Linux позволяет избежать проблем с совместимостью, если до этого в корпоративной разработке использоваться дистрибутив на glibc.

В простых случаях переход на Axiom Runtime Container Pro не потребует дополнительной конфигурации или изменений кода: разработчики могут просто переложить свое приложение из старого контейнера в новый и продолжать работу в обычном режиме. В случаях, когда разработка заточена под особенности базового образа, некоторые изменения могут потребоваться. Например, дистрибутивы Linux используют разные менеджеры пакетов (APT, YUM, APK и т.д.), соответственно, пакеты для них имеют разные названия и расширения и находятся в разных репозиториях. Кроме того, в Axiom Linux меньше предустановленных пакетов, чем в других дистрибутивах, поэтому нужно будет добавить дополнительные пакеты из репозитория, если они используются в вашем проекте.

Повышенная безопасность

Все продукты семейства Axiom JDK разрабатываются в соответствии с концепцией SDL (безопасного цикла разработки) и проходят жесткий контроль качества перед каждым релизом. Инженеры выпускают ежеквартальные патчи для среды исполнения и инструментария нативных образов в соответствии с расписанием OpenJDK, а также регулярные обновления Axiom Linux. Все это позволяет поддерживать безопасность контейнеризованных Java-приложений на высоком уровне.

Кроме того, клиенты получают экстренные патчи и фиксы, а также доступ к доверенному репозиторию, содержащему более 4 Гб кода проверенных на предмет вредоносного кода Java-библиотек.

Заключение

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

Axiom Runtime Container Pro позволяет разработчикам воспользоваться всеми преимуществами микроконтейнеров для Java.

Свяжитесь с нами, чтобы узнать больше об этом или других продуктах семейства Axiom JDK – наши инженеры проконсультируют вас по всем вопросам, предоставят демо-версии и помогут с миграцией.

Author image

Олег Чирухин

Директор по коммуникациям с разработчиками (DevRel)

Команда Axiom JDK roman.karpov@axiomjdk.ru Команда Axiom JDK logo Axiom Committed to Freedom 199 Obvodnogo Kanala Emb. 190020 St. Petersburg RU +7 812-336-35-67 Команда Axiom JDK 199 Obvodnogo Kanala Emb. 190020 St. Petersburg RU +7 812-336-35-67