Discussion:
Czy warto się jeszcze uczyć javy?
(Wiadomość utworzona zbyt dawno temu. Odpowiedź niemożliwa.)
Rafal
2008-11-14 21:04:56 UTC
Permalink
Trochę intrygująco postawione pytanie. :)

Kilka linków z moich ostatnich bieżących obserwacji:

http://www.forbes.com/feeds/ap/2008/10/30/ap5629438.html
http://www.theserverside.com/news/thread.tss?thread_id=51294
http://forums.java.net/jive/thread.jspa?threadID=52665&tstart=0
http://www.tinyurl.pl?hPDhhQci
http://weblogs.java.net/blog/kirillcool/archive/2008/11/sun_setting_dow.html
http://www.informationweek.com/news/internet/search/showArticle.jhtml?articleID=212001532
http://www.theserverside.com/news/thread.tss?thread_id=51863

Jak prognozujecie przyszłość SUN'a i Javy?
--
Pozdrawiam
Rafal
jarekr
2008-11-14 21:32:55 UTC
Permalink
http://www.forbes.com/feeds/ap/2008/10/30/ap5629438.htmlhttp://www.theserverside.com/news/thread.tss?thread_id=51294http://forums.java.net/jive/thread.jspa?threadID=52665&tstart=0http://www.tinyurl.pl?hPDhhQcihttp://weblogs.java.net/blog/kirillcool/archive/2008/11/sun_setting_d...http://www.informationweek.com/news/internet/search/showArticle.jhtml...http://www.theserverside.com/news/thread.tss?thread_id=51863
No w tej sytuacji to chyba przenoszę się na PHP. Nie słyszałem aby
firma rozwijająca PHP miała jakieś problemy finansowe.
Jak prognozujecie przyszłość SUN'a i Javy?
Sun zbankrutuje i następnego dnia wszystkie programy w javie przestaną
działać. Java zostanie zdelegalizowana,
a programiści zostaną zmuszeni do pracy w kamieniołomach. Dla
pewności, również wyspa w Indonezji, nazwana od tego języka
programowania, zostanie zbombardowana przez USA i Rosję w ramach
wspólnej akcji humanitarnej.
Polska już zadeklarowała gotowość do wysłania własnych bombek
choinkowych pozostałych po fabryce w Miliczu.

--
jarekr
A.L.
2008-11-14 22:02:30 UTC
Permalink
Post by Rafal
Trochę intrygująco postawione pytanie. :)
http://www.forbes.com/feeds/ap/2008/10/30/ap5629438.html
http://www.theserverside.com/news/thread.tss?thread_id=51294
http://forums.java.net/jive/thread.jspa?threadID=52665&tstart=0
http://www.tinyurl.pl?hPDhhQci
http://weblogs.java.net/blog/kirillcool/archive/2008/11/sun_setting_dow.html
http://www.informationweek.com/news/internet/search/showArticle.jhtml?articleID=212001532
http://www.theserverside.com/news/thread.tss?thread_id=51863
Jak prognozujecie przyszłość SUN'a i Javy?
Najlepiej zapisac sie do Prywatnej Szkoly Biznesu i Zarzadzania

A.L.
Matt Z
2008-11-15 00:19:59 UTC
Permalink
Post by Rafal
Jak prognozujecie przyszłość SUN'a i Javy?
słabo to widzę...
--
pozdrawiam
Mateusz
http://na-jawie.blogspot.com
Mateusz Ludwin
2008-11-15 01:56:15 UTC
Permalink
Post by Matt Z
Post by Rafal
Jak prognozujecie przyszłość SUN'a i Javy?
słabo to widzę...
Tylko od kogo będą wtedy kopiować technologie dotnetowcy?
--
Omniscient, omnipotent, omnipresent, without judgment

Mateusz Ludwin mateuszl [at] gmail [dot] com
LukaszS
2008-11-15 12:03:02 UTC
Permalink
Post by Rafal
Trochę intrygująco postawione pytanie. :)
Jak prognozujecie przyszłość SUN'a i Javy?
Powiem swoją opinię:
Warto zainwestować w jakąś niszę (celowo nie podam przykładów). Uczenie się
specjalnie czegoś, co znają "wszyscy", co wykonuje większość do niczego nie
prowadzi. Zawsze znajdzie się ktoś, kto za tę samą pracę weźmie mniej iwykona ją
lepiej od Ciebie. A szef zawsze może Ci powiedzieć, że "na Twoje miejsce są
dziesiątki chętnych". No chyba, że w zakresie np. Javy opanowujesz perfekt jakąś
specjalizację (np. sterowanie urz. przemysłowymi).

Typowy przykład z przeszłości, to oblężenie wydziałów marketingu i zarządzania w
czsach, gdy słowo "biznesmen" oznaczało wysoką rangę i prestiż. Teraz jest ich
duży przesyt na rynku i taki "biznesmen" teraz układa przysłowiowe towary w
Tesco.

Moim zdaniem to samo będzie za rok-dwa z Javą. Teraz każdy, kto chce programować
uczy się ogólnie Javy (dawniej .NET, jeszcze wcześniej C++). A ta wbrew pozorom
do wszystkiego się nie nadaje (np. nie nadaje się do sterowania w/w urz.
przemysłowymi). Więc zawsze będzie jakaś luka, w która warto się wcisnąć.

Poza tym jestem zwolennikiem ścisłej specjalizacji. Wymenianie w CV maks. liczby
języków czy technologii, które się w życiu liznęło oznacza IMHO, że "to cenny
człowiek, który nie boi się zmian, ale niczego konkretnego dobrze nie umie -
będziemy musieli w niego jeszcze zainwestować, żeby był z niego dobry
specjalista". Inaczej mówiąc: znasz się na wszystkim, oznacza, że na niczym nie
znasz się dobrze.

Z drugiej strony teraz Java, C++, C, to podstawy, które TRZEBA poznać
przynajmniej trochę. Programista, który tego nie zna, to po prostu analfabeta, a
nie programista.
Michal Kleczek
2008-11-15 15:39:39 UTC
Permalink
Post by Rafal
Trochę intrygująco postawione pytanie. :)
Zlapalo mnie na pisanie, wiec odpowiem, choc pachnie flamem. Z tym, ze
zostawie na boku finansowa kondycje suna i aspekty biznesowe, ktore skad
inad sa b. istotne.

Generalnie - IMHO - przyszlosc Javy nie wyglada rozowo (chociaz to wcale nie
znaczy, ze szybko zniknie - COBOL tez sie jeszcze niezle trzyma).

1. Juz dawno nie jest tak, ze tzw dotnetowcy kopiuja rozwiazania Javy -
wystarczy spojrzec na LINQ czy F# - to jest lata swietlne przed Java
(zreszta C# tez jest lata swietlne do przodu).
2. Dawanie jako przyklad Springa czy Hibernate jest o tyle bez sensu, ze
takie biblioteki to jest krecenie sie w kolko - zaden postep (mimo ze
bywaja uzyteczne).
3. Podobna sprawa jest z calym (bardzo ostatnio glosnym) OSGI - ja po prostu
nie jestem w stanie zrozumiec, co OSGI wnosi - w swojej oryginalnej postaci
bylo to przeznaczone na urzadzenia, gdzie istotna byla mozliwosc
uruchamiania niezaleznych aplikacji Javy w jednej maszynie wirtualnej. Ale
w zastosowaniach enterprise to po prostu nie ma sensu. Nie bez przyczyny
znalezienie hostingu dla aplikacji J2EE jest takie trudne - po prostu JVM
(a co za tym idzie serwery J2EE) sie do tego NIE NADAJA (w odroznieniu od
LAMP) - i OSGI tego nie zmieni. A w koncu juz dawno wymyslono systemy
operacyjne pozwalajace na uruchamianie programow w izolacji oraz mechanizmy
IPC pozwalajace im sie komunikowac.
4. Technologie, ktore rzeczywiscie wnosily cos nowego zostaly zmarnowane
(przez Suna) i schowaly sie w zapomnianych niszach. Szczegolnie chodzi mi
tu o JINI + Javaspaces oraz JXTA.
5. Z ktoregos linku, ktory przytoczyles wyczytalem, ze Sun wycofuje sie ze
wsparcia Swinga!!! Innymi slowy ogromny rynek aplikacji desktop Java oddaje
(wiem - jest SWT, tyle ze to jest IMHO krok do tylu... nie widzialem
appleta zrobionego w SWT). Zastosowania serwerowe beda sie konczyc. Ile
razy mozna klepac webowe aplikacyjki typu CRUD? Co wiecej - widac wyraznie,
ze cale tzw web 2.0 to nic innego (technologicznie) jak stary dobry "gruby
klient" tyle tylko, ze tym razem pisany w Javascripcie.
6. Wparcie dla Javy przez dostawcow systemow operacyjnych bylo i jest hmm...
slabe. Niby JVM istnieja na "kazda" platforme. Ale nawet linuksiarze nie
przepadaja za java. (przyklad: "bindingi" do GNOME czy KDE sa dostepne dla
Ruby, Pythona i setki innych. Do javy sa traktowane po macoszemu, a do
nowego KDE po prostu nie ma). Nie wspominajac juz o MS.
7. Przyszlosc jezyka i platformy jest IMHO mglista - w tej chwili zupelnie
nie wiadomo jak bedzie wygladac Java 7 i dlaczego ma wygladac tak a nie
inaczej. Trwaja spory na temat "closures", "properties" i tego typu
pierdol, a swiat idzie do przodu - programowanie rownolegle i rozproszone
(np STM), integracja roznych paradygmatow w jednym jezyku/platformie - TO
sa rzeczy nad ktorymi pracuja inni. Myslalem, ze pojawienie sie Scali moze
cos zmieni, ale bez silnego wsparcia producentow (tak jak jest w przypadku
MS i dotnet) - zginie.
8. Do niedawna wydawalo sie ze Java na komorkach trzyma sie mocno. Ale
pojawil sie Android (ktory - podobnie zreszta jak GWT - z platforma Java ma
wspolnego tyle co nic - skladnie jezyka). Zas na iPoda Javy nie ma i nie
bedzie.

Reasumujac: przyszlosc Javy nie wyglada rozowo, CBDU. :)
--
Michal
Michal Kleczek
2008-11-15 15:42:58 UTC
Permalink
Post by Michal Kleczek
Zas na iPoda Javy nie ma i
nie bedzie.
Chodzilo oczywiscie o iPhone.
--
Michal
Brzezi
2008-11-15 15:16:50 UTC
Permalink
Post by Michal Kleczek
Post by Michal Kleczek
Zas na iPoda Javy nie ma i
nie bedzie.
Chodzilo oczywiscie o iPhone.
iPhone, to jest wlasnie iPod z dodanym modulem telefonu, jak bedziesz mial
iPhone i iPoda przed soba to nawet na pierwszu rzut oka nie rozroznisz
ktory to ktory :)

Pozdrawiam
Brzezi
--
[ E-mail: ***@enter.net.pl ][ GEEK CODE [Version: 3.12]: GCM dpu s+:- ]
[ Ekg: #3781111 ][ a--- C+++ UL++ P+ L+++ E--- W+++ N+++ ]
[ LinuxUser: #249916 ][ o-- K- w--- O-- M- V- PS PE Y PGP--- t+ ]
[ 5- X++ R* tv+ b- DI- D+ G+ e- h! r y-- ]
Bartek Jablonski
2008-11-18 12:59:58 UTC
Permalink
Post by Brzezi
jak bedziesz mial
iPhone i iPoda przed soba to nawet na pierwszu rzut oka nie rozroznisz
ktory to ktory :)
Jak nie? Zastrzezenie - musza lezec pleckami do gory :)

B.
Ris
2008-11-15 16:55:05 UTC
Permalink
Post by Michal Kleczek
Post by Rafal
Trochę intrygująco postawione pytanie. :)
Zlapalo mnie na pisanie, wiec odpowiem, choc pachnie flamem. Z tym, ze
zostawie na boku finansowa kondycje suna i aspekty biznesowe, ktore skad
inad sa b. istotne.
Generalnie - IMHO - przyszlosc Javy nie wyglada rozowo (chociaz to wcale nie
znaczy, ze szybko zniknie - COBOL tez sie jeszcze niezle trzyma).
1. Juz dawno nie jest tak, ze tzw dotnetowcy kopiuja rozwiazania Javy -
wystarczy spojrzec na LINQ czy F# - to jest lata swietlne przed Java
(zreszta C# tez jest lata swietlne do przodu).
Jakiś konkret można ?
Post by Michal Kleczek
2. Dawanie jako przyklad Springa czy Hibernate jest o tyle bez sensu, ze
takie biblioteki to jest krecenie sie w kolko - zaden postep (mimo ze
bywaja uzyteczne).
A ALT.MVC w .Net to niby co to jest? Rewolucja ? :D
Post by Michal Kleczek
3. Podobna sprawa jest z calym (bardzo ostatnio glosnym) OSGI - ja po prostu
nie jestem w stanie zrozumiec, co OSGI wnosi - w swojej oryginalnej postaci
bylo to przeznaczone na urzadzenia, gdzie istotna byla mozliwosc
uruchamiania niezaleznych aplikacji Javy w jednej maszynie wirtualnej. Ale
w zastosowaniach enterprise to po prostu nie ma sensu. Nie bez przyczyny
znalezienie hostingu dla aplikacji J2EE jest takie trudne - po prostu JVM
(a co za tym idzie serwery J2EE) sie do tego NIE NADAJA (w odroznieniu od
LAMP) - i OSGI tego nie zmieni. A w koncu juz dawno wymyslono systemy
operacyjne pozwalajace na uruchamianie programow w izolacji oraz mechanizmy
IPC pozwalajace im sie komunikowac.
I co na LAMP uruchomisz F# ? :)
Post by Michal Kleczek
4. Technologie, ktore rzeczywiscie wnosily cos nowego zostaly zmarnowane
(przez Suna) i schowaly sie w zapomnianych niszach. Szczegolnie chodzi mi
tu o JINI + Javaspaces oraz JXTA.
5. Z ktoregos linku, ktory przytoczyles wyczytalem, ze Sun wycofuje sie ze
wsparcia Swinga!!! Innymi slowy ogromny rynek aplikacji desktop Java oddaje
(wiem - jest SWT, tyle ze to jest IMHO krok do tylu... nie widzialem
appleta zrobionego w SWT). Zastosowania serwerowe beda sie konczyc. Ile
razy mozna klepac webowe aplikacyjki typu CRUD? Co wiecej - widac wyraznie,
ze cale tzw web 2.0 to nic innego (technologicznie) jak stary dobry "gruby
klient" tyle tylko, ze tym razem pisany w Javascripcie.
6. Wparcie dla Javy przez dostawcow systemow operacyjnych bylo i jest hmm...
slabe. Niby JVM istnieja na "kazda" platforme. Ale nawet linuksiarze nie
przepadaja za java. (przyklad: "bindingi" do GNOME czy KDE sa dostepne dla
Ruby, Pythona i setki innych. Do javy sa traktowane po macoszemu, a do
nowego KDE po prostu nie ma). Nie wspominajac juz o MS.
7. Przyszlosc jezyka i platformy jest IMHO mglista - w tej chwili zupelnie
nie wiadomo jak bedzie wygladac Java 7 i dlaczego ma wygladac tak a nie
inaczej. Trwaja spory na temat "closures", "properties" i tego typu
W końcu robią to tylko ludzie :) Tworząc 7 wersję języka chyba
naprawdę trzeba pomyśleć a potem wprowadzać zmiany, ja tam wolę proces
ewolucji a nie rewolucji :)
Post by Michal Kleczek
pierdol, a swiat idzie do przodu - programowanie rownolegle i rozproszone
(np STM), integracja roznych paradygmatow w jednym jezyku/platformie - TO
sa rzeczy nad ktorymi pracuja inni. Myslalem, ze pojawienie sie Scali moze
cos zmieni, ale bez silnego wsparcia producentow (tak jak jest w przypadku
MS i dotnet) - zginie.
8. Do niedawna wydawalo sie ze Java na komorkach trzyma sie mocno. Ale
pojawil sie Android (ktory - podobnie zreszta jak GWT - z platforma Java ma
wspolnego tyle co nic - skladnie jezyka). Zas na iPoda Javy nie ma i nie
bedzie.
Reasumujac: przyszlosc Javy nie wyglada rozowo, CBDU. :)
A ja pytam co jest według Ciebie alternatywą? Dlaczego, jakieś
konkrety. Ja osobiście przez kilka lat byłem związany z .Net od
jakiegoś czasu zgłębiam Jave i świat wokół niej. Nie za bardzo
dostrzegam jakieś wspaniałości .Net nad Javą. Kopia, jaką jest C#
wcale nie jest lepsza, wprowadza kilka nowych, zbędnych rzeczy, które
nie są żadnym ułatwieniem a trzeba to znać bo ktoś może użyć i potem
trzeba to rozumieć. Cały czas przeklinam dzień w którym użyłem w
projekcie DataSet, które przy każdej zmianie struktury bazy muszę
aktualizować, co w JPA robi się automatycznie. Naprawdę nie potrafię
dostrzec co jest takiego, czego nie ma świat Javy. Android, GWT. A co
innego niby miał by mieć wspólnego język tam użyty? Chyba właśnie o to
chodzi aby nie uczyć się czegoś nowego, skoro jest dobre sprawdzone
rozwiązanie. Do tej dwójki należy dodać GAE, które doczekało się
możliwości pisania w Javie. Wydaje się, że google wie co robi
wybierając ten język.

--
Robert Sajdok (Ris)
A.L.
2008-11-15 19:52:32 UTC
Permalink
Post by Michal Kleczek
4. Technologie, ktore rzeczywiscie wnosily cos nowego zostaly zmarnowane
(przez Suna) i schowaly sie w zapomnianych niszach. Szczegolnie chodzi mi
tu o JINI + Javaspaces
Hm... GigaSpaces to nisza?

A.L.
Michal Kleczek
2008-11-15 22:39:16 UTC
Permalink
Post by A.L.
Post by Michal Kleczek
4. Technologie, ktore rzeczywiscie wnosily cos nowego zostaly zmarnowane
(przez Suna) i schowaly sie w zapomnianych niszach. Szczegolnie chodzi mi
tu o JINI + Javaspaces
Hm... GigaSpaces to nisza?
No mainstream to to nie jest...
--
Michal
A.L.
2008-11-16 00:41:04 UTC
Permalink
Post by Michal Kleczek
Post by A.L.
Post by Michal Kleczek
4. Technologie, ktore rzeczywiscie wnosily cos nowego zostaly zmarnowane
(przez Suna) i schowaly sie w zapomnianych niszach. Szczegolnie chodzi mi
tu o JINI + Javaspaces
Hm... GigaSpaces to nisza?
No mainstream to to nie jest...
Owszem. Za trudne dla pzrecietnego programowego Experta

A.L.
w***@googlemail.com
2008-11-16 12:27:19 UTC
Permalink
Cześć,

To i ja dodam swoje trzy grosze...

Warto pamiętać, że Sun jest tylko jedną z setek firm wspierających
Java. Zresztą od dawna (od początku ???) udział Sun'a w rozwoju Java
Enterprise Edition nie jest zbyt znaczący (ktoś pamięta wstrzymanie
rozwoju EJB na 6 lat ?). Na fali frustracji JCP (zwłaszcza działania
JCP przed 3-4 laty) liczący się dostawcy zaczęli nawet uzgadniać wiele
specyfikacji poza Sun'em - czasem między sobą (przykład: CommonJ w
wykonaniu BEA i IBM), czasem w ramach innych konsorcjów (przykład:
OSGi), czasem w ramach projektów open-source (przykład: Spring).
Zatem, nawet jeśli idą trudne czasy dla Sun'a (czego nie życzę), to ma
to znikomy wpływ na samą technologię. Inni wielcy będą "ciągnąć" (tak
jak to zresztą robią) dalej ten wózek - IBM, Oracle, Google, Red Hat,
w dużym stopniu także SAP. Nie zapominałbym także o takich gigantach
jak Nokia, czy Ericsson. Java ma duże wsparcie ze strony Intel'a.
Kluczowi są jednak inni ważni odbiorcy - klienci (firmy
telekomunikacyjne, banki, firmy ubezpieczeniowe, administracja
publiczba, itd). Sorry, ale .NET w rozwiązaniach korporacyjnych jest
nieobecny (bywa Windows i MS SQL, ale to nie jest ten sam poziom co
Java Enterprise. Pomijam z oczywistych względów Office i Exchange).
Dla tych odbiorców (tj. dla klientów) ważna (najważniejsza ?) jest
możliwość wyboru pomiędzy wieloma dostawcami i ewentualnej stosunkowo
łatwej ich zmiany. Wybierając .NET wybiera się między Microsoft a ???

Odpowiadając Michałowi:
Ad 1. C# jest bardzo bogatym językiem i może to jest jego największa
wada. Poza tym język programowania to tylko część sposobu na
rozwiązywanie problemów za pomocą technologii. Nie przyrównywałbym
Java do F#, bo Java nie ma ambicji, aby stać się jezykiem funkcyjnym
(choćby z powodu konieczności zachowania wstecznej zgodności). Jeśli
już przyrównywać, to Scala do F#. Myślę jednak, że dobrze zdajesz
sobie sprawę, że na upowszechnienie się programowania funkcyjnego do
poziomu języków deklaratywnych przyjdzie nam poczekać jeszcze z 15
lat. Urok Java (technologii, nie języka) polega tym jednak, że i
Scala, i Java, i JRuby, i Groovie działa na JVM, którą mogę uruchomić
na setkach platform sprzętowych i OS. Co mi pozostaje przymierzając
się do C#, czy F#, czy szerzej .NET ? Windows. No comments.

Ad 2.
Postęp jaki wniósł Spring jest niedoprzecenienia. Nie polega jednak na
tym, że autorzy Spring'a wymyślili coś nowego, ale na UPOWSZECHNIENIU
takich technik i wzorców, jak Dependency Injection (które z kolei
ułatwia testowanie, którego wzrost znaczenia jest w ciągu paru
ostatnich lat jest bardzo dostrzegalny), MVC, czy Aspect Oriented
Programming. Śmiem także twierdzić, że OSGi nie przebiłoby się do
obecnej pozycji "gorącej technologii przyszłości", gdyby nie projekt
Spring-DM rozwijany przez SpringSource, BEA i Oracle. Siła nośności
Spring Framework jest po prostu dzisiaj ogromna...

Ad 3
OSGi nie zostało wymyślone po to, aby móc uruchamiać wiele aplikacji w
ramach JVM. Tym zagadnieniem zajmuje się technologia zwana Java
Isolation (m.in. tutaj http://jcp.org/en/jsr/detail?id=121). OSGi ma
pomóc w kilku zagadnieniach:
- jak zwiększyć dynamiczność aplikacji Java, m.in. poprzez możliwość
uruchamiania modułów i usług bez restartu JVM (łatwo się mówi, ale
pociąga to za sobą cały bagaż problemów do rozwiązania - zależności,
wersjonowanie, security, ...). W zasadzie też powinienem napisać
"aplikacji JVM" zamiast "aplikacji Java", bo od pewnego czasu widać
bardzo dynamiczny rozwój wielu języków działających "na
JVM" (najbardziej popularne i przyszłościowe wymieniłem wcześniej). Po
prostu technologia Java to wszystko, co działa na JVM (czyli PHP na
JVM także).
- jak wzbogacić model ładowania klas (classloading) w JVM. Ten model,
który opisuje specyfikacja JVM wymaga już po prostu unowocześnienia
(znowu łatwo się mówi, ale takie zagadnienia jak zależności i
wersjonowanie są tutaj wyjątkowo trudne do kompleksowego rozwiązania,
zachowując przy tym zgodność wstecz). Bez takiego wsparcia jakie daje
OSGi trudno jest np. zapewnić równoczesne działanie w JVM wielu
wersji tych samych klas (oraz odpowiednich wersji klas, których te
klasy wymagają, itd.).
- jak wzbogacić modularyzację aplikacji na JVM - obok tego co jest w
tej chwili (klasy, pakiety), dodać także bundle, a przede wszystkim -
kluczowe w OSGi - usługi. Dzięki usługom można znacznie rozluźnić
zależności między komponentami i dodać tym zależnościom więcej
dynamizmu. Nacisk (orientacja) na usługi wymaga jednak poradzenia
sobie z paroma nowymi zagadnieniami - rejestrem usług,
wersjonowaniem, zależnościami, itd. Po paru dziesiątkach lat, myślę,
że większość z nas zdaje sobie sprawę, że zależności (dependencies)
to jest największa przeszkoda we wprowadzaniu zmian w oprogramowaniu.
Trzeba sobie jakoś z tym problemem radzić i w tym takie techniki jak
DI i technologie jak Spring, OSGi, czy Maven mają pomagać.
- ustandaryzować określone, często wykorzystywane usługi (ich
interfejsy), takie jak Log, czy HTTP. Tutaj OSGi ma dosyć podobny
pomysł jak J2SE/JSE i J2EE/JEE. Deweloper ma pewność, że będzie mógł
skorzystać z określonych usług na dowolnej platformie, zgodnej z daną
wersją OSGi.

Jak widzisz, w tym sensie OSGi w Enterprise ma wielki sens, bo jest
pomysłem na jeszcze lepszą modularyzację takich aplikacji i jeszcze
większy ich dynamizm. Na razie najwięcej pożytku OSGi da deweloperom
różnego rodzaju kontenerów aplikacyjnych (serwerów aplikacyjnych),
którzy dosłownie łamią sobie zęby m.in. na classloading'u
(wersjonowanie klas, widoczność klas, zależności). Z czasem (za rok ?
dwa ?) z zalet OSGi skorzystają (i to bez eksperymentowania, z jakim w
zasadzie wciąż mamy do czynienia dzisiaj) także deweloperzy i
administratorzy aplikacji enterprise: bezpieczna podmiana modułów
aplikacji na nową wersję, bezpieczne współistnienie wielu wersji
aplikacji i wielu wersji modułów, itp. Niektórzy dostawcy serwerów
aplikacyjnych oferują w tym zakresie pewne rozwiązania już dzisiaj,
ale wydaje się, że w znacznie bardziej kompleksowy sposób będzie to
możliwe po małżeństwie JEE i OSGi (a przy tym będzie to standardowy
sposób, bo za OSGi stoi wielu tuzów Java - od pewnego czasu nawet
Sun). Nie ma co jednak ukrywać, że to małżeństwo - choć pewne - to
jest pieśnią przyszłości (dwa ? trzy lata ?)...

Ad 6
Jakoś nie słyszałem o specjalnych narzekaniach linuksiarzy na Java
(setki tysięcy instalacji aplikacji serwerowych w Java na Linux też o
tym nie świadczą). Myślę, że ten model bindingów nie pasuje do Java,
bo przynajmniej w serwerowej Java raczej nie stosuje się podejścia
"jedna JVM w OS, wiele korzystających z niej aplikacji". Jest to
raczej "każdej aplikacja ma wbudowany własny JVM". Najłatwiej wtedy
zapanować nad aplikacją od strony utrzymaniowej (także większość
dostawców technologii certyfikuje od strony wsparcia technicznego
konkretne typy i wersje JVM).

Inna sprawa, że serwerowym rozwiązaniom na JVM system operacyjny jest
eeee... niepotrzebny i wręcz przeszkadza. Aplikacje serwerowe Java
(przyjmijmy J2EE/JEE) powinny korzystać w 100% z tego co im daje JVM.
Typowa serwerowa JVM potrzebuje od systemu operacyjnego TYLKO dostępu
do I/O (sieć i dyski), bo sama JVM zarządza pamięcią i dostępem do
procesorów (zarządzaniem wątkami). Optymistycznie mówiąc, jest to
jakieś 0.5 procent tego co ma w sobie system operacyjny. Reszta jest
w zasadzie hmm... nieużywana. Wystarczy zatem do JVM (a raczej pod
JVM) dodać niewielką warstwę obsługującą I/O (i parę innych
pomniejszych funkcjonalności) i można uruchamiać JVM bez OS
(bezpośrednio na sprzęcie - bare metal). Oczywiście, dzisiaj
najprościej to zrobić wykorzystując wirtualizację (czyli uruchomienie
JVM następuje na "wirtualnym" sprzęcie - hypervisor, np. Xen, czy
VMware), bo ściągamy sobie z głowy tonę problemów związanych ze
sterownikami, itd. Jeszcze w BEA (teraz w Oracle) taka warstwa
została zrobiona (ma ok. 150 tys. linii kodu, ok. 2MB, bo zostały
dołożone narzędzia diagnostyczne - np. SSH i klient Syslog - oraz
trochę ciekawych optymalizacji). Fajnie to wygląda, bo zaraz po
bootowaniu maszyny (wirtualnej) pojawia się Java (zamiast ładowania
OS). A przy tym nie były wymagane ŻADNE modyfikacje po stronie JVM, a
tym bardziej działających na niej aplikacji (w tym tak złożonych jak
serwer aplikacyjny JEE).
W każdym razie zmierzam do tego, że spekulując może nie jest nam już
potrzebny system operacyjny ? Albo: JVM pełni rolę systemu
operacyjnego dla aplikacji. Zwłaszcza, że takie sprawy jak GC (w tym
determinizm Java) oraz masę optymalizacji znacznie łatwiej
zaimplementować w JVM, gdy wiemy, że OS "nie namiesza". Absolutnie
jest to droga do poszukiwania jeszcze większej wydajności aplikacji
na JVM.

Ad 7
Nie nazywałbym closures "pierdołami" (zwłaszcza jeśli przywołałeś F#),
bo gdy wreszcie trafią do Java będzie to chyba najistotniejsze
rozszerzenie Java od jej początków. Jeśli chce się z nich korzystać w
JVM teraz, to warto zwrócić się w stronę takich języków jak Ruby (i
jego implementacji na JVM - JRuby), Scala czy Groovie. Korzystający ze
Spring'a mają tutaj nawet "bezpieczniejszą" ścieżkę, bo można
zdecydować o implementacji wybranych komponentów (bean'ów) w
najbardziej do tego dopasowanym języku, nie naruszając przy tym
"konstrukcji" reszty aplikacji.
Co do programowania równoległego, STM (zakładam, że chodziło Ci o
Software Transactional Memory - http://en.wikipedia.org/wiki/Software_transactional_memory),
to takie prace także są mocno prowadzone. Największe benefity Java 5
i 6, to właśnie znacznie lepsze wbudowane kolekcje współbieżne.
Spodziewałbym się także, że STM największą popularność zdobędzie
właśnie na JVM (zresztą, strzelam, że nie będzie to Software TM, ale
raczej hybrydowe Software+Hardware TM - czy wspominałem, że Intel
jest jedną z firm mocno zaangażowanych w Java ?). Zauważ także, że
wielu twórców rozwijających języki dynamiczne i funkcjonalne (np.
JRuby i Scala) specjalnie orientuje się na JVM, bo DOKŁADNIE dzięki
temu mogą skorzystać z mechanizmów obsługi wątków, zrównoleglania,
itd. jakie daje im JVM (o wysokim poziomie przenośności nie wspomnę).
Wielkim plusem Java jest to, że są setki implementacji JVM,
budowanych pod różnym kątem (klienckie, serwerowe, dla określonych
platform, open source, itd) i właśnie obsługą specyficznych
funkcjonalności (np. obsługą Transactional Memory) ich autorzy chcą
się wyróżnić. Można oczywiście także czekać, aż jedyny dostawca CLR
zaimplementuje (znowu jako jedyny) takie funkcjonalności, z których w
dodatku będzie można skorzystać na tylko JEDNEJ platformie...

Powtórzę zatem za wieloma osobami, że największy wkład Java leży nie w
języku, ale w maszynie wirtualnej.

Reasumując: przyszłość Java wygląda bardziej różowo niż wielu innych
technologii, q.e.d. :-)

Pozdrawiam,
Waldek Kot

PS
Witaj Michale w klubie PDP ("piszących długie posty") :-)
Rafal
2008-11-16 17:16:32 UTC
Permalink
Post by w***@googlemail.com
Cześć,
To i ja dodam swoje trzy grosze...
Tradycyjnie już po tym wstępie nastawiam się na dużą porcję (z dokładką)
ciekawych informacji ze świata Javy.

I tym razem również się nie zawiodłem. :)
Dzięki.
Post by w***@googlemail.com
PS
Witaj Michale w klubie PDP ("piszących długie posty") :-)
PDP to bardzo dobry klub jest. :)
Nic tak nie poszerza horyzontów jak wiele obszernych wypowiedzi różnych
osób wokół jednego zagadnienia.

Tak trzymać.
--
Pozdrawiam
Rafal
Michal Kleczek
2008-11-16 18:36:14 UTC
Permalink
Post by w***@googlemail.com
Cześć,
To i ja dodam swoje trzy grosze...
Warto pamiętać, że Sun jest tylko jedną z setek firm wspierających
Java.
Oczywiscie w dalszej czesci jak pisze Java to rozumiem "Java Platform", a
nie tylko jezyk programowania.

[ciach]
Post by w***@googlemail.com
IBM, Oracle, Google, Red Hat,
w dużym stopniu także SAP. Nie zapominałbym także o takich gigantach
jak Nokia, czy Ericsson.
Sek w tym, ze IMHO taki np. Google nie WSPIERA Javy lecz ja PSUJE. Tak
dokladniej: jedna z najbardziej istotnych zalet Javy jest spojnosc i
standardyzacja (przede wszystkim JVM i biblioteki standardowe) - MS mial
swego czasu zakusy, zeby do tego nie dopuscic (czyli zeby byly przynajmniej
dwie Javy - MS i reszta), ale sie z tego wycofal po paru procesach. Teraz
DOKLADNIE TO SAMO robi Google przy pomocy np. Androida. Niby oprogramowanie
pisze sie w Javie ale kompatybilnosc jest TYLKO NA POZIOMIE KODU
ZRODLOWEGO.
Post by w***@googlemail.com
Java ma duże wsparcie ze strony Intel'a.
Kluczowi są jednak inni ważni odbiorcy - klienci (firmy
telekomunikacyjne, banki, firmy ubezpieczeniowe, administracja
publiczba, itd). Sorry, ale .NET w rozwiązaniach korporacyjnych jest
nieobecny (bywa Windows i MS SQL, ale to nie jest ten sam poziom co
Java Enterprise. Pomijam z oczywistych względów Office i Exchange).
Dla tych odbiorców (tj. dla klientów) ważna (najważniejsza ?) jest
możliwość wyboru pomiędzy wieloma dostawcami i ewentualnej stosunkowo
łatwej ich zmiany. Wybierając .NET wybiera się między Microsoft a ???
Moim zdaniem juz w niedalekiej przyszlosci klienci ktorych wymieniles
przestana kupowac Jave dlatego, ze na tej platformie brakuje ROZWIAZAN.
Zauwaz - ty mowisz o serwerach aplikacyjnych, a ja mowie wlasnie o Office i
Exchange. Z punktu widzenia np. firmy ubezpieczeniowej inwestycja w serwer
J2EE jest tylko i wylacznie KOSZTEM - agent ubezpieczeniowy nic z tego nie
ma. Przyszlosc lezy nie w kupowaniu serwerow aplikacyjnych, a w kupowaniu
USLUG (przykladem sprzedawcy takich uslug jest np. Google oferujacy
GoogleDocs). Z tego powodu liczba klientow inwestujacych w tego typu
infrastrukture jak serwery aplikacyjne bedzie malec, nie rosnac. Moje
pytanie brzmi: czy GoogleDocs jest zrobione w Javie???
Post by w***@googlemail.com
Ad 1. C# jest bardzo bogatym językiem i może to jest jego największa
wada. Poza tym język programowania to tylko część sposobu na
rozwiązywanie problemów za pomocą technologii. Nie przyrównywałbym
Java do F#, bo Java nie ma ambicji, aby stać się jezykiem funkcyjnym
(choćby z powodu konieczności zachowania wstecznej zgodności). Jeśli
już przyrównywać, to Scala do F#. Myślę jednak, że dobrze zdajesz
sobie sprawę, że na upowszechnienie się programowania funkcyjnego do
poziomu języków deklaratywnych przyjdzie nam poczekać jeszcze z 15
lat. Urok Java (technologii, nie języka) polega tym jednak, że i
Scala, i Java, i JRuby, i Groovie działa na JVM, którą mogę uruchomić
na setkach platform sprzętowych i OS. Co mi pozostaje przymierzając
się do C#, czy F#, czy szerzej .NET ? Windows. No comments.
Mnie sie zdaje, ze pomijanie jezykow funkcyjnych i wszystkiego tego, czego
przemysl nauczyl sie np. z Haskella jest bledem. Jezyki takie jak Scala
pozwalaja wreszcie tworzyc biblioteki (w szczegolnosci DSL takie jak np.
LINQ), ktorych uzycie jest naturalnie wkomponowane w jezyk programowania.
Oczywiscie jest i druga strona medalu - jak piszesz - Java zdobyla
popularnosc min. wlasnie dlatego, ze miala uboga skladnie i byla prosta
(np. jeszcze do niedawna nikt nie podwazal decyzji projektantow jezyka o
braku mozliwosci nadpisywania operatorow). Niestety teraz stoi w rozkroku:
z jednej strony traci prostote (np. brak zrozumienia generykow w Javie, a w
szczegolnosci wildcards jest powszechny) z drugiej strony traci spojnosc
(tzn. kolejne rozszerzenia jezyka sa "doklejane" i nie oparte na spojnym i
porzadnym projekcie jezyka i JVM - co jest kluczowe, bo niektore
konstrukcje wsparcia maszyny wirtualnej wymagaja). Zaczyna powoli
przypominac C++.
Post by w***@googlemail.com
Ad 2.
Postęp jaki wniósł Spring jest niedoprzecenienia. Nie polega jednak na
tym, że autorzy Spring'a wymyślili coś nowego, ale na UPOWSZECHNIENIU
takich technik i wzorców, jak Dependency Injection
[ciach wymienianie niewatpliwych zalet DI]

Akurat moim zdaniem Spring ze swoim uzyciem XML do - bylo nie bylo -
programowania (bo w praktyce pliki XML Springa trudno nazwac konfiguracja)
zrobil wiecej zlego niz dobrego (zreszta wycofuje sie z tego od wersji
2.5).
Post by w***@googlemail.com
Ad 3
OSGi nie zostało wymyślone po to, aby móc uruchamiać wiele aplikacji w
ramach JVM.
Owszem - OSGi az do wersji R3 (nastepnych szczerze powiem nie znam) - bardzo
silny nacisk kladlo na JVM na urzadzeniach przenosnych (na ktorych ze
wzgledu na dostepnosc zasobow uruchamianie kilku JVM jest niemozliwe) -
wlasnie ze wzgledu na swoje korzenie. Co zreszta powodowalo troche
problemow np. z powodu koniecznosci zachowania kompatybilnosci z Java 1.3
(przykladem jest tutaj rezygnacja z wykorzystania JAAS ktore sie pojawilo w
Javie 1.4)

Cala praca poswiecona na zdefiniowanie procesu ladowania klas w kontenerach
OSGi byla zrobiona wlasnie po to by moc uruchamiac niezalezne moduly w
jednej VM.
Post by w***@googlemail.com
Tym zagadnieniem zajmuje się technologia zwana Java
Isolation (m.in. tutaj http://jcp.org/en/jsr/detail?id=121).
Java Isolation jest w powijakach i taka pewnie dluugo zostanie. Bardzo dobry
artykul na ten temat napisal jeden z autorow. Zwrocil on uwage fakt, ze
akurat w tym przypadku nalezy sie zastanowic, czy w ogole takie cos jak
Java Isolates jest potrzebne. Przeciez to powiela cos, co jest dostepne w
systemie operacyjnym. Zas glownym problemem jest to, ze o ile sama
specyfikacja moze powstac, to DOBRA, PRZETESTOWANA I GODNA ZAUFANIA
implementacja jest bardzo kosztowna (w koncu systemy operacyjne rozwijaja
sie od wielu wielu lat, sa testowane przez miliony uzytkownikow i ulepszane
na podstawie wieloletnich doswiadczen). A poniewaz to juz jest zrobione, to
PO CO ROBIC TO KOLEJNY RAZ??
Post by w***@googlemail.com
OSGi ma
[ciach]

Sek w tym, ze byc moze cele sa sluszne, ale podejscie - IMHO - od d..y
strony. Skonfrontuj to z Jini, ktore rozwiazuje TE SAME problemy
rozwiazujac przy okazji szereg innych:
- dynamiczny binding uslug (serwisow) (Jini lookup spec)
- izolacja aplikacji (uslug) poprzez zalozenie, ze one po prostu sa
uruchamiane w oddzielnej VM (byc moze zdalnie) - co wiecej - wcale nie
pociaga to za soba koniecznosci zdalnych wywolan metod.
- szeroko pojete bezpieczenstwo (nie bede teraz wnikal - mozna poczytac
sobie o tym)
- komunikacja ze zdalnymi uslugami (JERI)
- komunikacja i przetwarzanie asynchroniczne (Javaspaces)
- wykrywanie bledow i "self healing" (leasing i tak idiotycznie traktowany
przez tworcow Springa RemoteException)

Co wiecej - wszystkie specyfikacje (i implementacja) jest oparta o
mechanizmy standardowo dostepne w J2SE (w odroznieniu od np.
ConditionalPermissionAdmin w OSGi)
Post by w***@googlemail.com
Jak widzisz, w tym sensie OSGi w Enterprise ma wielki sens, bo jest
pomysłem na jeszcze lepszą modularyzację takich aplikacji i jeszcze
większy ich dynamizm.
przynajmniej w serwerowej Java raczej nie stosuje się podejścia
"jedna JVM w OS, wiele korzystających z niej aplikacji". Jest to
raczej "każdej aplikacja ma wbudowany własny JVM". Najłatwiej wtedy
zapanować nad aplikacją od strony utrzymaniowej (także większość
dostawców technologii certyfikuje od strony wsparcia technicznego
konkretne typy i wersje JVM).
To PO CO OSGi?
Post by w***@googlemail.com
Na razie najwięcej pożytku OSGi da deweloperom
różnego rodzaju kontenerów aplikacyjnych (serwerów aplikacyjnych),
którzy dosłownie łamią sobie zęby m.in. na classloading'u
(wersjonowanie klas, widoczność klas, zależności).
No wlasnie - ale PO CO sobie lamia zeby skoro i tak w jednym kontenerze
uruchamia sie w praktyce jedna aplikacje??
Post by w***@googlemail.com
Ad 6
Jakoś nie słyszałem o specjalnych narzekaniach linuksiarzy na Java
(setki tysięcy instalacji aplikacji serwerowych w Java na Linux też o
tym nie świadczą).
Ja nie napisalem, ze narzekaja, ale ze traktuja po macoszemu. Po prostu mnie
sie zdaje, ze pozycjonowanie Javy wylacznie jako technolgii do tworzenia
oprogramowania serwerowego jest bledem, bo powoduje spychanie jej do niszy
podobnej do COBOLa.
Post by w***@googlemail.com
Inna sprawa, że serwerowym rozwiązaniom na JVM system operacyjny jest
eeee... niepotrzebny i wręcz przeszkadza. Aplikacje serwerowe Java
(przyjmijmy J2EE/JEE) powinny korzystać w 100% z tego co im daje JVM.
Typowa serwerowa JVM potrzebuje od systemu operacyjnego TYLKO dostępu
do I/O (sieć i dyski), bo sama JVM zarządza pamięcią i dostępem do
procesorów (zarządzaniem wątkami).
Przepraszam, ale to jest bzdura. Wszelkie inicjatywy stworzenia systemu
operacyjnego Java juz dawno zmarly (istnieje jeszcze JNode, ale to jest
czysto hobbystyczne przedsiewziecie, zreszta malo juz aktywne).
Post by w***@googlemail.com
Optymistycznie mówiąc, jest to
jakieś 0.5 procent tego co ma w sobie system operacyjny. Reszta jest
w zasadzie hmm... nieużywana.
Tak tak... a np. filesystem?? Czy ogolniej - obsluga IO? Juz nie mowie o
GUI - w koncu XServer na prawde nie jest pisany w javie.
Post by w***@googlemail.com
Jeszcze w BEA (teraz w Oracle) taka warstwa
została zrobiona (ma ok. 150 tys. linii kodu, ok. 2MB, bo zostały
dołożone narzędzia diagnostyczne - np. SSH i klient Syslog - oraz
trochę ciekawych optymalizacji). Fajnie to wygląda, bo zaraz po
bootowaniu maszyny (wirtualnej) pojawia się Java (zamiast ładowania
OS). A przy tym nie były wymagane ŻADNE modyfikacje po stronie JVM, a
tym bardziej działających na niej aplikacji (w tym tak złożonych jak
serwer aplikacyjny JEE).
Rozumiem, ze to jest 150 tys lini kodu + ilestam linii kodu hypervisora +
ilestam linii kodu sterownikow urzadzen, ktore sa niezbedne, zeby
hypervisor mogl dzialac. Innymi slowy to "iles tam" to jest wlasnie system
operacyjny (tylko troche inny).
Post by w***@googlemail.com
Ad 7
Nie nazywałbym closures "pierdołami" (zwłaszcza jeśli przywołałeś F#),
bo gdy wreszcie trafią do Java będzie to chyba najistotniejsze
rozszerzenie Java od jej początków. Jeśli chce się z nich korzystać w
JVM teraz, to warto zwrócić się w stronę takich języków jak Ruby (i
jego implementacji na JVM - JRuby), Scala czy Groovie. Korzystający ze
Spring'a mają tutaj nawet "bezpieczniejszą" ścieżkę, bo można
zdecydować o implementacji wybranych komponentów (bean'ów) w
najbardziej do tego dopasowanym języku, nie naruszając przy tym
"konstrukcji" reszty aplikacji.
Co do programowania równoległego, STM (zakładam, że chodziło Ci o
Software Transactional Memory -
Tak
Post by w***@googlemail.com
http://en.wikipedia.org/wiki/Software_transactional_memory),
to takie prace także są mocno prowadzone. Największe benefity Java 5
i 6, to właśnie znacznie lepsze wbudowane kolekcje współbieżne.
Tyle, ze wspolbieznosc (oprocz istniejacego od samego poczatku slowka
kluczowego "synchronized") nie jest wbudowana w jezyk. Wiec - pomimo, ze
bardzo mi sie podoba biblioteka Douga Leigh (teraz java.util.concurrent) to
niestety nadal musze podejmowac decyzje czy zmienna ma byc typu X, czy
Future<X>, czy tez AtomicRefernce<X>. I nie mam zadnego wplywu na to, jaka
decyzje podjal dostawca biblioteki, ktora uzywasz.
A.L kiedys na pl.comp.programming polecil ksiazke (nie pomne teraz niestety
tytulu), gdzie podstawa byl jezyk/platforma OZ
(http://en.wikipedia.org/wiki/Oz_programming_language). Zobacz jak to MOZE
byc zrobione.
Post by w***@googlemail.com
Powtórzę zatem za wieloma osobami, że największy wkład Java leży nie w
języku, ale w maszynie wirtualnej.
To prawda.
--
Michal
Michal Kleczek
2008-11-16 19:47:13 UTC
Permalink
Post by Michal Kleczek
decyzje podjal dostawca biblioteki, ktora uzywasz.
A.L kiedys na pl.comp.programming polecil ksiazke (nie pomne teraz
niestety tytulu), gdzie podstawa byl jezyk/platforma OZ
(http://en.wikipedia.org/wiki/Oz_programming_language). Zobacz jak to MOZE
byc zrobione.
Znalazlem:
Peter Van Roy and Seif Haridi
"Concepts, Techniques, and Models of Computer Programming"
http://www.info.ucl.ac.be/~pvr/book.html
--
Michal
A.L.
2008-11-17 00:16:51 UTC
Permalink
Post by Michal Kleczek
Post by Michal Kleczek
decyzje podjal dostawca biblioteki, ktora uzywasz.
A.L kiedys na pl.comp.programming polecil ksiazke (nie pomne teraz
niestety tytulu), gdzie podstawa byl jezyk/platforma OZ
(http://en.wikipedia.org/wiki/Oz_programming_language). Zobacz jak to MOZE
byc zrobione.
Peter Van Roy and Seif Haridi
"Concepts, Techniques, and Models of Computer Programming"
http://www.info.ucl.ac.be/~pvr/book.html
Bardzo slusznie. Tylko.... Smietniki pelne sa Najlepszych Rozwiazan.

Ktos dawno temu napisal ze "w przyszlosci zjawisko zwane Java nei
bedzie badane przez scientystow komputerowych a pzrez specjalistow od
biznesu, reklamy i psychologii"

Niestety, jezyk Mozart-OZ zmarl na uwiad: kto mial zrobic doktorat,
zrobil doktorat, kto mial zrobic habilitacje, zrobil habilitacje. I
udal sie do wlasnych, tym razem juz innych, zajec. Mozart-OZ nie jest
niczyim "najwazniejszym problemem" i jako taki nie nadaje sie do
zastosowan komercyjnych. Zreszta, dyskusyjne jest stwierdzenie ze on
ma "wszystko" i to "wszystko" jest zrobione najlepiej.

Podobny los podzielily twory Szkoly Wirtha, a konkretnie jezyk
Modula-2, jezyk Oberon i system operacyjny Oberon, wokol to ktorych
rzeczy bylo kiedys wiele wrzawy.

Jest taka ksiazka, niejakiego Richarda Gilberta, "Patterns of
Software: Tales from the Software Community" (nic nie ma wspolnego z
Software Patterns). W owej ksiazce autor uzasadnia teze ze adapatcja
jezyka pzrez srodowisko nie jest procesem techicznym, a socjalnym. Na
skutek tego, niekoniecznie wygrywa produkt ktory jest technicznie
lepszy od pozostalych. I stad wlasnie "zjawisko Javy"

A.L.
Michal Kleczek
2008-11-17 05:49:21 UTC
Permalink
Post by A.L.
Post by Michal Kleczek
Post by Michal Kleczek
decyzje podjal dostawca biblioteki, ktora uzywasz.
A.L kiedys na pl.comp.programming polecil ksiazke (nie pomne teraz
niestety tytulu), gdzie podstawa byl jezyk/platforma OZ
(http://en.wikipedia.org/wiki/Oz_programming_language). Zobacz jak to
MOZE byc zrobione.
Peter Van Roy and Seif Haridi
"Concepts, Techniques, and Models of Computer Programming"
http://www.info.ucl.ac.be/~pvr/book.html
Bardzo slusznie. Tylko.... Smietniki pelne sa Najlepszych Rozwiazan.
Ktos dawno temu napisal ze "w przyszlosci zjawisko zwane Java nei
bedzie badane przez scientystow komputerowych a pzrez specjalistow od
biznesu, reklamy i psychologii"
Alez ja sie z tym jak najbardziej zgadzam i nie twierdze, ze to OZ powinien
zastapic Jave. Ale na pytanie: "Czy warto sie jeszcze uczyc Javy"
odpowiadam - "nie - nie warto, sa rzeczy znacznie ciekawsze,
nowoczesniejsze i... bardziej przyszlosciowe". Za pare(nascie) lat Java to
bedzie taki Cobol (roboty od cholery, bo zainwestowano juz ogromne
pieniadze, ale kto by robil nowe rzeczy w Cobolu?)
--
Michal
A.L.
2008-11-17 13:44:25 UTC
Permalink
Post by Michal Kleczek
Alez ja sie z tym jak najbardziej zgadzam i nie twierdze, ze to OZ powinien
zastapic Jave. Ale na pytanie: "Czy warto sie jeszcze uczyc Javy"
odpowiadam - "nie - nie warto, sa rzeczy znacznie ciekawsze,
nowoczesniejsze i... bardziej przyszlosciowe".
Tylko za znajmosc ich nikt nie placi. A jakos na chlebek trzeba
zarobic...

A.L.
Mateusz Ludwin
2008-11-17 09:08:42 UTC
Permalink
Post by A.L.
Ktos dawno temu napisal ze "w przyszlosci zjawisko zwane Java nei
bedzie badane przez scientystow komputerowych a pzrez specjalistow od
biznesu, reklamy i psychologii"
Niech zgadnę - ktoś specjalizujący się w Prologu?
--
Mateusz Ludwin mateuszl [at] gmail [dot] com
A.L.
2008-11-17 13:47:46 UTC
Permalink
Post by Mateusz Ludwin
Post by A.L.
Ktos dawno temu napisal ze "w przyszlosci zjawisko zwane Java nei
bedzie badane przez scientystow komputerowych a pzrez specjalistow od
biznesu, reklamy i psychologii"
Niech zgadnę - ktoś specjalizujący się w Prologu?
JA sie nei specjalizuje w Prologu. Ja uzywam Prologu bo tego co robie
nie da sie w sposob rozsadny zrobic w Javei czy C++ . Przy czym "nei
da sie zrobic w Javie czy C++" nei nalezy interpretowac ze "te jezyki
sie nei nadaja". Ndaja sie. Ale albo nei ma odpowiednich bibliotek w
tych jezykach, albo sa ale maja ograniczona funkcjonalnosc, albo
kosztuja tyle ze mozg staje.

A.L.
Mateusz Ludwin
2008-11-17 14:16:37 UTC
Permalink
Post by A.L.
Post by Mateusz Ludwin
Post by A.L.
Ktos dawno temu napisal ze "w przyszlosci zjawisko zwane Java nei
bedzie badane przez scientystow komputerowych a pzrez specjalistow od
biznesu, reklamy i psychologii"
Niech zgadnę - ktoś specjalizujący się w Prologu?
JA sie nei specjalizuje w Prologu. Ja uzywam Prologu bo tego co robie
nie da sie w sposob rozsadny zrobic w Javei czy C++ . Przy czym "nei
da sie zrobic w Javie czy C++" nei nalezy interpretowac ze "te jezyki
sie nei nadaja". Ndaja sie. Ale albo nei ma odpowiednich bibliotek w
tych jezykach, albo sa ale maja ograniczona funkcjonalnosc, albo
kosztuja tyle ze mozg staje.
Ja nigdzie nie twierdziłem że Java miałaby zastąpić Prolog. Tylko że popularne
jest myślenie odwrotne, skoro Java nie nadaje się do wielu rzeczy w których
wykorzystywane jest C, to znaczy że Java jest pomyłką.
--
Mateusz Ludwin mateuszl [at] gmail [dot] com
Jacek Czerwinski
2008-11-17 11:10:48 UTC
Permalink
Post by A.L.
Jest taka ksiazka, niejakiego Richarda Gilberta, "Patterns of
Software: Tales from the Software Community" (nic nie ma wspolnego z
Software Patterns). W owej ksiazce autor uzasadnia teze ze adapatcja
jezyka pzrez srodowisko nie jest procesem techicznym, a socjalnym. Na
skutek tego, niekoniecznie wygrywa produkt ktory jest technicznie
lepszy od pozostalych. I stad wlasnie "zjawisko Javy"
Że o pewnym języku na P. nie wspomnę...
A.L.
2008-11-17 13:44:59 UTC
Permalink
Post by A.L.
Jest taka ksiazka, niejakiego Richarda Gilberta, "Patterns of
Software: Tales from the Software Community" (nic nie ma wspolnego z
Software Patterns). W owej ksiazce autor uzasadnia teze ze adapatcja
jezyka pzrez srodowisko nie jest procesem techicznym, a socjalnym. Na
skutek tego, niekoniecznie wygrywa produkt ktory jest technicznie
lepszy od pozostalych. I stad wlasnie "zjawisko Javy"
?e o pewnym j?zyku na P. nie wspomn?...
Perl? Python?

A.L.
w***@googlemail.com
2008-11-16 22:09:06 UTC
Permalink
Post by Michal Kleczek
Sek w tym, ze IMHO taki np. Google nie WSPIERA Javy lecz ja PSUJE.
W pewnym stopniu się z Tobą zgodzę, choć taką politykę Google przyjął.
Na politykę nie poradzisz...
Dla mnie Android to w dużym stopniu specjalizowana JVM, która działa
na trochę innym bytecode. Śledząc niektóre blogi (http://beust.com/
weblog, notabene dawniej jeden z głównych deweloperów kontenera EJB w
WebLogic Server i autor TestNG) jestem przekonany, że mechanizm
konwersji bytecode'u Java na bytecode Dalvik (Android) będzie się
odbywał automatycznie, a dla użytkownika będzie to wyglądało, jak
normalne uruchomienie aplikacji Java (taki JIT, tyle, że najpierw
między bytecode'ami).
Zresztą, nawet mocniej jestem sceptyczny w stosunku do Apple iPhone,
który zachowuje się jak typowy monopolista (chociaż nim nie jest),
zamykając w dziwaczny sposób otwartość iPhone (gdzieś czytałem o
zapisach LICENCYJNYCH zabraniających uruchamiać w iPhone aplikacji,
które same działają w kontenerze. Nie mówi się o JVM, ale czymże innym
jest JVM, jak nie kontenerem dla aplikacji...). Trudno - grają na
swoje konto, rynek (także deweloperzy) to zweryfikuje. Na razie
dewelopersko bliżej mi do telefonów z Android niż do iPhone...

Pozdrawiam,
Waldek Kot
w***@googlemail.com
2008-11-16 22:10:01 UTC
Permalink
Post by Michal Kleczek
Akurat moim zdaniem Spring ze swoim uzyciem XML do - bylo nie bylo -
programowania (bo w praktyce pliki XML Springa trudno nazwac konfiguracja)
zrobil wiecej zlego niz dobrego (zreszta wycofuje sie z tego od wersji
2.5).
To jest jeden z mitów krążących o Spring-u. To że UŻYTKOWNICY Spring'a
najczęściej wybierają konfigurację poprzez XML, nie znaczy, że to
jedyna droga konfiguracji. Od dawna (czyli od kiedy pojawiła się Java
5) są adnotacje, wcześniej można było korzystać z XDoclet'ów. Od
początku można było używać programowego tworzenia bean'ów. Sposobów na
radzenie sobie z nadmiarem XML jest wiele (adnotacje, Spring
JavaConfig, użycie języków dynamicznych). Drogę "konfiguracja poprzez
XML" wybrało zresztą wiele (większość ?) rozwiązań (w tym .NET).
Warto także zaznaczyć, że jeśli nie XML to co ? Zgoda, że czasem da
się zrobić prościej, ale często potrzeba bardziej zaawansowanych
mechanizmów wyrażania zależności, walidacji, itp. O powszechnym
wsparciu XML w różnorodnych narzędziach też warto wspomnieć. Nie
fetysztyzuję XML - narzędzie jak każde, ma swoje lepsze i gorsze
zastosowania (podobnie jak JSON, adnotacje i każde inne rozwiązanie).
Z czasem sytuacja będzie się stabilizować i łatwiej będzie wybrać
właściwe narzędzie do problemu.
Wartość Spring'a leży także w tym, że jako deweloper masz dosyć
szeroki wybór. One size does not fit all...

Pozdrawiam,
Waldek Kot
Michal Kleczek
2008-11-17 06:26:29 UTC
Permalink
Post by w***@googlemail.com
Post by Michal Kleczek
Akurat moim zdaniem Spring ze swoim uzyciem XML do - bylo nie bylo -
programowania (bo w praktyce pliki XML Springa trudno nazwac
konfiguracja) zrobil wiecej zlego niz dobrego (zreszta wycofuje sie z
tego od wersji 2.5).
To jest jeden z mitów krążących o Spring-u. To że UŻYTKOWNICY Spring'a
najczęściej wybierają konfigurację poprzez XML, nie znaczy, że to
jedyna droga konfiguracji. Od dawna (czyli od kiedy pojawiła się Java
5) są adnotacje, wcześniej można było korzystać z XDoclet'ów. Od
początku można było używać programowego tworzenia bean'ów.
Czyzby? Sprobuj uzyc Acegi Security bez XMLa i bez Springa. Sprobuj uzyc
ProzyFactoryBean bez XMLa i Springa. Sprobuj uzyc Spring JDBC bez XMLa.
Mialo byc tak, ze "wreszcie aplikacja jest niezalezna od kontenera", wyszlo
jak zwykle...
--
Michal
w***@googlemail.com
2008-11-17 13:36:13 UTC
Permalink
Post by Michal Kleczek
Sprobuj uzyc Acegi Security bez XMLa i bez Springa. Sprobuj uzyc
ProzyFactoryBean bez XMLa i Springa. Sprobuj uzyc Spring JDBC bez XMLa.
Zapewniam, można. Jeśli naprawdę nie chcesz używać XML, to Spring da
Ci parę innych dróg.
Post by Michal Kleczek
Mialo byc tak, ze "wreszcie aplikacja jest niezalezna od kontenera", wyszlo
jak zwykle...
Znowu - nie patrzę na to tak czarno-biało. W totalną niezależność,
zwłaszcza dziejącą się automagicznie, nie wierzę. Sztuką jest
sensownie skorzystać z unikalnych cech, które daje Ci kontener (a
także np. baza danych), niż na siłę się zawężać.
Na pytanie czy używając Spring'a można zapewnić większy poziom
przenośności pomiędzy kontenerami, moim zdaniem odpowiedź brzmi: tak.
Same techniki DI i AOP, popularyzowane przez Spring'a, pozwalają to
łatwiej uzyskać. Podobnie wiele abstraktów, które Spring stworzył
ponad JDBC, JMS, JTA dobrze to pokazują.

Pozdrawiam,
Waldek Kot
w***@googlemail.com
2008-11-16 22:11:40 UTC
Permalink
Post by Michal Kleczek
Java Isolation jest w powijakach i taka pewnie dluugo zostanie. Bardzo dobry
artykul na ten temat napisal jeden z autorow. Zwrocil on uwage fakt, ze
akurat w tym przypadku nalezy sie zastanowic, czy w ogole takie cos jak
Java Isolates jest potrzebne. Przeciez to powiela cos, co jest dostepne w
systemie operacyjnym. Zas glownym problemem jest to, ze o ile sama
specyfikacja moze powstac, to DOBRA, PRZETESTOWANA I GODNA ZAUFANIA
implementacja jest bardzo kosztowna (w koncu systemy operacyjne rozwijaja
sie od wielu wielu lat, sa testowane przez miliony uzytkownikow i ulepszane
na podstawie wieloletnich doswiadczen). A poniewaz to juz jest zrobione, to
PO CO ROBIC TO KOLEJNY RAZ??
O tym, czy będzie to przydatne zdecydują deweloperzy. Ja do tego tak
zero-jedynkowo nie podchodzę - Java Isolation ma być pomysłem na
zaspokojenie konkretnej potrzeby i ROZSZERZAĆ możliwości, a NIE
ZASTĘPOWAĆ istniejące. Bardzo konkretny przypadek użycia Java
Isolation, to niemożność odpalenia wielu JVM (np. brak OS'a albo OS
jednoprocesowy), ale przy tym wymaganie, aby było możliwe odpalenie
wielu quasi-procesów (tj. o wyższym poziomie izolacji, niż to co daje
wątek). Zresztą - a propos wątków - je także wymyślono dlatego, że do
pewnych zastosowań procesy OS są zbyt ciężkie. Analogia Java Isolation
do wątków/procesów dla mnie jest wyraźna.

Pozdrawiam,
Waldek Kot
Michal Kleczek
2008-11-17 06:32:09 UTC
Permalink
Post by w***@googlemail.com
Post by Michal Kleczek
Java Isolation jest w powijakach i taka pewnie dluugo zostanie. Bardzo
dobry artykul na ten temat napisal jeden z autorow. Zwrocil on uwage
fakt, ze akurat w tym przypadku nalezy sie zastanowic, czy w ogole takie
cos jak Java Isolates jest potrzebne. Przeciez to powiela cos, co jest
dostepne w systemie operacyjnym. Zas glownym problemem jest to, ze o ile
sama specyfikacja moze powstac, to DOBRA, PRZETESTOWANA I GODNA ZAUFANIA
implementacja jest bardzo kosztowna (w koncu systemy operacyjne rozwijaja
sie od wielu wielu lat, sa testowane przez miliony uzytkownikow i
ulepszane na podstawie wieloletnich doswiadczen). A poniewaz to juz jest
zrobione, to PO CO ROBIC TO KOLEJNY RAZ??
O tym, czy będzie to przydatne zdecydują deweloperzy. Ja do tego tak
zero-jedynkowo nie podchodzę - Java Isolation ma być pomysłem na
zaspokojenie konkretnej potrzeby i ROZSZERZAĆ możliwości, a NIE
ZASTĘPOWAĆ istniejące. Bardzo konkretny przypadek użycia Java
Isolation, to niemożność odpalenia wielu JVM (np. brak OS'a albo OS
jednoprocesowy), ale przy tym wymaganie, aby było możliwe odpalenie
wielu quasi-procesów (tj. o wyższym poziomie izolacji, niż to co daje
wątek).
W innym poscie piszesz o tym, jak to fajnie zrezygnowac z wieloprocesowego
OSa (bo on ma "narzut") i odpalanie wszystkiego w jednej JVM. Czyli -
rezygnujemy z OS, a poniewaz funkcjonalnosc OS jest - jak sie okazuje -
niezbedna, implementujemy ja w Javie jako isolates.
Znowu - zamiast wymyslac cos nowego, bedziemy teraz robic cos co dawno juz
jest zrobione, tylko ze teraz w Javie.
Ja tego nie kupuje.
--
Michal
jarekr
2008-11-17 11:48:05 UTC
Permalink
Post by Michal Kleczek
W innym poscie piszesz o tym, jak to fajnie zrezygnowac z wieloprocesowego
OSa (bo on ma "narzut") i odpalanie wszystkiego w jednej JVM. Czyli -
rezygnujemy z OS, a poniewaz funkcjonalnosc OS jest - jak sie okazuje -
niezbedna, implementujemy ja w Javie jako isolates.
Znowu - zamiast wymyslac cos nowego, bedziemy teraz robic cos co dawno juz
jest zrobione, tylko ze teraz w Javie.
Ja tego nie kupuje.
Nie chodzi o to co kupisz tylko co sprzedasz.

--
jarekr
w***@googlemail.com
2008-11-17 13:37:42 UTC
Permalink
Post by Michal Kleczek
W innym poscie piszesz o tym, jak to fajnie zrezygnowac z wieloprocesowego
OSa (bo on ma "narzut") i odpalanie wszystkiego w jednej JVM. Czyli -
rezygnujemy z OS, a poniewaz funkcjonalnosc OS jest - jak sie okazuje -
niezbedna, implementujemy ja w Javie jako isolates.
Chyba nie próbujesz nawet zrozumieć sensu moich wypowiedzi...

Nie ma musu używania Java Isolates. Stąd podkreślone przeze mnie
wyrazy w "ROZSZERZAĆ możliwości" i "NIE ZASTĘPOWAĆ istniejących".
Post by Michal Kleczek
Ja tego nie kupuje.
Nie musisz. NTG.

Pozdrawiam,
Waldek Kot
Michal Kleczek
2008-11-17 14:06:51 UTC
Permalink
Post by w***@googlemail.com
Post by Michal Kleczek
W innym poscie piszesz o tym, jak to fajnie zrezygnowac z
wieloprocesowego OSa (bo on ma "narzut") i odpalanie wszystkiego w jednej
JVM. Czyli - rezygnujemy z OS, a poniewaz funkcjonalnosc OS jest - jak
sie okazuje - niezbedna, implementujemy ja w Javie jako isolates.
Chyba nie próbujesz nawet zrozumieć sensu moich wypowiedzi...
Nie ma musu używania Java Isolates. Stąd podkreślone przeze mnie
wyrazy w "ROZSZERZAĆ możliwości" i "NIE ZASTĘPOWAĆ istniejących".
A w jaki sposob Java Isolates rozszerzaja jakies mozliwosci?

Z mojej strony - w kontekscie tego watku w kazdym razie - cala dyskusja jest
wlasnie o tym, ze - moim zdaniem - Java (jako platforma oraz
ruch/spolecznosc) przestala oferowac cokolwiek nowego, a jedynie probuje
wywazac otwarte juz dawno drzwi - i z tego wlasnie powodu juz po niej :).
--
Michal
w***@googlemail.com
2008-11-17 15:23:19 UTC
Permalink
Post by w***@googlemail.com
Nie ma musu używania Java Isolates. Stąd podkreślone przeze mnie
wyrazy w "ROZSZERZAĆ możliwości" i "NIE ZASTĘPOWAĆ istniejących".
Rozszerzenie możliwości tego co jest w zakresie multitasking'u
dostępne w Javie (znowu - właściwie dostępne w JVM, bo aplikacje Perl,
PHP, czy Python działające w JVM też mogą z tego podejścia
skorzystać). Rozszerzenie jest dosyć oczywiste - jest to podejście
zapewniające wyższy poziom separacji (izolacji) danych aplikacji niż
ten, który dają wątki, a przy tym spora część zasobów JVM jest
współdzielona (czyli zużycie zasobów będzie mniejsze niż w podejściu,
w którym uruchamiana jest nowa JVM). Także komunikacja inter-isolate
jest lżejsza niż inter-process.

Pozdrawiam,
Waldek Kot
Michal Kleczek
2008-11-17 16:43:00 UTC
Permalink
Post by w***@googlemail.com
Post by w***@googlemail.com
Nie ma musu używania Java Isolates. Stąd podkreślone przeze mnie
wyrazy w "ROZSZERZAĆ możliwości" i "NIE ZASTĘPOWAĆ istniejących".
Rozszerzenie możliwości tego co jest w zakresie multitasking'u
dostępne w Javie (znowu - właściwie dostępne w JVM, bo aplikacje Perl,
PHP, czy Python działające w JVM też mogą z tego podejścia
skorzystać). Rozszerzenie jest dosyć oczywiste - jest to podejście
zapewniające wyższy poziom separacji (izolacji) danych aplikacji niż
ten, który dają wątki, a przy tym spora część zasobów JVM jest
współdzielona (czyli zużycie zasobów będzie mniejsze niż w podejściu,
w którym uruchamiana jest nowa JVM).
I tu jest pies pogrzebany - problemem tak naprawde jest to, ze JVM
jest "ciezka". Moze zamiast wiec probowac wcisnac wszystko w jedna maszyne
wirtualna warto byloby po prostu ja odchudzic i spowodowac, ze odpalenie
wielu maszyn wirtualnych nie zzera tyle zasobow?
Podejscie "wszystko w jednym VM" jest o tyle bez sensu, ze trzeba
implementowac rzeczy, ktore sa od dawna swietnie wspierane przez OS.
Przykladem sa uprawnienia do plikow i integracja z OSowymi mechanizmami
autentykacji/autoryzacji. Uzywajac LAMP nie ma z tym problemu - po prostu
skrypt (dajmy na to PHP) odpalany jest jako oddzielny proces w kontekscie
konkretnego uzytkownika systemu.
W aplikacji J2EE trzeba to oczywiscie zaimplementowac "recznie", bo jest
jeden proces dzialajacy w kontekscie jednego uzytkownika.
--
Michal
gucio
2008-11-17 19:48:33 UTC
Permalink
mialem nie pisac na ten temat ale liczba watkow przytloczyla. Nie
zamierzam tutaj szpanowac iloscia skrotow etc. bo pracuje komercyjnie
pol roku i nie bede mial szans w takiej dyskusji ale... W 1996 r. na 1
roku studiow poszedlem do ksiegarni kupic ksiazke Kerninghan, Ritchie
"Jezyk ANSI C" (o programowaniu nie wiedzialem NIC) i uslyszalem. Ta
ksiazka juz nie bedzie dostepna :))))) bo teraz juz wszyscy w C++
programuja. Dobra, nauczylem sie C++ (Symfonia, Pasja etc.), pozniej
C ;)))) Pozniej Java. A teraz, kiedy myslalem, ze C++ sie nie
przyda... okazuje sie, ze korzystam z bibliotek w C++ w programie
javowskim i styk C++/Java jest bardzo korzystny. Ale do meritum -
odpowiadam autorowi 1szego posta. Jak sie cos godnego pojawi to sie
nauczymy ;))))) Nie ma problemu! I bedziemy w tym tez programowac.
Prosze sie nie martwic. Na razie dobrze sie pisze w Javie.
w***@googlemail.com
2008-11-17 20:39:42 UTC
Permalink
Post by Michal Kleczek
I tu jest pies pogrzebany - problemem tak naprawde jest to, ze JVM
jest "ciezka". Moze zamiast wiec probowac wcisnac wszystko w jedna maszyne
wirtualna warto byloby po prostu ja odchudzic i spowodowac, ze odpalenie
wielu maszyn wirtualnych nie zzera tyle zasobow?
Java VM (mówię o mainstream'owych JVM) jest w implementacji dosyć
podobna do innych maszyn wirtualnych. Sama taka JVM też wiele zasobów
nie pożera - między 64 a 300 MB RAM (te wyższe wartości wynikają
przede wszystkim z różnego rodzaju buforów, w tym na potrzeby
kompilacji bytecode'u do kodu natywnego oraz optymalizacji - mniej
wyrafinowane JVM raczej idą w stronę mniejszych wartości). Czyli w
porównaniu do typowego serwerowego OS, to JVM jest bardzo lekka.
Bardziej to dotyczy JVM klienckich niż serwerowych, ale zgadzam się,
że jest potrzeba większej modularyzacji takiej JVM, w tym ładowania
mniejszej ilości bibliotek ma początek (praktyczne efekty takiej
lepszej modularyzacji pod kątem appletów można zresztą zobaczyć w
ostatnim wydaniu sunowskiej JVM - HotSpot 1.6 update 10).
Prawdopodobnie tym, co przysłużyłoby się JVM (znowu, tym popularnym)
to przejście z modelu stosowego na model rejestrowy (jako bardziej
naturalny i bliższy typowym architekturom dzisiejszych procesorów).
Jest na ten temat sporo badań (np. na acm.org). Nie ma oczywiście nic
za darmo i np. wielkość kodu znacznie rośnie (bo bytecode Java jest
stosunkowo zwięzły - z takim zamysłem zresztą był projektowany przed
laty). Sprawa przejścia na "JVM rejestrowy" jest też dosyć ;-) złożona
w wykonaniu...

Polecam także przyjrzeć się projektowi JRuby (gdzie także można
znaleźć "polski wkład" ;-) - http://jruby.codehaus.org/. Jak się
okazuje chłopaki doprowadzili do sytuacji, w której większość
benchmarków Ruby na JVM działa szybciej niż w Ruby na C (czasem
wielokrotnie szybciej). Zresztą nie tylko wydajność była tu motywacją
za wykorzystaniem JVM. Polecam też blog Charles'a Nuttera (http://
blog.headius.com/). Marcin (lopex) - zacząłbyś gdzieś opisywać swoje
doświadczenia, he ?
Post by Michal Kleczek
Podejscie "wszystko w jednym VM" jest o tyle bez sensu, ze trzeba
implementowac rzeczy, ktore sa od dawna swietnie wspierane przez OS.
Przykladem sa uprawnienia do plikow i integracja z OSowymi mechanizmami
autentykacji/autoryzacji.
Tak, ale OS nie jest jedynym tutaj "dostawcą" tego rodzaju usług.
Zresztą dla aplikacji, security na poziomie OS mało się nadaje, bo
jest zbyt grube (zostało wymyślone raczej na potrzeby dostępu do
zasobów OS, w tym plików). Zasoby aplikacyjne są z zasady znacznie
bardziej drobnoziarniste (wykonywanie metody, dostęp do usługi, itd.).
Raczej też korzysta się (przynajmniej taki model jest popularyzowany
prez JEE) z ról, czyli podziału security dokonywanego na poziomie
aplikacji. Role mogą być też dynamiczne. W zasadzie, to security OS
używa się tylko do wystartowania procesu JVM, czasem (coraz rzadziej)
integruje się użytkowników i grupy w OS poprzez ich przypisanie do ról
aplikacyjnych.

W każdym razie, nawet reimplementując te funkcjonalności wciąż
poruszamy się w ramach owych 0.5% funkcjonalności OS, której tak
naprawdę potrzebuje z OS serwerowa JVM. Widać tutaj także siłę
współpracy hypervisora z JVM:
- zwykle hypervisor dostarcza mechanizmy przechowywania danych (fajne
jest to że te mechanizmy są zwirtualizowane - korzystającemu z nich
wydaje się że korzysta ze zwykłego lokalnego dysku SCSI, podczas gdy
fizycznie, te dane mogą być w lokalnym SCSI, na NAS, iSCSI i innych
wspieranych urządzeniach, w tym w pamięci). Pozostaje do tego dorobić
filesystem (co nie jest skomplikowaną sprawą - znowu vide 2MB warstwa
bare-metal - można też skorzystać z conajmniej kilkunastu wygrzanych
implementacji filesystemów).
- co do praw dostępu do plików, to można je zaimplementować na
poziomie własnego (tj. wbudowanego w warstwę bare-metal) filesystemu.
Można też (np. poprzez NAS) skorzystać z tego co daje zdalny storage.
- to samo dotyczy autentykacji i autoryzacji - część z tego robi
hypervisor (i jego system zarządczy), część bare-metal pod JVM, resztę
daje JVM + kontener aplikacyjny.

Bezpieczeństwo obejmuje wiele obszarów i oczywiście upraszczam, ale
prawda jest też taka, że eliminując OS i - dla Java - zastępując go
warstwą hypervisor+bare-metal JVM - eliminuje się źródło wielu
kłopotów z security (= OS). Nawet tylko przez to, że hypervisor jest
mało znany hackerom (przynajmniej na razie). Jest to podobne do
dyskusji o security IE vs. Firefox czy Windows vs. Mac.
Post by Michal Kleczek
Uzywajac LAMP nie ma z tym problemu - po prostu
skrypt (dajmy na to PHP) odpalany jest jako oddzielny proces w kontekscie
konkretnego uzytkownika systemu.
W Java (JEE) jest tak samo - proces JVM odpala się na uprawnieniach
konkretnego użytkownika systemu. W wirtualizacji dodatkowo jest
jeszcze ochrona maszyny wirtualnej (guest'a) i hypervisor'a (hosta).
Nawet jeśli zhakuje się jądro maszyny wirtualnej, to trzeba jeszcze
"wyjść wyżej", czyli na poziom hypervisor'a, więc ewentualne straty
będą ograniczone do jednej maszyny wirtualnej. To co wirus w maszynie
wirtualnej widzi jako file system, dyski i sieć, to na poziomie
hypervisora jest... plikiem. W sieci można znaleźć wiele informacji o
benefitach wirtualizacji w zakresie security...
Post by Michal Kleczek
W aplikacji J2EE trzeba to oczywiscie zaimplementowac "recznie", bo jest
jeden proces dzialajacy w kontekscie jednego uzytkownika.
W każdej technologii trzeba. Rola w aplikacji ma się nijak do
uprawnień w OS i trzeba mapować. W JEE plus jest taki, że jest to
opisane przez standard i w większości przypadków robione deklaratywnie
(i jak się popatrzy na wszystkie specyfikacje - servletów HTTP, SIP,
EJB, czy web services, to jest to w miarę spójne). Nie pokrywa
wszystkich przypadków (stąd m.in. warto spojrzeć na Spring Security
oraz to co dają w zakresie security kontenery aplikacyjne), ale to i
tak więcej niż gdzie indziej...

Pozdrawiam,
Waldek Kot
Michal Kleczek
2008-11-17 22:00:58 UTC
Permalink
Post by w***@googlemail.com
Post by Michal Kleczek
I tu jest pies pogrzebany - problemem tak naprawde jest to, ze JVM
jest "ciezka". Moze zamiast wiec probowac wcisnac wszystko w jedna
maszyne wirtualna warto byloby po prostu ja odchudzic i spowodowac, ze
odpalenie wielu maszyn wirtualnych nie zzera tyle zasobow?
Java VM (mówię o mainstream'owych JVM) jest w implementacji dosyć
podobna do innych maszyn wirtualnych. Sama taka JVM też wiele zasobów
nie pożera - między 64 a 300 MB RAM (te wyższe wartości wynikają
przede wszystkim z różnego rodzaju buforów, w tym na potrzeby
kompilacji bytecode'u do kodu natywnego oraz optymalizacji - mniej
wyrafinowane JVM raczej idą w stronę mniejszych wartości). Czyli w
porównaniu do typowego serwerowego OS, to JVM jest bardzo lekka.
To wroce do pytania: skoro jest taka lekka, to po co nam isolates?

[ciach]
Post by w***@googlemail.com
Post by Michal Kleczek
Podejscie "wszystko w jednym VM" jest o tyle bez sensu, ze trzeba
implementowac rzeczy, ktore sa od dawna swietnie wspierane przez OS.
Przykladem sa uprawnienia do plikow i integracja z OSowymi mechanizmami
autentykacji/autoryzacji.
Tak, ale OS nie jest jedynym tutaj "dostawcą" tego rodzaju usług.
Zresztą dla aplikacji, security na poziomie OS mało się nadaje, bo
jest zbyt grube (zostało wymyślone raczej na potrzeby dostępu do
zasobów OS, w tym plików). Zasoby aplikacyjne są z zasady znacznie
bardziej drobnoziarniste (wykonywanie metody, dostęp do usługi, itd.).
Raczej też korzysta się (przynajmniej taki model jest popularyzowany
prez JEE) z ról, czyli podziału security dokonywanego na poziomie
aplikacji. Role mogą być też dynamiczne. W zasadzie, to security OS
używa się tylko do wystartowania procesu JVM, czasem (coraz rzadziej)
integruje się użytkowników i grupy w OS poprzez ich przypisanie do ról
aplikacyjnych.
W każdym razie, nawet reimplementując te funkcjonalności wciąż
poruszamy się w ramach owych 0.5% funkcjonalności OS, której tak
naprawdę potrzebuje z OS serwerowa JVM.
Jak wyliczyles te 0.5% funkcjonalnosci OS??? Tzn. co jest tymi pozostalymi
99.5 procentami?
Patrz nizej.
Post by w***@googlemail.com
Widać tutaj także siłę
Jakos mam wrazenie, ze w twojej terminologii "hypervisor" to nie jest OS - a
to _jest_ OS - polecam: http://en.wikipedia.org/wiki/Operating_system.
To, ze uslugi OS sa dostepne dla aplikacji Javy w postaci jakiegostam API
nic nie zmienia.
Post by w***@googlemail.com
- zwykle hypervisor dostarcza mechanizmy przechowywania danych (fajne
jest to że te mechanizmy są zwirtualizowane - korzystającemu z nich
wydaje się że korzysta ze zwykłego lokalnego dysku SCSI, podczas gdy
fizycznie, te dane mogą być w lokalnym SCSI, na NAS, iSCSI i innych
wspieranych urządzeniach, w tym w pamięci).
Innymi slowy - oferuje funkcje typowe dla systemu operacyjnego - warstwe
abstrakcji nad "bare metal" IO (nie wspominajac o tym, ze zeby korzystac z
NAS potrzebne sa np. sterowniki dla kart sieciowych).
Post by w***@googlemail.com
Pozostaje do tego dorobić
filesystem (co nie jest skomplikowaną sprawą
Zrobienie filesystemu nie jest skomplikowana sprawa? LOL.
Post by w***@googlemail.com
- znowu vide 2MB warstwa
bare-metal - można też skorzystać z conajmniej kilkunastu wygrzanych
implementacji filesystemów).
Ktore to rowniez _nie sa_ implementowane w Javie.
Post by w***@googlemail.com
- co do praw dostępu do plików, to można je zaimplementować na
poziomie własnego (tj. wbudowanego w warstwę bare-metal) filesystemu.
A jak kontola tych uprawnien jest wymuszana w JVM? To jest jakos
zintegrowane z JAAS? Prosze o linka.
Post by w***@googlemail.com
Można też (np. poprzez NAS) skorzystać z tego co daje zdalny storage.
- to samo dotyczy autentykacji i autoryzacji - część z tego robi
hypervisor (i jego system zarządczy), część bare-metal pod JVM, resztę
daje JVM + kontener aplikacyjny.
Bezpieczeństwo obejmuje wiele obszarów i oczywiście upraszczam, ale
prawda jest też taka, że eliminując OS i - dla Java - zastępując go
warstwą hypervisor+bare-metal JVM - eliminuje się źródło wielu
kłopotów z security (= OS).
Wrecz odwrotnie - otwiera sie puszke pandory. Bezpieczenstwo samego JVM jest
bardzo ciezko zapewnic. Nie na darmo dobra praktyka mowi, zeby serwera J2EE
nie uruchamiac z prawami administratora. I nie dlatego, ze JVM nie jest
bezpieczna w teorii, tylko dlatego, ze my potrzebujemy bezpieczenstwa _w
praktyce_. A to moze zapewnic nam tylko oprogramowanie, ktore jest
zweryfikowane dlugotrwalym uzyciem. Przyklad: DoD jeszcze nie certyfikowal
zadnej JVM, natomiast konkretne konfiguracje Linuxa z rozszerzeniami
SELinux - a i owszem. Ta potrzeba _wieloletniego_ uzycia oprogramowania,
zeby moglo byc one uznane za bezpieczne jest wlasnie powodem, dla ktorego
nie oplaca sie tego implementowac jeszcze raz w JVM.
Post by w***@googlemail.com
W Java (JEE) jest tak samo - proces JVM odpala się na uprawnieniach
konkretnego użytkownika systemu.
Tyle, ze jest _jeden_ proces i _jeden_ uzytkownik OS dla wszystkich
uzytkownikow aplikacji. Wiec tak samo nie jest.
Post by w***@googlemail.com
W wirtualizacji dodatkowo jest
jeszcze ochrona maszyny wirtualnej (guest'a) i hypervisor'a (hosta).
Nawet jeśli zhakuje się jądro maszyny wirtualnej, to trzeba jeszcze
"wyjść wyżej", czyli na poziom hypervisor'a, więc ewentualne straty
będą ograniczone do jednej maszyny wirtualnej.
To co wirus w maszynie
wirtualnej widzi jako file system, dyski i sieć, to na poziomie
hypervisora jest... plikiem. W sieci można znaleźć wiele informacji o
benefitach wirtualizacji w zakresie security...
No ale przeciez "zhakowanie" maszyny wirtualnej jest katastrofa, bo hacker
uzyskuje dostep do wszystkiego tego, do czego ma dostep maszyna wirtualna
(czyli np. do bardzo istotnych danych). I nie ma znaczenia, ze z punktu
widzenia hypervisora te dane sa przechowywane w jednym pliku.
Post by w***@googlemail.com
Post by Michal Kleczek
W aplikacji J2EE trzeba to oczywiscie zaimplementowac "recznie", bo jest
jeden proces dzialajacy w kontekscie jednego uzytkownika.
W każdej technologii trzeba. Rola w aplikacji ma się nijak do
uprawnień w OS i trzeba mapować.
Tak jest w J2EE, nie w kazdej technologii. Najprostszym przykladem jest
stary dobry Apache, ktory pozwala udostepniac zasoby w katalogach domowych
uzytkownikow nie pozwalajac jednoczesnie, zeby ci uzytkownicy mogli uzyskac
dostep do nie swoich zasobow. Co wiecej - pozwala tymze uzytkownikom
tworzyc wlasne skrypty, ktore sa uruchamiane nie z uprawnieniami Apache,
tylko z uprawnieniami konkretnego uzytkownika.
Post by w***@googlemail.com
W JEE plus jest taki, że jest to
opisane przez standard i w większości przypadków robione deklaratywnie
(i jak się popatrzy na wszystkie specyfikacje - servletów HTTP, SIP,
EJB, czy web services, to jest to w miarę spójne). Nie pokrywa
wszystkich przypadków (stąd m.in. warto spojrzeć na Spring Security
oraz to co dają w zakresie security kontenery aplikacyjne), ale to i
tak więcej niż gdzie indziej...
Wiecej niz gdzie indziej? Najprostszy problem jest nierozwiazany przez
standard - mapowanie uzytkownikow aplikacyjnych na uzytkownikow SZBD, co
powoduje, ze spece od bezpieczenstwa dostaja zawalu, bo nie moga polegac na
sprawdzonych rozwiazaniach dostawcy SZBD, tylko musza _wierzyc_, ze:
1. Spring Security nie zawiera dziur.
2. Programisci aplikacyjni uzyli Spring Security w sposob nie powodujacy
powstania dziur.
--
Michal
w***@googlemail.com
2008-11-18 00:27:30 UTC
Permalink
Post by Michal Kleczek
To wroce do pytania: skoro jest taka lekka, to po co nam isolates?
Bo można mieć jeszcze lżejsze rozwiązanie - lżejsze niż uruchamianie
kilku JVM naraz. Czy isolation się przyjmie, to nie wiem. Zobaczymy co
powie rynek. W pewnym momencie sięgnięcie po isolation będzie chyba
konieczne - na razie wydaje się, że nie (prawo Moore'a wciąż działa
dobrze). Jak pisałem - nie ma musu...
Post by Michal Kleczek
Jak wyliczyles te 0.5% funkcjonalnosci OS??? Tzn. co jest tymi pozostalymi
99.5 procentami?
Guestimation. Uznałem, że to dobra wielkość na opisanie tego, że - jak
pokazuje praktyka - JVM od OS potrzebuje ok. 2MB kodu, w których
trzeba zaimplementować:
- kilkadziesiąt wywołań OS, z których JVM (normalnie napisana dla OS,
bo - jak podkreślałem - JVM jest niezmieniony i "wydaje jej się", że
pod spodem jest "normalny" OS)
- filesystem
- serwer SSH
- obsługę syslog
- mini-shell (na potrzeby diagnostyczne)
- parę innych "drobiazgów"

Jak widać, nawet przegiąłem w górę z obliczeniami owych 0.5%...

Pozostałe 99.5% jest... niepotrzebne (przynajmniej dla serwerowych
zastosowań JVM ich nie potrzebuje).
Post by Michal Kleczek
Innymi slowy - oferuje funkcje typowe dla systemu operacyjnego - warstwe
abstrakcji nad "bare metal" IO (nie wspominajac o tym, ze zeby korzystac z
NAS potrzebne sa np. sterowniki dla kart sieciowych).
Dokładnie rzecz biorąc, to hypervisor jest POD tą warstwą bare-metal
(czyli mamy: sprzęt, hypervisor, maszynę wirtualną, bare-metal, JVM,
kontenery i aplikacje Java). Tak, hypervisor pełni tutaj rolę OS'a,
choć w porównaniu do tego czym jest Windows czy typowy Linux, to jego
rola jako OS jest dosyć ograniczona (o czym w pewnym sensie świadczy
rozmiar hypervisor'a - 31MB w przypadku bardzo bogatego w funkcje
VMware, znacznie mniej w przypadku Xen i pochodnych. KVM nie wiem, bo
nie próbowałem...). Oczywiście hypervisor zawiera odpowiednie
sterowniki (tu znowu pełni funkcje OS'a).
Post by Michal Kleczek
Zrobienie filesystemu nie jest skomplikowana sprawa? LOL.
Jak ktoś wie, jak zrobić porządny JVM, to jest to dosyć proste :-). A
wiedząc, że pod spodem jest hypervisor, który zajmuje się komunikacją
ze "storage'm" to jeszcze prostsze.
Post by Michal Kleczek
Post by w***@googlemail.com
- znowu vide 2MB warstwa
bare-metal - można też skorzystać z conajmniej kilkunastu wygrzanych
implementacji filesystemów).
Ktore to rowniez _nie sa_ implementowane w Javie.
Tak, ale tego nigdzie nie negowałem. Większość warstwy bare-metal nie
jest napisana w Java, sama JVM też w zdecydowanej większości nie. Tak
jest prościej i wydajniej. Z drugiej strony - w tej implementacji
którą ja znam - część warstwy bare-metal (pewne optymalizacje, więc
nie jest tego procentowo dużo) jest napisana w Java. Dla tych, którzy
znają VMware i VMware Tools, to jest to podobny pomysł. Tzn.
uruchomienie pewnego specjalnego kodu po stronie maszyny wirtualnej
(guest), która komunikuje się z hypervisor'em (hostem).
Post by Michal Kleczek
A jak kontola tych uprawnien jest wymuszana w JVM? To jest jakos
zintegrowane z JAAS? Prosze o linka.
Z punktu widzenia JVM, to jest wywołanie tych samych metod, które JVM
woła z "normalnego" OS. Tyle, że ich implementację daje bare-metal.
JVM nie jest świadoma, że pod spodem nie ma systemu operacyjnego (i o
to chodzi).
Post by Michal Kleczek
Wrecz odwrotnie - otwiera sie puszke pandory. Bezpieczenstwo samego JVM jest
bardzo ciezko zapewnic. Nie na darmo dobra praktyka mowi, zeby serwera J2EE
nie uruchamiac z prawami administratora.
Security nigdy za mało, ale nie słyszałem o jakichś szczególnych
problemach z security JVM. To zalecenie o prawach admina dotyczy chyba
każdego oprogramowania.
Post by Michal Kleczek
DoD jeszcze nie certyfikowal
zadnej JVM, natomiast konkretne konfiguracje Linuxa z rozszerzeniami
SELinux - a i owszem. Ta potrzeba _wieloletniego_ uzycia oprogramowania,
zeby moglo byc one uznane za bezpieczne jest wlasnie powodem, dla ktorego
nie oplaca sie tego implementowac jeszcze raz w JVM.
Java jest w powszechnym użyciu od kilkunastu lat (w Polsce sporo
bankowości internetowej na niej zbudowano). Co do certyfikatów dla
Java i oprogramowania wirtualizacyjnego, to nie mam tu konkretnej
wiedzy pod ręką i pewnie trzeba by poszukać w sieci faktów (bez
mitów ;-)), ale z tego co wiem zarówno JVM, jak i rozwiązania
wirtualizacyjne podlegają tym samym procedurom pod kątem security, co
OS. Trzeba by poszukać w dokumentacji VMware, MS, Xen i innych
dostawców. DoD i US Army także jest sporym odbiorcą tej technologii...
Post by Michal Kleczek
Tyle, ze jest _jeden_ proces i _jeden_ uzytkownik OS dla wszystkich
uzytkownikow aplikacji. Wiec tak samo nie jest.
Nie, bo kontener kontroluje dostęp do zasobów. JVM do swoich, JEE do
swoich.
Post by Michal Kleczek
No ale przeciez "zhakowanie" maszyny wirtualnej jest katastrofa, bo hacker
uzyskuje dostep do wszystkiego tego, do czego ma dostep maszyna wirtualna
(czyli np. do bardzo istotnych danych).
Ale dochodzi jeszcze warstwa ochrony, jaką daje hypervisor.
Post by Michal Kleczek
Tak jest w J2EE, nie w kazdej technologii. Najprostszym przykladem jest
stary dobry Apache, ktory pozwala udostepniac zasoby w katalogach domowych
uzytkownikow nie pozwalajac jednoczesnie, zeby ci uzytkownicy mogli uzyskac
dostep do nie swoich zasobow. Co wiecej - pozwala tymze uzytkownikom
tworzyc wlasne skrypty, ktore sa uruchamiane nie z uprawnieniami Apache,
tylko z uprawnieniami konkretnego uzytkownika.
Kod aplikacji JEE w kontenerze także działa na prawach użytkownika
(choć administrator może skonfigurować inaczej).
Post by Michal Kleczek
Najprostszy problem jest nierozwiazany przez
standard - mapowanie uzytkownikow aplikacyjnych na uzytkownikow SZBD, co
powoduje, ze spece od bezpieczenstwa dostaja zawalu, bo nie moga polegac na
1. Spring Security nie zawiera dziur.
2. Programisci aplikacyjni uzyli Spring Security w sposob nie powodujacy
powstania dziur.
Różne kontenery mają tutaj różne mechanizmy, ale zapewniam, że w
niektórych możesz zgrać obie grupy użytkowników oraz np. wykonywać
zapytania bazodanowe na prawach użytkownika aplikacyjnego (czyli
trywializując: ten sam "SELECT * FROM x" wywołany z kodu aplikacji
umieszczonej w serwerze aplikacyjnej będzie zwracał potencjalnie różne
wyniki, w zależności od uprawnień użytkownika, który dany kod
"wywołał" - cholera, mało trywializujące zdanie mi wyszło....
Musi tu być wsparcie dla takiego mechanizmu zarówno ze strony serwera
aplikacyjnego, jak bazy danych. Standard JEE tego nie będzie
rozstrzygał, bo dotyczy to baz danych i ogólnie świata poza JEE, który
JEE widzi przez pryzmat sterowników (JDBC, JCA, czy innych).

Pozdrawiam,
Waldek Kot
Michal Kleczek
2008-11-18 00:53:12 UTC
Permalink
***@googlemail.com wrote:

[ciach]
Post by w***@googlemail.com
Post by Michal Kleczek
Post by w***@googlemail.com
- co do praw dostępu do plików, to można je zaimplementować na
poziomie własnego (tj. wbudowanego w warstwę bare-metal) filesystemu.
A jak kontola tych uprawnien jest wymuszana w JVM? To jest jakos
zintegrowane z JAAS? Prosze o linka.
Z punktu widzenia JVM, to jest wywołanie tych samych metod, które JVM
woła z "normalnego" OS. Tyle, że ich implementację daje bare-metal.
JVM nie jest świadoma, że pod spodem nie ma systemu operacyjnego (i o
to chodzi).
To po co implementowac kontrole uprawnien do plikow na poziomie filesystemu,
skoro JVM i tak z tego nie korzysta? Co mi z tego ze kazda maszyna
wirtualna ma dostep do roznych plikow, skoro wszyscy uzytkownicy jednej
maszyny wirtualnej maja dostep do _wszystkich_ plikow dostepnych dla tej
maszyny?
Post by w***@googlemail.com
Nie, bo kontener kontroluje dostęp do zasobów. JVM do swoich, JEE do
swoich.
Ale to jest _za malo_ - mnie nie interesuje, ze kontener nie ma dostepu do
prywatnych zasobow JVM - mnie interesuje, zeby inni uzytkownicy kontenera
nie mieli dostepu do _moich_ zasobow.
Post by w***@googlemail.com
Post by Michal Kleczek
No ale przeciez "zhakowanie" maszyny wirtualnej jest katastrofa, bo
hacker uzyskuje dostep do wszystkiego tego, do czego ma dostep maszyna
wirtualna (czyli np. do bardzo istotnych danych).
Ale dochodzi jeszcze warstwa ochrony, jaką daje hypervisor.
Ale co chroni hypervisor? Jezeli wlamywacz uzyskal kontrole nad VM, to moze
zrobic wszystko to samo, co moze zrobic VM. Innymi slowy - jezeli serwer
aplikacyjny ma dostep do jakiegos zbioru danych, to wlamywacz uzyskujac nad
serwerem kontrole rowniez uzyskuje dostep do tego zbioru. Hypervisor tu nic
nie zmienia.
Post by w***@googlemail.com
Post by Michal Kleczek
Tak jest w J2EE, nie w kazdej technologii. Najprostszym przykladem jest
stary dobry Apache, ktory pozwala udostepniac zasoby w katalogach
domowych uzytkownikow nie pozwalajac jednoczesnie, zeby ci uzytkownicy
mogli uzyskac dostep do nie swoich zasobow. Co wiecej - pozwala tymze
uzytkownikom tworzyc wlasne skrypty, ktore sa uruchamiane nie z
uprawnieniami Apache, tylko z uprawnieniami konkretnego uzytkownika.
Kod aplikacji JEE w kontenerze także działa na prawach użytkownika
(choć administrator może skonfigurować inaczej).
Zapytam inaczej - czy jezeli serwer aplikacyjny - dajmy na to WebLogic
dzialajacy jako uzytkownik wls - uwierzytelni mnie - korzystajacego z
aplikacji webowej przez przegladarke - (powiedzmy uzywajac JAAS) jako
mkleczek, to czy filesystem pod spodem bedzie weryfikowal uprawnienia
uzytkownika mkleczek? Czy tez bedzie weryfikowal uprawnienia uzytkownika
wls? Niestety to drugie, z czego wynika, ze kontrola uprawnien na poziomie
filesystemu jest w tym wypadku bezuzyteczna.
--
Michal
w***@googlemail.com
2008-11-18 09:55:42 UTC
Permalink
Post by Michal Kleczek
Post by w***@googlemail.com
Z punktu widzenia JVM, to jest wywołanie tych samych metod, które JVM
woła z "normalnego" OS. Tyle, że ich implementację daje bare-metal.
JVM nie jest świadoma, że pod spodem nie ma systemu operacyjnego (i o
to chodzi).
To po co implementowac kontrole uprawnien do plikow na poziomie filesystemu,
skoro JVM i tak z tego nie korzysta? Co mi z tego ze kazda maszyna
wirtualna ma dostep do roznych plikow, skoro wszyscy uzytkownicy jednej
maszyny wirtualnej maja dostep do _wszystkich_ plikow dostepnych dla tej
maszyny?
JVM korzysta z uprawnień do filesystemu. Na poziomie JVM (poprzez
policies w Java Security) określasz, kto ma do jakich zasobów "OS" pod
spodem dostęp i w jakim trybie. Założenie jest takie, że w JVM (a
także w serwerze aplikacyjnym) umieszczasz kod, który jest zaufany i
znany (nawet może być podpisany cyfrowo). Trochę też więcej o tym w
odpowiedzi na końcu.

Uprawnienia na poziomie filesystemu są m.in. po to, aby mieć dostęp do
plików w różnych trybach (read-only, itd.). Możesz kontaktować się z
maszyną wirtualną (nie JVM) poprzez SSH i np. chcieć kontrolować,
które pliki i foldery są/nie są widoczne z zewnątrz.
Post by Michal Kleczek
Ale to jest _za malo_ - mnie nie interesuje, ze kontener nie ma dostepu do
prywatnych zasobow JVM - mnie interesuje, zeby inni uzytkownicy kontenera
nie mieli dostepu do _moich_ zasobow.
Java security policy.
Post by Michal Kleczek
Ale co chroni hypervisor?
Chroni dostęp do zasobów fizycznego komputera (w tym storage'u i
sieci) oraz do innych maszyn wirtualnych.
Oczywiście, hypervisor jest tylko kawałkiem software'u, ale -
zwłaszcza taki read-only umieszczony na flash'u (jako "drugi BIOS") -
jest całkiem odporny na uszkodzenia...
Post by Michal Kleczek
Jezeli wlamywacz uzyskal kontrole nad VM, to moze
zrobic wszystko to samo, co moze zrobic VM. Innymi slowy - jezeli serwer
aplikacyjny ma dostep do jakiegos zbioru danych, to wlamywacz uzyskujac nad
serwerem kontrole rowniez uzyskuje dostep do tego zbioru.
Także tutaj zadziała kontrola dostępu na poziomie zasobu (filesystemu,
czy bazy danych). Security trzeba obsługiwać szerzej niż tylko na
jednym komponencie.
Post by Michal Kleczek
Hypervisor tu nic nie zmienia.
Jest dodatkową warstwą ochrony.
Post by Michal Kleczek
Zapytam inaczej - czy jezeli serwer aplikacyjny - dajmy na to WebLogic
dzialajacy jako uzytkownik wls - uwierzytelni mnie - korzystajacego z
aplikacji webowej przez przegladarke - (powiedzmy uzywajac JAAS) jako
mkleczek, to czy filesystem pod spodem bedzie weryfikowal uprawnienia
uzytkownika mkleczek? Czy tez bedzie weryfikowal uprawnienia uzytkownika
wls? Niestety to drugie, z czego wynika, ze kontrola uprawnien na poziomie
filesystemu jest w tym wypadku bezuzyteczna.
Zależy na ile zadbasz o security. Ale po kolei:
1. owszem, domyślny dostęp do zasobów OS będzie na prawach tego
użytkownika, na którym działa OS (czyli w Twoim przykładzie wls)
2. jeśli wprowadzisz policy java security do JVM, to dostęp do zasobów
OS z poziomu aplikacji uruchomionej w JVM będzie jeszcze kontrolowany
przez mechanizmy security JVM (a dopiero jeśli te pozwolą, mechanizmy
OS i kontroli dostępu do zasobu)
3. w java policy określasz reguły dostępu określonego kodu (w tym
servletu czy EJB) do określonych zasobów OS (w tym tryb dostępu - np.
read, read/write)
4. najważniejsze jest jednak to, że w przypadku serwera aplikacyjnego,
kod, który w nim uruchamiasz jest zaufany. Wiesz (powinieneś wiedzieć)
skąd kod pochodzi i co robi. Na poziomie komponentów aplikacji (w tym
servletów i EJB) określasz kto ma do nich dostęp (czyli np. czy
mkleczek ma dostęp do metody getFromFile w EJB xyz i w jakim trybie).
Możesz to zrobić deklaratywnie, możesz też zrobić programowo. W tym
drugim przypadku mógłbyś np. wyłuskać nazwę użytkownika i w logice
aplikacji dostawać się do zasobu folder c:\users\mkleczek. Jeśli java
security policies są dobrze ustawione, dostęp będzie tylko do tego
folderu tylko dla użytkownika mkleczek.

Wchodzimy tu już trochę do możliwości konkretnego produktu, ale w
WebLogic możesz konfigurować java security policies na poziomie WLS
(ten poziom będzie sprawdzany najpierw, potem poziom java security
policies JVM, w której jest uruchomiony WLS). Podejście pod
standaryzację podobnego mechanizmu jak ten WebLogic'u też już jest w
postaci JACC (Java Authorization Contract for Containers, JSR-115).
Zresztą najlepiej będzie sprawdzić dokumentację:
http://download.oracle.com/docs/cd/E12840_01/wls/docs103/security/server_prot.html.

Jeśli będziesz chciał zintegrować security JEE z security danego
zasobu, to wystarczy napisać adapter JCA (np. do filesystemu). Na
podobnej zasadzie (choć nie jako JCA) działa driver do bazy danych.
Przywołam znowu konkretny produkt, ale np. możesz sprawdzić hasło
Identity-based Connection Pooling:
http://download.oracle.com/docs/cd/E12840_01/wls/docs103/jdbc_admin/jdbc_datasources.html#wp1204241.

W każdym razie widać, że tych warstw, które trzeba przełamać zwłaszcza
w JEE jest sporo i będę się upierać, że podobnego wsparcia dla
security, w dodatku spinającego technologie wielu dostawców, łatwo
gdzie indziej nie znajdziesz...

Pozdrawiam,
Waldek Kot
Michal Kleczek
2008-11-18 11:15:37 UTC
Permalink
Post by w***@googlemail.com
Post by Michal Kleczek
Ale co chroni hypervisor?
Chroni dostęp do zasobów fizycznego komputera (w tym storage'u i
sieci) oraz do innych maszyn wirtualnych.
Oczywiście, hypervisor jest tylko kawałkiem software'u, ale -
zwłaszcza taki read-only umieszczony na flash'u (jako "drugi BIOS") -
jest całkiem odporny na uszkodzenia...
Post by Michal Kleczek
Jezeli wlamywacz uzyskal kontrole nad VM, to moze
zrobic wszystko to samo, co moze zrobic VM. Innymi slowy - jezeli serwer
aplikacyjny ma dostep do jakiegos zbioru danych, to wlamywacz uzyskujac
nad serwerem kontrole rowniez uzyskuje dostep do tego zbioru.
Także tutaj zadziała kontrola dostępu na poziomie zasobu (filesystemu,
czy bazy danych).
Przeczytaj wyzej - jezeli wlamywacz uzyska kontrole nad VM to Java security
mozna sobie juz wsadzic w d...
Post by w***@googlemail.com
Security trzeba obsługiwać szerzej niż tylko na
jednym komponencie.
Wlasnie.
Post by w***@googlemail.com
Post by Michal Kleczek
Hypervisor tu nic nie zmienia.
Jest dodatkową warstwą ochrony.
Rozumiem. Czyli jestesmy szczesliwi, bo wlamywacz nie ma kontroli nad calym
systemem - tyle ze pieniadze z kont klientow zostaly ukradzione.
Post by w***@googlemail.com
Post by Michal Kleczek
Zapytam inaczej - czy jezeli serwer aplikacyjny - dajmy na to WebLogic
dzialajacy jako uzytkownik wls - uwierzytelni mnie - korzystajacego z
aplikacji webowej przez przegladarke - (powiedzmy uzywajac JAAS) jako
mkleczek, to czy filesystem pod spodem bedzie weryfikowal uprawnienia
uzytkownika mkleczek? Czy tez bedzie weryfikowal uprawnienia uzytkownika
wls? Niestety to drugie, z czego wynika, ze kontrola uprawnien na
poziomie filesystemu jest w tym wypadku bezuzyteczna.
1. owszem, domyślny dostęp do zasobów OS będzie na prawach tego
użytkownika, na którym działa OS (czyli w Twoim przykładzie wls)
2. jeśli wprowadzisz policy java security do JVM, to dostęp do zasobów
OS z poziomu aplikacji uruchomionej w JVM będzie jeszcze kontrolowany
przez mechanizmy security JVM (a dopiero jeśli te pozwolą, mechanizmy
OS i kontroli dostępu do zasobu)
Pod warunkiem, ze wlamywacz nie uzyskal kontroli nad JVM.
OSowe mechanizmy kontroli dostepu do zasobu _sa przeciez pominiete_ wlasnie
dlatego, ze one nie wiedza nic o uzytkownikach aplikacji, a tylko o
uzytkowniku z prawami ktorego zostala uruchomiona JVM.
Cos sie zaczynasz platac... :)
Post by w***@googlemail.com
4. najważniejsze jest jednak to, że w przypadku serwera aplikacyjnego,
kod, który w nim uruchamiasz jest zaufany. Wiesz (powinieneś wiedzieć)
skąd kod pochodzi i co robi. Na poziomie komponentów aplikacji (w tym
servletów i EJB) określasz kto ma do nich dostęp (czyli np. czy
mkleczek ma dostęp do metody getFromFile w EJB xyz i w jakim trybie).
Możesz to zrobić deklaratywnie, możesz też zrobić programowo.
Znowu: tyle, ze to wszystko pod warunkiem, ze JVM i serwer aplikacyjny sa
bezpieczne - a ja _to_ wlasnie kwestionuje.
Post by w***@googlemail.com
W tym
drugim przypadku mógłbyś np. wyłuskać nazwę użytkownika i w logice
aplikacji dostawać się do zasobu folder c:\users\mkleczek. Jeśli java
security policies są dobrze ustawione, dostęp będzie tylko do tego
folderu tylko dla użytkownika mkleczek.
Tak z innej beczki zadam inne (retoryczne) pytanie: czy uzytkownik mkleczek
moze udostepnic swoje wlasne zasoby uzytkownikowi wkot?
Post by w***@googlemail.com
Wchodzimy tu już trochę do możliwości konkretnego produktu
[ciach rozwazania nad mozliwosciami WLS/Oracle/JAAS/Security policy itd
itp. - bo one nic nie wnosza]

Z mojej strony podsumowanie i EOT:

To, co prezentujesz w tej dyskusji jest IMHO wlasnie glownym problemem Javy
i srodowisk zwiazanych z Java: mianowicie odrzucanie doswiadczen i
osiagniec innych twierdzac "Java ma to wszystko (a jak nie ma to zaraz
bedzie miec)". Konsekwencje takiego podejscia:
a) Java jest odrzucana przez srodowiska nie-javove (pisalem juz o tym w
kontekscie bindingow do KDE/Gnome, ale znaczacym przykladem jest na
przyklad RedHat, ktory mimo ze kupil JBossa, to w praktyce wspiera
rozwiazania nie-javove - ot, chocby directory server lub Free-IPA)
Popularnosc (i wrecz przeciwstawianie Javie) LAMP jest rowniez jednym z
objawow tego zjawiska. Przeciez to jest wlasnie dlatego, ze ludzie
mysla "ktos nam tu chce wcisnac kit - dlaczego mamy sie pozbywac np.
Linuxa, skoro jest dobry, na rzecz jakiegos nowego superhiper rozwiazania
bare-metal JVM/hypervisor"
b) Java przestaje sie rozwijac w sensie oferowania _nowych_ rozwiazan tracac
czas na bohaterskie rozwiazywanie swoich wlasnych problemow - parafrazujac:
nie spotykanych w innych platformach ;). Bardzo dobry przyklad to wlasnie
OSGi, czy isoletes, ktore z "javacentrycznego" punktu widzenia sa byc moze
wazne, bo rozwiazuje troche problemow z modelem ladowania klas. Ale -
naprawde - poza Java nie wnosza _nic_ nowego.
d) Java przestaje sie rozwijac w sensie _sensownego_ ulepszania jezyka i
platformy (czyli _sensownego_ rozwiazywania problemow nigdzie indziej nie
spotykanych). Dobry przyklad to chociazby "waga" i czas odpalania JVM, nad
ktorym to zagadnieniem skupiono sie DOPIERO w Java 6u10. A sensowny rozwoj
to _uzycie_ i _integracja_ z istniejacymi juz rozwiazaniami i ich tworcze
wykorzystanie, a nie _zastepowanie_ ich nowymi.

To chyba tyle.
--
Michal
w***@googlemail.com
2008-11-18 11:35:10 UTC
Permalink
Post by Michal Kleczek
To chyba tyle.
Fakt. Chyba żyjemy w innych rzeczywistościach...

Pozdrawiam,
Waldek Kot
Wojciech Jaczewski
2008-11-18 18:16:43 UTC
Permalink
Post by w***@googlemail.com
Guestimation. Uznałem, że to dobra wielkość na opisanie tego, że - jak
pokazuje praktyka - JVM od OS potrzebuje ok. 2MB kodu, w których
- kilkadziesiąt wywołań OS, z których JVM (normalnie napisana dla OS,
bo - jak podkreślałem - JVM jest niezmieniony i "wydaje jej się", że
pod spodem jest "normalny" OS)
- filesystem
- serwer SSH
- obsługę syslog
- mini-shell (na potrzeby diagnostyczne)
- parę innych "drobiazgów"
Z kernelem linuksowym i podstawowymi narzędziami (Busybox) można uzyskać
pełnoprawny system operacyjny o rozmiarze kilku MB. Nie wiem dokładnie ile
ten system zajmie w pamięci RAM na różne swoje dane, ale ogólnie bardzo
mało.
Nie wiem jakie zalety miałoby przynieść pisanie od zera kernela, który od
pozostałych miałby się różnić przede wszystkim tym, że nie działa z nim nic
innego niż JVM.
w***@googlemail.com
2008-11-18 22:48:32 UTC
Permalink
Post by Wojciech Jaczewski
Z kernelem linuksowym i podstawowymi narzędziami (Busybox) można uzyskać
pełnoprawny system operacyjny o rozmiarze kilku MB. Nie wiem dokładnie ile
ten system zajmie w pamięci RAM na różne swoje dane, ale ogólnie bardzo
mało.
Nie wiem jakie zalety miałoby przynieść pisanie od zera kernela, który od
pozostałych miałby się różnić przede wszystkim tym, że nie działa z nim nic
innego niż JVM.
OK, to będzie dłuższa wypowiedź...

To prawda, że można zejść do niewielkiego rozmiaru OS. Jednak nie
tylko rozmiar się liczy (kurcze, ale mi zdanie wyszło ;-)

Wyjaśniając sprawę, trochę tutaj muszę wrócić do tego, że nawet z
takiego zeskalowanego "w dół" OS o których Wojtku piszesz, to
serwerowa JVM wciąż będzie potrzebować bardzo niewiele
funkcjonalności:
- I/O do zapisu danych (storage)
- I/O do dostępu do sieci
- obsługę kilkudziesięciu wywołań systemowych, związanych z bardzo
niskopoziomowym ("kernelowym") zarządzaniem pamięcią i wątkami.
Resztę pracy związanej z zarządzaniem pamięcią i wątkami i tak
wykonuje JVM. Dla JVM (a właściwie dla tej cienkiej warstwy bare-metal
działającej POD JVM) sprawa jest jeszcze bardziej uproszczona, gdy
może ona założyć, że działa na hypervisorze (VMware, Xen, JVM,
innych), który udostępnia jej ujednolicony, wirtualny sprzęt
(wirtualne: pamięć, dyski, karty sieciowe, kartę graficzną, BIOS,
itd.) w postaci wirtualnej maszyny (nie mylić z JVM). Hypervisor
zarządza fizycznym sprzętem, w tym kontaktuje się poprzez "prawdziwe"
drivery z "prawdziwymi" (fizycznie włożonymi do fizycznej maszyny)
kartami sieciowymi i innym sprzętem oraz odczytuje/zapisuje dane do
"prawdziwego" storage'u.

Nie ma zatem problemu pisania kernela od zera, a jedynie implementacji
tych wykorzystywanych przez serwerową JVM kilkudziesięciu wywołań OS.
Z powodów użytkowych (łatwiejsza administracja) warto dołożyć jeszcze
kilka typowych usług systemowych: np. SSH (do lokalnej i zdalnej
administracji taką wirtualną maszyną), czy syslog (bo przecież zarówno
ta wirtualna maszyna, jak i uruchomiona w jej wnętrzu JVM, a także
uruchomione wewnątrz JVM kontenery i aplikacje, tworzą logi, do
których chciałoby się dostawać z zewnątrz).

Właściwie to - mając hypervisor - nawet filesystem nie jest konieczny,
bo wystarczy dołożyć wewnątrz tej warstwy bare-metal klienta "zdalnego
storage'u" (np. klienta NAS) i można odczytywać i zapisywać dane (i
pliki). Hypervisor "załatwi" komunikację z właściwym storagem (np.
NAS). Filesystem przyda się jednak z punktu widzenia wydajności, bo
zdalny storage oznacza komunikację poprzez sieć przy każdym odczycie/
zapisie.

Znowu, zakładając, że pod spodem jest hypervisor, implementacja
takiego wirtualnego filesystemu jest znacznie uproszczona, bo fizyczną
obsługą zapisu/odczytu danych "zajmuje się" hypervisor (co więcej, to
co hypervisor pokazuje uruchomionej w nim maszynie wirtualnej jako
"dysk SCSI", w rzeczywistości może być fizycznym dyskiem IDE lub SCSI
umieszczonym w fizycznej maszynie, ale może być też zmapowane np. na
macierz FC czy iSCSI).

Analogicznie jest z siecią (hypervisor może nawet udostępniać
wirtualne switch'e, routery i firewall'e - wirtualne, bo istnieją
jedynie w postaci software'u wewnątrz maszyny wirtualnej, choć pewna
część tego software'u komunikuje się z fizycznym sprzętem na którym
hypervisor jest zainstalowany lub zdalnymi urządzeniami).

Warto tutaj także wspomnieć, że dla systemu operacyjnego proces JVM
jest takim samym procesem, jak każdy inny. Ma to niestety negatywny
skutek dla JVM, bo przecież JVM w dużym stopniu jest hmm... wirtualnym
komputerem (ma swój procesor z listą rozkazów, pamięć, itd). Jeden
(czyli OS) drugiego (czyli JVM) nie rozumie - widać to m.in. w
zupełnie odmiennych (i czasem szkodzących sobie) procesach zarządzania
pamięcią (np. paging Java heap'a w najmniej korzystnym dla _aplikacji
Java lub GC_ momencie). Podobnie jest z przydziałem czasu procesora do
wątków, uwzględniającym np. priorytety wątków (o których tylko JVM
"wie", bo OS już nie). Sprawa szczególnie wychodzi np. w zastosowania
real-time, gdzie oczekiwany jest determinizm (kontrolowane czasy
opóźnień - latency).

Istotne jest także to, że JVM nie jest specjalnie zmodyfikowany "do
pracy bez OS". JVM "wydaje się", że pod spodem jest "normalny" OS.
Wywołuje zatem funkcje systemowe OS, ale ich wykonanie realizowane
jest przez ową cienką warstwę bare-metal (która z kolei może
kooperować z wirtualnym sprzętem maszyny wirtualnej, który kooperuje z
hypervisor'em, który kooperuje z fizycznym, itd - uff...). Oczywiście,
także dla kontenerów i aplikacji uruchomionych wewnątrz takiej JVM "na
bare-metal" nie ma NIC specjalnego i im "wydaje się", że pod spodem
mają OS z jego zasobami typu filesystem, sieć, itd. Nawet spora kodu
natywnego (JNI, JVMTI) ma szansę zadziałać poprawnie. Nie wszystko - i
tu trzeba być ostrożnym i brać pod uwagę, że bare-metal implementuje
tylko (dosyć wąski) podzbiór funkcji systemowych, więc jeśli w kodzie
natywnym użyje się niezaimplementowanej przez bare-metal funkcji, to
będzie crash (linuxowe: malloc/realloc/free, strchr i inne
"stringowe", math, czy open/read/write/close plikowe i socket'owe
zadziałają). Podobnie - próby uruchomienia nowego procesu z JVM (fork/
exec) nie zadziałają. Praktyka pokazuje jednak, że nie jest to problem
dla dobrze napisanych serwerowych aplikacji Java (ktoś pisze JNI

Jest to znowu analogiczne do tego co daje hypervisor, który udostępnia
maszynę wirtualną (wirtualny sprzęt) w taki sposób, że oprogramowaniu,
które działa wewnątrz tego wirtualnego sprzętu (np. systemowi
operacyjnemu) "wydaje się", że ma "pod sobą" prawdziwy BIOS, RAM,
dyski, karty sieciowe, itd. Czyli: warstwa bare-metal jest dla JVM
tym, czym hypervisor jest dla maszyny wirtualnej. (Jeśli ktokolwiek
jeszcze jest ze mną w tym wywodzie, to) można by użyć tu
sformułowania: wirtualizacja Java.

Mimo pewnych zalet (o których później), takie pozbycie się typowego OS
i zastąpienie go bardzo cienką warstwą bare-metal nie pokaże swoich
zalet jeśli rozpatrujemy JEDNĄ JVM. Pełnię smaku pokaże dopiero
analiza zalet dla wielu JVM. Otóż, typowa dzisiaj fizyczna maszyna
serwerowa ma 2-4 CPU, z których każdy CPU ma 2-4 core'ów (dual-,
quad-) (będę się tu trzymał niedrogich maszyn klasy Intel x86, ale
obowiązuje to także dla innych architektur). Wirtualizując taką
maszynę (poprzez użycie hypervisor'a) możemy w niej udostępnić ok. 32
maszyn wirtualnych (4 CPU quad = 16 core, 2 VM na core = 32 VM).
Oczywiście technicznie możemy udostępnić więcej, ale zakładam, że
chcemy np. przenieść 32 fizyczne jednoprocesorowe komputery na jeden
czteroprocesorowy serwer, a przy tym nie stracić na wydajności. Bez
technologii bare-metal JVM, dla aplikacji serwerowych w Java
(przyjmijmy dla uproszczenia, że jest to aplikacja JEE), w KAŻDEJ
maszynie wirtualnej mamy taki stos oprogramowania:
- OS (Linux, Windows, ...)
- JVM
- serwer aplikacyjny JEE
- aplikacja JEE (WAR, EAR, ...)

Na podanej wcześniej fizycznej maszynie możemy uruchomić 32 takie
wirtualne maszyny, czyli mamy 32 OS, 32 JVM, 32 app serwery, itd.
Każdy OS w takiej VM potrzebuje na swoje potrzeby określonych zasobów
- np. RAM. Przyjmując nawet tylko 400 MB RAM na 1 OS, mamy (32 * 400
MB) około 13 GB RAM, tylko na potrzeby OS'ów. Teraz - i tu wielka
paralela do początku tego postu - skoro możemy pozbyć się conajmniej
99.5% z takiego OS bez jakielkolwiek straty dla JVM, to "odzyskujemy"
te 13 GB RAM na inne potrzeby (np. po to, aby uruchomić dodatkowe 20
VM NA TYM SAMYM SPRZĘCIE). Podobne wyliczenia można przeprowadzić dla
innych niż RAM zasobów.

Co więcej - rezygnując z OS (i jego "przeszkadzania w pracy JVM")
wiele operacji jest wykonywanych przez taką bare-metal JVM ZNACZNIE
szybciej (czyli znowu "odzyskujemy" zasoby, z których mogą skorzystać
inne VM i uruchomione w nich aplikacje). Jeszcze więcej - bez OS
możliwe jest zaimplementowanie wielu ciekawych optymalizacji i
usprawnień (np. dotyczących real-time i deterministycznego
przetwarzania). Np. rezygnując z wieloprocesowości VM (czyli
możliwości uruchamiania wielu procesów) łatwiej zapanować nad
przydziałem zadań. Podobnie rezygnując z obsługi wielu użytkowników.
Zwłaszcza, że - dla serwerowych aplikacji Java - odpowiedniki tych
mechanizmów i tak realizuje JVM i serwer aplikacyjny.

Takich optymalizacji pod kątem JVM jest znacznie więcej - właśnie
dzięki założeniu, że na tej maszynie (wirtualnej) działa tylko JVM
(zresztą - znowu to podkreślam - dla serwerowych aplikacji Java (JEE)
i tak najczęściej mamy do czynienia z sytuacją, gdy na danym serwerze
działa TYLKO ta aplikacja).

Czyli - podobnie jak w samej wirtualizacji - cała gra w wirtualizacji
Java idzie o jeszcze bardziej efektywne wykorzystanie zasobów
serwerowych.

Są także inne ciekawe zalety takiego podejścia (też poniekąd wywodzą
się one z idei wirtualizacji) - np. możliwość dystrybucji
oprogramowania w postaci "software appliance", czyli takiej pre-
konfigurowanej maszyny wirtualnej. Prekonfigurowanej, bo właściwie
należy ją umieścić w hypervisorze (taki "appliance" jest zwykle w
postaci pliku .ISO) i uruchomić. Zwykle trzeba jeszcze wcześniej nadać
temu wirtualnemu komputerowi pewne parametry, typu adres IP, hasło
admina, itd.). Nie ma tutaj jednak procesu instalacji (OS, JVM,
kontener, aplikacja, ...), konfiguracji aplikacji, itd. "Just press
the play button" ;-).
Maszyna wirtualna jest w postaci pliku, więc można z nią zrobić to
samo co z plikiem. Copy/Paste daje drugą (n-tą) IDENTYCZNĄ maszynę.
Plik można wysłać na zdalną maszynę (FTP lub inaczej) - polecam choćby
zobaczyć jak działa usługa EC2 Amazon'a (http://aws.amazon.com/ec2/).
Disaster recovery z wykorzystaniem FTP, anybody ?
Maszyny wirtualne mogą być (nawet w trakcie pracy) przemieszczane
pomiędzy różnymi fizycznymi komputerami, co może służyć jako kolejny
mechanzim do load-balancing'u i zwiększenia poziomu dostępności (HA).
Notabene - dzięki takiemu podejściu z wyeliminowaniem OS pozbywamy się
z image'u maszyny wirtualnej (pliku .ISO) całkiem sporo zbędnego
tłuszczu (2MB kodu bare-metal vs. 1-2GB albo i więcej typowego OS).
Wiele firm, które przeprowadziło wirtualizację często o tym mówi, że
główny problem jest z niedoszacowaniem storage'u na maszyny wirtualne.
Przy tysiącach albo i dziesiątkach tysięcy takich wielogigabajtowych
plików zawierających VM jest to duży problem...

Podobnie jest ze zwiększeniem poziomu security przy użyciu
wirtualizacji.

Wiem, że się jak zwykle rozpisałem, ale mam nadzieję, że mimo długości
jest wciąż w miarę przejrzyście... Wybaczcie też pewne uproszczenia i
skróty myślowe, ale bez tego byłoby jeszcze gorzej/dłużej... Wiele na
temat wirtualizacji (zarówno tej wykonywanej w pierwszym kroku, tj.
wirtualizacji sprzętu, jak i tej wykonywanej w drugim kroku, czyli
wirtualizacji Java) można znaleźć w sieci...

Pozdrawiam,
Waldek Kot
Wojciech Jaczewski
2008-11-19 09:21:17 UTC
Permalink
Post by w***@googlemail.com
Na podanej wcześniej fizycznej maszynie możemy uruchomić 32 takie
wirtualne maszyny, czyli mamy 32 OS, 32 JVM, 32 app serwery, itd.
Każdy OS w takiej VM potrzebuje na swoje potrzeby określonych zasobów
- np. RAM. Przyjmując nawet tylko 400 MB RAM na 1 OS, mamy (32 * 400
MB) około 13 GB RAM, tylko na potrzeby OS'ów.
Być może podawane przez Ciebie wartości zużycia pamięci RAM są prawdziwe dla
systemu Windows (nie sprawdzałem), ale w przypadku Linuksa są zdecydowanie
zawyżone.
Nawet ze standardowym oprogramowaniem (glibc, bash, ...), a nie
optymalizowanym pod rozmiar i nieco ograniczonym (bosybox), bez żadnego
specjalnego cudowania da się zestawić system, który zużyje kilkanaście MB
RAM-u.
Michal Kleczek
2008-11-19 09:39:11 UTC
Permalink
Post by Wojciech Jaczewski
Post by w***@googlemail.com
Na podanej wcześniej fizycznej maszynie możemy uruchomić 32 takie
wirtualne maszyny, czyli mamy 32 OS, 32 JVM, 32 app serwery, itd.
Każdy OS w takiej VM potrzebuje na swoje potrzeby określonych zasobów
- np. RAM. Przyjmując nawet tylko 400 MB RAM na 1 OS, mamy (32 * 400
MB) około 13 GB RAM, tylko na potrzeby OS'ów.
Być może podawane przez Ciebie wartości zużycia pamięci RAM są prawdziwe
dla systemu Windows (nie sprawdzałem), ale w przypadku Linuksa są
zdecydowanie zawyżone.
Nawet ze standardowym oprogramowaniem (glibc, bash, ...), a nie
optymalizowanym pod rozmiar i nieco ograniczonym (bosybox), bez żadnego
specjalnego cudowania da się zestawić system, który zużyje kilkanaście MB
RAM-u.
Swoja droga wydaje sie zabawne uzywanie wirtualizacji (typu Xen, VMWare
itp.) do odpalania oddzielnych JVM. W koncu JVM to _maszyna wirtualna_ sama
w sobie. Jak za malo to jest jeszcze np. chroot.
--
Michal
Mikolaj Rydzewski
2008-11-19 13:17:39 UTC
Permalink
Post by Michal Kleczek
Swoja droga wydaje sie zabawne uzywanie wirtualizacji (typu Xen, VMWare
itp.) do odpalania oddzielnych JVM. W koncu JVM to _maszyna wirtualna_ sama
w sobie. Jak za malo to jest jeszcze np. chroot.
No nie, tutaj IMO bardziej chodzi o mozliwosc zatrzymania w razie
potrzeby danej instancji vmware/whatever, przeniesienia na inna
(fizycznie) maszyne, itd.
Michal Kleczek
2008-11-19 13:39:17 UTC
Permalink
Post by Mikolaj Rydzewski
Post by Michal Kleczek
Swoja droga wydaje sie zabawne uzywanie wirtualizacji (typu Xen, VMWare
itp.) do odpalania oddzielnych JVM. W koncu JVM to _maszyna wirtualna_
sama w sobie. Jak za malo to jest jeszcze np. chroot.
No nie, tutaj IMO bardziej chodzi o mozliwosc zatrzymania w razie
potrzeby danej instancji vmware/whatever, przeniesienia na inna
(fizycznie) maszyne, itd.
Rozumiem, ze chodzi o instancje JVM (w tej dyskusji). I mozliwosc latwego
przenoszenia/kopiowania np. calego serwera aplikacyjnego miedzy maszynami.
To trzeba zrobic plik iso z tym co tam potrzeba (czyli katalogiem z jdk/jre
+ biblioteki itp, itd):

a potem:
mount -o loop -t iso9660 file.iso /mnt/gdziestam

i:
/mnt/gdziestam/jdk/bin/java -jar /mnt/gdziestam/cokolwiek.jar

lub:
chroot /mnt/gdziestam /jdk/bin/java -jar cokolwiek.jar
--
Michal
Mikolaj Rydzewski
2008-11-19 14:33:39 UTC
Permalink
Post by Michal Kleczek
Post by Mikolaj Rydzewski
Post by Michal Kleczek
Swoja droga wydaje sie zabawne uzywanie wirtualizacji (typu Xen, VMWare
itp.) do odpalania oddzielnych JVM. W koncu JVM to _maszyna wirtualna_
sama w sobie. Jak za malo to jest jeszcze np. chroot.
No nie, tutaj IMO bardziej chodzi o mozliwosc zatrzymania w razie
potrzeby danej instancji vmware/whatever, przeniesienia na inna
(fizycznie) maszyne, itd.
Rozumiem, ze chodzi o instancje JVM (w tej dyskusji). I mozliwosc latwego
przenoszenia/kopiowania np. calego serwera aplikacyjnego miedzy maszynami.
To trzeba zrobic plik iso z tym co tam potrzeba (czyli katalogiem z jdk/jre
Pisalem o instancji vmware. A w kontekscie tej dyskusji ow vmware sluzy
(glownie) do uruchomienia JVM.

Przyklad z zycia wziety: wdrozenie/support dla konkretnego klienta. Cale
'jego' srodowisko jest skonfigurowane w vmware wlasnie (baza, serwer
aplikacyjny, etc). Kiedy trzeba cos zrobic, odtworzyc blad, itd,
uruchamia sie konkretna instalacje vmware i mamy srodowisko. Zadne ISO
tego nie zalatwi.
W analogiczny sposob mozna obslugiwac wersje produkcyjne systemow.
Michal Kleczek
2008-11-19 14:41:21 UTC
Permalink
Post by Mikolaj Rydzewski
Post by Michal Kleczek
Post by Mikolaj Rydzewski
Post by Michal Kleczek
Swoja droga wydaje sie zabawne uzywanie wirtualizacji (typu Xen, VMWare
itp.) do odpalania oddzielnych JVM. W koncu JVM to _maszyna wirtualna_
sama w sobie. Jak za malo to jest jeszcze np. chroot.
No nie, tutaj IMO bardziej chodzi o mozliwosc zatrzymania w razie
potrzeby danej instancji vmware/whatever, przeniesienia na inna
(fizycznie) maszyne, itd.
Rozumiem, ze chodzi o instancje JVM (w tej dyskusji). I mozliwosc latwego
przenoszenia/kopiowania np. calego serwera aplikacyjnego miedzy
maszynami. To trzeba zrobic plik iso z tym co tam potrzeba (czyli
Pisalem o instancji vmware. A w kontekscie tej dyskusji ow vmware sluzy
(glownie) do uruchomienia JVM.
Przyklad z zycia wziety: wdrozenie/support dla konkretnego klienta. Cale
'jego' srodowisko jest skonfigurowane w vmware wlasnie (baza, serwer
aplikacyjny, etc). Kiedy trzeba cos zrobic, odtworzyc blad, itd,
uruchamia sie konkretna instalacje vmware i mamy srodowisko. Zadne ISO
tego nie zalatwi.
W analogiczny sposob mozna obslugiwac wersje produkcyjne systemow.
Ja nie sugeruje, ze wirtualizacja jako taka jest niepotrzebna. Tylko mowie,
ze pomysl odpalania JVM jako guest os jest bez sensu.
--
Michal
Mikolaj Rydzewski
2008-11-19 14:57:05 UTC
Permalink
Post by Michal Kleczek
Ja nie sugeruje, ze wirtualizacja jako taka jest niepotrzebna. Tylko mowie,
ze pomysl odpalania JVM jako guest os jest bez sensu.
Ale tu chodzi o wygode i czas (tzn chodzi o pieniadze) konfiguracji i
uruchomienia srodowiska.
Taniej wychodzi kupic odpowiednio mocny sprzet aby podolal
wirtualizacji, niz konfigami zonglowac...
Michal Kleczek
2008-11-19 15:20:27 UTC
Permalink
Post by Mikolaj Rydzewski
Post by Michal Kleczek
Ja nie sugeruje, ze wirtualizacja jako taka jest niepotrzebna. Tylko
mowie, ze pomysl odpalania JVM jako guest os jest bez sensu.
Ale tu chodzi o wygode i czas (tzn chodzi o pieniadze) konfiguracji i
uruchomienia srodowiska.
Taniej wychodzi kupic odpowiednio mocny sprzet aby podolal
wirtualizacji, niz konfigami zonglowac...
Nie bardzo rozumiem, jak odpalanie JVM jako guest OS cokolwiek pomaga.
--
Michal
Mikolaj Rydzewski
2008-11-19 15:28:08 UTC
Permalink
Post by Michal Kleczek
Nie bardzo rozumiem, jak odpalanie JVM jako guest OS cokolwiek pomaga.
Taki, ze host OS moze wogole nie miec JVM zainstalowanej, ze za kazdym
razem moze byc to inna maszyna, etc.

Zreszta zbaczamy z tematu. Skoro nie negujesz idei wirtualizacji jako
takiej, to dlaczego nie chcesz przyjac, ze skoro wirtualizuje sie cale
srodowiska, to razem z nimi takze i JVM na nich instalowane?
Wirtualizuje sie srodowisko jako calosc. A czy w srodku jest JVM, LAMP
juz nie jest istotne.
Michal Kleczek
2008-11-19 15:48:28 UTC
Permalink
Post by Mikolaj Rydzewski
Post by Michal Kleczek
Nie bardzo rozumiem, jak odpalanie JVM jako guest OS cokolwiek pomaga.
Taki, ze host OS moze wogole nie miec JVM zainstalowanej, ze za kazdym
razem moze byc to inna maszyna, etc.
Zreszta zbaczamy z tematu. Skoro nie negujesz idei wirtualizacji jako
takiej, to dlaczego nie chcesz przyjac, ze skoro wirtualizuje sie cale
srodowiska, to razem z nimi takze i JVM na nich instalowane?
Wirtualizuje sie srodowisko jako calosc. A czy w srodku jest JVM, LAMP
juz nie jest istotne.
Tyle, ze Waldek przedstawial idee "bare-metal" JVM jako swietny pomysl
(czyli _czyste_ JVM _bez_ zadnych dodatkowych rzeczy jako guest OS).
To o czym ty piszesz jest czyms innym i - w wielu przypadkach - ma sens.
--
Michal
Michal Kleczek
2008-11-20 11:37:56 UTC
Permalink
Post by Mikolaj Rydzewski
Post by Michal Kleczek
Nie bardzo rozumiem, jak odpalanie JVM jako guest OS cokolwiek pomaga.
Taki, ze host OS moze wogole nie miec JVM zainstalowanej, ze za kazdym
razem moze byc to inna maszyna, etc.
Moze nie miec zainstalowanej JVM, ale musi miec zainstalowany soft do
wirtualizacji. Co gorsza - maszyny pomiedzy ktorymi przenosisz VM musza
miec np. ten sam typ procesora. Nie uwazasz, ze to nie tylko nic nie
zmienia, ale wrecz pogarsza?
--
Michal
Mikolaj Rydzewski
2008-11-20 11:55:50 UTC
Permalink
Post by Michal Kleczek
Moze nie miec zainstalowanej JVM, ale musi miec zainstalowany soft do
wirtualizacji. Co gorsza - maszyny pomiedzy ktorymi przenosisz VM musza
miec np. ten sam typ procesora. Nie uwazasz, ze to nie tylko nic nie
zmienia, ale wrecz pogarsza?
W praktyce wyglada to tak, ze masz racka z paru(nastoma...) identycznymi
maszynami (+/- pamiec, dyski, taktowanie). Na kazdej z nich masz ten sam
soft do wirtualizacji. W zaleznosci od potrzeb uruchamiasz na nich
wybrane uslugi (guest OSy).
Michal Kleczek
2008-11-20 13:20:52 UTC
Permalink
Post by Mikolaj Rydzewski
Post by Michal Kleczek
Moze nie miec zainstalowanej JVM, ale musi miec zainstalowany soft do
wirtualizacji. Co gorsza - maszyny pomiedzy ktorymi przenosisz VM musza
miec np. ten sam typ procesora. Nie uwazasz, ze to nie tylko nic nie
zmienia, ale wrecz pogarsza?
W praktyce wyglada to tak, ze masz racka z paru(nastoma...) identycznymi
maszynami (+/- pamiec, dyski, taktowanie). Na kazdej z nich masz ten sam
soft do wirtualizacji. W zaleznosci od potrzeb uruchamiasz na nich
wybrane uslugi (guest OSy).
No i jest to potrzebne, zeby mozna bylo uruchomic aplikacje _nie_ _Java_. I
to ma sens. Natomiast - IMHO - nie ma sensu, gdy to co chcesz
uruchamiac/przenosic to sa aplikacje _Java_.
--
Michal
w***@googlemail.com
2008-11-19 17:27:16 UTC
Permalink
Post by Michal Kleczek
Ja nie sugeruje, ze wirtualizacja jako taka jest niepotrzebna. Tylko mowie,
ze pomysl odpalania JVM jako guest os jest bez sensu.
Sens ma taki sam, jak odpalanie OS w guest vm. Tyle, że efektywniej (w
każdym razie dla serwerowych aplikacji Java).

Skoro nie negujesz wirtualizacji, to polecałbym powrót do jednej z
użytych przeze mnie wcześniej analogii:
Sens stosowania bare-metal JVM wewnątrz guest VM jest podobny do sensu
stosowania hypervisora w fizycznej maszynie: efektywność.
Warto zauważyć, że większość serwerowych hypervisor'ów (pomijam te
dedykowane do wirtualizacji dekstopowej) NIE KORZYSTA z systemu
operacyjnego. Dla przykładu: nie instaluje się VMware ESX jako
aplikacji wewnątrz OS'a. To VMware ESX pełni niektóre z funkcji OS'a.
VMware ESX bootuje się zaraz po BIOSie...

VMware ESX jest przykładem hypervisor'a typu bare-metal (tzn. działa
bezpośrednio - tj. _bez pośrednictwa OS_ - na fizycznym sprzęcie).
Bare-metal JVM też działa bezpośrednio na sprzęcie (tyle, że
wirtualnym - udostępnianym przez hypervisor).
Motywacja "dlaczego bez OS" w obu przypadkach jest jednak bardzo
podobna...

Pozdrawiam,
Waldek Kot
Michal Kleczek
2008-11-19 20:13:02 UTC
Permalink
Post by w***@googlemail.com
Post by Michal Kleczek
Ja nie sugeruje, ze wirtualizacja jako taka jest niepotrzebna. Tylko
mowie, ze pomysl odpalania JVM jako guest os jest bez sensu.
Sens ma taki sam, jak odpalanie OS w guest vm. Tyle, że efektywniej (w
każdym razie dla serwerowych aplikacji Java).
Skoro nie negujesz wirtualizacji, to polecałbym powrót do jednej z
Sens stosowania bare-metal JVM wewnątrz guest VM jest podobny do sensu
stosowania hypervisora w fizycznej maszynie: efektywność.
Przeciez to jest wierutna bzdura. Stosowanie wirtualizacji POGARSZA
wydajnosc, a nie ja polepsza.
Post by w***@googlemail.com
Warto zauważyć, że większość serwerowych hypervisor'ów (pomijam te
dedykowane do wirtualizacji dekstopowej) NIE KORZYSTA z systemu
operacyjnego. Dla przykładu: nie instaluje się VMware ESX jako
aplikacji wewnątrz OS'a. To VMware ESX pełni niektóre z funkcji OS'a.
VMware ESX bootuje się zaraz po BIOSie...
Taki hypervisor to _jest_ system operacyjny (tyle, ze dosyc kulawy).
Post by w***@googlemail.com
VMware ESX jest przykładem hypervisor'a typu bare-metal (tzn. działa
bezpośrednio - tj. _bez pośrednictwa OS_ - na fizycznym sprzęcie).
Bare-metal JVM też działa bezpośrednio na sprzęcie (tyle, że
wirtualnym - udostępnianym przez hypervisor).
ROTFL. A ten "wirtualny sprzet" to co to jest? Jak to mozliwe, ze program
dzialajacy na "wirtualnym sprzecie" dziala rownie szybko jak na sprzecie
rzeczywistym??

Chcialem zaznaczyc, ze JVM dzialajacy w srodowisku Linuxa, czy Windows
dziala bezposrednio na sprzecie (i to nie "wirtualnym"). System operacyjny
to nie jest interpreter, w zaden sposob nie "posredniczy w dzialaniu
programu na fizycznym sprzecie", system operacyjny tylko zarzadza dostepem
do tego sprzetu umozliwiajac _efektywna_ wspolprace _wielu_ programow
_jednoczesnie_.
Prosze - przeczytaj przynajmniej
http://pl.wikipedia.org/wiki/System_operacyjny
bo mam wrazenie, ze nie wiesz, o czym piszesz (MSPANC)
--
Michal
w***@googlemail.com
2008-11-19 23:03:47 UTC
Permalink
Post by Michal Kleczek
Przeciez to jest wierutna bzdura. Stosowanie wirtualizacji POGARSZA
wydajnosc, a nie ja polepsza.
Poszerz horyzonty: efektywność nie musi == wydajność.

Zapewniam Cie, że właśnie efektywność była motywacją m.in. przy
budowaniu takiego hypervisor'a jak VMware ESX i zrezygnowaniu przy tej
budowie z OS...

Z tą wydajnością, to też różnie bywa - to że jest dodatkowa warstwa w
postaci maszyny wirtualnej wprowadza pewien narzut, ale równocześnie
pozbywamy się paru innych warstw (np. OS). Dla poszerzenia wiedzy
poczytaj także o wsparciu dla wirtualizacji w procesorach (np. Intel
VTx czy AMD Pacifica) - pewnie się zdziwisz, ale "narzut"
wirtualizacji zaczyna być pomijalny i bywa mniejszy niż zysk z
pominięcia OS. Te argumenty jako żywo zaczynają przypominać te z
czasów przechodzenia z real-mode na protected mode 15 lat temu... Mity
trudno się zwalcza...
Post by Michal Kleczek
Taki hypervisor to _jest_ system operacyjny (tyle, ze dosyc kulawy).
Nie będę strzępił o to języka na ile hypervisor jest OS'em. W każdym
razie - jak widać nie opłacało się autorom hypervisor'ów skorzystać z
rzekomych zalet OS, skoro przy budowie hypervisorów OS'a się
pozbyli... Z podobnych powodów tak też zrobiono przy budowie bare-
metal JVM...
Post by Michal Kleczek
ROTFL. A ten "wirtualny sprzet" to co to jest? Jak to mozliwe, ze program
dzialajacy na "wirtualnym sprzecie" dziala rownie szybko jak na sprzecie
rzeczywistym??
Mnie to nie dziwi...
Post by Michal Kleczek
Chcialem zaznaczyc, ze JVM dzialajacy w srodowisku Linuxa, czy Windows
dziala bezposrednio na sprzecie (i to nie "wirtualnym"). System operacyjny
to nie jest interpreter, w zaden sposob nie "posredniczy w dzialaniu
programu na fizycznym sprzecie", system operacyjny tylko zarzadza dostepem
do tego sprzetu umozliwiajac _efektywna_ wspolprace _wielu_ programow
_jednoczesnie_.
Nie chciałbym się tu pastwić nad Tobą, ale mylisz się... To co OS
udostępnia, to są właśnie abstrakty sprzętu (i innych rzeczy). OS
DOKŁADNIE pośredniczy w tej komunikacji...

Pozdrawiam,
Waldek Kot
Michal Kleczek
2008-11-20 00:04:22 UTC
Permalink
Post by w***@googlemail.com
Post by Michal Kleczek
Przeciez to jest wierutna bzdura. Stosowanie wirtualizacji POGARSZA
wydajnosc, a nie ja polepsza.
Poszerz horyzonty: efektywność nie musi == wydajność.
Zacytuje to, co wyciales:
<quote>
mk> Ja nie sugeruje, ze wirtualizacja jako taka jest niepotrzebna. Tylko
mk> mowie, ze pomysl odpalania JVM jako guest os jest bez sensu.

Sens ma taki sam, jak odpalanie OS w guest vm. Tyle, że efektywniej (w
każdym razie dla serwerowych aplikacji Java).
</quote>

Co rozumiesz przez "efektywniej" w zdaniu, ktore napisales?
Post by w***@googlemail.com
Zapewniam Cie, że właśnie efektywność była motywacją m.in. przy
budowaniu takiego hypervisor'a jak VMware ESX i zrezygnowaniu przy tej
budowie z OS...
Post by Michal Kleczek
Chcialem zaznaczyc, ze JVM dzialajacy w srodowisku Linuxa, czy Windows
dziala bezposrednio na sprzecie (i to nie "wirtualnym"). System
operacyjny to nie jest interpreter, w zaden sposob nie "posredniczy w
dzialaniu programu na fizycznym sprzecie", system operacyjny tylko
zarzadza dostepem do tego sprzetu umozliwiajac _efektywna_ wspolprace
_wielu_ programow _jednoczesnie_.
Nie chciałbym się tu pastwić nad Tobą, ale mylisz się... To co OS
udostępnia, to są właśnie abstrakty sprzętu (i innych rzeczy). OS
DOKŁADNIE pośredniczy w tej komunikacji...
Program, ktory uruchamiam to ciag instrukcji procesora. OS (w kazdym razie
nie Win czy unixopodobne) w zaden sposob nie posredniczy w wykonywaniu tych
instrukcji przez procesor.

Fakt - system operacyjny udostepnia rowniez zestaw funkcji _ulatwiajacych_
aplikacjom pewne operacje (np. zapis/odczyt z dysku) - rozumiem, ze to
nazywasz "abstraktem sprzetu". Sugerowanie, ze te funkcje to "narzut" to
tak, jakby twierdzic, ze RDBMS jest narzutem dla aplikacji Java, bo nie
pozwala jej bezposrednio komunikowac sie z twardym dyskiem.

Hypervisor jest pod tym wzgledem zreszta znacznie gorszy - tzn. z jednej
strony nie udostepnia takich funkcji - czyli aplikacji (nazwijmy ja maszyna
wirtualna) wydaje sie, ze komunikuje sie bezposrednio ze sprzetem. A narzut
(w sensie wydajnosci) na przetlumaczenie instrukcji "wirtualnego sprzetu"
na instrukcje rzeczywistego sprzetu i tak wystepuje.
Gdzies pisales, ze taka "bare metal" JVM nie potrzebuje systemu plikow
(czyli zestawu funkcji _ulatwiajacych_ zapis/odczyt dysku). Z tego by
wynikalo, ze sama posiada implementacje systemu plikow (lub czegos
analogicznego). Chociazby po, to zeby mogla wykonac instrukcje:
new FileInputStream("/home/mkleczek/plik.txt").read();
Analogicznie - musi zawierac implementacje wszystkiego tego, co dostarcza
OS. Tak swoja droga - rzeczywiscie JVM ma wbudowane mechanizmy szeregowania
zadan. Ale hypervisor _rowniez_ szereguje zadania (bo musi umiec uruchomic
wiele maszyn wirtualnych jednoczesnie). Jak jest zapewnione, ze to ze soba
nie interferuje? Czy hypervisor _tez_ jest zmodyfikowany w jakis sposob?

Nastepna rzecz - pisales jak szkodliwy dla JVM jest swap w OS. Rozumiem, ze
taka "bare metal" JVM ma wbudowana obsluge pamieci wirtualnej. W przeciwnym
wypadku moze korzystac tylko z takiego fragmentu przestrzeni adresowej, ile
jest dostepnej (dla niej) fizycznej pamieci. Co jest straszna kicha, bo w
przypadku np. naglego chwilowego przeciazenia systemu rzuca
OutOfMemoryError zamiast po prostu zrzucic nieuzywane w tej chwili dane z
pamieci na dysk. No chyba, ze to hypervisor zapewnia obsluge pamieci
wirtualnej - ale wtedy rozroznienie "hypervisor"/OS staje sie juz naprawde
baardzo trudne.

Tak generalnie - jak rozumiem - pociaga cie idea Java OS (tzn. pozwalajacy
uruchamiac _tylko_ aplikacje Javy). Fakt, ze taki Java OS zaimplementowany
jest z uzyciem jakiegos tam produktu sluzacego do wirtualizacji i tylko z
nim moze wspolpracowac jest przeciez szczegolem implementacyjnym (zreszta
bedacym raczej _wada_ niz zaleta).

Jak pisalem wczesniej - idea Java OS narodzila sie niedlugo po tym, jak
powstala Java. I umarla niedlugo po tym, jak sie narodzila, bo nikt tego
nie potrzebowal. I - IMHO - nadal nie potrzebuje.
--
Michal
w***@googlemail.com
2008-11-20 09:53:32 UTC
Permalink
Post by Michal Kleczek
<quote>
mk> Ja nie sugeruje, ze wirtualizacja jako taka jest niepotrzebna. Tylko
mk> mowie, ze pomysl odpalania JVM jako guest os jest bez sensu.
Sens ma taki sam, jak odpalanie OS w guest vm. Tyle, że efektywniej (w
każdym razie dla serwerowych aplikacji Java).
</quote>
Co rozumiesz przez "efektywniej" w zdaniu, ktore napisales?
Efektywniejsze wykorzystanie różnych zasobów: CPU, pamięć, dysków,
sieci, itd. Po raz kolejny posłużę się tutaj analogią do implementacji
hypervisorów (np. Xen czy VMware) BEZ użycia systemu operacyjnego...
Post by Michal Kleczek
Program, ktory uruchamiam to ciag instrukcji procesora. OS (w kazdym razie
nie Win czy unixopodobne) w zaden sposob nie posredniczy w wykonywaniu tych
instrukcji przez procesor.
Zgadza się. Zresztą to Ty, a nie ja użyłeś omylnie słowa
"interpretacja", ja mówiłem o "pośredniczeniu" w komunikacji pomiędzy
aplikacją a sprzętem a nie o "interpretowaniu" kodu maszynowego .
Swoją drogą jestem absolutnie pewien, że i do tego dojdzie, że
hypervisor wykonując kod maszynowy umieszczony w zarządzanej przez
niego maszynie wirtualnej będzie dokonywał jego analizy i modyfikacji,
właśnie między innymi w poszukiwaniu większej wydajności. Zachowując
skalę - analogia do out-of-order execution i innych optymalizacji w
dzisiejszych procesorach jest dosyć oczywista (może i nawet lepszym
przykładem byłyby optymalizacje bytecode'u wykonywane w locie przez
JVM). Nie znam tak niskopoziomowych detali hypervisor'ów, więc nie
wiem, czy tego rodzaju operacje nie są wykonywane już dzisiaj - mogę
tylko spekulować...
Post by Michal Kleczek
Sugerowanie, ze te funkcje to "narzut" to [...]
Tak, często jest to narzut, zwłaszcza jeśli większość tych funkcji nie
jest wykorzystywanych (ani przez hypervisor - a idąc "w górę" - przez
JVM też nie). Nawet wieloprocesowość jest narzutem (i to sporym -
wracam do innego przytoczonego wcześniej przykładu, czyli OSów konsol
do gier). Od normalnego OS, zwłaszcza desktopowego, oczywiście
oczekujemy wieloprocesowości, bo inaczej trudno byłoby pracować.
Natomiast WIĘKSZOŚĆ serwerowych aplikacji Java/JEE takiej
wieloprocesowości nie potrzebuje i jej nie używa. Stąd, w maszynie
wirtualnej, bare-metal udostępnia JVM jednoprocesową "namiastkę" OS. Z
korzyścią dla aplikacji Java/JEE.
Post by Michal Kleczek
A narzut (w sensie wydajnosci) na przetlumaczenie instrukcji "wirtualnego sprzetu"
na instrukcje rzeczywistego sprzetu i tak wystepuje.
Tak, bo KAŻDA warstwa wprowadza określony narzut (warstwy OS też).
Wsparcie wirtualizacji w procesorach powoduje jednak, że narzut
hypervisor'a i jego maszyn wirtualnych staje się dzisiaj często
pomijalny. W każdym razie narzut jest tu mniejszy niż zysk z
rezygnacji z warstw OS. Przypominam: implementujący hypervisor'y
POZBYLI SIĘ OS... Podobnie robią implementujący warstwę bare-metal
JVM.
Post by Michal Kleczek
Gdzies pisales, ze taka "bare metal" JVM nie potrzebuje systemu plikow
(czyli zestawu funkcji _ulatwiajacych_ zapis/odczyt dysku).
Nie potrzebuje, bo może skorzystać z tego, co daje jej hypervisor w
postaci zdalnego dostępu do storage'u (większość porządnych
hypervisorów daje takie wsparcie). Bare-metal _implementuje_ jednak
filesystem, bo z punktu widzenia wydajności dobrze jest mieć
odpowiednik lokalnego dysku. Inaczej wszystkie odwołania do dysków
(np. zapis do logu przez kontener czy aplikację Java) wiązałby się ze
zdalnym wywołaniem. Inna sprawa, czy to co JVM widzi jako lokalny dysk
jest rzeczywiście fizycznie lokalnym dyskiem (używając wirtualizacji
nie musi tak być...).
Post by Michal Kleczek
Analogicznie - musi zawierac implementacje wszystkiego tego, co dostarcza OS.
No właśnie: nie wszystkiego, a tylko minimum tego co potrzeba. W
hypervisorze: minimum tego co potrzebuje do działania maszyna
wirtualna. W bare-metal: minimum tego co potrzebuje do działania JVM
dla serwerowych aplikacji Java.
Post by Michal Kleczek
Nastepna rzecz - pisales jak szkodliwy dla JVM jest swap w OS. Rozumiem, ze
taka "bare metal" JVM ma wbudowana obsluge pamieci wirtualnej. W przeciwnym
wypadku moze korzystac tylko z takiego fragmentu przestrzeni adresowej, ile
jest dostepnej (dla niej) fizycznej pamieci. Co jest straszna kicha, bo w
przypadku np. naglego chwilowego przeciazenia systemu rzuca
OutOfMemoryError zamiast po prostu zrzucic nieuzywane w tej chwili dane z
pamieci na dysk. No chyba, ze to hypervisor zapewnia obsluge pamieci
wirtualnej - ale wtedy rozroznienie "hypervisor"/OS staje sie juz naprawde
baardzo trudne.
W pewnym sensie taką implementację pamięci wirtualnej posiada, chociaż
jest to bardziej obsługa wirtualnej pamięci wirtualnej (podwójne
użycie słowa "wirtualnej" nie jest tu pomyłką) - jeśli pod spodem jest
hypervisor, to ten mechanizm jest zresztą znacznie uproszczony. Warto
pamiętać, że warstwie bare-metal wydaje się, że działa na normalnym
sprzęcie (RAM, itd.), chociaż de facto działa na sprzęcie wirtualnym,
udostępnianym przez maszynę wirtualną. Sytuacja OOME o której piszesz
nie ma miejsca, bo obsługą pamięci wirtualnej (pojedyncze słowo
"wirtualnej") zajmuje się hypervisor (no chyba, że jemu hypervisor
skończy się pamięć). Notabene - właśnie obsługa tego rodzaju mapowań
wirtualnych wirtualnych adresów na wirtualne adresy jest tym, co można
znaleźć w procesorach wspierających wirtualizację (technologie Intel
VTx w Core 2, i7 i Xeon czy AMD Pacifica). Nie muszę wspominać, że
obsługa mapowania wirtualnych adresów na fizyczne jest wbudowana od
dawna (jeśli mnie pamięć nie myli dla Intel x86 chyba od 386).
Post by Michal Kleczek
Tak generalnie - jak rozumiem - pociaga cie idea Java OS (tzn. pozwalajacy
uruchamiac _tylko_ aplikacje Javy).
Napisałem już o tym wcześniej, że nie pociąga mnie idea Java OS (tzn.
systemu operacyjnego napisanego _w_ Java). Hypervisor, warstwa bare-
metal JVM i sama JVM są napisane przede wszystkim w C, ze sporym
udziałem asemblera. <banał>Java nie służy do budowy oprogramowania
systemowego</banał>
Natomiast rzeczywiście wierzę w ideę OS _dla_ Java. Podobnie, wierzę w
to co daje wirtualizacja, w tym wirtualizacja Java.
Post by Michal Kleczek
Fakt, ze taki Java OS zaimplementowany
jest z uzyciem jakiegos tam produktu sluzacego do wirtualizacji i tylko z
nim moze wspolpracowac jest przeciez szczegolem implementacyjnym (zreszta
bedacym raczej _wada_ niz zaleta).
To już się pogubiłem z tym, czy Ty uznajesz zalety wirtualizacji, czy
nie. Przyznam też, że trochę zaczynam wątpić w Twoje zrozumienie jak
działa wirtualizacja z użyciem hypervisor'a...

Pozdrawiam,
Waldek Kot
Michal Kleczek
2008-11-20 11:02:51 UTC
Permalink
Post by w***@googlemail.com
Post by Michal Kleczek
<quote>
mk> Ja nie sugeruje, ze wirtualizacja jako taka jest niepotrzebna. Tylko
mk> mowie, ze pomysl odpalania JVM jako guest os jest bez sensu.
Sens ma taki sam, jak odpalanie OS w guest vm. Tyle, że efektywniej (w
każdym razie dla serwerowych aplikacji Java).
</quote>
Co rozumiesz przez "efektywniej" w zdaniu, ktore napisales?
Efektywniejsze wykorzystanie różnych zasobów: CPU, pamięć, dysków,
sieci, itd. Po raz kolejny posłużę się tutaj analogią do implementacji
hypervisorów (np. Xen czy VMware) BEZ użycia systemu operacyjnego...
Nie pytalem _czego_ efektywniejsze wykorzystanie, tylko "co to znaczy
efektywniejsze?" (w kontekscie tego, ze _ty_ napisales, ze
"efektywniej != wydajniej" - chce po prostu zrozumiec, co masz na mysli)
Post by w***@googlemail.com
Post by Michal Kleczek
Program, ktory uruchamiam to ciag instrukcji procesora. OS (w kazdym
razie nie Win czy unixopodobne) w zaden sposob nie posredniczy w
wykonywaniu tych instrukcji przez procesor.
Zgadza się. Zresztą to Ty, a nie ja użyłeś omylnie słowa
"interpretacja", ja mówiłem o "pośredniczeniu" w komunikacji pomiędzy
aplikacją a sprzętem a nie o "interpretowaniu" kodu maszynowego .
Moze musimy ustalic terminologie zanim zaczniemy dyskutowac. Co wedlug
ciebie oznacza "posredniczenie w komunikacji pomiędzy aplikacją a
sprzętem"?
Pamietaj, ze program (aplikacja) sam z siebie (tzn. bez sprzetu + ew.
interpretera) nic nie "robi" (w szczegolnosci nie moze sie ze
sprzetem "komunikowac") - jest po prostu ciagiem zer i jedynek.
Post by w***@googlemail.com
Post by Michal Kleczek
Sugerowanie, ze te funkcje to "narzut" to [...]
Tak, często jest to narzut, zwłaszcza jeśli większość tych funkcji nie
jest wykorzystywanych (ani przez hypervisor - a idąc "w górę" - przez
JVM też nie).
Rozumiem, ze chodzi ci o narzut na wydajnosc. Jesli tak, to skoro nie sa
wykorzystywane, to w jaki sposob moga byc narzutem? Zajmuja miejsce na
dysku? LOL
Post by w***@googlemail.com
Nawet wieloprocesowość jest narzutem (i to sporym -
wracam do innego przytoczonego wcześniej przykładu, czyli OSów konsol
do gier). Od normalnego OS, zwłaszcza desktopowego, oczywiście
oczekujemy wieloprocesowości, bo inaczej trudno byłoby pracować.
Natomiast WIĘKSZOŚĆ serwerowych aplikacji Java/JEE takiej
wieloprocesowości nie potrzebuje i jej nie używa. Stąd, w maszynie
wirtualnej, bare-metal udostępnia JVM jednoprocesową "namiastkę" OS. Z
korzyścią dla aplikacji Java/JEE.
Ale przeciez hypervisor jak najbardziej implementuje wielozadaniowosc
(celowo nie uzywam slowa wieloprocesowosc) - musi to robic, bo musi umiec
uruchamiac _wiele_ maszyn wirtualnych na _jednym_ komputerze.
Post by w***@googlemail.com
Post by Michal Kleczek
A narzut (w sensie wydajnosci) na przetlumaczenie instrukcji "wirtualnego
sprzetu" na instrukcje rzeczywistego sprzetu i tak wystepuje.
Tak, bo KAŻDA warstwa wprowadza określony narzut (warstwy OS też).
Wsparcie wirtualizacji w procesorach powoduje jednak, że narzut
hypervisor'a i jego maszyn wirtualnych staje się dzisiaj często
pomijalny. W każdym razie narzut jest tu mniejszy niż zysk z
rezygnacji z warstw OS. Przypominam: implementujący hypervisor'yi
POZBYLI SIĘ OS... Podobnie robią implementujący warstwę bare-metal
JVM.
Pozbyli sie _nazwy_ "OS" i zastapili ja nazwa "hypervisor".
Post by w***@googlemail.com
Post by Michal Kleczek
Gdzies pisales, ze taka "bare metal" JVM nie potrzebuje systemu plikow
(czyli zestawu funkcji _ulatwiajacych_ zapis/odczyt dysku).
Nie potrzebuje, bo może skorzystać z tego, co daje jej hypervisor w
postaci zdalnego dostępu do storage'u (większość porządnych
hypervisorów daje takie wsparcie).
Tzn. jak to - aplikacja Java steruje dyskiem przy pomocy komend SCSI? LOL.
Post by w***@googlemail.com
Bare-metal _implementuje_ jednak
filesystem, bo z punktu widzenia wydajności dobrze jest mieć
odpowiednik lokalnego dysku. Inaczej wszystkie odwołania do dysków
(np. zapis do logu przez kontener czy aplikację Java) wiązałby się ze
zdalnym wywołaniem. Inna sprawa, czy to co JVM widzi jako lokalny dysk
jest rzeczywiście fizycznie lokalnym dyskiem (używając wirtualizacji
nie musi tak być...).
Czyli implementacja systemu plikow w JVM w jakis magiczny sposob powoduje,
ze dostep zdalnego storage staje sie tak samo szybki jak do lokalnego...
Dawno sie tak nie usmialem.
Post by w***@googlemail.com
Post by Michal Kleczek
Analogicznie - musi zawierac implementacje wszystkiego tego, co dostarcza OS.
No właśnie: nie wszystkiego, a tylko minimum tego co potrzeba. W
hypervisorze: minimum tego co potrzebuje do działania maszyna
wirtualna. W bare-metal: minimum tego co potrzebuje do działania JVM
dla serwerowych aplikacji Java.
Czyli co?
- zarzadzanie pamiecia wirtualna
- wielozadaniowosc
- obsluge IO (w tym system plikow)
- inne??

Hmm... pachnie mi to OS (pod inna nazwa).
Post by w***@googlemail.com
W pewnym sensie taką implementację pamięci wirtualnej posiada, chociaż
jest to bardziej obsługa wirtualnej pamięci wirtualnej (podwójne
użycie słowa "wirtualnej" nie jest tu pomyłką)
Dokladnie - jest to zrobione po to, zeby mozna bylo uruchamiac programy,
ktore zostaly zaprojektowane w taki sposob, ze wymagaja _wylacznego_
dostepu do sprzetu (te programy to - przede wszystkim - systemy
operacyjne). I to jest "narzut". I ten narzut jest zupelnie zbedny jezeli
mamy programy zaprojektowane w taki sposob, ze _nie_ wymagaja wylacznego
dostepu do sprzetu (czyli np. JVM).
Obsluga pamieci wirtualnej poprzez _zwielokrotnienie_ krokow w translacji
adresow NIC INNEGO nie daje - a juz na pewno nie daje magicznie wzrostu
jakiejs tam "efektywnosci".
Post by w***@googlemail.com
Post by Michal Kleczek
Tak generalnie - jak rozumiem - pociaga cie idea Java OS (tzn.
pozwalajacy uruchamiac _tylko_ aplikacje Javy).
Napisałem już o tym wcześniej, że nie pociąga mnie idea Java OS (tzn.
systemu operacyjnego napisanego _w_ Java).
Nie pisalem o takim.
Post by w***@googlemail.com
Hypervisor, warstwa bare-
metal JVM i sama JVM są napisane przede wszystkim w C, ze sporym
udziałem asemblera.
Natomiast rzeczywiście wierzę w ideę OS _dla_ Java.
Pisalem wlasnie o takim - po co komu taki "OS"?
Post by w***@googlemail.com
Podobnie, wierzę w
to co daje wirtualizacja, w tym wirtualizacja Java.
"Wirtualizacja Java" to jest "maslo maslane", bo JVM jest - z
definicji - "maszyna wirtualna" od poczatku swojego istnienia.
Post by w***@googlemail.com
Post by Michal Kleczek
Fakt, ze taki Java OS zaimplementowany
jest z uzyciem jakiegos tam produktu sluzacego do wirtualizacji i tylko z
nim moze wspolpracowac jest przeciez szczegolem implementacyjnym (zreszta
bedacym raczej _wada_ niz zaleta).
To już się pogubiłem z tym, czy Ty uznajesz zalety wirtualizacji, czy
nie. Przyznam też, że trochę zaczynam wątpić w Twoje zrozumienie jak
działa wirtualizacja z użyciem hypervisor'a...
Dobrze - mozemy zaczac od poczatku, jak ci sie nie nudzi.
Jaki jest - wg ciebie - CEL uruchamiania JVM nie jako programu w OS, a
maszyny wirtualnej np. VMWare?
Co takiego - w kontekscie uruchamiania JVM - ma VMWare, czego nie ma np.
Linux lub Solaris?
--
Michal
w***@googlemail.com
2008-11-20 11:59:14 UTC
Permalink
Post by Michal Kleczek
Rozumiem, ze chodzi ci o narzut na wydajnosc. Jesli tak, to skoro nie sa
wykorzystywane, to w jaki sposob moga byc narzutem? Zajmuja miejsce na
dysku? LOL
Przykład narzutu związanego z wieloprocesowością który podałem jest
chyba dosyć oczywisty. Obsługa wielu procesów w OS jest i nie da się
jej ominąć (no, może schodząc na poziom kernela i niskich ringów). A
(do pracy serwerowej JVM) taka funkcjonalność potrzebna nie jest. Got
my point ?
Post by Michal Kleczek
Ale przeciez hypervisor jak najbardziej implementuje wielozadaniowosc
(celowo nie uzywam slowa wieloprocesowosc) - musi to robic, bo musi umiec
uruchamiac _wiele_ maszyn wirtualnych na _jednym_ komputerze.
Hypervisor tak, ale nie musi do tego celu używać OS'a (a chyba o to
idzie spór). Mechanizmy OSowe w tym zakresie są osobom implementującym
hypervisor nieprzydatne, bo hypervisor musi koordynować dostęp maszyn
wirtualnych do zasobów i są tu istotne różnice w stosunku do
koordynacji dostępu procesów systemu operacyjnego do zasobów...
Natomiast wieloprocesowość nie jest potrzebna (przynajmniej w
przytłaczającej większości przypadków) JVM wykonującej aplikacje
serwerowe Java.
Post by Michal Kleczek
Pozbyli sie _nazwy_ "OS" i zastapili ja nazwa "hypervisor".
Nie.
Post by Michal Kleczek
Tzn. jak to - aplikacja Java steruje dyskiem przy pomocy komend SCSI? LOL.
Nie. Przypominam, że JVM (a także uruchomione w niej kontenery i
aplikacje) nie mają świadomości, że pod spodem nie ma OS. Także, nie
mają świadomości, że to co widzą jako np. lokalny dysk SCSI w
rzeczywistości może być dyskiem IDE...

Implementacja lokalnego filesystemu odbywa się w warstwie bare-metal
(czyli między JVM a hypervisorem). A precyzyjniej dołożony jest tylko
logiczny widok (no właśnie - filesystem), bo operacje I/O są
wykonywane przez hypervisor (a dalej wiadomo...)
Post by Michal Kleczek
Czyli implementacja systemu plikow w JVM w jakis magiczny sposob powoduje,
ze dostep zdalnego storage staje sie tak samo szybki jak do lokalnego...
Dawno sie tak nie usmialem.
Znowu nie zrozumiałeś (nie chciałeś ?). Mimo, iż nie jest to konieczne
do działania "JVM bez OS", w warstwie bare-metal dołożono obsługę
lokalnego filesystemu, bo inaczej każda operacja odczytu/zapisu do
dysku wiązałaby się ze zdalną komunikacją (np. do NAS).
Post by Michal Kleczek
Czyli co?
- zarzadzanie pamiecia wirtualna
- wielozadaniowosc
- obsluge IO (w tym system plikow)
- inne??
Hmm... pachnie mi to OS (pod inna nazwa).
Jak już napisałem, nie będę strzępił języka o nieistotne w tym
przypadku nazewnictwo. W każdym razie, to co w tym zakresie dawały
normalne OSy NIE przydało się implementującym hypervisor.
Post by Michal Kleczek
Obsluga pamieci wirtualnej poprzez _zwielokrotnienie_ krokow w translacji
adresow NIC INNEGO nie daje - a juz na pewno nie daje magicznie wzrostu
jakiejs tam "efektywnosci".
I o niczym takim jak wzrost efektywności poprzez wprowadzenie
wirtualnej pamięci nie pisałem (czy Ty próbujesz w ogóle zrozumieć to
co piszę ?). Efektywność bierze się z wyeliminowania iluś tam zbędnych
tu warstw OS.
Post by Michal Kleczek
Post by w***@googlemail.com
Natomiast rzeczywiście wierzę w ideę OS _dla_ Java.
Pisalem wlasnie o takim - po co komu taki "OS"?
Są tacy, którym jest to bardzo potrzebne. Tobie może nie... Biorąc pod
uwagę Twoją ocenę rzeczywistości dotyczącej Java, nie dziwi mnie to
(martwić też nie martwi, bo wiesz co o tej ocenie sądzę).
Post by Michal Kleczek
"Wirtualizacja Java" to jest "maslo maslane", bo JVM jest - z
definicji - "maszyna wirtualna" od poczatku swojego istnienia.
Nie jest "masłem maślanym". Tu znowu nie jestem pewien, czy - wbrew
temu co przyznałeś wcześniej - rozumiesz zalety wirtualizacji. Można
korzystać z zalet wirtualizacji takiej jaką daje technologia
hypervisor'ów (np. podział fizycznej maszyny na wiele maszyn
logicznych, przenoszenie maszyn logicznych na inne fizyczne, prostszy
model dystrybucji oprogramowania, lepsze security, itd) TAKŻE dla
aplikacji stworzonych w technologii Java, czyli działających w ramach
maszyny wirtualnej. Zalety wirtualizacji maszyny wirtualnej są zresztą
dla javowej JVM takie same jak dla innych technologii korzystających z
maszyn wirtualnych (np. .NET CLR, czy flash). Pojęcie "wirtualizacja"
jest dosyć pojemne...
Post by Michal Kleczek
Dobrze - mozemy zaczac od poczatku, jak ci sie nie nudzi.
Jaki jest - wg ciebie - CEL uruchamiania JVM nie jako programu w OS, a
maszyny wirtualnej np. VMWare?
Wystarczająco dużo już o tym napisałem. Wystarczy (chcieć)
zrozumieć...
Post by Michal Kleczek
Co takiego  - w kontekscie uruchamiania JVM - ma VMWare, czego nie ma np.
Linux lub Solaris?
Wszystkie zalety płynące z technologii wirtualizacji poprzez
hypervisor. Mówiąc o bare-metal JVM pytanie zresztą powinno być
postawione inaczej: co takiego - w kontekście uruchamiania JVM - ma
bare-metal, czego nie ma np. Linux lub Solaris ? Znowu, starałem się
udzielić sporo wyjaśnień na to pytanie...

Pozdrawiam,
Waldek Kot
Michal Kleczek
2008-11-20 12:39:14 UTC
Permalink
Post by w***@googlemail.com
Znowu nie zrozumiałeś (nie chciałeś ?). Mimo, iż nie jest to konieczne
do działania "JVM bez OS", w warstwie bare-metal dołożono obsługę
lokalnego filesystemu, bo inaczej każda operacja odczytu/zapisu do
dysku wiązałaby się ze zdalną komunikacją (np. do NAS).
Najpierw piszesz, ze warstwa bare-metal nie wie, czy storage jest zdalny,
czy lokalny (bo przykrywa to hypervisor). Teraz piszesz, ze "dolozono
obsluge lokalnego filesystemu". Pogubilem sie.
Post by w***@googlemail.com
Post by Michal Kleczek
Czyli co?
- zarzadzanie pamiecia wirtualna
- wielozadaniowosc
- obsluge IO (w tym system plikow)
- inne??
Hmm... pachnie mi to OS (pod inna nazwa).
Jak już napisałem, nie będę strzępił języka o nieistotne w tym
przypadku nazewnictwo. W każdym razie, to co w tym zakresie dawały
normalne OSy NIE przydało się implementującym hypervisor.
Czyzby nasza dyskusja sprowadzala sie do tego, ze "normalne OSy"
implementuja te funkcje gorzej? Smiem watpic, szczegolnie ze - jak znam
zycie - to np. taki VMWare ESX to (w zakresie powyzszych funkcji) nic
innego jak BSD (nie Linux ze wzgledow licencyjnych) (aczkolwiek to tylko
moje podejrzenie - po prostu nie przypuszczam, zeby komukolwiek oplacalo
sie implementowac to jeszcze raz skoro juz jest i to za darmo).
Przypuszczenie poparte faktem, ze VMWare _najpierw_ zrobilo VMWare
Worksatation, a dopiero _potem_ VMServer - co by sugerowalo, ze ktos wpadl
na oczywisty pomysl sklejenia posixowego jadra z VMware Workstation i
sprzedawania tego w jednym pudelku pod nowa nazwa.
Post by w***@googlemail.com
Post by Michal Kleczek
Obsluga pamieci wirtualnej poprzez _zwielokrotnienie_ krokow w translacji
adresow NIC INNEGO nie daje - a juz na pewno nie daje magicznie wzrostu
jakiejs tam "efektywnosci".
I o niczym takim jak wzrost efektywności poprzez wprowadzenie
wirtualnej pamięci nie pisałem (czy Ty próbujesz w ogóle zrozumieć to
co piszę ?). Efektywność bierze się z wyeliminowania iluś tam zbędnych
tu warstw OS.
OS nie ma zadnych "warstw" w zakresie zarzadzania pamiecia. Obsluguje tylko
przerwania bledu dostepu do strony generowane przez procesor - nic wiecej.
Post by w***@googlemail.com
Post by Michal Kleczek
Post by w***@googlemail.com
Natomiast rzeczywiście wierzę w ideę OS _dla_ Java.
Pisalem wlasnie o takim - po co komu taki "OS"?
Są tacy, którym jest to bardzo potrzebne. Tobie może nie... Biorąc pod
uwagę Twoją ocenę rzeczywistości dotyczącej Java, nie dziwi mnie to
(martwić też nie martwi, bo wiesz co o tej ocenie sądzę).
Post by Michal Kleczek
"Wirtualizacja Java" to jest "maslo maslane", bo JVM jest - z
definicji - "maszyna wirtualna" od poczatku swojego istnienia.
Nie jest "masłem maślanym". Tu znowu nie jestem pewien, czy - wbrew
temu co przyznałeś wcześniej - rozumiesz zalety wirtualizacji. Można
korzystać z zalet wirtualizacji takiej jaką daje technologia
hypervisor'ów (np. podział fizycznej maszyny na wiele maszyn
logicznych, przenoszenie maszyn logicznych na inne fizyczne, prostszy
model dystrybucji oprogramowania, lepsze security, itd) TAKŻE dla
aplikacji stworzonych w technologii Java, czyli działających w ramach
maszyny wirtualnej. Zalety wirtualizacji maszyny wirtualnej
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

LOL
Moim zdaniem - to bez sensu.
Post by w***@googlemail.com
Mówiąc o bare-metal JVM pytanie zresztą powinno być
postawione inaczej: co takiego - w kontekście uruchamiania JVM - ma
bare-metal, czego nie ma np. Linux lub Solaris ? Znowu, starałem się
udzielić sporo wyjaśnień na to pytanie...
Moze jestem za tepy - ale jedyne co zrozumialem, to tyle, ze jest
to "bardziej efektywne" - cokolwiek by to mialo znaczyc.
Jezeli znaczy to "bardziej wydajne" to nie poparles tego ani zadnymi danymi
doswiadczalnymi, ani przekonywajacymi (mnie) _technicznymi_ argumentami.
--
Michal
w***@googlemail.com
2008-11-20 13:34:04 UTC
Permalink
Post by Michal Kleczek
Post by w***@googlemail.com
Znowu nie zrozumiałeś (nie chciałeś ?). Mimo, iż nie jest to konieczne
do działania "JVM bez OS", w warstwie bare-metal dołożono obsługę
lokalnego filesystemu, bo inaczej każda operacja odczytu/zapisu do
dysku wiązałaby się ze zdalną komunikacją (np. do NAS).
Najpierw piszesz, ze warstwa bare-metal nie wie, czy storage jest zdalny,
czy lokalny (bo przykrywa to hypervisor). Teraz piszesz, ze "dolozono
obsluge lokalnego filesystemu". Pogubilem sie.
Witaj w świecie wirtualizacji. Chodziło mi oczywiście o lokalny
wirtualny filesystem. Czyli, aby wewnątrz VM, warstwa bare-metal
udostępniała filesystem dla JVM.

Dłuższa wersja wyjaśnienia: wewnątrz maszyny wirtualnej można utworzyć
wirtualne dyski i "zmapować" je na określony fizyczny storage. Te
wirtualne dyski są jednak "surowe" i żeby móc z nich skorzystać
potrzebny jest filesystem. Normalnie - czyli w maszynie wirtualnej w
której jest guest OS - filesystem jest tworzony przez ten guest OS. W
podejściu bare-metal JVM nie ma guest OS, stąd trzeba tę
funkcjonalność filesystemu dodać. Nie można jej dodać do JVM (bo
założenie jest takie, że JVM jest "standardowy", czytaj
niemodyfikowany). Więc drugim miejscem jest sama warstwa bare-metal,
gdzie filesystem jest uruchamiany jako jednak z usług systemowych.
Post by Michal Kleczek
Czyzby nasza dyskusja sprowadzala sie do tego, ze "normalne OSy"
implementuja te funkcje gorzej? Smiem watpic, szczegolnie ze - jak znam
zycie - to np. taki VMWare ESX to (w zakresie powyzszych funkcji) nic
innego jak BSD (nie Linux ze wzgledow licencyjnych) (aczkolwiek to tylko
moje podejrzenie - po prostu nie przypuszczam, zeby komukolwiek oplacalo
sie implementowac to jeszcze raz skoro juz jest i to za darmo).
Mylisz się. Ale jest to jeden z częstszych mitów o VMware ESX
(spotkałem się nawet z osobami, które mają certyfikaty VMware ESX,
które taką tezę jak ta Twoja o BSD rozpowszechniały), więc warto to
wyjaśnić (że mit nadal będzie funkcjonować to jestem przekonany,
podobnie jak i mit o wydajności Java). Architektura ESX jest inna.
Przed wyjściem wersji 3i (czyli ok. 1-1.5 temu) rzeczywiście ESX jako
software był dystrybuowany i instalowany wraz z Linuxem (trochę
zmodyfikowana wersja RHEL 3.x). Powstawało zatem wrażenie, że ten
Linux pełni tutaj jakąś ważną rolę. Prawda była inna: ten Linux był
używany WYŁĄCZNIE do zainstalowania ESX, a po instalacji - do
zabootowania się jądra ESX oraz do zarządzania hypervisorem (w sensie
konsoli administracyjnej, alarmów, SNMP, itd.). Wyglądało to tak, że
był ponad 2GB OS do którego doklejono ok. 20 MB kod hypervisor'a (2% z
dawnego ESX to hypervisor). Z tych 2 GB poza wymienionymi (boot +
konsola + administracja) hypervisor nie używał nic. Przy okazji - i
tu są rzeczy, które ludzie z VMware pokazywali - okazało się że
zdecydowana większość patch'y i security exploit'ów dotyczyła właśnie
tej OSowej części ESX. To co zrobiono przy okazji ESX 3i, to wyrzucono
zbędną z punktu widzenia hypervisor'a narośl w postaci OS, dołożono
bootowanie i mechanizmy zarządcze. W efekcie powstał 31 MB kawałek
kodu (przy tym przejściu z 20MB na 31MB pojawiły się też nowe
funkcje), którym w tej chwili jest ESX. Na tyle, że wielu dostawców
sprzętu (np. Dell, czy HP) wbudowują go w płyty główne swoich serwerów
(czyli nawet odpada etap instalacji hypervisora) - wygląda to mniej
więcej jak secondary BIOS takiej maszyny, tyle, że maszyny wirtualnej
można robić...

Jak widzisz opłacało się i to z wielkim pożytkiem...

Tu przy okazji po raz n-ty przywołam, że z podobnych powodów zrobiono
bare-metal JVM, w którym z guest VM pozbyto się zbędnej dla
serwerowych aplikacji Java narośli w postaci guest OS i zastąpiono ją
cienką warstwą bare-metal.
Post by Michal Kleczek
Przypuszczenie poparte faktem, ze VMWare _najpierw_ zrobilo VMWare
Worksatation, a dopiero _potem_ VMServer - co by sugerowalo, ze ktos wpadl
na oczywisty pomysl sklejenia posixowego jadra z VMware Workstation i
sprzedawania tego w jednym pudelku pod nowa nazwa.
A - bo chyba stąd wynikają niektóre z Twoich teorii - VMware Server i
VMware ESX to nie to samo...
Post by Michal Kleczek
Moim zdaniem - to bez sensu.
Jak już napisałem nie dziwię się...

Pozdrawiam,
Waldek Kot

w***@googlemail.com
2008-11-19 17:24:44 UTC
Permalink
Post by Michal Kleczek
Rozumiem, ze chodzi o instancje JVM (w tej dyskusji). I mozliwosc latwego
przenoszenia/kopiowania np. calego serwera aplikacyjnego miedzy maszynami.
To trzeba zrobic plik iso z tym co tam potrzeba (czyli katalogiem z jdk/jre
Ten scenariusz który wspominasz jest bardzo prosty (wręcz trywialny).
Chcąc jednak "iść dalej" trzeba się bardziej nagimnastykować. "Dalej",
tzn. np. przenosić maszynę wirtualną pomiędzy fizycznymi komputerami
bez zatrzymywania działania tej maszyny wirtualnej oraz w taki sposób,
aby korzystający z tej maszyny wirtualnej (tj. użytkownicy
umieszczonej w jej wnętrzu aplikacji) faktu przeniesienia nie
zauważali.

Jedną z optymalizacji, które daje w takim scenariuszu bare-metal JVM
jest to, że decyzja o momencie migracji guest VM na inny hypervisor (w
innym fizycznym komputerze) może być skoordynowana z tym, co aktualnie
JVM robi. Inaczej, nietrudno będzie o konflikt, gdy np. hypervisor
będzie chciał dokonać migracji akurat wtedy, gdy wewnątrz JVM trwa w
najlepsze proces garbage collection albo commit jednego z segmentów
transakcji rozproszonej.
Jeszcze ciekawiej się robi, gdy na aplikację nałożono wymagania real
time i gwarantowanego maksymalnego czasu odpowiedzi, a tu nagle bum -
przychodzi decyzja o migracji i determinizm poszedł w krzaki. Widać
korzyść z eliminacji zbędnych warstw ?

Pozdrawiam,
Waldek Kot
Michal Kleczek
2008-11-19 21:15:48 UTC
Permalink
Post by w***@googlemail.com
Post by Michal Kleczek
Rozumiem, ze chodzi o instancje JVM (w tej dyskusji). I mozliwosc latwego
przenoszenia/kopiowania np. calego serwera aplikacyjnego miedzy
maszynami. To trzeba zrobic plik iso z tym co tam potrzeba (czyli
Ten scenariusz który wspominasz jest bardzo prosty (wręcz trywialny).
Chcąc jednak "iść dalej" trzeba się bardziej nagimnastykować. "Dalej",
tzn. np. przenosić maszynę wirtualną pomiędzy fizycznymi komputerami
bez zatrzymywania działania tej maszyny wirtualnej oraz w taki sposób,
aby korzystający z tej maszyny wirtualnej (tj. użytkownicy
umieszczonej w jej wnętrzu aplikacji) faktu przeniesienia nie
zauważali.
To zastosowanie jest ciekawe. Moge prosic o linki do jakichs materialow
opisaujacych jak to dziala? Tzn. interesuje mnie mozliwosc przeniesienia
stanu programu (bo przeciez jak rozumiem nie musi to byc JVM) - czyli
zatrzymania programu na jednym komputerze i uruchomienia go na innym w taki
sposob, by uzytkownicy tego nie zauwazyli.

Zauwaz, ze zadanie jest znacznie prostsze w realizacji gdy
naszym "hypervisorem" jest JVM, zas przenoszonymi programami - obiekty Javy
(a efekt ten sam). A i tak - by uzytkownicy nie zauwazyli - musi pomiedzy
komputerami, pomiedzy ktorymi sie programy przenosi, a uzytkownikami
istniec posrednik, ktory takiej "przeprowadzki" jest swiadomy (bez tego
uzytkownicy musza przynajmniej sie dowiedziec, ze musza zaczac komunikowac
sie z innym komputerem).
Post by w***@googlemail.com
Jeszcze ciekawiej się robi, gdy na aplikację nałożono wymagania real
time i gwarantowanego maksymalnego czasu odpowiedzi, a tu nagle bum -
przychodzi decyzja o migracji i determinizm poszedł w krzaki. Widać
korzyść z eliminacji zbędnych warstw ?
Daj spokoj z polaczeniem wymagan real time i wirtualizacja w stylu VMWare i
migracja programow pomiedzy maszynami. To dosyc zabawnie brzmi.
--
Michal
w***@googlemail.com
2008-11-19 22:56:14 UTC
Permalink
Post by Michal Kleczek
To zastosowanie jest ciekawe. Moge prosic o linki do jakichs materialow
opisaujacych jak to dziala? Tzn. interesuje mnie mozliwosc przeniesienia
stanu programu (bo przeciez jak rozumiem nie musi to byc JVM) - czyli
zatrzymania programu na jednym komputerze i uruchomienia go na innym w taki
sposob, by uzytkownicy tego nie zauwazyli.
Różne implementacje hypervisor'ów różnie to robią, ale wystarczy
popatrzeć w dokumentację hypervisora, w części dotyczącej High
Availability (np. VMware nazywa to Vmotion: http://www.vmware.com/products/vi/vc/vmotion.html).
Post by Michal Kleczek
Zauwaz, ze zadanie jest znacznie prostsze w realizacji gdy
naszym "hypervisorem" jest JVM, zas przenoszonymi programami - obiekty Javy
(a efekt ten sam). A i tak - by uzytkownicy nie zauwazyli - musi pomiedzy
komputerami, pomiedzy ktorymi sie programy przenosi, a uzytkownikami
istniec posrednik, ktory takiej "przeprowadzki" jest swiadomy (bez tego
uzytkownicy musza przynajmniej sie dowiedziec, ze musza zaczac komunikowac
sie z innym komputerem).
Zgoda - to znaczy zadanie jest prostsze, jeśli JVM i hypervisor mogą w
tym procesie przenoszenia współpracować. Na tym polegają wspomniane
przeze mnie wcześniej optymalizacje, łatwiej realizowalne na bare-
metal JVM...
Post by Michal Kleczek
Daj spokoj z polaczeniem wymagan real time i wirtualizacja w stylu VMWare i
migracja programow pomiedzy maszynami. To dosyc zabawnie brzmi.
Nie muszę, wiem o czym mówię....

Pozdrawiam,
Waldek Kot
Michal Kleczek
2008-11-20 11:26:30 UTC
Permalink
Post by w***@googlemail.com
Post by Michal Kleczek
To zastosowanie jest ciekawe. Moge prosic o linki do jakichs materialow
opisaujacych jak to dziala? Tzn. interesuje mnie mozliwosc przeniesienia
stanu programu (bo przeciez jak rozumiem nie musi to byc JVM) - czyli
zatrzymania programu na jednym komputerze i uruchomienia go na innym w
taki sposob, by uzytkownicy tego nie zauwazyli.
Różne implementacje hypervisor'ów różnie to robią, ale wystarczy
popatrzeć w dokumentację hypervisora, w części dotyczącej High
http://www.vmware.com/products/vi/vc/vmotion.html).
Prosze - daj jakiegos linka do materialow technicznych - nie reklamowych.
W dokumentacji HA do ESX nic na temat Vmotion nie znalazlem.
Post by w***@googlemail.com
Post by Michal Kleczek
Zauwaz, ze zadanie jest znacznie prostsze w realizacji gdy
naszym "hypervisorem" jest JVM, zas przenoszonymi programami - obiekty
Javy (a efekt ten sam). A i tak - by uzytkownicy nie zauwazyli - musi
pomiedzy komputerami, pomiedzy ktorymi sie programy przenosi, a
uzytkownikami istniec posrednik, ktory takiej "przeprowadzki" jest
swiadomy (bez tego uzytkownicy musza przynajmniej sie dowiedziec, ze
musza zaczac komunikowac sie z innym komputerem).
Zgoda - to znaczy zadanie jest prostsze, jeśli JVM i hypervisor mogą w
tym procesie przenoszenia współpracować. Na tym polegają wspomniane
przeze mnie wcześniej optymalizacje, łatwiej realizowalne na bare-
metal JVM...
Nie o to mi chodzilo. Chodzilo mi o przenoszenie stanu aplikacji Java
pomiedzy dwoma (potencjalnie zdalnymi) JVM.
Post by w***@googlemail.com
Post by Michal Kleczek
Daj spokoj z polaczeniem wymagan real time i wirtualizacja w stylu VMWare
i migracja programow pomiedzy maszynami. To dosyc zabawnie brzmi.
Nie muszę, wiem o czym mówię....
Dasz jakiegos linka do poczytania?
--
Michal
Mikolaj Rydzewski
2008-11-20 11:32:52 UTC
Permalink
Post by Michal Kleczek
Nie o to mi chodzilo. Chodzilo mi o przenoszenie stanu aplikacji Java
pomiedzy dwoma (potencjalnie zdalnymi) JVM.
A czy aby Terracota nie robi czegos podobnego? http://www.terracottatech.com
w***@googlemail.com
2008-11-20 12:37:48 UTC
Permalink
Post by Michal Kleczek
Nie o to mi chodzilo. Chodzilo mi o przenoszenie stanu aplikacji Java
pomiedzy dwoma (potencjalnie zdalnymi) JVM.
A czy aby Terracota nie robi czegos podobnego?http://www.terracottatech.com
W pewnym sensie efekt jest podobny, ale nie jest to rozwiązanie tej
samej kategorii, co Vmotion. Rozwiązania takie jak Terracotta, czy
Oracle Coherence zarządzają rozproszonymi na wiele JVM buforami
pamięci, a także rozproszonym wykonywaniem kodu. To pierwsze (czyli
bufory) jest zresztą podobne do klastrowania w serwerze aplikacyjnym
J2EE/JEE i np. replikacji sesji HTTP.

Generalnie chodzi o mechanizmy skalowania i HA, do podniesienia
których oba podejścia się przyczyniają. Zresztą oba podejścia (tj. i
wirtualizacja, i "klastrowanie Java") mogą być stosowane równocześnie.
Hypervisory są tutaj bowiem dosyć zgrubne, bo ich "perspektywa
widzenia" to maszyna wirtualna (nie mylić z JVM). Natomiast
Terracotta, Coherence, czy serwer aplikacyjny JEE widzą znacznie
bardziej drobnoziarniście, czyli obiekty Java.

Obecne Vmotion nie uchroni przed utratą stanu (np. sesji) w razie
nagłej awarii maszyny wirtualnej, hypervisor'a czy fizycznego sprzętu.
Klastrowanie Java, tak.

VMware ogłosił niedawno rozszerzenie Vmotion o nazwie "VMware Fault
Tolerance" (mające się pojawić w VMware 4), które - tak wynika z opisu
- mniej więcej działa tak, jak klastrowanie Java (active-active
failover). Osobiście to jestem do tego nastawiony sceptycznie (muszę
to po prostu zobaczyć jak działa). Właśnie dlatego, że maszyna
wirtualna VMware nie rozumie tego co dzieje się w jej wnętrzu (w
sensie: nie widzi obiektów aplikacyjnych, tylko obszary pamięci). Do
efektywnego działania replikacji stanu poprzez sieć jest to zbyt
gruboziarnisty poziom "widzenia" (dla WANowych sieci to już w ogóle).
Chyba, że - to SPEKULACJA oczywiście - pomysł VMware polega właśnie na
dodaniu do popularnych technologii aplikacyjnych (JVM, .NET, PHP, itd)
takiego właśnie wsparcia i skoordynowanej z nimi współpracy (tu
odwołanie do opisu jednej z optymalizacji, którą można osiągnąć
korzystając z bare-metal JVM).

Ale zobaczymy - z niecierpliwością czekam, bo wirtualizacja to
fascynujący świat - jakiś czas temu niemal spadłem z krzesła, jak
zobaczyłem, że można uruchomić maszynę wirtualną np. ze zdalnego
serwera FTP bez potrzeby czekania na ściągnięcie CAŁEGO image'u tej VM
- jak wiadomo typowa guest VM ma rozmiar paru GB (ta funkcja nazywa
się "Virtual machine streaming")....

Pozdrawiam,
Waldek Kot
w***@googlemail.com
2008-11-19 17:21:47 UTC
Permalink
Post by Michal Kleczek
Swoja droga wydaje sie zabawne uzywanie wirtualizacji (typu Xen, VMWare
itp.) do odpalania oddzielnych JVM. W koncu JVM to _maszyna wirtualna_ sama
w sobie.
Nie bardziej, niż użycie wirtualizacji do odpalania na tej samej
fizycznej maszynie oddzielnych OS... No i że jest to fun to pełna
zgoda :-)
Post by Michal Kleczek
Jak za malo to jest jeszcze np. chroot.
Tak, ale - jeśli Cię dobrze zrozumiałem - chroot należałoby porównywać
z wirtualizacją za pomocą hypervisor'a, a nie z bare-metal JVM.

Pozdrawiam,
Waldek Kot
w***@googlemail.com
2008-11-19 17:19:47 UTC
Permalink
Na pewno wiele rzeczy tutaj uprościłem (i nawet zrobiłem takie
zastrzeżenie, że upraszczam) ...

Z tym, że rzeczywistość pokazuje, że tego rodzaju sizing w dół OS'a
jest robiony jednak bardzo rzadko (m.in. dlatego, że wymaga sporej
wiedzy - w końcu modyfikujemy OS...).

W każdym razie: Wojtku - idąc DOKŁADNIE Twoim tokiem rozumowania, tj.
wycinając z OS to, co jest DANEJ aplikacji niepotrzebne - to w bare-
metal JVM właśnie wycięto WSZYSTKO, czego JVM nie używa (chociaż
podczas implementacji bare-metal JVM sposób dojścia do tej sytuacji
był odwrotny, tj. zamiast wycinać z OS'a, zaimplementowano to, czego
JVM faktycznie używa). Z małym jeszcze, acz istotnym technologicznie
zastrzeżeniem, że tworząc bare-metal założono, że pod spodem będzie
hypervisor.

Prośba także o zwrócenie uwagi, że - OPRÓCZ zmniejszenia rozmiaru
guest VM i używanego przez nią RAM - starałem się podać cały szereg
INNYCH konsekwencji podejścia bare-metal JVM. W skrócie
sprowadzających się do:
- eliminacji konfliktów pomiędzy OS a JVM (np. w zakresie zarządzania
pamięcią)
- dodatkowych optymalizacji działania pojedynczej JVM
- dodatkowych optymalizacji, gdy wiele JVM uruchomionych jest wewnątrz
tego samego hypervisor'a
- skorzystania z innych funkcjonalności, które daje wirtualizacja

Pozdrawiam,
Waldek Kot
w***@googlemail.com
2008-11-16 22:14:33 UTC
Permalink
Post by Michal Kleczek
Sek w tym, ze byc moze cele sa sluszne, ale podejscie - IMHO - od d..y
strony. Skonfrontuj to z Jini, ktore rozwiazuje TE SAME problemy
- dynamiczny binding uslug (serwisow) (Jini lookup spec)
- izolacja aplikacji (uslug) poprzez zalozenie, ze one po prostu sa
uruchamiane w oddzielnej VM (byc moze zdalnie) - co wiecej - wcale nie
pociaga to za soba koniecznosci zdalnych wywolan metod.
- szeroko pojete bezpieczenstwo (nie bede teraz wnikal - mozna poczytac
sobie o tym)
- komunikacja ze zdalnymi uslugami (JERI)
- komunikacja i przetwarzanie asynchroniczne (Javaspaces)
- wykrywanie bledow i "self healing" (leasing i tak idiotycznie traktowany
przez tworcow Springa RemoteException)
JINI dotyczy sieci i obejmuje komunikację inter-JVM. OSGi zajmuje się
problemami stricte w ramach jednej JVM (intra-JVM). Pewne koncepcje -
typu orientacja na usługi (SOA) - są oczywiście podobne (jak zawsze),
ale przeznaczenie obu pomysłów (tj. JINI i OSGi) jest kompletnie
inne. Usługa JINI to usługa widoczna na zewnątrz (poza JVM) - jej
IMPLEMENTACJA może korzystać z wielu udostępnionych w ramach tej
samej JVM usług, a także wymagać bardziej elastycznego classloading'u
(niż to co daje "czysta" JVM). Czyli: OSGi dotyczy modularyzacji i
dynamizmu implementacji usług, a nie - jak JNI - zdalnego dostępu i
korzystania ze zdalnych zasobów. Pomijając popularność JINI (i OSGi),
to z technicznego punktu widzenia nie widzę dlaczego nie miałyby
współdziałać.
Post by Michal Kleczek
przynajmniej  w serwerowej Java raczej nie stosuje się podejścia
"jedna JVM w OS, wiele korzystających z niej aplikacji". Jest to
raczej  "każdej aplikacja ma wbudowany własny JVM". Najłatwiej wtedy
zapanować nad aplikacją od strony utrzymaniowej (także większość
dostawców technologii certyfikuje od strony wsparcia technicznego
konkretne typy i wersje JVM).
To PO CO OSGi?
No wlasnie - ale PO CO sobie lamia zeby skoro i tak w jednym kontenerze
uruchamia sie w praktyce jedna aplikacje??
Bo skorzystanie z OSGi może mieć pozytywny wpływ na modularność tej
aplikacji (podział na warstwy, moduły, komponenty, itd). Dla
przykładu - znaczne rozluźnienie zależności między modułami, dzięki
skorzystaniu z usług (czyli zależności na etapie czasu wykonania, a
nie na poziomie kodu). Podobnie, większy dynamizm - dla przykładu:
możliwość dodania nowych wersji implementacji modułów (w tym także
implementacji usług) bez zatrzymywania (redeployment-u) aplikacji. Nie
zrozum mnie źle - OSGi nie jest na takie problemy JEDYNYM pomysłem
(jak wspominałem app serwery mają podobne rozszerzenia), ale wydaje
się, że jest na bardzo dobrej drodze do stania się w tym zakresie
standardem.


Pozdrawiam,
Waldek Kot
Michal Kleczek
2008-11-17 06:14:47 UTC
Permalink
Post by w***@googlemail.com
Post by Michal Kleczek
Sek w tym, ze byc moze cele sa sluszne, ale podejscie - IMHO - od d..y
strony. Skonfrontuj to z Jini, ktore rozwiazuje TE SAME problemy
- dynamiczny binding uslug (serwisow) (Jini lookup spec)
- izolacja aplikacji (uslug) poprzez zalozenie, ze one po prostu sa
uruchamiane w oddzielnej VM (byc moze zdalnie) - co wiecej - wcale nie
pociaga to za soba koniecznosci zdalnych wywolan metod.
- szeroko pojete bezpieczenstwo (nie bede teraz wnikal - mozna poczytac
sobie o tym)
- komunikacja ze zdalnymi uslugami (JERI)
- komunikacja i przetwarzanie asynchroniczne (Javaspaces)
- wykrywanie bledow i "self healing" (leasing i tak idiotycznie
traktowany przez tworcow Springa RemoteException)
JINI dotyczy sieci i obejmuje komunikację inter-JVM. OSGi zajmuje się
problemami stricte w ramach jednej JVM (intra-JVM). Pewne koncepcje -
typu orientacja na usługi (SOA) - są oczywiście podobne (jak zawsze),
ale przeznaczenie obu pomysłów (tj. JINI i OSGi) jest kompletnie
inne. Usługa JINI to usługa widoczna na zewnątrz (poza JVM) - jej
IMPLEMENTACJA może korzystać z wielu udostępnionych w ramach tej
samej JVM usług, a także wymagać bardziej elastycznego classloading'u
(niż to co daje "czysta" JVM). Czyli: OSGi dotyczy modularyzacji i
dynamizmu implementacji usług, a nie - jak JNI - zdalnego dostępu i
korzystania ze zdalnych zasobów. Pomijając popularność JINI (i OSGi),
to z technicznego punktu widzenia nie widzę dlaczego nie miałyby
współdziałać.
Przepraszam, ale to powyzej to ja juz gdzies czytalem (tyle ze po angielsku)
i jest to typowy belkot kogos, kto o Jini ma pojecie ze starych materialow
marketingowych Suna.
Serwisy Jini maja z siecia tyle wspolnego, ze:
1) moga (ale nie musza) posiadac czesc "serwerowa", z ktora czesc "kliencka"
komunikuje sie przez siec. Ale nic nie stoi na przeszkodzie, zeby serwis w
calosci byl uruchomiony w maszynie wirtualnej klienta.
2) serwis (czyli obiekt Java) jest ladowany poprzez siec (zarowno dane jak i
kod)
3) znalezienie uslugi lookup wymaga dostepu do sieci (to tez nie dokonca
prawda, ale niech bedzie)

Ktos moglby powiedziec "dobra, ale kontener OSGi w ogole nie wymaga sieci".
Tyle, ze to jest bardzo waskie spojrzenie. W koncu, zeby system dzialal w
takim kontenerze jakos trzeba w nim zainstalowac moduly. Mozna je przyniesc
na dyskietce, ale w praktyce (przynajmniej w zastosowaniach enterprise)
sciaga sie je z sieci. A nastepnie instaluje w kontenerze. Co gorsza:
uaktualnienie takiego modulu znowu wymaga interwencji czlowieka. KTOS musi
to zrobic, a czas tego kogos kosztuje.
I OSGi zdaje sobie z tego problemu sprawe wiec proponuje specyfikacje
typu "dynamic provisioning". Dolozyc do tego specyfikacje "OSGi remoting"
(czy jakos tak) i co mamy? Hmm... Jini. Tyle, ze wymyslone od nowa 10 lat
pozniej.

Tak generalnie - to jest IMHO glowny problem Javy - zamiast proponowac cos
NAPRAWDE nowego, kreci sie w kolko rozwiazujac juz dawno rozwiazane
problemy.
--
Michal
w***@googlemail.com
2008-11-17 13:35:08 UTC
Permalink
Post by Michal Kleczek
Przepraszam, ale to powyzej to ja juz gdzies czytalem (tyle ze po angielsku)
i jest to typowy belkot kogos, kto o Jini ma pojecie ze starych materialow
marketingowych Suna.
Cześć,

Używając sformułowań typu "typowy bełkot kogoś, kto..." pracujesz na
swoją opinię na tej grupie (przeprosiny przyjęte).

Będę się także trzymał tego, że JINI dotyczy przede wszystkim
rozproszonej architektury, w której komunikują się - połączone ze sobą
siecią - usługi. Nie da się w JINI odejść od tematu zdalnych wywołań,
pomiędzy WIELOMA JVM, najczęśniej uruchomionymi na oddzielnych
fizycznie urządzeniach (network plug & play). Sam zresztą o tym
piszesz, że serwis jest ładowany poprzez sieć.

OSGi dotyczy wyłącznie jednej JVM i opisuje to, co się w ramach tej
jednej JVM dzieje. Być może kolejne edycje OSGi będą standaryzować
programowy dostęp do usług sieciowych i remoting, nie zmienia to
jednak faktu, że mówimy o "SOA wewnątrz JVM" plus (zrobionych w sumie
na potrzeby wstecznej zgodności) ułatwień w classloading'u (czyli też
rzecz się dzieje wewnątrz JVM).

Nie uważam też, że wszyscy ludzie są głupi i jak muchy lecą do nowych
zabawek - czegoś ludzie w JINI nie znaleźli, coś znajdują w OSGi....

Pozdrawiam,
Waldek Kot
Michal Kleczek
2008-11-17 14:01:54 UTC
Permalink
Post by w***@googlemail.com
Post by Michal Kleczek
Przepraszam, ale to powyzej to ja juz gdzies czytalem (tyle ze po
angielsku) i jest to typowy belkot kogos, kto o Jini ma pojecie ze
starych materialow marketingowych Suna.
Cześć,
Używając sformułowań typu "typowy bełkot kogoś, kto..." pracujesz na
swoją opinię na tej grupie (przeprosiny przyjęte).
Sorry
Post by w***@googlemail.com
Będę się także trzymał tego, że JINI dotyczy przede wszystkim
rozproszonej architektury, w której komunikują się - połączone ze sobą
siecią - usługi. Nie da się w JINI odejść od tematu zdalnych wywołań,
pomiędzy WIELOMA JVM, najczęśniej uruchomionymi na oddzielnych
fizycznie urządzeniach (network plug & play).
Alez oczywiscie, ze sie da. Jini nie wymusza zdalnych wywolan (za wyjatkiem
startu aplikacji i dostania sie do lookup serwisu). Sam lookup serwis moze
byc zaimplementowany jako _lokalny_ dla klienta obiekt. Podobnie wszelkie
inne uslugi.
Post by w***@googlemail.com
Sam zresztą o tym
piszesz, że serwis jest ładowany poprzez sieć.
Wyciales kawalek posta mowiacy o tym, ze uzycie kontenera OSGi samo w sobie
nic nie daje, bo jakos trzeba "bundle" w nim zainstalowac. Stad potrzeba
czegos, co OSGi nazywa "provisioning" i probuje zestandaryzowac.
Post by w***@googlemail.com
OSGi dotyczy wyłącznie jednej JVM i opisuje to, co się w ramach tej
jednej JVM dzieje. Być może kolejne edycje OSGi będą standaryzować
programowy dostęp do usług sieciowych i remoting, nie zmienia to
jednak faktu, że mówimy o "SOA wewnątrz JVM" plus (zrobionych w
na potrzeby wstecznej zgodności) ułatwień w classloading'u (czyli też
rzecz się dzieje wewnątrz JVM).
Tylko to "SOA wewnatrz JVM" implikuje "wiele uslug w jednym JVM" (w koncu,
zeby bylo SOA to musza byc uslugi) - zataczamy kolo, bo ja po prostu
twierdze, ze "wiele uslug w jednym JVM" jest nikomu do niczego nie
potrzebne. Co gorsza - wrecz przeszkadza, bo JVM nie nadaje sie do tego w
tej chwili - nie ma mozliwosci _rzeczywistej_ izolacji uslug (chociazby nie
ma mozliwosci przydzialania roznej ilosci pamieci roznym uslugom - czyli
jedna z uslug moze polozyc caly kontener/system). Ergo - i tak uslugi
_musza_ dzialac w roznych JVM, z czego wynika, ze "SOA wewnatrz JVM" po
prostu nie ma najmniejszego sensu.
Post by w***@googlemail.com
Nie uważam też, że wszyscy ludzie są głupi i jak muchy lecą do nowych
zabawek - czegoś ludzie w JINI nie znaleźli, coś znajdują w OSGi....
Ja jednak mysle, ze sporo ludzi lapie sie na marketingowe mydlenie oczu.
--
Michal
w***@googlemail.com
2008-11-17 16:24:38 UTC
Permalink
Post by Michal Kleczek
Tylko to "SOA wewnatrz JVM" implikuje "wiele uslug w jednym JVM" (w koncu,
zeby bylo SOA to musza byc uslugi) - zataczamy kolo, bo ja po prostu
twierdze, ze "wiele uslug w jednym JVM" jest nikomu do niczego nie
potrzebne.
Jest potrzebne, choć słabo to będzie widać w aplikacjach typu "hello
world". Jest potrzebne do polepszenia modularyzacji aplikacji. Usługa
jest komponentem z których aplikacja jest zrobiona. Obok innych
komponentów, usługa ma tę zaletę, że jest widoczna poprzez interfejs.
Reszty - w tym implementacji (z punktu widzenia konsumenta usługi:
niepotrzebnych do użycia usługi detali) - użytkownik usługi nie widzi.
Zależności między komponentami są zatem bardzo luźne. W dodatku, te
zależności mogą być przeniesione na czas wykonania, tj. konkretna
implementacja usługi (interfejsu) będzie podłączona PO uruchomieniu
aplikacji. To "podłączenie" może zresztą ulegać zmianie w trakcie
wykonania. Zrobienie czegoś takiego w przypadku mocniejszych
zależności, np. na poziomie kodu (klas) jest znacznie trudniejsze
(zwłaszcza przy obecnym modelu ładowania klas w Java).
Post by Michal Kleczek
Co gorsza - wrecz przeszkadza, bo JVM nie nadaje sie do tego w
tej chwili - nie ma mozliwosci _rzeczywistej_ izolacji uslug (chociazby nie
ma mozliwosci przydzialania roznej ilosci pamieci roznym uslugom - czyli
jedna z uslug moze polozyc caly kontener/system).
Zgoda, że i JVM, i OSGi w zakresie tego rodzaju QoS (Quality of
Service) nie oferują wiele wsparcia. Oba zostały zaprojektowane pod
kątem wykonywania jednej aplikacj, gdzie tego rodzaju poziom kontroli
niezbyt (jeszcze) jest przydatny (można tutaj jednak przywołać inne
zamieszczone w tej dyskusji posty nt. sensowności Java Isolation,
która taki _rzeczywisty_ poziom izolacji usług daje). W tym zakresie
zresztą też pojawiają się pomysły na taką kontrolę w Java - Java
Resource Consumption Management, JSR-284 (http://jcp.org/en/jsr/detail?
id=284). Notabene - zarówno Isolation, jak i Resource Consumption
Management w Java to iście "polskie" tematy - opracowywane pod
kierownictwem dwóch robiących kariery w Stanach naukowców: Grzegorza
Czajkowskiego i Krzysztofa Palacza.

Na razie takie QoS o jakim mówisz oferują kontenery aplikacyjne (w
przypadku SOA, w którym usługi są zdalne, taką rolę może też pełnić
ESB). W kontenerach aplikacyjnych możesz sterować wieloma parametrami
wykonywania tej czy innej aplikacji (i udostępnianych przez nią
usług), ich priorytetyzowaniem, ochroną przed przeciążeniem, czy
podniesieniem poziomu ich dostępności. Aplikacje mogą też mieć
wprowadzone stosowne ograniczenia na żarłoczność zasobów -
ograniczenia, które serwer aplikacyjny będzie wymuszał.

OSGi też zapewne z czasem w tę stronę pójdzie, bo (podobnie jak ESB w
"dużym" SOA) będzie w coraz większym stopniu mediatorem pomiędzy
usługami (na swoim poziomie). Na razie OSGi stawia sobie za cel
wspieranie modularyzacji i dynamizmu, stąd ma stosunkowo prosty
rejestr usług i proste security do tych usług. Z czasem na pewno
będzie realizować bardziej złożone scenariusze pośredniczenia pomiędzy
usługami (tj. konsumentami i dostawcami usług), w tym QoS.

Wracając też trochę do tematu wirtualizacji - wirtualizacja także jest
ciekawym pomysłem na realizację QoS (choć od trochę innej strony i
bardziej zgrubnym niż to co daje JVM i kontener aplikacyjny). Maszyny
wirtualne, wewnątrz których uruchamiana jest JVM, także mogą mieć
przypisane stosowne zasoby. Mogą nawet przemieszczać się z jednej
fizycznej maszyny na inną (np. wtedy, gdy potrzebne jest dodanie
usłudze więcej zasobów - np. CPU/pamięć). Tu pewnie wracamy trochę do
dyskusji o potrzebie OS. Bez OS proces migracji jest znacznie
szybszy... A bez wirtualizacji, karkołomny...

Pozdrawiam,
Waldek Kot
Michal Kleczek
2008-11-17 16:42:03 UTC
Permalink
Post by w***@googlemail.com
Post by Michal Kleczek
Tylko to "SOA wewnatrz JVM" implikuje "wiele uslug w jednym JVM" (w
koncu, zeby bylo SOA to musza byc uslugi) - zataczamy kolo, bo ja po
prostu twierdze, ze "wiele uslug w jednym JVM" jest nikomu do niczego nie
potrzebne.
Jest potrzebne, choć słabo to będzie widać w aplikacjach typu "hello
world". Jest potrzebne do polepszenia modularyzacji aplikacji. Usługa
jest komponentem z których aplikacja jest zrobiona. Obok innych
komponentów, usługa ma tę zaletę, że jest widoczna poprzez interfejs.
niepotrzebnych do użycia usługi detali) - użytkownik usługi nie widzi.
Zależności między komponentami są zatem bardzo luźne. W dodatku, te
zależności mogą być przeniesione na czas wykonania, tj. konkretna
implementacja usługi (interfejsu) będzie podłączona PO uruchomieniu
aplikacji. To "podłączenie" może zresztą ulegać zmianie w trakcie
wykonania. Zrobienie czegoś takiego w przypadku mocniejszych
zależności, np. na poziomie kodu (klas) jest znacznie trudniejsze
(zwłaszcza przy obecnym modelu ładowania klas w Java).
Pod wszystkim, co napisales powyzej (czyli "programming to
interface", "loose coupling", "late/dynamic binding" itd itp) podpisuje sie
dwoma rekami i nogami. W czym sie NIE zgadzamy to w sposobie, w jaki to
osiagac. Ty - jak mi sie wydaje - twierdzisz, ze do maszyny
wirtualnej/bibliotek standardowych nalezy wprowadzic zmiany, ktore to
umozliwiaja/wspomagaja (czyli: OSGi, Java Isolates itp.). Ja zas twierdze,
ze szkoda na to czasu i pieniedzy, bo wszystkie niezbedne do tego
komponenty sa juz od dawna dostepne jako np. wielodostepne systemy
operacyjne lub wirtualizacja (nota bene dostepna np. w systemach IBM czy HP
dziesiatki lat temu) i wystarczy to umiejetnie wykorzystac. Innymi slowy -
nie potrzebujemy OSGi ani Isolates zeby uprawiac SOA.
Co zas sie tyczy Javy, SOA i QoS polecam zapoznanie sie z projektem Rio
(http://rio.dev.java.net) i - opartym o Rio i wspominanym juz w tym watku
GigaSpaces.
--
Michal
w***@googlemail.com
2008-11-17 20:59:18 UTC
Permalink
Post by Michal Kleczek
W czym sie NIE zgadzamy to w sposobie, w jaki to
osiagac. Ty - jak mi sie wydaje - twierdzisz, ze do maszyny
wirtualnej/bibliotek standardowych nalezy wprowadzic zmiany, ktore to
umozliwiaja/wspomagaja (czyli: OSGi, Java Isolates itp.).
Tak.
Post by Michal Kleczek
Ja zas twierdze,
ze szkoda na to czasu i pieniedzy, bo wszystkie niezbedne do tego
komponenty sa juz od dawna dostepne jako np. wielodostepne systemy
operacyjne lub wirtualizacja (nota bene dostepna np. w systemach IBM czy HP
dziesiatki lat temu) i wystarczy to umiejetnie wykorzystac.
Programiście aplikacyjnemu, szczególnie budującemu aplikacje
serwerowe, OS nie daje prawie nic (pewnie programiście systemowemu,
tworzącemu driver'y daje znacznie więcej). Aplikację konstruuję z
tego, co daje mi JVM i wyższe warstwy (Java i inne języki, JSE, JEE,
inne kontenery, framework'i, itd.), bo to jest przydatny dla mnie
poziom abstrakcji.

Jasne, że wirtualizacja znana jest od dobrych 40 lat - w IT w ogóle
niewiele/nic nowego się nie pojawia od lat 70-tych - wszystko jest
tylko szybsze, mniejsze, tańsze i w ogóle bardziej dostępne. Od paru
lat wirtualizacja zawitała (i to w ciekawy sposób) w świecie tanich
maszyn klasy x86, więc warto z jej zalet korzystać. Zwłaszcza, że
wielu takich zastosowań wirtualizacji jakie pojawiają się w x86 (w tym
i w Java), to w świecie większych maszyn trudno znaleźć.
Post by Michal Kleczek
Innymi slowy -
nie potrzebujemy OSGi ani Isolates zeby uprawiac SOA.
Nie potrzebujemy. Web services i ESB też nie. Co nie znaczy, że nie są
to środki, dzięki którym wiele z zagadnień SOA może być łatwiejsze do
zrealizowania.

Pozdrawiam,
Waldek Kot
Michal Kleczek
2008-11-17 21:23:10 UTC
Permalink
Post by w***@googlemail.com
Post by Michal Kleczek
W czym sie NIE zgadzamy to w sposobie, w jaki to
osiagac. Ty - jak mi sie wydaje - twierdzisz, ze do maszyny
wirtualnej/bibliotek standardowych nalezy wprowadzic zmiany, ktore to
umozliwiaja/wspomagaja (czyli: OSGi, Java Isolates itp.).
Tak.
Post by Michal Kleczek
Ja zas twierdze,
ze szkoda na to czasu i pieniedzy, bo wszystkie niezbedne do tego
komponenty sa juz od dawna dostepne jako np. wielodostepne systemy
operacyjne lub wirtualizacja (nota bene dostepna np. w systemach IBM czy
HP dziesiatki lat temu) i wystarczy to umiejetnie wykorzystac.
Programiście aplikacyjnemu, szczególnie budującemu aplikacje
serwerowe, OS nie daje prawie nic (pewnie programiście systemowemu,
tworzącemu driver'y daje znacznie więcej). Aplikację konstruuję z
tego, co daje mi JVM i wyższe warstwy (Java i inne języki, JSE, JEE,
inne kontenery, framework'i, itd.), bo to jest przydatny dla mnie
poziom abstrakcji.
Dla _programisty_ aplikacyjnego - byc moze - on nie musi sie martwic: jest
API - jest dobrze. Ale dla _architekta_ systemu API i specyfikacje nie
wystarczaja. On musi zapewnic, ze system bedzie dobrze dzialal jako
_calosc_ - lacznie z przelacznikami sieciowymi, firewallami, systemami
zarzadzania bazami danych, infrastruktura integracyjna, systemami
operacyjnymi, maszynami wirtualnymi i wieloma innymi komponentami systemu,
z ktorych istnienia tzw. programista aplikacyjny nie zdaje sobie nawet
sprawy. Musi rowniez np. okreslic jakie tworzone oprogramowanie ma
wymagania w stosunku do zewnetrznych systemow (bardzo prosty przyklad to
chociazby okreslenie jakie przegladarki moga byc uzywane lub sa zalecane w
celu uzycia systemu) - w trudniejszym przypadku musi zapewnic wspolprace
tworzonego oprogramowanie z zewnetrznymi systemami. Stwierdzenie "zgodne ze
standardem XYZ" jest moze dobre w teorii, ale w praktyce oczywiscie nie
dziala.
_Nie da sie_ widziec wszystkiego przez pryzmat JVM i bibliotek Javy.
Post by w***@googlemail.com
Post by Michal Kleczek
Innymi slowy -
nie potrzebujemy OSGi ani Isolates zeby uprawiac SOA.
Nie potrzebujemy. Web services i ESB też nie. Co nie znaczy, że nie są
to środki, dzięki którym wiele z zagadnień SOA może być łatwiejsze do
zrealizowania.
Nie bardzo rozumiem, co powyzsze zdanie wnosi do dyskusji nt. OSGi czy
Isolates. Z tego, ze np. ESB jest (czy tez bywa) potrzebne zupelnie nie
wynika, ze potrzebne jest OSGi.
--
Michal
w***@googlemail.com
2008-11-18 00:36:28 UTC
Permalink
Post by Michal Kleczek
Post by w***@googlemail.com
Post by Michal Kleczek
Innymi slowy -
nie potrzebujemy OSGi ani Isolates zeby uprawiac SOA.
Nie potrzebujemy. Web services i ESB też nie. Co nie znaczy, że nie są
to środki, dzięki którym wiele z zagadnień SOA może być łatwiejsze do
zrealizowania.
Nie bardzo rozumiem, co powyzsze zdanie wnosi do dyskusji nt. OSGi czy
Isolates. Z tego, ze np. ESB jest (czy tez bywa) potrzebne zupelnie nie
wynika, ze potrzebne jest OSGi.
OSGi jest technologią, która ma ułatwiać budowę aplikacji o
architekturze zorientowanej na usługi, działających w ramach jednej
JVM. Aby takie aplikacje budować jest jeszcze wiele innych sposobów.
Podobnie jest z budową takich aplikacji SOA, w których usługi są
rozproszone/zdalne. Do ich budowy nie ma musu używania ESB. Ale ESB
oferuje mechanizmy, które tę budowę "zgodnie z SOA" może ułatwić.
Podobieństwo obu technologii w zakresie usług (przy zachowaniu scali -
micro versus macro) jest dosyć wyraźnie widoczne.

Pozdrawiam,
Waldek Kot
Michal Kleczek
2008-11-18 00:58:59 UTC
Permalink
Post by w***@googlemail.com
Post by Michal Kleczek
Post by w***@googlemail.com
Post by Michal Kleczek
Innymi slowy -
nie potrzebujemy OSGi ani Isolates zeby uprawiac SOA.
Nie potrzebujemy. Web services i ESB też nie. Co nie znaczy, że nie są
to środki, dzięki którym wiele z zagadnień SOA może być łatwiejsze do
zrealizowania.
Nie bardzo rozumiem, co powyzsze zdanie wnosi do dyskusji nt. OSGi czy
Isolates. Z tego, ze np. ESB jest (czy tez bywa) potrzebne zupelnie nie
wynika, ze potrzebne jest OSGi.
OSGi jest technologią, która ma ułatwiać budowę aplikacji o
architekturze zorientowanej na usługi, działających w ramach jednej
JVM. Aby takie aplikacje budować jest jeszcze wiele innych sposobów.
Podobnie jest z budową takich aplikacji SOA, w których usługi są
rozproszone/zdalne. Do ich budowy nie ma musu używania ESB. Ale ESB
oferuje mechanizmy, które tę budowę "zgodnie z SOA" może ułatwić.
Podobieństwo obu technologii w zakresie usług (przy zachowaniu scali -
micro versus macro) jest dosyć wyraźnie widoczne.
Prosze... z tego, ze _cele_ sa podobne nie wynika, ze i ESB i OSGi jest
potrzebne.
Dyskutujmy nie o tym, jakie cele _stawiaja_ sobie tworcy OSGi, ale czy te
cele sa przez nich dobrze _realizowane_. Mozna by rowniez podyskutowac, czy
nie da sie tego zrobic _lepiej_ - a jesli sie da to jak.
W przeciwnym wypadku dyskusja jest - przynajmniej dla mnie - malo ciekawa.
--
Michal
w***@googlemail.com
2008-11-18 10:02:52 UTC
Permalink
Post by Michal Kleczek
Prosze... z tego, ze _cele_ sa podobne nie wynika, ze i ESB i OSGi jest
potrzebne.
Owszem wynika. Przez "potrzebne" nie rozumiem jednak "wymagane" a
raczej "przydatne w określonych sytuacjach".
Post by Michal Kleczek
Dyskutujmy nie o tym, jakie cele _stawiaja_ sobie tworcy OSGi, ale czy te
cele sa przez nich dobrze _realizowane_.
Biorąc pod uwagę założone cele, to na razie jest OK (czasem nawet
dostępne jest więcej niż można skonsumować).
Post by Michal Kleczek
Mozna by rowniez podyskutowac, czy
nie da sie tego zrobic _lepiej_ - a jesli sie da to jak.
Zawsze można lepiej. Biorąc OSGi na tapetę, to dopiero po pojawieniu
się Spring-DM możliwości OSGi stają się strawne dla programistów
aplikacyjnych. Bez tego, skorzystają głównie budujący kontener'y.

Pewnie wracamy do wątku o porównaniu .NET i Java, ale w Java dyskusja
jest możliwa. W .NET Microsoft wie zawsze najlepiej.

Pozdrawiam,
Waldek Kot
Piotr Lipski
2008-11-18 00:04:28 UTC
Permalink
Post by Michal Kleczek
Post by w***@googlemail.com
JINI dotyczy sieci i obejmuje komunikację inter-JVM. OSGi zajmuje się
problemami stricte w ramach jednej JVM (intra-JVM). Pewne koncepcje -
typu orientacja na usługi (SOA) - są oczywiście podobne (jak zawsze),
ale przeznaczenie obu pomysłów (tj. JINI i OSGi) jest kompletnie
inne. Usługa JINI to usługa widoczna na zewnątrz (poza JVM) - jej
IMPLEMENTACJA może korzystać z wielu udostępnionych w ramach tej
samej JVM usług, a także wymagać bardziej elastycznego classloading'u
(niż to co daje "czysta" JVM). Czyli: OSGi dotyczy modularyzacji i
dynamizmu implementacji usług, a nie - jak JNI - zdalnego dostępu i
korzystania ze zdalnych zasobów. Pomijając popularność JINI (i OSGi),
to z technicznego punktu widzenia nie widzę dlaczego nie miałyby
współdziałać.
Przepraszam, ale to powyzej to ja juz gdzies czytalem (tyle ze po angielsku)
i jest to typowy belkot kogos, kto o Jini ma pojecie ze starych materialow
marketingowych Suna.
1) moga (ale nie musza) posiadac czesc "serwerowa", z ktora czesc "kliencka"
komunikuje sie przez siec. Ale nic nie stoi na przeszkodzie, zeby serwis w
calosci byl uruchomiony w maszynie wirtualnej klienta.
moze tu http://www.artima.com/weblogs/viewpost.jsp?thread=202304 czytałeś?

"In fact, OSGi and Jini are service architectures built for completely different
contexts. OSGi is a service architecture for services that are in the same
address space. It allows you to build programs out of cooperating services. And
for that sort of thing, it is pretty good.
Jini is a service architecture for distributed systems that are built out of
services that are separated by a network. And the network is a very different
environment from the single virtual machine"

Twierdzisz, że lead architect for Jini bełkoce? Trochę to zabawnie brzmi...

BTW na powyższe trafiłem idąc za podanym przez ciebie http://rio.dev.java.net
można tam również przeczytać, że "there are plans to provide support in Rio to
make in-process service discovery and communication delegate to OSGi".

PL
Michal Kleczek
2008-11-18 00:27:21 UTC
Permalink
Post by Piotr Lipski
Post by Michal Kleczek
Post by w***@googlemail.com
JINI dotyczy sieci i obejmuje komunikację inter-JVM. OSGi zajmuje się
problemami stricte w ramach jednej JVM (intra-JVM). Pewne koncepcje -
typu orientacja na usługi (SOA) - są oczywiście podobne (jak zawsze),
ale przeznaczenie obu pomysłów (tj. JINI i OSGi) jest kompletnie
inne. Usługa JINI to usługa widoczna na zewnątrz (poza JVM) - jej
IMPLEMENTACJA może korzystać z wielu udostępnionych w ramach tej
samej JVM usług, a także wymagać bardziej elastycznego classloading'u
(niż to co daje "czysta" JVM). Czyli: OSGi dotyczy modularyzacji i
dynamizmu implementacji usług, a nie - jak JNI - zdalnego dostępu i
korzystania ze zdalnych zasobów. Pomijając popularność JINI (i OSGi),
to z technicznego punktu widzenia nie widzę dlaczego nie miałyby
współdziałać.
Przepraszam, ale to powyzej to ja juz gdzies czytalem (tyle ze po
angielsku) i jest to typowy belkot kogos, kto o Jini ma pojecie ze
starych materialow marketingowych Suna.
1) moga (ale nie musza) posiadac czesc "serwerowa", z ktora czesc
"kliencka" komunikuje sie przez siec. Ale nic nie stoi na przeszkodzie,
zeby serwis w calosci byl uruchomiony w maszynie wirtualnej klienta.
moze tu http://www.artima.com/weblogs/viewpost.jsp?thread=202304 czytałeś?
Tak.
Post by Piotr Lipski
"In fact, OSGi and Jini are service architectures built for completely
different contexts. OSGi is a service architecture for services that are
in the same address space. It allows you to build programs out of
cooperating services. And for that sort of thing, it is pretty good.
Jini is a service architecture for distributed systems that are built out
of services that are separated by a network. And the network is a very
different environment from the single virtual machine"
Twierdzisz, że lead architect for Jini bełkoce? Trochę to zabawnie brzmi...
Fakt - zabawnie :)
Ale jednak bede sie upieral przy swoim zdaniu. Po przeczytaniu naprawde
duzej ilosci materialow na temat Jini i OSGi - zarowno architektury, jak i
konsekwencji dla projektowania systemow, wydaje mi sie, ze Jim Waldo
napisal tak bardziej z przyczyn politycznych - uspokojenia nastrojow (byl
czas, gdy dyskusje Jini vs OSGi byly baaardzo gorace - tak naprawde w
momencie, gdy OSGi wycofalo sie ze wspierania Jini). Z opinii ludzi, ktorzy
z Jini korzystaja w praktyce (JINI-***@java.sun.com) wynika IMHO
wyraznie, ze po prostu nie ma takiej potrzeby, by uslugi Jini uruchamiac w
jednej VM, a nawet jesli taka potrzeba jest to bardzo prosty ServiceStarter
dostepny w Jini Starter Kit w zupelnosci do tego wystarcza.
Post by Piotr Lipski
BTW na powyższe trafiłem idąc za podanym przez ciebie
http://rio.dev.java.net można tam również przeczytać, że "there are plans
to provide support in Rio to make in-process service discovery and
communication delegate to OSGi".
Zgadza sie. I ja tego nie rozumiem - tzn. nie rozumiem PO CO (tak szczerze
powiem to wydaje mi sie, ze tylko po to, zeby sie troche podczepic pod
fakt, ze OSGi to teraz "goracy temat"). Ale moge sie mylic - chetnie
poczytam jaka wartosc dodaje OSGi do Rio.
--
Michal
w***@googlemail.com
2008-11-18 00:44:00 UTC
Permalink
Zgadza sie. I ja tego nie rozumiem - tzn. nie rozumiem PO CO.
Jeśli wolno mi sparafrazować wypowiedź przytoczoną przez Piotra, to:

"Jini is a service architecture for distributed systems that are built
out of services that are separated by a network. OSGi allows you to
build those services out of cooperating services, that are in the same
address space. And for that sort of thing, it is pretty good. "

;-)

Pozdrawiam,
Waldek Kot
Piotr Lipski
2008-11-18 00:48:35 UTC
Permalink
Post by Michal Kleczek
Post by Piotr Lipski
Post by Michal Kleczek
Post by w***@googlemail.com
JINI dotyczy sieci i obejmuje komunikację inter-JVM. OSGi zajmuje się
problemami stricte w ramach jednej JVM (intra-JVM). Pewne koncepcje -
typu orientacja na usługi (SOA) - są oczywiście podobne (jak zawsze),
ale przeznaczenie obu pomysłów (tj. JINI i OSGi) jest kompletnie
inne. Usługa JINI to usługa widoczna na zewnątrz (poza JVM) - jej
IMPLEMENTACJA może korzystać z wielu udostępnionych w ramach tej
samej JVM usług, a także wymagać bardziej elastycznego classloading'u
(niż to co daje "czysta" JVM). Czyli: OSGi dotyczy modularyzacji i
dynamizmu implementacji usług, a nie - jak JNI - zdalnego dostępu i
korzystania ze zdalnych zasobów. Pomijając popularność JINI (i OSGi),
to z technicznego punktu widzenia nie widzę dlaczego nie miałyby
współdziałać.
Przepraszam, ale to powyzej to ja juz gdzies czytalem (tyle ze po
angielsku) i jest to typowy belkot kogos, kto o Jini ma pojecie ze
starych materialow marketingowych Suna.
1) moga (ale nie musza) posiadac czesc "serwerowa", z ktora czesc
"kliencka" komunikuje sie przez siec. Ale nic nie stoi na przeszkodzie,
zeby serwis w calosci byl uruchomiony w maszynie wirtualnej klienta.
moze tu http://www.artima.com/weblogs/viewpost.jsp?thread=202304 czytałeś?
Tak.
Post by Piotr Lipski
"In fact, OSGi and Jini are service architectures built for completely
different contexts. OSGi is a service architecture for services that are
in the same address space. It allows you to build programs out of
cooperating services. And for that sort of thing, it is pretty good.
Jini is a service architecture for distributed systems that are built out
of services that are separated by a network. And the network is a very
different environment from the single virtual machine"
Twierdzisz, że lead architect for Jini bełkoce? Trochę to zabawnie brzmi...
Fakt - zabawnie :)
Ale jednak bede sie upieral przy swoim zdaniu. Po przeczytaniu naprawde
duzej ilosci materialow na temat Jini i OSGi - zarowno architektury, jak i
konsekwencji dla projektowania systemow, wydaje mi sie, ze Jim Waldo
napisal tak bardziej z przyczyn politycznych - uspokojenia nastrojow (byl
Ale pisząc o swoim szefie: "Even Jonathan Schwartz was able to understand this
over a decade ago. ", w akapicie dalej, nie wygląda na polityka.
Ale moze to tylko żarcik.

PL
w***@googlemail.com
2008-11-16 22:19:58 UTC
Permalink
Post by Michal Kleczek
Post by w***@googlemail.com
Inna sprawa, że serwerowym rozwiązaniom na JVM system operacyjny jest
eeee... niepotrzebny i wręcz przeszkadza. Aplikacje  serwerowe Java
(przyjmijmy J2EE/JEE) powinny korzystać w 100% z tego co im daje JVM.
Typowa serwerowa JVM potrzebuje od  systemu operacyjnego TYLKO dostępu
do I/O (sieć i dyski), bo sama JVM zarządza pamięcią i dostępem do
procesorów  (zarządzaniem wątkami).
Przepraszam, ale to jest bzdura. Wszelkie inicjatywy stworzenia systemu
operacyjnego Java juz dawno zmarly (istnieje jeszcze JNode, ale to jest
czysto hobbystyczne przedsiewziecie, zreszta malo juz aktywne).
Nie mówiłem o stworzeniu systemu operacyjnego w Java. Mówiłem, że JVM
(zwłaszcza - co podkreślałem - dla SERWEROWYCH aplikacji - np.
korzystających JEE) nie wykorzystuje 99.5% tego, co daje typowy OS. Bo
nie musi wykorzystywać. Zarządzaniem pamięcią zajmuje się JVM.
Przydziałem wątków wykonawczych do CPU zajmuje się JVM. Pozostaje
głównie I/O (sieć i dyski) - I/O szeroko rozumiane, w tym filesystem.
Załóżmy, że to jest te 0.5%, które TYPOWA (mainstream'owa) JVM nie
obsługuje i polega tu na OS. JAk pokazuje praktyka - wystarczy
niecałe 2 MB i porządną funkcjonalność tego rodzaju da się POD maszynę
wirtualną Java dołożyć (podkreślam POD, bo nie wymaga to zmiany JVM,
tylko jej "oszukania" i zastąpienia kilkudziesięciu wywołań
systemowych normalnie obsługiwanych przez OS, wywołaniami z tej 2MB
warstwy "zastępującej" OS). Zdziwiłbyś się, ale większość testów
takiego rozwiązania pokazuje nawet spory PRZYROST wydajności, bo w
optymalizacjach można skorzystać na fakcie, że taka JVM może być
JEDNOPROCESOWA (czyli obsługiwać jeden proces, w ramach którego może
być wiele wątków) i JEDNOUŻYTKOWNIKOWA. Nie ma np. problemów
wydajnościowych z przejściami pomiędzy warstwami kernela (a driver'y I/
O w przeważającej części właśnie działają w niższych "ringach" niż
user). Jaki jest tutaj potencjał, to wystarczy spojrzeć na OS konsol
do gier - w sumie niepowalający sprzęt, a efekty graficzne często o
dwa rzędy lepsze niż na porównywalnym PC z normalnym OSem).
Każdy OS też swoje waży - min. 300-400 MB RAM, 2-4GB przestrzeni
dyskowej, dostęp do CPU. W przypadku kombinacji OS+JVM, także walka o
zasoby, np. pamięć (znane konflikty paging'u w OS z GC w JVM). Taki
zbędny bagaż jest spory...
Post by Michal Kleczek
Post by w***@googlemail.com
Optymistycznie mówiąc, jest to
jakieś 0.5 procent tego co ma w sobie system operacyjny. Reszta jest
w  zasadzie hmm... nieużywana.
Tak tak... a np. filesystem?? Czy ogolniej - obsluga IO? Juz nie mowie o
GUI - w koncu XServer na prawde nie jest pisany w javie.
Aplikacje SERWEROWE zwykle nie potrzebują GUI, dźwięku, systemu
okienkowego, itd. Do zarządzania maszyną wirtualną (nie mylić z
JVM !) wystarczy obsługa SSH i przyda się może jeszcze syslog. Do
zarządzania JVM i aplikacjami, które w niej działają (w tym serwera
aplikacyjnego JEE) wystarczy JMX. Jeśli potrzebne będzie GUI
(oczywiście oglądane na zdalnej maszynie, która ma okienka, dźwięk,
itd), to w przypadku GUI webowego też może być ono stworzone bez
XServer'a, po prostu poprzez "wyplucie" na zdalną maszynę HTML, XML,
JavaScript, Flash, itd...
Post by Michal Kleczek
Rozumiem, ze to jest 150 tys lini kodu + ilestam linii kodu hypervisora +
ilestam linii kodu sterownikow urzadzen, ktore sa niezbedne, zeby
hypervisor mogl dzialac. Innymi slowy to "iles tam" to jest wlasnie system
operacyjny (tylko troche inny).
No pewnie, że tak. Z tym, że podając tę liczbę 150k kodu (ok. 2MB
binariów) chodziło mi o pokazanie, jak niewiele potrzeba, żeby pozbyć
się OS (i tym samym "udowadniając" tezę o wykorzystywaniu góra 0.5% z
OS przez typową JVM pod aplikacje SERWEROWE). Z technicznego punktu
widzenia hypervisor nie jest konieczny pod taką bare-metal JVM.
Zwalnia jednak autorów takiej JVM z konieczności babrania się ze
sterownikami do tysięcy różnych urządzeń, itd. Dzięki temu można się
skupić na samej JVM i wpakowywaniu do niej kolejnych fajnych
optymalizacji.
Notabene - nie wiem też, czy wiesz ile zajmuje nawet bardzo
"wypasiony" pod względem funkcji hypervisor taki jak VMware ? W tej
chwili jest to ok. 31 MB (tak - MEGABAJTÓW). Z tych 31 MB jest
bootowany fizyczny serwer, udostępniając maszyny wirtualne, w ramach
których następnie ładowana jest warstwa bare-metal i sama JVM.
Wystarczy to porównać do rozmiaru typowych serwerowych OS (2-3 GB) i
te 0.5 daje się wciąż obronić. Można już kupić na rynku serwery, które
hypervisor wbudowany na płycie głównej w postaci flash'a (daje to
wrażenie, jakby maszyna miała "drugi" BIOS). Nawet nie ma instalacji,
po prostu bootujesz maszynę z tego flash'a (wbudowanego lub
zewnętrznego - po USB) i już.


Pozdrawiam,
Waldek Kot
Michal Kleczek
2008-11-17 07:33:25 UTC
Permalink
***@googlemail.com wrote:


[ciach]
Post by w***@googlemail.com
Aplikacje SERWEROWE zwykle nie potrzebują GUI, dźwięku, systemu
okienkowego, itd. Do zarządzania maszyną wirtualną (nie mylić z
JVM !) wystarczy obsługa SSH i przyda się może jeszcze syslog. Do
zarządzania JVM i aplikacjami, które w niej działają (w tym serwera
aplikacyjnego JEE) wystarczy JMX. Jeśli potrzebne będzie GUI
(oczywiście oglądane na zdalnej maszynie, która ma okienka, dźwięk,
itd), to w przypadku GUI webowego też może być ono stworzone bez
XServer'a, po prostu poprzez "wyplucie" na zdalną maszynę HTML, XML,
JavaScript, Flash, itd...
Na ten fragment chcialbym odpisac oddzielnie, bo IMHO to jest kluczowy
punkt.
Termin "aplikacja serwerowa" jest dosyc wygodnym sposobem unikniecia
odpowiedzi na kluczowe kwestie. Wiec ja zapytam: co typowa aplikacja J2EE
robi? Odpowiedz:
1. Odczytuje/zapisuje dane z DBMS (w 99.9999999% przypadkow jest to RDBMS)
2. Wypluwa te dane w postaci HTML/XML lub innej tekstowej (np. JSon)
Innymi slowy - nie robi prawie NIC. Jeszcze do niedawna (tzn. dopoki
Javascript/Ajax nie zrobil sie taki popularny) glowna czesc kodu "aplikacji
serwerowej" to byl
a) framework upraszczajacy obsluge HTTP/HTML
b) driver JDBC
c) kod serwera aplikacyjnego (czyli generyczne uslugi: serwer HTTP, naming
service (JNDI), transaction service, pooling i inne pomocnicze)

Stwierdzenie, ze "aplikacja serwerowa" nie potrzebuje GUI to jest nic
innego, jak przesuwanie problemu gdzies indziej. JMX? fajnie, tylko ze do
JMX jest potrzebna konsola JMX (ma byc zrobiona w Javie czy jakos
inaczej?). A czy przegladarka (np. Firefox) jest czescia systemu czy nie?
Jak popatrzec na system W CALOSCI to okazuje sie, ze w Javie jest
zaimplementowana najprostsza i - wbrew pozorom - najmniej kluczowa czesc
systemu, bo wiekszosc to:
1) RDBMS (nie Java)
2) Przegladarka (nie Java)
3) Aplikacja kliencka dzialajaca w srodowisku przegladarki (czyli np.
Javascript lub Flash - w kazdym razie nie Java)
4) Obsluga IO (sieci/dyskow itd) oraz -generalnie - hardware, z ktorej
korzysta zarowno serwer aplikacyjny jak i RDBMS (nie Java)
5) GUI administracyjne (czesciowo Java, ale to najbardziej
skomplikowane -czyli np. XSerwer - to juz nie Java)

Zauwaz, ze tzw. "warstwa biznesowa" czyli serwlety, ejb, spring itd itp to
jest malutka czesc systemu. I - jak sie dobrze zastanowic - bedaca
wlasciwie tylko niepotrzebnym bagazem. Bo przeciez nic nie stoi na
przeszkodzie, zeby aplikacja kliencka dzialala na zasadzie "grubego
klienta" komunikujac sie z RDBMS podobnie jak jeszcze niedawno typowe
aplikacje klient/serwer. Oczywiscie uzywajac do tego jakiejs warstwy
posredniej (np. po to, zeby protokolem komunikacyjnym pozostal HTTP). Ale
ta warstwa moze byc CALKOWICIE GENERYCZNA i napisana raz - nie musi NIC
wiedziec o semantyce przetwarzanych danych.
Innymi slowy - im grubszy klient - tym mniejsza potrzeba rozbudowanej czesci
dzialajacej w serwerze aplikacyjnym (J2EE).
Niestety - swiat zmierza w kierunku wlasnie coraz bardziej rozbudowanej i
bogatej interakcji z uzytkownikiem (multimedia/animacje/3D itd).

Wiec spychanie Javy do niszy pt. "aplikacje serwerowe" jest - dla mnie -
skazywaniem jej na wymarcie.
--
Michal
jarekr
2008-11-17 11:47:10 UTC
Permalink
Post by Michal Kleczek
wiedziec o semantyce przetwarzanych danych.
Innymi slowy - im grubszy klient - tym mniejsza potrzeba rozbudowanej czesci
dzialajacej w serwerze aplikacyjnym (J2EE).
Niestety - swiat zmierza w kierunku wlasnie coraz bardziej rozbudowanej i
bogatej interakcji z uzytkownikiem (multimedia/animacje/3D itd).
Wiec spychanie Javy do niszy pt. "aplikacje serwerowe" jest - dla mnie -
skazywaniem jej na wymarcie.
No nie - od jakiegoś czasu robie grubego klienta w 3D w Javie(a
dodładnie na JmonkeyEngine), który to klient komunikuje się
z J2EE javowym - (przy okazji ten dużą częśc danych przechowuje poza
bazą danych SQL (w tabelkach są powiedzmy tylko pewne dane
statystyczne, żeby łatwo raporty zrobić) ).
--
jarekr
w***@googlemail.com
2008-11-17 13:43:41 UTC
Permalink
Post by Michal Kleczek
Na ten fragment chcialbym odpisac oddzielnie, bo IMHO to jest kluczowy
punkt.
Termin "aplikacja serwerowa" jest dosyc wygodnym sposobem unikniecia
odpowiedzi na kluczowe kwestie.
Aplikacja serwerowa jest tu rozumiana jako aplikacja, której logika
wykonuje się po stronie serwera. I nie mam zamiaru unikać odpowiedzi
(to jest grupa dyskusyjna, tutaj się dyskutuje, a nie unika dyskusji.
A dyskutuje się, bo chce się dyskutować.).

Nie wiem z jakimi Ty masz do czynienia aplikacjami, ale w moim
przypadku logika biznesowa bywa ekstremalnie złożona. Czasem nie ma
też bazy danych.

Aplikacja serwerowa nie potrzebuje GUI, bo zwykle to GUI sama tworzy -
do wyświetlenia gdzie indziej lub udostępnia stosowne interfejs
(notabene - do JMX nie jest potrzebna konsola, bo do MBean'ów można
dostawać się z własnego kodu - wiele konsol administracyjnych, w tym
webowych, jest tak zrobionych).
Serwowanie stron internetowych często wykonują serwery, na których X,
ani inny system graficzny (/okienkowy) nie jest uruchomiony.

Reszty Twojej wypowiedzi przyznam, że nie zrozumiałem...

Część o warstwie biznesowej jako "niepotrzebnym bagażu", grubym
kliencie i powrocie do pisania logiki w bazie danych bardzo mi się
podoba (zakładam, że baza płasko-plikowa ?). Świat stale potrzebuje
kontestacji...

Pewnie też się ucieszysz, że Java już jest w "niszy" serwerowej. Swoją
drogą ładna nisza, kilkadziesiąt miliardów dolarów rocznie albo i
więcej...

Pozdrawiam,
Waldek Kot
Michal Kleczek
2008-11-17 14:37:21 UTC
Permalink
Post by w***@googlemail.com
Post by Michal Kleczek
Na ten fragment chcialbym odpisac oddzielnie, bo IMHO to jest kluczowy
punkt.
Termin "aplikacja serwerowa" jest dosyc wygodnym sposobem unikniecia
odpowiedzi na kluczowe kwestie.
Aplikacja serwerowa jest tu rozumiana jako aplikacja, której logika
wykonuje się po stronie serwera. I nie mam zamiaru unikać odpowiedzi
(to jest grupa dyskusyjna, tutaj się dyskutuje, a nie unika dyskusji.
A dyskutuje się, bo chce się dyskutować.).
Nie wiem z jakimi Ty masz do czynienia aplikacjami, ale w moim
przypadku logika biznesowa bywa ekstremalnie złożona. Czasem nie ma
też bazy danych.
Aplikacja serwerowa nie potrzebuje GUI, bo zwykle to GUI sama tworzy -
do wyświetlenia gdzie indziej lub udostępnia stosowne interfejs
(notabene - do JMX nie jest potrzebna konsola, bo do MBean'ów można
dostawać się z własnego kodu - wiele konsol administracyjnych, w tym
webowych, jest tak zrobionych).
Serwowanie stron internetowych często wykonują serwery, na których X,
ani inny system graficzny (/okienkowy) nie jest uruchomiony.
Sek w tym, ze samo serwowanie HTML i udostepnianie JMX to jest _tylko czesc
systemu_. Jakies oprogramowanie musi ten HTML wyswietlic, zas inne - uzyc
JMX do udostepnienia GUI.
Moi klienci maja gleboko w nosie JMX/HTML/Javascript/Java itp - oni
wymagaja, zeby:
1. to, co widza na ekranie (szerzej - obserwowalne z zewnatrz efekty
dzialania oprogramowania) spelnialo ich wymagania
2. zeby system sie nie psul (ogolniej - zeby koszty jego napraw i obslugi
byly jak najnizsze)
Szczegolnie ten drugi punkt jest istotny, dlatego ze spelnienie go wymaga od
projektanta systemu wziecia pod uwage _wszystkich_ jego komponentow,
ktorych wiekszosc w przecietnej aplikacji korporacyjnej jest zupelnie nie
zwiazanych z Java. Jak tak do tego podejsc, to nagle okazuje sie, ze w
Javie zaimplementowana jest zaledwie mala czesc systemu (co probowalem
wykazac).
Mam wrazenie, ze programisci/projektanci Java przyjmuja "javacentryczny"
punkt widzenia: "zrobmy aplikacje j2ee, zainstalujmy serwer j2ee i wszystko
bedzie cacy". A potem sie okazuje, ze system nie spelnia oczekiwan
uzytkownikow, bo projektant nie wzial pod uwage ilus tam czynnikow, bo
przeciez "nasza aplikacja jest zgodna z j2ee".
Post by w***@googlemail.com
Pewnie też się ucieszysz, że Java już jest w "niszy" serwerowej. Swoją
drogą ładna nisza, kilkadziesiąt miliardów dolarów rocznie albo i
więcej...
To jest o tyle nie trafiony argument, ze nie rozmawiamy o tym co jest
_teraz_ tylko o _przyszlosci_. Naprawde - rynek COBOLa tez jest warty
bardzo duzo pieniedzy - a nikt juz nie twierdzi, ze COBOL ma przyszlosc.
--
Michal
w***@googlemail.com
2008-11-16 22:23:01 UTC
Permalink
Post by Michal Kleczek
Tyle, ze wspolbieznosc (oprocz istniejacego od samego poczatku slowka
kluczowego "synchronized") nie jest wbudowana w jezyk. Wiec - pomimo, ze
bardzo mi sie podoba biblioteka Douga Leigh (teraz java.util.concurrent) to
niestety nadal musze podejmowac decyzje czy zmienna ma byc typu X, czy
Future<X>, czy tez AtomicRefernce<X>. I nie mam zadnego wplywu na to, jaka
decyzje podjal dostawca biblioteki, ktora uzywasz.
I to jest dokładnie powód, dlaczego (przytaczając zresztą za Martinem
Odersky'm - twórcą języka Scala) - określiłem wcześniej C# jako
"bogaty" język. Taka jest wizja jego autorów C#, żeby wpakować
maksymalnie dużo do samego języka. Na drugim biegunie "bogactwa"
języka jest podejście jakie ma Scala - zwięzły, ale skalowalny język
(stąd Scala), w którym wiele (większość) mechanizmów jest poza
językiem. Java jest i pewnie pozostanie gdzieś pośrodku obu podejść
(więc do framework'ów trzeba się przyzwyczaić ;-)). Jedni wolą takie
podejście, inni inne. Jest wybór.
Java ma jeszcze w sposób stały ten problem do rozwiązywania, że musi
jeszcze dbać o zgodność wstecz. O tym jak wielką w dzisiejszym
świecie do tego przywiązuje się wagę, niech świadczy choćby przykład
Intel'a i AMD i procesorów x86 - ich lista rozkazów (ISA) ma już
dobrze ponad 30 lat i mimo prób (Itanium) - i sensowności takiego
kroku - nikt nawet nie śmie z niej zrezygnować - nawet trwa jej
rekonesans. A byłoby dzięki takiemu krokowi znacznie łatwiej zbudować
znacznie bardziej wydajne procesory...
W każdym razie ja wierzę, że aplikacje stają się coraz bardziej
hybrydowe. W coraz większym stopniu (coraz odważniej) - w ramach
jednej aplikacji (myślę oczywiście, o tych "nietrywialnych") - będzie
łączyć się różne technologie, języki i rozwiązania (np. wiele
technologii dostępu do baz danych, ORM'ów, itd.). W przypadku
technologii Java, wspólnym mianownikiem pozostanie JVM.

Pozdrawiam,
Waldek Kot
w***@googlemail.com
2008-11-16 22:28:12 UTC
Permalink
Post by Michal Kleczek
Moim zdaniem juz w niedalekiej przyszlosci klienci ktorych wymieniles
przestana kupowac Jave dlatego, ze na tej platformie brakuje ROZWIAZAN.
Zauwaz - ty mowisz o serwerach aplikacyjnych, a ja mowie wlasnie o Office i
Exchange. Z punktu widzenia np. firmy ubezpieczeniowej inwestycja w serwer
J2EE jest tylko i wylacznie KOSZTEM - agent ubezpieczeniowy nic z tego nie
ma. Przyszlosc lezy nie w kupowaniu serwerow aplikacyjnych, a w kupowaniu
USLUG (przykladem sprzedawcy takich uslug jest np. Google oferujacy
GoogleDocs). Z tego powodu liczba klientow inwestujacych w tego typu
infrastrukture jak serwery aplikacyjne bedzie malec, nie rosnac. Moje
pytanie brzmi: czy GoogleDocs jest zrobione w Javie???
Absolutnie nie widać najmniejszego potwierdzenia tego o czym piszesz.
Spora część aplikacji biznesowych jest zbudowana (i migrowana) do
Java. Oracle, w którym w tej chwili pracuję ma spory udział w rynku
aplikacji biznesowych (eBusiness Suite, Siebel, PeopleSoft, JD
Edwards) osadza aplikacje biznesowe na infrastrukturze serwera
aplikacyjnego. Podobnie robi SAP z Netweaver. Takich przykładów jest
wiele...
Co do Office, Exchange i szerzej desktop, to tak, jest to siła MS i
Java tutaj przegrywa. Zresztą podobnym przegranym jest tutaj i Linux
(może 0.5% desktopów ma Linuxa ?). Świat serwerowych aplikacji
korporacyjnych w Java wygląda jednak diametralnie inaczej niż
desktop...
Podobnie, nie widać tego, aby klienci rezygnowali z zakupów serwerów
aplikacyjnych. Rynek infrastruktury aplikacyjnej stale rośnie
(serwerów aplikacyjnych Java od 10 lat). Takie dane publikują wszyscy
analitycy (Gartner, Forrester, IDC, ...) i liczący się dostawcy
takich produktów. A to pokazuje tylko komercyjny wycinek tego segmentu
(właśnie: "rynek"). I to przy stałej erozji cen licencji i modelu
licencjonowania, w którego "uderza" rozwój technologiczny sprzętu
(szybsze CPU, multi-core). Jak zwykle - wybierając aplikację staje
się przed wyborem "kupić gotowe" czy "zrobić". Czasem jedno podejście
jest lepsze, czasem drugie. Oczywiście, że dla niektórych nie jest
ważne co jest pod spodem, ale dla wielu klientów owszem (i dotyczy to
nie tylko serwera aplikacyjnego, ale także bazy danych i innych
komponentów). Choćby dlatego, że będą z tą aplikacją jeszcze przez
długi czas żyć, utrzymywać, itd. <banał> Od jakości elementów
składowych zależy jakość całego rozwiązania... </banał>

Co do przyszłości w kupowaniu usług - widzisz, tego nie wiemy. Patrząc
na wyniki finansowe firm, które z takiego usługowego modelu żyją
(choćby Salesforce.com), NIC nie można o tym powiedzieć. Wciąż tuzy
rynku software (Microsoft, Oracle, SAP, IBM, CA, Symantec, Red Hat,
VMware, Adobe, ...), większość (idącą w 99%) mają z przychodów ze
sprzedaży oprogramowania w tradycyjny sposób. Jak będzie nie wiem,
pewnie się to ustabilizuje na jakimś poziomie i pewne funkcjonalności
będą tak dostarczane w taki sposób, ale w żadne przegięcie w jedną
bądź w drugą stronę, to nie wierzę...
Jest także oczywiste, że Google wiele inicjatyw finansuje z przychodów
ze sprzedaży reklam. Nie jest to więc porównywalny model biznesowy.
Notabene - czy wiemy cokolwiek o zyskowności takich usług Google jak
GoogleDocs (które jest chyba wciąż free) ? Warto by to porównać z
megatonami kasy, którą Microsoft ma ze sprzedaży Office...

Pozdrawiam,
Waldek Kot
Bartoniusz
2008-11-15 20:53:54 UTC
Permalink
Rafal stwierdził(a) w wiadomości
Post by Rafal
Trochę intrygująco postawione pytanie. :)
http://www.forbes.com/feeds/ap/2008/10/30/ap5629438.html
http://www.theserverside.com/news/thread.tss?thread_id=51294
http://forums.java.net/jive/thread.jspa?threadID=52665&tstart=0
http://www.tinyurl.pl?hPDhhQci
http://weblogs.java.net/blog/kirillcool/archive/2008/11/sun_setting_dow.ht
ml http://www.informationweek.com/news/internet/search/showArticle.jhtml?a
rticleID=212001532
http://www.theserverside.com/news/thread.tss?thread_id=51863 Jak
prognozujecie przyszłość SUN'a i Javy?
Nie warto. Google, IBM, Oracle, SAP, Sun, LinkedIn, Amazon itd. to
popierdółki.
BTW: Niedawno na Onecie przeczytałem przepowiednię końca aplikacji
korporacyjnych.
--
Bartoniusz
Kontynuuj czytanie narkive:
Loading...