Strutturazione dei servizi web in App Engine

ID regione

Il REGION_ID è un codice abbreviato che Google assegna in base alla regione selezionata quando crei l'app. Il codice non corrisponde a un paese o a una provincia, anche se alcuni ID regione possono sembrare simili ai codici di paesi e province di uso comune. Per le app create dopo febbraio 2020, REGION_ID.r è incluso negli URL 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 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 funge da descrittore del 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 esegui il deployment di più versioni di un servizio, puoi creare più file YAML nella stessa directory per rappresentare la configurazione di ciascuna versione.

Per ogni servizio, puoi creare directory separate nella radice dell'app durante lo sviluppo locale. Se ospiti la tua app al di fuori di un sistema di controllo delle versioni (VCS), ad esempio GitHub, puoi anche strutturarla in modo da utilizzare directory separate in un repository o 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.

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

Gli altri file di configurazione facoltativi devono risiedere nella directory principale o nel repository del servizio default della tua app. Questi file di configurazione facoltativi si applicano alle impostazioni a livello di app che non sono specifiche di un servizio particolare, 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 sviluppi localmente. Il dispatch.yaml facoltativo è stato aggiunto all'app nella directory principale. Nella radice sono presenti anche 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, sia service2 che 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 gerarchico dei servizi YAML

Per un'app di servizio singola, questa includerà solo il servizio default e tutti i file possono trovarsi nella stessa directory, nella radice dell'app. Nell'esempio seguente viene illustrata la possibile struttura di un'app di servizio singola e sono inclusi il file di configurazione dispatch.yaml facoltativo e due file di configurazione che rappresentano versioni diverse del servizio, service1.yaml e service2.yaml:

Grafico gerarchico di piccoli servizi YAML

Considerazioni sulla progettazione per l'uptime delle istanze

Guasti hardware o software che causano l'interruzione anticipata o riavvii frequenti delle istanze possono verificarsi senza preavviso e la risoluzione può richiedere molto tempo. La tua applicazione deve essere in grado di gestire questi errori.

Ecco alcune buone strategie per evitare tempi di inattività dovuti ai riavvii delle istanze:

  • Ridurre il tempo necessario per il riavvio delle istanze o per l'avvio di nuove istanze.
  • Per i calcoli di lunga durata, crea periodicamente dei checkpoint in modo da poter riprendere da quello stato.
  • La tua app deve essere "stateless", in modo che non venga memorizzato nulla sull'istanza.
  • Utilizza le code per eseguire attività asincrone.
  • Se configuri le istanze per la 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 utilizzi i risultati memorizzati nella cache quando un'istanza di scalabilità manuale non è disponibile.

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

Il servizio default

Ogni applicazione App Engine include un servizio default. Devi implementare la versione iniziale della tua app nel servizio default prima di poter creare e implementare servizi aggiuntivi nella tua app.

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

Le richieste inviate alla tua app utilizzando il tuo 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 i servizi.

File di configurazione facoltativi

I seguenti file di configurazione controllano le funzionalità opzionali che si applicano a tutti i servizi di una singola app. Per informazioni dettagliate su ciascuna delle funzionalità opzionali, consulta i seguenti argomenti:

  • dispatch.yaml ignora le regole di routing predefinite inviando le richieste in entrata a un servizio specifico in base al percorso o al nome host nell'URL.
  • index.yaml specifica gli indici necessari alla tua app se utilizzi le query Datastore.
  • cron.yaml configura attività programmate ricorrenti eseguite in orari specifici o a intervalli regolari.

Considerazioni sull'archiviazione di file e dati

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

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

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

Puoi anche scegliere la modalità di pubblicazione dei contenuti statici. Puoi pubblicare i contenuti statici della tua app direttamente da questa in App Engine, ospitare i contenuti statici su un'opzione come Cloud Storage o utilizzare una Content Delivery Network (CDN) di terze parti. Google Cloud Per saperne di più sulla pubblicazione di contenuti statici, consulta Pubblicazione di file statici.

Passaggi successivi

Se lavori con più servizi e vuoi eseguirne il deployment insieme, consulta i passaggi per eseguire il deployment di più servizi.