2012-01-25 12 views
6

現在、負荷分散された自動サイズ調整アプリケーションサーバーのアレイ用に、PHP for NASセッションファイルストレージを使用しています。DynamoDB for PHPセッション

これをより堅牢なソリューションに置き換えることに興味があり、AmazonのDynamoDBは興味深いようです。私はDynamoDBのは、オブジェクトのロックをサポートしていない疑いがある

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

:私はここに文書化され、ここでは一つの可能​​な問題を参照してください。あなたが考えることができる任意の回避策?

PHPセッションで使用されている他のNoSQLシステムの経験があれば、学習内容が似ているかもしれません。

事前に感謝

答えて

8

、あなたはPHPのデフォルトのセッションハンドラが動作する方法に似てペシミスティック・ロック・スキームを実装することができます。 https://forums.aws.amazon.com/thread.jspa?messageID=328060

人は他にも、DynamoDBのセッションハンドラの要求を行いました。

更新日: PHP用のAWS SDKに、DynamoDB用のセッションハンドラが追加されました。 https://github.com/amazonwebservices/aws-sdk-for-php/blob/master/extensions/dynamodbsessionhandler.class.phphttp://docs.amazonwebservices.com/AWSSDKforPHP/latest/#i=DynamoDBSessionHandler

更新を参照してください: AWSのブログでDynamoDBのセッションハンドラについての記事があります:http://aws.typepad.com/aws/2012/04/scalable-session-handling-in-php-using-amazon-dynamodb.html

+0

+1これを実装してすぐに私たちに知らせてください、ありがとう! –

+0

ああ。私は自分のことを書く前に一週間過ごして、それを共有しようとしていました。 :(アップデートをありがとう! –

2

面白いアイデア(1) - と確かに精巧な記事は、ちょうどしかし今のところ、それを脱脂;)

あなたがチェックアウトする場合がありますPHPのセッションストレージのための他のNoSQLオプションについて私は最近、 両方に​​をサポートするためのライブラリを更新しました

:だけでなくRace Conditions with Ajax and PHP Sessionsを参照し、その間に文書化の問題に対処するようだMongoSession – A PHP MongoDB Session Handler、これらのレースを防ぐためのセッション書き込みとガベージコレクション 条件。

同様のアプローチは、これらの概念の詳細についてはWorking with Items in Amazon DynamoDBを参照および/またはチェックアウト、ならびに条件更新原子カウンタかつ一貫したを読み込みの適切な組み合わせによってAmazon DynamoDBで可能でなければなりません次のFAQエントリ:

  • Does Amazon DynamoDB support conditional operations?からはい、あなたは、PUTのために満たされなければならない条件を指定、更新、または上の操作を削除することができます完了する項目。 [...]条件付き操作では、ユーザーはDynamoDB上で楽観的同時実行制御システムを実装できます。
  • Does Amazon DynamoDB support increment or decrement operations?からはい、アマゾンDynamoDBのは、スカラー値でアトミックインクリメントとデクリメント操作を可能にします。
+0

感謝を回答!一貫性のある読書は、本当に助けになるには長い道のりになります。原子のインクリメントとデクリメント操作は助けになりますが、アトミックな方法で適用する必要があるのは必ずしも増分と減分の変更ではありません。したがって、ロックの欠如は依然として問題となる可能性があります。正しい方向を指してくれてありがとう!私はさらに調査します! – webgr

1

あなたのサーバーはAWSにありますか?なぜElastCache機能を試してみませんか? http://aws.amazon.com/en/elasticache/

私はCakePHPを使用していますが、魔女はセッションを保存するためにDBとMemcacheをサポートしています。両者を詰め込んだ後、私はMemcacheを選んだ。実際には、Memcacheにセッションを保存するようにPHPを設定し、PHPセッション設定を使用するようにCakePHPを設定しました。この方法で私はセッションとキャッシングのために私のmemcacheインスタンスを分けることができます。

よろしくお願いいたします。 DynamoDBの条件の書き込みを使用して

+1

これは私たちが検討しているオプションであり、設定が非常に簡単です。ノードが消滅したときやキャッシュがいっぱいになったときにセッションが失われるということだけが問題になります。ノードは頻繁に死ぬことはなく、キャッシュの容量が十分に確保されていることは慎重なキャパシティプランニングによって解決できるため、実際に実行可能なソリューションになる可能性があります。 – webgr

+0

@webgrクライアントのセッションを失うことは本当に面倒ですが、通常は受け入れられます。私のアプリケーションの1つでは、非常に危険ですが、私はリスクを冒しています。私は自分のDBにも問題があります。それは同じ種類のリスクです。 Amazonは、ECは本当に信頼性が高く、フェールオーバーを備えていると主張していますが、私はあなたが失敗時にデータを失う可能性があると思います。 Amazon ElastiCacheは、他のAmazon Web Servicesで使用されているのと同じ高信頼性のインフラストラクチャで動作します。 – tvdias