Progetta una flotta di GameLift container Amazon - Amazon GameLift

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

Progetta una flotta di GameLift container Amazon

Questa documentazione riguarda una funzionalità disponibile in anteprima pubblica. ed è soggetta a modifiche.

Questi argomenti presentano le decisioni chiave che prenderai durante la configurazione di una flotta di GameLift container Amazon. Le tue decisioni influiscono sul modo in cui configuri le impostazioni per container, gruppi di container e flotte.

Progetta la struttura dei container della tua flotta

Come primo passo, identifica il software e le risorse necessari per ospitare il tuo server di gioco, tra cui:

  • La tua applicazione per server di gioco. L'applicazione deve essere integrata con le GameLift funzionalità di Amazon per l'hosting, inclusa la versione SDK del server 5+. Per informazioni, consulta Integra il tuo gioco con Amazon GameLift.

  • L' GameLift agente Amazon. Questo agente on-computing mantiene la comunicazione con il GameLift servizio Amazon e gestisce il ciclo di vita di tutti i processi del server di gioco. Per ulteriori dettagli, consulta Server di gioco e Amazon GameLift Agent.

  • Software e risorse aggiuntivi, se necessario. Ciò potrebbe includere il software necessario per eseguire le applicazioni dei server di gioco. Il software di supporto comune viene utilizzato per la registrazione e il monitoraggio, la sicurezza, la distribuzione dei contenuti e la sincronizzazione dei dati.

Successivamente, decidi come strutturare il software e le risorse per una flotta di GameLift container Amazon. Amazon GameLift utilizza gruppi di contenitori per organizzare i contenitori. Una flotta ha sempre un gruppo di container di repliche e, facoltativamente, può avere una flotta di container daemon. Per ulteriori dettagli, consulta Componenti della flotta di container.

  • Inizia progettando il tuo gruppo di contenitori di repliche. Considera le linee guida seguenti:

    • Raggruppa l'applicazione del server di gioco e Amazon GameLift Agent nello stesso contenitore. Rendi questo contenitore l'unico contenitore essenziale del gruppo di repliche.

    • Organizza tutti gli altri software per il tuo server di gioco in contenitori. Potresti scegliere di mettere tutto in un unico contenitore nel gruppo di repliche. Oppure puoi scegliere di creare uno o più contenitori sidecar. Alcuni motivi per utilizzare i sidecar includono:

      • Per impostare una sequenza di avvio/spegnimento per singoli software. È possibile ottenere ciò inserendo il software in contenitori separati e impostando le dipendenze tra di essi.

      • Per impostare limiti specifici del contenitore per l'utilizzo della memoria e della CPU.

      • Per specificare diverse impostazioni di configurazione del contenitore per ogni contenitore, ad esempio un comando di avvio, un punto di ingresso, una directory di lavoro, variabili di ambiente o controlli di integrità.

  • Decidi se hai bisogno di un gruppo di container daemon per la tua flotta. Considera i seguenti aspetti:

    • I contenitori daemon vengono in genere utilizzati per eseguire processi in background o di monitoraggio.

    • I contenitori in un gruppo di daemon non vengono replicati su un'istanza della flotta. Ciò significa che i contenitori di un gruppo di daemon non sono scalabili insieme al gruppo di contenitori di replica.

    • Un gruppo di daemon può avere più contenitori. È possibile designare come essenziale qualsiasi contenitore in un gruppo di daemon.

Imposta i limiti delle risorse

Per ogni gruppo di contenitori, determina la quantità di memoria e CPU di cui il gruppo ha bisogno per eseguire il software. Amazon GameLift si affida a queste informazioni per gestire le risorse per il gruppo di contenitori. Inoltre, utilizza queste informazioni per calcolare il numero di gruppi di container di repliche che un'immagine della flotta può contenere. È inoltre possibile impostare limiti per singoli contenitori.

Imposta limiti opzionali per i contenitori

L'impostazione di limiti di risorse specifici per i contenitori consente di esercitare un maggiore controllo su come i singoli contenitori possono utilizzare le risorse del gruppo. Se non imposti limiti specifici del contenitore, tutti i contenitori del gruppo condividono le risorse del gruppo. La condivisione offre una maggiore flessibilità nell'utilizzo delle risorse laddove sono necessarie. Inoltre, aumenta la possibilità che i processi competano tra loro e causino il fallimento dei container.

Imposta una delle seguenti ContainerDefinition proprietà per qualsiasi contenitore.

  • SoftLimit(memoria) — Riserva una quantità minima di memoria per l'uso esclusivo del contenitore. Il contenitore ha sempre a disposizione la quantità riservata. Può superare questo minimo in qualsiasi momento, se sono disponibili risorse aggiuntive.

  • HardLimit(memoria) — Imposta un limite massimo di memoria per il contenitore. Se il contenitore supera questo limite, si verifica un riavvio.

  • Cpulimite: riserva una quantità minima di risorse della CPU per l'uso esclusivo del contenitore. Il contenitore ha sempre a disposizione la quantità riservata. Può superare questo minimo in qualsiasi momento, se sono disponibili risorse aggiuntive. (1024 unità CPU equivalgono a 1 vCPU.)

Imposta i limiti totali delle risorse per un gruppo di contenitori

Indica ad Amazon di GameLift quanta memoria e risorse CPU sono necessarie per ogni gruppo di container. L'obiettivo è allocare risorse sufficienti per ottimizzare le prestazioni dei server di gioco. Amazon GameLift utilizza questi limiti per calcolare come imballare gruppi di container di replica su un'istanza di flotta. Li utilizzerai anche per scegliere un tipo di istanza per una flotta di container.

Calcola la memoria totale e la CPU necessarie per tutti i processi in ogni contenitore di un gruppo. Considera i seguenti aspetti:

  • Quali processi vengono eseguiti in tutti i contenitori del gruppo di contenitori? Somma le risorse necessarie per questi processi.

  • Quanti processi simultanei del server di gioco intendi eseguire in ciascun gruppo di container? Hai impostato questo valore come parte della configurazione di runtime di una flotta, ma devi pianificare una quantità di memoria sufficiente per utilizzarli qui (vedi Ottimizzazione della configurazione di runtime).

In base alla stima dei requisiti del gruppo di contenitori, imposta le seguenti ContainerGroupDefinition proprietà:

  • TotalMemoryLimit— Imposta un limite massimo di memoria per il gruppo di contenitori. Tutti i contenitori del gruppo condividono la memoria allocata. Se si impostano limiti per singoli contenitori, il limite di memoria totale deve essere:

    • uguale o superiore alla somma di tutti i limiti di memoria software del contenitore

    • uguale o superiore al limite massimo di memoria rigida per un contenitore del gruppo

  • TotalCpuLimit — Imposta un limite massimo di CPU per il gruppo di contenitori. Tutti i contenitori del gruppo condividono le risorse CPU allocate. Se imposti limiti dei singoli contenitori, il limite totale della CPU deve essere:

    • uguale o superiore alla somma di tutti i limiti della CPU del contenitore. Come procedura ottimale, valuta la possibilità di impostare questo valore per raddoppiare la somma dei limiti della CPU del contenitore.

Scenario di esempio

Supponiamo di definire un gruppo di contenitori di replica con i seguenti tre contenitori:

  • Il contenitore A è il nostro contenitore di replica essenziale. Esegue i processi del server di gioco e Amazon GameLift Agent. Stimiamo i requisiti di risorse per un server di gioco a 512 MiB e 1024 CPU. Prevediamo di far eseguire al container 10 processi del server. Poiché questo contenitore esegue il nostro software più importante, abbiamo impostato una riserva di memoria software di 6144 MiB e nessun limite di memoria rigida o limite di riserva della CPU.

  • Container B esegue software di supporto con requisiti di risorse stimati in 1024 MiB e 1536 CPU. Abbiamo impostato un limite di riserva di memoria software di 1024 MiB, un limite di memoria rigida di 2048 MiB e un limite di riserva della CPU di 1024 CPU.

  • Il contenitore C esegue la registrazione non critica e altre utilità di monitoraggio. Abbiamo impostato un limite di memoria rigida di 512 MiB e un limite di riserva della CPU di 512 CPU.

Utilizzando queste informazioni, impostiamo i seguenti limiti totali per il gruppo di contenitori:

  • Limite di memoria totale: 7680 MiB. Questo valore supera (1) la somma dei limiti di memoria software (6144+1024 MiB) e (2) il limite massimo di memoria rigida (1024 MiB).

  • Limite totale della CPU: 13312 CPU. Questo valore supera la somma del limite della CPU (1024+512 CPU).

Designare contenitori essenziali

Per ogni contenitore, designa il contenitore come essenziale o non essenziale. Tutti i gruppi di contenitori devono avere almeno un contenitore essenziale. Il contenitore essenziale svolge il lavoro fondamentale del gruppo di contenitori, ad esempio ospita i server di gioco. Si prevede sempre che il contenitore essenziale sia in esecuzione. Se fallisce, l'intero gruppo di contenitori si riavvia.

  • Il gruppo di container di replica della tua flotta può avere esattamente un container essenziale. Questo contenitore esegue Amazon GameLift Agent e i processi del server di gioco che gestisce.

  • Se la tua flotta ha un gruppo di container daemon, puoi designare più container essenziali. Rendi essenziale un contenitore daemon se desideri che un errore del contenitore richieda il riavvio di un gruppo di contenitori.

Imposta la ContainerDefinition proprietà Essential su true o false per ogni contenitore.

Configurare le connessioni di rete

È possibile stabilire l'accesso alla rete per consentire al traffico esterno di connettersi a qualsiasi container di una flotta di container. Ad esempio, devi stabilire connessioni di rete al contenitore che esegue i processi del server di gioco, in modo che i client di gioco possano unirsi e giocare al gioco. I client di gioco si connettono ai server di gioco utilizzando porte e indirizzi IP.

In una flotta di container, la connessione tra client e server non è diretta. Internamente, un processo in un container ascolta su una porta container. Esternamente, il traffico in entrata si connette a un'istanza della flotta utilizzando una porta di connessione. Amazon GameLift mantiene le mappature tra le porte interne dei container e le porte di connessione rivolte verso l'esterno, in modo che il traffico in entrata venga indirizzato al processo corretto sull'istanza.

Amazon GameLift fornisce un ulteriore livello di controllo per le connessioni di rete. Ogni flotta di container dispone di un'impostazione delle autorizzazioni in entrata, che consente di controllare l'accesso a ciascuna porta di connessione rivolta verso l'esterno. Non puoi modificare le configurazioni dei porti di una flotta esistente, ma puoi consentire o limitare l'accesso in base alle esigenze modificando le autorizzazioni in entrata. Ad esempio, puoi rimuovere le autorizzazioni per tutte le porte di connessione per impedire l'accesso ai container della flotta.

Le porte di rete consentono al traffico esterno di connettersi ai processi in esecuzione in una flotta di container. Le autorizzazioni EC2 in entrata consentono al traffico di accedere alle porte di connessione, che vengono aperte su ogni istanza del parco istanze. Le porte di connessione sono mappate internamente alle porte container, che sono assegnate ai singoli processi.
Imposta gli intervalli di porte del contenitore

Configura una definizione di contenitore con un numero sufficiente di porte container per qualsiasi processo che richieda l'accesso esterno. Alcuni contenitori non avranno bisogno di porte. Altri devono disporre di un numero sufficiente di porte per assegnarne una a ogni processo che ne necessita.

Il tuo gruppo di contenitori di repliche essenziale, che gestisce i tuoi server di gioco, necessita di una porta per ogni processo del server di gioco in esecuzione contemporaneamente (come configurato nella flotta). RuntimeConfiguration Il processo del server di gioco ascolta sulla porta assegnata e lo segnala ad Amazon GameLift.

Quando crei una definizione di gruppo di contenitori, definisci un intervallo di porte container per ogni contenitore che necessita dell'accesso alla rete (vedi ContainerDefinitionInput: PortConfiguration). Assicurati che l'intervallo sia sufficientemente ampio da assegnare una porta a ogni processo che ne necessita. Ai processi devono essere assegnati numeri di porta nella configurazione delle porte del contenitore.

Imposta gli intervalli delle porte di connessione

Configura la tua flotta di container con un set di porte di connessione. Le porte di connessione forniscono l'accesso esterno alle istanze del parco istanze che eseguono i container. Amazon GameLift assegna le porte di connessione e le mappa alle porte dei container in base alle esigenze.

Quando crei una flotta di container, definisci un intervallo di porte di connessione (vedi ContainerGroupsConfiguration: ConnectionPortRange). Assicurati che l'intervallo contenga un numero sufficiente di porte da mappare su ogni porto container di un'istanza della flotta. Per calcolare le porte di connessione minime necessarie, utilizza la seguente formula:

[Total number of container ports defined for containers in the replica container group] * [Number of replica container groups per instance] + [Total number of container ports defined for containers in the daemon container group]

È consigliabile raddoppiare il numero minimo di porte di connessione.

Nota

Il numero di porte di connessione può potenzialmente limitare il numero di gruppi di contenitori di replica per istanza. Se una flotta dispone di porte di connessione sufficienti per un gruppo di contenitori di replica per istanza, Amazon GameLift implementerà solo un gruppo di contenitori di replica, anche se le istanze dispongono di potenza di calcolo sufficiente per più gruppi di contenitori di repliche.

Imposta le autorizzazioni in entrata

Le autorizzazioni in entrata controllano l'accesso esterno a una flotta di container specificando quali porte di connessione aprire per il traffico in entrata. Puoi utilizzare questa impostazione per attivare e disattivare l'accesso alla rete di una flotta in base alle esigenze.

Quando crei una flotta di container, definisci un set di autorizzazioni in entrata (vedi:EC2). CreateFleet InboundPermissions Imposta le proprietà delle porte di autorizzazione in entrata per includere alcuni o tutti i valori nelle impostazioni delle porte di connessione della flotta. Per modificare le autorizzazioni in entrata su una flotta di container esistente, chiama. UpdateFleetPortSettings

Scenario di esempio

Questo esempio illustra come impostare tutte e tre le proprietà della connessione di rete.

  • Il gruppo di container di replica della nostra flotta ha 1 container, che esegue i processi del server di gioco. La configurazione del runtime indica al contenitore di eseguire 10 processi simultanei del server di gioco.

    Nella definizione del gruppo di contenitori di replica, impostiamo il PortConfiguration parametro per questo contenitore come segue:

    "PortConfiguration": { "ContainerPortRanges": [ { "FromPort": 10, "ToPort": 20, "Protocol": "TCP"} ] }
  • La nostra flotta dispone anche di un gruppo di container daemon con 1 container. Ha 1 processo che richiede l'accesso alla rete. Nella definizione del gruppo di contenitori daemon, impostiamo il PortConfiguration parametro per questo contenitore come segue:

    "PortConfiguration": { "ContainerPortRanges": [ { "FromPort": 25, "ToPort": 25, "Protocol": "TCP"} ] }
  • La nostra flotta è configurata con 3 gruppi di container di replica per istanza di flotta. Alla luce di queste informazioni, possiamo utilizzare la formula per calcolare il numero di porte di connessione di cui abbiamo bisogno:

    • Minimo: 31 porte [10 porte container di replica * 3 gruppi di contenitori di replica per istanza + 1 porta contenitore daemon]

    • Procedura ottimale: 62 porte [porte minime* 2]

    Durante la creazione della flotta di container, impostiamo il ConnectionPortRange parametro ContainerGroupsConfiguration come segue:

    "ConnectionPortRange": { "FromPort": 1010, "ToPort": 1071 }
  • Vogliamo consentire l'accesso a tutte le porte di connessione disponibili. Durante la creazione della flotta di container, impostiamo il EC2InboundPermissions parametro come segue:

    "EC2InboundPermissions": [ {"FromPort": 1010, "ToPort": 1071, "IpRange": "10.24.34.0/23", "Protocol": "TCP"} ]

Imposta i controlli sanitari per i container

Un contenitore si riavvia automaticamente se si verifica un errore del terminale e smette di funzionare. Se il contenitore è essenziale, l'intero gruppo di contenitori si riavvia.

È possibile definire criteri personalizzati aggiuntivi per misurare lo stato del contenitore e utilizzare un controllo dello stato per verificare tali criteri. Per impostare un controllo dello stato del contenitore, puoi definirlo in un'immagine del contenitore docker o nella definizione del contenitore. Se imposti un controllo dello stato nella definizione del contenitore, questo sovrascrive qualsiasi impostazione nell'immagine del contenitore.

Imposta i controlli sanitari opzionali in base al tipo di contenitore come segue:

  • Per un contenitore di replica essenziale, non configurate i controlli di integrità. Amazon GameLift Agent gestisce automaticamente i report sullo stato di salute di questo contenitore.

  • Per i contenitori di replica non essenziali e per qualsiasi contenitore daemon, puoi facoltativamente impostare i parametri di controllo dello stato.

Imposta le seguenti ContainerDefinition proprietà per il controllo dello stato di un contenitore:

  • Command— Fornisci un comando che controlli alcuni aspetti dello stato del contenitore. Siete voi a decidere quali criteri utilizzare per misurare lo stato di salute. Il comando deve restituire un valore di uscita pari a 1 (non salutare) o 0 (sano).

  • StartPeriod— Specificare un ritardo iniziale prima che gli errori del controllo sanitario inizino a contare. Questo ritardo dà al contenitore il tempo di avviare i propri processi.

  • Interval— Decidi con che frequenza eseguire il comando health check. Con quale rapidità desiderate rilevare e risolvere un guasto del contenitore?

  • Timeout— Decidi per quanto tempo attendere l'esito positivo o negativo prima di riprovare il comando health check. Quanto tempo deve impiegare per il completamento del comando di controllo dello stato di salute?

  • Retries— Quante volte è necessario riprovare il comando health check prima di registrare un errore?

Imposta le dipendenze del contenitore

All'interno di ogni gruppo di contenitori è possibile impostare le dipendenze tra i contenitori in base allo stato del contenitore. Una dipendenza influisce sul momento in cui il contenitore dipendente può avviarsi o chiudersi in base allo stato di un altro contenitore.

Un caso d'uso chiave per le dipendenze consiste nella creazione di sequenze di avvio e chiusura per il gruppo di contenitori.

Ad esempio, potresti volere che il contenitore A venga avviato per primo e venga completato correttamente prima dell'avvio dei contenitori B e C. A tale scopo, create innanzitutto una dipendenza per il contenitore B dal contenitore A, a condizione che il contenitore A venga completato correttamente. Quindi crea una dipendenza per il contenitore C sul contenitore A con la stessa condizione. Le sequenze di avvio si verificano in ordine inverso rispetto all'arresto.

Configura una flotta di container

Quando crei una flotta di container, prendi in considerazione i seguenti punti decisionali. La maggior parte di questi punti dipende dall'architettura e dalla configurazione del container.

Decidi dove vuoi distribuire la tua flotta

In generale, vuoi schierare le tue flotte geograficamente vicino ai giocatori per ridurre al minimo la latenza. Puoi distribuire la tua flotta di container su qualsiasi dispositivo Each Regione AWS GameLift supportato da Amazon. Se desideri distribuire lo stesso server di gioco in altre località geografiche, puoi aggiungere località remote alla flotta, tra cui Regioni AWS Local Zones. Per una flotta con più sedi, puoi regolare la capacità in modo indipendente in ogni sede del parco veicoli. Per ulteriori informazioni sulle sedi del parco veicoli supportate, consultaSedi GameLift di hosting Amazon.

Scegli un tipo e una dimensione di istanza per il tuo parco istanze

Amazon GameLift supporta un'ampia gamma di tipi di istanze Amazon EC2, tutte disponibili per l'uso con una flotta di container. La disponibilità e il prezzo del tipo di istanza variano in base alla località. Puoi visualizzare un elenco dei tipi di istanze supportati, filtrati per posizione, nella GameLift console Amazon (in Risorse, istanze e quote di servizio).

Quando scegli un tipo di istanza, considera innanzitutto la famiglia di istanze. Le famiglie di istanze offrono varie combinazioni di CPU, memoria, archiviazione e funzionalità di rete. Ottieni maggiori informazioni sulle famiglie di istanze EC2. All'interno di ogni famiglia hai una gamma di dimensioni di istanze tra cui scegliere. Considerate i seguenti aspetti quando selezionate la dimensione di un'istanza:

  • Qual è la dimensione minima dell'istanza in grado di supportare il tuo carico di lavoro? Utilizza queste informazioni per eliminare i tipi di istanza troppo piccoli.

  • Quali sono le dimensioni dei tipi di istanza più adatte alla tua architettura di container? Idealmente, è preferibile scegliere una dimensione che consenta di ospitare più copie del gruppo di contenitori di replica con uno spreco minimo di spazio.

  • Quale granularità di scalabilità è utile per il tuo gioco? La capacità di Scale Fleet prevede l'aggiunta o la rimozione di istanze e ogni istanza rappresenta la capacità di ospitare un numero specifico di sessioni di gioco. Considera quanta capacità desideri aggiungere o rimuovere con ogni istanza. Se la domanda dei giocatori varia di migliaia di minuti in minuto, potrebbe essere opportuno utilizzare istanze molto grandi in grado di ospitare centinaia o migliaia di sessioni di gioco. Al contrario, potresti preferire un controllo di ridimensionamento più preciso con tipi di istanze più piccoli.

  • Sono disponibili risparmi sui costi in base alle dimensioni? Potresti scoprire che il costo di alcuni tipi di istanze varia in base alla località a causa della disponibilità.

Ottimizza la configurazione del runtime

La configurazione di runtime di una flotta è un insieme di istruzioni su come eseguire i processi del server per l'hosting di sessioni di gioco. Queste istruzioni sono implementate dall' GameLift agente Amazon in ogni gruppo di container di replica della flotta.

La configurazione di runtime di una flotta determina il numero di processi server eseguiti contemporaneamente in ciascun gruppo di contenitori di repliche. Questa impostazione influisce sul modo in cui si calcolano i limiti di risorse del gruppo di container e sulla scelta del tipo di istanza per la flotta. È necessario bilanciare questi tre elementi durante la progettazione della flotta.

Per ulteriori informazioni su come utilizzare le configurazioni di runtime, consultaGestisci il modo in cui Amazon GameLift lancia i server di gioco.

Imposta altre impostazioni opzionali del parco veicoli

Puoi utilizzare le seguenti funzionalità opzionali durante la configurazione di una flotta di container:

  • Configura i server di gioco per accedere ad altre AWS risorse. Per informazioni, consulta Comunica con altre AWS risorse delle tue flotte.

  • Proteggi le sessioni di gioco con giocatori attivi dalle interruzioni premature durante un evento a scala ridotta.

  • Limita il numero di sessioni di gioco che un individuo può creare sulla flotta entro un periodo di tempo limitato.