Azure 要使用哪个专用缓存配置?

Azure 要使用哪个专用缓存配置?,azure,azure-caching,Azure,Azure Caching,一家大型电子商务网站正在寻求将其会话缓存从共享缓存切换到专用缓存 它通常在中型服务器(5-6)上运行。。。在繁忙时间,它在20台中型服务器上运行。在非常繁忙的时间内,每秒有2000多个对站点的请求不是不合理的 在这里,同一位置的缓存是否足够好,或者缓存必须处于专用工作角色 此外,必须为会话数据启用高可用性吗?该站点依赖于会话数据来提供良好的用户体验。但是缓存被持久化到Azure blob存储,因此我不确定是否完全获得了高可用性选项。专用角色的使用取决于您要运行的角色数量,以及web角色的内存使用

一家大型电子商务网站正在寻求将其会话缓存从共享缓存切换到专用缓存

它通常在中型服务器(5-6)上运行。。。在繁忙时间,它在20台中型服务器上运行。在非常繁忙的时间内,每秒有2000多个对站点的请求不是不合理的

在这里,同一位置的缓存是否足够好,或者缓存必须处于专用工作角色


此外,必须为会话数据启用高可用性吗?该站点依赖于会话数据来提供良好的用户体验。但是缓存被持久化到Azure blob存储,因此我不确定是否完全获得了高可用性选项。专用角色的使用取决于您要运行的角色数量,以及web角色的内存使用情况是否决定了它们是否可以扩展。例如,如果您的Web角色总是推内存使用,它是内存而不是CPU,是扩展的触发器,那么考虑使用专用角色来缓存,因为您的Web角色可以更长时间地处理负载。如果您的web角色是cpu密集型的,则最好将每个角色上的内存专用于缓存。您还需要考虑,如果运行在专用角色中,则需要多个角色来处理负载和可用性,因此即使在非繁忙时间,您也将至少有3个角色运行缓存(但可能较少的Web角色)。如果您进行大量部署或缩小规模,您可能还希望使用专用缓存—在这些部署或缩小规模中,角色会被有意且频繁地关闭

关于同一位置的角色缓存的一个考虑因素是,如果您有粘性会话,则延迟会更低,因为项目位于同一台计算机上。不幸的是,Azure负载平衡器是循环的,根本没有粘性,因此会话返回到同一台机器的可能性很低(5个角色的时间占1/5)。这意味着在大多数情况下,缓存项将从集群中的另一个角色获取,因此失去了共同定位的延迟优势

缓存是分布式的,在内存中-我知道没有blob存储(除了“群集的运行时状态”-不管是什么。加载到缓存中的项目从其存储(内存中)的机器上提供给群集上的其他机器(从机器B到机器a的读取也不会将其存储在机器a上-请参阅下面的注释)。缓存项始终仅在内存中,并且缓存大小受可用内存的限制


“高可用性”选项将项目复制到单独的计算机(而不是存储),因此,如果一台计算机出现故障,则某处仍有一个副本。高可用性还将使用更多内存,因为一个项目在两个不同的位置使用内存。如果某个项目未缓存,则失败的几率对于您的电子商务应用程序来说可能足够低(通过失效或到期)它可以从持久化的数据重建。例如,如果您将篮子放在缓存中,而不是持久化到存储中,您不希望在角色回收时丢失它-在这种情况下,高可用性可能是最佳选择。

Great answer@Simonmuro但是根据我的经验,Azure同址缓存不适合生产rong>。我们的负载测试表明,当服务器被回收时,缓存中的数据需要异常长的时间才能恢复。我们通过从数据库中提取数据对此进行了编码,但是我们的站点由于数据库的压力而停转。这不仅发生在节点被回收时,而且如果您上下移动云服务;甚至在执行VIP交换时


我们使用Azure专用缓存执行了相同的测试,发现它可以处理缓存工作者角色回收的情况,对站点的性能几乎没有影响。我的建议是,如果您希望站点执行,在所有情况下都使用Azure专用缓存。

Nice one Simon.Just添加,关于“我不确定从机器B到机器a的读取是否也将其存储在机器a上”-我认为缓存服务器端实现中没有任何东西可以根据使用情况移动对象。根据实现情况,用户可能希望在客户端启用本地缓存,但对于缓存客户端通常是暂时的web应用程序,这可能没有好处-