Strutturazione dei servizi web in App Engine

ID regione

REGION_ID è un codice abbreviato assegnato da Google in base all'area geografica selezionata quando crei l'app. Il codice non corrisponde a un paese o a una provincia, anche se alcuni ID area geografica potrebbero sembrare simili ai codici paese e provincia più utilizzati. Per le app create dopo febbraio 2020, REGION_ID.r è incluso negli URL di App Engine. Per le app esistenti create prima di questa data, l'ID regione è facoltativo nell'URL.

Scopri di più sugli ID regione.

Utilizza il seguente documento per capire come strutturare i servizi e le risorse correlate della tua applicazione per App Engine.

Struttura delle directory

Ogni versione del servizio App Engine è definita in un file di configurazione app.yaml. Per le app semplici, il requisito minimo per il deployment è definire il file app.yaml. Il file app.yaml funge da descrittore di deployment e definisce il tipo di scalabilità e il tempo di esecuzione, i gestori e altre impostazioni delle risorse per una versione specifica di un servizio. Se stai eseguendo il deployment di più versioni di un servizio, puoi creare più file YAML nella stessa directory per rappresentare la configurazione per ciascuna versione.

Per ogni servizio puoi creare directory separate nella directory principale dell'app durante lo sviluppo a livello locale. Se ospiti l'app da un sistema di controllo della versione (VCS), ad esempio GitHub, puoi strutturare l'app in modo che utilizzi directory separate in un repository o utilizzare repository separati per ogni servizio. Ogni directory o repository deve rappresentare un singolo servizio e contenere il file app.yaml di quel servizio, oltre al codice sorgente associato.

Hai la possibilità di specificare un nome univoco per ogni file app.yaml del tuo servizio. Ad esempio, puoi denominare un file di configurazione dopo il servizio o utilizzare nomi univoci per rappresentare ogni versione del servizio, ad esempio service1.yaml o app.standard.yaml.

Gli altri file di configurazione facoltativi devono trovarsi nella directory radice o nel repository del servizio default dell'app. Questi file di configurazione facoltativi applicano impostazioni a livello di app non specifiche per un servizio specifico, tra cui i file dispatch.yaml, index.yaml e cron.yaml.

Esempi

L'esempio seguente mostra come potrebbe apparire un'app con tre servizi se stai sviluppando la tua app localmente. È stato aggiunto il valore facoltativo dispatch.yaml all'app nella directory radice. Inoltre, sono elencate tre directory principali per ciascuno dei servizi dell'app. La sottodirectory service1 include i file di origine e di configurazione del servizio. Analogamente, service2 e service3 si trovano in directory separate, che contengono ogni file del servizio, sebbene service3 includa due versioni del file di configurazione YAML:

Grafico gerarchico dei servizi YAML

Per una singola app di servizio, tale app include solo il servizio default e tutti i file possono trovarsi nella stessa directory, nella directory principale dell'app. Nell'esempio seguente, la possibile struttura di una singola app di servizio è dimostrata e include il file di configurazione facoltativo dispatch.yaml e due file di configurazione che rappresentano versioni diverse di quel servizio, service1.yaml e service2.yaml:

Grafico gerarchico di servizi YAML di piccole dimensioni

Considerazioni sulla progettazione per il tempo di attività dell'istanza

Gli errori hardware o software che causano l'interruzione anticipata o il riavvio frequente di istanze possono verificarsi senza avvisi e la risoluzione può richiedere molto tempo. La tua applicazione dovrebbe essere in grado di gestire tali errori.

Di seguito sono riportate alcune strategie efficaci per evitare tempi di inattività dovuti ai riavvii delle istanze:

  • Riduci il tempo necessario per il riavvio delle tue istanze o per il avvio di nuove.
  • Per i calcoli a lunga esecuzione, crea periodicamente dei punti di controllo in modo da poter riprendere da quello stato.
  • La tua app dovrebbe essere "stateless" per non contenere nulla nell'istanza.
  • Utilizzare le code per eseguire l'esecuzione asincrona delle attività.
  • Se configuri le istanze per la scalabilità manuale:
    • Utilizza il bilanciamento del carico in più istanze.
    • Configura più istanze del necessario per gestire il traffico normale.
    • Scrivi una logica di riserva che utilizza i risultati memorizzati nella cache quando un'istanza di scalabilità manuale non è disponibile.

Scopri di più sulle istanze in Come sono gestite le istanze.

Il servizio default

Ogni applicazione App Engine include un servizio default. Devi eseguire il deployment della versione iniziale della tua app nel servizio default prima di poter creare ed eseguire il deployment di servizi aggiuntivi nell'app.

Il servizio predefinito può essere facoltativamente specificato in app.yaml con l'impostazione service: default.

Le richieste inviate alla tua app tramite il progetto Cloud vengono inviate al servizio default, ad esempio https://PROJECT_ID.REGION_ID.r.appspot.com. Per scoprire di più sul targeting degli altri tuoi servizi, vedi Comunicare tra i servizi.

File di configurazione facoltativi

I seguenti file di configurazione controllano le funzionalità facoltative che si applicano a tutti i servizi di una singola app. Consulta gli argomenti seguenti per i dettagli di ciascuna funzionalità facoltativa:

  • dispatch.yaml sostituisce le regole predefinite di routing inviando le richieste in entrata a un servizio specifico in base al percorso o al nome host nell'URL.
  • index.yaml specifica gli indici di cui la tua app ha bisogno se utilizzi le query Datastore.
  • cron.yaml configura le attività regolarmente pianificate che operano in orari definiti o a intervalli regolari.

Considerazioni sull'archiviazione di dati e file

Da App Engine, puoi accedere facilmente ad altri servizi di Google Cloud come Datastore, Cloud SQL e Cloud Storage.

Puoi anche utilizzare un database esterno o di terze parti se tale database è supportato dalla tua lingua e accessibile dalla tua istanza di App Engine.

Per informazioni dettagliate sull'archiviazione di file in Google Cloud o esternamente, consulta Informazioni sull'archiviazione di dati e file.

Puoi anche scegliere come pubblicare i contenuti statici. Puoi pubblicare i contenuti statici della tua app direttamente da quell'app in App Engine, ospitare i tuoi contenuti statici su un'opzione di Google Cloud come Cloud Storage o utilizzare una rete CDN (Content Delivery Network) di terze parti. Per ulteriori informazioni sulla pubblicazione di contenuti statici, consulta la sezione Pubblicazione di file statici.

Passaggi successivi

Se utilizzi più servizi e vuoi eseguirli insieme, vedi i passaggi per eseguire il deployment di più servizi.