Strutturazione dei servizi web in App Engine

ID regione

REGION_ID è un codice abbreviato assegnato da Google 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 di 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 illustra 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 app.yaml file di configurazione. 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à, 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 directory principale dell'app quando esegui lo sviluppo localmente. Se ospiti la tua app da un sistema di controllo della versione (VCS), ad esempio GitHub, puoi anche strutturarla in modo da utilizzare 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 del servizio insieme al codice sorgente associato.

Puoi specificare un nome univoco per ogni file app.yaml del servizio. Ad esempio, puoi assegnare il nome di un file di configurazione al servizio o utilizzare nomi univoci per rappresentare ogni versione di quel determinato servizio, ad esempio service1.yaml o app.standard.yaml.

Gli altri file di configurazione facoltativi devono trovarsi 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 determinato servizio, inclusi i file dispatch.yaml, index.yaml e cron.yaml.

Esempi

Per un'app semplice è sufficiente aggiungere app.yaml nella stessa posizione dei file di origine dell'app. Per un'app di un singolo servizio, l'app includerà solo il default servizio e tutti i file possono trovarsi nella stessa directory, nella radice dell'app:

Grafo della gerarchia di un singolo servizio YAML

L'esempio seguente mostra come strutturare un'app con tre servizi se la stai sviluppando localmente. Il file facoltativo dispatch.yaml è stato aggiunto all'app nella directory principale. Nella directory principale 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. Analogamente, sia service2 che service3 si trovano in directory separate, che contengono i file di ciascun servizio, anche se service3 include due versioni del file di configurazione YAML:

Grafico della gerarchia dei servizi YAML

Nell'esempio seguente, un singolo servizio ha il file facoltativo dispatch.yaml e due file di configurazione che rappresentano versioni diverse del servizio, service1.yaml e service2.yaml:

Grafico della gerarchia di piccoli servizi YAML

Considerazioni sul design per l'uptime delle istanze

Gli errori hardware o software che causano l'interruzione anticipata o riavvii frequenti delle istanze possono verificarsi senza preavviso e possono richiedere molto tempo per essere risolti. La tua applicazione dovrebbe essere in grado di gestire questi errori.

Ecco alcune buone strategie per evitare i tempi di riposo dovuti ai riavvii delle istanze:

  • Riduci il tempo necessario per riavviare le istanze o per avviarne di nuove.
  • Per i calcoli di lunga durata, crea periodicamente dei checkpoint in modo da poter riprendere da quello stato.
  • L'app deve essere "senza stato" in modo che non venga memorizzato nulla nell'istanza.
  • Utilizza le code per eseguire attività asincrone.
  • Se configuri le istanze per il ridimensionamento manuale:
    • Utilizza il bilanciamento del carico su più istanze.
    • Configura più istanze del necessario per gestire il traffico normale.
    • Scrivi una logica di riserva che utilizzi i risultati memorizzati nella cache quando non è disponibile un'istanza di scalabilità manuale.

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

Il servizio default

Ogni applicazione App Engine include un servizio default. Per poter creare e implementare servizi aggiuntivi nella tua app, devi eseguire il deployment della versione iniziale dell'app nel servizio default.

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

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

Le richieste inviate all'app utilizzando il progetto Google Cloud vengono inviate al serviziodefault, ad esempiohttps://PROJECT_ID.REGION_ID.r.appspot.com. Per scoprire di più su come scegliere come target i tuoi altri servizi, consulta la sezione Comunicazione 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. Per informazioni dettagliate su ciascuna delle funzionalità facoltative, consulta i seguenti argomenti:

  • cron.yaml configura attività programmate ricorrenti eseguite in orari specifici o a intervalli regolari.
  • dispatch.yaml sostituisce 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 di cui ha bisogno la tua app se utilizzi le query Datastore.

Nomi file

App Engine esegue le app in un container su una distribuzione Ubuntu Linux aggiornata. I nomi dei file utilizzati nell'ambiente standard di App Engine devono essere compatibili con UTF-8, ovvero UTF-8 o un formato che può 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 di lingua dei nomi file compatibili con UTF-8.

Il deployment non va a buon fine se i nomi dei file non sono compatibili con UTF-8. Tieni presente che non esistono limitazioni per la codifica dei caratteri utilizzata 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 in un altro luogo, 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 dall'app in App Engine, ospitare i contenuti statici su un'opzione Google Cloud come Cloud Storage o utilizzare una rete di distribuzione dei contenuti (CDN) di terze parti. Per ulteriori informazioni su come pubblicare 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.