Microsoft Azure 中的许多高流量 ASP.NET 应用程序部署在多个 Microsoft Azure 区域上,以处理地理上分离的流量。 在这些情况下,负载均衡器始终将流量发送到离用户最近的 Microsoft Azure 区域,以加快响应时间。
在这种情况下,您可能会遇到必须将一些流量重定向到一个 Microsoft Azure 区域以及从另一个区域重定向到另一个的情况。 这可能是因为您在一个 Microsoft Azure 区域中的流量过多,而另一个区域未得到充分利用。 另一个原因可能是您需要关闭某个区域进行维护。
NCache 更多信息 NCache Cloud 对于 Azure 入门指南
当您重定向流量时,您的用户通常会丢失他们的 ASP.NET 会话,因为您的 ASP.NET 会话状态 在其他 Microsoft Azure 区域不可用。 而这显然不好。 理想情况下,您希望在不对用户造成任何干扰的情况下重定向流量。
In 微软Azure,实现此目的的唯一方法是跨多个 Microsoft Azure 区域保持一个通用的 ASP.NET 会话状态存储。 这允许您在不丢失任何 ASP.NET 会话状态的情况下重定向流量。 但此选项存在严重的性能问题,因为大部分 ASP.NET 会话是通过 WAN 访问的。
NCache 在天蓝色
在 Azure 中, NCache 是用于 .NET 应用程序的极其快速且可扩展的 Microsoft Azure 分布式缓存。 NCache in Azure 为部署在多个 Microsoft Azure 区域中的 ASP.NET 应用程序提供智能多区域 ASP.NET 会话状态支持。
这种配置的好处如下:
- 从任何 Microsoft Azure/AWS 应用程序和网站使用缓存
- 跨多个 Microsoft Azure 应用程序共享缓存,甚至共享到 AWS、Google Compute Engine、Rackspace、您的私有云等其他平台
- 为相同或不同的应用程序跨多个区域共享缓存
NCache 更多信息 NCache Cloud 对于 Azure 入门指南
将 ASP.NET 会话从一个 Microsoft Azure 区域移动到另一个
NCache 在天蓝色 当用户请求从一个 Microsoft Azure 区域重定向到另一个区域时,智能检测然后自动将您的 ASP.NET 会话从一个 Microsoft Azure 区域移动到另一个区域。 所有后续请求都来自这个新的 Microsoft Azure 区域。 这允许您的 ASP.NET 应用程序在 Microsoft Azure 区域之间无缝共享 ASP.NET 会话,而不会对性能产生负面影响或导致会话数据丢失。
NCache for Azure 允许您通过在每个 Microsoft Azure 区域中定义主缓存和辅助缓存来实现多区域 ASP.NET 会话状态功能。 此外,您还指定“sid-prefix”属性,该属性的前缀为所有 会话 ID 在每个 Microsoft Azure 区域中。 这有助于 NCache Azure SSP 模块识别哪些 ASP.NET 会话属于哪个 Microsoft Azure 区域,然后 NCache for Azure 决定在请求重定向到另一个 Microsoft Azure 区域时移动 ASP.NET 会话。
这是要使用的示例配置 NCache 对于您的 ASP.NET 会话状态存储:
1 2 3 4 5 6 7 8 9 10 11 12 |
<assemblies> <add assembly="Alachisoft.NCache.SessionStoreProvider, Version=x.x.x.x, Culture=neutral, PublicKeyToken=CFF5926ED6A53769"> </add></assemblies> <sessionstate cookieless="false" regenerateexpiredsessionid="true" mode="Custom" customprovider="NCacheSessionProvider" timeout="20"></sessionstate> <providers> <add name="NCacheSessionProvider" type="Alachisoft.NCache.Web.SessionState.NSessionStoreProvider" sessionappid="NCacheTest" cachename="London_Cache" writeexceptionstoeventlog="false"> </add> </providers> |
此外,您需要 Azure 多区域 ASP.NET 会话状态支持的位置关联配置。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<configsections> <section name="ncache" type="Alachisoft.NCache.Web.SessionStateManagement.NCacheSection, Alachisoft.NCache.SessionStateManagement, Version=x.x.x.x, Culture=neutral, PublicKeyToken=CFF5926ED6A53769"/> </configsections> <section name="ncache" type="Alachisoft.NCache.Web.SessionStateManagement.NCacheSection, Alachisoft.NCache.SessionStateManagement, Version=x.x.x.x, Culture=neutral, PublicKeyToken=CFF5926ED6A53769"> <ncache> <sessionlocation> <primarycache id="London_Cache" sid-prefix="LDC"> <secondarycache id="NewYork_Cache" sid-prefix="NYC"> <secondarycache id="Tokyo_Cache" sid-prefix="TKC"> </secondarycache></secondarycache></primarycache></sessionlocation> </ncache> |
请注意ncache> 每个 Azure 区域中的部分会有所不同,这意味着每个区域都有自己的“PrimaryCache”,并将所有其他区域缓存定义为“SecondaryCache”。
使用会话 ID 将请求重定向到另一个 Microsoft Azure 区域
源自任何 Microsoft Azure 区域的所有 ASP.NET 会话最初都存储在该区域的主缓存中。 但是,当来自另一个 Microsoft Azure 区域的请求被重定向到当前 Microsoft Azure 区域时, NCache Azure 多区域 SSP 模块智能地检测到 ASP.NET 会话状态 驻留在其他 Microsoft Azure 区域之一(使用附加到 ASP.NET 会话 ID 的“sid-prefix”),它会自动联系远程 Microsoft Azure 区域上的相应二级缓存,并将其移动到当前 Microsoft Azure 区域上的主缓存。 然后从这个新位置提供所有后续请求。
NCache 更多信息 NCache Cloud 对于 Azure 入门指南
例如,您已将 London_Cache 定义为主缓存,而 NewYork_Cache 和 Tokyo_Cache 定义为伦敦站点的辅助缓存。 您还指定“LDC”、“NYC”和“TKC”作为 sid-prefix,它们分别附加到对应于 London_Cache、NewYork_Cache 和 Tokyo_Cache 会话的每个会话 ID。 现在,所有来自伦敦地区的 ASP.NET 会话都将“LDC”作为前缀附加到它们的 ASP.NET 会话 ID 中,并从伦敦地区的主缓存 London_Cache 存储和提供服务。 但是,如果请求从其他 Microsoft Azure 区域(例如纽约或东京)重定向到伦敦区域,则此 ASP.NET 会话状态会立即根据 sid-prefix 标识,并且 ASP.NET 会话状态会从 NewYork_Cache 或 Tokyo_Cache 转移到 London_Cache。 将 ASP.NET 会话状态移动到伦敦区域后,所有后续请求都会在本地从 London_Cache 提供服务。
总结
NCache Azure 多区域 ASP.NET 会话状态支持允许您将 ASP.NET 应用程序部署在两个或多个活动 Microsoft Azure 区域中,并能够在 Microsoft Azure 区域之间重定向流量,而不会影响性能或导致任何应用程序停机。 您可以在 Microsoft Azure 区域之间无缝重定向请求,以处理流量溢出和站点维护。