{"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\/cs\/blog\/administrirovanie\/proizvoditelnost-setevyh-prilozhenij-linux-vvedenie","title":{"rendered":"V\u00fdkon s\u00ed\u0165ov\u00fdch aplikac\u00ed Linux. \u00davod","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Webov\u00e9 aplikace jsou dnes pou\u017e\u00edv\u00e1ny v\u0161ude a mezi v\u0161emi transportn\u00edmi protokoly zauj\u00edm\u00e1 HTTP velkou \u010d\u00e1st. P\u0159i studiu nuanc\u00ed v\u00fdvoje webov\u00fdch aplikac\u00ed v\u011bt\u0161ina v\u011bnuje velmi m\u00e1lo pozornosti opera\u010dn\u00edmu syst\u00e9mu, na kter\u00e9m se tyto aplikace skute\u010dn\u011b spou\u0161t\u011bj\u00ed. Rozd\u011blen\u00ed v\u00fdvoje (Dev) a provozu (Ops) situaci pouze zhor\u0161ovalo. S roz\u0161i\u0159ov\u00e1n\u00edm kultury DevOps v\u0161ak za\u010d\u00ednaj\u00ed v\u00fdvoj\u00e1\u0159i n\u00e9st odpov\u011bdnost za spu\u0161t\u011bn\u00ed sv\u00fdch aplikac\u00ed v cloudu, a proto je pro n\u011b velmi u\u017eite\u010dn\u00e9 d\u016fkladn\u011b se sezn\u00e1mit s backendem opera\u010dn\u00edho syst\u00e9mu. To je obzvl\u00e1\u0161t\u011b u\u017eite\u010dn\u00e9, pokud se sna\u017e\u00edte nasadit syst\u00e9m pro tis\u00edce nebo des\u00edtky tis\u00edc soub\u011b\u017en\u00fdch p\u0159ipojen\u00ed.<\/p>\n<p>Omezen\u00ed ve webov\u00fdch slu\u017eb\u00e1ch jsou velmi podobn\u00e1 omezen\u00edm v jin\u00fdch aplikac\u00edch. A\u0165 u\u017e jde o load balancery nebo servery DB, v\u0161echna tato aplika\u010dn\u00ed \u0159e\u0161en\u00ed maj\u00ed podobn\u00e9 probl\u00e9my v prost\u0159ed\u00ed s vysok\u00fdm v\u00fdkonem. Pochopen\u00ed t\u011bchto z\u00e1kladn\u00edch omezen\u00ed a zp\u016fsob\u016f, jak je p\u0159ekonat, umo\u017en\u00ed celkov\u011b vyhodnotit v\u00fdkon a \u0161k\u00e1lovatelnost va\u0161ich webov\u00fdch aplikac\u00ed.<\/p>\n<p>P\u00ed\u0161u tuto s\u00e9rii \u010dl\u00e1nk\u016f jako reakci na ot\u00e1zky mlad\u00fdch v\u00fdvoj\u00e1\u0159\u016f, kte\u0159\u00ed cht\u011bj\u00ed b\u00fdt dob\u0159e informovan\u00fdmi syst\u00e9mov\u00fdmi architekty. Nen\u00ed mo\u017en\u00e9 jasn\u011b pochopit metody optimalizace aplikac\u00ed Linux bez pono\u0159en\u00ed se do z\u00e1klad\u016f, jak funguj\u00ed na \u00farovni opera\u010dn\u00edho syst\u00e9mu. I kdy\u017e existuje mnoho typ\u016f aplikac\u00ed, v t\u00e9to s\u00e9rii chci prozkoumat s\u00ed\u0165ov\u00e9 aplikace, nikoli desktopov\u00e9, jako je prohl\u00ed\u017ee\u010d nebo textov\u00fd editor. Tento materi\u00e1l je ur\u010den pro v\u00fdvoj\u00e1\u0159e a architekty, kte\u0159\u00ed cht\u011bj\u00ed pochopit, jak programy Linux nebo Unix funguj\u00ed a jak je strukturovat pro vysok\u00fd v\u00fdkon.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nLinux je <i>serverov\u00fd<\/i> opera\u010dn\u00ed syst\u00e9m a v\u011bt\u0161ina va\u0161ich aplikac\u00ed b\u011b\u017e\u00ed na tomto OS. A\u010dkoli \u0159\u00edk\u00e1m \"Linux\", v\u011bt\u0161inu \u010dasu m\u016f\u017eete s jistotou p\u0159edpokl\u00e1dat, \u017ee m\u00e1m na mysli v\u0161echny unixov\u00e9 podobn\u00e9 opera\u010dn\u00ed syst\u00e9my jako celek. Nicm\u00e9n\u011b, nesledoval jsem doprovodn\u00fd k\u00f3d na jin\u00fdch syst\u00e9mech. Tak\u017ee pokud v\u00e1s zaj\u00edm\u00e1 FreeBSD nebo OpenBSD, v\u00fdsledky se mohou li\u0161it. Kdy\u017e zkou\u0161\u00edm n\u011bco specifick\u00e9ho pro Linux, tak to uv\u00e1d\u00edm.<\/p>\n<p>I kdy\u017e m\u016f\u017eete vyu\u017e\u00edt nabyt\u00e9 znalosti k vytvo\u0159en\u00ed aplikace od nuly a ta bude skv\u011ble optimalizovan\u00e1, je lep\u0161\u00ed to ned\u011blat. Pokud nap\u00ed\u0161ete nov\u00fd webov\u00fd server v C nebo C++ pro obchodn\u00ed aplikaci va\u0161\u00ed organizace, pravd\u011bpodobn\u011b to bude v\u00e1\u0161 posledn\u00ed den v pr\u00e1ci. Nicm\u00e9n\u011b znalost struktury t\u011bchto aplikac\u00ed pom\u016f\u017ee p\u0159i v\u00fdb\u011bru ji\u017e existuj\u00edc\u00edch program\u016f. Budete moci porovn\u00e1vat syst\u00e9my zalo\u017een\u00e9 na procesech se syst\u00e9my zalo\u017een\u00fdmi na vl\u00e1knech, stejn\u011b jako na ud\u00e1lostech. Pochop\u00edte a ocen\u00edte, pro\u010d Nginx funguje l\u00e9pe ne\u017e Apache httpd, a pro\u010d aplikace Python zalo\u017een\u00e1 na Tornadu m\u016f\u017ee obsluhovat v\u00edce u\u017eivatel\u016f ve srovn\u00e1n\u00ed s aplikac\u00ed Python na z\u00e1klad\u011b Django.<\/p>\n<h1>ZeroHTTPd: vzd\u011bl\u00e1vac\u00ed n\u00e1stroj<\/h1>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/shuveb\/zerohttpd\">ZeroHTTPd<\/a><\/noindex>\u00a0je webov\u00fd server, kter\u00fd jsem napsal od nuly v C jako vzd\u011bl\u00e1vac\u00ed n\u00e1stroj. Nem\u00e1 \u017e\u00e1dn\u00e9 extern\u00ed z\u00e1vislosti, v\u010detn\u011b p\u0159\u00edstupu k Redis. Spou\u0161t\u00edme vlastn\u00ed procedury Redis. Podrobnosti viz n\u00ed\u017ee.<\/p>\n<p>I kdy\u017e bychom mohli dlouho diskutovat o teorii, nen\u00ed nic lep\u0161\u00edho ne\u017e napsat k\u00f3d, spustit ho a vz\u00e1jemn\u011b porovnat v\u0161echny architektury server\u016f. To je nejp\u0159ehledn\u011bj\u0161\u00ed metoda. Proto budeme ps\u00e1t jednoduch\u00fd webov\u00fd server ZeroHTTPd, vyu\u017e\u00edvaj\u00edc\u00ed ka\u017ed\u00fd model: zalo\u017een\u00fd na procesech, vl\u00e1knech a ud\u00e1lostech. Ov\u011b\u0159\u00edme ka\u017ed\u00fd z t\u011bchto server\u016f a pod\u00edv\u00e1me se, jak spolupracuj\u00ed. ZeroHTTPd je realizov\u00e1n v jednom souboru C. Sou\u010d\u00e1st\u00ed serveru zalo\u017een\u00e9ho na ud\u00e1lostech je <noindex><a rel=\"nofollow\" href=\"https:\/\/troydhanson.github.io\/uthash\/\">uthash<\/a><\/noindex>, skv\u011bl\u00e1 implementace hash tabulky, kter\u00e1 se dod\u00e1v\u00e1 v jednom hlavi\u010dkov\u00e9m souboru. V ostatn\u00edch p\u0159\u00edpadech \u017e\u00e1dn\u00e9 z\u00e1vislosti nejsou, aby se projekt jejich nekomplikoval.<\/p>\n<p>V k\u00f3du je spousta koment\u00e1\u0159\u016f, kter\u00e9 pom\u00e1haj\u00ed se zorientovat. Jako jednoduch\u00fd webov\u00fd server v n\u011bkolika \u0159\u00e1dc\u00edch k\u00f3du, ZeroHTTPd je tak\u00e9 minim\u00e1ln\u00ed r\u00e1mec pro webov\u00fd v\u00fdvoj. M\u00e1 omezenou funk\u010dnost, ale dok\u00e1\u017ee serv\u00edrovat statick\u00e9 soubory a velmi jednoduch\u00e9 \u201edynamick\u00e9\u201c str\u00e1nky. Mus\u00edm \u0159\u00edct, \u017ee ZeroHTTPd je dob\u0159e uzp\u016fsoben pro u\u010den\u00ed, jak vytv\u00e1\u0159et vysoce v\u00fdkonn\u00e9 aplikace pro Linux. V podstat\u011b v\u011bt\u0161ina webov\u00fdch slu\u017eeb \u010dek\u00e1 na po\u017eadavky, kontroluje je a zpracov\u00e1v\u00e1. P\u0159esn\u011b to bude ZeroHTTPd d\u011blat. Je to n\u00e1stroj pro u\u010den\u00ed, nikoli pro produk\u010dn\u00ed prost\u0159ed\u00ed. Nen\u00ed siln\u00fd v zpracov\u00e1n\u00ed chyb a pravd\u011bpodobn\u011b se nem\u016f\u017ee pochlubit nejlep\u0161\u00edmi bezpe\u010dnostn\u00edmi praktikami (oh ano, pou\u017eil jsem <code>strcpy<\/code>) nebo slo\u017eit\u00fdmi triky jazyka C. Ale douf\u00e1m, \u017ee si se svou \u00falohou porad\u00ed dob\u0159e.<\/p>\n<p><img decoding=\"async\" alt=\"V\u00fdkon s\u00ed\u0165ov\u00fdch aplikac\u00ed Linux. \u00davod\" src=\"\/wp-content\/uploads\/33fd0a5353667001523d5d4c8ada9ecf.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Domovsk\u00e1 str\u00e1nka ZeroHTTPd. M\u016f\u017ee poskytovat r\u016fzn\u00e9 typy soubor\u016f, v\u010detn\u011b obr\u00e1zk\u016f<\/i><\/p>\n<h1>Aplikace knihy host\u016f<\/h1>\n<p>\nModern\u00ed webov\u00e9 aplikace obvykle nejsou omezeny na statick\u00e9 soubory. Maj\u00ed slo\u017eitou interakci s r\u016fzn\u00fdmi datab\u00e1zemi, cache atd. Proto vytvo\u0159\u00edme jednoduchou webovou aplikaci s n\u00e1zvem \u201eKniha host\u016f\u201c, kde n\u00e1v\u0161t\u011bvn\u00edci zanech\u00e1vaj\u00ed z\u00e1znamy pod sv\u00fdmi jm\u00e9ny. V knize host\u016f se ukl\u00e1daj\u00ed p\u0159edchoz\u00ed z\u00e1znamy. Na doln\u00ed \u010d\u00e1sti str\u00e1nky je tak\u00e9 po\u010ditadlo n\u00e1v\u0161t\u011bvn\u00edk\u016f.<\/p>\n<p><img decoding=\"async\" alt=\"V\u00fdkon s\u00ed\u0165ov\u00fdch aplikac\u00ed Linux. \u00davod\" src=\"\/wp-content\/uploads\/ed8e828e8567d3d114875520988742d7.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Webov\u00e1 aplikace \u201eKniha host\u016f\u201c ZeroHTTPd<\/i><\/p>\n<p>Po\u010ditadlo n\u00e1v\u0161t\u011bvn\u00edk\u016f a z\u00e1znamy knihy host\u016f jsou ulo\u017eeny v Redis. Pro komunikaci s Redis jsme implementovali vlastn\u00ed procedury, kter\u00e9 nez\u00e1vis\u00ed na extern\u00ed knihovn\u011b. Nejsem velk\u00fd fanou\u0161ek pou\u017e\u00edv\u00e1n\u00ed dom\u00e1c\u00edho k\u00f3du, kdy\u017e existuj\u00ed ve\u0159ejn\u011b dostupn\u00e1 a dob\u0159e testovan\u00e1 \u0159e\u0161en\u00ed. Ale c\u00edlem ZeroHTTPd je prozkoumat v\u00fdkon Linuxu a p\u0159\u00edstup k extern\u00edm slu\u017eb\u00e1m, zat\u00edmco zpracov\u00e1n\u00ed HTTP po\u017eadavk\u016f m\u00e1 zna\u010dn\u00fd dopad na v\u00fdkon. Mus\u00edme pln\u011b kontrolovat komunikaci s Redis ve v\u0161ech na\u0161ich serverov\u00fdch architektur\u00e1ch. V jedn\u00e9 architektu\u0159e pou\u017e\u00edv\u00e1me blokuj\u00edc\u00ed vol\u00e1n\u00ed, v jin\u00fdch procedury zalo\u017een\u00e9 na ud\u00e1lostech. Pou\u017eit\u00ed extern\u00ed klientsk\u00e9 knihovny Redis n\u00e1m neposkytne takovou kontrolu. Nav\u00edc n\u00e1\u0161 mal\u00fd klient Redis prov\u00e1d\u00ed pouze n\u011bkolik funkc\u00ed (z\u00edsk\u00e1n\u00ed, nastaven\u00ed a zv\u00fd\u0161en\u00ed kl\u00ed\u010de; z\u00edsk\u00e1n\u00ed a p\u0159id\u00e1n\u00ed do pole). Krom\u011b toho je protokol Redis mimo\u0159\u00e1dn\u011b elegantn\u00ed a jednoduch\u00fd. Nen\u00ed pot\u0159eba se jej ani speci\u00e1ln\u011b u\u010dit. Samotn\u00fd fakt, \u017ee ve\u0161kerou pr\u00e1ci protokol prov\u00e1d\u00ed zhruba ve sto \u0159\u00e1dc\u00edch k\u00f3du, nazna\u010duje, jak dob\u0159e je navr\u017een.<\/p>\n<p>Na dal\u0161\u00edm obr\u00e1zku jsou zn\u00e1zorn\u011bny akce aplikace, kdy\u017e klient (prohl\u00ed\u017ee\u010d) prov\u00e1d\u00ed po\u017eadavek <code>\/guestbookURL<\/code>.<\/p>\n<p><img decoding=\"async\" alt=\"V\u00fdkon s\u00ed\u0165ov\u00fdch aplikac\u00ed Linux. \u00davod\" src=\"\/wp-content\/uploads\/5c5e6740419384b7232aeead95db491b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Mechanismus fungov\u00e1n\u00ed aplikace knihy host\u016f<\/i><\/p>\n<p>Kdy\u017e je pot\u0159eba vy\u0159\u00eddit str\u00e1nku n\u00e1v\u0161t\u011bvn\u00ed knihy, dojde k jednomu vol\u00e1n\u00ed na souborov\u00fd syst\u00e9m pro na\u010dten\u00ed \u0161ablony do pam\u011bti a t\u0159em s\u00ed\u0165ov\u00fdm vol\u00e1n\u00edm k Redis. Soubor \u0161ablony obsahuje v\u011bt\u0161inu obsahu HTML pro str\u00e1nku na vrchn\u00edm sn\u00edmku. Obsahuje tak\u00e9 speci\u00e1ln\u00ed z\u00e1stupn\u00e9 symboly pro dynamickou \u010d\u00e1st obsahu: p\u0159\u00edsp\u011bvky a po\u010d\u00edtadlo n\u00e1v\u0161t\u011bvn\u00edk\u016f. Ty z\u00edsk\u00e1v\u00e1me z Redis, vkl\u00e1d\u00e1me je na str\u00e1nku a vyd\u00e1v\u00e1me klientovi kompletn\u011b sestaven\u00fd obsah. T\u0159et\u00edho vol\u00e1n\u00ed k Redis se lze vyhnout, proto\u017ee Redis vrac\u00ed novou hodnotu kl\u00ed\u010de p\u0159i zv\u00fd\u0161en\u00ed. Nicm\u00e9n\u011b pro n\u00e1\u0161 server s asynchronn\u00ed architekturou zalo\u017eenou na ud\u00e1lostech jsou \u010detn\u00e1 s\u00ed\u0165ov\u00e1 vol\u00e1n\u00ed dobr\u00fdm testem pro vzd\u011bl\u00e1vac\u00ed \u00fa\u010dely. Tak\u017ee ignorujeme vracenou hodnotu Redis ohledn\u011b po\u010dtu n\u00e1v\u0161t\u011bvn\u00edk\u016f a \u017e\u00e1d\u00e1me o ni samostatn\u00fdm vol\u00e1n\u00edm.<\/p>\n<h1>Serverov\u00e9 architektury ZeroHTTPd<\/h1>\n<p>\nVytv\u00e1\u0159\u00edme sedm verz\u00ed ZeroHTTPd se stejnou funkcionalitou, ale r\u016fzn\u00fdmi architekturami:<\/p>\n<ul>\n<li>Iterativn\u00ed\n<\/li>\n<li>Fork server (jedin\u00fd podproces na \u017e\u00e1dost)\n<\/li>\n<li>Pre-fork server (p\u0159edb\u011b\u017en\u00e9 forkov\u00e1n\u00ed proces\u016f)\n<\/li>\n<li>Server s vl\u00e1kny (jedno vl\u00e1kno na \u017e\u00e1dost)\n<\/li>\n<li>Server s p\u0159edem vytvo\u0159en\u00fdmi vl\u00e1kny\n<\/li>\n<li>Architektura zalo\u017een\u00e1 na <code>poll()<\/code>\n<\/li>\n<li>Architektura zalo\u017een\u00e1 na <code>epoll<\/code><\/li>\n<\/ul>\n<p>\nM\u011b\u0159\u00edme v\u00fdkon ka\u017ed\u00e9 architektury t\u00edm, \u017ee zat\u00ed\u017e\u00edme server HTTP po\u017eadavky. Nicm\u00e9n\u011b p\u0159i srovn\u00e1v\u00e1n\u00ed architektur s vysokou m\u00edrou paralelismu se po\u010det po\u017eadavk\u016f zvy\u0161uje. Testujeme t\u0159ikr\u00e1t a po\u010d\u00edt\u00e1me pr\u016fm\u011br.<\/p>\n<h1>Metodologie testov\u00e1n\u00ed<\/h1>\n<p>\n<img decoding=\"async\" alt=\"V\u00fdkon s\u00ed\u0165ov\u00fdch aplikac\u00ed Linux. \u00davod\" src=\"\/wp-content\/uploads\/aa4f337b6e90fa032fbef5374fac8f53.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Nastaven\u00ed pro zat\u011b\u017ek\u00e1vac\u00ed testov\u00e1n\u00ed ZeroHTTPd<\/i> <\/p>\n<p>Je d\u016fle\u017eit\u00e9, aby p\u0159i prov\u00e1d\u011bn\u00ed test\u016f v\u0161echny komponenty nepracovaly na jednom stroji. V tomto p\u0159\u00edpad\u011b m\u00e1 OS dal\u0161\u00ed re\u017eijn\u00ed n\u00e1klady na pl\u00e1nov\u00e1n\u00ed, proto\u017ee komponenty sout\u011b\u017e\u00ed o CPU. M\u011b\u0159en\u00ed re\u017eijn\u00edch n\u00e1klad\u016f opera\u010dn\u00edho syst\u00e9mu s ka\u017edou z vybran\u00fdch serverov\u00fdch architektur je jedn\u00edm z nejd\u016fle\u017eit\u011bj\u0161\u00edch c\u00edl\u016f tohoto cvi\u010den\u00ed. P\u0159id\u00e1n\u00ed v\u011bt\u0161\u00edho po\u010dtu prom\u011bnn\u00fdch by bylo \u0161kodliv\u00e9 pro proces. Proto nastaven\u00ed na v\u00fd\u0161e uveden\u00e9m obr\u00e1zku funguje nejl\u00e9pe.<\/p>\n<h3>Co d\u011bl\u00e1 ka\u017ed\u00fd z t\u011bchto server\u016f<\/h3>\n<p><\/p>\n<ul>\n<li>load.unixism.net: zde spou\u0161t\u00edme <code>ab<\/code>, n\u00e1stroj Apache Benchmark. Generuje z\u00e1t\u011b\u017e pot\u0159ebnou pro testov\u00e1n\u00ed na\u0161ich serverov\u00fdch architektur.\n<\/li>\n<li>nginx.unixism.net: N\u011bkdy chceme spustit v\u00edce ne\u017e jednu instanci serverov\u00e9ho programu. K tomu server Nginx s p\u0159\u00edslu\u0161n\u00fdmi nastaven\u00edmi funguje jako vyrovn\u00e1va\u010d zat\u00ed\u017een\u00ed pro <i>ab<\/i> na\u0161e serverov\u00e9 procesy.\n<\/li>\n<li>zerohttpd.unixism.net: zde spou\u0161t\u00edme na\u0161e serverov\u00e9 programy na sedmi r\u016fzn\u00fdch architektur\u00e1ch, po jedn\u00e9 najednou.\n<\/li>\n<li>redis.unixism.net: na tomto serveru b\u011b\u017e\u00ed d\u00e9mon Redis, kde jsou ulo\u017eeny z\u00e1znamy v n\u00e1v\u0161t\u011bvn\u00ed knize a po\u010d\u00edtadlo n\u00e1v\u0161t\u011bvn\u00edk\u016f.<\/li>\n<\/ul>\n<p>\nV\u0161echny servery pracuj\u00ed na jednom procesorov\u00e9m j\u00e1d\u0159e. My\u0161lenkou je zhodnotit maxim\u00e1ln\u00ed v\u00fdkon ka\u017ed\u00e9 architektury. Vzhledem k tomu, \u017ee v\u0161echny serverov\u00e9 programy jsou testov\u00e1ny na stejn\u00e9m hardwaru, to je z\u00e1kladn\u00ed \u00farove\u0148 pro jejich srovn\u00e1n\u00ed. Moje testovac\u00ed instalace se skl\u00e1d\u00e1 z virtu\u00e1ln\u00edch server\u016f, kter\u00e9 si pronaj\u00edm\u00e1m od Digital Ocean.<\/p>\n<h3>Co m\u011b\u0159\u00edme?<\/h3>\n<p>\nM\u016f\u017eeme m\u011b\u0159it r\u016fzn\u00e9 ukazatele. Hodnot\u00edme v\u00fdkon ka\u017ed\u00e9 architektury v t\u00e9to konfiguraci, zat\u011b\u017eov\u00e1n\u00edm server\u016f po\u017eadavky na r\u016fzn\u00fdch \u00farovn\u00edch paralelismu: zat\u00ed\u017een\u00ed vzr\u016fst\u00e1 od 20 do 15 000 sou\u010dasn\u00fdch u\u017eivatel\u016f.<\/p>\n<h1>V\u00fdsledky test\u016f<\/h1>\n<p>\nNa n\u00e1sleduj\u00edc\u00edm diagramu je zn\u00e1zorn\u011bn v\u00fdkon server\u016f na r\u016fzn\u00fdch architektur\u00e1ch p\u0159i r\u016fzn\u00fdch \u00farovn\u00edch paralelismu. Na ose y je po\u010det po\u017eadavk\u016f za sekundu, na ose x paraleln\u00ed spojen\u00ed.<\/p>\n<p><img decoding=\"async\" alt=\"V\u00fdkon s\u00ed\u0165ov\u00fdch aplikac\u00ed Linux. \u00davod\" src=\"\/wp-content\/uploads\/3415bcfb66503152d644130f68bd19da.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"V\u00fdkon s\u00ed\u0165ov\u00fdch aplikac\u00ed Linux. \u00davod\" src=\"\/wp-content\/uploads\/ba457b671eb758f3226e0eeafaadc6aa.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"V\u00fdkon s\u00ed\u0165ov\u00fdch aplikac\u00ed Linux. \u00davod\" src=\"\/wp-content\/uploads\/aea06856d61d4d4bdda9814c53a28d4a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00ed\u017ee je tabulka s v\u00fdsledky.<\/p>\n<p> po\u017eadavk\u016f za sekundu <\/p>\n<p><strong>paralelismus<\/strong><br \/>\n<strong>iterativn\u00ed<\/strong><br \/>\n<strong>fork<\/strong><br \/>\n<strong>pre-fork<\/strong><br \/>\n<strong>datumov\u00fd<\/strong><br \/>\n<strong>pre-threading<\/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 \/>\nvelk\u00fd rozsah<br \/>\n2138<\/p>\n<p>5000<br \/>\n\u2013<br \/>\nvelk\u00fd rozsah<br \/>\n1600<br \/>\n1100<br \/>\n2519<br \/>\n\u2013<br \/>\n2235<\/p>\n<p>8000<br \/>\n\u2013<br \/>\n\u2013<br \/>\n1200<br \/>\nvelk\u00fd rozsah<br \/>\n2451<br \/>\n\u2013<br \/>\n2100<\/p>\n<p>10\u00a0000<br \/>\n\u2013<br \/>\n\u2013<br \/>\nvelk\u00fd rozsah<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>\nZ grafu a tabulky je z\u0159ejm\u00e9, \u017ee nad 8000 sou\u010dasn\u00fdch po\u017eadavk\u016f z\u016fst\u00e1vaj\u00ed pouze dva hr\u00e1\u010di: pre-fork a epoll. S rostouc\u00edm zat\u00ed\u017een\u00edm server na b\u00e1zi poll funguje h\u016f\u0159e ne\u017e datov\u00fd. Architektura s p\u0159edb\u011b\u017en\u00fdm vytv\u00e1\u0159en\u00edm vl\u00e1ken p\u0159edstavuje d\u016fstojnou konkurenci epoll: to dokazuje, jak dob\u0159e j\u00e1dro Linuxu pl\u00e1nuje velk\u00e9 mno\u017estv\u00ed vl\u00e1ken.<\/p>\n<h1>Zdrojov\u00fd k\u00f3d ZeroHTTPd<\/h1>\n<p>\nZdrojov\u00fd k\u00f3d ZeroHTTPd <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/shuveb\/zerohttpd\">zde<\/a><\/noindex>. Pro ka\u017edou architekturu samostatn\u00fd adres\u00e1\u0159.<\/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>\nKrom\u011b sedmi adres\u00e1\u0159\u016f pro v\u0161echny architektury se v ko\u0159enov\u00e9m adres\u00e1\u0159i nach\u00e1zej\u00ed je\u0161t\u011b dv\u011b: public a templates. V prvn\u00edm je um\u00edst\u011bn soubor index.html a obr\u00e1zek z prvn\u00edho screenshotu. M\u016f\u017eete tam um\u00edstit dal\u0161\u00ed soubory a slo\u017eky, p\u0159i\u010dem\u017e ZeroHTTPd by m\u011bl bez probl\u00e9m\u016f vyd\u00e1vat tyto statick\u00e9 soubory. Pokud se cesta v prohl\u00ed\u017ee\u010di shoduje s cestou ve slo\u017ece public, ZeroHTTPd hled\u00e1 v tomto adres\u00e1\u0159i soubor index.html. Obsah pro n\u00e1v\u0161t\u011bvn\u00ed knihu se generuje dynamicky. M\u00e1 pouze hlavn\u00ed str\u00e1nku a jej\u00ed obsah je zalo\u017een na souboru 'templates\/guestbook\/index.html'. V ZeroHTTPd je snadn\u00e9 p\u0159id\u00e1vat dynamick\u00e9 str\u00e1nky pro roz\u0161\u00ed\u0159en\u00ed. My\u0161lenkou je, \u017ee u\u017eivatel\u00e9 mohou do tohoto adres\u00e1\u0159e p\u0159id\u00e1vat \u0161ablony a podle pot\u0159eby roz\u0161i\u0159ovat ZeroHTTPd.<\/p>\n<p>Pro sestaven\u00ed v\u0161ech sedmi server\u016f spus\u0165te <code>make all<\/code> z ko\u0159enov\u00e9ho adres\u00e1\u0159e \u2013 a v\u0161echny buildy se objev\u00ed v tomto adres\u00e1\u0159i. Spustiteln\u00e9 soubory hledaj\u00ed adres\u00e1\u0159e public a templates v tom adres\u00e1\u0159i, odkud jsou spu\u0161t\u011bny.<\/p>\n<h1>Linux API<\/h1>\n<p>\nAbychom porozum\u011bli informac\u00edm v tomto cyklu \u010dl\u00e1nk\u016f, nen\u00ed nutn\u00e9 m\u00edt dobr\u00e9 znalosti o Linux API. Doporu\u010duji v\u0161ak p\u0159e\u010d\u00edst si v\u00edce na toto t\u00e9ma, v s\u00edti je mnoho referen\u010dn\u00edch zdroj\u016f. A\u010dkoli se dotkneme n\u011bkolika kategori\u00ed Linux API, na\u0161e pozornost se zam\u011b\u0159\u00ed p\u0159edev\u0161\u00edm na procesy, vl\u00e1kna, ud\u00e1losti a s\u00ed\u0165ov\u00fd z\u00e1sobn\u00edk. Krom\u011b knih a \u010dl\u00e1nk\u016f o Linux API tak\u00e9 doporu\u010duji p\u0159e\u010d\u00edst si manu\u00e1ly pro syst\u00e9mov\u00e9 vol\u00e1n\u00ed a pou\u017e\u00edvan\u00e9 knihovn\u00ed funkce.<\/p>\n<h1>V\u00fdkon a \u0161k\u00e1lovatelnost<\/h1>\n<p>\nMal\u00e1 pozn\u00e1mka k v\u00fdkonu a \u0161k\u00e1lovatelnosti. Teoreticky mezi nimi nen\u00ed \u017e\u00e1dn\u00e1 vazba. M\u016f\u017eete m\u00edt webovou slu\u017ebu, kter\u00e1 funguje velmi dob\u0159e, s dobou odezvy n\u011bkolika milisekund, ale nen\u00ed v\u016fbec \u0161k\u00e1lovateln\u00e1. Stejn\u011b tak m\u016f\u017ee existovat \u0161patn\u011b funguj\u00edc\u00ed webov\u00e1 aplikace, kter\u00e1 pot\u0159ebuje n\u011bkolik sekund k odezv\u011b, ale je \u0161k\u00e1lovateln\u00e1 na des\u00edtky pro zpracov\u00e1n\u00ed des\u00edtek tis\u00edc simult\u00e1nn\u00edch u\u017eivatel\u016f. P\u0159esto je kombinace vysok\u00e9ho v\u00fdkonu a \u0161k\u00e1lovatelnosti velmi siln\u00e1 kombinace. Vysokov\u00fdkonn\u00e9 aplikace obecn\u011b hospod\u00e1rn\u011b vyu\u017e\u00edvaj\u00ed zdroje a t\u00edm efektivn\u011b obsluhuj\u00ed v\u00edce simult\u00e1nn\u00edch u\u017eivatel\u016f na serveru, \u010d\u00edm\u017e sni\u017euj\u00ed n\u00e1klady.<\/p>\n<h1>\u00dalohy CPU a I\/O<\/h1>\n<p>\nNakonec existuj\u00ed dva mo\u017en\u00e9 typy \u00faloh ve v\u00fdpo\u010dtech: pro I\/O a CPU. Z\u00edsk\u00e1v\u00e1n\u00ed po\u017eadavk\u016f p\u0159es internet (s\u00ed\u0165ov\u00fd vstup\/v\u00fdstup), spr\u00e1va soubor\u016f (s\u00ed\u0165ov\u00fd a diskov\u00fd vstup\/v\u00fdstup), komunikace s datab\u00e1z\u00ed (s\u00ed\u0165ov\u00fd a diskov\u00fd vstup\/v\u00fdstup) \u2013 to v\u0161e jsou \u010dinnosti I\/O. N\u011bkter\u00e9 po\u017eadavky na datab\u00e1zi mohou m\u00edrn\u011b zat\u011b\u017eovat CPU (t\u0159\u00edd\u011bn\u00ed, v\u00fdpo\u010det pr\u016fm\u011bru milionu v\u00fdsledk\u016f atd.). V\u011bt\u0161ina webov\u00fdch aplikac\u00ed je omezen\u00e1 maxim\u00e1ln\u00edm mo\u017en\u00fdm I\/O, zat\u00edmco procesor je z\u0159\u00eddka vyu\u017e\u00edv\u00e1n na plnou kapacitu. Kdy\u017e vid\u00edte, \u017ee n\u011bjak\u00e1 \u00faloha vstupu\/v\u00fdstupu vyu\u017e\u00edv\u00e1 hodn\u011b CPU, pravd\u011bpodobn\u011b to nazna\u010duje \u0161patnou architekturu aplikace. To m\u016f\u017ee znamenat, \u017ee se zdroje CPU utr\u00e1c\u00ed na spr\u00e1vu proces\u016f a p\u0159ep\u00edn\u00e1n\u00ed kontextu \u2013 a to nen\u00ed \u00fapln\u011b u\u017eite\u010dn\u00e9. Pokud d\u011bl\u00e1te n\u011bco jako zpracov\u00e1n\u00ed obr\u00e1zk\u016f, p\u0159evod audio soubor\u016f nebo strojov\u00e9 u\u010den\u00ed, pak aplikace vy\u017eaduje siln\u00e9 zdroje CPU. Ale v\u011bt\u0161inou aplikac\u00ed tomu tak nen\u00ed.<\/p>\n<h1>Podrobn\u011bji o serverov\u00fdch architektur\u00e1ch<\/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\/\">\u010c\u00e1st I. Iterativn\u00ed architektura<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/unixism.net\/2019\/04\/28\/linux-applications-performance-part-ii-forking-servers\/\">\u010c\u00e1st II. Fork-servery<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/unixism.net\/2019\/04\/28\/linux-applications-performance-part-iii-preforked-servers\/\">\u010c\u00e1st III. Pre-fork servery<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/unixism.net\/2019\/04\/28\/linux-applications-performance-part-iv-threaded-servers\/\">\u010c\u00e1st IV. Servery s vl\u00e1kny<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/unixism.net\/2019\/04\/28\/linux-applications-performance-part-v-pre-threaded-servers\/\">\u010c\u00e1st V. Servery s p\u0159edem vytvo\u0159en\u00fdmi vl\u00e1kny<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/unixism.net\/2019\/04\/28\/linux-applications-performance-part-vi-polling-servers\/\">\u010c\u00e1st VI. Architektura zalo\u017een\u00e1 na poll<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/unixism.net\/2019\/04\/28\/linux-applications-performance-part-vii-epoll-servers\/\">\u010c\u00e1st VII. Architektura zalo\u017een\u00e1 na epoll<\/a><\/noindex><\/li>\n<\/ol>\n<p>Zdroj: <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\/cs\/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=\"cs_CZ\" \/>\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\/cs\/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\udd47V\u00fdkon s\u00ed\u0165ov\u00fdch aplikac\u00ed Linux. \u00davod | ProHoster","description":"Webov\u00e9 aplikace se dnes pou\u017e\u00edvaj\u00ed v\u0161ude, a mezi v\u0161emi transportn\u00edmi protokoly zauj\u00edm\u00e1 HTTP velk\u00fd pod\u00edl.","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/proizvoditelnost-setevyh-prilozhenij-linux-vvedenie","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"cs_CZ","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\/cs\/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\/cs\/wp-json\/wp\/v2\/posts\/35106","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=35106"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/35106\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=35106"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=35106"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=35106"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}