我正在考虑为我们的某个项目使用AppFabric缓存功能。 我们需要分布式缓存功能,似乎AppFabric是一个很好的解决方案。 但是,我有几个问题希望在这里得到解答。
我们正在考虑在安装了我们的Web应用程序的同一台机器上托管AppFabric Cache服务器。我在MSDN文章中发现AppFabric应该安装在专用机器上。此外还注意到,AppFabric可以与应用程序本身安装在同一台机器上,但应考虑一些问题(引自文章):
Windows Server AppFabric缓存主机应专用于缓存服务,这意味着这些服务器也不会用作应用程序,Web或数据库服务器。可以在群集中使用非专用缓存服务器,但不支持此方案。尽管有此策略,但如果您决定使用非专用缓存主机,请确保正确估计并测试每个缓存主机的配置,以便为缓存服务和计算机上的所有其他服务提供足够的内存和网络资源。还要了解其他服务的处理器和网络利用率的高峰将对缓存集群的性能和稳定性产生负面影响。
以下是本文的链接:Article #1
现在,这听起来很合理,我认为限制RAM AppFabric缓存可以使用的数量就足够了。但是,在MSDN上阅读另一篇文章我发现了这个:
对于物理机和虚拟机,您应该注意缓存群集到使用缓存的应用程序或Web服务器的位置。如果它们位于不同的数据中心,请确保这些数据中心之间的延迟不会对性能产生负面影响。在此阶段,您可能很想将您的应用程序或Web服务器用于缓存服务器。尽管可能,但不支持此功能。首先,这些机器上的IIS等服务的任何资源使用率都会影响缓存集群。 其次,缓存服务假定它位于专用服务器上,并且可能使用比您指定的内存更多的内存。
以下是本文的链接:Article #2
如果我正确理解上述声明,这意味着尽管我的AppFabric的配置设置,它将需要尽可能多的RAM吗?这真的可以吗?有没有人对应用程序和AppFabric位于同一台机器上的配置有一些经验?
答案 0 :(得分:4)
为了在appfabirc上分享我的故事,我们开始在共享服务器上使用appfabric缓存,但由于以下问题最终不得不将其删除...
我们试图在其中保存对象,并且这样做你必须序列化整个图并将其发送到服务器,在高需求场景中,不确定它比db本身的效率更高效。此外,您可以告别对象中的任何代表或事件连线或异步操作..
缓存服务本身会间歇性地抛出错误,说它不可用,然后你将不得不去使用powershell检查它的健康状况。此外,只要您的盒子使用超过90%的RAM,它就会停止工作..
即使盒子上有一点内存压力,它也会积极地尝试从缓存中驱逐项目,并且总是占用大约10-20%的cpu ....
总结一下,我认为MS建议是正确的,它需要拥有自己的专用集群,但是每个应用程序都有自己独特的需求,你应该根据部署环境中的参数进行评估。