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.

Questa guida spiega come strutturare i servizi e le relative risorse della tua app 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 applicano impostazioni a livello di app che non sono specifiche di un servizio particolare, inclusi i file dispatch.yaml, index.yaml e cron.yaml.

Esempi

Un'app semplice richiede solo l'aggiunta di app.yaml nella stessa posizione dei file di origine dell'app. Per un'app di un singolo servizio, questa includerà solo il servizio default e tutti i file possono trovarsi nella stessa directory, nella directory principale dell'app:

Grafico gerarchico di un singolo servizio YAML

L'esempio seguente mostra come strutturare un'app con tre servizi se la sviluppi localmente. Il file 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 sia 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

Nell'esempio seguente, un singolo servizio ha il file dispatch.yaml facoltativo e due file di configurazione che rappresentano versioni diverse di quel 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 richiedere molto tempo per essere risolti. La tua applicazione deve essere in grado di gestire questi errori.

Ecco alcune strategie efficaci 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 l'esecuzione asincrona delle attività.
  • Se configuri le istanze per la scalabilità manuale:
    • Utilizza il bilanciamento del carico su più istanze.
    • Configura più istanze di quelle necessarie 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.

Se utilizzi Java e i servizi in bundle legacy, puoi specificare il servizio predefinito in appengine-web.xml con l'impostazione <service>default</service>.

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 saperne 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:

  • cron.yaml configura attività programmate ricorrenti eseguite in orari specifici o a intervalli regolari.
  • 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.

Nomi dei file

App Engine esegue le app in un container su una distribuzione Ubuntu Linux aggiornata. I nomi dei file che utilizzi nell'ambiente standard App Engine devono essere compatibili con UTF-8, ovvero UTF-8 o qualcosa che possa essere convertito automaticamente in UTF-8 in modo sicuro. Se i nomi dei file utilizzano codifiche diverse, esegui il deployment dell'app da una macchina con impostazioni della lingua dei nomi dei file compatibili con UTF-8.

Il deployment non riesce se i nomi dei file non sono compatibili con UTF-8. Tieni presente che non esistono restrizioni sulla codifica dei caratteri che utilizzi all'interno di un file.

Considerazioni sull'archiviazione di file e dati

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 è 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 app 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.