Programovací jazyk pro velký web

kyberman

Programovací jazyk pro velký web
« kdy: 22. 09. 2011, 11:50:53 »
Zdravím všechny,

potřeboval bych od někoho zkušeného poradit s problémem, který programovací jazyk si vybrat pro napsání webové aplikace. Jedná se o službu, která umožňuje registraci uživatelů, ale hlavní podmínkou je zde co nejvyšší rychlost vyřizování přes REST API (pár dotazů do databáze) kvůli velkému objemu požadavků za sekundu.

Zkušenosti mám s PHP, Javou a C. Z možností které zvažuji je zde Perl, Python a Java. Uměl by mi někdo poradit, která možnost bude ideální a jaké jsou hlavní výhody a nevýhody? Pokud je ještě jiná alternativa, budu rád také za názor proč zrovna tato je vhodná.

Za všechny odpovědi předem děkuji.
« Poslední změna: 22. 09. 2011, 11:58:52 od Petr Krčmář »


KapitánRUM

Re: Programovací jazyk pro velký web
« Odpověď #1 kdy: 22. 09. 2011, 12:46:29 »
J2EE je sice rychlá, ale půl roku se to budeš učit, než začneš něco psát a až to budeš mít dopsané, řeknou ti, že vymysleli nový a lepší způsob, jak psát webové aplikace.

PHP je snadné, ale také se v něm dají dělat velké čuňárny

Vybral bych si buď ROR nebo ASP.NET MVC.

DgBd

  • ****
  • 283
    • Zobrazit profil
    • E-mail
Re: Programovací jazyk pro velký web
« Odpověď #2 kdy: 22. 09. 2011, 12:49:39 »
Já bych se spíš zaměřil na správnou volbu frameworku, který nasadit. Správný framework může omezit množství zátěže různou formou cachování a pod. Ty opravdu nejnáročnější věci na rychlost se pak dají napsat v tom nejrychlejším, co je k dispozici (třeba i v tom C). Ale imho nejvíc ušetří správný framework. RoR, Django,...

Sten

Re: Programovací jazyk pro velký web
« Odpověď #3 kdy: 22. 09. 2011, 13:02:58 »
No nejrychlejší je C nebo C++, ale psát v tom webovky není úplně snadné a programátoři jsou drazí. Na druhou stranu tyhle jazyky nemají prakticky žádné limity. Proto jsem si C++ zvolil pro svůj webový aplikační server.

Python (Django) má extrémně rychlé nasazení, ale špatnou škálovatelnost a není to moc rychlé. Podobně je na tom Ruby on Rails. Je to spíše takové PHP done right. Komerčně se to moc nepoužívá, protože PHP programátoři jsou výrazně levnější. Seznam používá Python pro frontend webovky (View v MVC).

Java a ASP.NET se používají běžně, protože jsou někde mezi Djangem a C++. Junior programátoři pro tyhle jazyky jsou také celkem levní.

Perl, který je pro weby IMO něco jako Python na steroidech (je to výrazně rychlejší a dá se to lépe škálovat), se používá převážně v akademickém prostředí, protože komerční programátoři v Perlu jsou velmi drazí. Asi největší aplikaci, kterou jsem v něm viděl, je informační systém Masarykovy univerzity.

q

Re: Programovací jazyk pro velký web
« Odpověď #4 kdy: 22. 09. 2011, 13:13:55 »
ja mam za to ze sprasena/pomala aplikace se da napsat i v tom nejrychleji vykonavajicim se jazyce. Je to otazkou mysleni programatora. I v PHP se da napsat svizna aplikace, stejne tak v C++, a otazka jak na co. Na tohle odpovi praxe a programatorske zkusenosti. Pouzit nejrychlejsi jazyk neznamena ze bude pouzit nejrychlejsi mozny algoritmus, nebo nejefektivnejsi zpracovani dat s ohledem na zatez stroje.


Martin Ladecky

Re: Programovací jazyk pro velký web
« Odpověď #5 kdy: 22. 09. 2011, 13:59:43 »
Java + Spring. Lahke na spustenie (pozri Spring tutorial) a skalovatelne velmi dobre. Takisto dostatok ludi.

Booleanek

Re: Programovací jazyk pro velký web
« Odpověď #6 kdy: 22. 09. 2011, 15:03:12 »
Zhava (firemni) propagace RoR:
http://www.hradil.org/czjug-ruby-on-rails-zapomente-na-javu/

BTW:
Nevim, v jake se nachazi fazi projekt/diplomka Davida Majdy, ale kdysi vytvoril jakysi translator RoR --> PHP. Coz muze usnadnit finalni deployment aplikace...

Filip

Re: Programovací jazyk pro velký web
« Odpověď #7 kdy: 22. 09. 2011, 15:35:12 »
java EE + spring + hibernate + RESTeasy + maven

eMko

  • ****
  • 456
    • Zobrazit profil
    • E-mail
Re: Programovací jazyk pro velký web
« Odpověď #8 kdy: 22. 09. 2011, 16:23:43 »
Já osobně mám zkušenosti s velkými aplikacemi na MS .Net přes MVC framework (v C#, ale ve Visual Basicu to prý jde taky :) ) a veskrze dobré. Pokud ale nemáš windowsový server, pustil bych to k vodě, má-li to být velká aplikace (Monu prostě v produkčním nasazení nevěřím, ale možná je to iracionální, nevím - je to víc jak rok, co jsme tuto možnost ve firmě zvažovali a zavrhli).

Jinak jak tu někdo psal - prasárny napíšeš v Javě stejně jako v PHP. Ale opět, pro velkou aplikačku bych nešel do interpretovaného jazyka. Řešením toho, že interpret PHPčka prostě nestíhal a přepisováním "bottlenecků" do Cčka jsem strávil nejeden velmi dlouhý pracovní den. A věta "kvůli velkému počtu požadavků za sekundu" by Tě od těchto jazyků měla odradit úplně, neb ani Python ani PHP (nevím jak Ruby, ale taky asi ne) nemají rozumnou práci s vlákny (každé vlákno, přestože se tváří, že běží paralelně, si zamkne interpret a všechna ostatní vlákna jsou zmražená, po chvíli se zmrazí a předá řízení jinému vláknu atp, hledej pojmy "Green threads" a "Global Interpreter Lock" .. green threads jsou dostatečná pro GUI, kde běží výpočet na pozadí a zároveň má být přístupné tlačítko "Cancel"; ale pro tohle fakt ne).

Zde z rozumných možností zbývá nějaký dobrý javový framework. Chceš-li dobré grafické rozhraní, jdi do Vaadinu nebo Google App Engine. Chceš-li jednoduchost (a dobrou křivku učení), tak Apache Wicket. Rozhodně neplatí, že "Javu se budeš učit půl roku a nic z toho" - je to jen o tom, že strávíš dva dny nad tím, že si projdeš různé možnosti a knihovny. Každý si najde to své.

Pokud jsi naštvaný na ukecanost Javy (řekněte jim prosím někdo, že je rok 2011 a ne 2001 ;-) ), tak můžeš ksicht napsat pomocí mnou jmenovaných frameworků a pro backend (volání WS, ukládání do databáze apod) použít jiný jazyk, např Scala (javová syntax, hybridní jazyk, dá se použít i jako "neukecaná Java" i když jeho hlavní síla je jinde) nebo Clojure (lispová syntax, čistě funkcionální jazyk, dají se s ním dělat "paralelní divy" a to velmi snadno).

kyberman

Re: Programovací jazyk pro velký web
« Odpověď #9 kdy: 22. 09. 2011, 16:48:43 »
Děkuji za rychlé a přínosné reakce. Vidím že vybrat si nebude vůbec lehké, ale z toho co se tady píše budu tedy volit jazyk kompilovaný a objektově orientovaný, který poběží na linuxovém serveru. Tím pádem zbývá jenom C++ a Java. U C++ jsem narazil na dobře vypadající knihovnu Wt, ale není zdarma pro komerční využití.

I když jsem ji původně pro takový projekt zavrhoval, Java by nakonec mohla být vítězem také díky tomu, že už jsem na ní dělal školní projekty a ten půlrok učení mám naštěstí za sebou. Znáte nějaké příklady větších webových aplikací, které na Javě fungují?

Pokud bych se tedy vydat tím Javovým směrem, co určitě zvolit a čemu se vyhnout? Bude vhodná kombinace kterou navrhl Filip (java EE + spring + hibernate + RESTeasy + maven)? Pak ještě otázka, jestli jako aplikační server je na to vhodný Tomcat a jakou databázi?

Díky.

DobrýŠéf.cz

  • *
  • 11
  • jsem Dobrý šéf
    • Zobrazit profil
    • Dobrý šéf
    • E-mail
Re: Programovací jazyk pro velký web
« Odpověď #10 kdy: 22. 09. 2011, 16:52:29 »
Pekna a obsahla odpoved ;)

Zde z rozumných možností zbývá nějaký dobrý javový framework. Chceš-li dobré grafické rozhraní, jdi do Vaadinu nebo Google App Engine

Mam vsak jeden dotaz. GAE neni Python? Mam dojem, ze GAE je uplne stejny jako Django. Oba jsou stavene na Pythonu.

alef0

Re: Programovací jazyk pro velký web
« Odpověď #11 kdy: 22. 09. 2011, 19:18:15 »
Na Jave beží obrovská kopa podnikových systémov, ale obvykle ich oko zákazníka nevidí, lebo sú skryté.

Tých kombinácii v stacku je obvykle mnoho, jedna zo zaužívaných je Tomcat + Spring + Hibernate. Spring MVC inak od 3.0 už podporuje REST.

Pripravte sa ale na to, že budete musiť toho dosť študovať -- je rozdiel vedieť Javu z hľadiska OOP a rozdiel zmáknuť tie frameworky.  A hlavne odhadnúť veľkosť aplikácie -- pre jeden registračný formulár a jeden REST kontrolér sa neoplatí štartovať celú Java mašinériu.

GAE nie je ako Django -- GAE je platforma, na ktorú si môžete nasadiť aplikáciu a mnoho aspektov škálovania sa vyrieši za vás. (Veľmi hmliste možno GAE prirovnať k aplikačnému serveru). Už podporuje aj Javu.

Ľubomír Mlích

Re: Programovací jazyk pro velký web
« Odpověď #12 kdy: 22. 09. 2011, 20:20:50 »
tady ten článek z roku 2008 http://scottbarnham.com/blog/2008/04/28/django-performance-testing-a-real-world-example/ ukazuje zátěžové testování webové aplikace napsané v django s konfigurací:

Xen VPS from Slicehost with 256MB RAM running Debian Etch

testovali dvě stránky, statický Home a velmi dynamický Wall (hodně dotazů do databáze)

Home: 175 req/s (i.e. requests per second).
Wall: 8 req/s.


Otázka je, jestli je 8 dotazů za vteřinu dost :-) nevím jak moc by se by šlo těch 8 zvýšit za pomoci nějakého kešovacího nástroje (memcached, redis), ale věřím, že na stovku by si to dosáhlo.

Proti tomu sem našel porovnání výkonu Tomcatu a Jboss http://blog.cherouvim.com/tomcat-vs-jboss-web/ z roku 2007 a ten říká, že v konfiguraci O/S was Windows XP SP2 on an AMD64 3000+ with 1.5GB ram průměrně 100 dotazů za vteřinu.

:-) zkušenosti s tím moc nemám a tak nějak teď nevím co si o tom myslet

Mordae

Re: Programovací jazyk pro velký web
« Odpověď #13 kdy: 22. 09. 2011, 22:12:56 »
Napis to v pythonu, framework werkzeug. Neni tam zadna omacka navic, napichnes to primo do nginx a kdyz Ti to nebude stihat, pouzijes PyPy, ktery udela JIT kompilaci.

Doporucuji kouknout na mikroframework flask, inspirovat se (upravit, napsat po svem). Pohodlne delani REST aplikaci na 100 radek boiler-plate kodu.

Re: Programovací jazyk pro velký web
« Odpověď #14 kdy: 22. 09. 2011, 23:02:47 »
Just my $0.02:

Ono nakonec stejně bude záležet na okolnostech, který jsi nenapsal a který můžeš posoudit jenom ty sám. Třeba na tom, jestli je výkon opravdu kritickej, jestli záleží na škálovatelnosti, jakou mají tyhle dvě věci váhu oproti udržovatelnosti a dostatku lidí znalých té použité technologie atd. atd....

z toho co se tady píše budu tedy volit jazyk kompilovaný a objektově orientovaný, který poběží na linuxovém serveru. Tím pádem zbývá jenom C++ a Java.

Pokud bys chtěl být trochu novátorštější a vyhovovalo by to požadavkům (viz výš), tak by ještě zajímavou variantou mohl být Erlang. Je rychlý, dá se kompilovat a pokud má aplikace určité vlastnosti, tak i kód je výrazně přehlednější a udržovatelnější než v tradičnějších jazycích. Obrovskou výhodou je škálovatelnost - pokud je aplikace čistě napsaná, je škálovatelnost prakticky zadarmo a efektivní. Třešnička na dortu je snadný přechod na distribuované zpracování, pokud je to potřeba. Velké plus je, že to není žádný excentrický katedrový jazyk, ale prověřená průmyslová technologie.

Webových frameworků není moc a asi nejsou na takové úrovni jako jinde (neumím moc posoudit), ale pěkné se najdou - záleží na tom, o co má jít a co je v projektu důležité. Třeba Mochiweb je docela pěkný a kostra se v něm napíše v Django templates. Trochu vypracovanější (ale tím asi i trochu víc svazující) je třeba Zotonic. Něco mezi je Chicago Boss. Na opravdu "webově nízkoúrovňové" věci by se mohlo hodit psát přímo pro Yaws... možnosti jsou, jde jenom o to, jestli jsou pro tvůj účel použitelné :)