Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: andy 04. 03. 2012, 11:23:35
-
Ahoj
Hladam nejaku vhodnu technologiu, na ktoru presedlat z PHP. Pouzil by som Javu, lebo ju najlepsie ovladam, ale strasne mi vadi, aka je rozozrana. Pouziva niekto na web serveri mono? Ako je na tom so spotrebou pamate a existuje nieco ako jetty/tomcat pre .net? Bezi vobec dana aplikacia v nejakom containeri, podobne ako javovske servlety? Ci to funguje podobne ako php, ze sa pusti pri kazdom requeste?
-
Zdravím,
1) Používáme v práci výhradně Javu a žádné rozežranosti jsem si nevšiml. Slyším o ní jen od lidí co Javu nikdy nepoužívali.Od kud čerpáte informaceo tom že je rozežraná? Nebude víc než .NET a určitě méně než Mono.
2) Apache obsahuje rozšíření, které umožňuje provozovat aplikace napsané v Mono.Toto řešení se mi nepodařilo nikdy uspokojivě zprovoznit. Řekl bych že se jedna spíše o hračku. Existuje i FastCGI plugin,ale tam bude docházet ke kompilaci pro každý požadavek.
Na vašem místě bych se Javy opravdu nebál. Zkuste a uvidíte sám jak hospodaří se zdroji.
-
Mono je viac rozozrane ako .net? :/ No tak to ze java je pamatozrut nie je ziadne tajomstvo. Sice tolko pamate ani alokovanej nema, ale GC si s oblubou rezervuje kvanta pamate a je umenie to vyladit aby to niekedy aj uvolnil (napr. pre diskove cache a pod.). Ja sa potrebujem zmestit do maleho VPS (512MB) a rad by som tam mal pustene aj ine veci. S .netom mam nejake skusenosti len na desktope a zda sa mi, ze je uspornejsi. Mozno este pogooglim a skoncim pri niecom uplne inom..
-
Mozno este pogooglim a skoncim pri niecom uplne inom..
Záleží, jestli to chceš jenom pro svoje projekty, nebo se tím i v budoucnu živit. Jestli jenom to první, může být zajímavou alternativou třeba Erlang - ať už se Zotonic, Chicago Boss, Mochiweb, Nitrogen...
-
Java má pochopitelně vyšší nároky na paměť něž program napsaný v C/C++, ale to je dáno její "architekturou". A .NET je na tom úplně stejně (obojí je pro VM, takže to musí mít vyšší nároky). Ale skutečně by mě zajímalo, kde čerpáte informace o té rozežranosti. Argument, že: "to se přece ví" ... tím byste se vážně řídit neměl. Jeden čas jsme provozovali 10 webových aplikacích na AS Glassfish 3, na serveru běžela databáze Postgres 8.3 a 5 aplikací (brány napojené na mobilní operátory) napsaných v Javě a server měl pouze 4 GB RAM a běželo to vše úplně hladce.
Ohledně GC. GC si alokuje pamět pokud ji systém nepotřebuje (ono k čemu byste v PC měl paměť, když by ji nikdo nevyužíval). Pokud Vám takové chování vadí a chcete mít v PC paměť nevyužitou, je skutečně velice primitivní přidělit maximální velikost paměti, kterou může aplikace použít.
512 MB RAM je pochopitelně málo. A je to málo ať pro Javu, .NET, Mono, PHP.
Mono je na zdroje náročnější než .NET jednoduše pro to, že VM není tak vyladěný jako VM od MS. Mono se nedá skutečně s .NET srovnávat. Nevěřím, že někdy bude tak "dobré" jako .NET. Doporučuji se podívat sem: http://www.mono-project.com/Compatibility (http://www.mono-project.com/Compatibility).
Jak již bylo zmíněno. Pokud to máte na hraní, vyberte si něco "zajímavého". Grails, Scala, Erlang. Pokud to máte pro výdělek, pak si dokupte RAM a naučte se Javu nebo si stáhněte MS Visual Studio a naučte se .NET (ne Mono).
-
Mono je na zdroje náročnější než .NET jednoduše pro to, že VM není tak vyladěný jako VM od MS. Mono se nedá skutečně s .NET srovnávat.
Někdy může být Mono i rychlejší:
- http://www.bernhardglueck.com/archives/54
- http://www.csharp-architect.com/images/MonobenchmarksIncLinux.gif
-
Jak již bylo zmíněno. Pokud to máte na hraní, vyberte si něco "zajímavého". Grails, Scala, Erlang.
No ja bych Erlang nenalepkoval jako "zajimavy, ale na hrani"*. Spis jde o to, jestli chce jit clovek do risku psat v jazyce, pro ktery bude tezko hledat programatory, nebo sam tezko hledat uplatneni.
Jinak Erlang jako takovy mi prijde jako hodne hodne dobry jazyk a i webove frameworky pomerne slusne (uplne detailne jsem se tim nezabyval, ale co jsem tak zkousel, tak na vetsinu beznych projektu maji myslim dostatecnou vybavu). Takze pokud ma nekdo mensi firmu nebo si svoje projekty pise sam, muze byt Erlang hodne dobra (a racionalni) volba.
* Ejabberd, RabbitMQ, CouchDB apod. myslim hovori docela jasne.
-
Jednoznačně Java a Play framework!
-
512MB je na web podla mna az az. Vy si totiz predstavujete hned nieco ako root.cz web, ale toto je malicky (zatial neziskovy) webik... Medzicasom som nieco vygooglil...vyzera to, ze to mono nie je tazke rozbehat a potom uvidim. Inak ak by na tom nezalezalo, tak volim grails. Ale uz to vidim tak, ze zase skoncim pri tom PHP na ktore vsetci nadavaju (vratane mna..).
-
andy - kdyz v phpcku programatori tvori weby prasacky, tak se nediv, ze na nej nadavaji :) ono i v phpcku se da vytvorit dobry a rychly projekt, ale musi se to trochu umet...
dobra volba je django, java, ror, grails, ale rozhodne bych tam netahal mono, to je prasarna a pravdepodobne i vzdycky bude
co se tyce rozezranosti v jave - pokud mate prasacky naprogramovanou appku, zere to v jakemkoliv jazyce... u javy jsou ty naroky trosku vyssi, jelikoz bez pod VM, coz je videt zase jinde :) a zamozrejme, pokud provozujete herni server, je jasne, ze to zere trochu vice nez webova aplikace
-
.NET? Java? Mono?
To se radši to PHP nauč pořádně, ono stačí se třeba naučit nový framework a uděláš toho pro sebe víc.
A pokud chceš mermomocí něco jinýho než PHP, tak co třeba něco normálního? Python (+ Django, TurboGears, Pyramid...). Ruby (+ Rails...). Perl...
Na paměť s klidem kašli, to bys musel napsat hodně neefektivní ksindl s tisícema+ spojení, aby 512 MB nestačilo.
-
No nebudem sa tu bavit o tom preco nie PHP, o tom nebola otazka (neviem ako si dosiel hned na to, ze ho neviem poradne? teda zalezi od toho, ci myslis tu poslednu, predposlednu alebo ktoru verziu...). Momentalne sa hram s yii...
Inak asi v mone robi projekty len novell...aj co som googlil, zda sa ze to vela ludi nepouziva. (mozno to ma dovod :) )
DarkKnight: preco je to prasarna? Nejake osobne skusenosti?
-
Zdravím,
1) Používáme v práci výhradně Javu a žádné rozežranosti jsem si nevšiml. Slyším o ní jen od lidí co Javu nikdy nepoužívali.Od kud čerpáte informaceo tom že je rozežraná? Nebude víc než .NET a určitě méně než Mono.
2) Apache obsahuje rozšíření, které umožňuje provozovat aplikace napsané v Mono.Toto řešení se mi nepodařilo nikdy uspokojivě zprovoznit. Řekl bych že se jedna spíše o hračku. Existuje i FastCGI plugin,ale tam bude docházet ke kompilaci pro každý požadavek.
Na vašem místě bych se Javy opravdu nebál. Zkuste a uvidíte sám jak hospodaří se zdroji.
1) Nemam rad Javu, ale ta je predevsim nenazrana protoze vyvojar neumi poradne programovat a neumi pouzivat nastroje na debug s JDK dodane. Spolehat na GC se nevyplati. Je lepe se o objekty starat a likvidovat.
Stroje na kterych bezi mnoho instanci JVM maji kolem 190GB RAM i vice. Ano stava se ze obcas nejaka masinka skape na pameti. To pak nastava boxovacka mezi adminy a vyvojari.
2) To rozsireni mam rozjete na Beagleboardu. Je to taky cvalik ale ne takovy jako java a chova se rozumne. Vlastne ani nevim jak jsem to rozbehal. Fungovalo to tak nejak out of the box.
-
Už DarkKnight napsal, že "i v phpcku se da vytvorit dobry a rychly projekt" a já si myslím totéž. Java je sice o něco rychlejší, ale to nemusí být úplně směrodatné. Důležité pro mne je, aby mi jazyk nabídl takové konstrukce a funkce, se kterými mohu minimalizovat nároky na HW a zpřehlednit aplikaci. PHP mi v tomto směru docela vyhovuje a najdu ho skoro na každém hostingu.
Proč se říká o Javě, že je pomalá? Protože někteří exoti dokáží napsat
c = Math.pow(a,2)+Math.pow(b,2);
místo jednoduššího
c = a*a+b*b;
Tohle bývá v různých podobách v různých aplikacích. Aplikace napsaná z takových komponent bude nutně pomalá v jakémkoli jazyku. Bohužel Java k tomu svádí asi nejvíc.
-
andy - to o prasackych aplikacich atd. nebylo mirene na tebe ale obecne na lidi, kteri tvrdi, ze php je nanic :) ja v php (a ne jenom v php) programuju uz nekolik let a neni problem napsat efektivni aplikaci (ale samozrejme na vetsi aplikace je lepsi pouzivat jiny jazyk, treba takovy play+java, jak tu uz nekdo naznacil, neni spatna volba, taky je vyborne django (python))
a proc rikam, ze mono je prasarna? osobni zkusenosti :) pro me za me, at si v .netu delaji na windowsech, ale na *nixy, at to netahaji
-
taky je vyborne django (python))
Jeste porad plati, ze ma Python problem s multihtreadingem?
Pohled treba na https://code.djangoproject.com/ticket/3357 je docela zalostny... a jestli podporu multithreadingu pridali az tady https://code.djangoproject.com/changeset/16427 tak to mi prijde jako docela no comment...
-
Jeste porad plati, ze ma Python problem s multihtreadingem?
Pohled treba na https://code.djangoproject.com/ticket/3357 je docela zalostny... a jestli podporu multithreadingu pridali az tady https://code.djangoproject.com/changeset/16427 tak to mi prijde jako docela no comment...
runserver je na vyvoj nie na produkcne pouzitie.
btw Andy - js nejak ovladas nie? pozri sa na node.js a express framework a netrap sa s rozchadzanim mona.
-
runserver je na vyvoj nie na produkcne pouzitie.
Jo, to jsem z toho pochopil, ale porad mi neni jasne, jak je teda udelane produkcni reseni, pokud Python multithreading poradne neumi*. Muze to byt sice navesene na nejaky server (Apache), ktery umi s malou reziji navazat spousty spojeni, ale beztak se musi pozadavky nejak predat pythonu - tak jako tak se musi vytvorit samostatny proces, nebo vlakno. Je mozna nejaka jina cesta? Jak je to vlastne udelane?
* to netrvdim, ptam se. Myslim, ze jeste nedavno platilo, ze Python ma giant lock, jaka je situace ted, to nevim a prave me to zajima
-
Jak je to vlastne udelane?
aplikacia musi mat wsgi/fastcgi handler, pred nu sa da web server (napr ten apache s mod_wsgi/fastcgi) a ten si riadi procesy/vlakna (pocet sa nastavuje direktivou) aplikacie sam, ale kvoli GIL to nie su nativne vlakna, takze vyuzitie pri multicore asi nie je najlepsie v porovnani s inymi technologiami. http://jessenoller.com/2009/02/01/python-threads-and-the-global-interpreter-lock/ (http://jessenoller.com/2009/02/01/python-threads-and-the-global-interpreter-lock/).
-
M.P.: navic ten bugreport se tykal pouze pridani moznosti spustit runserver bez multithreadingu
-
ale kvoli GIL to nie su nativne vlakna, takze vyuzitie pri multicore asi nie je najlepsie v porovnani s inymi technologiami. http://jessenoller.com/2009/02/01/python-threads-and-the-global-interpreter-lock/ (http://jessenoller.com/2009/02/01/python-threads-and-the-global-interpreter-lock/).
No o tohle mi prave jde - ten clanek je taky dva roky stary, zajimalo by me, jaka je situace ted. Vicejadrove systemy jsou cimdal castejsi a pokud je Python neumi vyuzit, tak bych si ho teda doporucit netroufnul...
-
No o tohle mi prave jde - ten clanek je taky dva roky stary, zajimalo by me, jaka je situace ted. Vicejadrove systemy jsou cimdal castejsi a pokud je Python neumi vyuzit, tak bych si ho teda doporucit netroufnul...
(C)Python pořád má GIL a jak to bude s PyPy, které výhledově CPython zřejmě nahradí, je otázka. To ovšem neznamená, že Python neumí využít více jader. V aplikacích, které hojně čakají na I/O, což je případ klasických aplikačních serverů založených na DB, se GIL obchází přirozeně tím, že aplikace z Pythonu odskakuje do nativního kódu. Jinak nikomu nic nebrání používat namísto threadů procesy, kde GIL samozřejmě nebrání paralelizaci vůbec.
-
No o tohle mi prave jde - ten clanek je taky dva roky stary, zajimalo by me, jaka je situace ted. Vicejadrove systemy jsou cimdal castejsi a pokud je Python neumi vyuzit, tak bych si ho teda doporucit netroufnul...
pypy to bude mat riesene cez http://en.wikipedia.org/wiki/Software_transactional_memory (http://en.wikipedia.org/wiki/Software_transactional_memory), problem je ze to asi nebude tak rychlo.
V kazdom pripade, toto nie je vec ktoru by som riesil pri pisani beznej webovej aplikacie.
-
(C)Python pořád má GIL a jak to bude s PyPy, které výhledově CPython zřejmě nahradí, je otázka. To ovšem neznamená, že Python neumí využít více jader. V aplikacích, které hojně čakají na I/O, což je případ klasických aplikačních serverů založených na DB, se GIL obchází přirozeně tím, že aplikace z Pythonu odskakuje do nativního kódu. Jinak nikomu nic nebrání používat namísto threadů procesy, kde GIL samozřejmě nebrání paralelizaci vůbec.
Takze v tomhle ohledu Python za Javou, .NETem, Monem i Erlangem silne zaostava a neni jasne, kdy se to zmeni. Ok, tohle me zajimalo, diky.
-
Prefork děcka, prefork. Diskuze o threadech je naprostý offtopic. PHP pro jistotu thready nemá vůbec a použítí pro web to nijak nevadí.
-
Prefork děcka, prefork. Diskuze o threadech je naprostý offtopic. PHP pro jistotu thready nemá vůbec a použítí pro web to nijak nevadí.
Nevadi?
With the Apache prefork or even FastCGI, each apache/php process allocates its own memory. Most healthy sites I have worked on use about 15MB of memory per apache process. Code that has problems will use even more than this. I have seen some use as much as 50MB of RAM. But, lets stick with healthy. So, a server with 1GB of RAM will only realistically be able to run 50 Apache processes or 50 PHP children for FastCGI if each uses 15MB or RAM.
http://brian.moonspot.net/2008/02/13/apache-worker-and-php/
-
Zavisi od toho, kolko pamate tvoja aplikacia spotrebuje. Tiez ta nikto nenuti pouzivat apache.. Vseobecne je lepsie medzi procesmi ziadne data nezdielat, pretoze sa to zle skaluje a ovela jednoduchsie je pridat dalsi web server, pripadne db server do clustra.
Vseobecne som cakal, ze mi budete radit rozne ine technologie...ale ja som len chcel vediet, ako stoji mono (.net) pri porovnani s javou za behu, co sa tyka spotreby pamate (a mozno vykonu aj ked nepotrebujem). Dakujem za asi 1 ci 2 relevantne (pre mna celkom pozitivne) odpovede. Cakal som, ze opytat sa na fore je rychlejsie ako nainstalovat linux do VMky a nakodit jednoduchu webku ale uz to skoro mam...
-
Vseobecne som cakal, ze mi budete radit rozne ine technologie...ale ja som len chcel vediet, ako stoji mono (.net)
Spouštěčem byla tvoje věta "Mozno este pogooglim a skoncim pri niecom uplne inom..", pokud jsi o niecom uplne inom slyšet nechtěl a chtěl sis to vygooglit sám, tak se omlouvám :)
-
* Java (tedy spise JVM) neni az tak rozezrana a svoji zdanlivou rozezranost vyvazuje jinymi svymi parametry. Dalsi nevyhoda u Javy je, ze kdyz uz pamet dojde, tak se ta VMka musi otocit (nema privilegovanou oblast pameti jako ma napriklad jadro Linuxu, takze pokud s pameti narazis, tak je JVM v nedefinovanem stavu, protoze nevis kde si co hodilo vyjimku na nedostatek pameti). Shellove skripty urcite jen tak nenahradi, na male veci proste neni optimalizovana. Co se ale podivas na benchmarky vsude na netu (treba jeden z nich http://shootout.alioth.debian.org/u64q/which-programming-languages-are-fastest.php), tak je to vyjimecna technologie. Nicmene je jako kazda jina nastrojem, ktery musi byt vhodne pouzit tak, aby se jeji omezeni projevovaly co nejmene.
* S Monem s/za webserverem si *obecne* nepomuzes v zadnem smeru, pokud k tomu nemas *dobry duvod* proc zrovna Mono (=ala .NET na *NIXu). Jako dobrodruzstvi to bude urcite fajn. Taky jsem to absolvoval.
* V Pythonu ti GIL na webserveru nevadi. Jednoduse proto, ze vstup do IO operace prepina vlakno a zbytek je na procesoru. V cPythonu ciste pythonni interpretace kodu bezi diky GIL synchronne jen v jednom vlakne procesoru. Tedy se to resi jen kdyz nestiha procesor, coz je u webovych aplikaci spise jen vyjimecne. Prefork to jiste resi a navic je i z bezpecnostniho hlediska bezpecnejsi nez vicevlakno. Pokud by k tomu ale presto doslo, tak je spousta jinych moznosti, jak tuto (pro mne doposud jedinou) neprijemnost odstranit. Modul multiprocessing, rpc, socket, shm, ws, ... vse lze pouzit jako transparentni komunikacni mezivrstvu, dale treba jython tento problem nema, ale je cca 10x pomalejsi nez cPython. PyPy je vyjimecny projekt a posouva moznosti uctyhodne kupredu.
* Kazdy siroce pouzivany jazyk ma mnoho frameworku a je to v podstate nekonecny svet, kde se budes casem chtit radne vyznat. Rozhodovanim, ktery z nich si vyberes, se da stravit skutecne hodne casu. Doporucuji si vybrat nejakou tutovku jako zaklad a zbytek si proste prizpusobis podle potreb zakazniku/projektu.
-
Spouštěčem byla tvoje věta "Mozno este pogooglim a skoncim pri niecom uplne inom..", pokud jsi o niecom uplne inom slyšet nechtěl a chtěl sis to vygooglit sám, tak se omlouvám
Ano mas pravdu a nemas sa za co omlouvat, ale to bolo skor len take povzdychnutie. Radit mi python, ror atd...nezijem pod balvanom.. :)
-
Ano mas pravdu a nemas sa za co omlouvat, ale to bolo skor len take povzdychnutie. Radit mi python, ror atd...nezijem pod balvanom.. :)
Ok, tyhle věci teda zná asi každý (ono se těžko věští z křišťálové koule, co tazatel zná a co ne :), ale zkoušel jsi se někdy kouknout na ten Erlang? Minimálně jako zábava, nakouknutí do jiného světa, kde se věci dělají radikálně (opravdu radikálně) jinak, je podle mě pro každého kodéra přínos.
Jestli chceš, koukni třeba sem: http://learnyousomeerlang.com/content - exotičnost poznáš nejspíš z kapitol More on multiprocessing a Who Supervises The Supervisors?
A jeden z webových frameworků (kompletní CMS): http://zotonic.com/
-
Dalsi nevyhoda u Javy je, ze kdyz uz pamet dojde, tak se ta VMka musi otocit (nema privilegovanou oblast pameti jako ma napriklad jadro Linuxu, takze pokud s pameti narazis, tak je JVM v nedefinovanem stavu, protoze nevis kde si co hodilo vyjimku na nedostatek pameti).
Nevím, jak je to u JVM, ale .NET i Mono jsou např. schopny předem rezervovat pamět pro vybrané finalizéry (viz System.Runtime.ConstrainedExecution.CriticalFinalizerObject (http://msdn.microsoft.com/en-us/library/system.runtime.constrainedexecution.criticalfinalizerobject.aspx)).