使用分布式缓存对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的性能瓶颈。

  1. 数据库服务器(SQL Server)
  2. 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

原文发布于微信公众号 - 程序你好(codinghello)

原文发表时间:2018-05-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏哲学驱动设计

发布 Rafy .NET Standard 版本 Nuget 包

去年年中,Rafy 框架的源码就已经支持了 Net Standard 2.0 版本。其开源代码也已经上传到 Github 中:https://github.co...

16430
来自专栏黑泽君的专栏

教你如何解决Sublime Text 3使用中出现的中文乱码问题

Sublime Text 3 是一个非常不错的源代码及文本编辑器,但是不支持GB2312和GBK编码在很多情况下会非常麻烦。

1.1K30
来自专栏我的博客

开发属于自己的composer

1.新建一个git仓库 备注:可以在github建立,如果要建立私有的composer,可以自己搭建git仓库 2.初始化composer文件 执行compo...

383110
来自专栏腾讯玄武实验室的专栏

深入解析 DLL 劫持漏洞

2010 年 8 月,微软发布安全通报 2269637,同时网上公布了大量受影响软件的名字,DLL 劫持漏洞开始进入大家的视野。

85300
来自专栏C++

python笔记:#003#PyCharm 的初始设置

14820
来自专栏文渊之博

如何升级PowerShell

背景: 开发的PowerShell 脚本需要使用Invoke-RestMethod命令,发现在老的服务器上不支持这一命令,经过查询得知由于PS版本的问题。涉及到...

1.3K110
来自专栏云计算

ASP.NET MVC 6路由技术

在我们跳转到自定义路由之前,我们必须先了解下MVC6基于MVC5的基本变化。 ASP.NET MVC6将所有必要的启动服务,定义和配置的应用程序依赖关系放在一个...

19660
来自专栏开发与安全

linux系统编程之进程(五):终端、作业控制与守护进程

一、终端的概念 在UNIX系统中,用户通过终端登录系统后得到一个Shell进程,这个终端成为Shell进程的控制终端(Controlling Terminal)...

28590
来自专栏AhDung

【手记】为windows2008建个睡眠快捷方式

----------------201607041343更新----------------

11510
来自专栏张善友的专栏

Windows 7 上安装Visual Studio 2015 失败解决方案

安装之前先要看看自己的系统支不支持,具体的可以看:https://www.visualstudio.com/en-us/visual-studio-2015-s...

24780

扫码关注云+社区

领取腾讯云代金券