{"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\/sl\/blog\/administrirovanie\/stroitelnye-bloki-raspredelennyh-prilozhenij-nulevoe-priblizhenie","title":{"rendered":"Gradniki porazdeljenih aplikacij. Nulto pribli\u017eanje","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Gradniki porazdeljenih aplikacij. Nulto pribli\u017eanje\" src=\"\/wp-content\/uploads\/2019\/04\/88d4e363538bdfc67690c8339dca790b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Svet se neprestano menja. Napredak stvara nove tehnolo\u0161ke izazove. U skladu sa promenjenim zahtevima, arhitektura informacionih sistema tako\u0111e mora evoluirati. Danas \u0107emo govoriti o doga\u0111ajno orijentisanoj arhitekturi, konkurentnosti, paralelnosti, asinhronosti i o tome kako se u Erlangu mo\u017ee mirno \u017eiveti sa svim tim.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2 id=\"vvedenie\">Uvod<\/h2>\n<p><\/p>\n<p>U zavisnosti od veli\u010dine projektovanog sistema i zahteva, mi, programeri, biramo na\u010din razmene informacija u sistemu. U ve\u0107ini slu\u010dajeva, za organizaciju me\u0111usobnog delovanja servisa, radna verzija mo\u017ee biti \u0161ema sa brokerom, na primer zasnovana na RabbitMQ ili Kafka. Me\u0111utim, ponekad su tokovi doga\u0111aja, SLA i nivo kontrole nad sistemom takvi da nam gotovi messaging nije dovoljan. Naravno, mogu\u0107e je malo zakomplikovati sistem uzimaju\u0107i odgovornost za transportni nivo i formiranje klastera, na primer kori\u0161\u0107enjem ZeroMQ ili nanomsg. Ali ako sistemu odgovaraju propusnost i mogu\u0107nosti standardnog Erlang klastera, pitanje dodavanja dodatne entiteta zahteva detaljnu analizu i ekonomsko opravdanje.<\/p>\n<p><\/p>\n<p>Tema reaktivnih distribuiranih aplikacija je prili\u010dno op\u0161irna. Da bismo se uklopili u format \u010dlanka, predmet dana\u0161nje diskusije bi\u0107e samo homogena okru\u017eenja, zasnovana na Erlangu\/Elixiru. Ekosistem Erlang\/OTP omogu\u0107ava implementaciju reaktivne arhitekture uz minimalne tro\u0161kove. Ali u svakom slu\u010daju, bi\u0107e nam potreban sloj za razmenu poruka. <\/p>\n<p><\/p>\n<h2 id=\"teoreticheskiy-bazis\">Teorijska osnova<\/h2>\n<p><\/p>\n<p>Projektovanje po\u010dinje definisanjem ciljeva i ograni\u010denja. Glavni cilj nije da se razvija radi razvoja. Neophodno je dobiti bezbedan i skalabilan alat na osnovu kojeg se mogu stvarati, a \u0161to je najva\u017enije \u2013 razvijati savremene aplikacije razli\u010ditih nivoa: po\u010dev\u0161i od jednoservernih aplikacija koje opslu\u017euju mali broj korisnika, a koje se kasnije mogu razviti u klastere do 50-60 \u010dvorova, zavr\u0161avaju\u0107i sa federacijama klastera. Tako je osnovni cilj \u2013 maksimizacija profita smanjenjem tro\u0161kova razvoja i vlasni\u0161tva nad zavr\u0161nim sistemom.<\/p>\n<p><\/p>\n<p>Istaknut \u0107emo 4 glavna zahteva za kona\u010dni sistem:<\/p>\n<p><\/p>\n<ul>\n<li><strong>Z<\/strong>doga\u0111ajno orijentisanost.<br \/>\nSistem je uvek spreman da propu\u0161ta tok doga\u0111aja i izvr\u0161ava potrebne radnje;<\/li>\n<li><strong>M<\/strong>\u0161irljivost.<br \/>\nPosamezni bloki se lahko \u0161irijo tako vertikalno kot horizontalno. Celoten sistem mora omogo\u010dati neomejeno horizontalno rast;<\/li>\n<li><strong>O<\/strong>dpornost na napake.<br \/>\nVse ravni in vse storitve morajo imeti sposobnost samodejnega okrevanja ob napakah;<\/li>\n<li><strong>Z<\/strong>agotovljen \u010das odziva.<br \/>\n\u010cas je dragocen in uporabniki ne smejo predolgo \u010dakati.<\/li>\n<\/ul>\n<p><\/p>\n<p>Spomnite se stare pravljice o \"The little engine that could\", ki se glasi \u2013 \"Ponavadi, ki je zmogel\"? Da bo na\u010drtovani sistem uspe\u0161no prestopil iz prototipa v napreden izdelek, mora njegova osnova izpolnjevati minimalne zahteve. <strong>ZMOGEL<\/strong>.<\/p>\n<p><\/p>\n<p>K sporo\u010danju kot infrastrukturnemu orodju in temelju za vse storitve je dodan \u0161e en element: uporabnost za programerje.<\/p>\n<p><\/p>\n<h3 id=\"orientirovannost-na-sobytiya\">Usmerjenost k dogodkom<\/h3>\n<p><\/p>\n<p>Da bi aplikacija lahko zrasla iz enega <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/sl\/server\/dts-los-angeles\/\"   title=\"stre\u017enika\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"3480\">stre\u017enika<\/a> v grozd, mora arhitektura zagotavljati slabo povezanost. Ta zahteva ustreza asinhronemu modelu. V njem se po\u0161iljatelj in prejemnik ukvarjata z informacijskim bremenom sporo\u010dila in se ne obremenjujeta s prenosom in usmerjanjem znotraj sistema.<\/p>\n<p><\/p>\n<h3 id=\"masshtabiruemost\">\u0160irljivost<\/h3>\n<p><\/p>\n<p>\u0160irljivost in u\u010dinkovitost sistema sta povezana. Komponente aplikacije morajo znati izkoristiti vse razpolo\u017eljive vire. Bolj u\u010dinkovito kot lahko izkoristimo mo\u010d in bolj optimizirane kot so na\u0161e metode obdelave, manj denarja porabimo za opremo. <\/p>\n<p><\/p>\n<p>Znotraj ene naprave Erlang ustvarja visoko konkuren\u010dno okolje. Ravnote\u017eje med konkurenco in paralelnostjo lahko nastavite z izbiro \u0161tevila sistemskih nalog, ki so na voljo za Erlang VM, ter \u0161tevilom na\u010drtovalnikov, ki izkori\u0161\u010dajo te naloge.<br \/>\nErlang procesi nimajo skupnega stanja in delujejo v neblokirnem na\u010dinu. To zagotavlja razmeroma nizko latenco in vi\u0161jo prepustnost kot pri tradicionalnih aplikacijah, zgrajenih na blokirni sinhronizaciji. Na\u010drtovalnik Erlang skrbi za po\u0161teno razporejanje CPU in IO, brez blokad pa omogo\u010da aplikaciji, da odgovarja tudi med vrhunskimi obremenitvami ali napakami. <\/p>\n<p><\/p>\n<p>Na ravni klasterja obstajajo tudi te\u017eave z izkori\u0161\u010danjem. Pomembno je, da so vse naprave v klasterju enakomerno obremenjene in da omre\u017eje ni preobremenjeno. Predstavljajte si situacijo: uporabni\u0161ki promet se prerazporedi na vhodne uravnote\u017eevalnike (haproxy, nginx, itd.), ki enakomerno porazdelijo zahteve za obdelavo med razpolo\u017eljivimi backendi. V okviru infrastrukture aplikacije je storitev, ki izvaja zahtevani vmesnik, le zadnja mila in potrebovala bo \u0161e vrsto drugih storitev, da odgovori na prvotno zahtevo. Notranji zahtevki prav tako zahtevajo usmerjanje in uravnote\u017eenje.<br \/>\nZa u\u010dinkovito upravljanje tokov podatkov mora messaging ponuditi razvijalcem vmesnik za upravljanje usmerjanja in porazdelitve obremenitve. Tako bodo lahko razvijalci, s pomo\u010djo mikrostoritev (aggregator, proxy, chain, branch, itd.), re\u0161evali tako standardne naloge kot tudi redke. <\/p>\n<p><\/p>\n<p>Z vidika poslovanja je raz\u0161irljivost eno od orodij za upravljanje tveganj. Klju\u010dnega pomena je zadovoljiti zahteve strank, medtem ko optimalno izkori\u0161\u010damo opremo:<\/p>\n<p><\/p>\n<ul>\n<li>Pri pove\u010danju zmogljivosti opreme kot posledica napredka. Ne bo mirovala zaradi pomanjkljivosti programske opreme. Erlang se odli\u010dno raz\u0161irja navpi\u010dno in vedno lahko izkoristi vsa jedra CPU in razpolo\u017eljivo pomnilnik;<\/li>\n<li>V obla\u010dnih okoljih lahko upravljamo s koli\u010dino opreme glede na trenutno ali napovedano obremenitev in zagotavljamo SLA.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"otkazoustoychivost\">Odporna zasnova<\/h3>\n<p><\/p>\n<p>Razmislimo o dveh aksiomih: \"Napake so nesprejemljive\" in \"Napake se bodo vedno zgodile\". Za podjetje je napaka programske opreme izguba denarja, kar je \u0161e huje \u2013 reputacije. Pri balansiranju med mo\u017enimi izgubami in stro\u0161ki razvoja odpornosti programske opreme je pogosto mogo\u010de najti kompromis.<\/p>\n<p><\/p>\n<p>Na kratki rok arhitektura, ki vklju\u010duje odpornost, prihrani denar pri nakupu \u017ee pripravljenih re\u0161itev za klasterizacijo. Te so drage in tudi v njih so napake.<br \/>\nNa dolgi rok se odpornosti arhitektura ve\u010dkrat povrne nalo\u017ebe v njeno izvajanje v vseh fazah razvoja.<br \/>\nSporazumevanje znotraj kodne baze je \u0161e v fazi razvoja, kar omogo\u010da podrobno obravnavo interakcij komponent v sistemu. To poenostavi nalogo reagiranja in upravljanja z napakami, saj vse odgovorne komponente obravnavajo napake, kon\u010dni sistem pa ve, kako se po napaki vrniti v normalno stanje po na\u010drtu.<\/p>\n<p><\/p>\n<h3 id=\"otzyvchivost\">Odgovornost<\/h3>\n<p><\/p>\n<p>Ne glede na napake mora aplikacija odgovarjati na zahteve in izpolnjevati SLA. Resni\u010dnost je tak\u0161na, da ljudje no\u010dejo \u010dakati, zato se mora podjetje prilagoditi. Od vse ve\u010djega \u0161tevila aplikacij se pri\u010dakuje visoka odgovornost.<br \/>\nOdgovorne aplikacije delujejo v na\u010dinu, ki je blizu realnemu \u010dasu. Erlang VM deluje v na\u010dinu mehke realnosti. Za nekatere podro\u010dja, kot so borzno trgovanje, medicina, upravljanje industrijske opreme, je pomemben na\u010din ostre realnosti.<br \/>\nOdgovorni sistemi izbolj\u0161ujejo uporabni\u0161ko izku\u0161njo in so koristni za podjetja.<\/p>\n<p><\/p>\n<h2 id=\"predvaritelnyy-itog\">Predhodni povzetek<\/h2>\n<p><\/p>\n<p>Ko sem na\u010drtoval ta \u010dlanek, sem \u017eelel deliti izku\u0161nje pri ustvarjanju posrednika za sporo\u010danje in gradnji zapletenih sistemov na njegovi osnovi. Vendar je teoreti\u010dni in motivacijski del postal precej obse\u017een.<br \/>\nV drugem delu \u010dlanka bom govoril o niansah implementacije izmenjevalnih to\u010dk, vzorcih izmenjave sporo\u010dil in njihovih aplikacijah.<br \/>\nV tretjem delu bomo obravnavali splo\u0161na vpra\u0161anja organizacije storitev, usmerjanja in uravnote\u017eenja. Pogovarjali se bomo o prakti\u010dnih vidikih skalabilnosti in odpornosti sistemov.<\/p>\n<p><\/p>\n<p>Konec prvega dela.<\/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\/sl\/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=\"sl_SI\" \/>\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\/sl\/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\udd47Gradniki porazdeljenih aplikacij. Ni\u010delno pribli\u017eanje | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/stroitelnye-bloki-raspredelennyh-prilozhenij-nulevoe-priblizhenie","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sl_SI","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\/sl\/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\/sl\/wp-json\/wp\/v2\/posts\/30785","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/comments?post=30785"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/30785\/revisions"}],"predecessor-version":[{"id":162006,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/30785\/revisions\/162006"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media\/22770"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media?parent=30785"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/categories?post=30785"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/tags?post=30785"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}