GAE è un'infrastruttura in grado di ospitare un'app utilizzata da milioni di utenti attivi?


9

Vorrei sapere con le restrizioni di GAE elencate di seguito, è persino possibile creare una fantastica app social (come Facebook) ospitando quell'app su GAE?

In altre parole, GAE è un'infrastruttura in grado di ospitare un'app utilizzata da 600 milioni di utenti attivi?

Restrizioni che ho scoperto da un paio di forum / blog (non esitare ad aggiungere all'elenco se trovi qualcosa che manca):

  1. Richiesta / risposta HTTP

    • Dimensione massima richiesta: 32 MB
    • Dimensione massima della risposta: 32 MB
    • Tutte le richieste devono rispondere entro 30 secondi, altrimenti GAE genererà DeadlineExceededException
    • Ogni cron job deve essere eseguito entro 10 minuti
    • I lavori cron non possono utilizzare la riduzione della mappa
    • Ogni GET o POST su un altro sito viene interrotto dopo 5 secondi. È possibile configurarlo per attendere fino a 10 secondi max. (i server intermedi sarebbero necessari per lavorare con Twitter e Facebook più volte)
    • Il client non può connettersi a GAE tramite FTP (solo HTTP e HTTPS).
    • Nessun https per domini personalizzati. Solo per i domini your-app-id.appspot.com.
    • Se si riceve un afflusso di utenti, viene visualizzato l'errore "Over quota"
  2. Banca dati

    • Il comportamento del database non è lo stesso nello sviluppo locale rispetto ai server effettivi.
    • GQL. Nient'altro.
    • Nessuna query può recuperare più di 1000 record (fa schifo seriamente se si desidera consentire al client di avere un pulsante con un clic-go-offline-now)
    • Se hai bisogno di un accesso lineare a una quantità enorme di record per eseguire un'operazione, sei sfortunato (i sistemi di Google sono raggruppati in modo massiccio)
    • La dimensione massima dei valori di Memcache è 1 MB.
    • Impossibile eseguire una semplice ricerca di testo
    • Non puoi unirti a 2 tavoli.
    • Lento (devi leggere come separare le tabelle usando l'ereditarietà in modo da poter cercare in una tabella, ottenere la chiave e quindi ottenere il suo genitore per evitare le prestazioni di deserializzazione)
    • Eccezione di runtime "Troppi indici"
    • Un'entità può al massimo avere 5000 valori di proprietà in un indice
    • I nomi chiave del modulo * (inizio e fine con due trattini bassi) sono riservati e non devono essere utilizzati dall'applicazione.
    • I nomi delle chiavi sono limitati a 500 byte (codificato UTF-8, immagino)
  3. linguaggio

    • python o java o Go (o linguaggi che utilizzano la JVM come Groovy, Scala e altri)
  4. Problemi del server

    • Nessun IP statico (potrebbero verificarsi problemi di limitazione e quota che chiamano API di terze parti)
    • Ogni applicazione è limitata a 3000 file
    • Nessun controllo del sistema operativo o dell'hardware che esegue l'app Web

Può esso? Chissà. Dovrebbe? No.
Ceejayoz,

1
@ceejayoz pls spiega perché non dovrebbe? non dovrebbe essere scalabile?

3
perché il popolo dei

Penso che Amazon EC2 sarebbe più adatto a questo tipo di applicazioni.
Mahmoud Hossam,

Hmm riguardo al tuo punto 3, puoi usare altre lingue senza traduzione, intendo i languajes che usano la JVM come Groovy, Scala e altri
yeradi

Risposte:


28

Penso che ciò che mi infastidisce di questa domanda è che l'hai formulata e caricata di "fatti" nel tentativo di raccogliere un no definitivo.

La verità è che potresti sviluppare un'app App Engine che replica le funzionalità di Facebook, Twitter o Tumblr. E supponendo che l'app fosse ben scritta, si ridimensionerebbe per supportare centinaia di milioni di utenti. Il motivo principale per cui non vorresti (che non sembra essere una considerazione per te) è il costo della gestione di un servizio di quelle dimensioni su App Engine.

Inoltre, non riesco a vedere come una delle restrizioni che hai elencato ti impedirebbe di sviluppare una tale app.

  1. Richiesta / risposta HTTP

    • Dimensione massima richiesta: 10 MB - errata, elevata a 32 MB.
    • Dimensione massima della risposta: 10 MB - errata, elevata a 32 MB.

    - se stai sviluppando un'app social che spesso deve pubblicare pagine di dimensioni superiori a 10 MB, probabilmente stai sbagliando. Inoltre, se è necessario distribuire contenuti di dimensioni superiori a 32 MB, è possibile utilizzare il blobstore per file fino a 2 GB.

    • Non è possibile accedere al file system. (dimentica di salvare i caricamenti nel filesystem) - sbagliato. È possibile leggere dal file system locale e caricare e leggere / scrivere file nel blobstore.

    - Non è possibile che Facebook, Twitter o Tumblr stiano semplicemente caricando i caricamenti degli utenti e li copino in una cartella. Non un problema.

    • Tutte le richieste devono rispondere entro 10 minuti, altrimenti GAE genererà DeadlineExceededException - errato. Sono in realtà 30 secondi.

    - Se hai bisogno di più di 30 secondi per consegnare i risultati alla richiesta di un utente, probabilmente stai sbagliando.

    • Ogni cron job deve essere eseguito entro 30 secondi - sbagliato, sono 10 minuti.

    - Se non riesci a dividere un'attività lunga in blocchi di 10 minuti, A: probabilmente stai sbagliando e B: ora puoi spostare l'attività in un'istanza di Backend, che non ha un limite di tempo per le richieste.

    • I lavori Cron non possono utilizzare la riduzione della mappa - mai usata la riduzione della mappa, ma penso che ciò richieda una citazione.

    • Ogni GET o POST su un altro sito viene interrotto dopo 5 secondi. È possibile configurarlo per attendere fino a 10 secondi max. (i server intermedi sarebbero necessari per funzionare più volte con Twitter e Facebook) - Vero.

    - Se una richiesta rivolta all'utente a un'API esterna impiega più di 10 secondi, è probabilmente una buona idea dire all'utente di riprovare comunque. Se non è una richiesta rivolta all'utente, puoi ritentare automaticamente l'attività fino a quando l'API non risponde.

    • Il client non può connettersi a GAE tramite FTP (solo HTTP e HTTPS). - Vero

    -- Perchè questo è un problema? Pensi che qualsiasi azienda su larga scala distribuisca le modifiche tramite FTP?

    • Nessun https per domini personalizzati. Solo per i domini your-app-id.appspot.com. - Vero.

    - È sulla tabella di marcia però.

    • Se ricevi un afflusso di utenti, ricevi l'errore "Over quota" - Half true.

    - Se hai pianificato correttamente l'app, non vedrai mai un errore di quota eccessiva. Il sito Royal Wedding è stato ospitato su App Engine e ha ricevuto 32.000 richieste al secondo. Nessun errore di quota eccessiva. Inoltre, hai mai visto la balena fallita su Twitter o l'errore di sovraccapacità su Tumblr? Questo è essenzialmente il loro errore di quota eccessiva.

  2. Banca dati

    • Il comportamento del database non è lo stesso nello sviluppo locale rispetto ai server effettivi. - Falso

    - Se intendi eseguire l'archivio dati sul tuo laptop è più lento di eseguirlo sul cluster di App Engine, allora vero, altrimenti non è affatto vero.

    • GQL. Nient'altro. - Falso

    - La maggior parte degli sviluppatori utilizza i filtri db per interrogare l'archivio dati. Inoltre, potresti anche dire che MySQL consente "SQL. Nient'altro".

    • Nessuna query può recuperare più di 1000 record (fa schifo seriamente se si desidera consentire al client di avere un pulsante con un clic-go-offline-now) - Falso.

    - Il limite dei 1000 record è stato revocato molto tempo fa. Inoltre, mostrami qualsiasi pagina rivolta agli utenti su Facebook, Twitter o Tumblr che richiede più di 1000 record per il rendering.

    • Se hai bisogno di un accesso lineare a una quantità enorme di record per eseguire un'operazione, sei sfortunato (i sistemi di Google sono raggruppati in modo massiccio)

    - Non sono nemmeno sicuro di cosa stai arrivando qui. Molte persone considerano la velocità dell'enorme cluster di Google come un enorme vantaggio del sistema.

    • La dimensione massima dei valori di Memcache è 10 MB. - In realtà è 1 MB per voce memcache, lo stesso di ogni altra implementazione memcache.

    • Impossibile eseguire una semplice ricerca di testo - Vero.

    - È una caratteristica sul ponte. La maggior parte dei siti di grandi dimensioni non esegue la propria indicizzazione della ricerca di testo.

    • Non puoi unirti a 2 tavoli. - Vero.

    - Gli sviluppatori di App Engine devono adattare il loro pensiero da una singola enorme query SQL multi-join a diverse singole query più piccole o denormalizzare i dati in modo che i join non siano necessari.

    • Lento (devi leggere come separare le tabelle usando l'ereditarietà in modo da poter cercare in una tabella, ottenere la chiave e quindi ottenere il suo genitore per evitare le prestazioni di deserializzazione) - ???

    - richiesta traduzione / citazione.

    • Eccezione di runtime "Troppi indici" - Vero

    - Esiste un limite al numero di indici in una singola app. Ho visto solo applicazioni di ricerca accademica colpire però.

    • Un'entità può al massimo avere 5000 valori di proprietà in un indice - Vero

    - Quindi, se qualcuno ha più di 5000 amici, avrebbero bisogno di due entità nel gruppo di amici.

    • I nomi chiave del modulo __*__(inizio e fine con due trattini bassi) sono riservati e non devono essere utilizzati dall'applicazione. - Vero

    - E allora?

    • I nomi delle chiavi sono limitati a 500 byte (codificato UTF-8, immagino) - Vero

    - Ancora una volta, e allora? I nomi chiave non sono per l'archiviazione di novelle, ma per l'identificazione univoca di un'entità.

  3. linguaggio

    • python o java o Go (qualsiasi altra cosa dovrebbe essere tradotta in queste lingue) - Mezzo vero

    - In realtà è anche possibile eseguire qualsiasi lingua eseguita su JVM, inclusi PHP e JRuby. Non so perché sia ​​un problema, Python e Java sono due potenti linguaggi con molti strumenti disponibili, tutorial e programmatori esperti.

  4. Problemi del server

    • Nessun IP statico (problemi di limitazione e quota che chiamano API di terze parti) - Half true

    - La maggior parte delle API di terze parti è a conoscenza di App Engine e / o ha una relazione con Google. Alcune volte Twitter ha bloccato accidentalmente App Engine e si risolve in poche ore.

    • Ogni applicazione è limitata a 3000 file - Half true

    - Se hai davvero bisogno di più di 3000 file di codice per la tua applicazione web, puoi usare l'importazione zip (potresti anche sbagliare).

    • Nessun controllo del sistema operativo o dell'hardware che esegue l'app Web - Vero

    - App Engine è una piattaforma come servizio . Non doversi preoccupare della manutenzione del sistema operativo o dell'hardware è ciò per cui le persone pagano. Questo è il vantaggio chiave di App Engine, non una limitazione.


Totalmente d'accordo con tutti i tuoi punti. +1
Luca Matteis,

grazie per l'input. ho modificato la domanda di conseguenza. a proposito qual è il nuovo limite di record se il limite di 1000 record viene elevato?
Pacerier,

Concordare con tutti i punti tranne il 2.1; Il db locale fa schifo.
systempuntoout,

14

No, App Engine non è appropriato per un'app con 600 milioni di utenti attivi.

Realisticamente, le app di questo tipo funzionano su un'infrastruttura altamente personalizzata dai propri data center. Probabilmente è possibile ospitare una simile app con Google, ma collaboreresti direttamente con il loro team di vendita per progettare una soluzione; le restrizioni sandbox che hai elencato sopra sarebbero da tempo irrilevanti.

Se hai appena iniziato, è sciocco progettare il presupposto che diventerai popolare come Facebook. Qualsiasi app che diventa così grande lo fa in modo incrementale e con un re-factoring costante. Innanzitutto, preoccupati di progettare funzionalità che attireranno 600 milioni di utenti. La riprogettazione dell'implementazione per supportare una base di utenti in crescita è un problema banale al confronto.


3
"App così grandi": usi il plurale, ce n'è più di uno? ;-)
Steve Jessop,

Non ho il presupposto che la mia app diventerà popolare come Facebook, ovviamente. In realtà tale ipotesi, o la sua mancanza, non ha alcuna rilevanza per la mia domanda.

1
se hai 600 milioni di utenti, saresti il ​​bersaglio di un'acquisizione di Google , quindi la possibilità di eseguire AppEngine è in gran parte irrilevante.
Dean Harding,

1
@Dean Harding La possibilità di eseguire AppEngine è in gran parte rilevante anche se si è il bersaglio di un'acquisizione di Google
Pacerier,

3

Penso che i punti in quelle FAQ rientrino in un paio di aree principali.

Prima di tutto, ci sono i punti che sono effettivamente a beneficio della scalabilità, piuttosto che a scapito. In un'applicazione altamente scalabile, una delle cose su cui ti sforzi è assicurarti che ogni richiesta sia in gran parte indipendente dalle altre e anche che abbiano tutte le stesse "dimensioni" (in termini di utilizzo della CPU, memoria, rete, ecc.).

In questo modo, le richieste possono essere facilmente distribuite tra i nodi del cluster senza preoccuparsi di un gruppo di richieste "grandi" che hanno fame di richieste più piccole sullo stesso nodo. Ciò semplifica la tua infrastruttura in termini di manutenzione, prestazioni e affidabilità.

In modo che copre cose come:

  • Dimensione massima richiesta / risposta
  • Richiedi tempi di risposta
  • Termini di risposta della richiesta esterna
  • Dimensioni massime di Memcache (in effetti, nella build predefinita di memcache, la dimensione massima del valore è 1 MB, quindi ovviamente Google esegue un file binario personalizzato che aumenta tale limite di 10 volte)
  • Dimensioni massime della risposta al database (ovvero il limite di 1.000 righe)
  • eccetera

La seconda categoria sono cose semplicemente obsolete:

Ora, sarebbe bello se Google aprisse la propria infrastruttura per consentire ai processi cron di utilizzare Map Reduce e consentirvi di eseguire query sull'intero set di dati. Ma quando sarai addirittura una frazione significativa di 600 milioni di utenti, diventerai già un grande cliente di Google e avresti comunque più opzioni di quelle disponibili in App Engine.


0

Se ti viene in mente un'idea che attirerà anche 100, figuriamoci 600, milioni di utenti, avrai qualsiasi capitale di rischio e qualsiasi team tecnico per svilupparlo ed eseguirlo su qualsiasi infrastruttura. E in quel caso vorrai anche proteggere la tua proprietà intellettuale, che GAE non fornirà perché Google vuole avere accesso al codice sorgente di ogni app GAE (non puoi comunque proteggere davvero il codice Python e Java).
GAE è adatto per le aziende che vogliono sbarazzarsi dei loro costi di infrastruttura IT e non hanno bisogno di proteggere il codice IP ma solo i loro dati.


avrai qualsiasi capitale di rischio e qualsiasi team tecnico per svilupparlo ed eseguirlo su qualsiasi infrastruttura non significa che dovresti
Pacerier,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.