{"id":1126,"date":"2019-12-30T18:33:34","date_gmt":"2019-12-30T17:33:34","guid":{"rendered":"https:\/\/blog.besharp.it\/stateful-vs-stateless-cosa-e-meglio\/"},"modified":"2021-03-17T15:09:01","modified_gmt":"2021-03-17T14:09:01","slug":"stateful-vs-stateless-cosa-e-meglio","status":"publish","type":"post","link":"https:\/\/blog.besharp.it\/it\/stateful-vs-stateless-cosa-e-meglio\/","title":{"rendered":"Stateful vs. Stateless: cosa \u00e8 meglio?"},"content":{"rendered":"

Nell’era dei servizi SaaS,<\/strong> la costruzione di microservizi stateless sembra essere l’unico modo per raggiungere il successo. Ma \u00e8 sempre possibile progettare servizi stateless? E quando \u00e8 opportuno progettare invece microservizi di tipo Stateful?<\/p>\n

Cominciamo dando una prima definizione dei due termini:<\/h2>\n

Parliamo di microservizi Stateless<\/strong> quando nessun dato viene memorizzato direttamente sull’host. Il servizio \u00e8 perfettamente in grado di funzionare servendosi solo delle informazioni disponibili nel payload delle richieste, oppure acquisendo le informazioni necessarie da un servizio Stateful dedicato, come ad esempio un database.<\/p>\n

Nel caso di microservizi Stateful<\/strong>, al contrario, le richieste possono essere servite esclusivamente grazie ad un sistema di memorizzazione dei dati sull’host.<\/p>\n

Stateful vs Stateless: cosa cambia?<\/h2>\n

Stateless<\/h3>\n

Il server elabora le richieste sulla base delle sole informazioni trasmesse ad ogni singola richiesta<\/strong>, non servendosi di informazioni relative a richieste precedenti (in questo caso, non c’\u00e8 alcun bisogno di mantenere informazioni di stato tra una richiesta e l’altra), oppure serve le richieste attingendo, per le informazioni di stato, da un servizio esterno, come un database<\/strong>.
\nE’ interessante sottolineare che il fatto che qualsiasi istanza possa recuperare tutte le informazioni di stato necessarie per eseguire un comportamento consente di ottenere resilienza<\/strong> ed elasticit\u00e0<\/strong>, oltre che la possibilit\u00e0 per qualsiasi istanza di eseguire qualsiasi attivit\u00e0. L’efficienza<\/strong>, inoltre, \u00e8 garantita dal fatto che richieste diverse possono essere elaborate anche da server diversi.<\/p>\n

Stateful<\/h3>\n

Alcuni esempi di servizi a stato sono database<\/strong> e servizi basati su protocolli internet che necessitano di una stretta gestione dello stato<\/strong> sui singoli host. Il server elaborer\u00e0 le richieste sia in base alle informazioni trasmesse ad ogni richiesta, che alle informazioni memorizzate da richieste precedenti.
\nNel caso di microservizi Stateful, lo stesso server dovr\u00e0 servire tutte le richieste<\/strong> collegate alle stesse informazioni di stato (oppure saranno le informazioni di stato a dover essere condivise con tutti i server che ne hanno bisogno per servire richieste).<\/p>\n

Cosa comporta la gestione Stateful di carichi di lavoro?<\/h2>\n

Isolamento delle risorse<\/h3>\n

Molte delle attuali soluzioni di orchestrazione dei container sul mercato sono ancora basate su un approccio di tipo “best-effort” per quanto riguarda l’allocazione di risorse come CPU, memoria e storage. Questo risulta essere comunque un approccio rischioso che pu\u00f2 causare la perdita di transazioni dei clienti o di dati a causa di prestazioni inaffidabili.<\/p>\n

Storage persistente<\/h3>\n

Ogni servizio Stateful pu\u00f2 richiedere e supportare tipi diversi di storage (ad esempio dispositivi a blocchi o file system distribuiti). Determinare il tipo di storage di supporto migliore per un servizio a stato pu\u00f2 essere impegnativo.<\/p>\n

Possiamo ritenere questi due limiti due conseguenze del fatto che molti microservizi Stateful sono stati pensati e costruiti per ambienti legacy<\/strong> e probabilmente monolitici<\/strong>.<\/p>\n

Per superare limiti di questo tipo, le organizzazioni potrebbero iniziare tentando di containerizzare i loro servizi Stateful<\/strong>. Per poterlo fare, per\u00f2, avrebbero bisogno di sviluppare sia strumenti altamente specifici al fine di riuscire a coordinare tutte le istanze correlate ed ottenere cos\u00ec High Availability<\/strong>, sia strategie sofisticate per distribuire, gestire o far funzionare al meglio questi servizi.
\nQuesto potrebbe causare all’azienda un notevole overhead manuale<\/strong> probabilmente dispendioso in termini di tempo e costi, oltre che far nascere la necessit\u00e0 di sviluppare operation personalizzate<\/strong> per ogni singolo servizio con conseguente notevole rischio operativo.<\/p>\n

E il SaaS?<\/h2>\n

Il SaaS (Software as a Service)<\/strong> \u00e8 un modello di licenza e fornitura dei software. Questi, hostati in modo centralizzato, vengono erogati su abbonamento.
\nContrariamente a quanto si pensa, il SaaS non richiede necessariamente microservizi di tipo Stateless<\/strong>, anzi: non tutti i processi possono essere resi tali (o non per tutti vale la pena essere Stateless!) \u00e8 comunque possibile costruire servizi SaaS di successo sia Stateless, che Stateful.
\nResta comunque vero che un servizio monolitico di tipo Stateful sar\u00e0 probabilmente pi\u00f9 costoso e difficile da mantenere, oltre che meno scalabile. Inoltre, avr\u00e0 bisogno di una gestione particolare sia per i backup, che per questione di HA.<\/p>\n

Conclusione<\/h2>\n

Se \u00e8 vero che progettare i microservizi Stateless<\/strong> ha molti vantaggi, soprattutto in termini di scalabilit\u00e0<\/strong>, costi<\/strong> ed efficienza<\/strong> (si pensi ad esempio ad una infrastruttura di notevoli dimensioni, con un bacino di utenti considerevole e distribuita geograficamente a livello mondiale), a volte progettare Stateful \u00e8 una necessit\u00e0.<\/p>\n

Ora sappiamo che questo non preclude affatto la possibilit\u00e0 di ottenere un SaaS di successo<\/strong> sia dal punto di vista tecnico, che di business.<\/p>\n

Tutto ci\u00f2 che occorre fare in pi\u00f9 \u00e8 garantire un buon livello di scalabilit\u00e0<\/strong> e introdurre un ottimo piano di backup e Disaster Recovery<\/strong>.<\/p>\n

Volete qualche consiglio in pi\u00f9 al riguardo? Continuate a seguirci per carpire i trucchi del mestiere \ud83d\ude09<\/p>\n","protected":false},"excerpt":{"rendered":"

Nell’era dei servizi SaaS, la costruzione di microservizi stateless sembra essere l’unico modo per raggiungere il successo. Ma \u00e8 sempre […]<\/p>\n","protected":false},"author":8,"featured_media":1114,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[481],"tags":[305,311,313],"yoast_head":"\nStateful vs. Stateless: cosa \u00e8 meglio? - Proud2beCloud Blog<\/title>\n<meta name=\"description\" content=\"Nell'era del SaaS, costruire microservizi stateless sembra essere l'unico modo per raggiungere il successo. Ma \u00e8 sempre possibile farlo?\" \/>\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\/stateful-vs-stateless-cosa-e-meglio\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Stateful vs. Stateless: cosa \u00e8 meglio?\" \/>\n<meta property=\"og:description\" content=\"Nell'era del SaaS, costruire microservizi stateless sembra essere l'unico modo per raggiungere il successo. Ma \u00e8 sempre possibile farlo?\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.besharp.it\/it\/stateful-vs-stateless-cosa-e-meglio\/\" \/>\n<meta property=\"og:site_name\" content=\"Proud2beCloud Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-12-30T17:33:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-03-17T14:09:01+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.besharp.it\/wp-content\/uploads\/2019\/12\/copertine-blog_stateless-22.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1668\" \/>\n\t<meta property=\"og:image:height\" content=\"1251\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Alessio Gandini\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Stateful vs. Stateless: cosa \u00e8 meglio?\" \/>\n<meta name=\"twitter:description\" content=\"Nell'era del SaaS, costruire microservizi stateless sembra essere l'unico modo per raggiungere il successo. Ma \u00e8 sempre possibile farlo?\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/blog.besharp.it\/wp-content\/uploads\/2019\/12\/copertine-blog_stateless-22.png\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Alessio Gandini\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.besharp.it\/it\/stateful-vs-stateless-cosa-e-meglio\/\",\"url\":\"https:\/\/blog.besharp.it\/it\/stateful-vs-stateless-cosa-e-meglio\/\",\"name\":\"Stateful vs. Stateless: cosa \u00e8 meglio? - Proud2beCloud Blog\",\"isPartOf\":{\"@id\":\"https:\/\/blog.besharp.it\/it\/#website\"},\"datePublished\":\"2019-12-30T17:33:34+00:00\",\"dateModified\":\"2021-03-17T14:09:01+00:00\",\"author\":{\"@id\":\"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/e7262d28e51528c2e420327f9b18cd43\"},\"description\":\"Nell'era del SaaS, costruire microservizi stateless sembra essere l'unico modo per raggiungere il successo. Ma \u00e8 sempre possibile farlo?\",\"breadcrumb\":{\"@id\":\"https:\/\/blog.besharp.it\/it\/stateful-vs-stateless-cosa-e-meglio\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.besharp.it\/it\/stateful-vs-stateless-cosa-e-meglio\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.besharp.it\/it\/stateful-vs-stateless-cosa-e-meglio\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blog.besharp.it\/it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Stateful vs. Stateless: cosa \u00e8 meglio?\"}]},{\"@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\/e7262d28e51528c2e420327f9b18cd43\",\"name\":\"Alessio Gandini\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/eeb98518768d999bff24f8358b464fe2?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/eeb98518768d999bff24f8358b464fe2?s=96&d=mm&r=g\",\"caption\":\"Alessio Gandini\"},\"description\":\"Cloud-native Development Line Manager @ beSharp, DevOps Engineer e AWS expert. Computer geek da quando avevo 6 anni, appassionato di informatica ed elettronica a tutto tondo. Ultimamente sto esplorando l'esperienza utente vocale e il mondo dell'IoT. Appassionato di cinema e grande consumatore di serie TV, videogiocatore della domenica.\",\"url\":\"https:\/\/blog.besharp.it\/it\/author\/alessio-gandini\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Stateful vs. Stateless: cosa \u00e8 meglio? - Proud2beCloud Blog","description":"Nell'era del SaaS, costruire microservizi stateless sembra essere l'unico modo per raggiungere il successo. Ma \u00e8 sempre possibile farlo?","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\/stateful-vs-stateless-cosa-e-meglio\/","og_locale":"it_IT","og_type":"article","og_title":"Stateful vs. Stateless: cosa \u00e8 meglio?","og_description":"Nell'era del SaaS, costruire microservizi stateless sembra essere l'unico modo per raggiungere il successo. Ma \u00e8 sempre possibile farlo?","og_url":"https:\/\/blog.besharp.it\/it\/stateful-vs-stateless-cosa-e-meglio\/","og_site_name":"Proud2beCloud Blog","article_published_time":"2019-12-30T17:33:34+00:00","article_modified_time":"2021-03-17T14:09:01+00:00","og_image":[{"width":1668,"height":1251,"url":"https:\/\/blog.besharp.it\/wp-content\/uploads\/2019\/12\/copertine-blog_stateless-22.png","type":"image\/png"}],"author":"Alessio Gandini","twitter_card":"summary_large_image","twitter_title":"Stateful vs. Stateless: cosa \u00e8 meglio?","twitter_description":"Nell'era del SaaS, costruire microservizi stateless sembra essere l'unico modo per raggiungere il successo. Ma \u00e8 sempre possibile farlo?","twitter_image":"https:\/\/blog.besharp.it\/wp-content\/uploads\/2019\/12\/copertine-blog_stateless-22.png","twitter_misc":{"Scritto da":"Alessio Gandini","Tempo di lettura stimato":"4 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blog.besharp.it\/it\/stateful-vs-stateless-cosa-e-meglio\/","url":"https:\/\/blog.besharp.it\/it\/stateful-vs-stateless-cosa-e-meglio\/","name":"Stateful vs. Stateless: cosa \u00e8 meglio? - Proud2beCloud Blog","isPartOf":{"@id":"https:\/\/blog.besharp.it\/it\/#website"},"datePublished":"2019-12-30T17:33:34+00:00","dateModified":"2021-03-17T14:09:01+00:00","author":{"@id":"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/e7262d28e51528c2e420327f9b18cd43"},"description":"Nell'era del SaaS, costruire microservizi stateless sembra essere l'unico modo per raggiungere il successo. Ma \u00e8 sempre possibile farlo?","breadcrumb":{"@id":"https:\/\/blog.besharp.it\/it\/stateful-vs-stateless-cosa-e-meglio\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.besharp.it\/it\/stateful-vs-stateless-cosa-e-meglio\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blog.besharp.it\/it\/stateful-vs-stateless-cosa-e-meglio\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.besharp.it\/it\/"},{"@type":"ListItem","position":2,"name":"Stateful vs. Stateless: cosa \u00e8 meglio?"}]},{"@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\/e7262d28e51528c2e420327f9b18cd43","name":"Alessio Gandini","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/eeb98518768d999bff24f8358b464fe2?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/eeb98518768d999bff24f8358b464fe2?s=96&d=mm&r=g","caption":"Alessio Gandini"},"description":"Cloud-native Development Line Manager @ beSharp, DevOps Engineer e AWS expert. Computer geek da quando avevo 6 anni, appassionato di informatica ed elettronica a tutto tondo. Ultimamente sto esplorando l'esperienza utente vocale e il mondo dell'IoT. Appassionato di cinema e grande consumatore di serie TV, videogiocatore della domenica.","url":"https:\/\/blog.besharp.it\/it\/author\/alessio-gandini\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/posts\/1126"}],"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\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/comments?post=1126"}],"version-history":[{"count":0,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/posts\/1126\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/media\/1114"}],"wp:attachment":[{"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/media?parent=1126"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/categories?post=1126"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/tags?post=1126"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}