{"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\/it\/blog\/administrirovanie\/stroitelnye-bloki-raspredelennyh-prilozhenij-nulevoe-priblizhenie","title":{"rendered":"Blocchi costruttivi di applicazioni distribuite. Prima approssimazione","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Blocchi costruttivi di applicazioni distribuite. Prima approssimazione\" src=\"\/wp-content\/uploads\/2019\/04\/88d4e363538bdfc67690c8339dca790b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Il mondo non si ferma. Il progresso genera nuove sfide tecnologiche. In conformit\u00e0 con le nuove esigenze, deve evolvere anche l'architettura dei sistemi informativi. Oggi parleremo dell'architettura orientata agli eventi, della concorrenza, della parallelit\u00e0, dell'assincronicit\u00e0 e di come in Erlang sia possibile vivere in armonia con tutto ci\u00f2.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2 id=\"vvedenie\">Introduzione<\/h2>\n<p><\/p>\n<p>A seconda delle dimensioni del sistema progettato e delle sue esigenze, noi sviluppatori scegliamo il modo di scambiare informazioni all'interno del sistema. Nella maggior parte dei casi, per organizzare l'interazione dei servizi, una soluzione valida pu\u00f2 essere uno schema con un broker, ad esempio basato su RabbitMQ o Kafka. Ma a volte il flusso di eventi, il SLA e il livello di controllo sul sistema sono tali che un messaging preconfezionato non \u00e8 adatto. Certo, si pu\u00f2 complicare un po' il sistema, assumendo la responsabilit\u00e0 per il livello di trasporto e la creazione di un cluster, ad esempio utilizzando ZeroMQ o nanomsg. Ma se il sistema ha sufficienti capacit\u00e0 di throughput e funzionalit\u00e0 del cluster Erlang standard, la questione di aggiungere un'entit\u00e0 supplementare richiede uno studio approfondito e una giustificazione economica.<\/p>\n<p><\/p>\n<p>Il tema delle applicazioni distribuite reattive \u00e8 piuttosto ampio. Per rientrare nel formato dell'articolo, l'oggetto della discussione di oggi saranno solo ambienti omogenei costruiti su Erlang\/Elixir. L'ecosistema Erlang\/OTP permette di realizzare un'architettura reattiva con il minimo sforzo. Ma in ogni caso avremo bisogno di uno strato di scambio di messaggi. <\/p>\n<p><\/p>\n<h2 id=\"teoreticheskiy-bazis\">Fondamenti teorici<\/h2>\n<p><\/p>\n<p>La progettazione inizia con la definizione degli obiettivi e delle limitazioni. L'obiettivo principale non \u00e8 quello di sviluppare per il gusto di farlo. Abbiamo bisogno di uno strumento sicuro e scalabile, su cui sia possibile creare, e soprattutto - sviluppare, moderne applicazioni di vari livelli: partendo da quelle monoposto, che servono un pubblico limitato, e che possono in seguito evolversi in cluster fino a 50-60 nodi, fino a federazioni di cluster. Cos\u00ec, l'obiettivo principale \u00e8 massimizzare il profitto riducendo il costo di sviluppo e di propriet\u00e0 del sistema finale.<\/p>\n<p><\/p>\n<p>Indichiamo 4 requisiti principali per il sistema finale:<\/p>\n<p><\/p>\n<ul>\n<li><strong>C<\/strong>orientamento agli eventi.<br \/>\nIl sistema \u00e8 sempre pronto a far passare un flusso di eventi e ad eseguire le azioni necessarie;<\/li>\n<li><strong>M<\/strong>scalabilit\u00e0.<br \/>\nI singoli blocchi possono scalare sia verticalmente che orizzontalmente. L'intero sistema deve avere la possibilit\u00e0 di crescita orizzontale infinita;<\/li>\n<li><strong>O<\/strong>tolleranza agli errori.<br \/>\nTutti i livelli e tutti i servizi devono avere la possibilit\u00e0 di recupero automatico in caso di malfunzionamenti;<\/li>\n<li><strong>G<\/strong>tempo di risposta garantito.<br \/>\nIl tempo \u00e8 prezioso e gli utenti non dovrebbero aspettare troppo a lungo.<\/li>\n<\/ul>\n<p><\/p>\n<p>Ricordate la vecchia favola de \u201cIl piccolo motore che poteva\u201d, noto anche come \u201cIl locomotore che ce l'ha fatta\u201d? Affinch\u00e9 il sistema progettato possa superare con successo la fase di prototipo e diventare progressivo, le sue basi devono soddisfare i requisiti minimi. <strong>CE L'HA FATTA<\/strong>.<\/p>\n<p><\/p>\n<p>Al messaging come strumento infrastrutturale e base per tutti i servizi si aggiunge un altro aspetto: l'usabilit\u00e0 per i programmatori.<\/p>\n<p><\/p>\n<h3 id=\"orientirovannost-na-sobytiya\">Orientamento agli eventi<\/h3>\n<p><\/p>\n<p>Affinch\u00e9 l'applicazione possa crescere da una <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/it\/server\/dts-los-angeles\/\"   title=\"server\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"3480\">server<\/a> fino a un cluster, la sua architettura deve garantire una debole interconnessione. Questa esigenza \u00e8 soddisfatta dal modello asincrono. In esso, il mittente e il destinatario si occupano del carico informativo del messaggio e non si preoccupano della trasmissione e del routing all'interno del sistema.<\/p>\n<p><\/p>\n<h3 id=\"masshtabiruemost\">Scalabilit\u00e0<\/h3>\n<p><\/p>\n<p>La scalabilit\u00e0 e l'efficienza del sistema vanno di pari passo. I componenti dell'applicazione devono saper utilizzare tutte le risorse disponibili. Maggiore \u00e8 l'efficienza con cui possiamo utilizzare le capacit\u00e0 e pi\u00f9 ottimali sono i nostri metodi di elaborazione, minori saranno i costi per l'hardware. <\/p>\n<p><\/p>\n<p>All'interno di una singola macchina, Erlang crea un ambiente altamente concorrente. Il bilanciamento tra concorrenza e parallelismo pu\u00f2 essere impostato scegliendo il numero di thread del sistema operativo disponibili per l'Erlang VM e il numero di schedulatori che utilizzano questi thread.<br \/>\nI processi Erlang non hanno uno stato condiviso e funzionano in modalit\u00e0 non bloccante. Questo consente una latenza relativamente bassa e una maggiore capacit\u00e0 rispetto alle applicazioni tradizionali basate su sincronizzazione bloccante. Lo schedulatore Erlang si occupa di una distribuzione equa della CPU e dell'I\/O, e l'assenza di blocchi consente all'applicazione di rispondere anche in situazioni di carico elevato o di guasti. <\/p>\n<p><\/p>\n<p>A livello di cluster, anche il problema dell'uso delle risorse esiste. \u00c8 importante che tutte le macchine nel cluster siano equamente caricate e che la rete non sia sovraccarica. Immaginiamo una situazione: il traffico degli utenti arriva ai bilanciatori in entrata (haproxy, nginx, ecc.), che distribuiscono il pi\u00f9 uniformemente possibile le richieste da elaborare tra un insieme di backend disponibili. All'interno dell'infrastruttura dell'applicazione, il servizio che realizza l'interfaccia richiesta \u00e8 solo l'ultima miglio e avr\u00e0 bisogno di richiedere una serie di altri servizi per rispondere alla richiesta iniziale. Anche le richieste interne richiedono un'adeguata instradamento e bilanciamento.<br \/>\nPer gestire in modo efficace i flussi di dati, il messaging deve fornire agli sviluppatori un'interfaccia per gestire l'instradamento e la distribuzione del carico. In questo modo, gli sviluppatori possono, utilizzando modelli di microservizi (aggregator, proxy, chain, branch, ecc.), affrontare sia compiti standard che quelli che si presentano raramente. <\/p>\n<p><\/p>\n<p>Dal punto di vista aziendale, la scalabilit\u00e0 \u00e8 uno degli strumenti di gestione dei rischi. \u00c8 fondamentale soddisfare le richieste dei clienti, ottimizzando l'uso delle attrezzature:<\/p>\n<p><\/p>\n<ul>\n<li>Con un aumento della potenza delle attrezzature a causa del progresso, non rimarranno inattive a causa delle imperfezioni del software. Erlang scala bene verticalmente e sar\u00e0 sempre in grado di utilizzare tutti i core della CPU e la memoria disponibile;<\/li>\n<li>Nei contesti di ambienti cloud, possiamo gestire il numero di attrezzature in base al carico attuale o previsto e garantire SLA.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"otkazoustoychivost\">Resilienza<\/h3>\n<p><\/p>\n<p>Consideriamo due assiomi: \"I guasti non sono tollerabili\" e \"I guasti ci saranno sempre\". Per un'azienda, un guasto del software significa perdita di denaro e, peggio ancora, danno alla reputazione. Bilanciando tra possibili perdite e i costi dello sviluppo di software affidabile, spesso si pu\u00f2 trovare un compromesso.<\/p>\n<p><\/p>\n<p>Nel breve termine, un'architettura che prevede l'affidabilit\u00e0 consente di risparmiare denaro sull'acquisto di soluzioni di clustering pronte. Queste sono costose e presentano anch'esse dei bug.<br \/>\nNel lungo periodo, un'architettura resistente agli errori ripaga pi\u00f9 volte i costi del suo utilizzo in tutte le fasi dello sviluppo.<br \/>\nLa messaggistica all'interno del codice \u00e8 ancora in fase di sviluppo e consente di lavorare a fondo sull'interazione dei componenti all'interno del sistema. Ci\u00f2 semplifica il compito di reazione e gestione dei guasti, poich\u00e9 tutti i componenti responsabili gestiscono i guasti e il sistema finale sa come tornare automaticamente in uno stato operativo dopo un guasto by design.<\/p>\n<p><\/p>\n<h3 id=\"otzyvchivost\">Reattivit\u00e0<\/h3>\n<p><\/p>\n<p>Indipendentemente dai guasti, l'applicazione deve rispondere alle richieste e soddisfare gli SLA. La realt\u00e0 \u00e8 che le persone non vogliono aspettare, quindi il business deve adattarsi. Sempre pi\u00f9 applicazioni si aspettano un'alta reattivit\u00e0.<br \/>\nLe applicazioni reattive funzionano in modalit\u00e0 quasi in tempo reale. Erlang VM opera in modalit\u00e0 di soft real-time. Per alcuni settori, come il trading azionario, la medicina, la gestione delle attrezzature industriali, \u00e8 importante la modalit\u00e0 di hard real-time.<br \/>\nI sistemi reattivi migliorano l'UX e sono utili per il business.<\/p>\n<p><\/p>\n<h2 id=\"predvaritelnyy-itog\">Risultato preliminare<\/h2>\n<p><\/p>\n<p>Pianificando questo articolo, volevo condividere l'esperienza di creare un broker di messaggi e costruire sistemi complessi su di esso. Tuttavia, la parte teorica e motivazionale \u00e8 risultata piuttosto ampia.<br \/>\nNella seconda parte dell'articolo parler\u00f2 delle sfumature nell'implementazione dei punti di scambio, dei modelli di messaggistica e del loro utilizzo.<br \/>\nNella terza parte esamineremo questioni generali sull'organizzazione dei servizi, il routing e il bilanciamento. Parleremo dell'aspetto pratico della scalabilit\u00e0 e della resilienza dei sistemi.<\/p>\n<p><\/p>\n<p>Fine della prima parte.<\/p>\n<p><\/p>\n<p>Foto <noindex><a rel=\"nofollow\" href=\"https:\/\/unsplash.com\/photos\/SRjZtxsK3Os\">@lucabravo<\/a><\/noindex>.<\/p>\n<p>Fonte: <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.1.1 - 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\/it\/blog\/administrirovanie\/stroitelnye-bloki-raspredelennyh-prilozhenij-nulevoe-priblizhenie\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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\/it\/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\udd47Mattoni fondamentali delle applicazioni distribuite. Approccio zero | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/stroitelnye-bloki-raspredelennyh-prilozhenij-nulevoe-priblizhenie","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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\/it\/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\/it\/wp-json\/wp\/v2\/posts\/30785","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=30785"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/30785\/revisions"}],"predecessor-version":[{"id":162006,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/30785\/revisions\/162006"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/22770"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=30785"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=30785"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=30785"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}