2011-12-29 4 views
14

Можно создать дубликат:
Notification of new S3 objectsПолучать уведомления, когда пользователь загружается в ведро S3?

У нас есть приложение, которое хранит пользовательские данные на S3. Часть нашего приложения, которое обрабатывает закачки, отделена от части, обрабатывающей данные. В некоторых случаях пользователь сможет загружать данные непосредственно на S3, не проходя совсем через наше приложение (это может произойти, если у них есть собственная учетная запись S3 и предоставить нам учетные данные).

Можно ли получать уведомление при изменении содержимого ведра S3? Было бы здорово, если бы каким-то образом можно было отправить сообщение, в котором говорится, что «этот файл был добавлен/обновлен/удален: foo».

Коротко это, есть ли какая-то временная метка, где бы я мог опросить, что бы в последний раз обновлялось ведро?

Если я не могу сделать ни одну из этих вещей, то единственной альтернативой является сканирование всего ведра и поиск изменений. Это будет медленным и дорогостоящим.

ответ

17

Update 2014-11:

Как Алан Illing указывает в комментариях, AWS теперь поддерживает уведомления от S3 до SNS, которые могут быть переданы автоматически SQS: http://aws.amazon.com/blogs/aws/s3-event-notification/

S3 можно также отправить уведомления AWS Lambda для непосредственного запуска вашего собственного кода.

Оригинальный ответ, который предсказал уведомления S3-> SNS:

Если Amazon поддержали это, они будут использовать SNS для отправки уведомлений о том, что объект добавлены в ведро. Однако на данный момент единственным событием, поддерживаемым S3 и SNS, является уведомление, когда Amazon S3 обнаруживает, что он потерял все реплики объекта Reducancy Storage (RRS) и больше не может обслуживать запросы для этого объекта.

Вот документация о событиях SNS, поддерживаемых S3:

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

Основываясь на пути, что документация написана, это выглядит как Amazon имеет идеи для других событий уведомления для добавления (например, возможно, ваша идея узнать, когда были добавлены новые ключи).

Учитывая, что Amazon не поддерживается напрямую, клиент S3, который загружает объект на S3, должен будет инициировать уведомление, или вам нужно будет сделать какой-то опрос.

Пользовательское уведомление о событиях для загрузки на S3 может быть выполнено с использованием SNS, если вы хотите получать обновления в режиме реального времени для обработки, или это можно сделать через SQS, если вы хотите, чтобы уведомления накапливались и обрабатывали их очереди в вашем собственном темпе.

Если вы являетесь участником опроса, вы можете уменьшить количество ключей, которые вам нужно запросить, путем загрузки клиента с помощью префикса, например, «unprocessed/...», за которым следует уникальный ключ. Ваше программное обеспечение для опроса может запросить только ключи S3, начиная с этого префикса.Когда он готов к обработке, он может изменить ключ на «обработка/...», а затем на «обработанный/...» или что-то еще. Объекты в S3 в настоящее время переименовываются с помощью операций копирования и удаления, выполняемых S3.

+0

Для небольших объемов объектов префиксация имени будет работать нормально. Для больших объемов объектов это фактически замедлит S3. S3 внутренне разделяет данные на основе ключа имени/объекта ведра, а ключи с тем же префиксом, скорее всего, попадают в один раздел. Для высокой пропускной способности вы должны держать ключи объектов в начале строки. См. Это для деталей: http://aws.typepad.com/aws/2012/03/amazon-s3-performance-tips-tricks-seattle-hiring-event.html – dlaidlaw

+0

@dlaidlaw: Как описано Amazon, это может легко обрабатывать пакеты более 100 запросов в секунду даже без специального префикса распределения ключей. Если вы обрабатываете свою очередь в очереди быстрее, вы можете просто использовать «необработанную» ведро вместо префикса. Тем не менее, с такой скоростью вы, скорее всего, будете использовать параллельные процессоры, после чего предложение о том, чтобы один список необработанных файлов, которые были опрошены, ломается (откуда вы знаете, какой поток обрабатывает файл?). –

+4

Для очень высокой пропускной способности я пишу сообщение в SQS, содержащее URI, в файл на S3. Затем несколько потоков могут обрабатывать очередь SQS. Да, есть накладные расходы при написании сообщения SQS, но это необходимо и распределяется по всем потокам, отправляющим файлы на S3. Было бы намного лучше, если бы у Amazon был флаг отправки SNS-сообщения для создания на S3, после чего вы могли бы подписаться на очередь SQS для распределения нагрузки по потокам, но до этого вам придется писать свои собственные сообщения в SNS или SQS. – dlaidlaw

Смежные вопросы