2012-01-25 3 views
6

В настоящее время мы используем хранилище файлов сеансов NAS для хранения PHP для массива автомасштабируемых серверов приложений с балансировкой нагрузки.DynamoDB для сеансов PHP

Мы заинтересованы заменить это более надежным решением, и DynamoDB от Amazon выглядит интересным. Я вижу один возможный вопрос здесь, документированной здесь:

http://thwartedefforts.org/2006/11/11/race-conditions-with-ajax-and-php-sessions/

Я подозреваю, DynamoDB не поддерживает объект блокировки. Любые обходные пути, о которых вы можете подумать?

Если у вас есть опыт работы с другими системами NoSQL, используемыми для сеансов PHP, вы также можете вскочить, поскольку обучение может быть аналогичным.

Заранее спасибо

ответ

8

Используя условные записи DynamoDB, вы можете реализовать пессимистическую схему блокировки, похожую на то, как работает обработчик сеанса PHP по умолчанию.

Кто-то еще также запросил обработчик сеанса DynamoDB: https://forums.aws.amazon.com/thread.jspa?messageID=328060.

Обновлено: В AWS SDK для PHP теперь включен обработчик сеанса для DynamoDB. См https://github.com/amazonwebservices/aws-sdk-for-php/blob/master/extensions/dynamodbsessionhandler.class.php и http://docs.amazonwebservices.com/AWSSDKforPHP/latest/#i=DynamoDBSessionHandler

Обновлено: Существует статья о сессии обработчика DynamoDB на блоге AWS: http://aws.typepad.com/aws/2012/04/scalable-session-handling-in-php-using-amazon-dynamodb.html

+0

+1 для реализации этого и немедленно сообщить нам, спасибо большое! –

+0

Ах черт возьми. Я провел неделю, прежде чем писать свои собственные, и собирался поделиться им. :(Спасибо за обновление, хотя! –

2

Интересная идея (+1) - и сложная статья на самом деле, просто обезжиренное его сейчас, хотя;)

Что касается других вариантов NoSQL для хранения PHP сессии вы можете захотеть, чтобы проверить MongoSession – A PHP MongoDB Session Handler, который ссылается Race Conditions with Ajax and PHP Sessions, а также и, кажется, для решения проблем, документированных в то же время:

Я недавно обновил библиотеку для поддержки atomic operations на как сессионные записи и сбор мусора, чтобы предотвратить эти гонки условий.

Аналогичный подход должен быть возможным с Amazon DynamoDB, а также с помощью соответствующей комбинации условного обновления, Atomic Счетчики и непротиворечивого чтения см Working with Items in Amazon DynamoDB подробных информации о тех понятиях и/или проверить следующие записи FAQ:

  • Does Amazon DynamoDB support conditional operations? - Да, вы можете указать условие, которое должно быть выполнено для PUT, обновления, удаления или операции на элемент, который должен быть заполнен. [...] Условные операции позволяют пользователям внедрять оптимистичные системы управления параллелизмом на DynamoDB.
  • Does Amazon DynamoDB support increment or decrement operations? - Да, Amazon DynamoDB позволяет выполнять атомарные операции увеличения и уменьшения по скалярным значениям.
+0

Спасибо за быстрый и подробный ответ! Согласованные чтения будут очень полезными. Атомные операции приращения и декремента помогли бы, но это не всегда изменения приращения и уменьшения, которые должны применяться в атомном режиме. Таким образом, отсутствие блокировок может быть проблемой. спасибо за указание в правильном направлении! Я буду исследовать дальше! – webgr

1

Ваши серверы находятся на AWS? Почему бы вам не попробовать функцию ElastCache? http://aws.amazon.com/en/elasticache/

Я использую CakePHP, witch поддерживает DB и Memcache для хранения сеансов. После некоторого времени обучения, я выбрал Memcache. Фактически, я устанавливаю PHP для хранения сеансов в Memcache и устанавливаю CakePHP для использования конфигурации php сессий. Таким образом, я могу разделить экземпляры memcache для сеансов и кэширования.

С уважением.

+1

Это вариант, который мы рассматриваем, и его очень легко настроить. Только проблема заключается в том, что когда узел умирает или когда кеш заполняется, сеансы будут потеряны. Поскольку узлы часто не умирают, а кеш-память может быть решена при тщательном планировании емкости, это действительно может быть эффективным решением. – webgr

+0

@webgr Завершение сеанса клиентов действительно раздражает, но обычно это принято. В одном из моих приложений это очень опасно, но я рискую. У меня также могут быть проблемы с моей БД. Это такой же риск. Amazon утверждает, что EC действительно надежна и имеет переход на другой ресурс, но я думаю, что вы можете потерять данные об отказе. «Надежность - Amazon ElastiCache имеет множество функций, повышающих надежность критических производственных развертываний, включая автоматическое обнаружение и восстановление сбоев. Amazon ElastiCache работает в одной и той же высоконадежной инфраструктуре, используемой другими веб-службами Amazon». – tvdias

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