úterý 14. dubna 2009

Google Application Engine, konec Java hostingu?

Minulý týden oznámila firma Google podporu Javy pro jejich platfotmu Google Application Engine. Byla to zpráva poměrně překvapivá, protože dlouhou dobu vše nasvědčovalo tomu, že Google zvolí jiný jazyk kvůli všeobecně známé problematičnosti s hostováním Javy. Alespoň takové byly náznaky nebo alespoň jejich interpretace uvnitř Java komunity, které Google nikdy nijak nekomentoval. Možná to bylo nakonec dobře, protože tím na sebe Google nevytvářel zbytečný tlak spojený s veřejným oznámením připravované podpory. Pod pokličkou se pilně pracovalo na řešení, které umožňuje běh webových aplikací postavených nad Javou.

V této souvislosti není na škodu zamyslet se nad tím, proč byla nakonec zvolena Java. Bylo to zřejmě pragmatické rozhodnutí učiněné na základě faktu, že podpora Java znamená fungující Java Virtual Machine (JVM), která je schopna sama o sobě hostovat kromě vlastního jazyku Java i další jazyky jako například Ruby či Groovy. To určitě hrálo Jave do karet.

Z technického hlediska Google App Enginu stojí za zmínku jakým způsobem si Google poradil s úskalími, které Java pro hosting přináší. Kromě věcí, které není zas až tak složité ohlídat jako například vytváření nových vláken či ukončení běhu JVM, je zajímavý například limit pro maximální doba odpovědi na požadavek, která je 30s. Pokud aplikace v požadovaném limitu nevrátí odpověď, má uživatel smůlu. Z pohledu škálovatelnosti klade Google App Engine důraz na to, aby se stav pokud možno nedržel v session na úrovni HTTP protokolu. Zapomeňte na sticky session, protože každý požadavek může směřovat na úplně odlišný server.

Hned pár hodin po ohlášení podpory Javy se začalo spekulovat, jestli to bude znamenat konec konkurenčních hostingů. Myslím si, že nikoliv a ty důvody jsou čistě technického charakteru. Možnosti škálovatelnosti aplikace postavené nad Google App Engine jsou sice takřka neomezené, ale daň je krvavě placené kompromisy na implementační úrovni. Pokud vezmeme jakoukoliv klasickou webovou Java aplikaci, tak při jejím přenesení pravděpodobně spláčeme nad výdělkem. Kromě masivního využívání session pro udržení stavu konverzace bude tím nejzásadnějším problémem relační databáze.

Dvacet let jsme stavěli naše aplikace nad relačními databázemi, ale Google App Engine nic takového nenabízí. Místo toho slouží pro uložení dat BigTable, která s pomocí Map/Reduce frameworku nabízí neskutečné možnosti v oblasti škálovatelnosti na úrovni zpracování dat ale... Přestože Google App Engine nabízí vyšší úroveň abstrakce nad BigTable v podobě ochuzené implementace JPA či JDO, jedná se poměrně o fundamentální posun ve vnímání toho jak jsou data uložena a jak s nimi pracovat. Nejedná se nejen o posun ve vnímaní, ale i ryze praktické důvody jako jsou nástroje a postupy, které byly dlouhodobě používány.

Z výše uvedeného je patrné, že Google App Engine nebude rozhodně vhodný pro všechny typy webových aplikací. Pokud není hlavním kritériem aplikace škálovatelnost, pak Google App Engine nabízí sice zajímavé možnosti, ale vykoupené zásadními kompromisy při návrhu a vlastní implementaci, kdy tím nejzásadnějším je právě uložení a práce s daty. To bude hlavní příčina,že se nedá očekávat nějaký masivní přesun aplikací na Google App Engine. V poslední době se díky masivnímu rozvoji virtualizace objevilo několik zajímavých obláčku, např. Stax , kde je Java platforma nabízená jako služba. V takovém řešení dostanete k dispozici Tomcat, MySQL a platíte přenesená data a procesorový čas a nebudete tak nuceni dělat nějaké zásadní kompromisy v místech, kde to vaše aplikace zřejmě nepotřebuje.

Zdroje