Strutturazione dei servizi web in App Engine

ID regione

REGION_ID è un codice abbreviato assegnato da Google in base all'area geografica selezionata al momento della creazione dell'app. Il codice non corrisponde a un paese o a una provincia, anche se alcuni ID regione possono sembrare simili ai codici paese e provincia di uso comune. 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 documento seguente per comprendere come strutturare i servizi e le risorse correlate della tua app 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 agisce come descrittore di deployment e definisce il tipo di scalabilità e il runtime, 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 delle tue versioni.

Per ogni servizio, puoi creare directory separate nella directory principale dell'app quando sviluppi in locale. Se ospiti la tua app da un sistema di controllo della versione (VCS), ad esempio GitHub, puoi anche strutturare l'app in modo che utilizzi directory separate in un repository oppure utilizzare repository separati per ogni servizio. Ogni directory o repository deve rappresentare un singolo servizio e contenere il file app.yaml del servizio insieme al codice sorgente associato.

Puoi specificare un nome univoco per ogni file app.yaml del tuo servizio. Ad esempio, puoi assegnare un nome al file di configurazione in base al servizio oppure utilizzare nomi univoci per rappresentare ogni versione di quel determinato servizio, come 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 determinato servizio, inclusi i file dispatch.yaml, index.yaml e cron.yaml.

Esempi

L'esempio seguente mostra l'aspetto di un'app con tre servizi se la stai sviluppando in locale. L'elemento facoltativo dispatch.yaml è stato aggiunto all'app nella directory principale. Sempre nella root ci sono tre directory per ciascuno dei servizi dell'app. La sottodirectory per service1 include i file di origine e di configurazione per il servizio. Allo stesso modo, service2 e service3 si trovano in directory separate che contengono i file di ogni servizio, anche se service3 include due versioni del file di configurazione YAML:

Grafico della gerarchia dei servizi YAML

Per una singola app di servizio, questa app includerà solo il servizio default e tutti i file potranno trovarsi nella stessa directory, alla directory principale dell'app. Nell'esempio seguente, viene mostrata la possibile struttura di una singola app di servizio, che include il file di configurazione dispatch.yaml facoltativo e due file di configurazione che rappresentano versioni diverse del servizio service1.yaml e service2.yaml:

Grafico della gerarchia di piccoli servizi YAML

Considerazioni sulla progettazione per l'uptime dell'istanza

I guasti hardware o software che causano la terminazione anticipata o i riavvii frequenti delle istanze possono verificarsi senza preavviso e la risoluzione può richiedere molto tempo. L'applicazione dovrebbe essere in grado di gestire questi errori.

Di seguito sono riportate alcune buone strategie per evitare tempi di inattività dovuti al riavvio delle istanze:

  • Riduci il tempo necessario per il riavvio delle istanze o l'avvio di nuove istanze.
  • Per i calcoli a lunga esecuzione, crea periodicamente checkpoint per riprendere da quello stato.
  • L'app deve essere "stateless" per fare in modo che non venga archiviato nulla nell'istanza.
  • Utilizza le code per eseguire l'esecuzione asincrona delle attività.
  • Se configuri le istanze con scalabilità manuale:
    • Utilizza il bilanciamento del carico su più istanze.
    • Configura più istanze del necessario per gestire il traffico normale.
    • Scrivi una logica di fallback che utilizza i risultati memorizzati nella cache quando non è disponibile un'istanza di scalabilità manuale.

Scopri di più sulle istanze, vedi Modalità di gestione delle istanze.

Il servizio default

Ogni applicazione App Engine include un servizio default. Prima di poter creare ed eseguire il deployment di servizi aggiuntivi per l'app, devi eseguire il deployment della versione iniziale della tua app nel servizio default.

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

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

File di configurazione facoltativi

I seguenti file di configurazione controllano le funzionalità facoltative che si applicano a tutti i servizi in una singola app. Consulta i seguenti argomenti per i dettagli su ognuna delle funzionalità facoltative:

  • dispatch.yaml esegue l'override delle regole predefinite di routing inviando le richieste in arrivo a un servizio specifico in base al percorso o al nome host nell'URL.
  • index.yaml specifica gli indici necessari all'app se utilizzi le query Datastore.
  • cron.yaml configura attività programmate regolarmente 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 Google Cloud come Datastore, Cloud SQL e Cloud Storage.

Hai anche la possibilità di utilizzare un database esterno o di terze parti se questo è supportato dalla tua lingua e accessibile dalla tua istanza App Engine.

Per maggiori dettagli sull'archiviazione dei file in Google Cloud o esternamente, consulta Informazioni sull'archiviazione di dati e file.

Puoi anche scegliere in che modo vuoi pubblicare i contenuti statici. Puoi pubblicare i contenuti statici della tua app direttamente da quell'app in App Engine, ospitare i tuoi contenuti statici in un'opzione di Google Cloud come Cloud Storage oppure 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 eseguirne il deployment insieme, consulta la procedura per eseguire il deployment di più servizi.