Con App Engine, puoi creare applicazioni web che utilizzano infrastruttura e servizi scalabili. App Engine esegue la tua applicazione web utilizzando una JVM Java 8. Per app Engine richiama le classi servlet dell'app per gestire le richieste e prepararsi risposte in questo ambiente.
La piattaforma App Engine offre molti strumenti servizi API che il tuo codice può chiamare. L'applicazione può anche configurare attività pianificate che vengono eseguite alle a determinati intervalli.
Specifica il runtime Java 8 per la tua app
Per fare in modo che la tua app utilizzi il runtime Java 8, aggiungi la riga seguente
al tuo file appengine-web.xml
:
<runtime>java8</runtime>
Il file appengine-api.jar
incluso in Google Cloud CLI in
platform/google_appengine/google/appengine/tools/java/lib/impl/appengine-api.jar
rappresenta l'API App Engine per Java. Puoi accedere a questo file anche utilizzando
Maven
repository Git che elenca tutte le versioni.
Seleziona la versione dell'API utilizzata dall'applicazione includendo questo JAR nel
WEB-INF/lib/
dell'applicazione oppure usa Maven per gestire le dipendenze. Se un nuovo
dell'ambiente di runtime Java che introduce modifiche
non sono compatibili con le app esistenti, l'ambiente avrà un nuovo
numero di versione principale.
Utilizzo di Maven per gestire le dipendenze
Puoi utilizzare Maven per gestire tutte le dipendenze. Ad esempio, questo La vocepom.xml
include la versione più recente dell'API App Engine
(Rappengine-api-1.0-sdk
) disponibile da Maven Central:
<dependency> <groupId>com.google.appengine</groupId> <artifactId>appengine-api-1.0-sdk</artifactId> <version></version> </dependency>
Sabbiera
Il runtime Java di App Engine distribuisce le richieste per le applicazioni tra in più server web e impedisce che un'applicazione interferisca con un'altra. Un'app di App Engine non deve rispondere lentamente. Una richiesta web a un l'applicazione deve essere gestita entro il limite di timeout della richiesta. I processi che superano questo limite per rispondere vengono interrotti per evitare sovraccaricando il server web.Tieni presente che l'unico posto in cui gli utenti possono scrivere file è la directory /tmp
.
I file in /tmp
utilizzeranno la memoria allocata all'istanza. I file
in questa posizione sono disponibili solo per questa istanza e solo per
per questa specifica istanza.
In genere, l'applicazione ottiene i file di risorse pacchettizzando i file
utilizzi la tua applicazione in WEB-INF
, quindi le carichi dall'app
utilizzando Class.getResource()
, ServletContext.getResource()
o metodi simili.
Per impostazione predefinita, tutti i file in WAR sono "file di risorse". Puoi escludere file da
questo set usando il file appengine-web.xml
.
Ordine JAR del caricatore classi
A volte potrebbe essere necessario ridefinire l'ordine in cui i file JAR vengono
analizzati per individuare le classi al fine di risolvere i conflitti tra i nomi delle classi. Nella
in questi casi, la priorità di caricamento può essere concessa a file JAR specifici aggiungendo
L'elemento <class-loader-config>
contiene <priority-specifier>
elementi in
il file appengine-web.xml
. Ad esempio:
<class-loader-config>
<priority-specifier filename="mailapi.jar"/>
</class-loader-config>
Questo luogo "mailapi.jar
" come primo file JAR a cui eseguire la ricerca per le classi,
escludendo quelli nella directory war/WEB-INF/classes/
.
Se a più file JAR viene assegnata la priorità, l'ordine di caricamento originale (con
l'uno rispetto all'altro). In altre parole, l'ordine dei
Gli elementi <priority-specifier>
di per sé non sono importanti.
Thread
Con il runtime Java 8, puoi creare thread utilizzando
API ThreadManager
e le API integrate di Java, ad esempio new Thread()
.
Attualmente, se vuoi chiamare le API di App Engine (com.google.appengine.api.*
),
devi chiamare queste API da un thread di richieste o da un thread creato utilizzando
l'API ThreadManager.
Un'applicazione può
- Implementa
java.lang.Runnable
. - Crea una fabbrica Thread chiamando
com.google.appengine.api.ThreadManager.currentRequestThreadFactory()
- Chiama il metodo
newRequestThread
del produttore, passando il valoreRunnable
,newRequestThread(runnable)
oppure utilizza l'oggetto di fabbrica restituito dacom.google.appengine.api.ThreadManager.currentRequestThreadFactory()
conExecutorService
(ad es., chiamataExecutors.newCachedThreadPool(factory)
).
Se crei un ThreadPoolExecutor
con currentRequestThreadFactory()
:
shutdown()
deve essere chiamata esplicitamente prima del completamento della richiesta di servlet. Mancata attestazione
la richiesta non verrà completata e il server delle app non andrà a buon fine.
Tieni presente che alcune librerie potrebbero creare ThreadPoolExecutors per te.
Un'applicazione può eseguire operazioni sul thread corrente, ad esempio
thread.interrupt()
.
Ogni richiesta è limitata a 50 thread di richieste dell'API App Engine simultanei.
Quando utilizzi i thread, usa la contemporaneità di alto livello.
oggetti,
come Executor
e Runnable
. Questi strumenti si occupano di molte delle
dettagli importanti sulla contemporaneità, come
Interruzioni
e la pianificazione
della contabilità.
Strumenti
IDE supportati
Cloud Tools for IntelliJ consente di eseguire ed eseguire il debug delle applicazioni App Engine all'interno di IntelliJ IDEA. Puoi eseguire il deployment dei tuoi progetti App Engine live in produzione senza che esce dall'IDE.
Strumenti di creazione supportati
Per velocizzare il processo di sviluppo, puoi utilizzare l'App Plug-in di motore per Apache Maven o Gradle:
Server di sviluppo locale
Il server di sviluppo esegue l'applicazione sul computer locale per lo sviluppo test. Il server simula i servizi Datastore. La può anche generare configurazioni per Datastore indici in base alle query eseguite dall'app durante il test.
Contemporaneità e latenza
La latenza della tua applicazione ha l'impatto maggiore sul numero di istanze necessarie per gestire il tuo traffico. Se elabori le richieste rapidamente, gestire molte richieste.
Le istanze a thread singolo possono gestire una richiesta in parallelo. Esiste quindi una relazione diretta tra latenza e numero di e richieste che possono essere gestite sull'istanza al secondo. Ad esempio, 10 ms equivale a 100 richieste al secondo per istanza.Le istanze multi-thread possono gestire molte richieste in parallelo. Pertanto, è una relazione diretta tra la CPU consumata e il numero richieste/secondo.
App Java supporto simultaneo richieste, quindi una singola istanza può gestire nuove richieste mentre è in attesa che altre completato. La contemporaneità riduce notevolmente il numero di istanze della tua app ma devi progettare l'app per il multi-threading.
Ad esempio, se un B4 istanza (circa 2,4 GHz) consuma 10 Mcicli/richiesta, è possibile elaborare 240 richieste/secondo/istanza. Se consuma 100 Mcicli per richiesta, è possibile elaborare 24 richieste/secondo/istanza. Questi numeri sono il caso ideale, ma sono abbastanza sono realistici in termini di ciò che è possibile ottenere su un'istanza.
Versioni Java di App Engine
Tutti gli artefatti rilasciati che iniziano con la versione 2.x.x
utilizzano
open source
meccanismo di rilascio. Gli artefatti rilasciati che iniziano con la versione 1.9.9xx
o precedenti utilizzano la classe
un sistema di compilazione interno. Consulta le
Repository GitHub
per ulteriori informazioni.
Variabili di ambiente
Le seguenti variabili di ambiente sono impostate dal runtime:
Variabile di ambiente | Descrizione |
---|---|
GAE_APPLICATION
|
L'ID della tua applicazione App Engine. Questo ID è preceduto dal prefisso "region code~" ad esempio "e~" per le applicazioni distribuite in Europa. |
GAE_DEPLOYMENT_ID |
L'ID del deployment attuale. |
GAE_ENV |
L'ambiente App Engine. Impostata su standard . |
GAE_INSTANCE |
L'ID dell'istanza su cui è attualmente in esecuzione il servizio. |
GAE_RUNTIME |
Il tempo di esecuzione specificato nel file app.yaml . |
GAE_SERVICE |
Il nome del servizio specificato nel file app.yaml . Se non viene specificato alcun nome di servizio, viene impostato su default . |
GAE_VERSION |
L'etichetta della versione corrente del servizio. |
GOOGLE_CLOUD_PROJECT |
L'ID progetto Google Cloud associato alla tua applicazione. |
PORT |
La porta che riceve le richieste HTTP. |
Puoi definire variabili di ambiente aggiuntive nel file app.yaml
,
ma i valori precedenti non possono essere sostituiti.