

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à.

# Definizioni
<a name="definitions"></a>

 Il AWS Well-Architected Framework si basa su sei pilastri: eccellenza operativa, sicurezza, affidabilità, efficienza delle prestazioni, ottimizzazione dei costi e sostenibilità. AWS fornisce diversi componenti principali che ti consentono di progettare state-of-the-art architetture per i tuoi carichi di lavoro di gioco. In questa sezione, presenteremo una panoramica delle definizioni chiave. 

 Ai fini di questo paper, un'architettura di gioco comprende l'infrastruttura tecnica di backend necessaria per creare e gestire un gioco. Alcuni giochi potrebbero non avere funzionalità social, multiplayer o altre funzionalità online e potrebbero non richiedere l'uso di alcuni aspetti dell'infrastruttura tecnica di backend descritti in questo paper. Per una discussione dettagliata dei diversi tipi di carichi di lavoro che vengono spesso utilizzati per supportare un'architettura di gioco, consulta Scenari. 

 L' Cloud AWS infrastruttura è costruita attorno a regioni e zone di disponibilità. 
+  Una *regione* è un'ubicazione fisica nel mondo in cui sono presenti più zone di disponibilità. 
+  Le *zone di disponibilità* sono costituite da uno o più data center discreti, ciascuno con alimentazione, rete e connettività ridondanti, ospitati in strutture separate. 

 A seconda delle caratteristiche del gioco, potresti voler implementare determinati componenti della tua architettura di gioco in più regioni per motivi come migliorare le prestazioni dei giocatori o offrire esperienze personalizzate ai giocatori a seconda della loro posizione. 

 Esistono molti tipi diversi di giochi e l'infrastruttura tecnica di backend richiesta per supportare un gioco varia a seconda del tipo di gioco in fase di sviluppo. Ad esempio, i tipi di giochi più diffusi possono includere sparatutto in prima persona (FPS), giochi di ruolo (RPG), giochi online multigiocatore di massa (MMOG), battle royale (BR), giochi sportivi, giochi di puzzle e altro ancora. Esistono anche diverse modalità di interazione di gioco che influenzano l'architettura del gioco, come il gioco a turni e il gioco simultaneo, con caratteristiche prestazionali diverse. 

 I giochi sono stati sviluppati per essere giocati su uno o più sistemi di gioco, tra cui desktop, web, dispositivi mobili, console e nuove modalità di interazione come realtà aumentata (AR), realtà virtuale (VR) e soluzioni di streaming di giochi. I giochi in genere supportano il gameplay tra sistemi diversi, il che significa che i giocatori possono salvare la progressione di gioco e riprendere il gioco su altri sistemi, nonché avviare sessioni di gioco con giocatori su altri sistemi. 

 La monetizzazione dei videogiochi consente agli editori di giochi di generare entrate utilizzando diverse strategie come pubblicità, acquisti di giochi digitali e al dettaglio, acquisti in-game di contenuti scaricabili (DLC) noti come microtransazioni e tramite gli abbonamenti a pagamento richiesti per giocare. Alcuni degli indicatori chiave di performance () più comuni nel settore dei giochi includono: KPIs 
+  Utenti attivi giornalieri (DAU) 
+  Utenti attivi mensili (MAU) 
+  Utenti simultanei (CCU) 
+  Durata della sessione 
+  Costo per installazione (CPI) 
+  Valore della durata del giocatore (LTV) 
+  Ricavo medio per utente (ARPU) 

## Sistema di gioco
<a name="gaming-system"></a>

 I videogiochi sono stati sviluppati per essere giocati su un sistema di gioco che fornisce controlli di input del client, grafica, software client (noto come client di gioco) e hardware e, in alcuni casi, funzionalità esclusive del sistema per supportare il gioco. 

 I sistemi di gioco sono generalmente suddivisi nelle seguenti categorie: 
+  **Console**: sistemi di intrattenimento progettati appositamente per giocare, inclusi esempi popolari come Sony, PlayStation Microsoft Xbox e Nintendo Switch. Le console offrono la possibilità di giocare installando contenuti di gioco fisici o distribuiti digitalmente sull'hardware della console prodotto dal fornitore del sistema di gioco. In questa definizione, una console può essere portatile o fissa e destinata all'uso in uno scenario di intrattenimento domestico. 
+  **Personal computer (PC)**: giochi giocati utilizzando un software per computer installato su un computer client che può essere personalizzato dal giocatore. Per questo motivo, i giochi per PC sono popolari tra i giocatori grazie alla flessibilità e al controllo che offrono. 
+  **Web**: giochi progettati per essere giocati utilizzando un browser Web e che di solito offrono il vantaggio di consentire a un giocatore di accedere al gioco indipendentemente dal sistema operativo. 
+  **Dispositivi mobili:** giochi sviluppati per essere giocati su un telefono cellulare, di solito un sistema operativo per smartphone. I giochi per dispositivi mobili vengono generalmente scaricati da un app store digitale e installati sul telefono. 

 Oltre ai sistemi citati in precedenza, esistono anche sistemi nascenti che sono ancora relativamente nuovi e in crescita e hanno una quota di mercato molto inferiore rispetto ai sistemi più diffusi. Esempi di sistemi di gioco di questa categoria includono AR, VR e lo streaming di giochi, a volte denominato cloud gaming. 

 *Lo streaming di giochi* prevede il rendering del gameplay nel cloud e lo streaming su un thin client, in genere un browser. Lo streaming di gioco consente a un giocatore di giocare a un gioco interamente ospitato in remoto, in genere nel cloud da un fornitore di servizi di streaming di giochi. Nello streaming di gioco, il giocatore si connette a un gioco basato sul cloud tramite un browser o un thin client fornito dal fornitore di servizi di cloud gaming (sistema di gioco). 

## Server di gioco
<a name="game-server"></a>

 I server di gioco rappresentano uno degli aspetti più importanti dell'infrastruttura di elaborazione per il tuo gioco. I server di gioco, a volte denominati server di gioco dedicati, vengono utilizzati per lo sviluppo di un gioco multiplayer o quando è richiesta l'elaborazione autorevole degli eventi di gioco da parte del server. Il server di gioco è il fulcro dell'architettura di gioco e funge da luogo in cui viene eseguita la logica di base, che include la gestione del giocatore e dello stato del gioco, nonché la gestione delle interazioni tra i client di gioco connessi e il server di gioco. Il server di gioco è in genere uno degli aspetti più sensibili alle prestazioni di un'architettura di gioco, perché è responsabile dell'elaborazione degli input dal client di gioco di un giocatore e della loro corretta distribuzione agli altri giocatori connessi in tempo reale. Un server di gioco con prestazioni scadenti influisce sulle prestazioni complessive dell'esperienza di gioco. Pertanto, dovresti ottimizzare le prestazioni del server di gioco e fornire una capacità sufficiente, specialmente all'avvio del gioco o nei periodi di picco di gioco. 

 Ai fini del presente documento, per server di gioco o istanza di server di gioco si intende il computer, ad esempio una macchina virtuale, che ospita uno o più processi del server di gioco. Un processo del server di gioco rappresenta una singola istanza della build del server di gioco che ospita una sessione di gioco, ovvero un'istanza del gioco in esecuzione a cui i giocatori possono connettersi tramite una sessione di gioco. Per questo motivo, spesso ci riferiamo al processo del server di gioco o alla sessione di gioco in modo intercambiabile, a causa della relazione implicita uno a uno tra una sessione di gioco e il processo del server di gioco che la ospita. Inoltre AWS, sono disponibili diverse opzioni di calcolo per ospitare server di gioco, che forniscono l'accesso a capacità scalabile basata sul cloud attraverso un provisioning elastico delle risorse. 

 Amazon EC2 fornisce server virtuali basati sul cloud, noti come istanze, con supporto per più versioni di Linux e Windows. Puoi creare istanze e gestirle direttamente come un altro server o macchina virtuale. In genere, su un'istanza vengono distribuiti più processi di server di gioco per migliorare l'efficienza e ridurre i costi. Amazon EC2 è un'ottima scelta per i server di gioco se desideri il massimo controllo sull'infrastruttura di elaborazione. 

 Amazon GameLift fornisce una soluzione completamente gestita per l'hosting di server di gioco dedicati nel cloud e funzionalità aggiuntive come il matchmaking con GameLift FlexMatch. GameLiftfornisce un livello di astrazione su Amazon EC2 per semplificare la gestione dei server di gioco ed è disponibile nella maggior parte dei casi, in Regioni AWS modo da poter ospitare server di gioco vicino ai giocatori per ridurre la latenza, ottenere un'elevata disponibilità e ridurre significativamente i costi utilizzando le istanze Spot. Sebbene GameLift possa essere integrato nei backend di gioco esistenti, è particolarmente utile per gli sviluppatori di giochi che non vogliono sviluppare le proprie soluzioni di gestione dei server di gioco e matchmaking e preferiscono una soluzione gestita AWS e scalabile man mano che il gioco cresce. 

 Amazon Elastic Container Service (Amazon ECS) è un servizio di orchestrazione di container completamente gestito che puoi utilizzare per eseguire contenitori basati su Docker. Puoi anche utilizzare Amazon Elastic Kubernetes Service (Amazon EKS) per eseguire container basati su Docker creati utilizzando Kubernetes. L'uso di tecnologie container come quelle fornite da Amazon ECS e Amazon EKS può aiutarti a migliorare l'utilizzo dell'elaborazione raggruppando in modo efficiente molti processi del server di gioco o altre istanze di applicazioni di gioco in un'istanza. EC2 

 L'uso dei container può anche migliorare la produttività degli sviluppatori ospitando applicazioni che utilizzano lo stesso runtime operativo dell'immagine Docker utilizzato dagli sviluppatori sulle loro macchine locali durante lo sviluppo. Puoi ridurre ulteriormente il sovraccarico operativo utilizzando AWS Fargate, che è una soluzione di elaborazione serverless per l'esecuzione di container ed è compatibile sia con Amazon EKS che con Amazon ECS. Fargate è la soluzione ideale per i casi d'uso in cui si desidera eseguire server di gioco in container senza la responsabilità di gestire le istanze sottostanti su cui vengono eseguiti i contenitori. 

 Puoi utilizzarlo AWS Outposts per eseguire AWS infrastrutture e servizi in un data center o in una struttura locale, il che può consentire l'esecuzione dei giochi in ambienti locali e AWS utilizzare la stessa infrastruttura per supportare una strategia di adozione del cloud ibrido. AWS Le Local Zones fungono da estensioni Regioni AWS che consentono ai server di gioco e ad altri carichi di lavoro sensibili alla latenza di funzionare più a stretto contatto con i giocatori o i team di sviluppo. Inoltre, per ridurre la latenza di rete globale per i server di gioco, puoi utilizzare AWS Global Accelerator per migliorare le prestazioni del traffico dei giocatori verso i tuoi server di gioco. 

 AWS Lambda è un servizio di elaborazione senza server che esegue codice senza fornire o gestire server, il che lo rende utile per i casi d'uso asincroni dei server di gioco, come i giochi a turni o quelli che richiedono requisiti di elaborazione leggeri, una piccola base di codice e in cui le funzionalità di gioco possono essere progettate utilizzando un'architettura di microservizi stateless. È importante tenere presente che le funzioni Lambda vengono eseguite in base agli eventi e per richiesta, anziché eseguire un processo del server di gioco a esecuzione prolungata. Lambda fornisce l'astrazione più rapida delle opzioni illustrate in questo paper perché l'applicazione sottostante è immediatamente disponibile per gli sviluppatori tra cui scegliere per ospitare il proprio codice. 

 Quando scegli il tuo approccio per l'hosting di server di gioco, prendi in considerazione vari requisiti, tra cui sovraccarico operativo, codebase legacy, requisiti prestazionali e scalabilità. EC2le istanze e i contenitori sono ottime opzioni per le basi di codice legacy, in quanto richiedono la minima modifica per il passaggio al cloud e puoi utilizzare EC2 le istanze per dedicare le risorse di un'istanza di calcolo, mentre i container possono semplificare la gestione e l'elevato utilizzo. Le funzioni serverless offrono il massimo livello di astrazione, che puoi utilizzare per definire il codice che viene eseguito solo in risposta agli eventi, il che può ridurre i costi. 

## Client di gioco
<a name="game-client"></a>

 Il *client di gioco* rappresenta il dispositivo software e hardware che il giocatore utilizza per giocare. Il client di gioco fornisce il software per tradurre gli input del giocatore in messaggi che vengono inviati a un server per l'elaborazione, ed è responsabile della gestione delle risposte in arrivo dal server e della trasmissione al giocatore di output, come la grafica. Nei giochi multigiocatore in rete in tempo reale, il client di gioco di solito mantiene una connessione di rete persistente a un server di gioco per tutta la durata di una sessione di gioco per ridurre la latenza di rete e ridurre al minimo i tempi di elaborazione. Tuttavia, il client di gioco può anche interagire tramite REST con un server di gioco o servizi di backend. 

## Messaggistica
<a name="messaging"></a>

 In genere ci sono tre categorie principali di messaggi nei giochi:  
+  **Messaggi di coinvolgimento dei giocatori** rivolti a un utente o a una coorte di utenti specifici, come inviti a giochi o notifiche push 
+  **Messaggi di gruppo** tra giocatori, ad esempio chat all'interno del gioco 
+  ervice-to-serviceMessaggi **S**, come i messaggi JSON utilizzati per integrare due o più applicazioni 

 Una strategia comune per l'invio e la ricezione di questi tipi di messaggi consiste nell'utilizzare modelli di architettura di elaborazione asincrona e pubblicatore-abbonato. AWS offre diversi servizi che possono aiutarti a implementare la messaggistica nel tuo gioco. 
+  **Amazon Simple Notification Service (SNS):** servizio gestito per la distribuzione di messaggi tra editori e abbonati utilizzando un modello di architettura. pub/sub Gli editori inviano messaggi utilizzando un'API ad Amazon SNS, che consegna i messaggi in modo asincrono alle applicazioni sottoscritte e può inviare notifiche push direttamente a client o desktop mobili con supporto per alcuni dei servizi di notifica push più utilizzati. Amazon SNS può essere utilizzato per le notifiche push ai client e per i casi d'uso della service-to-service messaggistica. 
+  **Amazon Simple Queue Service (SQS): un servizio** di coda completamente gestito che semplifica l'integrazione dei server di gioco e del gioco indipendentemente dal linguaggio di programmazione utilizzato in ciascuno di essi. Molte attività di gioco possono essere disaccoppiate e gestite in background, come l'aggiornamento di una classifica o dei valori del tempo di gioco in un database. Questo approccio è un modo efficace per separare varie parti del gioco e scalare in modo indipendente le funzionalità rivolte ai giocatori dall'elaborazione in backend. 
+  **Amazon Managed Streaming for Apache Kafka (MSK): un servizio completamente gestito che semplifica la creazione di streaming di dati e applicazioni per produttori o consumatori utilizzando Apache** Kafka, una popolare soluzione open source. Kafka viene in genere utilizzato per l'acquisizione e l'elaborazione di dati di streaming in tempo reale e può essere utilizzato per la messaggistica. service-to-service 
+  **Amazon ElastiCache (Redis OSS):** fornisce un archivio dati in memoria completamente gestito che include il supporto per la popolare pub/sub funzionalità di Redis, comunemente utilizzata per lo sviluppo di applicazioni di chat room e messaggistica ad alte prestazioni. service-to-service Redis supporta anche tipi di dati complessi come elenchi e set, in modo che gli sviluppatori possano utilizzare Redis per accodamenti ad alte prestazioni. 
+  **Amazon Pinpoint:** fornisce messaggi di coinvolgimento degli utenti tramite e-mail, SMS, messaggi vocali e notifiche push. Ad esempio, Amazon Pinpoint può essere utilizzato per inviare messaggi di coinvolgimento degli utenti ai giocatori per invitarli a tornare al gioco e può essere utilizzato per casi d'uso transazionali come il supporto di token di autenticazione a più fattori, conferme d'ordine ed e-mail di reimpostazione della password. 

## Operazioni di gioco dal vivo (Live Ops)
<a name="live-game-operations-live-ops"></a>

 *Le operazioni di gioco* dal vivo (Live Ops) sono uno stile di gestione e operazioni di gioco che considera un gioco come un servizio dal vivo e offre continuamente nuove funzionalità, aggiornamenti, promozioni, eventi di gioco e miglioramenti al gioco lanciato per migliorare l'esperienza della comunità di giocatori. 

 Tradizionalmente, i giochi venivano forniti come prodotti anziché servizi e spesso nuovi contenuti e funzionalità venivano incorporati nelle versioni o nei sequel successivi anziché nel prodotto lanciato. Con un approccio Live Ops alla gestione dei giochi, un team addetto alle operazioni di gioco può lanciare un gioco e mantenere una community di giocatori coinvolta attraverso sperimentazioni, promozioni, eventi di gioco e innovazioni per intrattenere i giocatori. 

 Sebbene questo approccio abbia il vantaggio di sbloccare nuove strategie di coinvolgimento dei giocatori e di generare flussi di entrate ricorrenti, richiede una maggiore esperienza operativa. Ad esempio, per implementare una strategia Live Ops di successo, uno sviluppatore potrebbe aver bisogno di integrarsi con i servizi cloud o gestire la propria infrastruttura tecnica di backend. Hanno anche bisogno di un modo efficace per identificare e rispondere ai problemi che sorgono nel gioco o all'interno della comunità di giocatori che possono influire negativamente sull'esperienza del giocatore. 

 ** ** 