2012-02-19 28 views
11

Mi piacerebbe creare un servizio Web per un'app per iPhone. Per quanto riguarda i caricamenti di file, mi chiedo quale sia la procedura standard e la soluzione più conveniente. Per quanto posso vedere, ci sono due possibilità:Caricare direttamente su S3 o tramite EC2?

  1. client> S3: Ho caricare un file da iPhone a S3 direttamente (con il AWS SDK)
  2. client> EC2> S3: aggiungo un file al mio server (EC2 in esecuzione Django) e quindi il server carica il file di S3 (come descritto in questo post)

non ho intenzione di modificare il file in alcun modo. Devo solo dire al database di aggiungere una voce. Quindi, se dovessi caricare un file Client> S3, dovrei comunque collegarmi al server per fare la voce del database.

It seems come se EC2> S3 non costa nulla fintanto che i due si trovano nella stessa regione.

Sarei interessato a sapere quali sono i vantaggi e gli svantaggi prima di iniziare a implementare i caricamenti di file.

risposta

15

Lo farei sicuramente tramite S3 per motivi di scalabilità. È vero, i dati tra S3 ed EC2 sono veloci ed economici, ma i caricamenti sono di lunga durata, non come le normali richieste web. Pertanto è possibile saturare la NIC nella propria istanza EC2.

Piuttosto, restituire un GUID al client, caricare su S3 con la chiave impostata sul GUID e sul tipo di contenuto impostato in modo appropriato. Quindi chiamare un servizio Web/endpoint Ajax per creare un record DB con la chiave GUID al termine del caricamento.

+0

Grazie mille. Quindi, se ti capisco correttamente, non c'è alcun reale vantaggio nel farlo tramite l'EC2. Non direste che è un po 'complicato per (1) avere un GUID restituito al client, (2) fare il client di upload> S3 e (3) connettersi a EC2 per fare la voce del database. Inoltre, dovrei controllare prima del primo passaggio se l'immagine può essere effettivamente caricata, quindi il passaggio 0 dovrebbe essere quello di connettersi a EC2 e controllare se il file esiste già. –

+1

Sì, è un po 'più complesso, ma direi dal punto di vista della futura prova della tua app e garantire la scalabilità è essenziale. Dovresti usare EC2 come proxy per S3 altrimenti. S3 è un servizio di storage infinitamente scalabile: perché mettere un collo di bottiglia di fronte ad esso? – reach4thelasers

+0

Grazie! Quindi, per chiarire: se carico direttamente su S3, non avrò il problema di caricare pezzi in abbondanza e non dovrò preoccuparmi della memoria della mia istanza EC2, giusto? È un po 'come se S3 fosse un'altra istanza, solo che è un grosso disco fisso, che non fa altro che immagazzinare cose e accettare caricamenti, giusto? Quindi, sarebbe davvero imprudente passare attraverso un'istanza EC2 e sprecare le mie risorse EC2 per il caricamento di roba mentre potrebbe fare altre cose (ad esempio la gestione del database ecc.). –

Problemi correlati