Блокировка с помощью S3 - PullRequest
       12

Блокировка с помощью S3

22 голосов
/ 07 августа 2010

Каков рекомендуемый способ реализации простого механизма блокировки, который будет использоваться вместе с S3?

Пример того, что я хочу сделать:

  • получить блокировку по идентификатору объекта
  • чтение объекта из S3
  • изменить данные
  • запись объекта в S3
  • разблокировка

Идеально ищет облачный механизм блокировки. Я мог бы использовать memcached локально, но тогда я должен иметь дело с масштабированием этого. Я не вижу очевидного способа реализации облегченной блокировки с помощью любых API-интерфейсов AWS, но это кажется общей проблемой.

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

Ответы [ 2 ]

10 голосов
/ 08 августа 2010

Хорошо, сегодня утром я провел некоторое время, играя в boto, и я думаю, что у меня есть решение, которое работает с использованием SimpleDB.Вам нужна последняя версия boto, чтобы поддерживались условные путы и согласованные чтения.

Пример кода здесь: http://pastebin.com/3XzhPqfY

Пожалуйста, оставляйте комментарии / предложения.Я считаю, что этот код должен быть достаточно безопасным - мой тест в main () пробует его с 10 потоками.

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

http://www.shlomoswidler.com/2009/12/read-after-write-consistency-in-amazon.html

2 голосов
/ 10 августа 2010

Я не думаю, что вы можете сделать это, используя только S3, используя улучшения согласованности simpleDB, как сказал Джеймс, - это хороший способ, который работаетнекоторые примеры можно посмотреть здесь: Улучшения согласованности Amazon SimpleDB другой подход, который может подойти, - это использование версии S3поэтому, в основном, сохраняйте пару идентификатор объекта / идентификатор версии в simpleDB как наиболее «допустимую» версиюи убедитесь, что все запросы GET будут получать эту версиюпосле успешного PUT измененного объекта обновите идентификатор версии в БДтаким образом, вы также можете использовать возможность извлечения предыдущих версий объекта для восстановления при необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...