Portál AbcLinuxu, 5. května 2025 14:17
Vlákno bylo přesunuto do samostatné diskuse.
To máš 100 aplikací, každou vystavenou na jiné IP, u každé nastavený sólo politiky (tls, cert, access pravidla) atd.?V tomto nevidím problém, adminoval jsem mnohem víc než 100 aplikací a všechny vystavené rovnou do netu. Včetně tls, crt apod. Centrální tls proxy sice vypadá jako jednodušší na údržbu, ale zase je to SPOF. Je rozdíl zbořit webserver pro jednu službu a zbořit tu centrální proxy. Když nejede jedna služba z x tisíc, je to menší problém, než když nejede nic. Ta proxy samozřejmě musí být HA, což je další věc ke konfiguraci, co se může rozbít apod. Takže bych tohle řešení vůbec nezatracoval.
Aby byl Ngixn použitelný, je třeba si platit verzi Plus za těžký manyTakhle všeobecně je to dost odvážné tvrzení. Nginx používáme a verzi Plus si platit nemusíme. Právě na reverzních proxy - ta placená verze by uměla pár věcí navíc, které by se hodily, ale není to nic, bez čeho se nedá žít. Apache je pomalý moloch se spoustou nevýhod, HTTP/2 umí jen dodatečným modulem, modul pro správu FastCGI procesů by potřeboval dost vylepšit. Jediná jeho výhoda je, že podporuje .htaccess, což je velkou částí webových věcí vyžadováno. Vlastně takový vendor lock-in.
Pomalý je jen v určitých případech, jedním z nich já právě povolený ".htaccess".To nepochybně. Ale lid si to žádá... Nicméně to fakt není všechno, co je na Apache blbě. Zkuste si provozovat hodně živý server vystavený do internetu, najednou koukáte a desítky tisíc threadů. Proč? Protože nějaké síťové spojení zůstalo ve vytuhlém stavu (klient na mobilní síti, jednou za občas z toho přijde bajt, takže se to samo nerozpadne) + proces, který ho vlastní, dělá graceful restart (ukončuje se) + Apache nemá žádné nastavení, kterým by se dalo říct "časový limit na graceful restart je X". A najednou server nejede, protože kernel odmítá spustit další procesy (nebo co to vlastně bylo, to už jsem neřešil, šel jsem řešit příčinu.) Dokonce jsem to jednou ladil a mám zato, že se v nějakých případech Apache takhle vytuhl sám. Proces v jednom vlákně čeká na uzavření file descriptoru, který sám drží otevřený, takže na to nikdy nedojde. To je mpm_worker, pak máme mpm_event, ten je o něco lepší. Ten do limitů na počet procesů počítá i ty, které se ukončují, takže na desítky tisíc threadů nedojde. Bohužel dojde na to, že z x desítek povolených procesů je x desítek bez dvou ve stavu, kde se ukončují a neberou nová spojení, a celý webserver jede (moc nejede) na zbylé dva. O mpm_prefork se ze zjevných důvodů nebudu ani vyjadřovat. Každopádně jsem psal skript, který hledá procesy v divném stavu a zabíjí je SIGKILLem, protože nic menšího na to neplatí. O tom, jak nedobrý nápad je zabíjet procesy, které používají SYSV sdílenou paměť a semafory a jánevímco ještě, signálem, který jim neumožní po sobě tyhle věci uklidit, asi nemusím psát. A tohle není problém .htaccess, to je problém v základním kódu Apache a jeho různé variace se v tom serveru objevují už léta. O jednom-za-občasném SIGSEGV ani nemluvit. Oproti tomu Nginx používám bez supervizoru, který by ho restartoval, protože narozdíl od Apache to snad nikdy nebylo potřeba. Samozřejmě, jak jsem psal, nemůžu ho použít všude, protože .htaccess Jinak by mě zajímalo, co je na Nginx tak nepoužitelné bez Plus. Když teda odhlédnu od toho, že když máte na Oracle, tak moc a moc pochybuju, že by peníze za Nginx byly "těžký many"
Jinak by mě zajímalo, co je na Nginx tak nepoužitelné bez Plus.Never mind, přehlídl jsem #24
Při jednom né zcela chtěném testu to zvládlo 50k/s, než začaly docházet lokální tcp zdroje, nikoly fyzické (ram i cpu to dávaly, ale vyžralo to všechny zdroje v rámci kernelu a tcp/ip protokolu)Ano, to je přesně ten problém, který v Apache je. A narazíte na to i při provozu, který není ne zcela nechtěným testem.
Jinak by mě zajímalo, co je na Nginx tak nepoužitelné bez Plus.Pokud se bavíme o load balancingu, tak absence sticky cookies (3rd party modul sehnaný pod rukou někde na Githubu není to samé) může být dost velký problém.
Aby byl Ngixn použitelný, je třeba si platit verzi Plus za těžký many, nebo si udržovat vlastní sadu patchů a nechávat si je auditovat.Ano, bohužel. Je to další z řady "OSS" produktů, které jsou jen výtahem pro prodej komerčního balíku. Stejně jako třeba kdysi dobré Mongo a celá ta mašinerie kolem ELK. Na Apache je sice ten věk vidět (nesedí mi moc způsob konfigurace), ale je to asi nejlepší volba. (Používám apache, nginx a někde snad i lighttpd.)
Na Apache je sice ten věk vidět (nesedí mi moc způsob konfigurace), ale je to asi nejlepší volba.Proč? Teda proč praktické důvody, ideologické viz výše.
Proč? Teda proč praktické důvody, ideologické viz výše.Moc mi nesedí jeho způsob konfigurace, ale tj čistě individuální. Nemám moc rád xml like configy, ani moc yaml. Co se týče té nejlepší volby, tak je tam všechno. Dokonce i ten event z nginxu. Tj mám na výběr různé workery, můžu (nemusím) použít moduly (v nginx jen proxy), tj umí to servírovat nejen statické soubory, ale i třeba perl, python, (ano, i to php), udělat to proxy na backendy apod. Nginx umí vlastně jen event a proxy. Navíc jsem se na apache začal dívat jinak po přechodu na freebsd. Na linuxu dřív, to bylo kompilované se vším (a dokonce povolené v konfigu) a byl to prostě moloch. Potom postupně to kompilovali jako dynamické moduly (a byly by default vypnuté). Ve Freebsd si kompiluju pouze to, co skutečně potřebuju. Takže na něterých instalacích je to v podstatě jen event pro statické soubory. (Jasně jo, tohle se dá dělat i na linuxu, ale ne všechny distra mají tradici a řádnou podporu pro kompilace a konfiguraci balíčků.)
Jako je zvykem zatracovat prefork worker a phpmod, ale vsadil bych se, že právě tato kombinace si na internetu odpracovala suverénně nejvíc práce, zejména na těch malých webech, kterých je ale většina.To sotva. Vzhledem k tomu, že prefork nedokáže odvést hodně práce, nemohl na internetu odpracovat nejvíc.
Apache, phpmod, phpDokud v celém webserveru běží jedna aplikace a nepotřebujete do toho moc vidět, co to dělá, když něco nefunguje dobře, fajn. Jinak jsou všechny mod_jazyk prasárna.
Bohužel, protože to typicky končí tak, že z free části zůstane chudá příbuzná a celé je to jen lákadlo na tu komerční část. A je to otázka motivace těch lidí. Jestli to dělají jen pro ty funkce (aby byly nejlepší apod.), nebo jako lákadlo.No, zatím to vypadá tak, že ať už je to jakkoliv, tak z toho vypadl velice dobrý webserver. Toho, že by Apache něco dohnal, jsem si teda moc nevšiml, ale pokud to tak je, tak další plus. Samá pozitiva a i kdyby se nakonec stalo to, co popisujete, tak jsme furt v plusu. Bohužel tady prostě není správné slovo.
Dokonce i ten event z nginxu.To jsem popsal vedle, funguje hůř.
můžu (nemusím) použít moduly (v nginx jen proxy), tj umí to servírovat nejen statické soubory, ale i třeba perl, python, (ano, i to php)Hm, to bych jako výhodu nebral, provozovat interpreter ve webserveru nepovažuju za dobrej nápad. Maximálně v prostředí, kde v tom webserveru běží jen ta aplikace a nic jiného.
No, zatím to vypadá tak, že ať už je to jakkoliv, tak z toho vypadl velice dobrý webserver.Zatím. To je přesné. Takto jsem před x lety chtěl nasadit mongo, potom začali cosi dělat s licencema (rozdělení na free a komerční) a člověk nemá jistotu, co s tím bude dál. Nasazovat to na nový projekt je risk. Nebo třeba MySQL. Oracle začal dělat nekompatibilní změny a zavřel testovací tooly. Takže maria si jen těžko ověří kompatibilitu. Já si buduju stabilní stack, apache tady byl před 20 lety, postgresql tady taky byl před dvaceti lety, oboje je použitelné konstatně těch 20let. To že třeba to není neustále první na pásce co se týče výkonu nebo vlastností je možná méně důležité, než být nucen projekt rychle přestěhovat jinam. (Možná je to nuda, jak o mě někdo napsal, ale já doporučuju co nejstandardnější funkce, třeba psát SQL dle normy a moc nepoužívat extension dané db, aby bylo možné snadno přejít, kdyby něco. Zatím ta potřeba nebyla.)
Maximálně v prostředí, kde v tom webserveru běží jen ta aplikace a nic jiného.No přesně. Já taky provozuju nginx s proxy na backend (čím dám častěji tedy už přímo nasazujeme přímo ten backend bez další mezivrstvy), ale apache s modulama se hodí přesně na (malé) servery s jednou appkou. Stačí instalace jedné služby. Jednoduché na nastavení, rychlé na instalaci.
Zatím. To je přesné.Ale to přece není špatně. I kdyby čase začali cosi dělat a situace se změnila, že by Nginx už nebyl tak dobrou volbou, pořád za sebou nechává to, že jste jej mohl mnoho let ke spokojenosti používat a že (možná, já to nevidím) dokopal konkurenci, aby začala něco dělat.
oboje je použitelné konstatně těch 20letNe, není. Provoz, který byste před 10 lety považoval za obrovský, je dneska relativně normální a Apache to nedá. Máme nějaké HTTP/2, v Nginx normální funkcionalita, v Apache dodatečný modul, který sice funguje, ale dobře navržené to rozhodně není - https://httpd.apache.org/docs/2.4/mod/mod_http2.html#how-it-works . (Nějakou dobu zpátky tam bylo taky varování, že vám nebude fungovat mod_status)
To že třeba to není neustále první na pásce co se týče výkonu nebo vlastností je možná méně důležité, než být nucen projekt rychle přestěhovat jinam.Dobrá, to je rozhodování podle neexistujícího rizika. (Ukažte mi jediný scénář, kdy se vývojáři Nginx rozhodnou k něčemu, co by vyžadovalo projekt rychle přestěhovat jinam, tj. co by způsobilo, že ze všech distribucí najednou Nginx zmizí a nebude jej možné bezpečně používat dalších několik let v rámci podpory ze strany distributora.)
Ale to přece není špatně. I kdyby čase začali cosi dělat a situace se změnila, že by Nginx už nebyl tak dobrou volbou, pořád za sebou nechává to, že jste jej mohl mnoho let ke spokojenosti používat a že (možná, já to nevidím) dokopal konkurenci, aby začala něco dělat.Jo. Tak rozhodně přinesli nový koncept těch event a už to není klasickej fork model. Na druhou stranu (nevím jak je to dneska, dneska se to dá uhnat výkonem HW a počtem jader), ve své době (tím neříkám, že dnes je to výrazně jinak) měl linux strašně rychlý forky a na centos5 jsme fakt neměli problém to uforkovat. Ale jako mým úkolem nikdy nebylo udělat 50krq/s na 486, my jsme to vždy ubyli HW, protože co si budem, ten backend je vždy minimálně o dva řády pomalejší než pomalej apache. Takže jestli se něco zadýchávalo, tak to nebyl webserver, ale naše appka. Nemá smysl řešit 1ms na apache vs nginx, když backend má 100ms per rq (nad velkou db apod.). Jsme řešili výkon úplně jinde, než na webserveru.
Máme nějaké HTTP/2, v Nginx normální funkcionalita, v Apache dodatečný modul, který sice funguje, ale dobře navržené to rozhodně není - https://httpd.apache.org/docs/2.4/mod/mod_http2.html#how-it-works .Viz výše. Ono to strašně záleží na tom, co se servíruje. Jestli někdo staví CDN pro css, js, webp soubory, tak je to trochu jiné, než když je zatím backend, který skutečně něco počítá a skutečně to trvá.
(Ukažte mi jediný scénář, kdy se vývojáři Nginx rozhodnou k něčemu, co by vyžadovalo projekt rychle přestěhovat jinam, tj. co by způsobilo, že ze všech distribucí najednou Nginx zmizí a nebude jej možné bezpečně používat dalších několik let v rámci podpory ze strany distributora.)Několik let nemusí vždy stačit. U velkých nonstop provozů je výměna nějaké technologie vždy problém, i když se snažíte sebevíc. Aktuálně pracuju pro lidi, kteří před několika lety přešli z jiné db na postgresql a ten proces stále není dokončen. Změna se vyplatila, vývoj je svižnější, nasazení díky OSS snadnější apod, ale toto není komponenta, kterou lze vyměnit ze dne na den kus za kus. Ani když je to napsané přesně dle SQL normy. Vyměnit webserver a zrovna nginx by bylo snadnější, ale pokud má někdo například v apache masivně nasazené htaccesy a rewrity, tak to taky nebude sranda. Do budoucna si stejně myslím, že důležitost webserverů bude klesat a zůstanou z nich jen HA proxy. Dneska se čím dál častěji nasazují rovnou backendy do internetu. Ostatně proto google přišel s golangem, protože napsat jednoduchou rest api (micro)service je fakt trivka a nepotřebuju k tomu na serveru nic jiného, než tu jednu staticky zkompilovanou binárku (a možná konfig).
Viz výše. Ono to strašně záleží na tom, co se servíruje. Jestli někdo staví CDN pro css, js, webp soubory, tak je to trochu jiné, než když je zatím backend, který skutečně něco počítá a skutečně to trvá.Jasně, taky jsem to tady někde psal - pokud je za tím pomalá aplikace a hlavně na ten web nechodí moc lidí, tak si s Apache samozřejmě vystačíte.
Několik let nemusí vždy stačit.Já teda nevim, ale třeba kdyby se teď vývojáři třeba Postgresu rozhodli, že budou debilové, tak (Debian) máme 2 roky za stable + 1 rok oldstable + 2 roky LTS + 2 roky ELTS. To je 5 nebo 7 let. (Ty poslední dva roky nejsou zadarmo, ale velký nonstop provoz asi beztak neprovozuje Debian nebo přinejmenším nebude mít problém prosponzorovat se k ELTS.) U takového RHELu by to dost možná bylo ještě víc. To mi přijde dost i na to, aby se s takovou změnou dokázal vyrovnat velký nonstop provoz. Plus se tady bavíme o webserveru, který ve stejném modelu pracuje už nějakých 17 let, zatímco Apache 26 let. Tj. relativně vzato si důvěru na základě "existují dlouho" oba. A to všechno za předpokladu, že by to nedopadlo podobně jako u (naposledy) ElasticSearch, kdy vývoj pod původní open-source licencí okamžitě převzal někdo jiný a nebylo potřeba řešit téměř nic.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.