2014-09-28 70 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