{"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\/sv\/blog\/administrirovanie\/proizvoditelnost-setevyh-prilozhenij-linux-vvedenie","title":{"rendered":"Prestanda f\u00f6r n\u00e4tapplikationer i Linux. Introduktion","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Webbapplikationer anv\u00e4nds nu \u00f6verallt, och bland alla transportprotokoll st\u00e5r HTTP f\u00f6r en stor del. N\u00e4r man studerar detaljerna i webbapplikationsutveckling \u00e4gnar de flesta mycket lite uppm\u00e4rksamhet \u00e5t operativsystemet d\u00e4r dessa applikationer faktiskt k\u00f6rs. Separationen av utveckling (Dev) och drift (Ops) har bara f\u00f6rv\u00e4rrat situationen. Men med spridningen av DevOps-kulturen b\u00f6rjar utvecklare ta ansvar f\u00f6r att k\u00f6ra sina applikationer i molnet, s\u00e5 det \u00e4r mycket anv\u00e4ndbart f\u00f6r dem att f\u00f6rst\u00e5 operativsystemets backend i detalj. Detta \u00e4r s\u00e4rskilt v\u00e4rdefullt om du f\u00f6rs\u00f6ker implementera ett system f\u00f6r tusentals eller tiotusentals samtidiga anslutningar.<\/p>\n<p>Begr\u00e4nsningar i webbservrar liknar mycket begr\u00e4nsningar i andra applikationer. Oavsett om det handlar om lastbalanserare eller databasservrar, har alla dessa applikationer liknande problem i h\u00f6gpresterande milj\u00f6er. Att f\u00f6rst\u00e5 dessa grundl\u00e4ggande begr\u00e4nsningar och s\u00e4tt att \u00f6vervinna dem kommer generellt att m\u00f6jligg\u00f6ra en uppskattning av prestandan och skalbarheten hos dina webbapplikationer.<\/p>\n<p>Jag skriver denna serie artiklar som svar p\u00e5 fr\u00e5gor fr\u00e5n unga utvecklare som vill bli v\u00e4l informerade systemarkitekter. Det \u00e4r om\u00f6jligt att tydligt f\u00f6rst\u00e5 metoder f\u00f6r optimering av Linux-applikationer utan att dyka ner i grunderna f\u00f6r hur de fungerar p\u00e5 operativsystemsniv\u00e5. \u00c4ven om det finns m\u00e5nga typer av applikationer, vill jag i denna cykel utforska n\u00e4tverksapplikationer snarare \u00e4n station\u00e4ra, som webbl\u00e4sare eller textredigerare. Detta material riktar sig till utvecklare och arkitekter som vill f\u00f6rst\u00e5 hur Linux- eller Unix-program fungerar och hur de struktureras f\u00f6r h\u00f6g prestanda.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nLinux \u00e4r en <i>serverbaserad<\/i> operativsystem, och oftast k\u00f6rs dina applikationer just p\u00e5 detta OS. \u00c4ven om jag s\u00e4ger \"Linux\", kan du n\u00e4stan alltid med s\u00e4kerhet anta att det syftar p\u00e5 alla Unix-liknande operativsystem i allm\u00e4nhet. Jag har dock inte testat den medf\u00f6ljande koden p\u00e5 andra system. S\u00e5 om du \u00e4r intresserad av FreeBSD eller OpenBSD kan resultaten variera. N\u00e4r jag testar n\u00e5got som \u00e4r specifikt f\u00f6r Linux, markerar jag det.<\/p>\n<p>\u00c4ven om du kan anv\u00e4nda den kunskap du f\u00e5r f\u00f6r att skapa en applikation fr\u00e5n grunden och att den kan bli v\u00e4loptimerad, \u00e4r det b\u00e4st att undvika det. Om du skriver en ny webbserver i C eller C++ f\u00f6r ditt f\u00f6retags aff\u00e4rsapplikation, kan det bli din sista dag p\u00e5 jobbet. Men att ha kunskap om strukturen hos dessa applikationer kommer att hj\u00e4lpa vid valet av redan existerande program. Du kommer att kunna j\u00e4mf\u00f6ra system baserat p\u00e5 processer med system baserade p\u00e5 tr\u00e5dar, liksom h\u00e4ndelsebaserade system. Du kommer att f\u00f6rst\u00e5 och uppskatta varf\u00f6r Nginx fungerar b\u00e4ttre \u00e4n Apache httpd, och varf\u00f6r en Python-applikation baserad p\u00e5 Tornado kan hantera fler anv\u00e4ndare j\u00e4mf\u00f6rt med en Python-applikation baserad p\u00e5 Django.<\/p>\n<h1>ZeroHTTPd: utbildningsverktyg<\/h1>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/shuveb\/zerohttpd\">ZeroHTTPd<\/a><\/noindex>\u00a0\u2014 en webbserver som jag har skrivit fr\u00e5n grunden i C som ett utbildningsverktyg. Den har inga externa beroenden, inklusive tillg\u00e5ng till Redis. Vi k\u00f6r v\u00e5ra egna Redis-rutiner. L\u00e4s mer nedan.<\/p>\n<p>\u00c4ven om vi skulle kunna diskutera teorin l\u00e4nge, finns det inget b\u00e4ttre \u00e4n att skriva kod, k\u00f6ra den och j\u00e4mf\u00f6ra alla serverarkitekturer. Det \u00e4r den mest visuella metoden. D\u00e4rf\u00f6r kommer vi att skriva en enkel webbserver, ZeroHTTPd, med varje modell: baserat p\u00e5 processer, tr\u00e5dar och h\u00e4ndelser. Vi kommer att testa var och en av dessa servrar och se hur de fungerar j\u00e4mf\u00f6rt med varandra. ZeroHTTPd \u00e4r implementerad i en enda C-fil. Servern f\u00f6r h\u00e4ndelsehantering inkluderar <noindex><a rel=\"nofollow\" href=\"https:\/\/troydhanson.github.io\/uthash\/\">uthash<\/a><\/noindex>, en utm\u00e4rkt implementation av en hash-tabell som levereras i en enda header-fil. I \u00f6vrigt finns inga beroenden f\u00f6r att inte komplicera projektet.<\/p>\n<p>Koden inneh\u00e5ller m\u00e5nga kommentarer f\u00f6r att hj\u00e4lpa till att f\u00f6rst\u00e5. Som en enkel webbserver i n\u00e5gra f\u00e5 rader kod \u00e4r ZeroHTTPd ocks\u00e5 en minimal ram f\u00f6r webbutveckling. Den har begr\u00e4nsad funktionalitet, men den kan leverera statiska filer och mycket enkla \"dynamiska\" sidor. Jag m\u00e5ste s\u00e4ga att ZeroHTTPd \u00e4r v\u00e4l l\u00e4mpad f\u00f6r att l\u00e4ra sig hur man skapar h\u00f6gpresterande Linux-applikationer. I huvudsak v\u00e4ntar de flesta webbservrar p\u00e5 f\u00f6rfr\u00e5gningar, verifierar dem och bearbetar dem. Det \u00e4r precis vad ZeroHTTPd kommer att g\u00f6ra. Det \u00e4r ett verktyg f\u00f6r utbildning, inte f\u00f6r produktion. Det \u00e4r inte bra p\u00e5 felhantering och kommer troligen inte att skryta med b\u00e4sta s\u00e4kerhetspraxis (\u00e5h ja, jag anv\u00e4nde <code>strcpy<\/code>) eller kr\u00e5ngliga tricks med C-spr\u00e5ket. Men jag hoppas att det kommer att klara uppgiften bra.<\/p>\n<p><img decoding=\"async\" alt=\"Prestanda f\u00f6r n\u00e4tapplikationer i Linux. Introduktion\" src=\"\/wp-content\/uploads\/33fd0a5353667001523d5d4c8ada9ecf.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Startsidan f\u00f6r ZeroHTTPd. Den kan leverera olika typer av filer, inklusive bilder<\/i><\/p>\n<h1>G\u00e4stboksapplikation<\/h1>\n<p>\nModerna webbapplikationer \u00e4r vanligtvis inte begr\u00e4nsade till statiska filer. De har komplexa interaktioner med olika databaser, cachear, osv. D\u00e4rf\u00f6r kommer vi att skapa en enkel webbapplikation som heter \"G\u00e4stbok\", d\u00e4r bes\u00f6kare l\u00e4mnar meddelanden under sina namn. G\u00e4stboken sparar tidigare l\u00e4mnade meddelanden. Det finns ocks\u00e5 en bes\u00f6ksr\u00e4knare l\u00e4ngst ner p\u00e5 sidan.<\/p>\n<p><img decoding=\"async\" alt=\"Prestanda f\u00f6r n\u00e4tapplikationer i Linux. Introduktion\" src=\"\/wp-content\/uploads\/ed8e828e8567d3d114875520988742d7.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Webbapplikationen \"G\u00e4stbok\" f\u00f6r ZeroHTTPd<\/i><\/p>\n<p>Bes\u00f6ksr\u00e4knaren och meddelandena i g\u00e4stboken lagras i Redis. F\u00f6r kommunikation med Redis har vi implementerat egna procedurer som inte \u00e4r beroende av externa bibliotek. Jag \u00e4r ingen stort fan av att lansera hemgjord kod n\u00e4r det finns offentliga och v\u00e4l testade l\u00f6sningar. Men m\u00e5let med ZeroHTTPd \u00e4r att studera prestanda i Linux och tillg\u00e5ng till externa tj\u00e4nster, medan hanteringen av HTTP-f\u00f6rfr\u00e5gningar allvarligt p\u00e5verkar prestandan. Vi m\u00e5ste ha full kontroll \u00f6ver kommunikationen med Redis i varje v\u00e5r serverarkitektur. I en arkitektur anv\u00e4nder vi blockerande anrop, i andra h\u00e4ndelsebaserade procedurer. Anv\u00e4ndning av ett externt Redis-klientbibliotek kommer inte att ge den kontroll vi beh\u00f6ver. Dessutom utf\u00f6r v\u00e5r lilla Redis-klient bara n\u00e5gra f\u00e5 funktioner (h\u00e4mta, st\u00e4lla in och \u00f6ka nyckeln; h\u00e4mta och l\u00e4gga till i en array). Dessutom \u00e4r Redis-protokollet oerh\u00f6rt elegant och enkelt. Man beh\u00f6ver faktiskt inte l\u00e4ra sig det specifikt. Faktumet att hela arbetet protokollet utf\u00f6rs i ungef\u00e4r hundra rader kod talar f\u00f6r hur v\u00e4l genomt\u00e4nkt det \u00e4r.<\/p>\n<p>F\u00f6ljande bild visar applikationens aktiviteter n\u00e4r klienten (webbl\u00e4saren) g\u00f6r en beg\u00e4ran <code>\/guestbookURL<\/code>.<\/p>\n<p><img decoding=\"async\" alt=\"Prestanda f\u00f6r n\u00e4tapplikationer i Linux. Introduktion\" src=\"\/wp-content\/uploads\/5c5e6740419384b7232aeead95db491b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Hur g\u00e4stboksapplikationen fungerar<\/i><\/p>\n<p>N\u00e4r en g\u00e4stboksida ska returneras g\u00f6rs ett anrop till filsystemet f\u00f6r att l\u00e4sa in mallen i minnet och tre n\u00e4tverksanrop till Redis. Mallfilen inneh\u00e5ller st\u00f6rsta delen av HTML-inneh\u00e5llet f\u00f6r sidan i sk\u00e4rmdumpen l\u00e4ngst upp. Det finns ocks\u00e5 speciella platsh\u00e5llare f\u00f6r den dynamiska delen av inneh\u00e5llet: poster och bes\u00f6ksr\u00e4knare. Vi h\u00e4mtar dem fr\u00e5n Redis, infogar dem p\u00e5 sidan och levererar helt f\u00e4rdigt inneh\u00e5ll till klienten. Det tredje Redis-anropet kan undvikas, eftersom Redis returnerar det nya v\u00e4rdet f\u00f6r nyckeln vid varje \u00f6kning. Men f\u00f6r v\u00e5r server med en asynkron h\u00e4ndelsebaserad arkitektur \u00e4r m\u00e5nga n\u00e4tverksanrop en bra utmaning f\u00f6r utbildningssyften. D\u00e4rf\u00f6r sl\u00e4pper vi det returnerade v\u00e4rdet fr\u00e5n Redis om antalet bes\u00f6kare och beg\u00e4r det med ett separat anrop.<\/p>\n<h1>ZeroHTTPd-serverarkitekturer<\/h1>\n<p>\nVi bygger sju versioner av ZeroHTTPd med samma funktionalitet men olika arkitekturer:<\/p>\n<ul>\n<li>Iterativ\n<\/li>\n<li>Fork-server (en underprocess per anrop)\n<\/li>\n<li>Pre-fork-server (f\u00f6rhandsforkning av processer)\n<\/li>\n<li>Server med tr\u00e5dar (en tr\u00e5d per anrop)\n<\/li>\n<li>Server med f\u00f6rskapat tr\u00e5dar\n<\/li>\n<li>Arkitektur baserad p\u00e5 <code>poll()<\/code>\n<\/li>\n<li>Arkitektur baserad p\u00e5 <code>epoll<\/code><\/li>\n<\/ul>\n<p>\nVi m\u00e4ter prestandan f\u00f6r varje arkitektur genom att belasta servern med HTTP-anrop. Men vid j\u00e4mf\u00f6relse av arkitekturer med h\u00f6g parallellism \u00f6kar antalet anrop. Vi testar tre g\u00e5nger och r\u00e4knar medelv\u00e4rdet.<\/p>\n<h1>Testmetodik<\/h1>\n<p>\n<img decoding=\"async\" alt=\"Prestanda f\u00f6r n\u00e4tapplikationer i Linux. Introduktion\" src=\"\/wp-content\/uploads\/aa4f337b6e90fa032fbef5374fac8f53.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Inst\u00e4llning f\u00f6r belastningstest av ZeroHTTPd<\/i> <\/p>\n<p>Det \u00e4r viktigt att vid genomf\u00f6randet av testerna inte alla komponenter k\u00f6rs p\u00e5 samma maskin. I s\u00e5 fall b\u00e4r operativsystemet p\u00e5 extra overhead f\u00f6r schemal\u00e4ggning, eftersom komponenterna t\u00e4vlar om CPU-resurser. Att m\u00e4ta operativsystemets overhead med varje av de valda serverarkitekturerna \u00e4r ett av de mest avg\u00f6rande m\u00e5len med denna \u00f6vning. Att l\u00e4gga till fler variabler kan vara skadligt f\u00f6r processen. D\u00e4rf\u00f6r fungerar inst\u00e4llningen i bilden ovan b\u00e4st.<\/p>\n<h3>Vad g\u00f6r var och en av dessa servrar<\/h3>\n<p><\/p>\n<ul>\n<li>load.unixism.net: h\u00e4r k\u00f6r vi <code>ab<\/code>, verktyget Apache Benchmark. Det genererar den belastning som beh\u00f6vs f\u00f6r att testa v\u00e5ra serverarkitekturer.\n<\/li>\n<li>nginx.unixism.net: ibland vill vi k\u00f6ra mer \u00e4n ett instans av serverprogrammet. F\u00f6r detta fungerar Nginx-servern med r\u00e4tt inst\u00e4llningar som en belastningsbalanserare f\u00f6r inkommande trafik fr\u00e5n <i>ab<\/i> v\u00e5ra serverprocesser.\n<\/li>\n<li>zerohttpd.unixism.net: h\u00e4r k\u00f6r vi v\u00e5ra serverprogram p\u00e5 sju olika arkitekturer, en i taget.\n<\/li>\n<li>redis.unixism.net: p\u00e5 denna server k\u00f6rs Redis-demonen, d\u00e4r uppgifter f\u00f6r g\u00e4stboken och bes\u00f6karr\u00e4knaren lagras.<\/li>\n<\/ul>\n<p>\nAlla servrar arbetar p\u00e5 en enda CPU-k\u00e4rna. Id\u00e9n \u00e4r att bed\u00f6ma den maximala prestandan hos varje arkitektur. Eftersom alla serverprogram testas p\u00e5 samma h\u00e5rdvara, \u00e4r detta grundniv\u00e5n f\u00f6r j\u00e4mf\u00f6relse. Min testupps\u00e4ttning best\u00e5r av virtuella servrar hyrda fr\u00e5n Digital Ocean.<\/p>\n<h3>Vad m\u00e4ter vi?<\/h3>\n<p>\nOlika m\u00e5tt kan m\u00e4tas. Vi bed\u00f6mer prestandan hos varje arkitektur i denna konfiguration genom att belasta servrarna med f\u00f6rfr\u00e5gningar p\u00e5 olika niv\u00e5er av parallellism: belastningen \u00f6kar fr\u00e5n 20 till 15 000 samtidiga anv\u00e4ndare.<\/p>\n<h1>Testresultat<\/h1>\n<p>\nI det f\u00f6ljande diagrammet visas servernas prestanda p\u00e5 olika arkitekturer vid olika niv\u00e5er av parallellism. P\u00e5 y-axeln \u2014 antalet f\u00f6rfr\u00e5gningar per sekund, p\u00e5 x-axeln \u2014 parallella anslutningar.<\/p>\n<p><img decoding=\"async\" alt=\"Prestanda f\u00f6r n\u00e4tapplikationer i Linux. Introduktion\" src=\"\/wp-content\/uploads\/3415bcfb66503152d644130f68bd19da.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Prestanda f\u00f6r n\u00e4tapplikationer i Linux. Introduktion\" src=\"\/wp-content\/uploads\/ba457b671eb758f3226e0eeafaadc6aa.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Prestanda f\u00f6r n\u00e4tapplikationer i Linux. Introduktion\" src=\"\/wp-content\/uploads\/aea06856d61d4d4bdda9814c53a28d4a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNedan \u00e4r tabellen med resultaten.<\/p>\n<p> f\u00f6rfr\u00e5gningar per sekund <\/p>\n<p><strong>parallellism<\/strong><br \/>\n<strong>process.<\/strong><br \/>\n<strong>fork<\/strong><br \/>\n<strong>pre-fork<\/strong><br \/>\n<strong>tr\u00e5dad<\/strong><br \/>\n<strong>pre-tr\u00e5dad<\/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 \/>\nstor spridning<br \/>\n2138<\/p>\n<p>5000<br \/>\n\u2013<br \/>\nstor spridning<br \/>\n1600<br \/>\n1100<br \/>\n2519<br \/>\n\u2013<br \/>\n2235<\/p>\n<p>8000<br \/>\n\u2013<br \/>\n\u2013<br \/>\n1200<br \/>\nstor spridning<br \/>\n2451<br \/>\n\u2013<br \/>\n2100<\/p>\n<p>10\u00a0000<br \/>\n\u2013<br \/>\n\u2013<br \/>\nstor spridning<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>\nFr\u00e5n diagrammet och tabellen kan vi se att vid \u00f6ver 8000 samtidiga f\u00f6rfr\u00e5gningar kvarst\u00e5r bara tv\u00e5 akt\u00f6rer: pre-fork och epoll. Med \u00f6kande belastning presterar poll-baserade servrar s\u00e4mre \u00e4n tr\u00e5darna. Arkitekturen med f\u00f6rhandskapade tr\u00e5dar \u00e4r en v\u00e4rdig konkurrent till epoll: detta visar hur v\u00e4l Linux-k\u00e4rnan planerar ett stort antal tr\u00e5dar.<\/p>\n<h1>K\u00e4llkoden f\u00f6r ZeroHTTPd<\/h1>\n<p>\nK\u00e4llkoden f\u00f6r ZeroHTTPd <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/shuveb\/zerohttpd\">h\u00e4r<\/a><\/noindex>. F\u00f6r varje arkitektur finns en separat katalog.<\/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>\n\u041a\u0440\u043e\u043c\u0435 \u0441\u0435\u043c\u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440, \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0435\u0441\u0442\u044c \u0435\u0449\u0451 \u0434\u0432\u0435: public \u0438 templates. \u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u043b\u0435\u0436\u0438\u0442 \u0444\u0430\u0439\u043b index.html \u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0430. \u0422\u0443\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u0444\u0430\u0439\u043b\u044b \u0438 \u043f\u0430\u043f\u043a\u0438, \u0438 ZeroHTTPd \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0432\u044b\u0434\u0430\u0442\u044c \u044d\u0442\u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0444\u0430\u0439\u043b\u044b. \u0415\u0441\u043b\u0438 path \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u0443\u0442\u0438 \u0432 \u043f\u0430\u043f\u043a\u0435 public, \u0442\u043e ZeroHTTPd \u0438\u0449\u0435\u0442 \u0432 \u044d\u0442\u043e\u043c \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 \u0444\u0430\u0439\u043b index.html. \u041a\u043e\u043d\u0442\u0435\u043d\u0442 \u0434\u043b\u044f \u0433\u043e\u0441\u0442\u0435\u0432\u043e\u0439 \u043a\u043d\u0438\u0433\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438. \u0423 \u043d\u0435\u0433\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430, \u0430 \u0435\u0451 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043e \u043d\u0430 \u0444\u0430\u0439\u043b\u0435 &#8216;templates\/guestbook\/index.html&#8217;. \u0412 ZeroHTTPd \u043b\u0435\u0433\u043a\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0434\u043b\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f. \u0418\u0434\u0435\u044f \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u044d\u0442\u043e\u043c \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0442\u044c ZeroHTTPd \u043f\u043e \u043c\u0435\u0440\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438.<\/p>\n<p>F\u00f6r att bygga alla sju servrar, k\u00f6r <code>make all<\/code> fr\u00e5n rotkatalogen \u2013 och alla byggnationer kommer att dyka upp i denna katalog. Exekverbara filer s\u00f6ker i katalogerna public och templates i den katalog fr\u00e5n vilken de k\u00f6rs.<\/p>\n<h1>Linux API<\/h1>\n<p>\nF\u00f6r att f\u00f6rst\u00e5 informationen i denna artikelserie beh\u00f6ver man inte vara s\u00e4rskilt insatt i Linux API. Jag rekommenderar dock att l\u00e4sa mer om detta \u00e4mne, det finns m\u00e5nga referensresurser p\u00e5 n\u00e4tet. \u00c4ven om vi kommer att ber\u00f6ra flera kategorier av Linux API, kommer v\u00e5rt fokus huvudsakligen att ligga p\u00e5 processer, tr\u00e5dar, h\u00e4ndelser och n\u00e4tverksstacken. Ut\u00f6ver b\u00f6cker och artiklar om Linux API, rekommenderar jag \u00e4ven att l\u00e4sa man-sidorna f\u00f6r systemanrop och de anv\u00e4nda biblioteksfunktionerna.<\/p>\n<h1>Prestanda och skalbarhet<\/h1>\n<p>\nEn observation ang\u00e5ende prestanda och skalbarhet. Teoretiskt sett finns det ingen koppling mellan dem. Du kan ha en webbservice som fungerar mycket bra, med svarstid p\u00e5 n\u00e5gra millisekunder, men den \u00e4r \u00f6verhuvudtaget inte skalbar. P\u00e5 samma s\u00e4tt kan det finnas en webbapplikation som fungerar d\u00e5ligt och kr\u00e4ver flera sekunder f\u00f6r att svara, men den kan skalas till tiotals f\u00f6r att hantera tiotusentals samtidiga anv\u00e4ndare. Trots detta \u00e4r en kombination av h\u00f6g prestanda och skalbarhet en mycket kraftfull kombination. H\u00f6gpresterande applikationer anv\u00e4nder generellt sett resurser sparsamt och kan d\u00e4rmed effektivt betj\u00e4na fler samtidiga anv\u00e4ndare p\u00e5 servern, vilket s\u00e4nker kostnaderna.<\/p>\n<h1>CPU- och I\/O-uppgifter<\/h1>\n<p>\nI ber\u00e4kningar finns det alltid tv\u00e5 m\u00f6jliga typer av uppgifter: f\u00f6r I\/O och CPU. Att h\u00e4mta f\u00f6rfr\u00e5gningar via internet (n\u00e4tverksin- och utmatning), hantera filer (n\u00e4tverks- och disk I\/O), kommunicera med databasen (n\u00e4tverks- och disk I\/O) - allt detta \u00e4r I\/O-\u00e5tg\u00e4rder. Vissa databasf\u00f6rfr\u00e5gningar kan n\u00e5got belasta CPU:n (sortering, ber\u00e4kning av genomsnittet av en miljon resultat osv.). De flesta webbapplikationer \u00e4r begr\u00e4nsade av maximalt m\u00f6jliga I\/O, medan processorn s\u00e4llan anv\u00e4nds p\u00e5 full kapacitet. N\u00e4r du ser att en viss I\/O-uppgift anv\u00e4nder mycket CPU, \u00e4r det troligtvis ett tecken p\u00e5 d\u00e5lig applikationsarkitektur. Det kan inneb\u00e4ra att CPU-resurser spenderas p\u00e5 processhantering och kontextv\u00e4xling - vilket inte \u00e4r s\u00e4rskilt anv\u00e4ndbart. Om du g\u00f6r n\u00e5got som bildbehandling, konvertering av ljudfiler eller maskininl\u00e4rning, kr\u00e4ver applikationen d\u00e5 kraftfulla CPU-resurser. Men f\u00f6r de flesta applikationer \u00e4r det inte fallet.<\/p>\n<h1>Mer om serverarkitekturer<\/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\/\">Del I. Iterativ arkitektur<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/unixism.net\/2019\/04\/28\/linux-applications-performance-part-ii-forking-servers\/\">Del II. Fork-servrar<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/unixism.net\/2019\/04\/28\/linux-applications-performance-part-iii-preforked-servers\/\">Del III. Pre-fork servrar<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/unixism.net\/2019\/04\/28\/linux-applications-performance-part-iv-threaded-servers\/\">Del IV. Servrar med tr\u00e5dar<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/unixism.net\/2019\/04\/28\/linux-applications-performance-part-v-pre-threaded-servers\/\">Del V. Servrar med f\u00f6rhandsuppskattade tr\u00e5dar<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/unixism.net\/2019\/04\/28\/linux-applications-performance-part-vi-polling-servers\/\">Del VI. Arkitektur baserad p\u00e5 poll<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/unixism.net\/2019\/04\/28\/linux-applications-performance-part-vii-epoll-servers\/\">Del VII. Arkitektur baserad p\u00e5 epoll<\/a><\/noindex><\/li>\n<\/ol>\n<p>K\u00e4lla: <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.4 - 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\/sv\/blog\/administrirovanie\/proizvoditelnost-setevyh-prilozhenij-linux-vvedenie\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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\/sv\/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\udd47Prestanda f\u00f6r n\u00e4tverksapplikationer i Linux. Introduktion | ProHoster","description":"Webbapplikationer anv\u00e4nds numera \u00f6verallt, och bland alla transportprotokoll st\u00e5r HTTP f\u00f6r en stor del.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/proizvoditelnost-setevyh-prilozhenij-linux-vvedenie","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/35106","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=35106"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/35106\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=35106"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=35106"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=35106"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}