{"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\/lv\/blog\/administrirovanie\/proizvoditelnost-setevyh-prilozhenij-linux-vvedenie","title":{"rendered":"Linux t\u012bkla lietojumprogrammu veiktsp\u0113ja. Ievads","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>M\u016bsdien\u0101s t\u012bmek\u013ca lietojumprogrammas tiek lietotas visur, un starp vis\u0101m p\u0101rvades protokoliem liel\u0101ko da\u013cu aiz\u0146em HTTP. P\u0113t\u012bjot t\u012bmek\u013ca lietojumprogrammu izstr\u0101des nianses, vairums uzman\u012bbu piev\u0113r\u0161 \u013coti maz oper\u0113t\u0101jsist\u0113mai, kur \u0161\u012bs lietojumprogrammas paties\u012bb\u0101 tiek palaistas. Izstr\u0101des (Dev) un ekspluat\u0101cijas (Ops) nodal\u012b\u0161ana tikai pasliktin\u0101ja situ\u0101ciju. Ta\u010du ar DevOps kult\u016bras izplat\u012bbu izstr\u0101d\u0101t\u0101ji s\u0101k uz\u0146emties atbild\u012bbu par savu lietojumprogrammu palai\u0161anu m\u0101ko\u0146os, t\u0101p\u0113c vi\u0146iem \u013coti noder\u012bgi ir r\u016bp\u012bgi iepaz\u012bties ar oper\u0113t\u0101jsist\u0113mas aizmuguri. Tas \u012bpa\u0161i noder\u012bgi, ja j\u016bs m\u0113\u0123in\u0101t \u012bstenot sist\u0113mu t\u016bksto\u0161iem vai desmitiem t\u016bksto\u0161u vienlaic\u012bgu savienojumu.<\/p>\n<p>Ierobe\u017eojumi t\u012bmek\u013ca pakalpojumos ir \u013coti l\u012bdz\u012bgi ierobe\u017eojumiem cit\u0101s lietojumprogramm\u0101s. Neatkar\u012bgi no t\u0101, vai t\u0101s ir slodzes l\u012bdzsvarot\u0101ji vai datu b\u0101zes serveri, vis\u0101m \u0161\u012bm lietojumprogramm\u0101m ir l\u012bdz\u012bgas probl\u0113mas augstas veiktsp\u0113jas vid\u0113. Izpratne par \u0161iem fundament\u0101lajiem ierobe\u017eojumiem un veidiem, k\u0101 tos apiet kopum\u0101, \u013caus nov\u0113rt\u0113t j\u016bsu t\u012bmek\u013ca lietojumprogrammu veiktsp\u0113ju un m\u0113rogojam\u012bbu.<\/p>\n<p>Es rakstu \u0161o rakstu s\u0113riju, rea\u0123\u0113jot uz jaunajiem izstr\u0101d\u0101t\u0101jiem, kuri v\u0113las k\u013c\u016bt par labi inform\u0113tiem sist\u0113mu arhitektiem. Nav iesp\u0113jams skaidri saprast Linux lietojumprogrammu optimiz\u0101cijas metodes, neiedzi\u013cinoties pamatos, k\u0101 t\u0101s darbojas oper\u0113t\u0101jsist\u0113mas l\u012bmen\u012b. Lai gan ir daudz lietojumprogrammu veidu, \u0161aj\u0101 cikl\u0101 v\u0113los izp\u0113t\u012bt t\u012bkla lietojumprogrammas, nevis darbvirsmas, piem\u0113ram, p\u0101rl\u016bku vai teksta redaktoru. \u0160is materi\u0101ls ir orient\u0113ts uz izstr\u0101d\u0101t\u0101jiem un arhitektiem, kuri v\u0113las saprast, k\u0101 darbojas Linux vai Unix programmas un k\u0101 t\u0101s struktur\u0113t augstai veiktsp\u0113jai.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nLinux\u00a0ir <i>servera<\/i> oper\u0113t\u0101jsist\u0113ma, un visbie\u017e\u0101k j\u016bsu lietojumprogrammas str\u0101d\u0101 tie\u0161i uz \u0161\u012bs OS. Lai gan es saku \u201eLinux\u201d, liel\u0101ko da\u013cu laika j\u016bs varat dro\u0161i pie\u0146emt, ka tiek dom\u0101tas visas Unix l\u012bdz\u012bgas oper\u0113t\u0101jsist\u0113mas kopum\u0101. Tom\u0113r es neesmu test\u0113jis pievienoto kodu cit\u0101s sist\u0113m\u0101s. T\u0101tad, ja j\u016bs interes\u0113 FreeBSD vai OpenBSD, rezult\u0101ts var at\u0161\u0137irties. Kad es m\u0113\u0123inu kaut ko Linux specifisku, es to nor\u0101du.<\/p>\n<p>Lai gan j\u016bs varat izmantot ieg\u016bt\u0101s zin\u0101\u0161anas, lai izveidotu lietotni no nulles, un t\u0101 b\u016bs lieliski optimiz\u0113ta, tom\u0113r lab\u0101k to nedar\u012bt. Ja j\u016bs uzrakst\u012bsiet jaunu t\u012bmek\u013ca serveri C vai C++ valod\u0101 sava uz\u0146\u0113muma biznesa lietojumam, iesp\u0113jams, tas b\u016bs j\u016bsu p\u0113d\u0113jais darba diena. Tom\u0113r zin\u0101\u0161anas par \u0161o lietojumu strukt\u016bru pal\u012bdz\u0113s, izv\u0113loties jau eso\u0161\u0101s programmas. J\u016bs var\u0113siet sal\u012bdzin\u0101t sist\u0113mas, kas balst\u012btas uz procesiem, ar sist\u0113m\u0101m, kas balst\u012btas uz pavedieniem un notikumiem. J\u016bs saprat\u012bsiet un nov\u0113rt\u0113siet, k\u0101p\u0113c Nginx str\u0101d\u0101 lab\u0101k nek\u0101 Apache httpd, k\u0101p\u0113c Python lietojumprogramma, kas balst\u012bta uz Tornado, var apkalpot vair\u0101k lietot\u0101ju sal\u012bdzin\u0101jum\u0101 ar Python lietojumprogrammu, kas balst\u012bta uz Django.<\/p>\n<h1>ZeroHTTPd: m\u0101c\u012bbu r\u012bks<\/h1>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/shuveb\/zerohttpd\">ZeroHTTPd<\/a><\/noindex>\u00a0\u2014 t\u012bmek\u013ca serveris, kuru es uzrakst\u012bju no nulles C valod\u0101 k\u0101 m\u0101c\u012bbu r\u012bku. Tam nav \u0101r\u0113ju atkar\u012bbu, tostarp piek\u013cuves Redis. M\u0113s palaid\u012bsim savas Redis proced\u016bras. S\u012bk\u0101k skatiet zem\u0101k.<\/p>\n<p>Lai gan m\u0113s var\u0113tu ilgi diskus\u0113t par teoriju, nav nek\u0101 lab\u0101ka k\u0101 uzrakst\u012bt kodu, to palaist un sal\u012bdzin\u0101t visas servera arhitekt\u016bras. Tas ir visredzam\u0101kais metods. T\u0101p\u0113c m\u0113s uzrakst\u012bsim vienk\u0101r\u0161u ZeroHTTPd t\u012bmek\u013ca serveri, pielietojot katru modeli: uz procesu, pavedienu un notikumu pamata. P\u0101rbaud\u012bsim katru no \u0161iem serveriem un redz\u0113sim, k\u0101 tie sal\u012bdzin\u0101s. ZeroHTTPd ir \u012bstenots vien\u0101 C fail\u0101. Notikumu b\u0101zes servera ietvaros ietilpst <noindex><a rel=\"nofollow\" href=\"https:\/\/troydhanson.github.io\/uthash\/\">uthash<\/a><\/noindex>, lieliska hash tabulas ievie\u0161ana, kas tiek pieg\u0101d\u0101ta vien\u0101 galvenes fail\u0101. Cit\u0101s situ\u0101cij\u0101s nav atkar\u012bbu, lai nevajadz\u0113tu sare\u017e\u0123\u012bt projektu.<\/p>\n<p>Kod\u0101 ir daudz koment\u0101ru, kas pal\u012bdz\u0113s orient\u0113ties. B\u016bdams vienk\u0101r\u0161s t\u012bmek\u013ca serveris da\u017e\u0101s koda rind\u0101s, ZeroHTTPd ar\u012b ir minim\u0101ls ietvars t\u012bmek\u013ca izstr\u0101dei. Tam ir ierobe\u017eota funkcionalit\u0101te, bet tas sp\u0113j pieg\u0101d\u0101t statiskos failus un \u013coti vienk\u0101r\u0161as \"dinamisk\u0101s\" lapas. J\u0101teic, ka ZeroHTTPd labi piem\u0113rots m\u0101c\u012bb\u0101m par augstas veiktsp\u0113jas Linux lietojumprogrammu izstr\u0101di. Liel\u0101kaj\u0101 da\u013c\u0101 gad\u012bjumu t\u012bmek\u013ca pakalpojumi gaida piepras\u012bjumus, tos p\u0101rbauda un apstr\u0101d\u0101. Tie\u0161i to dar\u012bs ZeroHTTPd. Tas ir m\u0101c\u012bbu r\u012bks, nevis produkcijai. Tas nav sp\u0113c\u012bgs k\u013c\u016bdu apstr\u0101d\u0113 un, iesp\u0113jams, nevar lepoties ar lab\u0101kaj\u0101m dro\u0161\u012bbas praks\u0113m (j\u0101, es izmantoju <code>strcpy<\/code>) vai ar sare\u017e\u0123\u012btiem C valodas trikiem. Bet es ceru, ka tas labi tiks gal\u0101 ar savu uzdevumu.<\/p>\n<p><img decoding=\"async\" alt=\"Linux t\u012bkla lietojumprogrammu veiktsp\u0113ja. Ievads\" src=\"\/wp-content\/uploads\/33fd0a5353667001523d5d4c8ada9ecf.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>ZeroHTTPd s\u0101kumlapas. Tas var izsniegt da\u017e\u0101da veida failus, tostarp att\u0113lus.<\/i><\/p>\n<h1>Viesu gr\u0101matas lietotne<\/h1>\n<p>\nM\u016bsdienu t\u012bmek\u013ca lietojumprogrammas parasti nav ierobe\u017eotas ar statiskajiem failiem. T\u0101m ir sare\u017e\u0123\u012btas mijiedarb\u012bbas ar da\u017e\u0101d\u0101m datu b\u0101z\u0113m, ke\u0161atmi\u0146\u0101m utt. T\u0101p\u0113c m\u0113s izveidosim vienk\u0101r\u0161u t\u012bmek\u013ca lietojumprogrammu ar nosaukumu \u00abViesu gr\u0101mata\u00bb, kur apmekl\u0113t\u0101ji atst\u0101j ierakstus ar saviem v\u0101rdiem. Viesu gr\u0101mat\u0101 tiek saglab\u0101ti iepriek\u0161 atst\u0101tie ieraksti. Apak\u0161\u0101 lapas ir ar\u012b apmekl\u0113t\u0101ju skait\u012bt\u0101js.<\/p>\n<p><img decoding=\"async\" alt=\"Linux t\u012bkla lietojumprogrammu veiktsp\u0113ja. Ievads\" src=\"\/wp-content\/uploads\/ed8e828e8567d3d114875520988742d7.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>ZeroHTTPd viesu gr\u0101matas t\u012bmek\u013ca lietojumprogramma<\/i><\/p>\n<p>Apmekl\u0113t\u0101ju skait\u012bt\u0101js un viesu gr\u0101matas ieraksti tiek glab\u0101ti Redis. Komunik\u0101cijai ar Redis ir ieviestas pa\u0161as proced\u016bras, t\u0101s nav atkar\u012bgas no \u0101r\u0113j\u0101m bibliot\u0113m. Es neesmu liels fanu, kas izdala m\u0101ksl\u012bgus kodus, kad ir pieejami publiski un labi test\u0113ti risin\u0101jumi. Bet ZeroHTTPd m\u0113r\u0137is ir izp\u0113t\u012bt Linux veiktsp\u0113ju un piek\u013cuvi \u0101r\u0113j\u0101m pakalpojumiem, kam\u0113r HTTP piepras\u012bjumu apkalpo\u0161ana iev\u0113rojami ietekm\u0113 veiktsp\u0113ju. Mums j\u0101nodro\u0161ina piln\u012bga kontroli p\u0101r komunik\u0101ciju ar Redis katr\u0101 no m\u016bsu servera arhitekt\u016br\u0101m. Vien\u0101 arhitekt\u016br\u0101 m\u0113s izmantojam blo\u0137\u0113jo\u0161as izsauk\u0161anas, cit\u0101s \u2013 proced\u016bras, kas balst\u012btas uz notikumiem. Izmantojot \u0101r\u0113jo klientu Redis bibliot\u0113ku, m\u0113s nezaud\u0113sim \u0161o kontroli. Turkl\u0101t m\u016bsu mazais Redis klients veic tikai da\u017eas funkcijas (ieg\u016b\u0161ana, iestat\u012b\u0161ana un palielin\u0101\u0161ana atsl\u0113g\u0101; ieg\u016b\u0161ana un pievieno\u0161ana mas\u012bvam). Turkl\u0101t, Redis protokols ir \u0101rk\u0101rt\u012bgi elegants un vienk\u0101r\u0161s. To pat nav nepiecie\u0161ams \u012bpa\u0161i m\u0101c\u012bt. Pats fakts, ka visu darbu protokols izdara aptuveni simts rindi\u0146\u0101s koda, liecina par to, cik labi tas ir p\u0101rdom\u0101ts.<\/p>\n<p>N\u0101kamaj\u0101 att\u0113l\u0101 ir par\u0101d\u012btas programmas darb\u012bbas, kad klients (p\u0101rl\u016bks) pieprasa <code>\/guestbookURL<\/code>.<\/p>\n<p><img decoding=\"async\" alt=\"Linux t\u012bkla lietojumprogrammu veiktsp\u0113ja. Ievads\" src=\"\/wp-content\/uploads\/5c5e6740419384b7232aeead95db491b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Viesu gr\u0101matas lietotnes darb\u012bbas meh\u0101nisms<\/i><\/p>\n<p>Kad j\u0101izdod viesu gr\u0101matas lapa, tiek veikts viens izsaukums uz failu sist\u0113mu, lai las\u012btu veidni atmi\u0146\u0101, un tr\u012bs t\u012bkla izsaukumi uz Redis. Veid\u0146u fails satur liel\u0101ko da\u013cu HTML satura, kas redzams aug\u0161\u0113j\u0101 ekr\u0101n\u0161\u0101vi\u0146\u0101. Taj\u0101 ir ar\u012b \u012bpa\u0161i aizpild\u012bt\u0101ji dinamiskajai satura da\u013cai: ierakstiem un apmekl\u0113t\u0101ju skait\u012bt\u0101jam. M\u0113s ieg\u016bstam tos no Redis, ieliekam lap\u0101 un izsniedzam klientam piln\u012bb\u0101 izveidoto saturu. Tre\u0161o Redis izsaukumu var\u0113tu izvair\u012bties, jo Redis atgrie\u017e jauno atsl\u0113gas v\u0113rt\u012bbu palielin\u0101juma gad\u012bjum\u0101. Tom\u0113r m\u016bsu serverim ar asinkronu notikumu balst\u012btu arhitekt\u016bru vair\u0101ki t\u012bkla izsaukumi ir labs p\u0101rbaud\u012bjums m\u0101c\u012bbu nol\u016bkiem. T\u0101d\u0113j\u0101di m\u0113s atmetam atgriezto Redis v\u0113rt\u012bbu par apmekl\u0113t\u0101ju skaitu un piepras\u0101m to atsevi\u0161\u0137\u0101 izsaukum\u0101.<\/p>\n<h1>ZeroHTTPd Serveru arhitekt\u016bras<\/h1>\n<p>\nM\u0113s b\u016bv\u0113jam septi\u0146as ZeroHTTPd versijas ar vien\u0101du funkcionalit\u0101ti, bet at\u0161\u0137ir\u012bg\u0101m arhitekt\u016br\u0101m:<\/p>\n<ul>\n<li>Iterat\u012bvais\n<\/li>\n<li>Fork serveris (viens apak\u0161process uz piepras\u012bjumu)\n<\/li>\n<li>Pre-fork serveris (iepriek\u0161\u0113js procesu fork)\n<\/li>\n<li>Izpildes pavediena serveris (viens pavediena uz piepras\u012bjumu)\n<\/li>\n<li>Serveris ar iepriek\u0161\u0113ju pavedienu izveidi\n<\/li>\n<li>Arhitekt\u016bra, kas balst\u012bta uz <code>poll()<\/code>\n<\/li>\n<li>Arhitekt\u016bra, kas balst\u012bta uz <code>epoll<\/code><\/li>\n<\/ul>\n<p>\nM\u0113s m\u0113ram katras arhitekt\u016bras veiktsp\u0113ju, noslogojot serveri ar HTTP piepras\u012bjumiem. Ta\u010du sal\u012bdzinot arhitekt\u016bras ar augstu paral\u0113lismu, piepras\u012bjumu skaits palielin\u0101s. M\u0113s test\u0113jam tr\u012bs reizes un apr\u0113\u0137in\u0101m vid\u0113jo.<\/p>\n<h1>Test\u0113\u0161anas metodolo\u0123ija<\/h1>\n<p>\n<img decoding=\"async\" alt=\"Linux t\u012bkla lietojumprogrammu veiktsp\u0113ja. Ievads\" src=\"\/wp-content\/uploads\/aa4f337b6e90fa032fbef5374fac8f53.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>ZeroHTTPd slodzes test\u0113\u0161anas konfigur\u0101cija<\/i> <\/p>\n<p>Ir svar\u012bgi, lai testu laik\u0101 visi komponenti nedarbotos uz vienas ma\u0161\u012bnas. \u0160aj\u0101 gad\u012bjum\u0101 oper\u0113t\u0101jsist\u0113mai ir papildu izdevumi pl\u0101no\u0161an\u0101, jo komponenti konkur\u0113 par CPU. Sist\u0113mas oper\u0101ciju izdevumu m\u0113r\u012b\u0161ana ar katru no izv\u0113l\u0113taj\u0101m serveru arhitekt\u016br\u0101m ir viens no \u0161\u012b vingrin\u0101juma vissvar\u012bg\u0101kajiem m\u0113r\u0137iem. Papildu main\u012bgo pievieno\u0161ana var\u0113tu b\u016bt kait\u012bga procesam. T\u0101d\u0113j\u0101di konfigur\u0101cija, kas redzama aug\u0161\u0113j\u0101 att\u0113l\u0101, darbojas vislab\u0101k.<\/p>\n<h3>Ko katrs no \u0161iem serveriem dara<\/h3>\n<p><\/p>\n<ul>\n<li>load.unixism.net: \u0161eit m\u0113s palaid\u012bsim <code>ab<\/code>, Apache Benchmark r\u012bku. Tas \u0123ener\u0113 slodzi, kas nepiecie\u0161ama, lai test\u0113tu m\u016bsu serveru arhitekt\u016bras.\n<\/li>\n<li>nginx.unixism.net: da\u017ek\u0101rt m\u0113s v\u0113lamies darbin\u0101t vair\u0101k nek\u0101 vienu servera programmas instance. T\u0101p\u0113c Nginx serveris ar atbilsto\u0161iem iestat\u012bjumiem darbojas k\u0101 slodzes balans\u0113t\u0101js, kas sa\u0146em <i>ab<\/i> m\u016bsu serveru procesiem.\n<\/li>\n<li>zerohttpd.unixism.net: \u0161eit m\u0113s palaid\u0101m m\u016bsu servera programmas septi\u0146\u0101s da\u017e\u0101d\u0101s arhitekt\u016br\u0101s, pa vienai reizei.\n<\/li>\n<li>redis.unixism.net: \u0161aj\u0101 server\u012b darbojas Redis demons, kur tiek glab\u0101tas viesu gr\u0101matas ieraksti un apmekl\u0113t\u0101ju skait\u012bt\u0101js.<\/li>\n<\/ul>\n<p>\nVisi serveri darbojas uz viena procesora kodola. Ideja ir nov\u0113rt\u0113t maksim\u0101lo katras arhitekt\u016bras veiktsp\u0113ju. T\u0101 k\u0101 visas servera programmas tiek test\u0113tas uz viena apr\u012bkojuma, tas ir pamata l\u012bmenis to sal\u012bdzin\u0101\u0161anai. Mana test\u0113\u0161anas vide sast\u0101v no virtu\u0101liem serveriem, kas iznom\u0101ti no Digital Ocean.<\/p>\n<h3>Ko m\u0113s m\u0113r\u0101m?<\/h3>\n<p>\nVaram izm\u0113r\u012bt da\u017e\u0101dus r\u0101d\u012bt\u0101jus. M\u0113s nov\u0113rt\u0113jam katras arhitekt\u016bras veiktsp\u0113ju \u0161aj\u0101 konfigur\u0101cij\u0101, noslogojot serverus ar piepras\u012bjumiem da\u017e\u0101dos paralelizma l\u012bme\u0146os: slodze pieaug no 20 l\u012bdz 15 000 vienlaic\u012bgiem lietot\u0101jiem.<\/p>\n<h1>Testu rezult\u0101ti<\/h1>\n<p>\nN\u0101kamaj\u0101 diagramm\u0101 redzama serveru veiktsp\u0113ja da\u017e\u0101d\u0101s arhitekt\u016br\u0101s pie da\u017e\u0101diem paralelizma l\u012bme\u0146iem. Y as\u012b \u2014 piepras\u012bjumi sekund\u0113, X as\u012b \u2014 paral\u0113lie savienojumi.<\/p>\n<p><img decoding=\"async\" alt=\"Linux t\u012bkla lietojumprogrammu veiktsp\u0113ja. Ievads\" src=\"\/wp-content\/uploads\/3415bcfb66503152d644130f68bd19da.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Linux t\u012bkla lietojumprogrammu veiktsp\u0113ja. Ievads\" src=\"\/wp-content\/uploads\/ba457b671eb758f3226e0eeafaadc6aa.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Linux t\u012bkla lietojumprogrammu veiktsp\u0113ja. Ievads\" src=\"\/wp-content\/uploads\/aea06856d61d4d4bdda9814c53a28d4a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZem\u0101k ir tabula ar rezult\u0101tiem.<\/p>\n<p> piepras\u012bjumi sekund\u0113 <\/p>\n<p><strong>paralelizms<\/strong><br \/>\n<strong>iterat\u012bvais<\/strong><br \/>\n<strong>forku<\/strong><br \/>\n<strong>priek\u0161-fork<\/strong><br \/>\n<strong>pl\u016bsmu<\/strong><br \/>\n<strong>priek\u0161-pl\u016bsmu<\/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 \/>\nliels izklied\u0113jums<br \/>\n2138<\/p>\n<p>5000<br \/>\n\u2013<br \/>\nliels izklied\u0113jums<br \/>\n1600<br \/>\n1100<br \/>\n2519<br \/>\n\u2013<br \/>\n2235<\/p>\n<p>8000<br \/>\n\u2013<br \/>\n\u2013<br \/>\n1200<br \/>\nliels izklied\u0113jums<br \/>\n2451<br \/>\n\u2013<br \/>\n2100<\/p>\n<p>10\u00a0000<br \/>\n\u2013<br \/>\n\u2013<br \/>\nliels izklied\u0113jums<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>\nNo grafika un tabulas ir redzams, ka virs 8000 vienlaic\u012bgiem piepras\u012bjumiem paliek tikai divi dal\u012bbnieki: priek\u0161-fork un epoll. Pieaugot slodzei, serveris, kas balst\u012bts uz poll, darbojas slikt\u0101k nek\u0101 pl\u016bsmu b\u0101z\u0113ts. Arhitekt\u016bra ar iepriek\u0161\u0113ju pl\u016bsmu rada cien\u012bgu konkurenci epoll: t\u0101 liecina par to, cik labi Linux kodols pl\u0101no lielu skaitu pl\u016bsmu.<\/p>\n<h1>ZeroHTTPd avota kods<\/h1>\n<p>\nZeroHTTPd avota kods <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/shuveb\/zerohttpd\">\u0161eit<\/a><\/noindex>. Katrai arhitekt\u016brai ir atsevi\u0161\u0137a mape.<\/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>\nPapildus septi\u0146\u0101m direktorij\u0101m vis\u0101m arhitekt\u016br\u0101m augst\u0101k\u0101 l\u012bme\u0146a katalog\u0101 ir v\u0113l divas: public un templates. Pirmaj\u0101 atrodas fails index.html un att\u0113ls no pirm\u0101 ekr\u0101nuz\u0146\u0113muma. Tur var novietot citus failus un mapes, un ZeroHTTPd bez probl\u0113m\u0101m izsniegs \u0161os statiskos failus. Ja ce\u013c\u0161 p\u0101rl\u016bkprogramm\u0101 atbilst ce\u013cam map\u0113 public, tad ZeroHTTPd mekl\u0113 \u0161aj\u0101 katalog\u0101 failu index.html. Saturs viesu gr\u0101matai tiek \u0123ener\u0113ts dinamiski. Tam ir tikai s\u0101kumlapa, un t\u0101s saturs balst\u0101s uz failu 'templates\/guestbook\/index.html'. ZeroHTTPd ir viegli pievienot dinamiskas lapas papla\u0161in\u0101\u0161anai. Ideja ir t\u0101da, ka lietot\u0101ji var pievienot \u0161aj\u0101 katalog\u0101 veidnes un papla\u0161in\u0101t ZeroHTTPd p\u0113c vajadz\u012bbas.<\/p>\n<p>Lai uzb\u016bv\u0113tu visus septi\u0146us serverus, palaidiet <code>make all<\/code> no aug\u0161\u0113j\u0101 kataloga - un visi veidlapas par\u0101d\u012bsies \u0161aj\u0101 katalog\u0101. Izpild\u0101mos failus mekl\u0113 mapes public un templates taj\u0101 map\u0113, no kuras tos palaid\u012bs.<\/p>\n<h1>Linux API<\/h1>\n<p>\nLai saprastu inform\u0101ciju \u0161aj\u0101 rakstu cikl\u0101, nav oblig\u0101ti j\u0101p\u0101rzina Linux API. Tom\u0113r iesaku izlas\u012bt vair\u0101k par \u0161o t\u0113mu, internet\u0101 ir daudz resursu. Lai gan m\u0113s pieskarsimies vair\u0101k\u0101m kategorij\u0101m Linux API, m\u016bsu uzman\u012bba galvenok\u0101rt tiks velt\u012bta procesiem, pavedieniem, notikumiem un t\u012bkla stekiem. Papildus gr\u0101mat\u0101m un rakstiem par Linux API iesaku ar\u012b izlas\u012bt manu par sist\u0113mas izsaukumiem un izmantotaj\u0101m bibliot\u0113ku funkcij\u0101m.<\/p>\n<h1>Veiktsp\u0113ja un m\u0113rogojam\u012bba<\/h1>\n<p>\nViena piez\u012bme par veiktsp\u0113ju un m\u0113rogojam\u012bbu. Teor\u0113tiski starp t\u0101m nav nek\u0101das saist\u012bbas. Jums var b\u016bt t\u012bmek\u013ca pakalpojums, kas darbojas \u013coti labi, ar atbildes laiku da\u017e\u0101s milisekund\u0113s, bet tas visp\u0101r neskalojas. Tie\u0161i t\u0101pat var b\u016bt slikti darbojo\u0161s t\u012bmek\u013ca lietojums, kuram nepiecie\u0161amas vair\u0101kas sekundes atbildei, bet tas m\u0113rogojas desmitos, lai apstr\u0101d\u0101tu desmitiem t\u016bksto\u0161u vienlaic\u012bgu lietot\u0101ju. Tom\u0113r augstas veiktsp\u0113jas un m\u0113rogojam\u012bbas kombin\u0101cija ir \u013coti jaud\u012bga kombin\u0101cija. Augstas veiktsp\u0113jas lietojumi parasti ekonomiski izmanto resursus un t\u0101d\u0113j\u0101di efekt\u012bvi apkalpo vair\u0101kus vienlaic\u012bgus lietot\u0101jus server\u012b, samazinot izmaksas.<\/p>\n<h1>CPU un I\/O uzdevumi<\/h1>\n<p>\nVisbeidzot, skait\u013co\u0161an\u0101 ir divi iesp\u0113jamie uzdevumu veidi: I\/O un CPU. Piepras\u012bjumu sa\u0146em\u0161ana internet\u0101 (t\u012bkla ievade\/izveide), failu apkalpo\u0161ana (t\u012bkla un diska ievade\/izveide), sazi\u0146a ar datu b\u0101zi (t\u012bkla un diska ievade\/izveide) \u2014 tas viss ir I\/O darb\u012bbas. Da\u017ei datu b\u0101zes piepras\u012bjumi var nedaudz noslogot CPU (sacens\u012bba, vid\u0113j\u0101 v\u0113rt\u012bba no miljoniem rezult\u0101tu utt.). Liel\u0101k\u0101 da\u013ca t\u012bmek\u013ca lietojumprogrammu ir ierobe\u017eotas atbilsto\u0161i maksim\u0101li iesp\u0113jamiem I\/O, kam\u0113r procesors reti tiek izmantots piln\u0101 jaud\u0101. Kad redzat, ka k\u0101d\u0101 I\/O uzdevum\u0101 tiek izmantots daudz CPU, visticam\u0101k, tas nor\u0101da uz sliktu lietojumprogrammas arhitekt\u016bru. Tas var noz\u012bm\u0113t, ka CPU resursi tiek t\u0113r\u0113ti procesu p\u0101rvald\u012bbai un konteksta mai\u0146ai\u00a0\u2014 un tas nav glu\u017ei noder\u012bgi. Ja j\u016bs veicat kaut ko l\u012bdz\u012bgu att\u0113lu apstr\u0101dei, audio failu konvert\u0113\u0161anai vai ma\u0161\u012bnm\u0101c\u012b\u0161anai, tad lietojumprogramma prasa jaud\u012bgus CPU resursus. Tom\u0113r liel\u0101kajai da\u013cai lietojumprogrammu tas t\u0101 nav.<\/p>\n<h1>S\u012bk\u0101ka inform\u0101cija par serveru arhitekt\u016br\u0101m<\/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\/\">1. da\u013ca. Iterat\u012bv\u0101 arhitekt\u016bra<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/unixism.net\/2019\/04\/28\/linux-applications-performance-part-ii-forking-servers\/\">2. da\u013ca. Fork-serveri<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/unixism.net\/2019\/04\/28\/linux-applications-performance-part-iii-preforked-servers\/\">3. da\u013ca. Pre-fork serveri<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/unixism.net\/2019\/04\/28\/linux-applications-performance-part-iv-threaded-servers\/\">4. da\u013ca. Serveri ar izpildes pavedieniem<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/unixism.net\/2019\/04\/28\/linux-applications-performance-part-v-pre-threaded-servers\/\">5. da\u013ca. Serveri ar iepriek\u0161\u0113ju pavedienu izveidi<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/unixism.net\/2019\/04\/28\/linux-applications-performance-part-vi-polling-servers\/\">6. da\u013ca. Arhitekt\u016bra, kas balst\u012bta uz poll<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/unixism.net\/2019\/04\/28\/linux-applications-performance-part-vii-epoll-servers\/\">7. da\u013ca. Arhitekt\u016bra, kas balst\u012bta uz epoll<\/a><\/noindex><\/li>\n<\/ol>\n<p>Avots: <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.5 - 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\/lv\/blog\/administrirovanie\/proizvoditelnost-setevyh-prilozhenij-linux-vvedenie\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.5\" \/>\n\t\t<meta property=\"og:locale\" content=\"lv_LV\" \/>\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\/lv\/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\udd47Lietojumprogrammu t\u012bkla veiktsp\u0113ja Linux. Ievads | ProHoster","description":"T\u012bmek\u013ca lietojumi pa\u0161laik tiek izmantoti visur, un starp visiem p\u0101rvades protokoliem liel\u0101ko da\u013cu aiz\u0146em HTTP.","canonical_url":"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/proizvoditelnost-setevyh-prilozhenij-linux-vvedenie","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"lv_LV","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\/lv\/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\/lv\/wp-json\/wp\/v2\/posts\/35106","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/comments?post=35106"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts\/35106\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/media?parent=35106"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/categories?post=35106"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/tags?post=35106"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}