{"id":6828,"date":"2024-03-29T09:00:00","date_gmt":"2024-03-29T08:00:00","guid":{"rendered":"https:\/\/blog.besharp.it\/?p=6828"},"modified":"2024-03-29T10:13:14","modified_gmt":"2024-03-29T09:13:14","slug":"strategie-di-decoupling-single-queue-o-una-coda-per-microservizio","status":"publish","type":"post","link":"https:\/\/blog.besharp.it\/it\/strategie-di-decoupling-single-queue-o-una-coda-per-microservizio\/","title":{"rendered":"Strategie di Decoupling: single-queue o una coda per microservizio?"},"content":{"rendered":"\n

Perch\u00e9 disaccoppiare i processi?<\/h2>\n\n\n\n

Il disaccoppiamento dei carichi di lavoro complessi \u00e8 una pratica che le persone talvolta intraprendono senza una chiara comprensione dei vantaggi e dei rischi. <\/p>\n\n\n\n

Sentiamo spesso parlare di applicazioni modulari, costruite con microservizi, dove \u00e8 possibile decidere cosa attivare o disattivare senza alcun impatto sulle altre parti, o che possono scalare all’infinito. <\/p>\n\n\n\n

Tuttavia, quali sono le pratiche da utilizzare per il monitoraggio? Esiste il rischio di finire per lavorare in un ambiente disordinato che, per il bene dello scaling e di tutti gli altri vantaggi, rovina l’esperienza dello sviluppatore? Seguendo questo link troverete un ottimo articolo<\/a> scritto dal mio collega e amico, Damiano, che approfondisce le considerazioni che tutti dovrebbero fare quando lavorano con i microservizi. <\/p>\n\n\n\n

Oggi discuteremo due strategie di decoupling, dei loro benefici, delle loro sfide e anche di quando una \u00e8 migliore dell’altra. Il focus sar\u00e0 sui servizi AWS perch\u00e9 ci sono molte opzioni (Amazon SQS, EventBridge, SNS), ma queste considerazioni possono essere applicate anche ad altri strumenti.<\/p>\n\n\n\n

Strategia 1: approccio a coda singola<\/h2>\n\n\n\n

Il nome \u00e8 piuttosto autoesplicativo: il nostro carico di lavoro ha un unico punto di ingresso per lo scambio e la lettura dei messaggi. Ogni produttore di eventi invia il suo payload a quella coda, dove sono in ascolto pi\u00f9 consumatori. Questo approccio viene spesso respinto come troppo caotico poich\u00e9 la coda contiene messaggi non correlati e non si allinea con una mentalit\u00e0 “orientata ai microservizi”. <\/p>\n\n\n\n

Anche se questo potrebbe essere vero: i vantaggi esistono e non dovrebbero essere trascurati. <\/p>\n\n\n\n

Immagina di lavorare su un’applicazione in cui abbiamo molti produttori di eventi e solo alcuni processi che elaborano quei messaggi. Quando il numero di tipi di eventi \u00e8 piccolo, un approccio a coda singola \u00e8 davvero facile da implementare, monitorare ed estendere. Ogni volta che viene creato un nuovo produttore, esso dovr\u00e0 semplicemente inviare messaggi all’unica coda esistente. D’altra parte, i consumatori dovranno filtrare i messaggi per tipo per gestire solo gli eventi all’interno della propria competenza, il che richiede un po’ pi\u00f9 di logica da implementare. <\/p>\n\n\n\n

Questo \u00e8 un approccio molto pi\u00f9 semplice per la costruzione di un’applicazione disaccoppiata, ma, come detto in apertura di questo articolo, non dovremmo mai iniziare con la complessit\u00e0. <\/p>\n\n\n\n

Ci\u00f2 che \u00e8 determinante \u00e8 la consapevolezza dei picchi di traffico a cui la coda potrebbe essere sottoposta; avere troppi messaggi che passano attraverso lo stesso tunnel potrebbe creare congestione.<\/p>\n\n\n\n

Strategia 2: approccio con coda dedicata ai microservizi<\/h2>\n\n\n\n

Mentre l’approccio a coda singola \u00e8 ideale per carichi di lavoro ridotti, un’applicazione pi\u00f9 complessa con pi\u00f9 persone al lavoro \u00e8 pi\u00f9 facile da mantenere se ogni microservizio ha la sua coda dedicata. Ci\u00f2 consente un monitoraggio pi\u00f9 dettagliato poich\u00e9 pu\u00f2 essere effettuato a livello di microservizio e i messaggi che attraversano la coda seguiranno uno standard. Questa strategia consente anche di creare una gestione pi\u00f9 dettagliata delle autorizzazioni: se desideri stabilire una comunicazione tra due microservizi, dovrai concedere l’accesso al produttore per generare eventi all’interno della coda del consumatore. <\/p>\n\n\n\n

Sii consapevole che, ogni volta che uno dei tuoi microservizi genera eventi per un altro microservizio, nasce una dipendenza, creando quindi un antipattern. <\/strong><\/p>\n\n\n\n

I microservizi dovrebbero essere indipendenti l’uno dall’altro, dovrebbero avere il proprio database, le proprie risorse computazionali e non dovrebbero comunicare tra loro. Questa \u00e8 la teoria naturalmente; nel mondo reale dobbiamo analizzare ogni singolo caso per capire se attenerci ai modelli comuni, o se deviare da uno standard pu\u00f2 aiutarci a creare flussi di lavoro pi\u00f9 facili da capire. <\/p>\n\n\n\n

In ogni caso, una buona strategia per gestire flussi di lavoro complessi in cui \u00e8 necessario chiamare pi\u00f9 microservizi pu\u00f2 essere quella di impostare macchine a stati<\/strong> che gestiscano in modo controllato l’inoltro degli eventi, l’analisi degli output e la presa di decisioni. Ci\u00f2 rende la nostra applicazione facile da debuggare, monitorare ed estendere con nuovi microservizi (in quanto \u00e8 sufficiente che seguano lo standard definito). Se rendi i tuoi microservizi davvero indipendenti l’uno dall’altro, sarai anche in grado di testarli senza creare effetti collaterali.<\/p>\n\n\n\n

Parliamo di monitoraggio<\/h2>\n\n\n\n

Abbiamo gi\u00e0 citato il tema del monitoraggio due volte in questo articolo. \u00c8 il momento di analizzarlo meglio. Quando si lavora con i microservizi, di solito si creano comunicazioni asincrone tra di essi ed \u00e8 spesso difficile tenere traccia del ciclo di vita di un evento specifico: se qualcosa va storto, dobbiamo essere in grado di capire quale processo \u00e8 fallito, come dovremmo rimediare all’errore e come possiamo prevenire effetti collaterali che possono incidere sull’esperienza dell’utente. Questo \u00e8 un argomento che i DevOps devono analizzare approfonditamente nella prima fase del progetto. <\/p>\n\n\n\n

Su AWS, strumenti come le dashboard di CloudWatch<\/strong> possono essere davvero utili per ottenere informazioni su come si comporta il carico di lavoro, ma bisogna andare oltre. <\/p>\n\n\n\n

Naturalmente, avere la possibilit\u00e0 di monitorare il numero di messaggi all’interno della coda o il numero di eventi che non sono riusciti a essere elaborati \u00e8 importante per capire dove si trovano i single-point of failure<\/em> e dove dovremmo considerare lo scaling, ma abbiamo comunque bisogno di qualcosa che ci aiuti a monitorare il carico di lavoro a livello di applicazione. <\/p>\n\n\n\n

Ecco dove AWS X-Ray pu\u00f2 aiutarci: AWS X-Ray ci consente di tracciare e analizzare le richieste mentre viaggiano attraverso la nostra applicazione. Questo ci fornisce una visione dettagliata del suo comportamento, consentendoci di identificare dove si verificano i colli di bottiglia e quali servizi causano ritardi. Questa visione end-to-end del flusso di lavoro ci consente di identificare e risolvere i problemi in modo pi\u00f9 efficace. Con X-Ray possiamo ottenere metriche utili come il tempo impiegato dal nostro microservizio per fare qualcosa (come una richiesta HTTP) o quali altri microservizi sono stati chiamati per elaborare un evento.<\/p>\n\n\n\n

Servizi AWS per il disaccoppiamento<\/h2>\n\n\n\n

Quando parliamo del disaccoppiamento dei processi, il primo servizio AWS che ci viene in mente \u00e8 Amazon SQS. \u00c8 stato creato proprio con questo scopo: i produttori possono inserire i loro eventi all’interno di una coda mentre i consumatori effettuano il polling su quella coda per vedere se ci sono dei messaggi da elaborare. Amazon SQS offre diverse funzionalit\u00e0 che possono essere utili per il nostro obiettivo, come le dead-letter queue <\/em>per i messaggi non elaborati, long-polling<\/em> per evitare sul lato del consumatore di inondare la coda con richieste che non produrranno nessun output, e code FIFO se abbiamo bisogno di elaborare i nostri eventi nell’ordine in cui sono stati prodotti. <\/p>\n\n\n\n

Amazon SQS \u00e8 un ottimo servizio, ma possiamo trovare in altri servizi AWS delle funzionalit\u00e0 che possono soddisfare meglio le nostre esigenze. Un servizio AWS che mi piace particolarmente \u00e8 Amazon EventBridge. Con Amazon EventBridge possiamo registrare pi\u00f9 destinazioni per essere notificati ogni volta che viene pubblicato un messaggio in un bus degli eventi, ma possiamo anche filtrare questi messaggi specificando dei pattern per inoltrarli alla destinazione corretta. Questo \u00e8 davvero utile se stiamo costruendo un approccio a coda singola!<\/p>\n\n\n\n

<\/p>\n\n\n

\n
\"Decoupling<\/figure><\/div>\n\n\n

Sorgente immagine: AWS Documentation<\/a><\/em><\/p>\n\n\n\n

Ci sono altre due funzionalit\u00e0 di Amazon EventBridge che adoro: archive<\/em>\/replay <\/em>e pipes. <\/p>\n\n\n\n

Gli archivi<\/strong> sono spazi in cui possiamo memorizzare eventi che rispecchiano un pattern, hanno un periodo di conservazione e possono essere riprodotti successivamente. <\/p>\n\n\n\n

La riproduzione<\/strong> degli eventi ci aiuta a testare i nostri microservizi per assicurarci di non aver aggiunto alcuna regressione mentre lavoriamo su una nuova funzionalit\u00e0, ma possiamo anche rielaborare eventi precedentemente falliti. Gli eventi vengono riprodotti nell’ordine esatto in cui sono stati ricevuti inizialmente. <\/p>\n\n\n\n

EventBridge Pipes<\/strong> \u00e8 una funzionalit\u00e0 che \u00e8 stata rilasciata a dicembre 2022 e ci aiuta a creare una piccola logica di business per filtrare ulteriormente i nostri eventi o arricchirli con altre informazioni. La funzione di arricchimento pu\u00f2 essere realizzata facilmente con una Lambda function, ma anche con una funzione di passaggio o una richiesta HTTP. Penso che Lambda sia il servizio pi\u00f9 adatto a questo scopo, poich\u00e9 desidero che l’arricchimento sia il pi\u00f9 veloce possibile. Le pipes hanno un costo e dovrebbero essere prese in considerazione nella pianificazione dell’architettura, specialmente quando ci aspettiamo che tonnellate di eventi da elaborare!<\/p>\n\n\n\n

<\/p>\n\n\n

\n
\"eventbridge<\/figure><\/div>\n\n\n

Sorgente immagine: AWS Documentation<\/a><\/em><\/p>\n\n\n\n

Un esempio concreto<\/h2>\n\n\n\n

Recentemente ho utilizzato un modello di disaccoppiamento in un progetto in cui dovevo costruire un’API REST che, quando chiamata, doveva eseguire alcune logiche e query sul database e, a seconda del risultato della query, effettuare alcune chiamate API a servizi esterni che implementano protocolli diversi. <\/p>\n\n\n\n

Quello che ho fatto \u00e8 stato semplicemente suddividere l’intera logica in due macro categorie, ognuna di propriet\u00e0 di una funzione Lambda. La prima funzione Lambda elabora il payload ricevuto tramite la chiamata API, effettua le query sul database e recupera tutti i parametri necessari per gli step successivi. Infine crea un payload che invia a un bus di EventBridge, dove tra i parametri c’\u00e8 anche una propriet\u00e0 che specifica il tipo di servizio di terze parti che deve essere chiamato. Poi ho creato un set di funzioni Lambda, una per ogni servizio di terze parti, tutte registrate come target sullo stesso bus con un pattern che corrisponde solo al loro tipo di servizio. Queste funzioni si occupano di gestire la logica di business specifica per quel servizio di terze parti<\/p>\n\n\n\n

In questo modo sono stato in grado di creare molte funzioni Lambda pi\u00f9 piccole e facili da mantenere che si occupano solo di ci\u00f2 che devono fare, con una funzione Lambda produttore che pubblica sempre messaggi sullo stesso servizio AWS e un set di funzioni Lambda consumatrici, tutte simili per quanto riguarda la configurazione generale ma che differiscono per la logica di business.<\/p>\n\n\n\n

Per riassumere…<\/h2>\n\n\n\n

I pattern sono stati creati per semplificarci la vita e non reinventare la ruota ogni volta. Sono uno standard ben noto che ogni DevOps con un po’ di esperienza dovrebbe conoscere perch\u00e9 mirano a risolvere problemi reali. <\/p>\n\n\n\n

Allo stesso tempo, dobbiamo essere concentrati sul nostro obiettivo: penso sempre che il miglior approccio sia iniziare in modo semplice e rendere le cose complesse in seguito, se necessario. In passato ho utilizzato entrambe le strategie, scegliendo una piuttosto che l’altra in base alla complessit\u00e0 e alla criticit\u00e0 del progetto su cui stavo lavorando. <\/p>\n\n\n\n

Qual \u00e8 la vostra esperienza su questo argomento? Come approcciate il tema del decoupling? Fatecelo sapere nei commenti!<\/p>\n\n\n\n


\n\n\n\n

About Proud2beCloud<\/h4>\n\n\n\n

Proud2beCloud \u00e8 il blog di beSharp<\/a>, APN Premier Consulting Partner italiano esperto nella progettazione, implementazione e gestione di infrastrutture Cloud complesse e servizi AWS avanzati. Prima di essere scrittori, siamo Solutions Architect che, dal 2007, lavorano quotidianamente con i servizi AWS. Siamo innovatori alla costante ricerca della soluzione pi\u00f9 all’avanguardia per noi e per i nostri clienti. Su Proud2beCloud condividiamo regolarmente i nostri migliori spunti con chi come noi, per lavoro o per passione, lavora con il Cloud di AWS. Partecipa alla discussione!<\/p>\n","protected":false},"excerpt":{"rendered":"

Perch\u00e9 disaccoppiare i processi? Il disaccoppiamento dei carichi di lavoro complessi \u00e8 una pratica che le persone talvolta intraprendono senza […]<\/p>\n","protected":false},"author":18,"featured_media":6855,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[481],"tags":[307,688,309],"yoast_head":"\nStrategie di Decoupling: single-queue o una coda per microservizio? - Proud2beCloud Blog<\/title>\n<meta name=\"description\" content=\"Scegliere la miglior strategia di decoupling: single-queue o una coda per ciascun microservizio? Scopriamolo in questo articolo!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.besharp.it\/it\/strategie-di-decoupling-single-queue-o-una-coda-per-microservizio\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Strategie di Decoupling: single-queue o una coda per microservizio?\" \/>\n<meta property=\"og:description\" content=\"Scegliere la miglior strategia di decoupling: single-queue o una coda per ciascun microservizio? Scopriamolo in questo articolo!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.besharp.it\/it\/strategie-di-decoupling-single-queue-o-una-coda-per-microservizio\/\" \/>\n<meta property=\"og:site_name\" content=\"Proud2beCloud Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-29T08:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-29T09:13:14+00:00\" \/>\n<meta name=\"author\" content=\"Mattia Costamagna\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Strategie di Decoupling: single-queue o una coda per microservizio?\" \/>\n<meta name=\"twitter:description\" content=\"Scegliere la miglior strategia di decoupling: single-queue o una coda per ciascun microservizio? Scopriamolo in questo articolo!\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mattia Costamagna\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.besharp.it\/it\/strategie-di-decoupling-single-queue-o-una-coda-per-microservizio\/\",\"url\":\"https:\/\/blog.besharp.it\/it\/strategie-di-decoupling-single-queue-o-una-coda-per-microservizio\/\",\"name\":\"Strategie di Decoupling: single-queue o una coda per microservizio? - Proud2beCloud Blog\",\"isPartOf\":{\"@id\":\"https:\/\/blog.besharp.it\/it\/#website\"},\"datePublished\":\"2024-03-29T08:00:00+00:00\",\"dateModified\":\"2024-03-29T09:13:14+00:00\",\"author\":{\"@id\":\"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/955078f10c511e605a1d9d7f877a81b4\"},\"description\":\"Scegliere la miglior strategia di decoupling: single-queue o una coda per ciascun microservizio? Scopriamolo in questo articolo!\",\"breadcrumb\":{\"@id\":\"https:\/\/blog.besharp.it\/it\/strategie-di-decoupling-single-queue-o-una-coda-per-microservizio\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.besharp.it\/it\/strategie-di-decoupling-single-queue-o-una-coda-per-microservizio\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.besharp.it\/it\/strategie-di-decoupling-single-queue-o-una-coda-per-microservizio\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blog.besharp.it\/it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Strategie di Decoupling: single-queue o una coda per microservizio?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.besharp.it\/it\/#website\",\"url\":\"https:\/\/blog.besharp.it\/it\/\",\"name\":\"Proud2beCloud Blog\",\"description\":\"il blog di beSharp\",\"alternateName\":\"Proud2beCloud Blog\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.besharp.it\/it\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/955078f10c511e605a1d9d7f877a81b4\",\"name\":\"Mattia Costamagna\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ac472d020d5526796e24b26d859f7609?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ac472d020d5526796e24b26d859f7609?s=96&d=mm&r=g\",\"caption\":\"Mattia Costamagna\"},\"description\":\"DevOps engineer and cloud-native developer @ beSharp. I love spending my free time reading novels and listening to 70s rock and blues music. Always in search of new technologies and frameworks to test and use. Craft beer is my fuel!\",\"url\":\"https:\/\/blog.besharp.it\/it\/author\/mattia-costamagna\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Strategie di Decoupling: single-queue o una coda per microservizio? - Proud2beCloud Blog","description":"Scegliere la miglior strategia di decoupling: single-queue o una coda per ciascun microservizio? Scopriamolo in questo articolo!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.besharp.it\/it\/strategie-di-decoupling-single-queue-o-una-coda-per-microservizio\/","og_locale":"it_IT","og_type":"article","og_title":"Strategie di Decoupling: single-queue o una coda per microservizio?","og_description":"Scegliere la miglior strategia di decoupling: single-queue o una coda per ciascun microservizio? Scopriamolo in questo articolo!","og_url":"https:\/\/blog.besharp.it\/it\/strategie-di-decoupling-single-queue-o-una-coda-per-microservizio\/","og_site_name":"Proud2beCloud Blog","article_published_time":"2024-03-29T08:00:00+00:00","article_modified_time":"2024-03-29T09:13:14+00:00","author":"Mattia Costamagna","twitter_card":"summary_large_image","twitter_title":"Strategie di Decoupling: single-queue o una coda per microservizio?","twitter_description":"Scegliere la miglior strategia di decoupling: single-queue o una coda per ciascun microservizio? Scopriamolo in questo articolo!","twitter_misc":{"Scritto da":"Mattia Costamagna","Tempo di lettura stimato":"9 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blog.besharp.it\/it\/strategie-di-decoupling-single-queue-o-una-coda-per-microservizio\/","url":"https:\/\/blog.besharp.it\/it\/strategie-di-decoupling-single-queue-o-una-coda-per-microservizio\/","name":"Strategie di Decoupling: single-queue o una coda per microservizio? - Proud2beCloud Blog","isPartOf":{"@id":"https:\/\/blog.besharp.it\/it\/#website"},"datePublished":"2024-03-29T08:00:00+00:00","dateModified":"2024-03-29T09:13:14+00:00","author":{"@id":"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/955078f10c511e605a1d9d7f877a81b4"},"description":"Scegliere la miglior strategia di decoupling: single-queue o una coda per ciascun microservizio? Scopriamolo in questo articolo!","breadcrumb":{"@id":"https:\/\/blog.besharp.it\/it\/strategie-di-decoupling-single-queue-o-una-coda-per-microservizio\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.besharp.it\/it\/strategie-di-decoupling-single-queue-o-una-coda-per-microservizio\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blog.besharp.it\/it\/strategie-di-decoupling-single-queue-o-una-coda-per-microservizio\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.besharp.it\/it\/"},{"@type":"ListItem","position":2,"name":"Strategie di Decoupling: single-queue o una coda per microservizio?"}]},{"@type":"WebSite","@id":"https:\/\/blog.besharp.it\/it\/#website","url":"https:\/\/blog.besharp.it\/it\/","name":"Proud2beCloud Blog","description":"il blog di beSharp","alternateName":"Proud2beCloud Blog","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.besharp.it\/it\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"it-IT"},{"@type":"Person","@id":"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/955078f10c511e605a1d9d7f877a81b4","name":"Mattia Costamagna","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/ac472d020d5526796e24b26d859f7609?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ac472d020d5526796e24b26d859f7609?s=96&d=mm&r=g","caption":"Mattia Costamagna"},"description":"DevOps engineer and cloud-native developer @ beSharp. I love spending my free time reading novels and listening to 70s rock and blues music. Always in search of new technologies and frameworks to test and use. Craft beer is my fuel!","url":"https:\/\/blog.besharp.it\/it\/author\/mattia-costamagna\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/posts\/6828"}],"collection":[{"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/users\/18"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/comments?post=6828"}],"version-history":[{"count":5,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/posts\/6828\/revisions"}],"predecessor-version":[{"id":6875,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/posts\/6828\/revisions\/6875"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/media\/6855"}],"wp:attachment":[{"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/media?parent=6828"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/categories?post=6828"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/tags?post=6828"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}