2015-07-29 8 views
9

Ho creato un'API in Laravel, che consente agli utenti di caricare archivi zip contenenti immagini.Gestione di più caricamenti simultanei multipli

Una volta caricato un archivio, questo viene inviato a S3 e raccolto da un altro servizio per essere elaborato.

Sto trovando che con archivi più grandi PHP continua a colpire il limite di memoria. So che potrei innalzare il limite ma mi sembra una scivolata scivolosa, soprattutto perché immagino che più utenti caricino file di grandi dimensioni.

La mia soluzione attuale è stata quella di rinunciare completamente al mio server e consentire al client di caricare direttamente su S3. Ma questo si sente molto insicuro e suscettibile allo spamming/DDOSing.

Credo che quello che spero davvero sia una discussione su come questo possa essere gestito elegantemente.

Esiste un linguaggio più adatto a questo tipo di elaborazione/concorrenza? Potrei facilmente generare il processo di caricamento per qualcos'altro.

I miei problemi relativi a S3 sono infondati? So sempre che la richiesta deve essere firmata, ma i token generati sono riutilizzabili, quindi sono sfruttabili.

Le risorse online parlano di NGINX come una soluzione migliore, poiché ha un modulo di caricamento che scrive i caricamenti direttamente sul file, poiché Apache sembra stia cercando di fare molto in memoria (non sicuro al 100% di questo).

Non sono abbastanza chiaro sull'intero processo di caricamento di PHP se sono onesto. Una richiesta è archiviata direttamente in memoria? Ad esempio, dieci caricamenti da 50 MB causerebbero un'eccezione di limite di memoria contro il mio 500 MB di RAM

+1

C'è una buona discussione su questo http://stackoverflow.com/questions/864570/very-large-uploads-with-php – Victory

+1

I file caricati sono memorizzati sul disco rigido, per impostazione predefinita (ad es. Come file in un cartella temp). Non sono sicuro del resto. Bella domanda, però! – Cully

+1

Questa potrebbe essere un'altra buona risorsa: http://stackoverflow.com/questions/12609451/forward-a-file-upload-stream-to-s3-through-iteratee-with-play2-scala – Cully

risposta

0

Grazie per la discussione a tutti. Dopo aver esaminato il processo Post/Upload di PHP, ha chiarito come le cose funzionassero un po '.

L'aggiornamento dell'SDK è apparso per eliminare quei problemi di limite di memoria iniziale.

Ovviamente sto ancora esaminando il problema della concorrenza, ma mi sembra che questo sia più un problema di ottimizzazione della configurazione di apache/nginx/server di configurazione che della mia lingua.

Grazie a tutti!