View a markdown version of this page

Scopri i container di una flotta di container - GameLift Server Amazon

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

Scopri i container di una flotta di container

Su una flotta di Amazon GameLift Servers container, ogni istanza può eseguire più container. Ad esempio, puoi eseguire diverse repliche del gruppo di contenitori del tuo server di gioco. Puoi anche eseguire un gruppo di contenitori per istanza che fornisce servizi condivisi a livello di istanza.

Il container discovery server consente ai processi del server di gioco di scoprire gli altri contenitori in esecuzione sulla stessa istanza. I contenitori possono quindi comunicare tra loro attraverso le definizioni dei gruppi di contenitori sulla rete locale dell'istanza.

Il discovery server è un servizio HTTP leggero. Amazon GameLift Serverslo esegue localmente su ogni istanza della flotta di container. Il servizio fornisce le seguenti informazioni di rete per ogni contenitore in esecuzione su quell'istanza:

  • Il nome del contenitore definito nella definizione del gruppo di contenitori.

  • L'identificatore univoco del contenitore.

  • L'indirizzo IP locale del contenitore sull'istanza.

  • Il tipo di gruppo di contenitori, GAME_SERVER (una replica del gruppo di contenitori del server di gioco) o PER_INSTANCE (il gruppo di contenitori per istanza).

Nota

Il container discovery server è disponibile solo nelle flotte di container gestite.

Recupera le informazioni sulla rete dei container

Puoi recuperare le informazioni sulla rete dei container in due modi: da un processo del server di gioco con l'SDK del Amazon GameLift Servers server o da qualsiasi contenitore chiamando il server di rilevamento direttamente tramite HTTP.

Recupera le informazioni sul contenitore utilizzando l'SDK del server

Se il processo del server di gioco utilizza l'SDK del Amazon GameLift Servers server, richiama l'ListContainersNetworkInfo()azione per recuperare le informazioni sulla rete dei container. L'SDK del server individua il server di scoperta ed effettua la richiesta per te. L'azione restituisce le informazioni di rete per ogni contenitore in esecuzione sulla stessa istanza. Su qualsiasi altro tipo di calcolo, l'azione restituisce un errore di tipo di calcolo non supportato.

ListContainersNetworkInfo()è disponibile nella versione 5.5 o successiva dell'SDK del server per le seguenti lingue:

L'azione è disponibile anche nei Amazon GameLift Servers plugin per Unreal Engine e Unity.

Recupera le informazioni sul contenitore chiamando direttamente il server di rilevamento

Alcuni contenitori non utilizzano l'SDK del server, ad esempio i contenitori per istanza. Questi contenitori chiamano il server di rilevamento direttamente tramite HTTP. Amazon GameLift Serverspreimposta la variabile di GAMELIFT_CONTAINER_DISCOVERY_SERVER_ENDPOINT_V1 ambiente in questi contenitori. Questa variabile contiene l'indirizzo del discovery server, incluso il percorso della versione dell'API, ed è impostata sia nel server di gioco che nelle definizioni dei gruppi di contenitori per istanza.

Per recuperare le informazioni sulla rete dei container, invia una GET richiesta HTTP a questo endpoint. Nell'esempio seguente viene utilizzato curl:

curl "$GAMELIFT_CONTAINER_DISCOVERY_SERVER_ENDPOINT_V1"

Il discovery server restituisce un array JSON con una voce per ogni contenitore in esecuzione sull'istanza:

[ { "containerName": "game-server", "ipAddress": "172.17.0.3", "containerId": "b896159563df43736e5e93ad0547a24fa572648d55b70c70747642afca398b18", "containerGroupType": "GAME_SERVER" }, { "containerName": "per-instance", "ipAddress": "172.17.0.4", "containerId": "3c239ae037aec28bb42212ffa2b9e02524c0c4c361db9bc31dd4c5aecc0b7943", "containerGroupType": "PER_INSTANCE" } ]

Richiedi limiti di velocità

Il discovery server limita ogni contenitore dell'istanza a 10 richieste al secondo. Limita le richieste che superano questo limite e restituisce un errore. Per rimanere entro questo limite, interroga il Discovery Server una volta all'avvio. In alternativa, esegui una query solo quando devi aggiornare la visualizzazione dell'istanza. Memorizza i risultati nella cache nel contenitore e riutilizza i valori memorizzati nella cache anziché interrogare il Discovery Server su base ricorrente.

Aggiorna periodicamente la cache per mantenerla aggiornata. L'indirizzo IP locale di un contenitore può cambiare se il contenitore si blocca o esce (ad esempio, quando termina la sessione di gioco).

Esempio: raccolta di metriche dai contenitori dei server di gioco

Un uso comune del discovery server consiste nell'inviare telemetria tra contenitori sulla stessa istanza senza uscire dalla rete locale dell'istanza. Prendi in considerazione una flotta che esegue più container per server di gioco (GAME_SERVER) e un singolo contenitore per istanza (). PER_INSTANCE Il contenitore per istanza esegue un raccoglitore di metriche condiviso da tutti i server di gioco sull'istanza.

Puoi implementare la raccolta di metriche con un modello push o un modello pull:

  • Push (emissione di metriche): all'avvio, ogni container del server di gioco chiama. ListContainersNetworkInfo() Il contenitore trova la voce con il tipo di gruppo di PER_INSTANCE contenitori. Quindi legge l'indirizzo IP locale da quella voce. Il server di gioco invia le sue metriche direttamente al raccoglitore per istanza tramite la rete locale dell'istanza.

  • Pull (metrics scraping): funziona anche l'approccio inverso. Il contenitore per istanza non utilizza l'SDK del server, quindi chiama direttamente l'endpoint del server discovery. Trova gli indirizzi IP di tutti i GAME_SERVER contenitori sull'istanza. Quindi analizza un endpoint di metrica che ogni contenitore del server di gioco espone sulla rete locale.

In entrambi i casi, la comunicazione rimane sulla rete locale dell'istanza. Ogni contenitore interroga il Discovery Server solo occasionalmente anziché su base ricorrente.