JAVArsovia 2009 - zapraszam na sesję o wirtualizacji Java (czyli aplikacje Java bez systemu operacyjnego)

Cześć,

4.lipca (sobota) od 9:00 do północy w Warszawie, w gmachu Wydziału Biologii Uniwersytetu Warszawskiego (ul. Ilji Miecznikowa 1) odbywa się renomowana, fajna, z tradycjami konferencja pasjonatów technologii Java - JAVArsovia 2009 (http://javarsovia.pl). Jak co roku, są zarówno ciekawe tematy (tu rozkład jazdy), jak i fajni prelegenci.
Organizatorzy byli dla mnie szczodrzy - moja propozycja tematu w ramach Call for Papers została zaakceptowana, czyli poprowadzę sesję pt:
Wirtualizacja wirtualnej maszyny Java - czyli jak uruchamiać aplikacje Java bez systemu operacyjnego.

Łagodne wprowadzenie do tematu wirtualizacji Java można znaleźć m.in. w lipcowym (7/2009) numerze Software Developers Journal (http://www.sdjournal.org), w artykule: "Wirtualizacja aplikacji Java ? Oracle JRockit Virtual Edition dla Oracle VM".

Streszczenie sesji podczas Javarsovia 2009:

Dosyć powszechnie uważa się, że największą zaletą technologii Java jest JVM - Java Virtual Machine. Dzięki JVM programy tworzone w językach Java, Scala, Groovy, Ruby czy wielu innych, są nie tylko przenośne między różnymi środowiskami, ale także działają bezpiecznie, są zarządzalne, a do tego jeszcze wydajne. Widać to szczególnie w serwerowych zastosowaniach JVM. Od pewnego czasu upowszechnia się i znajduje coraz nowe zastosowania technologia wirtualizacji sprzętu, w której za pomocą hypervisora możliwe jest udostępnienie w ramach pojedynczego fizycznego komputera, wielu komputerów logicznych (wirtualnych maszyn). W tutaj przyjętej definicji wirtualizacji - hypervisor to specjalizowane oprogramowanie, "zastępujące" system operacyjny fizycznej maszyny. Jest to stosunkowo cienka warstwa zajmująca się zarządzaniem zasobami fizycznego komputera i koordynowaniem dostępu do nich przez maszyny wirtualne, tak, aby oprogramowanie działające w ramach wirtualnego komputera "myślało", że działa w ramach prawdziwego (=fizycznego) sprzętu. Hypervisor pozwala na równoczesne działanie w ramach fizycznej maszyny wielu maszyn wirtualnych (dzisiaj, z racji powszechności wydajnych wieloprocesorowych/wielordzeniowych serwerów, często w ramach jednej fizycznej maszyny działają dziesiątki i setki maszyn wirtualnych). Zarówno z wewnątrz (czyli dla oprogramowania działającego w ramach maszyny wirtualnej - np. systemu operacyjnego, czy aplikacji, w tym JVM, serwerów aplikacyjnych, czy aplikacji Java EE), jak i z zewnątrz (czyli dla użytkowników) taki wirtualny komputer niczym się nie różni od fizycznego (od wewnątrz udostępnia 'wirtualne wersje' BIOS, CPU, RAM czy urządzeń takich jak karta sieciowa, czy dyski; z zewnątrz jest dostępny poprzez sieć, itd).

Zaletą takiej wirtualizacji jest znacznie większa elastyczność - udostępnienie nowego komputera trwa bardzo krótko. W dodatku takie maszyny można bardzo łatwo klonować, zapewniając niemal ich identyczną konfigurację (nie tylko identyczny sprzęt, ale także choćby identyczne ustawienia security, czy identyczny zestaw aplikacji/usług mających działać w takim komputerze). Wirtualny komputer istnieje w zasadzie w postaci zbioru danych, np. pliku. Takie podejście otwiera także ciekawe (mimo, iż dostępne już od dosyć dawna) możliwości, jak np. możliwość migracji wirtualnych komputerów pomiędzy różnymi fizycznymi komputerami (w migracji "na żywo", tj. bez przerwy w pracy oprogramowania działającego wewnątrz maszyny wirtualnej i w sposób niezauważalny dla użytkowników tego oprogramowania). Niemal nieustannie odkrywane są coraz to nowe zastosowania wirtualizacji - choćby związane z podniesieniem poziomu bezpieczeństwa i niezawodności systemów, a nawet przyjazności dla środowiska naturalnego (w ramach "green computing"). Wirtualizacja leży u podstaw takich innowacji jak cloud computing.

Wirtualizacja nie pozostaje bez wpływu na technologię JVM. W dążeniu do coraz większej efektywności i elastyczności aplikacji Java (szczególnie serwerowych), wirtualizacja "poprzez hypervisor" może odegrać tu istotną rolę. Hypervisor znacznie ułatwia budowę specjalizowanych (=dedykowanych) "systemów operacyjnych", dzięki którym JVM może działać bardziej optymalnie. Maszyna wirtualna Javy bowiem, szczególnie w zastosowaniach serwerowych, niemal nie potrzebuje systemu operacyjnego (niektórzy twierdzą, że jest to maksymalnie 0.5% kodu OS, głównie związanego z niskopoziomowym zarządzaniem pamięcią i wątkami, I/O w zakresie sieci i storage'u oraz narzędziami do monitorowania i administracji - resztę zadań i tak implementuje JVM - a w środowisku zwirtualizowanym także hypervisor). Co więcej, klasyczny system operacyjny nie rozumie tego co dzieje się wewnątrz JVM i dosyć nagminnie przekszadza JVM w efektywnym wykonywaniu aplikacji (tzw. efekt podwójnej - a w środowisku wirtualnym - nawet potrójnej wirtualizacji). Wiele zadań jest wykonywanych nadmiarowo, w nieskoordynowany sposób przez JVM, hypervisor i OS.

Może zatem warto pozbyć się takiego "rozdmuchanego" systemu operacyjnego, skoro JVM i tak go w zasadzie nie używa ? Tym właśnie jest wirtualizacja JVM - możliwość uruchamiania JVM bezpośrednio w ramach wirtualnych maszyn udostępnianych przez hypervisor, bez systemu operacyjnego. A dokładniej: zamiast zwykłego OS, JVM działa na specjalizowanej, bardzo cienkiej (rzędu 1-2 MB) warstwie pełniącej rolę systemu operacyjnego, która udostępnia JVM tylko te usługi, których ta rzeczywiście od OS potrzebuje. Korzyści z oddania sporej ilości zasobów (pamięć, CPU) zajmowanych (marnotrawionych ?) wcześniej przez OS i lepszej koordynacji zadań widać szczególnie wtedy, gdy w ramach jednej fizycznej maszyny działa wiele (dziesiątki/setki) maszyn wirtualnych. W takiej kombinacji pojawia się możliwość praktycznej realizacji wielu dodatkowych optymalizacji w wykonywaniu kodu Java.
Niektóre z tych optymalizacji udostępnia technologia JRockit Virtual Edition - maszyny wirtualnej Java działającej bez systemu operacyjnego w środowisku opartego o Xen hypervisora Oracle VM.

Podczas tej sesji chciałbym zaprezentować wybrane aspekty technologii wirtualizacji, szczególnie w kontekście jej wpływu na Java i JVM. Będzie sporo praktycznych demonstracji z wykorzystaniem aktualnych wersji JRockit VE, WebLogic Server Virtual Edition i Oracle VM (zapraszam także tych, którzy chcą zobaczyć zwirtualizowane aplikacje napisane w Ruby i Groovy ;-)).

W pewnym zakresie sesja będzie podobna do tej, którą mogli zobaczyć uczestnicy świetnej konferencji GeeCon 2009 w Krakowie (http://www.geecon.org) - Liberate your enterprise Java applications from the Operating System (or: about the JVM-level virtualization). Materiały z GeeCon 2009, w tym i moją skromną sesję, można znaleźć tutaj: http://www.geecon.org/site/materials. Postaram się jednak pokazać także nowe rzeczy.

Najbardziej liczę jednak na to, że ta innowacja w świecie Java pt. wirtualizacja wirtualnej maszyny Java przede wszystkim zaciekawi społeczność Java (a pewnie i nie obędzie się bez kontrowersji i emocji, których przykłady mogli zaobserwować uważni czytelnicy grupy dyskusyjnej pl.comp.lang.java, np. tutaj lub tutaj).
A niektórych może nawet zachęci do dalszych poszukiwań usprawnień w JVM !

Mój slot: 15:30 - 16:30, ścieżka 1, Aula duża (sala 9B)

Serdecznie zapraszam !

Waldek Kot