使用哪种专用缓存配置?

Igo*_*rek 2 azure azure-caching

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

它通常在中型服务器上运行(5-6)...在繁忙时段,它在20台中型服务器上运行.在非常繁忙的时期,每秒向网站发出2000多个请求并非没有道理

共处一地的缓存在这里是否足够好,或者必须缓存在专用工作者角色中?

此外,是否必须为会话数据启用高可用性?该站点依赖于会话数据以获得良好的用户体验.但缓存持久存储在Azure blob存储中,所以我不确定我是否完全获得了高可用性选项

Sim*_*nro 9

使用专用角色取决于您希望运行的角色数量,以及Web角色的内存使用量是否确定它们是否可扩展.例如,如果您的Web角色总是在推动内存使用,并且它是内存而不是作为扩展触发器的CPU - 那么请考虑使用缓存的专用角色,因为您的Web角色可以更长时间地处理负载.如果您的Web角色是cpu密集型的,则可能首选将每个角色的内存专用于缓存.您还需要考虑,如果以专用角色运行,您需要多个角色来处理负载和可用性,因此即使在非繁忙时间,您也将至少有3个角色运行缓存(但可能更少的Web角色) .如果您进行大量部署或缩小规模,您可能还需要使用专用缓存 - 有意且频繁地关闭角色.

共同定位角色缓存的一个考虑因素是,如果您有粘性会话,则延迟会更低,因为该项目位于同一台计算机上.不幸的是,Azure负载均衡器是循环的,并且完全没有粘性,因此会话返回同一台机器的可能性很低(5个角色的时间的1/5).这意味着大多数时候缓存项将从群集中的另一个角色获取,因此共同定位的延迟优势会丢失.

缓存是分布式的并且是内存的 - 没有我知道的blob存储(除了'集群的运行时状态' - 无论是什么.加载到缓存中的项目可以从集成在机器上的其他机器上使用它被存储(在内存中)(从机器B读取到机器A也不会将其存储在机器A上 - 请参阅下面的注释).缓存项目始终只在内存中,并且缓存大小受可用内存的限制.

高可用性选项将项目复制到单独的计算机(而不是存储),因此如果一台计算机出现故障,则某处仍然存在副本.高可用性也将使用更多内存,因为项目在两个不同的地方使用内存.失败的可能性可能低到您的电子商务应用程序 - 如果项目未缓存(无论是失败还是失效),它可能会从持久数据重建.例如,如果您将篮子保留在缓存中而不是持久存储,那么如果角色回收,您不希望丢失 - 在这种情况下,高可用性可能是最佳选择.