使用分布式缓存对ASP.Net Core性能提升?
Posted 程序你好
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用分布式缓存对ASP.Net Core性能提升?相关的知识,希望对你有一定的参考价值。
ASP.NET Core由于其更整洁、更轻的架构和跨平台的支持而开始流行于开发web应用程序。还有很多这样的ASP.NET Core应用程序是高流量的,并且在负载均衡的多服务器部署中运行。事实上,经常看到10-20个服务器集群,而一些比这个数量大得多的服务器也集群是很常见的。
拥有多服务器负载均衡部署使您的应用程序级别非常具有伸缩性,因为随着事务负载的增加,您可以添加更多的服务器。这让你的ASP.NET Core应用程序可以轻松处理非常大的数据负载。但是,这里仍然存在一个性能瓶颈,这会严重影响ASP.NET Core应用程序。
这个ASP.NET Core性能瓶颈是在数据库和数据存储中,这是因为尽管您可以向应用程序层web集群添加更多的服务器,但您不能在数据库层使用相同的策略。
这两种类型的数据存储成为ASP.NET Core的性能瓶颈。
数据库服务器(SQL Server)
ASP.Net Core Sessons
解决方案:分布式缓存
要消除这些数据存储性能瓶颈,最好的方法是使用像NCache这样的分布式缓存。NCache是ASP.NET Core的开源内存分布式缓存。NCache比数据库快得多,因为它完全驻留在内存中。而且,与数据库不同,NCache是线性可伸缩的,因为它允许您构建一个缓存服务器集群,并允许在事务负载增加时向集群中添加更多的服务器。
NCache可以让您缓存应用程序数据,这样您就可以将那些昂贵的数据库访问时间减少80%。这减少了数据库的负载,使其能够更快地执行读和写操作,而使得数据存储不再成为应用系统的性能瓶颈。
NCache也是一个非常快速和可扩展的内存分布式存储用来存储ASP.NET Core Session(会话)。此外,NCache还可以复制ASP.NET Session会话到多个服务器,以防止数据丢失,以防任何缓存服务器崩溃。ASP.NET Core Session会话,这非常重要,因为您不能在运行时丢失任何会话。
下面是一个图表,展示了像NCache这样的分布式缓存如何适合您的应用程序部署。
应用程序数据缓存ASP.NET Core 接口IDistributedCache
在ASP.NET Core,老版本的ASP.NET提供了一个独立的ASP.Net网络缓存,不能满足多服务器环境需求。现在,ASP.NET Core引入了IDistributedCache分布式缓存接口,它是一个相当基本的分布式缓存标准API,可以让您对它进行编程,然后无缝地插入第三方分布式缓存。
下面是如何使用IDistributedCache接口的示例:
NCache也实现了IDistributedCache的缓存接口,您就可以在不用更改任何代码的情况下,很容易的ASP.NET Core应用中使用NCache。
下面是IDistributedCache接口的样子(请注意,每个方法都有一个Async重载)。
配置NCache作为IDistributedCache提供者
下面是如何将NCache配置为ASP.NET Core应用程序中的IDistributedCache提供者。
为什么选择NCache API 代替 IDistributedCache?
如果您的缓存需求是相当基本的,并且您迫切希望能够无缝地更改分布式缓存供应商,那么您应该继续使用IDistributedCacheinterface。它允许您无缝地更改缓存供应商。但是,请您考虑一下,不要使用很多高级的缓存功能。
另一种选择是直接从ASP.NET Core 应用中使用NCache API。NCache API非常类似于遗留的ASP.NET Core。网络缓存API。但是,它包含了许多免费的特性,使您能够充分利用企业级的分布式缓存。
记住,可以缓存的数据越多,应用程序的性能和可伸缩性就越好。而且,如果没有高级的缓存特性,通常只能缓存只读或非常简单的数据。请阅读更多关于使用IDistributedCache提供程序所遗漏的所有不同的NCache缓存特性。
在分布式缓存中存储ASP.NET Core Session(会话)
有两种方法可以使用NCache作为ASP.NET Core会话存储。它们是:
1、使用NCache通过IDistributedCache来存储Session会话
一旦您将NCache配置为IDistributedCache提供程序。 NCache自动成为ASP.NET Core Session的默认存储选项。你不需要做任何其他事情。但是请注意,这个实现(会话状态存储)在特性上与老版本相比是有限的(在ASP.NET Core之前)。
这里是一些默认缺陷:
在ASP.NET Core中没有提供会话锁定,在老版里有这个功能。
用强制您将所有自定义对象转换成字节数组,然后才能存储。而老版会话状态存储支持自定义对象。
2、使用NCache作为Session会话提供者
使用默认的ASP.NET Core Session会话实现通过IDistributedCacheprovider实现,NCache实现了自己的ASP.NET Core提供者。这个实现比默认实现有更多的特性。
下面是如何在StartUp启动类中配置它。
你可以像下面图这样在( appsettings.json)中指定配置
NCache为甚么是一个比Redis更好的选择?
Microsoft提供了两种选项作为IDistributedCache提供者。一个是SQL Server,第二个是Redis。NCache比两个选项都要好。与SQL Server相比,NCache更快、更可伸缩。
而且,NCache也比Redis好,原因如下:
NCache是100%原生的.NET,因此非常适合你的.NET应用程序技术栈。另一方面,Redis来自于一个Linux背景,而不是一个原生的.NET缓存。
比Redis快:NCache实际上比Redis快。NCache客户端缓存特性使NCache具有显著的性能提升。
更多的特性:NCache提供了许多非常重要的分布式缓存特性,而Redis没有。在这个Redis和NCache网站中可以看到更多的细节。
有关NCache的详细信息,请点击以下链接:
http://www.alachisoft.com/ncache/
http://www.alachisoft.com/ncache/edition-comparison.html
http://www.alachisoft.com/download-ncache.html
以上是关于使用分布式缓存对ASP.Net Core性能提升?的主要内容,如果未能解决你的问题,请参考以下文章
《ASP.NET Core 6框架揭秘》实例演示[34]:缓存整个响应内容