{"id":30785,"date":"2019-10-31T21:37:25","date_gmt":"2019-10-31T18:37:25","guid":{"rendered":"https:\/\/prohoster.info\/blog\/stroitelnye-bloki-raspredelennyh-prilozhenij-nulevoe-priblizhenie\/"},"modified":"2019-10-31T21:37:25","modified_gmt":"2019-10-31T18:37:25","slug":"stroitelnye-bloki-raspredelennyh-prilozhenij-nulevoe-priblizhenie","status":"publish","type":"post","link":"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/stroitelnye-bloki-raspredelennyh-prilozhenij-nulevoe-priblizhenie","title":{"rendered":"Gra\u0111evni blokovi distribuiranih aplikacija. Nulti aproximacija","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Gra\u0111evni blokovi distribuiranih aplikacija. Nulti aproximacija\" src=\"\/wp-content\/uploads\/2019\/04\/88d4e363538bdfc67690c8339dca790b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Svijet se ne zaustavlja. Napredak stvara nove tehnolo\u0161ke izazove. U skladu s promijenjenim zahtjevima, mora evoluirati i arhitektura informati\u010dkih sustava. Danas \u0107emo govoriti o arhitekturi orijentiranoj na doga\u0111aje, konkurentnosti, paralelnosti, asinkronosti i o tome kako se u Erlangu mo\u017ee mirno \u017eivjeti s tim.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2 id=\"vvedenie\">Uvod<\/h2>\n<p><\/p>\n<p>Ovisno o veli\u010dini projektiranog sustava i njegovim zahtjevima, mi, programeri, biramo na\u010din razmjene informacija unutar sustava. U ve\u0107ini slu\u010dajeva, za organizaciju interakcije servisa radna opcija mo\u017ee biti shema s posrednikom, primjerice baziranom na RabbitMQ ili Kafka. No ponekad su tokovi doga\u0111aja, SLA i razina kontrole nad sustavom takvi da nam gotovi messaging ne odgovara. Naravno, mo\u017eemo malo zakomplicirati sustav preuzimanjem odgovornosti za transportnu razinu i formiranje klastera, primjerice kori\u0161tenjem ZeroMQ ili nanomsg. Ali ako sustavu dovoljno propusnosti i mogu\u0107nosti standardnog Erlang klastera, pitanje uvo\u0111enja dodatne entitete zahtijeva detaljnu analizu i ekonomsku opravdanost.<\/p>\n<p><\/p>\n<p>Tema reaktivnih distribuiranih aplikacija je prili\u010dno opse\u017ena. Kako bismo se uklopili u format \u010dlanka, predmet dana\u0161nje rasprave bit \u0107e samo homogena okru\u017eenja izgra\u0111ena na osnovi Erlang\/Elixir. Ekosustav Erlang\/OTP omogu\u0107uje implementaciju reaktivne arhitekture s minimalnim tro\u0161kovima rada. No u svakom slu\u010daju, trebat \u0107e nam sloj za razmjenu poruka. <\/p>\n<p><\/p>\n<h2 id=\"teoreticheskiy-bazis\">Teorijska osnova<\/h2>\n<p><\/p>\n<p>Projektiranje po\u010dinje odre\u0111ivanjem ciljeva i ograni\u010denja. Glavni cilj nije u razvoju radi razvoja. Moramo dobiti siguran i skalabilan alat na osnovu kojeg se mogu stvoriti, a \u0161to je najva\u017enije \u2013 razvijati moderne aplikacije razli\u010ditih razina: po\u010dev\u0161i od jednoservernih, koji slu\u017ee maloj publici, a koji se kasnije mogu razviti u klastere do 50-60 \u010dvorova, do federacija klastera. Tako je osnovni cilj maksimizacija profita smanjenjem tro\u0161kova razvoja i vlasni\u0161tva kona\u010dnog sustava.<\/p>\n<p><\/p>\n<p>Istaknimo 4 glavna zahtjeva za kona\u010dni sustav:<\/p>\n<p><\/p>\n<ul>\n<li><strong>S<\/strong>orijentiranost na doga\u0111aje.<br \/>\nSustav je uvijek spreman propu\u0161tati kroz sebe tok doga\u0111aja i poduzimati potrebne radnje;<\/li>\n<li><strong>M<\/strong>skalabilnost.<br \/>\nOdvojeni blokovi mogu se skalirati vertikalno i horizontalno. C cijeli sustav treba imati mogu\u0107nost beskona\u010dnog horizontalnog rasta;<\/li>\n<li><strong>o<\/strong>otpornost na gre\u0161ke.<br \/>\nSve razine i sve usluge trebaju imati mogu\u0107nost automatskog oporavka u slu\u010daju gre\u0161aka;<\/li>\n<li><strong>G<\/strong>aranitano vrijeme odgovora.<br \/>\nVrijeme je dragocjeno i korisnici ne bi trebali predugo \u010dekati.<\/li>\n<\/ul>\n<p><\/p>\n<p>Sjetite se stare bajke o \"Malom lokomotivu koji je mogao\", onome \u2013 \"Parovoziku koji je uspio\"? Da bi projektirani sustav uspje\u0161no pre\u0161ao iz faze prototipa u progresivan, njegov temelj mora zadovoljiti minimalne zahtjeve. <strong>USPIO<\/strong>.<\/p>\n<p><\/p>\n<p>K messaging kao infrastrukturnom alatu i temelju za sve usluge dodaje se jo\u0161 jedna stavka: jednostavnost kori\u0161tenja za programere.<\/p>\n<p><\/p>\n<h3 id=\"orientirovannost-na-sobytiya\">usmjerenost na doga\u0111aje<\/h3>\n<p><\/p>\n<p>Da bi aplikacija mogla rasti iz jednog <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/hr\/server\/dts-los-angeles\/\"   title=\"poslu\u017eitelja\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"3480\">poslu\u017eitelja<\/a> u klaster, njezina arhitektura mora omogu\u0107iti slabu povezanost. Ovom zahtjevu odgovara asinkrona model. U njemu po\u0161iljatelj i primatelj brinu o informacijskom optere\u0107enju poruke i ne brinu se o prijenosu i usmjeravanju unutar sustava.<\/p>\n<p><\/p>\n<h3 id=\"masshtabiruemost\">Skalabilnost<\/h3>\n<p><\/p>\n<p>Skalabilnost i u\u010dinkovitost sustava idu ruku pod ruku. Komponenti aplikacije trebaju mo\u0107i iskoristiti sve dostupne resurse. \u0160to u\u010dinkovitije mo\u017eemo iskoristiti kapacitete i \u0161to optimalniji su na\u0161i na\u010dini obrade, to manje tro\u0161imo novca na opremu. <\/p>\n<p><\/p>\n<p>U okviru jedne ma\u0161ine Erlang stvara visoko konkurentno okru\u017eenje. Ravnote\u017eu izme\u0111u konkurentnosti i paralelizma mo\u017ee se postaviti izborom broja niti operativnog sustava dostupnih za Erlang VM i brojem planera koji koriste te niti.<br \/>\nErlang procesi nemaju zajedni\u010dko stanje i rade u neblokiraju\u0107em modu. To osigurava relativno nisku latenciju i ve\u0107u propusnost nego kod tradicionalnih aplikacija temeljenih na blokiraju\u0107em sinkroniziranju. Planer Erlang se brine o pravednoj raspodjeli CPU-a i IO-a, a izostanak zaklju\u010davanja omogu\u0107ava aplikaciji da odgovara \u010dak i u re\u017eimu vr\u0161nih optere\u0107enja ili gre\u0161aka. <\/p>\n<p><\/p>\n<p>Na razini klastera problem s iskori\u0161tenjem tako\u0111er postoji. Va\u017eno je da su svi strojevi u klasteru ravnomjerno optere\u0107eni, a mre\u017ea nije preoptere\u0107ena. Zamislite situaciju: korisni\u010dki promet dolazi na ulazne balansere (haproxy, nginx, itd.), koji maksimalno ravnomjerno raspore\u0111uju zahtjeve za obradu izme\u0111u skupa dostupnih backendova. Unutar infrastrukture aplikacije, usluga koja implementira tra\u017eeni su\u010delje \u2013 to je samo posljednja milja, i morat \u0107e zatra\u017eiti niz drugih usluga kako bi odgovorila na prvotni zahtjev. Interni zahtjevi tako\u0111er zahtijevaju usmjeravanje i balansiranje.<br \/>\nDa bi se u\u010dinkovito upravljalo protokom podataka, messaging mora omogu\u0107iti programerima su\u010delje za upravljanje usmjeravanjem i raspodjelom optere\u0107enja. Zahvaljuju\u0107i tome, programeri \u0107e mo\u0107i, koriste\u0107i mikroservisne uzorke (aggregator, proxy, chain, branch, itd.), rje\u0161avati kako standardne zadatke, tako i rijetko javljaju\u0107e. <\/p>\n<p><\/p>\n<p>S poslovne strane, skalabilnost je jedan od alata za upravljanje rizicima. Klju\u010dno je zadovoljiti zahtjeve klijenata, optimalno koriste\u0107i opremu:<\/p>\n<p><\/p>\n<ul>\n<li>Pove\u0107anjem snage opreme kao rezultat napretka. Ne\u0107e stajati zbog nesavr\u0161enosti softvera. Erlang se odli\u010dno skalira vertikalno i uvijek mo\u017ee iskoristiti sve jezgre CPU-a i dostupnu memoriju;<\/li>\n<li>U uvjetima cloud okru\u017eenja, mo\u017eemo upravljati brojem opreme ovisno o trenutnom ili predvi\u0111enom optere\u0107enju i jam\u010diti SLA.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"otkazoustoychivost\">Otpornost na gre\u0161ke<\/h3>\n<p><\/p>\n<p>Razmotrimo dvije aksiome: \u201cNeuspjesi su neprihvatljivi\u201d i \u201cNeuspjesi \u0107e uvijek postojati\u201d. Za poslovanje, neuspjeh softvera predstavlja gubitak novca, a \u0161to je jo\u0161 gore \u2013 reputacije. Balansiraju\u0107i izme\u0111u mogu\u0107ih gubitaka i tro\u0161kova razvoja otpornog softvera, \u010desto se mo\u017ee prona\u0107i kompromis.<\/p>\n<p><\/p>\n<p>U kratkoro\u010dnoj perspektivi, arhitektura koja uklju\u010duje otpornost na neuspjehe \u0161tedi novac na kupnji gotovih rje\u0161enja za klasteriranje. Ona su skupa, a i sama sadr\u017ee gre\u0161ke.<br \/>\nDugoro\u010dno, arhitektura otpornosti na neuspjehe vi\u0161e puta isplati tro\u0161kove svoje primjene u svim fazama razvoja.<br \/>\nMessaging unutar baze koda jo\u0161 je u fazi razvoja, \u0161to omogu\u0107uje detaljno razra\u0111ivanje interakcije komponenti unutar sustava. Time se olak\u0161ava zadatak reagiranja i upravljanja kvarovima, jer sve odgovorne komponente obra\u0111uju kvarove, a kona\u010dni sustav zna kako se automatski vratiti u normalno stanje nakon kvara po dizajnu.<\/p>\n<p><\/p>\n<h3 id=\"otzyvchivost\">Odgovornost<\/h3>\n<p><\/p>\n<p>Neovisno o kvarovima, aplikacija mora odgovarati na zahtjeve i zadovoljiti SLA. Stvarnost je takva da ljudi ne \u017eele \u010dekati, stoga se posao mora prilagoditi. Od sve ve\u0107eg broja aplikacija o\u010dekuje se visoka odgovornost.<br \/>\nOdgovorne aplikacije rade u re\u017eimu koji je blizu stvarnom vremenu. Erlang VM funkcionira u re\u017eimu mekog stvarnog vremena. Za neka podru\u010dja, poput burzovne trgovine, medicine, upravljanja industrijskom opremom, va\u017ean je re\u017eim tvrdog stvarnog vremena.<br \/>\nOdgovorni sustavi pobolj\u0161avaju UX i korisni su za posao.<\/p>\n<p><\/p>\n<h2 id=\"predvaritelnyy-itog\">Preliminarni zaklju\u010dak<\/h2>\n<p><\/p>\n<p>Planiraju\u0107i ovaj \u010dlanak, htio sam podijeliti iskustvo stvaranja posrednika za razmjenu poruka i izgradnji slo\u017eenih sustava na toj osnovi. No teorijski i motivacijski dio ispao je prili\u010dno op\u0161iran.<br \/>\nU drugom dijelu \u010dlanka govorit \u0107u o nijansama implementacije razmjenjiva\u010dnih to\u010daka, obrascima razmjene poruka i njihovoj primjeni.<br \/>\nU tre\u0107em dijelu razmotrit \u0107emo op\u0107a pitanja organizacije servisa, usmjeravanja i raspodjele optere\u0107enja. Razgovarat \u0107emo o prakti\u010dnim aspektima skalabilnosti i otpornosti sustava.<\/p>\n<p><\/p>\n<p>Kraj prvog dijela.<\/p>\n<p><\/p>\n<p>Fotografija <noindex><a rel=\"nofollow\" href=\"https:\/\/unsplash.com\/photos\/SRjZtxsK3Os\">@lucabravo<\/a><\/noindex>.<\/p>\n<p>Izvor: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/446028\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041c\u0438\u0440 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u043d\u0430 \u043c\u0435\u0441\u0442\u0435. \u041f\u0440\u043e\u0433\u0440\u0435\u0441\u0441 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0432\u044b\u0437\u043e\u0432\u044b. \u0412 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0438\u0437\u043c\u0435\u043d\u0438\u0432\u0448\u0438\u043c\u0438\u0441\u044f \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438, \u0434\u043e\u043b\u0436\u043d\u0430 \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u0441\u043e\u0431\u044b\u0442\u0438\u0439\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435, \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438, \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u0438 \u0438 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0432 Erlang \u043c\u043e\u0436\u043d\u043e \u0441\u043e \u0432\u0441\u0435\u043c \u044d\u0442\u0438\u043c \u0436\u0438\u0442\u044c \u043c\u0438\u0440\u043d\u043e. \u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439 \u043a \u043d\u0435\u0439, \u043c\u044b, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":22770,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-30785","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\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\/hr\/blog\/administrirovanie\/stroitelnye-bloki-raspredelennyh-prilozhenij-nulevoe-priblizhenie\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"hr_HR\" \/>\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\u0421\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u041d\u0443\u043b\u0435\u0432\u043e\u0435 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u0435 | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/stroitelnye-bloki-raspredelennyh-prilozhenij-nulevoe-priblizhenie\" \/>\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-31T18:37:25+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:37:25+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\udd47Gra\u0111evni blokovi distribuiranih aplikacija. Nulti pribli\u017eak | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/stroitelnye-bloki-raspredelennyh-prilozhenij-nulevoe-priblizhenie","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hr_HR","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\u0421\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u041d\u0443\u043b\u0435\u0432\u043e\u0435 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u0435 | ProHoster","og:url":"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/stroitelnye-bloki-raspredelennyh-prilozhenij-nulevoe-priblizhenie","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-31T18:37:25+00:00","article:modified_time":"2019-10-31T18:37:25+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"30785","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-02-22 15:31:13","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:29:56","updated":"2026-02-22 15:31:13","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts\/30785","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/comments?post=30785"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts\/30785\/revisions"}],"predecessor-version":[{"id":162006,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts\/30785\/revisions\/162006"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media\/22770"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media?parent=30785"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/categories?post=30785"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/tags?post=30785"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}