2011-12-29 23 views
14

Eventuali duplicati:
Notification of new S3 objectsRicevi notifiche quando l'utente carica su un bucket S3?

Abbiamo un app che memorizza i dati utente su S3. La parte della nostra app che gestisce i caricamenti è disgiunta dalla parte che elabora i dati. In alcuni casi, l'utente sarà in grado di caricare i dati direttamente su S3 senza passare attraverso la nostra app (questo può accadere se hanno un proprio account S3 e ci forniscono le credenziali).

È possibile ricevere una notifica ogni volta che cambia il contenuto di un secchio S3? Sarebbe bello se in qualche modo venisse inviato un messaggio che dice "questo file è stato aggiunto/aggiornato/cancellato: foo".

In breve, c'è qualche timestamp da qualche parte in cui potrei eseguire il polling che direbbe l'ultima volta che il bucket è stato aggiornato?

Se non riesco a fare nessuna di queste cose, l'unica alternativa è la scansione dell'intero bucket e cercare le modifiche. Questo sarà lento e costoso.

risposta

17

Aggiornamento 2014-11:

Come sottolinea Alan Illing nei commenti, AWS ora supporta le notifiche da S3 a SNS, che possono essere inoltrati automaticamente al SQS: http://aws.amazon.com/blogs/aws/s3-event-notification/

S3 può anche inviare notifiche a AWS Lambda per eseguire direttamente il tuo codice.

risposta originale che ha predetto le notifiche S3-> SNS:

Se Amazon ha sostenuto questo, avrebbero usato SNS per l'invio di notifiche che un oggetto è stato aggiunto a un secchio. Tuttavia, al momento, l'unico evento bucket supportato da S3 e SNS è quello di avvisare l'utente quando Amazon S3 rileva che ha perso tutte le repliche di un oggetto RBC (Reduced Redundancy Storage) e non può più servire le richieste per quell'oggetto.

Ecco la documentazione sugli eventi SNS supportati da S3:

http://docs.amazonwebservices.com/AmazonS3/latest/dev/NotificationHowTo.html

Sulla base del modo in cui la documentazione è scritto, sembra che Amazon ha idee per altri eventi di notifica per aggiungere (come forse la tua idea per scoprire quando sono state aggiunte nuove chiavi).

Dato che non è supportato direttamente da Amazon, il client S3 che carica l'oggetto su S3 dovrà attivare la notifica o sarà necessario eseguire una sorta di polling.

La notifica degli eventi personalizzati per i caricamenti su S3 può essere eseguita utilizzando SNS se si desidera ottenere aggiornamenti quasi in tempo reale per l'elaborazione, oppure può essere eseguita tramite SQS se si desidera che le notifiche si accumulino e vengano elaborate di una coda al tuo ritmo.

Se si sta eseguendo il polling, è possibile ridurre il numero di chiavi che è necessario richiedere facendo caricare il client con un prefisso, ad esempio, "unprocessed/..." seguito dalla chiave univoca. Il tuo software di polling può quindi interrogare solo i tasti S3 che iniziano con quel prefisso.Quando è pronto per l'elaborazione, potrebbe cambiare la chiave in "elaborazione/..." e successivamente in "elaborato/..." o qualsiasi altra cosa. Gli oggetti in S3 sono attualmente rinominati dalle operazioni di copia + cancellazione eseguite da S3.

+0

Per volumi inferiori di oggetti, il prefisso del nome funzionerà correttamente. Per grandi volumi di oggetti, questo rallenterà effettivamente S3. S3 suddivide internamente i dati in base al nome del bucket/chiave dell'oggetto e le chiavi con lo stesso prefisso molto probabilmente finiranno nella stessa partizione. Per un throughput di upload elevato è necessario che le chiavi dell'oggetto cambino all'inizio della stringa. Vedi questo per i dettagli: http://aws.typepad.com/aws/2012/03/amazon-s3-performance-tips-tricks-seattle-hiring-event.html – dlaidlaw

+0

@dlaidlaw: come descritto da Amazon, può facilmente gestire raffiche di oltre 100 richieste al secondo anche senza la distribuzione speciale del prefisso delle chiavi. Se stai elaborando la tua coda in entrata più velocemente, puoi semplicemente usare un bucket "non elaborato" invece del prefisso. Tuttavia, a quel ritmo probabilmente userete processori paralleli, a quel punto il suggerimento di avere un singolo elenco di file non elaborati che vengono interrogati si interrompe (come fai a sapere quale thread sta processando quale file?). –

+4

Per un throughput molto elevato, scrivo un messaggio a SQS che contiene l'URI nel file in S3. Più thread possono quindi elaborare la coda SQS. Sì, c'è un sovraccarico nella scrittura del messaggio SQS, ma è necessario e distribuito tra tutti i thread che inviano file a S3. Sarebbe molto meglio se Amazon avesse un flag per inviare un messaggio SNS al momento della creazione in S3, che sarebbe quindi possibile sottoscrivere una coda SQS per distribuire il carico attraverso i thread, ma fino ad allora è necessario scrivere i propri messaggi su SNS o SQS. – dlaidlaw

Problemi correlati