{"id":35106,"date":"2019-10-31T22:02:22","date_gmt":"2019-10-31T19:02:22","guid":{"rendered":"https:\/\/prohoster.info\/blog\/proizvoditelnost-setevyh-prilozhenij-linux-vvedenie\/"},"modified":"2019-10-31T22:02:22","modified_gmt":"2019-10-31T19:02:22","slug":"proizvoditelnost-setevyh-prilozhenij-linux-vvedenie","status":"publish","type":"post","link":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/proizvoditelnost-setevyh-prilozhenij-linux-vvedenie","title":{"rendered":"Linux h\u00e1l\u00f3zati alkalmaz\u00e1sok teljes\u00edtm\u00e9nye. Bevezet\u00e9s","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>A webalkalmaz\u00e1sokat manaps\u00e1g szerte a vil\u00e1gban haszn\u00e1lj\u00e1k, \u00e9s az \u00f6sszes sz\u00e1ll\u00edt\u00e1si protokoll k\u00f6z\u00fcl a HTTP domin\u00e1l. A webalkalmaz\u00e1sok fejleszt\u00e9s\u00e9nek \u00e1rnyalatait tanulm\u00e1nyozva a legt\u00f6bben nagyon kev\u00e9s figyelmet ford\u00edtanak arra az oper\u00e1ci\u00f3s rendszerre, ahol ezek az alkalmaz\u00e1sok val\u00f3j\u00e1ban futnak. A fejleszt\u00e9s (Dev) \u00e9s \u00fczemeltet\u00e9s (Ops) elk\u00fcl\u00f6n\u00edt\u00e9se csak rontotta a helyzetet. De a DevOps kult\u00fara elterjed\u00e9s\u00e9vel a fejleszt\u0151k elkezdik v\u00e1llalni a felel\u0151ss\u00e9get az alkalmaz\u00e1saik felh\u0151ben t\u00f6rt\u00e9n\u0151 futtat\u00e1s\u00e1\u00e9rt, \u00edgy rendk\u00edv\u00fcl hasznos sz\u00e1mukra, hogy alaposan megismerj\u00e9k az oper\u00e1ci\u00f3s rendszer h\u00e1tt\u00e9rfolyamat\u00e1t. Ez k\u00fcl\u00f6n\u00f6sen hasznos, ha olyan rendszert pr\u00f3b\u00e1lunk telep\u00edteni, amely ezrek vagy ak\u00e1r t\u00edzezrek egyidej\u0171 kapcsol\u00f3d\u00e1s\u00e1t kezeli.<\/p>\n<p>A webszolg\u00e1ltat\u00e1sok korl\u00e1tai nagyon hasonl\u00f3ak m\u00e1s alkalmaz\u00e1sok korl\u00e1taihoz. Legyen sz\u00f3 terhel\u00e9seloszt\u00f3kr\u00f3l vagy adatb\u00e1zis-szerverekr\u0151l, mindezen alkalmaz\u00e1soknak hasonl\u00f3 probl\u00e9m\u00e1ik vannak a nagy teljes\u00edtm\u00e9ny\u0171 k\u00f6rnyezetben. Ezeknek a fundament\u00e1lis korl\u00e1toknak a meg\u00e9rt\u00e9se \u00e9s a megold\u00e1sukra vonatkoz\u00f3 m\u00f3dszerek \u00f6sszess\u00e9g\u00e9ben lehet\u0151v\u00e9 teszi az \u00d6n webalkalmaz\u00e1sainak teljes\u00edtm\u00e9ny\u00e9nek \u00e9s sk\u00e1l\u00e1zhat\u00f3s\u00e1g\u00e1nak \u00e9rt\u00e9kel\u00e9s\u00e9t.<\/p>\n<p>Ezt a cikksorozatot fiatal fejleszt\u0151k k\u00e9rd\u00e9seire v\u00e1laszul \u00edrom, akik j\u00f3l inform\u00e1lt rendszerszerkezetekk\u00e9 szeretn\u00e9nek v\u00e1lni. Nem lehet vil\u00e1gosan meg\u00e9rteni a Linux alkalmaz\u00e1sok optimaliz\u00e1l\u00e1si m\u00f3dszereit an\u00e9lk\u00fcl, hogy elm\u00e9ly\u00fcln\u00e9nk az alapjaikban, vagy abban, hogyan m\u0171k\u00f6dnek az oper\u00e1ci\u00f3s rendszer szintj\u00e9n. B\u00e1r sokf\u00e9le alkalmaz\u00e1st tal\u00e1lunk, ebben a ciklusban a h\u00e1l\u00f3zati alkalmaz\u00e1sokra, nem pedig asztali szoftverekre, p\u00e9ld\u00e1ul b\u00f6ng\u00e9sz\u0151re vagy sz\u00f6vegszerkeszt\u0151re szeretn\u00e9k f\u00f3kusz\u00e1lni. Ez az anyag olyan fejleszt\u0151knek \u00e9s \u00e9p\u00edt\u00e9szeknek k\u00e9sz\u00fclt, akik meg akarj\u00e1k \u00e9rteni, hogyan m\u0171k\u00f6dnek a Linux vagy Unix programok, \u00e9s hogyan strukt\u00far\u00e1lj\u00e1k \u0151ket a magas teljes\u00edtm\u00e9ny \u00e9rdek\u00e9ben.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nA Linux <i>szerver<\/i> oper\u00e1ci\u00f3s rendszer, \u00e9s a legt\u00f6bb esetben az alkalmaz\u00e1sai pontosan ezen az oper\u00e1ci\u00f3s rendszeren futnak. B\u00e1r azt mondom \u201eLinux\u201d, a legt\u00f6bb id\u0151ben magabiztosan felt\u00e9telezheti, hogy az \u00f6sszes Unix-szer\u0171 oper\u00e1ci\u00f3s rendszerre vonatkozik. Azonban nem teszteltem a mell\u00e9kelt k\u00f3dot m\u00e1s rendszereken. Teh\u00e1t, ha \u00e9rdekli a FreeBSD vagy az OpenBSD, az eredm\u00e9nyek elt\u00e9r\u0151ek lehetnek. Amikor valamit a Linux-ra jellemz\u0151en pr\u00f3b\u00e1lok ki, azt k\u00fcl\u00f6n is jelzem.<\/p>\n<p>B\u00e1r az \u00edgy megszerzett tud\u00e1st felhaszn\u00e1lhatja egy alkalmaz\u00e1s null\u00e1r\u00f3l val\u00f3 l\u00e9trehoz\u00e1s\u00e1ra, \u00e9s az csod\u00e1latosan optimaliz\u00e1lt lehet, jobb ezt nem tenni. Ha \u00faj webszolg\u00e1ltat\u00f3t \u00edr C vagy C++ nyelven a szervezet\u00e9nek \u00fczleti alkalmaz\u00e1s\u00e1hoz, lehet, hogy ez lesz az utols\u00f3 munkanapja. Azonban az ilyen alkalmaz\u00e1sok fel\u00e9p\u00edt\u00e9s\u00e9nek ismerete seg\u00edt a m\u00e1r l\u00e9tez\u0151 programok kiv\u00e1laszt\u00e1s\u00e1ban. K\u00e9pess\u00e9 v\u00e1lik \u00f6sszehasonl\u00edtani a folyamat alap\u00fa rendszereket a sz\u00e1lalap\u00fa, valamint az esem\u00e9ny alap\u00fa rendszerekkel. Meg\u00e9rti \u00e9s \u00e9rt\u00e9keli, mi\u00e9rt m\u0171k\u00f6dik jobban a Nginx, mint az Apache httpd, \u00e9s hogy mi\u00e9rt tud egy Tornado-alap\u00fa Python alkalmaz\u00e1s t\u00f6bb felhaszn\u00e1l\u00f3t kiszolg\u00e1lni, mint egy Django-alap\u00fa Python alkalmaz\u00e1s.<\/p>\n<h1>ZeroHTTPd: tanul\u00e1si eszk\u00f6z<\/h1>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/shuveb\/zerohttpd\">ZeroHTTPd<\/a><\/noindex>\u00a0\u2014 egy webszolg\u00e1ltat\u00f3, amelyet null\u00e1r\u00f3l \u00edrtam C nyelven oktat\u00e1si eszk\u00f6zk\u00e9nt. Nincsenek k\u00fcls\u0151 f\u00fcgg\u0151s\u00e9gei, bele\u00e9rtve a Redis hozz\u00e1f\u00e9r\u00e9s\u00e9t is. Saj\u00e1t Redis elj\u00e1r\u00e1sainkat futtatjuk. R\u00e9szletek lent.<\/p>\n<p>B\u00e1r sok\u00e1ig besz\u00e9lhetn\u00e9nk a elm\u00e9letr\u0151l, nincs jobb, mint k\u00f3dot \u00edrni, futtatni azt, \u00e9s \u00f6sszehasonl\u00edtani az \u00f6sszes szerverarchitekt\u00far\u00e1t. Ez a legegy\u00e9rtelm\u0171bb m\u00f3dszer. Ez\u00e9rt egy egyszer\u0171 ZeroHTTPd webszolg\u00e1ltat\u00f3t fogunk \u00edr\u00e1sba venni, alkalmazva minden modellt: folyamat, sz\u00e1l \u00e9s esem\u00e9ny alap\u00fa. Megvizsg\u00e1ljuk ezeket a szervereket, \u00e9s megn\u00e9zz\u00fck, hogyan m\u0171k\u00f6dnek egym\u00e1ssal \u00f6sszehasonl\u00edtva. A ZeroHTTPd egy C f\u00e1jlban val\u00f3sult meg. Az esem\u00e9ny alap\u00fa szerver tartalmazza <noindex><a rel=\"nofollow\" href=\"https:\/\/troydhanson.github.io\/uthash\/\">uthash<\/a><\/noindex>, egy nagyszer\u0171 hash-t\u00e1bla megval\u00f3s\u00edt\u00e1s, amely egy fejl\u00e9cf\u00e1jlban \u00e9rkezik. M\u00e1s esetekben nincsenek f\u00fcgg\u0151s\u00e9gek, hogy ne bonyol\u00edtsuk a projektet.<\/p>\n<p>A k\u00f3dban rengeteg komment tal\u00e1lhat\u00f3, hogy seg\u00edtsen eligibilit\u00e1si folyamaton. Mint egy egyszer\u0171 webszolg\u00e1ltat\u00f3, amely n\u00e9h\u00e1ny sor k\u00f3db\u00f3l \u00e1ll, a ZeroHTTPd egy minim\u00e1lis keretrendszer a webfejleszt\u00e9shez is. Korl\u00e1tozott funkcionalit\u00e1ssal b\u00edr, de k\u00e9pes statikus f\u00e1jlokat \u00e9s nagyon egyszer\u0171 \"dinamikus\" oldalakat kiszolg\u00e1lni. Meg kell mondanom, hogy a ZeroHTTPd j\u00f3l alkalmazhat\u00f3 a nagy teljes\u00edtm\u00e9ny\u0171 Linux-alkalmaz\u00e1sok l\u00e9trehoz\u00e1s\u00e1nak tanulm\u00e1nyoz\u00e1s\u00e1ra. Alapvet\u0151en a legt\u00f6bb webszolg\u00e1ltat\u00e1s v\u00e1rja a k\u00e9r\u00e9seket, ellen\u0151rzi azokat \u00e9s feldolgozza. Ezt fogja tenni a ZeroHTTPd. Ez egy tanul\u00e1si eszk\u00f6z, \u00e9s nem produkci\u00f3s c\u00e9lokra. Nem er\u0151s a hibakezel\u00e9sben, \u00e9s val\u00f3sz\u00edn\u0171leg nem b\u00fcszk\u00e9lkedhet a legjobb biztons\u00e1gi gyakorlatokkal (igen, haszn\u00e1ltam <code>strcpy<\/code>) vagy bonyolult C nyelvi tr\u00fckk\u00f6kkel. De rem\u00e9lem, hogy j\u00f3l teljes\u00edt a feladat\u00e1n.<\/p>\n<p><img decoding=\"async\" alt=\"Linux h\u00e1l\u00f3zati alkalmaz\u00e1sok teljes\u00edtm\u00e9nye. Bevezet\u00e9s\" src=\"\/wp-content\/uploads\/33fd0a5353667001523d5d4c8ada9ecf.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>A ZeroHTTPd kezd\u0151lapja. K\u00fcl\u00f6nb\u00f6z\u0151 f\u00e1jlt\u00edpusokat tud szolg\u00e1ltatni, bele\u00e9rtve a k\u00e9peket is.<\/i><\/p>\n<h1>Vend\u00e9gk\u00f6nyv alkalmaz\u00e1s<\/h1>\n<p>\nA modern webalkalmaz\u00e1sok \u00e1ltal\u00e1ban nem korl\u00e1toz\u00f3dnak statikus f\u00e1jlokra. Komplex interakci\u00f3kkal rendelkeznek k\u00fcl\u00f6nb\u00f6z\u0151 adatb\u00e1zisokkal, cache-ekkel stb. Ez\u00e9rt l\u00e9trehozunk egy egyszer\u0171 webalkalmaz\u00e1st, amelynek neve 'Vend\u00e9gk\u00f6nyv', ahol a l\u00e1togat\u00f3k feljegyz\u00e9seket hagyhatnak neveik alatt. A vend\u00e9gk\u00f6nyv meg\u0151rzi a kor\u00e1bban hagyott bejegyz\u00e9seket. Az oldal alj\u00e1n tal\u00e1lhat\u00f3 egy l\u00e1togat\u00f3sz\u00e1ml\u00e1l\u00f3 is.<\/p>\n<p><img decoding=\"async\" alt=\"Linux h\u00e1l\u00f3zati alkalmaz\u00e1sok teljes\u00edtm\u00e9nye. Bevezet\u00e9s\" src=\"\/wp-content\/uploads\/ed8e828e8567d3d114875520988742d7.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>ZeroHTTPd 'Vend\u00e9gk\u00f6nyv' webalkalmaz\u00e1s<\/i><\/p>\n<p>A l\u00e1togat\u00f3sz\u00e1ml\u00e1l\u00f3 \u00e9s a vend\u00e9gk\u00f6nyv bejegyz\u00e9sei Redisben t\u00e1rol\u00f3dnak. A Redishez val\u00f3 kommunik\u00e1ci\u00f3 saj\u00e1t elj\u00e1r\u00e1sainkon kereszt\u00fcl t\u00f6rt\u00e9nik, amelyek nem f\u00fcggnek k\u00fcls\u0151 k\u00f6nyvt\u00e1rakt\u00f3l. Nem vagyok nagy rajong\u00f3ja saj\u00e1t k\u00f3d ind\u00edt\u00e1s\u00e1nak, amikor j\u00f3l bev\u00e1lt, nyilv\u00e1nos megold\u00e1sok l\u00e9teznek. De a ZeroHTTPd c\u00e9lja a Linux teljes\u00edtm\u00e9ny\u00e9nek \u00e9s a k\u00fcls\u0151 szolg\u00e1ltat\u00e1sokhoz val\u00f3 hozz\u00e1f\u00e9r\u00e9snek a tanulm\u00e1nyoz\u00e1sa, m\u00edg a HTTP-k\u00e9r\u00e9sek kezel\u00e9s\u00e9nek komoly hat\u00e1sa van a teljes\u00edtm\u00e9nyre. Teljes ellen\u0151rz\u00e9s alatt kell tartanunk a Redishez val\u00f3 kommunik\u00e1ci\u00f3t minden szerverarchitekt\u00far\u00e1nkban. Az egyik architekt\u00far\u00e1ban blokkol\u00f3 h\u00edv\u00e1sokat haszn\u00e1lunk, m\u00e1sokban pedig esem\u00e9nyalap\u00fa elj\u00e1r\u00e1sokat. A k\u00fcls\u0151 Redis kliensk\u00f6nyvt\u00e1r haszn\u00e1lata nem adna ilyen ellen\u0151rz\u00e9st. Ezen k\u00edv\u00fcl, a kis Redis kliens\u00fcnk mind\u00f6ssze n\u00e9h\u00e1ny funkci\u00f3t l\u00e1t el (kulcs lek\u00e9r\u00e9se, be\u00e1ll\u00edt\u00e1sa \u00e9s n\u00f6vel\u00e9se; t\u00f6mbh\u00f6z val\u00f3 hozz\u00e1ad\u00e1s \u00e9s lek\u00e9r\u00e9se). Ezen fel\u00fcl, a Redis protokoll rendk\u00edv\u00fcl eleg\u00e1ns \u00e9s egyszer\u0171. A tanulm\u00e1nyoz\u00e1s\u00e1hoz k\u00fcl\u00f6n\u00f6sebben nem sz\u00fcks\u00e9ges. Az a t\u00e9ny, hogy a protokoll minden munk\u00e1j\u00e1t k\u00f6r\u00fclbel\u00fcl sz\u00e1z k\u00f3dsoron v\u00e9gzi, azt mutatja, mennyire j\u00f3l meg van tervezve.<\/p>\n<p>A k\u00f6vetkez\u0151 \u00e1bra bemutatja az alkalmaz\u00e1s m\u0171k\u00f6d\u00e9s\u00e9t, amikor az \u00fcgyf\u00e9l (b\u00f6ng\u00e9sz\u0151) k\u00e9r\u00e9st k\u00fcld. <code>\/guestbookURL<\/code>.<\/p>\n<p><img decoding=\"async\" alt=\"Linux h\u00e1l\u00f3zati alkalmaz\u00e1sok teljes\u00edtm\u00e9nye. Bevezet\u00e9s\" src=\"\/wp-content\/uploads\/5c5e6740419384b7232aeead95db491b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>A vend\u00e9gk\u00f6nyv alkalmaz\u00e1s m\u0171k\u00f6d\u00e9si mechanizmusa<\/i><\/p>\n<p>Amikor ki kell adni a vend\u00e9gk\u00f6nyv oldal\u00e1t, egy h\u00edv\u00e1s t\u00f6rt\u00e9nik a f\u00e1jlrendszerhez a sablon bet\u00f6lt\u00e9s\u00e9re, \u00e9s h\u00e1rom h\u00e1l\u00f3zati h\u00edv\u00e1s a Redis-hoz. A sablonf\u00e1jl tartalmazza a legt\u00f6bb HTML tartalmat az oldalon, ami a fenti k\u00e9perny\u0151k\u00e9pen l\u00e1that\u00f3. Van benne n\u00e9h\u00e1ny speci\u00e1lis helyettes\u00edt\u0151 a dinamikus tartalmi r\u00e9szhez: bejegyz\u00e9sek \u00e9s l\u00e1togat\u00f3sz\u00e1ml\u00e1l\u00f3. Ezeket a Redis-b\u00f3l szerz\u00fcnk be, beillesztj\u00fck az oldalra, \u00e9s teljesen elk\u00e9sz\u00edtett tartalommal adjuk \u00e1t az \u00fcgyf\u00e9lnek. A Redis harmadik h\u00edv\u00e1sa elker\u00fclhet\u0151, mivel a Redis az \u00faj \u00e9rt\u00e9ket adja vissza a kulcs n\u00f6vel\u00e9sekor. Azonban az esem\u00e9nyalap\u00fa, aszinkron architekt\u00far\u00e1j\u00fa szerver\u00fcnkn\u00e9l a sok h\u00e1l\u00f3zati h\u00edv\u00e1s j\u00f3 teszt a tanul\u00e1si c\u00e9lok \u00e9rdek\u00e9ben. \u00cdgy elvetj\u00fck a Redis l\u00e1togat\u00f3sz\u00e1m \u00e9rt\u00e9k\u00e9t, \u00e9s k\u00fcl\u00f6n h\u00edv\u00e1sban k\u00e9rj\u00fck le azt.<\/p>\n<h1>ZeroHTTPd szerver architekt\u00far\u00e1k<\/h1>\n<p>\nH\u00e9t verzi\u00f3t \u00e9p\u00edt\u00fcnk a ZeroHTTPd-b\u00f3l, amelyek azonos funkcionalit\u00e1ssal rendelkeznek, de k\u00fcl\u00f6nb\u00f6z\u0151 architekt\u00far\u00e1kkal:<\/p>\n<ul>\n<li>Iterat\u00edv\n<\/li>\n<li>Fork szerver (egy gyermekfolyamat a k\u00e9r\u00e9shez)\n<\/li>\n<li>Pre-fork szerver (folyamatok el\u0151zetes fork-ol\u00e1sa)\n<\/li>\n<li>Sz\u00e1lakkal rendelkez\u0151 szerver (egy sz\u00e1l k\u00e9r\u00e9senk\u00e9nt)\n<\/li>\n<li>El\u0151re l\u00e9trehozott sz\u00e1lakkal rendelkez\u0151 szerver\n<\/li>\n<li>Alap\u00fa architekt\u00fara <code>poll()<\/code>\n<\/li>\n<li>Alap\u00fa architekt\u00fara <code>epoll<\/code><\/li>\n<\/ul>\n<p>\nM\u00e9rj\u00fck minden architekt\u00fara teljes\u00edtm\u00e9ny\u00e9t, HTTP-k\u00e9r\u00e9sekkel terhelve a szervert. Azonban a magas fok\u00fa p\u00e1rhuzamoss\u00e1ggal rendelkez\u0151 architekt\u00far\u00e1k \u00f6sszehasonl\u00edt\u00e1sakor a k\u00e9r\u00e9sek sz\u00e1ma n\u00f6vekszik. H\u00e1rom alkalommal tesztelj\u00fck, \u00e9s kisz\u00e1m\u00edtjuk az \u00e1tlagot.<\/p>\n<h1>Tesztel\u00e9si m\u00f3dszertan<\/h1>\n<p>\n<img decoding=\"async\" alt=\"Linux h\u00e1l\u00f3zati alkalmaz\u00e1sok teljes\u00edtm\u00e9nye. Bevezet\u00e9s\" src=\"\/wp-content\/uploads\/aa4f337b6e90fa032fbef5374fac8f53.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>ZeroHTTPd terhel\u00e9ses tesztel\u00e9si be\u00e1ll\u00edt\u00e1s<\/i> <\/p>\n<p>Fontos, hogy a tesztek v\u00e9grehajt\u00e1sa sor\u00e1n minden komponens ne egy g\u00e9pen fusson. Ekkor az oper\u00e1ci\u00f3s rendszer extra k\u00f6lts\u00e9geket visel a tervez\u00e9s szempontj\u00e1b\u00f3l, mivel a komponensek versenyeznek a CPU-\u00e9rt. Az oper\u00e1ci\u00f3s rendszer k\u00f6lts\u00e9geinek m\u00e9r\u00e9se a kiv\u00e1lasztott szerverarchitekt\u00far\u00e1k mindegyik\u00e9vel a gyakorlat egyik legfontosabb c\u00e9lja. T\u00fal sok v\u00e1ltoz\u00f3 hozz\u00e1ad\u00e1sa h\u00e1tr\u00e1nyos hat\u00e1ssal lesz a folyamatra. Ez\u00e9rt a fenti \u00e1br\u00e1n l\u00e1that\u00f3 be\u00e1ll\u00edt\u00e1s m\u0171k\u00f6dik a legjobban.<\/p>\n<h3>Mit csin\u00e1l mindegyik szerver<\/h3>\n<p><\/p>\n<ul>\n<li>load.unixism.net: itt futtatjuk <code>ab<\/code>, az Apache Benchmark eszk\u00f6zt. Ez szolg\u00e1ltatja a sz\u00fcks\u00e9ges terhel\u00e9st a szerverarchitekt\u00far\u00e1ink tesztel\u00e9s\u00e9hez.\n<\/li>\n<li>nginx.unixism.net: n\u00e9ha t\u00f6bb p\u00e9ld\u00e1nyt szeretn\u00e9nk futtatni a szerverprogramb\u00f3l. Ehhez az Nginx megfelel\u0151 be\u00e1ll\u00edt\u00e1sokkal terhel\u00e9seloszt\u00f3k\u00e9nt m\u0171k\u00f6dik, amely a <i>ab<\/i> szerverfolyamatainkhoz \u00e9rkezik.\n<\/li>\n<li>zerohttpd.unixism.net: itt h\u00e9tszer k\u00fcl\u00f6nb\u00f6z\u0151 architekt\u00far\u00e1kon futtatjuk szerverprogramjainkat, egyszerre egyet.\n<\/li>\n<li>redis.unixism.net: ezen a szerveren Redis d\u00e9mon m\u0171k\u00f6dik, ahol a vend\u00e9gk\u00f6nyv bejegyz\u00e9sei \u00e9s a l\u00e1togat\u00f3sz\u00e1ml\u00e1l\u00f3 t\u00e1rol\u00f3dnak.<\/li>\n<\/ul>\n<p>\nMinden szerver egy processzormaggal m\u0171k\u00f6dik. Az \u00f6tlet az, hogy \u00e9rt\u00e9kelj\u00fck az egyes architekt\u00far\u00e1k maxim\u00e1lis teljes\u00edtm\u00e9ny\u00e9t. Mivel minden szerverprogramot ugyanazon a hardveren tesztelnek, ez az alap szint a \u00f6sszehasonl\u00edt\u00e1sukhoz. A tesztk\u00f6rnyezetem virtu\u00e1lis szerverekb\u0151l \u00e1ll, amelyeket a Digital Ocean-t\u00f3l b\u00e9reltem.<\/p>\n<h3>Mit m\u00e9r\u00fcnk?<\/h3>\n<p>\nK\u00fcl\u00f6nb\u00f6z\u0151 mutat\u00f3kat m\u00e9rhet\u00fcnk. \u00c9rt\u00e9kelj\u00fck az egyes architekt\u00far\u00e1k teljes\u00edtm\u00e9ny\u00e9t a megadott konfigur\u00e1ci\u00f3ban, a szerverek terhel\u00e9s\u00e9vel k\u00fcl\u00f6nb\u00f6z\u0151 p\u00e1rhuzamoss\u00e1gi szinteken: a terhel\u00e9s 20-t\u00f3l 15 000 egyidej\u0171 felhaszn\u00e1l\u00f3ig n\u0151.<\/p>\n<h1>A teszteredm\u00e9nyek<\/h1>\n<p>\nA k\u00f6vetkez\u0151 diagramon a szerverek teljes\u00edtm\u00e9nye l\u00e1that\u00f3 k\u00fcl\u00f6nb\u00f6z\u0151 architekt\u00far\u00e1kon, k\u00fcl\u00f6nb\u00f6z\u0151 p\u00e1rhuzamoss\u00e1gi szintek mellett. Az y tengelyen a m\u00e1sodpercenk\u00e9nti lek\u00e9rdez\u00e9sek sz\u00e1ma, az x tengelyen a p\u00e1rhuzamos kapcsolatok l\u00e1that\u00f3k.<\/p>\n<p><img decoding=\"async\" alt=\"Linux h\u00e1l\u00f3zati alkalmaz\u00e1sok teljes\u00edtm\u00e9nye. Bevezet\u00e9s\" src=\"\/wp-content\/uploads\/3415bcfb66503152d644130f68bd19da.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Linux h\u00e1l\u00f3zati alkalmaz\u00e1sok teljes\u00edtm\u00e9nye. Bevezet\u00e9s\" src=\"\/wp-content\/uploads\/ba457b671eb758f3226e0eeafaadc6aa.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Linux h\u00e1l\u00f3zati alkalmaz\u00e1sok teljes\u00edtm\u00e9nye. Bevezet\u00e9s\" src=\"\/wp-content\/uploads\/aea06856d61d4d4bdda9814c53a28d4a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAz al\u00e1bbiakban t\u00e1bl\u00e1zat tal\u00e1lhat\u00f3 az eredm\u00e9nyekkel.<\/p>\n<p> lek\u00e9rdez\u00e9sek m\u00e1sodpercenk\u00e9nt <\/p>\n<p><strong>p\u00e1rhuzamoss\u00e1g<\/strong><br \/>\n<strong>iterat\u00edv<\/strong><br \/>\n<strong>fork<\/strong><br \/>\n<strong>el\u0151-fork<\/strong><br \/>\n<strong>sz\u00e1las<\/strong><br \/>\n<strong>el\u0151-sz\u00e1las<\/strong><br \/>\n<strong>poll<\/strong><br \/>\n<strong>epoll<\/strong><\/p>\n<p>20<br \/>\n7<br \/>\n112<br \/>\n2100<br \/>\n1800<br \/>\n2250<br \/>\n1900<br \/>\n2050<\/p>\n<p>50<br \/>\n7<br \/>\n190<br \/>\n2200<br \/>\n1700<br \/>\n2200<br \/>\n2000<br \/>\n2000<\/p>\n<p>100<br \/>\n7<br \/>\n245<br \/>\n2200<br \/>\n1700<br \/>\n2200<br \/>\n2150<br \/>\n2100<\/p>\n<p>200<br \/>\n7<br \/>\n330<br \/>\n2300<br \/>\n1750<br \/>\n2300<br \/>\n2200<br \/>\n2100<\/p>\n<p>300<br \/>\n\u2013<br \/>\n380<br \/>\n2200<br \/>\n1800<br \/>\n2400<br \/>\n2250<br \/>\n2150<\/p>\n<p>400<br \/>\n\u2013<br \/>\n410<br \/>\n2200<br \/>\n1750<br \/>\n2600<br \/>\n2000<br \/>\n2000<\/p>\n<p>500<br \/>\n\u2013<br \/>\n440<br \/>\n2300<br \/>\n1850<br \/>\n2700<br \/>\n1900<br \/>\n2212<\/p>\n<p>600<br \/>\n\u2013<br \/>\n460<br \/>\n2400<br \/>\n1800<br \/>\n2500<br \/>\n1700<br \/>\n2519<\/p>\n<p>700<br \/>\n\u2013<br \/>\n460<br \/>\n2400<br \/>\n1600<br \/>\n2490<br \/>\n1550<br \/>\n2607<\/p>\n<p>800<br \/>\n\u2013<br \/>\n460<br \/>\n2400<br \/>\n1600<br \/>\n2540<br \/>\n1400<br \/>\n2553<\/p>\n<p>900<br \/>\n\u2013<br \/>\n460<br \/>\n2300<br \/>\n1600<br \/>\n2472<br \/>\n1200<br \/>\n2567<\/p>\n<p>1000<br \/>\n\u2013<br \/>\n475<br \/>\n2300<br \/>\n1700<br \/>\n2485<br \/>\n1150<br \/>\n2439<\/p>\n<p>1500<br \/>\n\u2013<br \/>\n490<br \/>\n2400<br \/>\n1550<br \/>\n2620<br \/>\n900<br \/>\n2479<\/p>\n<p>2000<br \/>\n\u2013<br \/>\n350<br \/>\n2400<br \/>\n1400<br \/>\n2396<br \/>\n550<br \/>\n2200<\/p>\n<p>2500<br \/>\n\u2013<br \/>\n280<br \/>\n2100<br \/>\n1300<br \/>\n2453<br \/>\n490<br \/>\n2262<\/p>\n<p>3000<br \/>\n\u2013<br \/>\n280<br \/>\n1900<br \/>\n1250<br \/>\n2502<br \/>\nnagy sz\u00f3r\u00e1s<br \/>\n2138<\/p>\n<p>5000<br \/>\n\u2013<br \/>\nnagy sz\u00f3r\u00e1s<br \/>\n1600<br \/>\n1100<br \/>\n2519<br \/>\n\u2013<br \/>\n2235<\/p>\n<p>8000<br \/>\n\u2013<br \/>\n\u2013<br \/>\n1200<br \/>\nnagy sz\u00f3r\u00e1s<br \/>\n2451<br \/>\n\u2013<br \/>\n2100<\/p>\n<p>10\u00a0000<br \/>\n\u2013<br \/>\n\u2013<br \/>\nnagy sz\u00f3r\u00e1s<br \/>\n\u2013<br \/>\n2200<br \/>\n\u2013<br \/>\n2200<\/p>\n<p>11\u00a0000<br \/>\n\u2013<br \/>\n\u2013<br \/>\n\u2013<br \/>\n\u2013<br \/>\n2200<br \/>\n\u2013<br \/>\n2122<\/p>\n<p>12\u00a0000<br \/>\n\u2013<br \/>\n\u2013<br \/>\n\u2013<br \/>\n\u2013<br \/>\n970<br \/>\n\u2013<br \/>\n1958<\/p>\n<p>13\u00a0000<br \/>\n\u2013<br \/>\n\u2013<br \/>\n\u2013<br \/>\n\u2013<br \/>\n730<br \/>\n\u2013<br \/>\n1897<\/p>\n<p>14\u00a0000<br \/>\n\u2013<br \/>\n\u2013<br \/>\n\u2013<br \/>\n\u2013<br \/>\n590<br \/>\n\u2013<br \/>\n1466<\/p>\n<p>15\u00a0000<br \/>\n\u2013<br \/>\n\u2013<br \/>\n\u2013<br \/>\n\u2013<br \/>\n532<br \/>\n\u2013<br \/>\n1281<\/p>\n<p>\nA grafikonb\u00f3l \u00e9s a t\u00e1bl\u00e1zatb\u00f3l l\u00e1that\u00f3, hogy 8000 egyidej\u0171 lek\u00e9rdez\u00e9s felett csak k\u00e9t szerepl\u0151 marad: az el\u0151-fork \u00e9s az epoll. A h\u00e1l\u00f3zati terhel\u00e9s n\u00f6veked\u00e9s\u00e9vel a poll alap\u00fa szerver teljes\u00edtm\u00e9nye rosszabb, mint a sz\u00e1las. Az el\u0151-sz\u00e1las architekt\u00fara m\u00e9lt\u00f3 versenyt\u00e1rsa az epoll-nak: ez bizony\u00edtja, mennyire j\u00f3l tervezi meg a Linux mag a nagy sz\u00e1m\u00fa sz\u00e1lat.<\/p>\n<h1>A ZeroHTTPd forr\u00e1sk\u00f3dja<\/h1>\n<p>\nA ZeroHTTPd forr\u00e1sk\u00f3dja <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/shuveb\/zerohttpd\">itt<\/a><\/noindex>. Minden architekt\u00far\u00e1hoz k\u00fcl\u00f6n k\u00f6nyvt\u00e1r tartozik.<\/p>\n<pre>ZeroHTTPd\n\u2502\n\u251c\u2500\u2500 01_iterative\n\u2502   \u251c\u2500\u2500 main.c\n\u251c\u2500\u2500 02_forking\n\u2502   \u251c\u2500\u2500 main.c\n\u251c\u2500\u2500 03_preforking\n\u2502   \u251c\u2500\u2500 main.c\n\u251c\u2500\u2500 04_threading\n\u2502   \u251c\u2500\u2500 main.c\n\u251c\u2500\u2500 05_prethreading\n\u2502   \u251c\u2500\u2500 main.c\n\u251c\u2500\u2500 06_poll\n\u2502   \u251c\u2500\u2500 main.c\n\u251c\u2500\u2500 07_epoll\n\u2502    \u2514\u2500\u2500 main.c\n\u251c\u2500\u2500 Makefile\n\u251c\u2500\u2500 public\n\u2502   \u251c\u2500\u2500 index.html\n\u2502   \u2514\u2500\u2500 tux.png\n\u2514\u2500\u2500 templates\n    \u2514\u2500\u2500 guestbook\n        \u2514\u2500\u2500 index.html<\/pre>\n<p>\nA h\u00e9t architekt\u00far\u00e1 mellett a legfels\u0151 szinten m\u00e9g k\u00e9t k\u00f6nyvt\u00e1r tal\u00e1lhat\u00f3: public \u00e9s templates. Az els\u0151ben tal\u00e1lhat\u00f3 az index.html f\u00e1jl \u00e9s az els\u0151 k\u00e9perny\u0151k\u00e9p k\u00e9pe. Ide lehet m\u00e1s f\u00e1jlokat \u00e9s mapp\u00e1kat elhelyezni, \u00e9s a ZeroHTTPd probl\u00e9mamentesen kiadja ezeket a statikus f\u00e1jlokat. Ha a b\u00f6ng\u00e9sz\u0151beli path megfelel a public mapp\u00e1ban tal\u00e1lhat\u00f3 \u00fatvonalnak, a ZeroHTTPd ezen a helyen keresi az index.html f\u00e1jlt. A vend\u00e9gk\u00f6nyv tartalm\u00e1t dinamikusan gener\u00e1lj\u00e1k. Csak egy f\u0151oldala van, amelynek tartalma a 'templates\/guestbook\/index.html' f\u00e1jlon alapul. A ZeroHTTPd k\u00f6nnyen b\u0151v\u00edthet\u0151 dinamikus oldalakkal. Az \u00f6tlet az, hogy a felhaszn\u00e1l\u00f3k sablonokat adhatnak hozz\u00e1 ebben a k\u00f6nyvt\u00e1rban, \u00e9s sz\u00fcks\u00e9g szerint b\u0151v\u00edthetik a ZeroHTTPd-t.<\/p>\n<p>A h\u00e9t szerver \u00f6sszeszerel\u00e9s\u00e9hez futtassa <code>make all<\/code> a legfels\u0151 szint\u0171 mapp\u00e1b\u00f3l - \u00e9s minden build megjelenik ebben a mapp\u00e1ban. A v\u00e9grehajthat\u00f3 f\u00e1jlok a public \u00e9s templates mapp\u00e1kat keresik abban a mapp\u00e1ban, ahonnan futnak.<\/p>\n<h1>Linux API<\/h1>\n<p>\nAhhoz, hogy meg\u00e9rtse az ebben a cikksorozatban tal\u00e1lhat\u00f3 inform\u00e1ci\u00f3kat, nem felt\u00e9tlen\u00fcl sz\u00fcks\u00e9ges alaposan \u00e9rteni a Linux API-t. Javaslom, hogy olvasson t\u00f6bbet err\u0151l a t\u00e9m\u00e1r\u00f3l, sz\u00e1mos referencia \u00e1ll rendelkez\u00e9sre az interneten. B\u00e1r n\u00e9h\u00e1ny Linux API kateg\u00f3ri\u00e1t \u00e9rinteni fogunk, a figyelm\u00fcnk f\u0151k\u00e9nt a folyamatokra, sz\u00e1lakra, esem\u00e9nyekre \u00e9s a h\u00e1l\u00f3zati stackre \u00f6sszpontos\u00edt. A Linux API-r\u00f3l sz\u00f3l\u00f3 k\u00f6nyvek \u00e9s cikkek mellett aj\u00e1nlom, hogy n\u00e9zze \u00e1t a rendszerh\u00edv\u00e1sok \u00e9s a haszn\u00e1lt k\u00f6nyvt\u00e1ri funkci\u00f3k man oldalait is.<\/p>\n<h1>Teljes\u00edtm\u00e9ny \u00e9s sk\u00e1l\u00e1zhat\u00f3s\u00e1g<\/h1>\n<p>\nEgy megjegyz\u00e9s a teljes\u00edtm\u00e9nyr\u0151l \u00e9s a sk\u00e1l\u00e1zhat\u00f3s\u00e1gr\u00f3l. Elm\u00e9letileg nincs k\u00f6zt\u00fck k\u00f6zvetlen kapcsolat. Lehet egy olyan webszolg\u00e1ltat\u00e1s, amely nagyon j\u00f3l m\u0171k\u00f6dik, n\u00e9h\u00e1ny millisekundumos v\u00e1laszid\u0151vel, de egy\u00e1ltal\u00e1n nem sk\u00e1l\u00e1zhat\u00f3. Hasonl\u00f3k\u00e9ppen lehet egy rosszul m\u0171k\u00f6d\u0151 webalkalmaz\u00e1s, amely v\u00e1laszra t\u00f6bb m\u00e1sodpercet ig\u00e9nyel, de sk\u00e1l\u00e1zhat\u00f3 tucatnyira, hogy kezeljen ezernyi egyidej\u0171 felhaszn\u00e1l\u00f3t. Ennek ellen\u00e9re a magas teljes\u00edtm\u00e9ny \u00e9s a sk\u00e1l\u00e1zhat\u00f3s\u00e1g kombin\u00e1ci\u00f3ja nagyon er\u0151s egy\u00fcttest alkot. A nagy teljes\u00edtm\u00e9ny\u0171 alkalmaz\u00e1sok \u00e1ltal\u00e1ban takar\u00e9kosan haszn\u00e1lj\u00e1k az er\u0151forr\u00e1sokat, \u00edgy hat\u00e9konyan szolg\u00e1lnak ki t\u00f6bb egyidej\u0171 felhaszn\u00e1l\u00f3t a szerveren, cs\u00f6kkentve a k\u00f6lts\u00e9geket.<\/p>\n<h1>CPU \u00e9s I\/O feladatok<\/h1>\n<p>\nV\u00e9g\u00fcl a sz\u00e1m\u00edt\u00e1sok sor\u00e1n mindig k\u00e9t lehets\u00e9ges feladat t\u00edpust tal\u00e1lunk: I\/O \u00e9s CPU. Az interneten kereszt\u00fcl \u00e9rkez\u0151 lek\u00e9rdez\u00e9sek (h\u00e1l\u00f3zati bemeneti-kimeneti), f\u00e1jlok kezel\u00e9se (h\u00e1l\u00f3zati \u00e9s lemezbemeneti-kimeneti), adatb\u00e1zissal val\u00f3 kommunik\u00e1ci\u00f3 (h\u00e1l\u00f3zati \u00e9s lemezbemeneti-kimeneti) \u2013 mindez I\/O tev\u00e9kenys\u00e9g. N\u00e9h\u00e1ny adatb\u00e1zis-lek\u00e9rdez\u00e9s kiss\u00e9 megterhelheti a CPU-t (rendez\u00e9s, egymilli\u00f3 eredm\u00e9ny \u00e1tlag\u00e1nak sz\u00e1m\u00edt\u00e1sa stb.). A legt\u00f6bb webalkalmaz\u00e1s maxim\u00e1lisan korl\u00e1tozva van az el\u00e9rhet\u0151 I\/O-ra, m\u00edg a processzor ritk\u00e1n m\u0171k\u00f6dik teljes kapacit\u00e1ssal. Ha azt l\u00e1tja, hogy egy I\/O feladat sok CPU-t haszn\u00e1l, akkor val\u00f3sz\u00edn\u0171leg a rossz alkalmaz\u00e1sarchitekt\u00fara jele. Ez azt jelentheti, hogy a CPU er\u0151forr\u00e1sai a folyamatok kezel\u00e9s\u00e9re \u00e9s a kontextusv\u00e1lt\u00e1sra ford\u00edt\u00f3dnak \u2013 ami nem t\u00fal hasznos. Ha valami olyasmit csin\u00e1l, mint p\u00e9ld\u00e1ul k\u00e9pfeldolgoz\u00e1s, audi\u00f3f\u00e1jlok \u00e1tkonvert\u00e1l\u00e1sa vagy g\u00e9pi tanul\u00e1s, akkor az alkalmaz\u00e1s er\u0151sebb CPU er\u0151forr\u00e1sokat ig\u00e9nyel. De a legt\u00f6bb alkalmaz\u00e1s eset\u00e9ben ez nem \u00edgy van.<\/p>\n<h1>R\u00e9szletesebben a szerverarchitekt\u00far\u00e1kr\u00f3l<\/h1>\n<p><\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/unixism.net\/2019\/04\/28\/linux-applications-performance-part-i-iterative-servers\/\">I. r\u00e9sz. Iterat\u00edv architekt\u00fara<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/unixism.net\/2019\/04\/28\/linux-applications-performance-part-ii-forking-servers\/\">II. r\u00e9sz. Fork-szerverek<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/unixism.net\/2019\/04\/28\/linux-applications-performance-part-iii-preforked-servers\/\">III. r\u00e9sz. Pr\u00e9-fork szerverek<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/unixism.net\/2019\/04\/28\/linux-applications-performance-part-iv-threaded-servers\/\">IV. r\u00e9sz. Folyamatv\u00e9grehajt\u00e1si szerverek<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/unixism.net\/2019\/04\/28\/linux-applications-performance-part-v-pre-threaded-servers\/\">V. r\u00e9sz. El\u0151re l\u00e9trehozott sz\u00e1lakkal rendelkez\u0151 szerverek<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/unixism.net\/2019\/04\/28\/linux-applications-performance-part-vi-polling-servers\/\">VI. r\u00e9sz. Polling architekt\u00fara<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/unixism.net\/2019\/04\/28\/linux-applications-performance-part-vii-epoll-servers\/\">VII. r\u00e9sz. Epoll architekt\u00fara<\/a><\/noindex><\/li>\n<\/ol>\n<p>Forr\u00e1s: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/455212\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u044b\u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u043e\u0432\u0441\u0435\u043c\u0435\u0441\u0442\u043d\u043e, \u0430 \u0441\u0440\u0435\u0434\u0438 \u0432\u0441\u0435\u0445 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043d\u044b\u0445 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432 \u043b\u044c\u0432\u0438\u043d\u0443\u044e \u0434\u043e\u043b\u044e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 HTTP. \u0418\u0437\u0443\u0447\u0430\u044f \u043d\u044e\u0430\u043d\u0441\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0443\u0434\u0435\u043b\u044f\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u0433\u0434\u0435 \u044d\u0442\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f. \u0420\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 (Dev) \u0438 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 (Ops) \u043b\u0438\u0448\u044c \u0443\u0445\u0443\u0434\u0448\u0430\u043b\u043e \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e. \u041d\u043e \u0441 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u044b DevOps \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u043d\u0435\u0441\u0442\u0438 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0437\u0430 \u0437\u0430\u043f\u0443\u0441\u043a \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0432 \u043e\u0431\u043b\u0430\u043a\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-35106","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u044b\u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u043e\u0432\u0441\u0435\u043c\u0435\u0441\u0442\u043d\u043e, \u0430 \u0441\u0440\u0435\u0434\u0438 \u0432\u0441\u0435\u0445 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043d\u044b\u0445 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432 \u043b\u044c\u0432\u0438\u043d\u0443\u044e \u0434\u043e\u043b\u044e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 HTTP.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/proizvoditelnost-setevyh-prilozhenij-linux-vvedenie\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 Linux. \u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u044b\u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u043e\u0432\u0441\u0435\u043c\u0435\u0441\u0442\u043d\u043e, \u0430 \u0441\u0440\u0435\u0434\u0438 \u0432\u0441\u0435\u0445 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043d\u044b\u0445 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432 \u043b\u044c\u0432\u0438\u043d\u0443\u044e \u0434\u043e\u043b\u044e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 HTTP.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/proizvoditelnost-setevyh-prilozhenij-linux-vvedenie\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:02:22+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:02:22+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Linux h\u00e1l\u00f3zati alkalmaz\u00e1sok teljes\u00edtm\u00e9nye. Bevezet\u00e9s | ProHoster","description":"A webalkalmaz\u00e1sokat manaps\u00e1g mindenhol haszn\u00e1lj\u00e1k, \u00e9s a sz\u00e1ll\u00edt\u00e1si protokollok k\u00f6z\u00f6tt az HTTP a legnagyobb r\u00e9szesed\u00e9ssel b\u00edr.","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/proizvoditelnost-setevyh-prilozhenij-linux-vvedenie","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 Linux. \u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 | ProHoster","og:description":"\u0412\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u044b\u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u043e\u0432\u0441\u0435\u043c\u0435\u0441\u0442\u043d\u043e, \u0430 \u0441\u0440\u0435\u0434\u0438 \u0432\u0441\u0435\u0445 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043d\u044b\u0445 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432 \u043b\u044c\u0432\u0438\u043d\u0443\u044e \u0434\u043e\u043b\u044e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 HTTP.","og:url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/proizvoditelnost-setevyh-prilozhenij-linux-vvedenie","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:02:22+00:00","article:modified_time":"2019-10-31T19:02:22+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"35106","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 21:51:33","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:09:55","updated":"2026-01-21 21:51:33","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/35106","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=35106"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/35106\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=35106"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=35106"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=35106"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}