Pull to refresh
176.1
JUG Ru Group
Конференции для Senior-разработчиков

Azul Zulu — JVM для облака или просто порт OpenJDK на Windows?

Reading time 7 min
Views 19K
На конференции JavaOne 2013, которая недавно завершилась в Сан-Франциско, компании Microsoft Open Technologies и Azul Systems анонсировали Zulu — порт OpenJDK для облачной платформы Windows Azure. Учитывая, что три месяца назад Oracle и Microsoft объявили о партнёрстве в области облачных технологий, многие ожидали, что именно Oracle выпустит JVM для облачной платформы от Microsoft. Однако такую JVM выпустила Azul Systems, многолетний лицензиат Java SE, известный своими высокопроизводительными решениями для серваков с большими хипами.

В первой части статьи мы попробуем разобраться, кто такой этот Zulu и что нам от него ожидать. Это только начало пути или уже готовое решение? Во второй части мы перейдём к распаковке Zulu Technology Preview и, в качестве побочного эффекта, посмотрим, чем же Oracle так нашпиговала свою JDK, что та весит в полтора раза больше Zulu.





Java: Oracle и IBM? Azul и Microsoft!


Интересные времена наступают. Точнее, уже наступили. В последние полгода Azul и Microsoft как-то сильно активизировались в плане Java, причём именно в России. Посудите сами:


Кто такие Azul


Вообще Azul Systems известна своими высокопроизводительными Java-решениями. Начали они с того, что сделали свою Java на… железе. Ну точнее, оно линуксовое, просто все вычисления выполняются на отдельной плате (на ум сразу приходит NVidia CUDA). Решение называется Azul Vega. Последние версии содержат сотни вычислительных ядер и сотни гигабайт RAM.

@TheShade как-то рассказывал байку времён своей работы в Intel. Мол, брали они стандартную бенчмарку, в которой Sun'овская Java давала 4000 попугаев, начинали оптимизировать свою имплементацию и после долгих трудов им удавалось выжать 5000 попугаев. «Ура!», кричали они, и публиковали статью о том, как они уделали сановскую имплементацию аж на 25%. После этого приходили парни из Azul, брали бенчмарку и получали на своей Vega не 4000 и не 5000 попугаев, а миллион. Занавес.

Несколько лет назад Azul создали чисто софтовое решение — Zing для Linux. Судя по всему, начиная с какой-то версии Linux 2.6 API Linux стало достаточно для того, чтобы отказаться от железной части и портировать свои лучшие наработки из железной части в софт. Вышло довольно круто. Zing позиционируется как решение для тачек с большими хипами:

Как известно, каждая плюшка чего-то стоит. В случае low latency нам всегда приходится жертвовать всем остальнымthroughput'ом. Известный мастер elizarov рассказывал недавно за чаем, что крутых latency они добивались на стенде при загрузке процов на 5%, а уже в районе 10% latency начинал сильно проседать. Возможно, крутаны из Azul могли бы затюнить своё решение гораздо лучше, но речь сейчас вообще не об этом.

Пресс-релиз от Azul


Что же официально говорит нам Azul в своём пресс-релизе?
Во-первых, говорится про Windows Azure. Во-вторых, встречается модное нынче «community-driven». В третьих, говорится про полную совместимость со спецификацией Java SE 7. Значит, эти ребята не сильно разломали OpenJDK, что радует :) Но это всё и так понятно.

Из интересного: Azul будет активно заливать в OpenJDK патчи и багфиксы. То есть, не только пользоваться чужим, но и вносить свой вклад. Это крутое заявление, но не новое. Любой нормальный лицензиат Java так делает хотя бы для того, чтобы избавиться от головной боли.
Представим себе, что у нас есть хитрый лицензиат Вася, который нашёл баг в OpenJDK, пофиксил его в своём форке, но не сказал остальным. Ту бишь, не за бэкпортил. И сидит такой довольный собой. Допустим, через месяц ту же проблему нашёл честный Петя, пофиксил её своим способом и залил в OpenJDK. В итоге при первой же синхронизации с обновлённым OpenJDK у Васи случится батхёрт конфликт в исходниках, с которым нужно будет разбираться. А это то ещё удовольствие.


Глазами Microsoft


В Редмонде тоже не дремлют. Чувак из Microsoft Open Technologies пишет на MSDN, что фишка в том, что теперь последние версии OpenJDK 7 для Windows теперь доступна в бинарном виде благодаря Zulu, а в дальнейшем цитирует пресс-релиз Azul.

Пресса


Joab Jackson на ComputerWorld отмечает очевидное: Azul будет дефолтной платформой в Azure для тех, кому Java в Azure нужна как сервис. Кроме того, он упоминает Oracle Cloud, в котором Oracle почему-то не предоставяет Java SE как сервис, а предоставляет как сервис более высокоуровневое решение — Java EE. Типа, деплойте-ка своё JavaEE-приложение в Oracle Cloud, а дальше мы сами разберёмся, как его эффективно выполнять.

Звучит разумно с точки зрения облачной модели c одной стороны и как забивание болта на Java SE с другой. Нужна ли бизнесу Java SE без Java EE? Стоит ли ради неё заморачиваться? Судя по статье, Microsoft отвечает на этот вопрос скорее утвердительно, а Oracle скорее отрицательно. Следует лишь заметить напоследок, что это статья на ComputerWorld, а не официальный релиз Oracle или Microsoft.

Распаковка


Итак, потрогаем Zulu Technology Preview. На официальном сайте Azul Systems лежит ссылка. Кликаем и, о чудо, перед нами 60-мегабайтный zip-архив. Судя по названию, этот билд собран на OpenJDK 7u25 и заточен под Windows x64. Для справки, Oracle JDK 7u25 под win x64 весит около 90 мегабайт, а Oracle JDK 7u40 аж целых 125 мегабайт. Запускаем:
    D:\zulu1.7.0_25-7.0.0.0-win64\bin>java -version
    openjdk version "1.7.0_25"
    OpenJDK Runtime Environment (Zulu 7.0.0.0-win64) (build 1.7.0_25-b34)
    OpenJDK 64-Bit Server VM (Zulu 7.0.0.0-win64) (build 23.25-b03, mixed mode)

хмм, ну ок. Кажется, мы получили ответ на первый вопрос. На данный момент, на осень 2013 года, Azul Zulu — это только начало проекта по облачной Java.

Пройдёмся по внутренностям архива. Распакованная jdk 1.7.0_25 весит 216 мегабайт, а распакованная zulu 1.7.0_25 весит 136 мегабайт. Где же собака порылась оставшиеся 80 метров?
  • папка bin весит в Zulu 1.7 метров против 2.5 в Oracle JDK. Мелочь, но интересно. Заходим внутрь и видим, что названия файлов те же, только вот размеры разные. Большинство мелких exe-шников у Oracle весит по 16 килобайт, а у Azul — по 9 килобайт. Такое ощущение, что разница просто в компиляторе, которым эти самые екзешники делали. Ну или в настройках. java.exe и javaw.exe отличаются на 11 кило (185 у Oracle против 174 у Azul). Существенно отличается размер unpack200.exe (177К против 109К). Радует, что хотя бы майкрософтовская msvcr100.dll весит поровну в обоих дистрибутивах :)
  • 5-мегабайтной папки db c JavaDB у Azul нет. Зато есть папки demo и sample суммарным весом как раз примерно 5 метров.
  • src.zip весит примерно одинаково, по 21 мегабайту
  • папка include у Oracle больше на 150К за счёт наличия врапперов вокруг вызовов AccessBridge DLL, нужной для работы Java Accessibility
  • jre у Azul меньше на 50 метров: 76 против 126. Заглянем внутрь. jre/bin весит 13 метров против 36. Из крупняка там нету библиотек для упомянутого Java Accessibility (пара мегабайт), JavaFX (я насчитал 15 мегабайт). Ну и по мелочи: JdbcOdbc, JavaWebStart Acivex Control и т.п. Ещё 2 мегабайта отыскалось в jre/lib/fonts. Ещё 15 метров отыскались в jre/lib/jfxrt.jar (классы JavaFX). Ещё 4 метра — в Deploy.jar ...
  • Ещё 27 мегабайт в оракловой джаве занимает VisualVM — профилировщик, портированный несколько лет назад из плагина NetBeans в отдельное приложение.

На этом месте я понял, что разница с точки зрения именно файлового содержимого — в том, что Oracle JDK включает пачку собственных проприетарных технологий, поэтому весит сильно больше и сравнение не совсем корректно. В этом смысле, нужно было сравнивать сборки Oracle JDK и OpenJDK под Ubuntu — было бы проще. Хотя поскольку Zulu сейчас в зачаточном состоянии, то экспертимент выглядит вполне валидным.

Итак, как результат: под капотом у нас применение разных компиляторов под винду (или, по крайней мере, разных настроек одного компилятора) и несколько технологий от Oracle, нужных не всем и раздувающих дистрибутив. Именно для того, чтобы побороть последнюю проблему, в Java SE 8 реализованы Compact Profiles. Я понимаю, что сравнивать две софтины по набору файлов — это полный идиотизм, и нужно копать дальше и запускать всё это, меряться попугаями и т.п. Но это материал для технической статьи, а не для обзорной. Учитывая, опять-таки, что Zulu сейчас на начальной стадии, можно догадаться, что разница будет минимальна.

Давайте её запустим!


Первым jar-ником, попавшимся мне под руку оказался Dcompiler Итак, java -jar ...

D:\>D:\zulu1.7.0_25-7.0.0.0-win64\bin\java.exe -jar DCompiler.jar
Exception in thread "main" java.awt.HeadlessException
     at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:208)
     at java.awt.Window.(Window.java:535)
     at java.awt.Frame.(Frame.java:420)
     at java.awt.Frame.(Frame.java:385)
     at javax.swing.JFrame.(JFrame.java:180)
     at MainFrame.(MainFrame.java:253)
     at Gui.create(Gui.java:18)

     at Gui.main(Gui.java:49)

Мда, она ещё и Headless. Это значит, что эти парни выключили по дефолту в своей OpenJDK AWT и Swing Zulu предназначена только для серверов. IntelliJ IDEA вы на ней просто так не запустите. В каментах подсказывают, что это просто по тому, что java.awt.headless=true включена по дефолту :) Вот так заработало:

D:\>D:\zulu1.7.0_25-7.0.0.0-win64\bin\java.exe -Djava.awt.headless=false -jar DCompiler.jar

Заключение


Для меня по-прежнему остаётся загадкой, в чём же специфика Zulu. На ум приходит только какое-то потенциальное тесное сотрудничество Azul Systems и Microsoft в плане компиляции и оптимизации нативного кода OpenJDK под винду. Может быть, какие-нибудь навеянные совместными усилиями оптимизации в JIT. Может быть, какие-то куски из Zing, который является продуктом для Linux, будут портированы (или уже портированы) в Zulu.

Почему же Zulu позиционируется именно как решение для Windows Azure, а не просто как сборка OpenJDK под винду. Что это? Маркетинг? Ну ок. А что в Zulu технически нового? Какова специфика Zulu? Хочется верить, что это действительно выльется во что-то интересное технически и даст Java-миру что-то принципиально новое. Пока что я вижу только порт OpenJDK на Windows x64. Повторюсь, видимо, проект только в самом начале пути.

В то же время, налицо интересное противоречие между Zing и Zulu. Zing -- это продукт для одной большой тачки. А Zulu, как заявлено, продукт для облака, то есть для множества мелких тачек. Чего хочет добиться Azul? Играть на обоих рынках? Можно ли при таком противоречии портировать какие-то решения из Zing в Zulu? Или это просто порт OpenJDK, что называется, без претензий на лидерство? В общем, много интересного. Время покажет.

Ну и вообще -- Java в облаке, JVM в облаке. Что это и зачем? Быстрое клонирование работающего рантайма между машинами в облаке? Возможность менять настройки хипа на лету? Автоматический форк инстансов при выполнении каких-то условий? Реализация I/O (диска и сети), оптимизированная для виртуальных машин? В общем, вопросов масса.

Порассуждать на эти и другие темы я приглашаю вас на конференции Joker 2013, которая пройдёт в Питере уже через две недели. Среди прочих, в программе конференции будет доклад от CTO Azul Systems Гила Тини про сборку мусора и доклад от Александра Белоцерковского из Microsoft как раз про Java в Windows Azure. И именно им двоим лично я и хочу задать озвученные выше вопросы.
Tags:
Hubs:
+9
Comments 13
Comments Comments 13

Articles

Information

Website
jugru.org
Registered
Founded
Employees
51–100 employees
Location
Россия
Representative
Алексей Федоров