

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Architettura di microservizi semplice su AWS
<a name="simple-microservices-architecture-on-aws"></a>

 Le applicazioni monolitiche tipiche sono costituite da diversi livelli: un livello di presentazione, un livello di applicazione e un livello di dati. Le architetture di microservizi, d'altra parte, separano le funzionalità in *verticali* coesivi in base a domini specifici, anziché a livelli tecnologici. La Figura 1 illustra un'architettura di riferimento per una tipica applicazione di microservizi su. AWS

![\[Diagramma che mostra una tipica applicazione di microservizi su AWS\]](http://docs.aws.amazon.com/it_it/whitepapers/latest/microservices-on-aws/images/typical-microservices-application.png)


# Interfaccia utente
<a name="user-interface"></a>

 Le applicazioni web moderne spesso utilizzano JavaScript framework per sviluppare applicazioni a pagina singola che comunicano con il backend. APIs Questi APIs sono in genere creati utilizzando Representational State Transfer (REST) o RESTful APIs GraphQL APIs. [I contenuti web statici possono essere serviti utilizzando Amazon Simple Storage Service ([Amazon S3](https://aws.amazon.com/s3/)) e Amazon. CloudFront](https://aws.amazon.com/cloudfront/) 

# Micro-servizi
<a name="microservices"></a>

 APIs sono considerati la *porta d'ingresso* dei microservizi, in quanto rappresentano il punto di ingresso per la logica delle applicazioni. In genere, vengono RESTful utilizzati servizi Web API o GraphQL APIs . Questi APIs gestiscono ed elaborano le chiamate dei client, gestendo funzioni come la gestione del traffico, il filtraggio delle richieste, il routing, la memorizzazione nella cache, l'autenticazione e l'autorizzazione. 

## Implementazioni di microservizi
<a name="microservices-implementations"></a>

 AWS offre elementi costitutivi per lo sviluppo di microservizi, tra cui Amazon ECS e Amazon EKS come scelte per i motori di orchestrazione dei container AWS Fargate ed EC2 come opzioni di hosting. AWS Lambda è un altro modo serverless su cui creare microservizi. AWS La scelta tra queste opzioni di hosting dipende dai requisiti del cliente per la gestione dell'infrastruttura sottostante. 

 AWS Lambda consente di caricare il codice, ridimensionandolo automaticamente e gestendone l'esecuzione con elevata disponibilità. Ciò elimina la necessità di gestire l'infrastruttura, così puoi muoverti rapidamente e concentrarti sulla logica di business. Lambda supporta [più linguaggi di programmazione](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html) e può essere attivata da altri AWS servizi o richiamata direttamente da applicazioni Web o mobili. 

 Le applicazioni basate su container hanno guadagnato popolarità grazie alla portabilità, alla produttività e all'efficienza.AWS offre diversi servizi per creare, implementare e gestire container. 
+  [App2Container](https://aws.amazon.com/app2container/), uno strumento da riga di comando per la migrazione e la modernizzazione delle applicazioni Web Java e.NET in formato contenitore. AWS A2C analizza e crea un inventario di applicazioni in esecuzione su macchine virtuali bare metal, istanze Amazon Elastic Compute Cloud (EC2) o nel cloud. 
+  Amazon Elastic Container Service ([Amazon ECS](https://aws.amazon.com/ecs/)) e Amazon Elastic Kubernetes [Service (](https://aws.amazon.com/eks/)Amazon EKS) gestiscono l'infrastruttura dei container, semplificando l'avvio e la manutenzione di applicazioni containerizzate.  
  +  [Amazon EKS è un servizio Kubernetes gestito per eseguire Kubernetes nel AWS cloud e nei data center locali (Amazon EKS Anywhere).](https://aws.amazon.com/eks/eks-anywhere/) Ciò estende i servizi cloud in ambienti locali per bassa latenza, elaborazione locale dei dati, elevati costi di trasferimento dei dati o requisiti di residenza dei dati (consulta il white paper su "[Running Hybrid Container Workloads With Amazon](https://d1.awsstatic.com/kubernetes-pmm/eks-a/getting-started/AWS_Whitepaper_Running_Hybrid_Container_Workloads_with_Amazon_EKS_Anywhere.pdf) EKS Anywhere «). Puoi utilizzare tutti i plug-in e gli strumenti esistenti della community Kubernetes con EKS. 
  +  Amazon Elastic Container Service (Amazon ECS) è un servizio di orchestrazione di container completamente gestito che semplifica la distribuzione, la gestione e la scalabilità delle applicazioni containerizzate. I clienti scelgono ECS per la semplicità e la profonda integrazione con i servizi. AWS 

 Per ulteriori informazioni, consulta il blog [Amazon ECS vs Amazon EKS: dare un senso ai servizi di AWS container](https://aws.amazon.com/blogs/containers/amazon-ecs-vs-amazon-eks-making-sense-of-aws-container-services/). 
+  [AWS App Runner](https://aws.amazon.com/apprunner/)è un servizio di applicazioni container completamente gestito che consente di creare, distribuire ed eseguire applicazioni Web e servizi API containerizzati senza precedenti esperienze in infrastrutture o container. 
+  [AWS Fargate](https://aws.amazon.com/fargate/), un motore di elaborazione serverless, funziona sia con Amazon ECS che con Amazon EKS per gestire automaticamente le risorse di elaborazione per le applicazioni container. 
+  [Amazon ECR](https://aws.amazon.com/ecr/) è un registro di container completamente gestito che offre hosting ad alte prestazioni, in modo da poter distribuire in modo affidabile immagini e artefatti delle applicazioni ovunque. 

# Integrazione continua e distribuzione continua (CI/CD)
<a name="continuous-integration-and-continuous-deployment-cicd"></a>

 L'integrazione continua e la distribuzione continua (CI/CD) sono una parte cruciale di un' DevOpsiniziativa per rapide modifiche del software. AWS offre servizi da implementare CI/CD per i microservizi, ma una discussione dettagliata esula dallo scopo di questo documento. Per ulteriori informazioni, consulta il white paper [Practicing Continuous Integration and Continuous Delivery on AWS](https://docs.aws.amazon.com/whitepapers/latest/practicing-continuous-integration-continuous-delivery/welcome.html).

# Reti private
<a name="private-networking"></a>

AWS PrivateLink è una tecnologia che migliora la sicurezza dei microservizi consentendo connessioni private tra il Virtual Private Cloud (VPC) e i servizi supportati. AWS Aiuta a isolare e proteggere il traffico di microservizi, assicurando che non attraversi mai la rete Internet pubblica. Ciò è particolarmente utile per rispettare normative come PCI o HIPAA.

# Datastore
<a name="data-store"></a>

 Il data store viene utilizzato per rendere persistenti i dati necessari ai microservizi. Gli archivi più diffusi per i dati delle sessioni sono le cache in memoria come Memcached o Redis. AWS offre entrambe le tecnologie come parte del ElastiCache servizio [Amazon](https://aws.amazon.com/elasticache/) gestito. 

 L'inserimento di una cache tra i server delle applicazioni e un database è un meccanismo comune per ridurre il carico di lettura sul database, il che, a sua volta, può consentire l'utilizzo di risorse per supportare più scritture. Le cache possono anche migliorare la latenza. 

 I database relazionali sono ancora molto diffusi per archiviare dati strutturati e oggetti aziendali. AWS [offre sei motori di database (Microsoft SQL Server, Oracle, MySQL, MariaDB, PostgreSQL e [Amazon Aurora) come servizi gestiti tramite Amazon Relational Database Service (Amazon RDS)](https://aws.amazon.com/rds/aurora/).](https://aws.amazon.com/rds/) 

 I database relazionali, tuttavia, non sono progettati per una scalabilità infinita, il che può rendere difficile e dispendiosa in termini di tempo l'applicazione di tecniche per supportare un numero elevato di query. 

 I database NoSQL sono stati progettati per favorire la scalabilità, le prestazioni e la disponibilità rispetto alla coerenza dei database relazionali. Un elemento importante dei database NoSQL è che in genere non applicano uno schema rigoroso. I dati vengono distribuiti su partizioni che possono essere ridimensionate orizzontalmente e recuperati utilizzando le chiavi di partizione. 

 Poiché i singoli microservizi sono progettati per fare bene una cosa, in genere dispongono di un modello di dati semplificato che potrebbe essere adatto alla persistenza NoSQL. È importante comprendere che i database NoSQL hanno modelli di accesso diversi rispetto ai database relazionali. Ad esempio, non è possibile unire le tabelle. Se necessario, la logica deve essere implementata nell'applicazione. Puoi usare [Amazon DynamoDB](https://aws.amazon.com/dynamodb/) per creare una tabella di database in grado di archiviare e recuperare qualsiasi quantità di dati e soddisfare qualsiasi livello di traffico di richiesta. DynamoDB offre prestazioni a una cifra in millisecondi, tuttavia, ci sono alcuni casi d'uso che richiedono tempi di risposta in microsecondi. [DynamoDB](https://aws.amazon.com/dynamodb/dax/) Accelerator (DAX) offre funzionalità di caching per l'accesso ai dati. 

 DynamoDB offre anche una funzionalità di scalabilità automatica per regolare dinamicamente la capacità di throughput in risposta al traffico effettivo. Tuttavia, ci sono casi in cui la pianificazione della capacità è difficile o impossibile a causa di grandi picchi di attività di breve durata nell'applicazione. Per tali situazioni, DynamoDB offre un'opzione on-demand, che offre prezzi semplici. pay-per-request DynamoDB on-demand è in grado di gestire migliaia di richieste al secondo istantaneamente senza pianificazione della capacità. 

 Per ulteriori informazioni, consulta [How to [Gestione distribuita dei dati](distributed-data-management.md) Choose a Database](https://aws.amazon.com/startups/learn/maximizing-performance-with-aws-databases). 

# Semplificazione delle operazioni
<a name="simplyfing-operations"></a>

 Per semplificare ulteriormente gli sforzi operativi necessari per eseguire, mantenere e monitorare i microservizi, possiamo utilizzare un'architettura completamente serverless. 

## Implementazione di applicazioni basate su Lambda
<a name="deploying-lambda-based-applications"></a>

 Puoi distribuire il codice Lambda caricando un archivio di file o creando e caricando `zip` un'immagine del contenitore tramite l'interfaccia utente della console utilizzando un URI di immagine Amazon ECR valido. Tuttavia, quando una funzione Lambda diventa complessa, vale a dire che ha livelli, dipendenze e autorizzazioni, il caricamento tramite l'interfaccia utente può diventare complicato per le modifiche al codice. 

 L'utilizzo di AWS CloudFormation and the AWS Serverless Application Model ([AWS SAM](https://github.com/awslabs/serverless-application-model)) o Terraform semplifica il AWS Cloud Development Kit (AWS CDK) processo di definizione delle applicazioni serverless. AWS SAM, supportato nativamente da CloudFormation, offre una sintassi semplificata per specificare le risorse serverless.AWS Lambda I livelli aiutano a gestire le librerie condivise su più funzioni Lambda, riducendo al minimo l'ingombro delle funzioni, centralizzando le librerie compatibili con i tenant e migliorando l'esperienza degli sviluppatori. Lambda SnapStart per Java migliora le prestazioni di avvio per le applicazioni sensibili alla latenza. 

 Per distribuire, specifica le risorse e le politiche di autorizzazione in un CloudFormation modello, impacchetta gli elementi di distribuzione e distribuisci il modello. SAM Local, uno AWS CLI strumento, consente lo sviluppo, il test e l'analisi locali di applicazioni serverless prima del caricamento su Lambda. 

 L'integrazione con strumenti come AWS Cloud9 IDE e AWS CodePipeline semplifica la creazione AWS CodeBuild AWS CodeDeploy, il test, il debug e la distribuzione di applicazioni basate su SAM. 

 Il diagramma seguente mostra la distribuzione delle risorse utilizzando strumenti CI/CD. AWS Serverless Application Model CloudFormation AWS 

![\[Diagramma che mostra () AWS Serverless Application Model AWS SAM\]](http://docs.aws.amazon.com/it_it/whitepapers/latest/microservices-on-aws/images/aws-sam.png)


## Astrazione delle complessità legate alla multi-tenancy
<a name="abstracting-multi-tenancy-complexities"></a>

 In un ambiente multi-tenant come le piattaforme SaaS, è fondamentale semplificare le complessità legate alla multi-tenancy, permettendo agli sviluppatori di concentrarsi sullo sviluppo di caratteristiche e funzionalità. Ciò può essere ottenuto utilizzando strumenti come [AWS Lambda Layers](https://docs.aws.amazon.com/lambda/latest/dg/chapter-layers.html), che offrono librerie condivise per affrontare problemi trasversali. La logica alla base di questo approccio è che le librerie e gli strumenti condivisi, se usati correttamente, gestiscono in modo efficiente il contesto dei tenant.  

 Tuttavia, non dovrebbero estendersi all'incapsulamento della logica aziendale a causa della complessità e dei rischi che possono comportare. Un problema fondamentale delle librerie condivise è la maggiore complessità degli aggiornamenti, che li rende più difficili da gestire rispetto alla duplicazione del codice standard. Pertanto, è essenziale trovare un equilibrio tra l'uso di librerie condivise e la duplicazione nella ricerca dell'astrazione più efficace. 

## Gestione API
<a name="api-management"></a>

 La gestione APIs può richiedere molto tempo, soprattutto se si considerano più versioni, fasi del ciclo di sviluppo, autorizzazioni e altre funzionalità come la limitazione e la memorizzazione nella cache. Oltre ad [API Gateway](https://aws.amazon.com/api-gateway/), alcuni clienti utilizzano anche ALB (Application Load Balancer) o NLB (Network Load Balancer) per la gestione delle API. Amazon API Gateway aiuta a ridurre la complessità operativa di creazione e manutenzione RESTful APIs. Ti consente di creare in modo APIs programmatico, funge da «porta d'ingresso» per accedere ai dati, alla logica di business o alle funzionalità dei tuoi servizi di backend, autorizzazione e controllo degli accessi, limitazione della velocità, memorizzazione nella cache, monitoraggio e gestione del traffico e funziona senza la gestione dei server. APIs 

 La Figura 3 illustra come API Gateway gestisce le chiamate API e interagisce con altri componenti. Le richieste provenienti da dispositivi mobili, siti Web o altri servizi di backend vengono indirizzate al CloudFront Point of Presence (PoP) più vicino per ridurre la latenza e fornire un'esperienza utente ottimale. 

![\[Diagramma che mostra il flusso di chiamate API Gateway\]](http://docs.aws.amazon.com/it_it/whitepapers/latest/microservices-on-aws/images/api-gateway-call-flow.png)
