2014-09-28 36 views
2

我有一個作爲Azure網站運行的PokerApp的天真版本。Azure網站和有狀態的webApp

在其存儲服務器存儲的表的狀態,(該輪到誰了,窗簾價值,卡...)等

這裏的問題是,我不知道我有多少可以依靠WebServer的內存是「永久」的。服務器的簡單重啓會導致內存丟失,因此重啓前所有正在進行的遊戲都將丟失/造成問題。

我已閱讀關於使用TableStorage來保留會話數據並在實例之間共享它,但在我的情況下,它不僅僅是我想要分享的文本字符串,而是讓我們說例如一個大廳objcet,其中包含所有關聯的信息與遊戲。


這是我在記憶

enter image description here


之後你的一些評論對象的非常粗略的結構,你可以看到,需要存儲的對象是相當大而且幾乎不斷。我不知道序列化和反序列化在這裏會如何工作......

我應該考慮一個天青的虛擬機,我希望這個虛擬機有持久性內存而不是網站? 還是有更好的方法來實現這樣的事情?


感謝所有的答案和意見,你已經明確表示,在雲中工作時,一個不能依靠本地內存。 我打算做一些重構並優化「狀態」對象,然後使用緩存服務。

雖然有兩個問題出現在我的腦海中,但一旦你對這些問題有所瞭解,我保證我會閉嘴並接受@ astaykov的偉大答案。

實例級別的併發 - 我在我的應用程序中使用經典的線程鎖來避免併發問題,所以我希望你們提出的那些緩存服務有相同的東西?

此外,我有幾個超時每桌(增加百葉窗,秒數球員必須採取行動......)。假設一個用戶剛剛摺疊一隻手,他完成了與狀態對象的交互,所以我更新了緩存。當那個狀態對象(定時器所屬的對象)被緩存時,我的定時器將停止響應...
我知道我在這裏沒有很好地解釋我自己,但我希望你們看到我的觀點。

+0

恐怕這個問題太廣泛了。如果您查看任何教程,您很快就會知道Azure表不僅可以存儲字符串,還可以存儲對象。但是,我不認爲Azure Tables是最適合您的目的的持久性。您可能想了解有關Redis(可在Azure中獲得)的短期內存持久性。 – trailmax 2014-09-28 21:20:16

+0

在您當前的設計中,內存中的所有內容如果AppPool重置或您執行新的部署,會發生什麼情況?一切都失去了? – Craig 2014-09-28 23:24:55

+0

@Craig是的這一切都失去了:/ – 2014-09-28 23:36:59

回答

3

我建議使用Azure Redis Cache

Here is a nice sample how to build MVC App with Redis Cache in 15 minutes。您可以當然使用Azure Managed Cache。或者以Azure Tables結束。 Azure Tables可以容納更多的字符串。但我相信緩存解決方案的通信延遲較低。

無論哪種方式,您的對象必須是可序列化的。是的 - 對象將被每次訪問序列化/反序列化。你可以手動完成,或者讓框架爲你做。從我讀過的,牛頓軟件。JSON相當不錯,並且優化了JSON串行解串器。

UPDATE

當你問一個虛擬機運行在雲 - 一個虛擬機將遲早重新啓動!應用程序池將循環使用,進行有計劃的維護,發生意外維護,硬盤將失敗,內存模塊將失敗,將發生不可預見的災難。

只有一件事是肯定的 - 如果你希望你的數據在服務器崩潰時能夠存活下來,改變你的想法和設計軟件的方式,並將數據從本地存儲器中取出。或者只是住在應用程序可能會失去狀態的事實。

二更新 - 時鐘

那麼,你必須與你的想象力和經驗發揮。我會質疑你的時鐘無論如何在ASP.NET應用程序的上下文中工作(除非他們都是靜態類型的靜態屬性,這將是一個小小的地獄)。我的方法將會很大程度上將我的應用擴展到客戶端(JavaScript)。有很多很棒的框架 - SignalRAngularJS,KnockoutJS,他們都不會被低估!通過將對象模型擴展到客戶端,您可以在客戶端維護玩家對象的生存期(保持時鐘滴答),並從客戶端向服務器發送所有這些事件的更新。如果你看看SignalR,你可以保持多個客戶端(比如玩家)和服務器之間的實時通信。 SignalR的服務器端與Azure Service Buseven Redis進行了良好的擴展。

+0

非常感謝,我會研究這一點,但正如我在我更新的問題中所說的,所討論的對象是相當大的和更新的非常頻繁...你還認爲序列化/反序列化會起作用嗎? – 2014-09-29 08:54:26

+1

你沒有任何其他的選擇,然後把這個對象從本地內存中取出。這涉及到序列化。現在進行優化 - 如果您覺得需要,您可以優化以獲得更好的性能。 – astaykov 2014-09-29 08:57:52

+0

虛擬機如何?如果我有足夠強大的功能,所以我不需要擴展,在這種情況下,Azure不會重置我的服務器內存嗎? – 2014-09-29 09:04:35