ASP.NET Core 是一个用于构建可扩展 Web 应用程序的开源框架。 它提供跨平台功能,在 微服务 建筑学。 并且,随着 .6.0年,只是在性能和开发体验上越来越好。 然而,某些瓶颈仍然存在,阻碍了其真正的潜力。
这些瓶颈之一是数据库读取时间,当您的应用程序必须同时为数十万用户提供服务时,这个瓶颈尤其明显。 ASP.NET Core 会话存储可以通过使用内存数据存储来帮助缓解此类问题。 但是,默认会话存储提供程序有一些限制。 这些是:
- 会话丢失: 如果应用程序服务器出现故障,会话将丢失。
- 内存限制: 因为数据是存放在应用进程的内存空间中的。
- 无会话复制: 如果由于某种原因将流量重新路由到另一台服务器,则不会继续会话。
- 粘性会话: 在网络农场环境中,必须使用粘性会话,这违背了负载平衡的目的。
幸运的是, NCache 在这里解决所有这些问题以及更多问题。 我们将在以下部分中详细介绍。
NCache 更多信息 下载 NCache ASP .NET Core 会话存储策略
为什么首先使用分布式会话存储?
根据定义,HTTP 是一种无状态协议,这意味着信息不会跨多个请求保留。 通常使用第三方机制来传递信息。 一种这样的机制是会话存储。 ASP.NET Core 提供其会话存储,将数据备份到缓存中。 因此,应用程序不会直接访问数据库,而是首先检查它是否将信息存储在缓存中,如果是,应用程序将返回该信息,如果没有,应用程序才会查询数据库。
但是,请记住,会话数据被视为临时数据。 无论会话缓存是否为空,应用程序都应继续运行。 会话数据应仅用于性能优化需求。 ASP.NET Core 提供两种会话缓存选项:
这两个选项都非常快,并且在大多数情况下可以完成工作。 但是,它们的默认实现具有相同的缺点。 它们都提供具有单点故障的独立缓存,并且在服务器出现故障时没有数据复制选项。 对于任务关键型应用程序,大量用户同时请求资源并且不能丢失会话数据,分布式缓存是可行的方法。
为什么 NCache?
NCache 是在 .NET 中原生开发的开源内存分布式缓存,并且 .NET Core。它可以配置为在本地以及某些第三方托管平台上工作。而且, NCache 只需很少的代码更改即可设置为会话存储的后备存储,并且由于其固有的分布式特性,将解决以下问题:
- 内存限制: 缓存本身现在将位于与实际 Web 应用程序不同的进程中,因此不再有内存限制。
- 更好的可靠性:缓存集群甚至可以在完全独立的一组机器上,以实现更好的可靠性。
- 缓存拓扑: NCache 提供 4 种不同的 缓存拓扑. 您可以根据自己的要求选择其中任何一种,无论您优先考虑可扩展性、高可用性还是数据复制(以内存使用为代价)。
- 数据复制: 即使应用服务器发生故障,会话数据也将保持安全。
- 多-区域会话存储: NCache 提供 多区域会话共享 也是。 跨 WAN 无缝复制会话。 因此,如果用户需要重新路由到不同的位置,他们的会话将保持不变。
NCache 提供两种会话存储策略,一种是使用 会话存储提供程序 另一个是 NCache的 IDistributedCache 的实现. 在以下部分中,我们将详细介绍如何 NCache 可以帮助 ASP 的会话存储.NET Core.
NCache 更多信息 ASP .NET Core 会话存储策略 ASP.NET Core 高速缓存
会话存储使用 NCache
配置 NCache 作为会话存储的后备存储非常简单。 我们将看看提供的两种方法 NCache:
方法一:Session Store Provider
对于这种方法,您需要安装 AspNetCore.Session。NCache NuGet 包。 安装此软件包后,请确保包含 Alachisoft.NCache.Web.SessionState
命名空间中的 启动文件 您的应用程序的文件,并添加 NCache 作为服务集合中的一项服务:
1 2 3 4 5 6 7 8 9 10 |
public void ConfigureServices(IServiceCollection services) { services.AddNCacheSession(configuration => { configuration.CacheName = "demoCache"; configuration.EnableLogs = true; configuration.SessionAppId = "demoApp"; configuration.SessionOptions.IdleTimeout = 5; configuration.SessionOptions.CookieName = "AspNetCore.Session"; }); } |
就是这样,你已经成功设置 NCache 作为会话存储提供者。 有关更多详细信息 NCache, 你可以看看 NCache 程序员指南.
方法二:IDistributedCache 实现
如果您已经在使用 IDistributedCache
,您可以采用这种方法。 只需安装 NCache.Microsoft.Extensions.Caching NuGet 包。 在为您的 ASP 配置服务时.NET Core 应用程序只需添加以下代码:
1 2 3 4 5 6 7 8 9 |
public void ConfigureServices(IServiceCollection services) { services.AddNCacheDistributedCache(configuration => { configuration.CacheName = "demoCache"; configuration.EnableLogs = true; configuration.ExceptionsEnabled = true; }); } |
瞧,你现在可以使用 NCache的实施 IDistributedCache
.
多区域会话存储使用 NCache
除了各种缓存拓扑提供的数据复制能力, NCache 还提供独立缓存集群之间的完整会话共享。 这在您在不同区域拥有不同数据中心的情况下非常有用,并且可能由于某些不可避免的情况,您需要将流量从一个区域重新路由到另一个区域。
您可以轻松地在不同区域之间设置会话共享。 来自一个区域的会话将通过 WAN 无缝复制到其他区域。 会话数据从主缓存复制到一个或多个二级缓存。 要使用多区域会话共享,您需要使用 NCache 会话存储提供程序,您的 启动文件 文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public void ConfigureServices(IServiceCollection services) { services.AddNCacheSession(configuration => { configuration.CacheName = "LondonCache"; configuration.EnableLogs = true; configuration.SessionAppId = "demoApp"; configuration.SessionOptions.IdleTimeout = 5; configuration.SessionOptions.CookieName = "AspNetCore.Session"; configuration.EnableLocationAffinity = true; configuration.AffinityMapping = new CacheAffinity[] { new CacheAffinity { CacheName = "LondonCache", CachePrefix = "LDNC" }, new CacheAffinity { CacheName = "NewYorkCache", CachePrefix = "NYKC" }, new CacheAffinity { CacheName = "TokyoCache", CachePrefix = "TKYC" } }; }); } |
注意:要记住的一件事是,必须启用位置关联才能使用多区域会话共享。
缓存名称在 configuration.CacheName
字段将是您的主缓存,而在 configuration.AffinityMapping
将是您的二级缓存。 这 CachePrefix
很重要,因为此前缀附加到会话 ID。 此前缀标识会话数据的存储位置。 因此,如果请求到达缓存并且缓存前缀与当前缓存的前缀不同,则联系实际缓存以获取会话数据(如果数据不存在)。 既然当前缓存具有会话数据,那么所有后续请求现在都将从此缓存在本地提供服务。
NCache 更多信息 ASP .NET Core 会话存储策略 多区域会话共享
结论
在这篇博客中,我们了解了为什么会话存储是 ASP 的一个强大功能.NET Core 以及它如何显着提高应用程序的性能。 我们还研究了如何 NCache 可以在分布式缓存的帮助下极大地改善会话存储,如果您需要更好的可靠性,您可以随时选择 NCache的多区域会话共享功能,提供一流的用户体验。