2012-01-25 46 views
6

我們目前正在爲一系列自動調節負載平衡應用服務器使用適用於PHP會話文件存儲的NAS。適用於PHP會話的DynamoDB

我們有興趣用一個更強大的解決方案替代它,Amazon的DynamoDB看起來很有趣。在這裏我看到一個可能的問題,這裏記載:

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

我懷疑DynamoDB不支持對象鎖定。你可以想到的任何解決方法?

如果您有任何來自PHP會話的其他NoSQL系統的經驗,也可以隨意學習,因爲學習可能類似。

在此先感謝

回答

8

使用DynamoDB的條件寫入,您可以實現類似於PHP默認會話處理程序工作方式的悲觀鎖定方案。

其他人也請求了DynamoDB會話處理程序:https://forums.aws.amazon.com/thread.jspa?messageID=328060

更新:適用於PHP的AWS開發工具包現在包含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) - 其實一個精心製作的文章,只是脫脂它現在雖然)

至於其他的NoSQL選項PHP會話存儲你可能要退房MongoSession – A PHP MongoDB Session Handler,它引用Race Conditions with Ajax and PHP Sessions以及和似乎爲解決在此期間記錄的問題:

我最近更新了庫,支持​​上 兩會話寫入和垃圾回收,以幫助防止這些競爭條件 。

一種類似的方法應儘可能與Amazon DynamoDB以及通過條件更新原子計數器一致性讀取的適當組合的方法,請參見Working with Items in Amazon DynamoDB對這些概念的細節和/或檢查出下面的FAQ項:

+0

感謝您的迅速和詳細回答!一致的閱讀將有助於確保幫助。原子增量和減量操作將有所幫助,但它並不總是以原子方式增加和減少需要應用的變化。因此,缺少鎖可能仍然是一個問題。感謝您指出正確的方向!我會進一步調查! – webgr

1

您的服務器在AWS?你爲什麼不嘗試ElastCache功能? http://aws.amazon.com/en/elasticache/

我使用CakePHP,女巫支持DB和Memcache來存儲會話。經過一段時間的探索後,我選擇了Memcache。實際上,我將PHP設置爲在Memcache上存儲會話,並將CakePHP設置爲使用php會話配置。這樣我可以將會話和緩存的memcache實例分開。

問候。

+1

這是我們正在考慮的選項,並且非常易於安裝。只有問題是,當一個節點死亡或緩存滿了時,會話將會丟失。由於節點不會經常死機,並且可以通過仔細的容量規劃來解決緩存問題,所以它確實可以成爲可行的解決方案。 – webgr

+0

@webgr放鬆客戶端會話真的很煩人,但它通常被接受。在我的一個應用程序中,它非常危險,但我正在冒這個風險。我的數據庫也可能有問題。這是同樣的風險。亞馬遜聲稱,EC是真正可靠並具有故障轉移功能,但我認爲你可以在失敗時丟失數據。 「可靠 - Amazon ElastiCache具有多項功能,可提高關鍵生產部署的可靠性,包括自動故障檢測和恢復。Amazon ElastiCache運行於其他亞馬遜網絡服務所使用的高度可靠的基礎架構上。」 – tvdias