{"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\/et\/blog\/administrirovanie\/proizvoditelnost-setevyh-prilozhenij-linux-vvedenie","title":{"rendered":"Linuxi v\u00f5rgu rakenduste j\u00f5udlus. Sissejuhatus.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Veebirakendused on t\u00e4nap\u00e4eval laialdaselt kasutusel ning HTTP h\u00f5lmab suure osa k\u00f5igist transpordiprotokollidest. Veebirakenduste arendamise n\u00fcansse uurides p\u00f6\u00f6rab enamik inimesi v\u00e4ga v\u00e4he t\u00e4helepanu operatsioonis\u00fcsteemile, kus need rakendused tegelikult t\u00f6\u00f6tavad. Arenduse (Dev) ja operaatori (Ops) eristamine on olukorda ainult halvendanud. Kuid DevOpsi kultuuri levikuga hakkavad arendajad v\u00f5tma vastutust oma rakenduste k\u00e4ivitamise eest pilves, seega on neile v\u00e4ga kasulik p\u00f5hjalikult tutvuda operatsioonis\u00fcsteemi tagumise poolega. See on eriti oluline, kui proovite s\u00fcsteemi seadistada tuhandete v\u00f5i k\u00fcmnete tuhandete samaaegsete \u00fchenduste jaoks.<\/p>\n<p>Veebiteenuste piirangud on v\u00e4ga sarnased teiste rakenduste piirangutega. Olgu need koormuse tasakaalustajad v\u00f5i andmebaasirakendused, k\u00f5igil neil rakendustel on sarnased probleemid k\u00f5rgv\u00f5imekuses keskkonnas. Nende p\u00f5hipiirangute ja nende \u00fcletamise meetodite m\u00f5istmine aitab \u00fcldiselt hinnata teie veebirakenduste j\u00f5udlust ja skaleeritavust.<\/p>\n<p>Ma kirjutan seda artiklite seeriat vastuseks noorte arendajate k\u00fcsimustele, kes soovivad saada h\u00e4sti informeeritud s\u00fcsteemi arhitektideks. Pole v\u00f5imalik selgelt m\u00f5ista Linuxi rakenduste optimeerimise meetodeid, ilma et sukelduda alusp\u00f5him\u00f5tetesse, kuidas need t\u00f6\u00f6tavad operatsioonis\u00fcsteemi tasandil. Kuigi rakenduste t\u00fc\u00fcpe on palju, tahan selles ts\u00fcklis uurida v\u00f5rgurakendusi, mitte t\u00f6\u00f6lauarakendusi nagu brauserid v\u00f5i tekstiredaktorid. See materjal on suunatud arendajatele ja arhitektidele, kes soovivad m\u00f5ista, kuidas Linuxi v\u00f5i Unix rakendused t\u00f6\u00f6tavad ja kuidas neid k\u00f5rge j\u00f5udluse saavutamiseks struktureerida.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nLinux on <i>serveri<\/i> operatsioonis\u00fcsteem, ning enamasti t\u00f6\u00f6tavad teie rakendused just sellel OS-il. Kuigi ma r\u00e4\u00e4gin 'Linuxist', v\u00f5ite enamiku ajast kindlalt eeldada, et m\u00f5eldakse k\u00f5iki Unixiga sarnaseid operatsioonis\u00fcsteeme tervikuna. Siiski ei ole ma kaasasolevat koodi testinud teistes s\u00fcsteemides. Seega, kui teid huvitab FreeBSD v\u00f5i OpenBSD, v\u00f5ivad tulemused erineda. Kui proovin midagi Linuxiga seotud, siis mainin seda.<\/p>\n<p>Kuigi saate omandatud teadmisi kasutada rakenduse loomiseks nullist ja see v\u00f5ib olla suurep\u00e4raselt optimeeritud, on parem seda mitte teha. Kui kirjutate oma organisatsiooni \u00e4ri rakenduse jaoks uue veebiserveri C v\u00f5i C++ keeles, v\u00f5ib see olla teie viimane t\u00f6\u00f6p\u00e4ev. Siiski aitab nende rakenduste struktuuri tundmine valida juba olemasolevaid programme. Saate v\u00f5rrelda protsessidele p\u00f5hinevaid s\u00fcsteeme, voogude ja s\u00fcndmuste p\u00f5hiseid s\u00fcsteeme. Te m\u00f5istate ja hindate, miks Nginx t\u00f6\u00f6tab paremini kui Apache httpd ning miks Tornado p\u00f5hinev Python rakendus suudab teenindada rohkem kasutajaid v\u00f5rreldes Django p\u00f5hise Python rakendusega.<\/p>\n<h1>ZeroHTTPd: \u00f5ppimist\u00f6\u00f6riist<\/h1>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/shuveb\/zerohttpd\">ZeroHTTPd<\/a><\/noindex>\u00a0\u2014 veebiserver, mille ma kirjutasin nullist C keeles kui \u00f5ppevahend. Sellel ei ole v\u00e4liseid s\u00f5ltuvusi, sealhulgas juurdep\u00e4\u00e4su Redis'ile. K\u00e4ivitame oma Redis protseduurid. Lisateave allpool.<\/p>\n<p>Kuigi me saaksime kaua arutada teooriat, pole midagi paremat kui koodi kirjutamine, selle k\u00e4ivitamine ja k\u00f5ikide serveri arhitektuuride omavaheline v\u00f5rdlemine. See on k\u00f5ige ilmsem meetod. Seet\u00f5ttu kirjutame lihtsa veebiserveri ZeroHTTPd, rakendades iga mudelit: protsesside, voogude ja s\u00fcndmuste p\u00f5hjal. Kontrollime igat nende serverit ja vaatame, kuidas nad \u00fcksteisega v\u00f5rreldes toimivad. ZeroHTTPd on rakendatud \u00fches C-failis. S\u00fcndmuste p\u00f5hise serveri koosseis sisaldab <noindex><a rel=\"nofollow\" href=\"https:\/\/troydhanson.github.io\/uthash\/\">uthash<\/a><\/noindex>, suurep\u00e4rane hash-tabeli teostus, mis tuleb \u00fches pealkirjafailis. Muudel juhtudel ei ole mingeid s\u00f5ltuvusi, et projekti mitte keerulisemaks muuta.<\/p>\n<p>Koodis on palju kommentaare, et aidata m\u00f5ista. Tulles v\u00e4lismaailmast, on ZeroHTTPd ka lihtne veebiarenduse raamistik. Selle funktsionaalsus on piiratud, kuid see suudab edastada staatilisi faile ja v\u00e4ga lihtsaid \u201ed\u00fcnaamilisi\u201c lehti. Pean \u00fctlema, et ZeroHTTPd sobib h\u00e4sti \u00f5ppimiseks, kuidas luua k\u00f5rge j\u00f5udlusega Linuxi rakendusi. Suures plaanis ootavad enamik veebiteenuseid p\u00e4ringute esitamist, kontrollimist ja t\u00f6\u00f6tlemist. Just seda teebki ZeroHTTPd. See on \u00f5ppimist\u00f6\u00f6riist, mitte tootmisvahend. See ei ole tugev vigade t\u00f6\u00f6tlemisel ja t\u00f5en\u00e4oliselt ei uhkusta see parimate turvapraktikatega (jah, ma kasutasin <code>strcpy<\/code>) v\u00f5i keerukate keelte trikiga C. Kuid ma loodan, et ta teeb oma \u00fclesannet h\u00e4sti.<\/p>\n<p><img decoding=\"async\" alt=\"Linuxi v\u00f5rgu rakenduste j\u00f5udlus. Sissejuhatus.\" src=\"\/wp-content\/uploads\/33fd0a5353667001523d5d4c8ada9ecf.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>ZeroHTTPd eelolev leht. See suudab edastada erinevat t\u00fc\u00fcpi faile, sealhulgas pilte.<\/i><\/p>\n<h1>K\u00fclastuste raamat rakendus<\/h1>\n<p>\nKaasaegsed veebirakendused ei piirduma lihtsalt staatiliste failidega. Neil on keerulised suhted erinevate andmebaaside, vahem\u00e4cachede jne. Seet\u00f5ttu loome lihtsa veebirakenduse nimega \u201eK\u00fclastuste raamat\u201c, kus k\u00fclastajad j\u00e4tavad oma nimede all s\u00f5numeid. K\u00fclastuste raamatus salvestatakse varem j\u00e4etud s\u00f5numid. Lehe allosas on samuti k\u00fclastajate loend.<\/p>\n<p><img decoding=\"async\" alt=\"Linuxi v\u00f5rgu rakenduste j\u00f5udlus. Sissejuhatus.\" src=\"\/wp-content\/uploads\/ed8e828e8567d3d114875520988742d7.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>ZeroHTTPd K\u00fclastuste raamat veebirakendus<\/i><\/p>\n<p>K\u00fclastajate loend ja k\u00fclastuste raamatu s\u00f5numid salvestatakse Redis. Redisiga suhtlemiseks on rakendatud meie enda protseduurid, need ei s\u00f5ltu v\u00e4listest raamatukogudest. Ma ei ole suur s\u00f5ber, kes kirjutab koju tellitud koodi, kui olemas on avalikud ja h\u00e4sti testitud lahendused. Kuid ZeroHTTPdi eesm\u00e4rk on \u00f5ppida Linuxi j\u00f5udlust ja juurdep\u00e4\u00e4su v\u00e4listest teenustest, samas kui HTTP-p\u00e4ringute haldamine m\u00f5jutab t\u00f5siselt j\u00f5udlust. Me peame saama t\u00e4ieliku kontrolli Redisiga suhtlemise \u00fcle meie serveri arhitektuurides. \u00dches arhitektuuris kasutame blokeerivaid kutsunge, teistes - s\u00fcndmuste p\u00f5hiseid protseduure. V\u00e4line Redis klientraamatukogu ei anna sellist kontrolli. Lisaks t\u00e4idab meie v\u00e4ike Redis klient vaid m\u00f5nda funktsiooni (saamine, seadistamine ja v\u00f5tme suurendamine; saamine ja lisamine massiivi). Lisaks sellele on Redis protokoll \u00e4\u00e4rmiselt elegantne ja lihtne. Selle \u00f5ppimiseks ei pea isegi erilist vaeva n\u00e4gema. Fakt, et kogu t\u00f6\u00f6, mida protokoll t\u00e4idab, on umbkaudu sadades l\u00e4htekoodiread, n\u00e4itab, kui h\u00e4sti see on l\u00e4bi m\u00f5eldud.<\/p>\n<p>J\u00e4rgmises joonises on n\u00e4idatud rakenduse tegevust, kui klient (brauser) teeb taotluse <code>\/guestbookURL<\/code>.<\/p>\n<p><img decoding=\"async\" alt=\"Linuxi v\u00f5rgu rakenduste j\u00f5udlus. Sissejuhatus.\" src=\"\/wp-content\/uploads\/5c5e6740419384b7232aeead95db491b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>K\u00fclastuste raamat rakenduse t\u00f6\u00f6mehhanism<\/i><\/p>\n<p>Kui tuleb v\u00e4lja anda k\u00fclalisraamatuleht, toimub \u00fcks s\u00fcsteemikutsung faili s\u00fcsteemile, et lugeda mall m\u00e4lu ning kolm v\u00f5rgu kutsungit Redis\u2019esse. Mallifail sisaldab suure osa HTML-i sisust lehe jaoks, mis on \u00fclaltoodud ekraanipildil. Seal on ka spetsiaalsed kohandajad d\u00fcnaamilise sisu osa jaoks: postitused ja k\u00fclastajate loendur. Saame need Redis'est, sisestame lehele ja edastame kliendile t\u00e4ielikult vormistatud sisu. Kolmandast Redis'e kutsungist saab loobuda, kuna Redis tagastab v\u00f5tme uue v\u00e4\u00e4rtuse ka siis, kui seda suurendame. Siiski on meie s\u00fcndmustep\u00f5hise as\u00fcnkroonse arhitektuuri jaoks palju v\u00f5rgu kutseid hea katse eesm\u00e4rkidel. Seega loobume Redis'e tagastatud v\u00e4\u00e4rtusest k\u00fclastajate arvu kohta ja k\u00fcsime selle eraldi kutsega.<\/p>\n<h1>ZeroHTTPd serveri arhitektuurid<\/h1>\n<p>\nEhime seitse versiooni ZeroHTTPd\u2019st, millel on sama funktsionaalsus, kuid erinevad arhitektuurid:<\/p>\n<ul>\n<li>Iteratiivne\n<\/li>\n<li>Fork server (\u00fcks t\u00fctart\u00f6\u00f6tlus p\u00e4ringu kohta)\n<\/li>\n<li>Pre-fork server (protsesside eelne kogumine)\n<\/li>\n<li>Server t\u00e4itmisniidiga (\u00fcks niit p\u00e4ringu kohta)\n<\/li>\n<li>Server eelnevalt loodud niitidega\n<\/li>\n<li>Arhitektuur, mis p\u00f5hineb <code>poll()<\/code>\n<\/li>\n<li>Arhitektuur, mis p\u00f5hineb <code>epoll<\/code><\/li>\n<\/ul>\n<p>\nK\u00e4ime iga arhitektuuri j\u00f5udlust HTTP-p\u00e4ringutega koormates. Kuid k\u00f5rge paralleelsuse arhitektuuride v\u00f5rdlemisel suureneb p\u00e4ringute arv. Testime kolm korda ja arvutame keskmise.<\/p>\n<h1>Testimise metodologia<\/h1>\n<p>\n<img decoding=\"async\" alt=\"Linuxi v\u00f5rgu rakenduste j\u00f5udlus. Sissejuhatus.\" src=\"\/wp-content\/uploads\/aa4f337b6e90fa032fbef5374fac8f53.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>ZeroHTTPd koormustestimise seadmed<\/i> <\/p>\n<p>Oluline on, et testimise ajal ei t\u00f6\u00f6taks k\u00f5ik komponendid \u00fches masinas. Sel juhul kannab operatsioonis\u00fcsteem lisakoormust ajastamisel, kuna komponendid konkureerivad CPU p\u00e4rast. Operatsioonis\u00fcsteemi koormuse m\u00f5\u00f5tmine igas valitud serveri arhitektuuris on see harjutuse \u00fcks olulisemaid eesm\u00e4rke. Liigsete muutujate lisamine kahjustab protsessi. Seega t\u00f6\u00f6tab \u00fclaltoodud seade k\u00f5ige paremini.<\/p>\n<h3>Mida iga\u00fcks neist serveritest teeb<\/h3>\n<p><\/p>\n<ul>\n<li>load.unixism.net: siin k\u00e4ivitame <code>ab<\/code>, Apache Benchmarki t\u00f6\u00f6riista. See genereerib koormuse, mis on vajalik meie serveri arhitektuuride testimiseks.\n<\/li>\n<li>nginx.unixism.net: m\u00f5nikord soovime k\u00e4ivitada rohkem kui \u00fche serveriprogrammi koopia. Selleks t\u00f6\u00f6tab Nginx server koos vastavate seadistustega koormuse tasakaalustajana, mis tuleb <i>ab<\/i> meie serveriprotsessidesse.\n<\/li>\n<li>zerohttpd.unixism.net: siin k\u00e4ivitame meie serveriprogrammid seitsmes erinevas arhitektuuris, \u00fchte korraga.\n<\/li>\n<li>redis.unixism.net: sellel serveril t\u00f6\u00f6tab Redis deemon, kus talletatakse k\u00fclalisteraamat ja k\u00fclastajate arvesti.<\/li>\n<\/ul>\n<p>\nKogu serverid t\u00f6\u00f6tavad \u00fches protsessori tuumas. Idee on hinnata igas arhitektuuris maksimaalset j\u00f5udlust. Kuna k\u00f5ik serveriprogrammid testitakse samal riistvaral, on see nende v\u00f5rdlemise baas. Minu testimist seadistus koosneb Digital Ocean'ilt renditud virtuaalserveritest.<\/p>\n<h3>Mida me m\u00f5\u00f5dame?<\/h3>\n<p>\nErinevaid n\u00e4itajaid on v\u00f5imalik m\u00f5\u00f5ta. Hinnatakse iga arhitektuuri j\u00f5udlust antud konfiguratsioonis, koormates servereid p\u00e4ringutega erinevatel paralleelsuse tasemetel: koormus kasvab 20-st kuni 15 000 samaaegse kasutajani.<\/p>\n<h1>Testi tulemused<\/h1>\n<p>\nJ\u00e4rgmises diagrammis on kujutatud serverite j\u00f5udlust erinevates arhitektuurides erinevatel paralleelsuse tasemetel. Y-teljel on p\u00e4ringud sekundis, X-teljel on paralleelsed \u00fchendused.<\/p>\n<p><img decoding=\"async\" alt=\"Linuxi v\u00f5rgu rakenduste j\u00f5udlus. Sissejuhatus.\" src=\"\/wp-content\/uploads\/3415bcfb66503152d644130f68bd19da.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Linuxi v\u00f5rgu rakenduste j\u00f5udlus. Sissejuhatus.\" src=\"\/wp-content\/uploads\/ba457b671eb758f3226e0eeafaadc6aa.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Linuxi v\u00f5rgu rakenduste j\u00f5udlus. Sissejuhatus.\" src=\"\/wp-content\/uploads\/aea06856d61d4d4bdda9814c53a28d4a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAllpool on tabel tulemustega.<\/p>\n<p> p\u00e4ringud sekundis <\/p>\n<p><strong>paralleelsus<\/strong><br \/>\n<strong>iteratiivne<\/strong><br \/>\n<strong>fork<\/strong><br \/>\n<strong>ennehargne<\/strong><br \/>\n<strong>sugemetoodika<\/strong><br \/>\n<strong>enne-sugemetoodika<\/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 \/>\nsuurem hajuvus<br \/>\n2138<\/p>\n<p>5000<br \/>\n\u2013<br \/>\nsuurem hajuvus<br \/>\n1600<br \/>\n1100<br \/>\n2519<br \/>\n\u2013<br \/>\n2235<\/p>\n<p>8000<br \/>\n\u2013<br \/>\n\u2013<br \/>\n1200<br \/>\nsuurem hajuvus<br \/>\n2451<br \/>\n\u2013<br \/>\n2100<\/p>\n<p>10\u00a0000<br \/>\n\u2013<br \/>\n\u2013<br \/>\nsuurem hajuvus<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>\nDiagrammist ja tabelist n\u00e4htub, et \u00fcle 8000 samaaegse p\u00e4ringu korral j\u00e4\u00e4b meil alles vaid kaks m\u00e4ngijat: ennehargne ja epoll. Koormuse kasvades t\u00f6\u00f6tab poll-p\u00f5hine server halvemini kui sugemetoodika. Enehargne arhitektuur on epollile v\u00e4\u00e4riliseks konkurendiks: see t\u00f5estab, kui h\u00e4sti Linuxi tuum suudab planeerida suurtes kogustes niite.<\/p>\n<h1>ZeroHTTPd l\u00e4htekood<\/h1>\n<p>\nZeroHTTPd l\u00e4htekood <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/shuveb\/zerohttpd\">siin<\/a><\/noindex>. Iga arhitektuuri jaoks eraldi kataloog.<\/p>\n<pre>ZeroHTTPd\n\u2502\n\u251c\u2500\u2500 01_iteratiivne\n\u2502   \u251c\u2500\u2500 main.c\n\u251c\u2500\u2500 02_hargnev\n\u2502   \u251c\u2500\u2500 main.c\n\u251c\u2500\u2500 03_ennehargnev\n\u2502   \u251c\u2500\u2500 main.c\n\u251c\u2500\u2500 04_sugemetoodika\n\u2502   \u251c\u2500\u2500 main.c\n\u251c\u2500\u2500 05_enne-sugemetoodika\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>\nLisaks seitsmele kaustale k\u00f5igi arhitektuuride jaoks on \u00fclemise taseme kataloogis veel kaks: public ja templates. Esimeses asub fail index.html ja pilt esimeselt ekraanipildilt. Siia saab paigutada teisi faile ja kaustu, ning ZeroHTTPd peab probleemideta v\u00e4lja andma need staatilised failid. Kui brauseri teek vastab public kaustas olevale teele, otsib ZeroHTTPd sellest kataloogist faili index.html. K\u00fclastajate raamatu sisu genereeritakse d\u00fcnaamiliselt. Sellel on ainult avaleht ja selle sisu p\u00f5hineb failil 'templates\/guestbook\/index.html'. ZeroHTTPd-s on lihtne lisada d\u00fcnaamilisi lehti laiendamiseks. Idee on see, et kasutajad saavad selle katalooge lisada \u0161abloone ja laiendada ZeroHTTPd-d vastavalt vajadusele.<\/p>\n<p>Seitsme serveri kokkupanekuks k\u00e4ivitage <code>make all<\/code> \u00fclemise kataloogi sees \u2014 ja k\u00f5ik buildid ilmuvad sellesse kataloogi. T\u00e4idetavad failid otsivad public ja templates kaustu selles kataloogis, kust need k\u00e4ivitatakse.<\/p>\n<h1>Linux API<\/h1>\n<p>\nSelle artiklite seeria teabe m\u00f5istmiseks ei pea Linux API-s v\u00e4ga h\u00e4sti orienteeruma. Soovitan siiski lugeda selle kohta rohkem, veebis on palju abimaterjale. Kuigi me k\u00e4sitleme mitmeid Linux API kategooriaid, keskendub meie t\u00e4helepanu peamiselt protsessidele, l\u00f5imele, s\u00fcndmustele ja v\u00f5rgu kihtidele. Peale raamatute ja artiklite Linux API-st soovitan ka lugeda s\u00fcsteemik\u00f5nede ja kasutatavate teekide funktsioonide manasid.<\/p>\n<h1>J\u00f5udlus ja skaleeritavus<\/h1>\n<p>\n\u00dcks m\u00e4rkus j\u00f5udluse ja skaleeritavuse kohta. Teoreetiliselt pole nende vahel mingit seost. Teil v\u00f5ib olla veebiteenus, mis t\u00f6\u00f6tab v\u00e4ga h\u00e4sti, vastusaegadega m\u00f5ne millisekundi jooksul, kuid see ei skaleeru \u00fcldse. Samuti v\u00f5ib olla halvasti toimiv veebirakendus, mis vajab vastamiseks mitu sekundit, kuid see on skaleeritav k\u00fcmnete suhtes, et hallata k\u00fcmneid tuhandeid samaaegseid kasutajaid. Teiselt poolt, k\u00f5rge j\u00f5udluse ja skaleeritavuse kombinatsioon on v\u00e4ga v\u00f5imas. K\u00f5rge j\u00f5udlusega rakendused kasutavad ressursse \u00fcldiselt s\u00e4\u00e4stlikult ja seega teenindavad t\u00f5husalt rohkem samaaegseid kasutajaid serveris, v\u00e4hendades kulusid.<\/p>\n<h1>CPU ja I\/O \u00fclesanded<\/h1>\n<p>\nL\u00f5puks on arvutustes alati kaks v\u00f5imalikku \u00fclesannet: I\/O ja CPU jaoks. Interneti kaudu p\u00e4ringute saamine (v\u00f5rgu sisend-v\u00e4ljund), failide haldamine (v\u00f5rgu ja kettasisend-v\u00e4ljund), andmebaasiga suhtlemine (v\u00f5rgu ja kettasisend-v\u00e4ljund) - k\u00f5ik need on I\/O tegevused. M\u00f5ned andmebaasi p\u00e4ringud v\u00f5ivad veidi koormata CPU-d (j\u00e4rjestamine, miljoni tulemuse keskmise arvutamine jne). Enamik veebirakendusi on piiratud maksimaalse v\u00f5imaliku I\/O-ga, samas kui protsessorit harva kasutatakse t\u00e4ielikult. Kui m\u00e4rkate, et m\u00f5nes sisend-v\u00e4ljundi \u00fclesandes kasutatakse palju CPU-d, on t\u00f5en\u00e4oliselt tegemist halva rakenduse arhitektuuri tunnusega. See v\u00f5ib t\u00e4hendada, et CPU ressursid kuluvad protsesside juhtimisele ja konteksti vahetamisele - ja see pole kuigi kasulik. Kui teete midagi nagu pildit\u00f6\u00f6tlus, helifailide konverteerimine v\u00f5i masin\u00f5pe, siis n\u00f5uab rakendus v\u00f5imsaid CPU ressursse. Kuid enamik rakendusi ei n\u00f5ua seda.<\/p>\n<h1>\u00dcksikasjalikumalt serveri arhitektuuridest<\/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\/\">Osa I. Iteratiivne arhitektuur<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/unixism.net\/2019\/04\/28\/linux-applications-performance-part-ii-forking-servers\/\">Osa II. Fork-serverid<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/unixism.net\/2019\/04\/28\/linux-applications-performance-part-iii-preforked-servers\/\">Osa III. Pre-fork serverid<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/unixism.net\/2019\/04\/28\/linux-applications-performance-part-iv-threaded-servers\/\">Osa IV. Serverid t\u00e4itmisvoogudega<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/unixism.net\/2019\/04\/28\/linux-applications-performance-part-v-pre-threaded-servers\/\">Osa V. Serverid eelnevalt loodud voogudega<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/unixism.net\/2019\/04\/28\/linux-applications-performance-part-vi-polling-servers\/\">Osa VI. Poll-p\u00f5hine arhitektuur<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/unixism.net\/2019\/04\/28\/linux-applications-performance-part-vii-epoll-servers\/\">Osa VII. epoll-p\u00f5hine arhitektuur<\/a><\/noindex><\/li>\n<\/ol>\n<p>Allikas: <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.1.1 - 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\/et\/blog\/administrirovanie\/proizvoditelnost-setevyh-prilozhenij-linux-vvedenie\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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\/et\/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\udd47Linuxi v\u00f5rgu rakenduste j\u00f5udlus. Sissejuhatus | ProHoster","description":"Veebirakendusi kasutatakse n\u00fc\u00fcd igas kohas, samal ajal h\u00f5ivab HTTP suure osa k\u00f5ikidest transpordiprotokollidest.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/proizvoditelnost-setevyh-prilozhenij-linux-vvedenie","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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\/et\/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\/et\/wp-json\/wp\/v2\/posts\/35106","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=35106"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/35106\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=35106"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=35106"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=35106"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}