Odpovídáte na názor ke článku Velká anketa: Jazyk pro tvorbu webových aplikací.
Výkon pro statický obsah:http://www.joeandmotorboat.com/2009/01/03/nginx-vs-yaws-vs-mochiweb-web-server-performance-deathmatch-part-2/
Výkon pro dynamický obsah: http://berlinbrowndev.blogspot.com/2008/08/application-server-benchmarks-including.html (viz první tabulka)
Robustnost: http://www.sics.se/~joe/apachevsyaws.html
Web frameworky: http://medevyoujane.com/blog/2008/12/18/erlang-web-development-frameworks.html
Velký projekt? Největší je asi tohle http://www.erlang.se/publications/ericsson_review_axd301_1998012.pdf viz str.6 "Automatic recovery from
software errors" (cca 1.7 mil LOC v Erlangu, údajně největší reálný a komerčně úspěšný projekt ve funkcionálním jazyce vůbec, metodika a zkušenosti shrnuty v této Ph.D. práci http://www.erlang.org/download/armstrong_thesis_2003.pdf) Nenechte se odradit, že to jsou telekomunikace, Unix to je AT&T a telekomunikace ;-)
[51] Vyjmenované aspekty všechny najednou: Například zkušenosti Motoroly: 18x méně kódu než C++, 2x větší maximální výkon, 3x menší latence, zotavení po přetížení, škálování atd. http://www.erlang.se/euc/06/proceedings/1600Nystrom.ppt
Několikanásobně méně kódu než Python nebo Ruby? Určitě než Python, Ruby možná, z vlastní zkušenosti dokonce méně než Perl. Nemusíš psát defenzivně a pattern matching, to jsou killer feature. Samozřejmě jsou věci, které napíšeš v Perlu kratší, ale taky naopak a většinou je delší celá výsledná aplikace. V Erlangu je kratší spolehlivější, snáze se debuguje a lépe škáluje. Vtip je v tom, že můžeš mapovat konkurentní proces na Erlang proces 1:1, žádné předčasné optimalizace. Spawn+join procesu 10us. Perl thread až 1500 us podle sdílené paměti, fork ani nemluvit (pěkný průser, když odforkuješ z procesu co má hodně paměti, tak když child skončí, tak clean up začne špinit stránky :-/ ) Paměť na jeden proces v Erlangu <1k. Klidně můžeš mít 1 milion procesů na mašině co má 1GB paměti a Erlang se ani nezadýchá.
Jaké je napojení na server? Žádné, je to aplikační server = prostě dostaneš request jako parametr do handleru (tam se dostal jako message). Žádné IPC a podobné nesmysly. Co request to proces a i v něm si jich můžeš udělat kolik chceš. Milion? Žádný problém.
Jaká je podpora pro připojení k databázím? Viz ErlyWeb, horší než třeba v Perlu, ale k čemu to když máš k dipozici mnesii. Nezmínil jsem se? Průmyslově ověřená soft realtime klastrovaná aplikační databáze napsaná přímo v Erlangu. Komunikace aplikace - databáze přímo, transakce psané ve stejném jazyce jako samotná aplikace, navzájem vnořené transakce (znovupoužití kódu), žádné zbytečné IPC, žádné zbytečné problémy s mapováním datových typů na typy databáze, nonstop běh i při změně schematu atd.
Možnosti integrace:
Linked-in driver (je i FFI) - nejvyšší výkon, ale blbě napsaný driver dokáže shodit runtime a musí se to umět.
Port - komunikace přes pipe, takže výkon asi jako FastCGI nebo Apache worker (rozuměj ve světě Erlanu pomalé ;-)), velmi jednoduché pro napsání. Omezené možnosti komunikace, prostě jen zasílání zpráv přes jeden kanál a jen lokálně.
Node - Proces napsaný v jiném jazyce co se tváří jako jakýkoli jiný node v Erlang clusteru. Například existuje Java node a .NET node (C#) a další. Komunikace přes síť, multiplexing zpráv (node se může tvářit, že v něm běží více procesů a routovat message pro ně). Některé node dokonce podporují process monitory, normálně je monitorován jen node. (Monitorováním se rozumí, že když si zapnu v procesu A monitor procesu nebo node B, tak když ten node nebo proces skončí ať už normálně, nebo havárií, tak o tom spolehlivě dostane proces A zprávu)
Vysvětlení pojmů:
Erlang - jazyk a runtime platforma (clustering, hot-code swap)
OTP - průmyslově ověřený framework pro budování spolehlivých systémů (Ericsson - ATM swith se spolehlivostí devět devítek) - běžně používán pro většinu erlangových projektů. Je totiž velmi jednoduchý a snadno se používá a vlastnosti platformy máš prakticky zadarmo
YAWS - web a aplikační server a jednoduchý web framework
MochiWeb - web server a framework
EarlyWeb - MVC web framework na YAWS
Nitrogen - event driven web framework na YAWS i MochiWeb
Celé to zní jako pohádka? Taky mi to znělo jako pohádka, když jsem poprvé četl http://www.erlang.org/white_paper.html Když jsem si to začal ověřovat, tak jsem nejen zjistil že je to pravda, ale začal jsem objevovat další a další pohádkové vlastnosti a měnili se ve skutečnost.
Další zajímavé projekty v Erlangu:
CouchDB - http://couchdb.apache.org/ - REST over HTTP DMBS (klastrovaná, ...)
Scalaris - http://code.google.com/p/scalaris/ výherce ceny IEEE pro škálující řešení
ejabberd - nejvýkonnější a nejpoužívanější klastrovatelný a plugovatelný XMPP serevr
Wings 3Dh - http://www.wings3d.com/ 3D modeller
Tsung - http://tsung.erlang-projects.org/ HTTP, XMPP, ... benchmarking tool
Facebook - http://www.facebook.com/ chat system je v Erlangu
Amazon SimpleDB - ;-)
A že jste o Erlangu ještě neslyšeli? Nejste sami, celý svět objevuje Erlang teprve teď http://ulf.wiger.net/weblog/wp-content/uploads/2008/11/erlang-requests-per-month-081101.gif
Autor je student Fakulty informačních technologií VUT v Brně. Současně pracuje ve firmě LifeWeb (http://www.lifeweb.cz) jako hlavní vývojář.