一家大型电子商务网站正在寻求将其会话缓存从共享缓存切换为专用缓存。
它通常在中型服务器(5-6)上运行...在繁忙的时候,它在20台中型服务器上运行。在非常繁忙的时候,每秒对站点的2000+请求并不是不合理的
共同定位的缓存是否足够好,或者缓存必须是专用的工作者角色?
另外,是否必须为会话数据启用高可用性?该站点依赖于呈现的会话数据来获得良好的用户体验。但是缓存是持久化到Azure blob存储的,所以我不确定我是否完全获得了高可用性选项
发布于 2013-02-13 02:48:33
专用角色的使用取决于您要运行的角色数量,以及web角色的内存使用情况是否决定它们是否可扩展。例如,如果您的web角色总是推动内存使用,并且是内存而不是CPU触发向外扩展,那么请考虑将专用角色用于缓存,因为您的web角色可以处理更长时间的负载。如果您的web角色是cpu密集型角色,则将每个角色上的内存专用于缓存可能更好。您还需要考虑,如果以专用角色运行,则需要多个角色来处理负载和可用性,因此,即使在非繁忙时间,也至少有3个角色在运行缓存(但web角色可能会更少)。如果您进行大量部署或缩减规模,您可能还希望使用专用缓存--在这些情况下,角色会被故意频繁关闭。
关于共同定位的角色缓存的一个考虑因素是,如果你有粘滞的会话,延迟会更低,因为项目在同一台机器上。不幸的是,Azure负载均衡器是循环调度的,并且根本不粘性,因此会话返回到同一台机器的机会很低(5个角色有1/5的时间)。这意味着大部分时间将从集群中的另一个角色获取缓存项,因此会丢失位于同一位置的延迟优势。
缓存是分布式的,并且在内存中--据我所知,没有blob存储(除了“集群的运行时状态”--不管是什么。加载到缓存中的项从存储(在内存中)的计算机上对集群上的其他计算机可用(从计算机B到计算机A的读取不会也将其存储在计算机A上-请参阅下面的注释)。缓存的项始终只在内存中,缓存大小受可用内存的限制。
高可用性选项将项目复制到单独的计算机(而不是存储),因此,如果一台计算机出现故障,仍会在某处存在副本。高可用性还将使用更多的内存,因为一个项目在两个不同的地方使用内存。对于你的电子商务应用程序来说,失败的可能性可能足够低-如果一个项目没有被缓存(无论是由于失败还是过期),它可能会从持久化数据中重建。例如,如果您将篮子保存在缓存中,而不是持久化到存储中,那么您不希望在角色回收时丢失它-在这种情况下,高可用性可能是最佳选择。
发布于 2013-04-26 19:59:40
很好的答案@SimonMunro,然而,根据我的经验,Azure协同定位缓存并不适合生产。我们的负载测试表明,当服务器被回收时,缓存需要很长一段时间才能恢复。我们通过从我们的数据库中获取数据来进行编码,但是由于数据库的压力,我们的网站陷入了停顿。这不仅在回收节点时发生;在您上下扩展云服务时也会发生;甚至在执行VIP交换时也会发生。
我们已经使用Azure专用缓存执行了相同的测试,并发现它可以处理缓存工作者角色回收的情况,对站点的性能几乎没有影响。如果你想让你的站点正常运行,我的建议是在所有情况下都使用专用缓存。
https://stackoverflow.com/questions/14837213
复制相似问题