{"id":35006,"date":"2019-10-31T22:01:47","date_gmt":"2019-10-31T19:01:47","guid":{"rendered":"https:\/\/prohoster.info\/blog\/5-printsipov-zdravogo-smysla-dlya-sozdaniya-cloud-native-apps\/"},"modified":"2019-10-31T22:01:47","modified_gmt":"2019-10-31T19:01:47","slug":"5-printsipov-zdravogo-smysla-dlya-sozdaniya-cloud-native-apps","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/news\/5-printsipov-zdravogo-smysla-dlya-sozdaniya-cloud-native-apps","title":{"rendered":"5 principi di buon senso per la creazione di app cloud-native","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Le applicazioni \u00abcloud native\u00bb o semplicemente \u00abcloud\u00bb sono progettate specificamente per operare nelle infrastrutture cloud. Di solito, sono costruite come un insieme di microservizi debolmente accoppiati, confezionati in contenitori, che a loro volta sono gestiti da una piattaforma cloud. Queste applicazioni sono pronte per le interruzioni per impostazione predefinita, il che significa che funzionano in modo affidabile e si scalano anche in caso di fallimenti significativi dell'infrastruttura. D'altro canto, ci sono set di vincoli (contratti) che la piattaforma cloud impone sulle applicazioni containerizzate per poterle gestire automaticamente.<\/p>\n<p><img decoding=\"async\" alt=\"5 principi di buon senso per la creazione di app cloud-native\" src=\"\/wp-content\/uploads\/2019\/06\/1f4af6f356ed36d3fbd8adef333501fa.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nConsapevoli della necessit\u00e0 e dell'importanza del passaggio alle applicazioni cloud, molte organizzazioni non sanno ancora da dove cominciare. In questo post, esamineremo una serie di principi la cui osservanza nella progettazione di applicazioni containerizzate consentir\u00e0 di realizzare il potenziale delle piattaforme cloud e garantire un funzionamento e una scalabilit\u00e0 affidabili delle applicazioni anche di fronte a seri guasti dell'infrastruttura IT. L'obiettivo finale dei principi qui esposti \u00e8 imparare a creare applicazioni che possono essere gestite automaticamente dalle piattaforme cloud, come Kubernetes.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Principi di progettazione del software<\/h3>\n<p>\nNel mondo della programmazione, i principi si riferiscono a regole piuttosto generali che devono essere rispettate durante lo sviluppo del software. Possono essere applicati con qualsiasi linguaggio di programmazione. Ogni principio ha i propri obiettivi, il cui strumento di attuazione sono solitamente modelli e pratiche. Esiste anche un insieme di principi fondamentali per la creazione di software di qualit\u00e0, da cui derivano tutti gli altri. Ecco alcuni esempi di principi fondamentali:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/KISS_(%D0%BF%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF)\">KISS<\/a><\/noindex> (Keep it simple, stupid) \u2013 non complicare;<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Don%E2%80%99t_repeat_yourself\">DRY<\/a><\/noindex> (Don\u2019t repeat yourself) \u2013 non ripetersi;<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/YAGNI\">YAGNI<\/a><\/noindex> (You aren\u2019t gonna need it) \u2013 non creare ci\u00f2 di cui non hai bisogno immediato;<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A0%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8\">SoC<\/a><\/noindex> (Separation of concerns) \u2013 separare le responsabilit\u00e0.<\/li>\n<\/ul>\n<p>\nCome si pu\u00f2 vedere, questi principi non stabiliscono regole specifiche, ma appartengono al cosiddetto ambito del buon senso basato sull'esperienza pratica, condiviso da molti sviluppatori e a cui essi fanno riferimento regolarmente.<br \/>\nInoltre, esiste <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/SOLID_(%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)\">SOLID<\/a><\/noindex> \u2013 un insieme dei primi cinque principi della programmazione e progettazione orientata agli oggetti, formulati da Robert Martin. SOLID include principi generali e aperti a interpretazione, che \u2013 se applicati insieme \u2013 aiutano a creare sistemi software di qualit\u00e0 superiore e a mantenerli meglio nel lungo periodo.<\/p>\n<p>I principi SOLID appartengono alla sfera della programmazione orientata agli oggetti e sono formulati in termini di concetti e nozioni come classi, interfacce e ereditariet\u00e0. Analogamente, anche per le applicazioni cloud \u00e8 possibile formulare principi di sviluppo, dove l\u2019elemento base non \u00e8 la classe, ma il contenitore. Seguendo questi principi, \u00e8 possibile creare applicazioni containerizzate che rispondono meglio agli obiettivi delle piattaforme cloud come Kubernetes.<\/p>\n<h3>Contenitori orientati al cloud: l'approccio Red Hat<\/h3>\n<p>\nOggi \u00e8 relativamente facile impacchettare praticamente qualsiasi applicazione in contenitori. Ma affinch\u00e9 le applicazioni siano automatizzate e orchestrate in modo efficace su piattaforme cloud tipo Kubernetes, \u00e8 necessario fare ulteriori sforzi.<br \/>\nLa base delle idee sottostanti \u00e8 stata la metodologia <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/SOLID_(%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)\">The Twelve-Factor App<\/a><\/noindex> e numerosi altri lavori su vari aspetti della creazione di applicazioni web, dalla gestione del codice sorgente ai modelli di scalabilit\u00e0. I principi descritti si applicano esclusivamente allo sviluppo di applicazioni containerizzate basate su microservizi e destinate a piattaforme cloud come Kubernetes. L'elemento fondamentale nel nostro ragionamento \u00e8 l'immagine del contenitore, e con l'ambiente di esecuzione dei contenitori intendiamo la piattaforma di orchestrazione dei contenitori. L'obiettivo dei principi proposti \u00e8 creare contenitori per i quali la maggior parte delle piattaforme di orchestrazione possa automatizzare attivit\u00e0 di scheduling, scaling e monitoring. I principi sono esposti in ordine arbitrario.<\/p>\n<h3>Principio della singola responsabilit\u00e0 (Single Concern Principle, SCP)<\/h3>\n<p>\nQuesto principio \u00e8 in gran parte simile al principio della singola responsabilit\u00e0 (Single Responsibility Principle, <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9F%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF_%D0%B5%D0%B4%D0%B8%D0%BD%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8\">SRP<\/a><\/noindex>), che fa parte del set SOLID e afferma che ogni oggetto deve avere una sola responsabilit\u00e0, e questa responsabilit\u00e0 deve essere completamente incapsulata nella classe. L'essenza dell'SRP \u00e8 che ogni responsabilit\u00e0 rappresenta una causa di cambiamento, e la classe deve avere una e una sola causa per cambiare.<\/p>\n<p>Nell'SCP, invece della parola \"responsabilit\u00e0\" (responsibility) usiamo la parola \"compito\" (concern), per indicare un livello di astrazione superiore e un uso pi\u00f9 ampio del contenitore rispetto a una classe OOP. E se l'obiettivo dell'SRP \u00e8 avere solo una causa di cambiamento, l'SCP si basa sul desiderio di ampliare le possibilit\u00e0 di riutilizzo e sostituzione dei contenitori. Seguendo l'SRP e creando un contenitore che risolve un solo compito e lo fa in modo funzionale e completo, aumentate le possibilit\u00e0 di riutilizzare l'oggetto di quel contenitore in diversi contesti applicativi.<\/p>\n<p>Il principio SCP afferma che ogni contenitore deve risolvere un unico compito e farlo bene. Inoltre, l'SCP nel mondo dei contenitori \u00e8 pi\u00f9 facile da raggiungere rispetto all'SRP nel mondo OOP, poich\u00e9 i contenitori di solito eseguono un solo processo, e la maggior parte del tempo quel processo risolve un solo compito.<\/p>\n<p>Se un certo microservizio del contenitore deve risolvere pi\u00f9 compiti, pu\u00f2 essere suddiviso in contenitori a singolo compito e aggregato all'interno di un singolo pod (unit\u00e0 di distribuzione della piattaforma dei contenitori) utilizzando i modelli sidecar e init-containers. Inoltre, l'SCP facilita la sostituzione di un vecchio contenitore (ad esempio, un server web o un broker di messaggi) con uno nuovo che risolve lo stesso compito, ma offre funzionalit\u00e0 ampliate o si scala meglio.<\/p>\n<p><img decoding=\"async\" alt=\"5 principi di buon senso per la creazione di app cloud-native\" src=\"\/wp-content\/uploads\/2019\/06\/a029e1ca36ace66550c94087e4aecc8e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Principio di alta osservabilit\u00e0 (High Observability Principle, HOP)<\/h3>\n<p>\nNell'utilizzo di contenitori come metodo unificato per il packaging e l'avvio delle applicazioni, le stesse applicazioni sono considerate come una \"scatola nera\". Tuttavia, se si tratta di contenitori cloud, essi devono fornire all'ambiente di esecuzione API speciali per controllare l'integrit\u00e0 dei contenitori e intraprendere le azioni necessarie. Senza questo, non sar\u00e0 possibile unificare l'automazione dell'aggiornamento dei contenitori e la gestione del loro ciclo di vita, il che, a sua volta, comprometter\u00e0 la robustezza e la facilit\u00e0 d'uso del sistema software.<\/p>\n<p><img decoding=\"async\" alt=\"5 principi di buon senso per la creazione di app cloud-native\" src=\"\/wp-content\/uploads\/2019\/06\/7df1320108d9b635c10c6cf41d5dfef6.jpg\" style=\"display:block;margin: 0 auto;\" \/> <br \/>\nIn pratica, un'applicazione container deve almeno disporre di un'API per vari tipi di controlli di integrit\u00e0: test di attivit\u00e0 (liveness) e test di prontezza (readiness). Se l'applicazione pretende di pi\u00f9, deve fornire anche altri strumenti di monitoraggio del proprio stato. Ad esempio, la registrazione di eventi importanti tramite STDERR e STDOUT per l'aggregazione dei log usando Fluentd, Logstash e strumenti simili. E anche integrazioni con librerie di tracciamento e raccolta metriche, come OpenTracing, Prometheus e cos\u00ec via.<\/p>\n<p>In generale, un'applicazione pu\u00f2 ancora essere vista come una \"scatola nera\", ma deve essere dotata di tutte le API necessarie affinch\u00e9 la piattaforma possa monitorarla e gestirla in modo ottimale.<\/p>\n<h3>Principio di conformit\u00e0 al ciclo di vita (Life-cycle Conformance Principle, LCP)<\/h3>\n<p>\nLCP \u00e8 un'antitesi del HOP. Se HOP afferma che il contenitore deve fornire alla piattaforma API per la lettura, LCP richiede all'applicazione la capacit\u00e0 di ricevere informazioni dalla piattaforma. Inoltre, il contenitore deve non solo ricevere eventi, ma anche adattarsi, ovvero reagire a essi. Da qui il nome del principio, che pu\u00f2 essere visto come il requisito di fornire alla piattaforma API per la scrittura.<\/p>\n<p><img decoding=\"async\" alt=\"5 principi di buon senso per la creazione di app cloud-native\" src=\"\/wp-content\/uploads\/2019\/06\/f32f5d133597ae3905206badc6677f92.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nLe piattaforme hanno diversi tipi di eventi che aiutano a gestire il ciclo di vita del contenitore. Ma spetta all'applicazione decidere quali di essi ricevere e come reagire.<\/p>\n<p>\u00c8 chiaro che alcuni eventi sono pi\u00f9 importanti di altri. Ad esempio, se un'applicazione gestisce male il termine improvviso, deve accettare i messaggi signal: terminate (SIGTERM) e avviare la propria procedura di terminazione il prima possibile, per riuscire prima della ricezione di signal: kill (SIGKILL), che arriva dopo SIGTERM.<\/p>\n<p>Inoltre, eventi come PostStart e PreStop possono essere importanti per il ciclo di vita dell'applicazione. Ad esempio, dopo il lancio, potrebbe essere necessario un certo tempo per il \"riscaldamento\" dell'applicazione prima che possa rispondere alle richieste. Oppure l'applicazione deve liberare risorse in modo particolare al termine.<\/p>\n<h3>Principio di immutabilit\u00e0 dell'immagine del contenitore (Image Immutability Principle, IIP)<\/h3>\n<p>\n\u00c8 comunemente accettato che le applicazioni containerizzate debbano rimanere immutabili dopo la compilazione, anche quando vengono eseguite in ambienti diversi. Da qui deriva la necessit\u00e0 di esternalizzare la memorizzazione dei dati a runtime (in altre parole, utilizzare strumenti esterni per questo), cos\u00ec come dipendere da configurazioni esterne, configurate per l'ambiente di esecuzione specifico, invece di modificare o creare contenitori unici per ogni ambiente. Dopo qualsiasi modifica all'applicazione, l'immagine del contenitore deve essere ricompilata e distribuita in tutti gli ambienti utilizzati. A proposito, nella gestione dei sistemi IT viene utilizzato un principio simile, noto come principio di immutabilit\u00e0 dei server e dell'infrastruttura. <\/p>\n<p>L'obiettivo dell'IIP \u00e8 prevenire la creazione di immagini del contenitore separate per diversi ambienti di esecuzione e utilizzare lo stesso contenitore ovunque insieme alla configurazione appropriata per l'ambiente specifico. Seguire questo principio consente di implementare pratiche fondamentali per l'automazione dei sistemi cloud, come il roll-back e il roll-forward degli aggiornamenti dell'applicazione.<\/p>\n<p><img decoding=\"async\" alt=\"5 principi di buon senso per la creazione di app cloud-native\" src=\"\/wp-content\/uploads\/2019\/06\/86b93724830b37f82bf289b797407480.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Principio di disposabilit\u00e0 dei processi (Process Disposability Principle, PDP)<\/h3>\n<p>\nUna delle caratteristiche pi\u00f9 importanti di un contenitore \u00e8 la sua ephemerit\u00e0: un'istanza di contenitore \u00e8 facilmente creata e facilmente distrutta, quindi pu\u00f2 essere facilmente sostituita da un'altra istanza in qualsiasi momento. Le ragioni per tale sostituzione possono essere molte: fallimento del test di integrit\u00e0, scalabilit\u00e0 dell'applicazione, migrazione su un altro host, esaurimento delle risorse della piattaforma o altre situazioni. <\/p>\n<p><img decoding=\"async\" alt=\"5 principi di buon senso per la creazione di app cloud-native\" src=\"\/wp-content\/uploads\/2019\/06\/858287b23c276363313e35cf18b81190.jpg\" style=\"display:block;margin: 0 auto;\" \/> <br \/>\nDi conseguenza, le applicazioni containerizzate devono mantenere il proprio stato utilizzando strumenti esterni o impiegando schemi distribuiti interni con ridondanza. Inoltre, l'applicazione deve avviarsi rapidamente e terminare l'esecuzione in tempi brevi, oltre a essere pronta per un'improvvisa e fatale avaria dell'hardware.<\/p>\n<p>Una delle pratiche che aiuta a realizzare questo principio consiste nel creare contenitori di dimensioni ridotte. Gli ambienti cloud possono selezionare automaticamente l'host per avviare un'istanza del contenitore, quindi pi\u00f9 piccola \u00e8 la dimensione del contenitore, pi\u00f9 veloce sar\u00e0 l'avvio: verr\u00e0 semplicemente copiato pi\u00f9 velocemente sull'host di destinazione attraverso la rete.<\/p>\n<h3>Principio di autosufficienza (Self-containment Principle, S-CP)<\/h3>\n<p>\nSecondo questo principio, durante la fase di costruzione, nel contenitore vengono inclusi tutti i componenti necessari. Il contenitore deve essere progettato considerando che nel sistema esiste solo un kernel Linux pulito, quindi tutte le librerie aggiuntive necessarie devono essere posizionate all'interno del contenitore stesso. Qui dovrebbero trovarsi anche elementi come l'ambiente di runtime per il linguaggio di programmazione pertinente, la piattaforma applicativa (se necessario) e altre dipendenze necessarie durante l'esecuzione dell'applicazione containerizzata. <\/p>\n<p><img decoding=\"async\" alt=\"5 principi di buon senso per la creazione di app cloud-native\" src=\"\/wp-content\/uploads\/2019\/06\/ecc7425510d63e4914c0c9a7e90b02a6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Le eccezioni vengono fatte solo per le configurazioni che variano da ambiente a ambiente, e devono essere fornite durante l'esecuzione, ad esempio, tramite Kubernetes ConfigMap.<\/p>\n<p>L'applicazione pu\u00f2 includere diversi componenti containerizzati, ad esempio, un contenitore separato per il DBMS all'interno di un'applicazione web containerizzata. Secondo il principio S-CP, questi contenitori non devono essere uniti in uno solo, ma \u00e8 opportuno fare in modo che il contenitore DBMS contenga tutto il necessario per il funzionamento del database, mentre il contenitore dell'applicazione web deve includere tutto il necessario per il funzionamento dell'applicazione web, incluso il server web. Di conseguenza, durante l'esecuzione, il contenitore dell'applicazione web dipender\u00e0 dal contenitore DBMS e vi si riferir\u00e0 quando necessario.<\/p>\n<h3>Principio di confine in fase di esecuzione (Runtime Confinement Principle, RCP)<\/h3>\n<p>\nIl principio S-CP definisce come deve essere assemblato il container e cosa deve contenere il file binario dell'immagine. Ma il container non \u00e8 solo una \"scatola nera\" che ha una sola caratteristica: la dimensione del file. Durante l'esecuzione, il container acquisisce altre dimensioni: quantit\u00e0 di memoria utilizzata, tempo di CPU e altre risorse di sistema.<\/p>\n<p><img decoding=\"async\" alt=\"5 principi di buon senso per la creazione di app cloud-native\" src=\"\/wp-content\/uploads\/2019\/06\/a52e6a656892e57479ac014a3e6f4316.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nEd \u00e8 qui che entra in gioco il principio RCP, secondo il quale il container deve decapitare le sue esigenze di risorse di sistema e trasferirle alla piattaforma. Avere profili di risorse per ogni container (quante risorse di CPU, memoria, rete e disco gli servono) consente alla piattaforma di gestire la pianificazione e l'autoscaling in modo ottimale, oltre a gestire le capacit\u00e0 IT e mantenere i livelli SLA per i container.<\/p>\n<p>Oltre a soddisfare le esigenze di risorse del container, \u00e8 anche importante che l'applicazione non superi i limiti che ha definito. In caso contrario, se si verifica una carenza di risorse, \u00e8 pi\u00f9 probabile che la piattaforma la includa nell'elenco delle applicazioni da interrompere o migrare.<\/p>\n<p>Parlando di cloud-first, intendiamo principalmente il modo di lavorare. <br \/>\nIn precedenza, abbiamo formulato una serie di principi generali che stabiliscono le basi metodologiche per la creazione di applicazioni container di qualit\u00e0 per ambienti cloud.<\/p>\n<p>Si noti che oltre a questi principi generali, avrete bisogno di ulteriori metodi e tecniche avanzate per lavorare con i container. Inoltre, abbiamo alcune brevi raccomandazioni che sono pi\u00f9 specifiche e devono essere applicate (o meno) a seconda della situazione:<\/p>\n<ul>\n<li>Cercate di ridurre le dimensioni delle immagini: eliminate i file temporanei e non installate pacchetti non necessari; pi\u00f9 piccola \u00e8 la dimensione del container, pi\u00f9 velocemente viene assemblato e copiato sulla destinazione attraverso la rete.<\/li>\n<li>Fate riferimento a User-ID arbitri: non utilizzate il comando sudo o particolari userid per avviare i vostri container.<\/li>\n<li>Contrassegnate le porte importanti: i numeri delle porte possono essere specificati anche durante l'esecuzione, ma \u00e8 meglio indicarli tramite il comando EXPOSE \u2013 sar\u00e0 pi\u00f9 semplice per altre persone e programmi utilizzare le vostre immagini. <\/li>\n<li>Conserva i dati permanenti sui volumi: i dati che devono rimanere dopo la distruzione del container devono essere scritti sui volumi.<\/li>\n<li>Definisci i metadati dell'immagine: i tag, le etichette e le annotazioni facilitano l'uso delle immagini \u2013 altri sviluppatori ti saranno grati.<\/li>\n<li>Sincronizza host e immagini: alcune applicazioni containerizzate richiedono la sincronizzazione del container con l'host in base a determinati attributi, come l'ora o l'identificativo della macchina.<\/li>\n<li>In conclusione, condividiamo modelli e migliori pratiche che aiuteranno a implementare in modo pi\u00f9 efficace i principi sopra elencati:<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/www.slideshare.net\/luebken\/container-patterns\">www.slideshare.net\/luebken\/container-patterns<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.docker.com\/engine\/userguide\/eng-image\/dockerfile_best-practices\">docs.docker.com\/engine\/userguide\/eng-image\/dockerfile_best-practices<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"http:\/\/docs.projectatomic.io\/container-best-practices\">docs.projectatomic.io\/container-best-practices<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.openshift.com\/enterprise\/3.0\/creating_images\/guidelines.html\">docs.openshift.com\/enterprise\/3.0\/creating_images\/guidelines.html<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/www.usenix.org\/system\/files\/conference\/hotcloud16\/hotcloud16_burns.pdf\">www.usenix.org\/system\/files\/conference\/hotcloud16\/hotcloud16_burns.pdf<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/leanpub.com\/k8spatterns\/\">leanpub.com\/k8spatterns<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/12factor.net\/\">12factor.net<\/a><\/noindex><\/li>\n<\/ul>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/events.redhat.com\/profile\/form\/index.cfm?intcmp=701f20000012s47AAA&amp;PKFormID=0x5789474c4\"><b>Webinar sulla nuova versione di OpenShift Container Platform \u2013 4<\/b><\/a><\/noindex><br \/>\n11 giugno alle 11.00<\/p>\n<p>Cosa imparerai:<\/p>\n<ul>\n<li>Immutable Red Hat Enterprise Linux CoreOS<\/li>\n<li>OpenShift service mesh<\/li>\n<li>Operator framework<\/li>\n<li>Knative framework<\/li>\n<\/ul>\n<p>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/redhatrussia\/blog\/455024\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u00ab\u041e\u0431\u043b\u0430\u0447\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435\u00bb (cloud native) \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u00ab\u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0435\u00bb \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445. \u041e\u0431\u044b\u0447\u043d\u043e \u043e\u043d\u0438 \u0441\u0442\u0440\u043e\u044f\u0442\u0441\u044f \u043a\u0430\u043a \u043d\u0430\u0431\u043e\u0440 \u0441\u043b\u0430\u0431\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e\u0439. \u0422\u0430\u043a\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0433\u043e\u0442\u043e\u0432\u044b \u043a \u0441\u0431\u043e\u044f\u043c, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u043d\u0430\u0434\u0435\u0436\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u044b\u0445 \u043e\u0442\u043a\u0430\u0437\u0430\u0445 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f. \u041e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u043c\u0435\u0434\u0430\u043b\u0438 \u2013 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":26340,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-35006","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u00ab\u041e\u0431\u043b\u0430\u0447\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435\u00bb (cloud native) \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u00ab\u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0435\u00bb \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445.\" \/>\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\/news\/5-printsipov-zdravogo-smysla-dlya-sozdaniya-cloud-native-apps\" \/>\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\udd475 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u0432 \u0437\u0434\u0440\u0430\u0432\u043e\u0433\u043e \u0441\u043c\u044b\u0441\u043b\u0430 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f cloud-native apps | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u00ab\u041e\u0431\u043b\u0430\u0447\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435\u00bb (cloud native) \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u00ab\u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0435\u00bb \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/news\/5-printsipov-zdravogo-smysla-dlya-sozdaniya-cloud-native-apps\" \/>\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-31T19:01:47+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:01:47+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\udd475 principi di buon senso per creare applicazioni cloud-native | ProHoster","description":"Le applicazioni \"cloud-native\" sono create specificamente per funzionare in infrastrutture cloud.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/news\/5-printsipov-zdravogo-smysla-dlya-sozdaniya-cloud-native-apps","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\udd475 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u0432 \u0437\u0434\u0440\u0430\u0432\u043e\u0433\u043e \u0441\u043c\u044b\u0441\u043b\u0430 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f cloud-native apps | ProHoster","og:description":"\u00ab\u041e\u0431\u043b\u0430\u0447\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435\u00bb (cloud native) \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u00ab\u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0435\u00bb \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445.","og:url":"https:\/\/prohoster.info\/it\/blog\/news\/5-printsipov-zdravogo-smysla-dlya-sozdaniya-cloud-native-apps","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-31T19:01:47+00:00","article:modified_time":"2019-10-31T19:01:47+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"35006","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-01-21 21:27:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:11:30","updated":"2026-01-21 21:27:19","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\/35006","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=35006"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/35006\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/26340"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=35006"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=35006"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=35006"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}