Рубрики
Без рубрики

Ява 16 EA Alpine и JLink против Graal

Мой первый пост… ура! Как говорится: хорошие вещи приходят в маленьких упаковках. Для изображения контейнера… С тегами java, linux, docker, производительность.

Мой первый пост… ура!

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

С Java 16 мы теперь можем использовать Jlink с изображениями Alpine, чтобы получить все GCS следующего поколения (a-la ZGC и Шенандоа).

Я подумал, что было бы полезно сравнить и сопоставить их с простым сервисом отдыха. Для этого я использую io.helidon.archetypes: helidon-quickstart-mp:2.2.0 архетип в качестве основы с некоторыми настройками в файле Dockerfile s.

ℹ️ Это реализация микропрофиля, так что это означает полнофункциональный CDI, JAX-RS, который IMHO обеспечивает хороший компромисс между стандартами, производительностью разработчиков и масштабируемостью.

В файлах требовались некоторые изменения.

Для Докер-файла :

-FROM openjdk:11-jre-slim
+FROM openjdk:16-jdk-alpine

Для Докерфайла.jlink :

-FROM maven:3.6.3-jdk-11-slim as build
+FROM openjdk:16-jdk-alpine as build
+RUN apk add --no-cache bash maven

-FROM debian:stretch-slim
+FROM alpine:3.13.0
+RUN apk add --no-cache bash

ℹ️ Мы должны добавить bash к изображению Alpine Link, которое добавляет 2 МБ, так как Helidon использует небольшой скрипт для запуска. В идеале, если бы я занимался этим, я бы стремился устранить эту зависимость.

Итак, как выглядят размеры изображений с использованием изображения Slim JDK в качестве элемента управления:

220 МБ JDK 11 Тонкий (Debian) 100%
338 МБ Альпийский 154%
127 МБ Альпийский JLink 58%
94 МБ Собственное изображение Грааля 43%

Как и ожидалось, Graal на основе царапины изображение очень маленькое, за ним следует Alpine JLink, тонкий и, наконец, Alpine сзади. Теперь время запуска:

4,493 мс JDK 11 Тонкий (Debian) 100%
3,310 мс Альпийский 74%
1,844 мс Альпийский JLink 41%
80 мс Собственное изображение Грааля 2%

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

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

Как у JLink ( gRPC#3522 ), так и у Grohl есть некоторые проблемы; Я особенно обеспокоен серийным GC в Граале, поэтому скоро подвергну это некоторому стрессу, чтобы посмотреть, подтвердит ли это мои подозрения. Я также буду хорош, когда появятся некоторые изображения Java 16 JRE Alpine, так как JDK слишком раздут.

Жюри не знает, является ли Graal или Jlink моим предпочтительным подходом, пока я не смогу загрузить их и посмотреть, как они ведут себя в Kubernetes, но все выглядит хорошо.

Оригинал: “https://dev.to/dansiviter/java-16-ea-alpine-jlink-vs-graal-243d”