Úterý, říjen 19, 2010

Python nebo Java pro Google App Engine

Vybírám technologii pro novou web aplikaci. Vývojáři se zadají podle vybrané technologie. Pak mohu ignorovat většinou nejdůležitější kritérium – znalosti vlastního týmu. Umístění webové aplikace do cloudu považuji za velmi výhodné. Mám poroto tyto důvody:
·       Nemusíme se starat u údržbu a upgrade hardware.
·       Nemusíme se starat o údržbu a upgrade operačního systému dalšího potřebného software.
·       Nemusíme řešit jak moc bude aplikace vytížená. Poskytovatel cloudu nám zajistí, že v případě vysoké zátěže, bude automaticky přidán další hardware a v případě nezájmu uživatelů nebudeme za zbytečný hardware platit. Platíme pouze zato, co spotřebujeme.
·       Nemusíme řešit datovou konektivitu. Pokud je webová aplikace mezinárodní, není to snadný úkol. Internet sice propojuje kontinenty, ale odezvy některých vzdálených serverů mohou být dost pomalé. To může uživatele odrazovat. Poskytovatelé cloudů mají tento problém obvykle dobře vyřešen.
Tedy zůstali mi tyto technologie:
·       Microsoft Azure a ASP.NET MVC.
·       Google App Engine (GAE) a Java nebo Python.
Microsoft jsem vyřadil. MVC architektura je u ASP.NET už na dobré úrovni a C# je podle mého názoru špičkový jazyk. Bohužel Microsoft je dodavatelem nejen výborného vývojového prostředí, ale také operačních systémů. Štve mě to, že nejnovější technologie fungují u Microsoftu pouze na jeho nejnovějších operačních systémech. Například vývojové prostředí Visual Studio v poslední verzi již na Windows XP nespustíte. Chápu proč to Microsoft dělá, ale Open Source nástroje těmito problémy netrpí.
Nyní mi tedy zůstaly pouze dvě technologie. Python a jeho špičkový web framework Django a Java. U Javy to s frameworky není snadné. Jenom Open Source jich je podle serveru http://java-source.net/open-source/web-frameworks 64! Já jsem si nechal poradit podle několik zdrojů a vybral Stripes. O tom ale až dále.

Rychlost provádění kódu

Rychlost je důležitá u cloudů ze dvou důvodů. V první řadě, aby program běžel rychle a mohl zvládnout nějaké případné matematické úlohy. To je zřejmé. Druhý důvod je, že se platí za spotřebovaný čas CPU. Čím program běží rychleji, tím levnější to je.
Musím ale přiznat, že rychlost provádění kódu není hlavním kritériem. Ve srovnání s ostatními náklady nejsou platby za čas CPU nijak vysoké. Navíc webová aplikace v naprosté většině neprovádí nijak složité výpočty. Pokud jsou u webové aplikace problémy s rychlostí, je pro to několik důvodů, ale programovací jazyk mezi nimi není.
Přesto jsme provedl základní testy. Použil jsem test ze stránky http://blog.dhananjaynene.com/2008/07/performance-comparison-c-java-python-ruby-jython-jruby-groovy/ Přizpůsobil jsem ho Google App Engine a spustil lokálně i na Google serverech. Vlastní naměřené hodnoty  nejsou důležité. U vzdálených jsem byl dobrým výkonem Javy příjemně překvapen.
Co se týká rychlosti, tak Java byla 31x rychlejší. Google App Engine též umožňuje v programu sledovat kolik procesorového času vylo aplikací spotřebováno. V tomto kritériu byla Java 60x úspornější. Tedy Java je z hlediska nákladů na spotřebu CPU 60x úspornější.
Z tohoto hlediska je Java jednoznačným vítězem.

 Webový framework

Jak jsem již psal výše, zde není snadné porovnání. U Pythonu to je jednoduché. Existují dva hlavní. Django a Turbogears.
U Javy je situace mnohem složitější. Za prvé má kombinace Java a Google App Engine problém se startem aplikace. Pokud třeba použijete framework Spring MVC a pro ukládání objektů do databáze JDO, je problém se startem aplikace. Pokud u GAE aplikace několik minut neběží, cloud ji odloží na disk. Při prvním požadavku se musí nahrát do paměti. U Java virtuálního stroje se nahrávají všechny knihovny. JDO i  Spring MVC jsou knihovny velké. Podle některých zpráv v konferenci může start aplikace trvat i několik desítek sekund. To mnoho návštěvníků webu odradí a přejdou jinam. Google podle některých informací pracuje na možnosti si připlatit za vlastní Java virtuální stroj. Lepším řešením je ale použít knihovny malé, které se nahrají okamžitě. Průzkumem jsem došel k tomu požít pro přístup k databázi interface Objectify-appengine a jako web framework nasadit Stripes.
Django je nepochybně dospělejší framework. Také má velké množství vývojářů a právě se dokončuje jeho verze a úpravy pro nasazení i nerelačních databází, jaká je například u GAE. Má ale i některé nevýhody. Je dost komplexní a původně bylo Django vytvořeno pro vydávání elektronických novin. To je zde i dnes znát. V polovině roku 2009 přešel velký známý server sourceforge.net z PHP na Python a zvolil místo Djanga Turbogears. Jedním z důvodů byl nízký výkon šablon Django. Django má ale skvělou administraci a lze se ho snadno naučit.
Podle mého názoru je lepší Python/Django, ale jen o kousek.

Programovací jazyk a produktivita programátora

Oba jazyky jsou objektové. Java má sice kvůli rychlosti i primitivní typy, přesto jde o vyspělé objektové jazyky. Hlavní rozdíl mezi nimi je v tom, že Java je staticky typovaný jazyk, kdežto Python dynamicky. Na výhody a nevýhody obou řešení existují dlouhé články. Osobně preferuji statické typování. Mám raději, když mě kompilátor upozorní na chybu i když za to zaplatím více naklapanými řádky. Refaktoring je další důvod proč osobně preferuji Javu.
Za hlavní nevýhodu Javy považuji její „ukecanost“ a někdy zbytečnou složitost. U Pythonu se mi moc nelíbí syntaxe. To je ovšem velmi subjektivní.
Co je asi nejdůležitější je efektivita programátora. Ta se velmi špatně měří. Je něco jiného program napsat a je úplně něco jiného ho dlouhodobě udržovat. V tom prvním vítězí Python a v tom druhém Java.  Čím větší je projekt, tím vhodnější je Java a naopak.
Pro oba jazyky existuje několik kvalitních vývojových prostředí. Zmíním například Eclipse. Samotné je naprogramováno v Javě a dá se v něm programovat jak Java, tak pomocí pydev pluginu i  Python.
Oblíbenost programovacího jazyku je důležitá. Ukazuje jak obtížně se pro projekt najde programátor a i jak obtížné je si jako programátor práci najít. Podle Tiobe indexu k dnešnímu dni má Java 17.9 procent (1. místo) a Python 4.5 procent (7. místo). Trend je ale ve prospěch Pythonu. Za polední rok Java poklesla o 1.5 procentního bodu. Python stoupl o 0.7 procentního bodu. Oba trendy jsou dlouhodobé.
Moje osobní preference upřednostňuje Javu, ale když se pokusím o osobní odstup, jsou pozice vyrovnané.

3 komentářů:

Jarda Jirava řekl(a)...

S tím posledním Visual Studiem 2010 a Windows XP to není až tak pravda. Pokud je nainstalován též poslední SP3 tak jde VS2010 nainstalovat.

Stanislav Dvoychenko řekl(a)...

Zrovna jsem na stejnem rozcesti a tohle je fakt kvalitni info, dik!

Stanislav Dvoychenko řekl(a)...
Tento komentář byl odstraněn autorem.