{"id":89110,"date":"2020-07-18T19:42:10","date_gmt":"2020-07-18T17:42:10","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/obshhij-obzor-arhitektury-servisa-dlya-oczenki-vneshnosti-na-osnove-nejronnyh-setej"},"modified":"2020-07-18T19:42:10","modified_gmt":"2020-07-18T17:42:10","slug":"obshhij-obzor-arhitektury-servisa-dlya-oczenki-vneshnosti-na-osnove-nejronnyh-setej","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/obshhij-obzor-arhitektury-servisa-dlya-oczenki-vneshnosti-na-osnove-nejronnyh-setej","title":{"rendered":"Teenuse arhitektuuri \u00fcld\u00fclevaade, et hinnata v\u00e4list ilmet p\u00f5hinevalt n\u00e4rviv\u00f5rkudel","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Teenuse arhitektuuri \u00fcld\u00fclevaade, et hinnata v\u00e4list ilmet p\u00f5hinevalt n\u00e4rviv\u00f5rkudel\" src=\"\/wp-content\/uploads\/2020\/07\/f624e995fbee3496f1f7890b98106df4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>Sissejuhatus<\/h2>\n<p><\/p>\n<p>Tere!<\/p>\n<p><\/p>\n<p>Selles artiklis jagan kogemusi mikroteenuste arhitektuuri loomisel projektile, mis kasutab tehisn\u00e4rviv\u00f5rke.<\/p>\n<p><\/p>\n<p>R\u00e4\u00e4gime arhitektuuri n\u00f5uetest, vaatame erinevaid struktuuri diagramme, anal\u00fc\u00fcsime iga valmis arhitektuuri komponendi ning hindame lahenduse tehnilisi m\u00f5\u00f5dikuid.<\/p>\n<p><\/p>\n<p>Head lugemist!<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>M\u00f5ned s\u00f5nad \u00fclesandest ja selle lahendusest<\/h2>\n<p><\/p>\n<p>Peamine idee on hinnata inimese atraktiivsust fotode p\u00f5hjal k\u00fcmne punkti s\u00fcsteemis.<\/p>\n<p><\/p>\n<p>Selles artiklis ei k\u00e4sitle me ei kasutatavaid tehisn\u00e4rviv\u00f5rke ega andmete ettevalmistamise ja treenimise protsessi. K\u00fcll aga naaseme \u00fches j\u00e4rgnevates publikatsioonides s\u00fcvitsi pipeline'i anal\u00fc\u00fcsi juurde.<\/p>\n<p><\/p>\n<p>Praegu l\u00e4bime pipeline'i \u00fclevaate, keskendudes mikroteenuste omavahelisele suhtlemisele projekti \u00fcldises arhitektuuris.\u00a0<\/p>\n<p><\/p>\n<p>Atraktiivsuse hindamise pipeline'i t\u00f6\u00f6tamisel oli \u00fclesanne dekomponeeritud j\u00e4rgmistesse osadesse:<\/p>\n<p><\/p>\n<ol>\n<li>N\u00e4gude eristamine fotodel<\/li>\n<li>Iga n\u00e4o hindamine<\/li>\n<li>Tulemuse renderdamine<\/li>\n<\/ol>\n<p><\/p>\n<p>Esimene probleem lahendatakse eel\u00f5petatud <noindex><a rel=\"nofollow\" href=\"https:\/\/arxiv.org\/abs\/1604.02878\">MTCNN<\/a><\/noindex>. Teise jaoks treiti konvolutsiooniline n\u00e4rviv\u00f5rk PyTorchis, kasutades backbone'ina <noindex><a rel=\"nofollow\" href=\"https:\/\/arxiv.org\/abs\/1512.03385\">ResNet34<\/a><\/noindex> \u2013 tasakaalu \u00abkvaliteet \/ CPU-lt innfereerimise kiirus\u00bb<\/p>\n<p>\n<img decoding=\"async\" alt=\"Teenuse arhitektuuri \u00fcld\u00fclevaade, et hinnata v\u00e4list ilmet p\u00f5hinevalt n\u00e4rviv\u00f5rkudel\" src=\"\/wp-content\/uploads\/2020\/07\/181cc89a2cf5295bdcd4b838216f96d6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><i>T\u00f6\u00f6tluse hindamise funktsionaalne diagramm<\/i><\/p>\n<p><\/p>\n<h2>N\u00f5uete anal\u00fc\u00fcs projekti arhitektuurile<\/h2>\n<p><\/p>\n<p>Eluts\u00fckli <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Machine_learning\">ML<\/a><\/noindex> projekti etapid arhitektuuri ja mudeli juurutamise automatiseerimise osas on sageli \u00fched k\u00f5ige aegan\u00f5udvamad ning ressursimahukad.<\/p>\n<p>\n<img decoding=\"async\" alt=\"Teenuse arhitektuuri \u00fcld\u00fclevaade, et hinnata v\u00e4list ilmet p\u00f5hinevalt n\u00e4rviv\u00f5rkudel\" src=\"\/wp-content\/uploads\/2020\/07\/4949f217d31c863176122ed87b43a88c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><i>ML projekti eluts\u00fckkel<\/i><\/p>\n<p><\/p>\n<p>See projekt ei ole erand \u2013 otsustati, et hindamise t\u00f6\u00f6voog pakitakse veebiteenuseks, mille jaoks tuli s\u00fcveneda arhitektuuri. M\u00e4\u00e4ratleti j\u00e4rgmised p\u00f5hiv n\u00f5uded:<\/p>\n<p><\/p>\n<ol>\n<li>\u00dchtne logide salvestamine \u2013 k\u00f5ik teenused peavad kirjutama logid \u00fchte kohta, neid peab olema mugav anal\u00fc\u00fcsida<\/li>\n<li>Hindamisteenuse horisontaalne skaleeritavus \u2013 kui t\u00f5en\u00e4olisem Bottleneck<\/li>\n<li>Iga pildi hindamiseks tuleb eraldada sama palju CPU ressursse \u2013 et v\u00e4ltida infereerimise aja jaotuses k\u00f5rvalekaldeid<\/li>\n<li>Kiire (taas)juurutamine nii konkreetsete teenuste kui ka kogu st\u00e4ki jaoks<\/li>\n<li>V\u00f5imalus kasutada vajadusel erinevates teenustes \u00fchiseid objekte<\/li>\n<\/ol>\n<p><\/p>\n<h2>Arhitektuur<\/h2>\n<p><\/p>\n<p>P\u00e4rast n\u00f5uete anal\u00fc\u00fcsi j\u00e4i selgeks, et mikroteenus arhitektuur sobitub praktiliselt ideaalselt.<\/p>\n<p><\/p>\n<p>Liigne peavalu v\u00e4ltimiseks valiti frontendiks Telegram API.<\/p>\n<p><\/p>\n<p>Alustuseks vaatame valminud arhitektuuri struktuuridiagrammi, seej\u00e4rel liigume edasi iga komponendi kirjeldamise juurde ja formaliseerime eduka pildi t\u00f6\u00f6tlemise protsessi.<\/p>\n<p>\n<img decoding=\"async\" alt=\"Teenuse arhitektuuri \u00fcld\u00fclevaade, et hinnata v\u00e4list ilmet p\u00f5hinevalt n\u00e4rviv\u00f5rkudel\" src=\"\/wp-content\/uploads\/2020\/07\/163ec019341e9d71a1e0854c6026bd01.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><i>Valminud arhitektuuri struktuuridiagramm<\/i><\/p>\n<p><\/p>\n<p>R\u00e4\u00e4gime l\u00e4hemalt iga diagrammi komponendi kohta, m\u00e4\u00e4ratleme nende \u00fcksiku vastutuse pildi hindamise protsessis.<\/p>\n<p><\/p>\n<h3>Mikroslu\u017eba \u00abattrai-telegram-bot\u00bb<\/h3>\n<p><\/p>\n<p>See mikroslu\u017eba kapseldab k\u00f5ik suhtlused Telegram API-ga. T\u00f5stame esile 2 peamist stsenaariumi - t\u00f6\u00f6tamine kasutaja pildiga ja t\u00f6\u00f6tamine hindamise pipelini tulemusega. Vaatame m\u00f5lemat stsenaariumi \u00fcldiselt.<\/p>\n<p><\/p>\n<p>Kasutaja pildi saatmise korral:<\/p>\n<p><\/p>\n<ol>\n<li>Teostatakse filtreerimine, mis koosneb j\u00e4rgmistest kontrollidest:\n<ul>\n<li>Pildi optimaalse suuruse olemasolu<\/li>\n<li>Kasutaja piltide arv, mis juba j\u00e4rjekorras on<\/li>\n<\/ul>\n<\/li>\n<li>Esialgse filtreerimise l\u00e4bimise korral salvestatakse pilt docker mahutisse<\/li>\n<li>Ootele \u2018to_estimate\u2019 lisatakse \u00fclesanne, milles on muu hulgas pildi tee, mis asub meie mahutis<\/li>\n<li>Kui \u00fclaltoodud etapid on edukalt l\u00e4bitud, saab kasutaja teadet pildi t\u00f6\u00f6tlemise umbkaudse aja kohta, mis arvutatakse j\u00e4rjekorras olevate \u00fclesannete arvu p\u00f5hjal. Vigade korral teavitame kasutajat selgelt \u2013 saatmise teel teate, milles on kirjas, mis v\u00f5is valesti minna. <\/li>\n<\/ol>\n<p><\/p>\n<p>Samuti kuulab see mikroteenus, nagu celery t\u00f6\u00f6taja, j\u00e4rjekorda \u2018after_estimate\u2019, mis on m\u00f5eldud hindamisprotsessist l\u00e4binud \u00fclesannetele.<\/p>\n<p><\/p>\n<p>Uue \u00fclesande saamisel \u2018after_estimate\u2019:<\/p>\n<p><\/p>\n<ol>\n<li>Kui pilt on edukalt t\u00f6\u00f6deldud, saadame tulemuse kasutajale, kui mitte \u2013 teavitame veast<\/li>\n<li>Kustutame pildi, mis on hindamisprotsessi tulemus<\/li>\n<\/ol>\n<p><\/p>\n<h3>Hindamis mikroteenus \u2018attrai-estimator\u2019<\/h3>\n<p><\/p>\n<p>See mikroteenus on celery t\u00f6\u00f6taja ja sisaldab endas k\u00f5ike, mis on seotud pildi hindamise protsessiga. Siin on t\u00f6\u00f6 meetod \u00fchekordne \u2013 tutvustame seda.<\/p>\n<p><\/p>\n<p>Uue \u00fclesande saamisel \u2018to_estimate\u2019:<\/p>\n<p><\/p>\n<ol>\n<li>K\u00e4ime pildi l\u00e4bi hindamisprotsessi:\n<ol>\n<li>Laadime pildi m\u00e4llu<\/li>\n<li>Kohandame pildi soovitud suurusele<\/li>\n<li>Otsime k\u00f5ik n\u00e4od (MTCNN)<\/li>\n<li>Hindame k\u00f5iki n\u00e4gusid (pakkime selle punktis leitud n\u00e4od ja teeme ResNet34-ga j\u00e4reldused)<\/li>\n<li>Renderdame l\u00f5plikku pilti\n<ol>\n<li>Joonistame v\u00e4lja piirjooned<\/li>\n<li>Joonistame hinnangud<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<\/li>\n<li>Kustutame kasutaja (algse) pildi<\/li>\n<li>Salvestame hindamise v\u00e4ljundi<\/li>\n<li>Paneme \u00fclesande j\u00e4rjekorda \"after_estimate\", millele kuulab eeltoodud mikroteenus \"attrai-telegram-bot\"<\/li>\n<\/ol>\n<p><\/p>\n<h3>Graylog (+ mongoDB + Elasticsearch)<\/h3>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.graylog.org\/\">Graylog<\/a><\/noindex> on lahendus logide keskse haldamise jaoks. Antud projektis kasutati seda tema otseseks otstarbeks.<\/p>\n<p><\/p>\n<p>Valik langes just tema kasuks, mitte tuttava <noindex><a rel=\"nofollow\" href=\"https:\/\/www.elastic.co\/what-is\/elk-stack\">ELK<\/a><\/noindex> st\u00e4ki, mugavuse t\u00f5ttu t\u00f6\u00f6tamisel Pythonis. K\u00f5ik, mis on vajalik Graylogis logimiseks, on GELFTCPHandleri lisamine paketi <noindex><a rel=\"nofollow\" href=\"https:\/\/pypi.org\/project\/graypy\/\">graypy<\/a><\/noindex> juurde meie Python mikroteenuse teistele juur logijatele.<\/p>\n<p><\/p>\n<p>Mina, kui inimene, kes on varem t\u00f6\u00f6tanud vaid ELK st\u00e4kiga, sain Graylogiga t\u00f6\u00f6tamisel positiivse kogemuse. Ainus, mis pettumust valmistab, on Kibana funktsioonide \u00fcleolek Graylogi veebiliidese ees.<\/p>\n<p><\/p>\n<h3>RabbitMQ<\/h3>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/\">RabbitMQ<\/a><\/noindex> \u2014 on AMQP-protokollil p\u00f5hinev s\u00f5numite vahetus s\u00fcsteem.<\/p>\n<p><\/p>\n<p>Selles projektis kasutati seda <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.celeryproject.org\/en\/latest\/getting-started\/brokers\/#broker-overview\">k\u00f5ige stabiilsema ja aja jooksul t\u00f5estatud<\/a><\/noindex> vahendina Celery jaoks ning see t\u00f6\u00f6tas durable-re\u017eiimis.<\/p>\n<p><\/p>\n<h3>Redis<\/h3>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/redis.io\/\">Redis<\/a><\/noindex> \u2014 on NoSQL andmebaas, mis t\u00f6\u00f6tab \u201ev\u00f5ti \u2014 v\u00e4\u00e4rtus\u201d andmestruktuuridega.<\/p>\n<p><\/p>\n<p>M\u00f5nikord on vajalik kasutada erinevates python-mikroteenustes \u00fchiseid objekte, mis rakendavad m\u00f5ningaid andmestruktuure.<\/p>\n<p><\/p>\n<p>N\u00e4iteks Redis salvestab hashmap'i kujul \u201etelegram_user_id =&gt; aktiivsete \u00fclesannete arv j\u00e4rjekorras\u201d, mis v\u00f5imaldab piirata \u00fche kasutaja p\u00e4ringute arvu kindla v\u00e4\u00e4rtusega ja seel\u00e4bi v\u00e4ltida DoS-r\u00fcnnakuid.<\/p>\n<p><\/p>\n<h3>Formaliseerime pildi eduka t\u00f6\u00f6tlemise protsessi<\/h3>\n<p><\/p>\n<ol>\n<li>Kasutaja saadab pildi Telegrami boti<\/li>\n<li>\u00abattrai-telegram-bot\u00bb saab s\u00f5numi Telegram API-st ja anal\u00fc\u00fcsib seda<\/li>\n<li>Pilt lisatakse as\u00fcnkroonsesse j\u00e4rjekorda \u00abto_estimate\u00bb<\/li>\n<li>Kasutaja saab s\u00f5numi kavandatud hindamise ajast<\/li>\n<li>\u00abattrai-estimator\u00bb v\u00f5tab \u00fclesande j\u00e4rjekorrast \u00abto_estimate\u00bb, k\u00e4ivitab selle hindamispipeline'i ja edastab \u00fclesande j\u00e4rjekorda \u00abafter_estimate\u00bb<\/li>\n<li>\u00abattrai-telegram-bot\u00bb, mis kuulab j\u00e4rjekorda \u00abafter_estimate\u00bb, saadab tulemuse kasutajale<\/li>\n<\/ol>\n<p><\/p>\n<h2>DevOps<\/h2>\n<p><\/p>\n<p>L\u00f5puks, p\u00e4rast arhitektuuri \u00fclevaatamist, saab liikuda mitte v\u00e4hem huvitavasse ossa \u2014 DevOps<\/p>\n<p><\/p>\n<h3>Docker Swarm<\/h3>\n<p><\/p>\n<p>\u00a0<\/p>\n<p>\n<img decoding=\"async\" alt=\"Teenuse arhitektuuri \u00fcld\u00fclevaade, et hinnata v\u00e4list ilmet p\u00f5hinevalt n\u00e4rviv\u00f5rkudel\" src=\"\/wp-content\/uploads\/2020\/07\/ba539d1c8197c7961d6e5e6a5c7e83c6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.docker.com\/engine\/swarm\/\">Docker Swarm <\/a><\/noindex>\u00a0\u2014 klastreerimiss\u00fcsteem, mille funktsioon on rakendatud Docker Engine'is ja mis on valmis kasutamiseks.<\/p>\n<p><\/p>\n<p>Kasutades \u201eparve\u201d, saab meie klastri k\u00f5ik s\u00f5lmed jagada kaheks t\u00fc\u00fcbiks \u2013 worker ja manager. Esimese t\u00fc\u00fcbi masinatel k\u00e4ivitatakse konteinerigruppide (stekkide) rippmen\u00fc\u00fcd, teise t\u00fc\u00fcbi masinad vastutavad skaleerimise, tasakaalustamise ja <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.docker.com\/engine\/swarm\/#feature-highlights\">teiste \u00e4gedate funktsioonide<\/a><\/noindex>. Managers on vaikimisi ka worker'id.<\/p>\n<p>\n<img decoding=\"async\" alt=\"Teenuse arhitektuuri \u00fcld\u00fclevaade, et hinnata v\u00e4list ilmet p\u00f5hinevalt n\u00e4rviv\u00f5rkudel\" src=\"\/wp-content\/uploads\/2020\/07\/d195e2aab6d3552652102c2b5246abfc.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><i>Klastril on \u00fcks leader manager ja kolm worker'it<\/i><\/p>\n<p><\/p>\n<p>Klastri minimaalne suurus on 1 s\u00f5lm, ainus masin t\u00e4idab samaaegselt nii leader manager'i kui ka worker'i \u00fclesandeid. Projekti suurusest ja minimaalsetest n\u00f5uetest s\u00f5ltuva t\u00f6\u00f6kindluse osas tehti otsus kasutada just sellist l\u00e4henemist.<\/p>\n<p><\/p>\n<p>Kiirelt \u00f6eldes, alates esimesest tootmisest, mis toimus juuni keskpaiku, ei olnud mingeid probleeme seoses selle klastri korraldusega (kuid see ei t\u00e4henda, et selline korraldus oleks mingil kujul lubatav keskmise suurusega projektides, millele kehtivad t\u00f6\u00f6kindluse n\u00f5uded).<\/p>\n<p><\/p>\n<h3>Docker Stack<\/h3>\n<p><\/p>\n<p>Re\u017eiimis \u00abroja\u00bb vastutab stekkide (docker teenuste komplekti) juurutamise eest <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.docker.com\/engine\/reference\/commandline\/stack\/\">docker stack<\/a><\/noindex><\/p>\n<p><\/p>\n<p>See toetab docker-compose konfiguratsioone, v\u00f5imaldades lisaks kasutada juurutamisparameetreid.\u00a0\u00a0<\/p>\n<p><\/p>\n<p>N\u00e4iteks piiratud ressursside m\u00e4\u00e4ramine iga mikroteenuse instantsi jaoks (jagame N instantsi jaoks N protsessorituuma, mikroteenuses piirame PyTorch'iga kasutatavate tuumade arvu \u00fchega)<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">attrai_estimator:\n  image: 'erqups\/attrai_estimator:1.2'\n  deploy:\n    replicas: 4\n    resources:\n      limits:\n        cpus: '4'\n    restart_policy:\n      condition: on-failure\n      \u2026<\/code><\/pre>\n<p><\/p>\n<p>Oluline on m\u00e4rkida, et Redis, RabbitMQ ja Graylog on stateful teenused ning nende skaleerimine pole sama lihtne kui \u00abattrai-estimatoril\u00bb<\/p>\n<p><\/p>\n<h3>Eelmise k\u00fcsimuse eeldamine \u2013 miks mitte Kubernetes?<\/h3>\n<p><\/p>\n<p>Tundub, et Kubernetes'e kasutamine v\u00e4ikestes ja keskmise suurusega projektides on \u00fcleliigne, kogu vajalik funktsionaalsus on v\u00f5imalik saada Docker Swarm'ilt, mis on konteinerite orkestreerimiseks \u00fcsna kasutajas\u00f5bralik ja mille sisseastumispiir on madal.<\/p>\n<p><\/p>\n<h3>Infrastruktuur<\/h3>\n<p><\/p>\n<p>K\u00f5ik see juurutati VDS-il j\u00e4rgmiste omadustega:<\/p>\n<p><\/p>\n<ul>\n<li>CPU: 4 tuuma Intel&reg; Xeon&reg; Gold 5120 CPU @ 2.20GHz<\/li>\n<li>RAM: 8 GB<\/li>\n<li>SSD: 160 GB<\/li>\n<\/ul>\n<p><\/p>\n<p>P\u00e4rast kohalikku koormustestimist n\u00e4is, et t\u00f5sise kasutajate voolu korral j\u00e4\u00e4b sellest masinast napilt puudu.<\/p>\n<p><\/p>\n<p>Kuid kohe p\u00e4rast juurutamist jagasin linki \u00fche populaarseima pildi jagamise platvormi kohta (jah, just selle), p\u00e4rast mida hakkasid inimesed huvituma ja m\u00f5ne tunni jooksul suutis teenus edukalt t\u00f6\u00f6delda k\u00fcmneid tuhandeid pilte. Samuti ei olnud pikki koormusi CPU ja RAM ressursid isegi pooledki kasutuses.<\/p>\n<p>\n<img decoding=\"async\" alt=\"Teenuse arhitektuuri \u00fcld\u00fclevaade, et hinnata v\u00e4list ilmet p\u00f5hinevalt n\u00e4rviv\u00f5rkudel\" src=\"\/wp-content\/uploads\/2020\/07\/458d74dae00d455fbce1ca6a197325d7.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Teenuse arhitektuuri \u00fcld\u00fclevaade, et hinnata v\u00e4list ilmet p\u00f5hinevalt n\u00e4rviv\u00f5rkudel\" src=\"\/wp-content\/uploads\/2020\/07\/e9383c47369c606d26e89a69f4d22b5a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Veidi graafikat<\/h3>\n<p><\/p>\n<p>Unikaalsete kasutajate ja hindamisp\u00e4ringute arv juurutamise hetkest alates, s\u00f5ltuvalt p\u00e4evast<\/p>\n<p>\n<img decoding=\"async\" alt=\"Teenuse arhitektuuri \u00fcld\u00fclevaade, et hinnata v\u00e4list ilmet p\u00f5hinevalt n\u00e4rviv\u00f5rkudel\" src=\"\/wp-content\/uploads\/2020\/07\/7112c78c8400d2ac73562243b16a015b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Hindamise toru t\u00f6\u00f6tlusaegade jaotumine<\/p>\n<p>\n<img decoding=\"async\" alt=\"Teenuse arhitektuuri \u00fcld\u00fclevaade, et hinnata v\u00e4list ilmet p\u00f5hinevalt n\u00e4rviv\u00f5rkudel\" src=\"\/wp-content\/uploads\/2020\/07\/4c892ce607c3ff3db466459729dd0876.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>J\u00e4reldused<\/h2>\n<p><\/p>\n<p>Kokkuv\u00f5tteks v\u00f5in \u00f6elda, et arhitektuur ja konteinerite orkestreerimise l\u00e4henemine \u00f5igustasid end t\u00e4ielikult \u2014 isegi tipptundidel ei olnud langusi ega aeglaseid t\u00f6\u00f6tlemise hetki.\u00a0<\/p>\n<p><\/p>\n<p>Arvan, et v\u00e4ikese ja keskmise suurusega projektid, mis kasutavad oma protsessis reaalaja n\u00e4rviv\u00f5rkude j\u00e4reldust CPU-l, saavad edukalt omaks v\u00f5tta artiklis kirjeldatud praktikaid.<\/p>\n<p><\/p>\n<p>Lisan, et algselt oli artikkel pikem, kuid et mitte postitada pikka lugemist, otsustasin m\u00f5ned aspektid selles artiklis v\u00e4lja j\u00e4tta \u2014 naaseme nende juurde j\u00e4rgmistes publikatsioonides.<\/p>\n<p><\/p>\n<p>Boti saab proovida Telegramis \u2014 @AttraiBot, see t\u00f6\u00f6tab v\u00e4hemalt 2020. aasta s\u00fcgiseni. Tuletan meelde \u2014 mingeid kasutajaandmeid ei salvestata \u2014 ei algseid pilte, ega ka tulemusi hinnangupipeline'ist \u2014 k\u00f5ik kustutatakse p\u00e4rast t\u00f6\u00f6tlemist.<\/p>\n<p>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/511332\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u041f\u0440\u0438\u0432\u0435\u0442! \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043f\u043e\u0434\u0435\u043b\u044e\u0441\u044c \u043e\u043f\u044b\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0435\u0433\u043e \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u0435 \u0441\u0435\u0442\u0438. \u041f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u0445 \u043a \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b, \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0433\u043e\u0442\u043e\u0432\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u0446\u0435\u043d\u0438\u043c \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f. \u041f\u0440\u0438\u044f\u0442\u043d\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u044f! \u041f\u0430\u0440\u0443 \u0441\u043b\u043e\u0432 \u043e \u0437\u0430\u0434\u0430\u0447\u0435 \u0438 \u0435\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0438\u0434\u0435\u044f \u2013 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0444\u043e\u0442\u043e \u0434\u0430\u0442\u044c \u043e\u0446\u0435\u043d\u043a\u0443 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":89111,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-89110","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u041f\u0440\u0438\u0432\u0435\u0442! \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043f\u043e\u0434\u0435\u043b\u044e\u0441\u044c \u043e\u043f\u044b\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0435\u0433\u043e \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u0435 \u0441\u0435\u0442\u0438. \u041f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u0445 \u043a \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b, \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0433\u043e\u0442\u043e\u0432\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u0446\u0435\u043d\u0438\u043c \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f. \u041f\u0440\u0438\u044f\u0442\u043d\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u044f! \u041f\u0430\u0440\u0443 \u0441\u043b\u043e\u0432 \u043e \u0437\u0430\u0434\u0430\u0447\u0435 \u0438 \u0435\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0438\u0434\u0435\u044f \u2013 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0444\u043e\u0442\u043e \u0434\u0430\u0442\u044c \u043e\u0446\u0435\u043d\u043a\u0443\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/obshhij-obzor-arhitektury-servisa-dlya-oczenki-vneshnosti-na-osnove-nejronnyh-setej\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041e\u0431\u0449\u0438\u0439 \u043e\u0431\u0437\u043e\u0440 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0434\u043b\u044f \u043e\u0446\u0435\u043d\u043a\u0438 \u0432\u043d\u0435\u0448\u043d\u043e\u0441\u0442\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u041f\u0440\u0438\u0432\u0435\u0442! \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043f\u043e\u0434\u0435\u043b\u044e\u0441\u044c \u043e\u043f\u044b\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0435\u0433\u043e \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u0435 \u0441\u0435\u0442\u0438. \u041f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u0445 \u043a \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b, \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0433\u043e\u0442\u043e\u0432\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u0446\u0435\u043d\u0438\u043c \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f. \u041f\u0440\u0438\u044f\u0442\u043d\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u044f! \u041f\u0430\u0440\u0443 \u0441\u043b\u043e\u0432 \u043e \u0437\u0430\u0434\u0430\u0447\u0435 \u0438 \u0435\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0438\u0434\u0435\u044f \u2013 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0444\u043e\u0442\u043e \u0434\u0430\u0442\u044c \u043e\u0446\u0435\u043d\u043a\u0443\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/obshhij-obzor-arhitektury-servisa-dlya-oczenki-vneshnosti-na-osnove-nejronnyh-setej\" \/>\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=\"2020-07-18T17:42:10+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-07-18T17:42:10+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\udd47\u00dclevaade teenuse arhitektuurist, mis hindab v\u00e4limust n\u00e4rviv\u00f5rkude p\u00f5hjal | ProHoster","description":"Sissejuhatus Tere! Selles artiklis jagan oma kogemusi mikroteenuste arhitektuuri loomisel projektile, mis kasutab n\u00e4rviv\u00f5rke. R\u00e4\u00e4gime arhitektuuri n\u00f5uetest, vaatame erinevaid struktuuridiagramme, anal\u00fc\u00fcsime iga valminud arhitektuuri komponenti ning hindame lahenduse tehnilisi m\u00f5\u00f5dikuid. Head lugemist! Paar s\u00f5na \u00fclesandest ja selle lahendusest Peamine idee on anda hinnang pildi p\u00f5hjal.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/obshhij-obzor-arhitektury-servisa-dlya-oczenki-vneshnosti-na-osnove-nejronnyh-setej","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041e\u0431\u0449\u0438\u0439 \u043e\u0431\u0437\u043e\u0440 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0434\u043b\u044f \u043e\u0446\u0435\u043d\u043a\u0438 \u0432\u043d\u0435\u0448\u043d\u043e\u0441\u0442\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439 | ProHoster","og:description":"\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u041f\u0440\u0438\u0432\u0435\u0442! \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043f\u043e\u0434\u0435\u043b\u044e\u0441\u044c \u043e\u043f\u044b\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0435\u0433\u043e \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u0435 \u0441\u0435\u0442\u0438. \u041f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u0445 \u043a \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b, \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0433\u043e\u0442\u043e\u0432\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u0446\u0435\u043d\u0438\u043c \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f. \u041f\u0440\u0438\u044f\u0442\u043d\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u044f! \u041f\u0430\u0440\u0443 \u0441\u043b\u043e\u0432 \u043e \u0437\u0430\u0434\u0430\u0447\u0435 \u0438 \u0435\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0438\u0434\u0435\u044f \u2013 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0444\u043e\u0442\u043e \u0434\u0430\u0442\u044c \u043e\u0446\u0435\u043d\u043a\u0443","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/obshhij-obzor-arhitektury-servisa-dlya-oczenki-vneshnosti-na-osnove-nejronnyh-setej","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":"2020-07-18T17:42:10+00:00","article:modified_time":"2020-07-18T17:42:10+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"89110","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":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 13:16:27","updated":"2022-09-29 06:10:39"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/89110","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=89110"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/89110\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/89111"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=89110"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=89110"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=89110"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}