04.03.2008 Je nám ta Java vůbec k něčemu?

Ať si kdo chce co chce říká, ať si mamka slzy utírá, k dokonalému mladému programátorovi patří Java jako k velbloudovi hrby. Přesně takovouto parafrázi přetransformovanou z povídky Šimka a Grosmana "Jak jsem se učil kouřit" bych mohl začít článek "Jak jsem se učil Javu". Ovšem nenazval jsem ho takto, protože zvolený název mi přišel výstižnější. Je tomu přesně rok, kdy jsme dokončili přepis prvního z rodiny zpravodajských serverů Sport.cz. Pak jsem začal trošku experimentovat s Javou a napadlo mě, využít rozhraní v C++ pro sport.cz a napsat k němu webovku v Javě, a tak se i stalo. Tenkrát jsem nějak neměl sílu dotáhnout to do konce a nyní jsem se ke stejnému záměru vrátil. Současná webovka sport.cz je napsaná v Pythonu s tím, že komunikuje se serverem (C++) prostřednictvím FastRPC (XML-RPC). Chvilku jsem zjišťoval co by se na to dalo použít a nakonec volba padla na Tomcat, Spring, Log4j a JSTL. Jako XML-RPC knihovnu jsem použil http://ws.apache.org/xmlrpc/client.html.

V podstatě mě zajímalo, co všechno bude znamenat napsat webovku tak, aby měla stejné funkce a jak bude výkoná. Samozřejmě že jsem nemohl a ani nechtěl implementovat všechno, proto jsem se zaměřil na core funkčnost a aby na stránce byly stejné objekty jako je tomu teď. Náročnost aplikace pro test prostě musí být shodná. Celý web je založený na rubrikách a článcích, proto jsem se omezil pouze na tyto dvě url, tj. vypsání obsahu sekce a vypsání článku. Asi po týdnu bádání a psaní jsem byl hotov. Výsledek mého snažení si můžete stáhnout (bez knihoven) zde, kromě jedné třídy, ve které je umístěno neveřejné rozhraní. A jak to všechno dopadlo ?

Ze začátku mi to připadalo hodně zmatené a nějak jsem se nemohl ztotožnit s přílišným množství xml konfigurace. No jak bych to napsal slušně? Strašně mě to ....., nebylo mi to prostě po chuti. Po nějaké době jsem zjistil, že to k tomu Springu jaksi patří a pak jsem to už považoval za normální. Java je někdy až přehnaně striktní v chytání výjimek, ale je to pouze o zvyku a způsobu psaní. Ve finále jsem napsal méně kódu, než v Pythonu, což bylo způsobeno Springem, který mi hodně věcí zjednodušil, ale zase se to nasbíralo v logice webovky.

Co mi to přineslo a líbilo se
Co se mi naopak nelíbí

A co ten výkon? Byla asi ta nejdůležitějsí otázka. Testování výkonu proběhlo na dvou serverech s operačním systémem Debian Etch 64bit. Pythoní i Javová webovka běžela na stroji s dvoujádrovým Intel Xeon 2.00GHz. Backendová komponenta byla umístěna na jiném stroji, který měl stejné procesory dva. Pro test jsem použil 100 náhodných url, relevantních pro tuto webovku. Test Python (mod_python, Apache) vs. Java (Tomcat) dopadl takto:

Java Python
Requesty req/s 80-130 50-80
Requesty prům. 110 75
Počet klientů 40 40
Počet threadů 70 0
Počet procesů 1 50
Load average 14 25
Idl 3 0
Usr 75 80
Sys 22 20
Procesor % 100 100
CS 3000 4000
Sitovka prijato M/s 8 5
Sitovka odeslano M/s6 5

Při testu jsem použil pro komunikaci XML-RPC v Javě i v Pythonu, z důvodu sjednocení komunikačních technologií. Výsledky jsem tak nějak očekával, různé testy, které většinou hodnotí Javu o řád lépe, vzaly za své. Nicméně z výše uvedené tabulky je jasně vidět, že Java je v tomto případě na webovce rozhodně výkonější. Dále je dost podstatné, že Java uměla ze serveru vymačkat o něco více při polovičním Loadu a menší hodnotě Context Switch. Což je logické, protože Java je threadovaná a Pythoní webovká ja Preforkovaná. Důležité je taky zmínit, jak na tom byl backendový server. Ten měl load 15 při zatížení Java webovkou, limitní byla databáze a 8 při zatížení Pythoní webovkou. Což je způsobeno vyšším počtem requestů z webovky.

Takže co ještě na závěr napsat tak, abych žádné z technologií nenadržoval? Výkonově vychází o něco málo lépe Java, což je ovšem zaplaceno delším vývojem. Celkové moje hodnocení a odpověď na otázku "Je nám ta Java vůbec k něčemu" zní: měli by jsme se nad tím minimálně zamyslet.

Komentáře (4)

© 2008. Weblog nejen o práci. www.Karotka.cz. Rss    Google Pagerank - www.karotka.czGoogle Pagerank S-Rank - www.karotka.czS-Rank