得益于纯净、轻量化并且跨平台支持的特性,ASP.NET Core作为热门Web应用开发框架,其高性能传输和负载均衡的支持已广受青睐。实际上,10-20台Web服务器还是轻松驾驭的。有了多服务器负载的支持,使得Web应用层在业务增长时随时采用水平扩展,ASP.NET Core也能够没有什么负担地处理长事务。然而造成性能瓶颈的地方仍然不可忽视,具体来说首当其冲就是数据存储,无法随着应用层的性能提升而提高大规模数据处理能力,这是因为数据层是没有办法简单通过增加服务器得到改善的。

ASP.NET Core应用有两类数据在数据存储成为瓶颈时突显出来:

  1. 数据库

  2. Session会话

解决方案: 分布式缓存


解决这个性能瓶颈,不妨试试NCache,它是一个开源的支持.NET的分布式缓存,它的优势在于完全基于内存,所以你可以在业务增长时组建内存服务器的集群来实现线性扩展,相比于数据库能节省近八成的成本,并且在读写应用数据上得到更快的体验。NCache很适合存储session会话,在多Web服务器负载时也解决了会话保持的需求。

下图是NCache这类常见的分布式缓存的部署架构。

ASP.NET Core应用数据缓存IDistributedCache


在ASP.NET Core之前,旧的ASP.NET程序的缓存对象是独立进程的,也没有多服务器支持的需要。现今ASP.NET Core推出了IDistributedCache统一接口,定义了分布式缓存的基本接口,类似于日志、注入容器的接口一样,可以无缝提供第三方扩展。

IDistributedCache接口使用示例:

IDistributedCache _cache;

...

private byte[] LoadCustomer(string custId) {

string key = "Customers:CustomerID:" + custId;

// is the customer in the cache?

byte[] customer = _cache.Get(key);

if(customer == null) {

// the cache doesn't have it. so load from DB

customer = LoadFromDB(key);

// And, cache it for next time

_cache.Set(key, customer);

}

return customer;

}

NCache是IDistributedCache的一种实现,所以在ASP.NET Cor应用中使用NCache不需要特殊的配置。

以下是IDistributedCache接口的定义(注意每个方法都有对应的Async版本的重载)。

namespace Microsoft.Extensions.Caching.Distributed

{

public interface IDistributedCache

{

// Each of these methods also has an “Async” overload

byte[] Get(string key);

void Refresh(string key);

void Remove(string key);

// Specify absolute & sliding expiration thru options

void Set(string key, byte[] value, DistributedCacheEntryOptions options);

}

}

接下来在ASP.NET Core的Startup类中配置NCacheIDistributedCache

public class Startup

{

...

public void ConfigureServices(IServiceCollection services)

{

...

services.AddNCacheDistributedCache();

...

}

...

}

如果对缓存需求不高, 使用IDistributedCache保留了更改分布式缓存灵活性。但是要权衡这种放弃高级缓存特性的成本。为什么不考虑一下NCache?NCache API在ASP.NET Core应用内可以直接使用,和旧的ASP.NET Cache API非常相似,它包含了大量零成本新特性,可以获得企业级的分布式缓存收益。记住一点,看在性能提升和扩展能力的份上,早用早享受。没有这些高级特性,那只能可怜地缓存一些简单数据。这份NCache caching features了解更多差别。

ASP.NET Core会话存储到分布式缓存


旧的ASP.NET的会话状态由框架提供,允许第三方组件以插件形式接入。在ASP.NET Core中的会话也是相似的,采用链式插件调用,有两种方式使用NCache作为ASP.NET Core的会话存储:

1.NCache作为ASP.NET Core的IDistributedCache Provider存储配置

如果把NCache作为ASP.NET Core的IDistributedCache provider进行配置,NCache能自动的成为会话的默认存储方式,不用再有多余的操作。但是相比于旧的ASP.NET会话状态,这种方式能使用到的特性有限。

以下是ASP.NET Core默认会话缺失的地方:

  1. ASP.NET Core无会话锁提供。

  2. 自定义对象的byte数组支持:  ASP.NET Core强制你在把自定义对象存储到会话前先转换成byte数组。

2. NCache作为ASP.NET Core的Sessions Provider配置

比起前一个方式,NCache已经实现了ASP.NET Core的Sessions Provider。这种方式拥有更多的特性可以利用。

以下是在Startup类进行配置的示例。

public class Startup

{

...

public void Configure(IApplicationBuilder app,  IHostingEnvironment env)

{

...

app.UseNCacheSession();

...

}

...

}

你可以在appsettings.json文件中做如下ASP.NET Core会话配置。

{

...

"NCacheSessions": {

...

"CacheName": "demoCache",

"EnableLogs": "True",

"RequestTimeout": "90",

"EnableDetailLogs": "False",

"ExceptionsEnabled": "True",

"WriteExceptionsToEventLog": "False"

}

...

}


在Configure NCache IDistributedCache Provider了解更多会话存储配置信息。

NCache是比Redis成为ASP.NET Core更好选择的原因


微软提供了IDistributedCache Providers两种可选方案。一个是SQL Server另一个是Redis。NCache比这两种方案更胜一筹表面上看是因为执行更快,更易扩展,当然还有以下原因:

  1. 原生.NET:  NCache是100%原生.NET,更易融入.NET应用技术栈。反观来自Linux背景的Redis和原生.NET毕竟有兼容潜在问题。

  2. 比Redis更快:  NCache确实比Redis要快。NCache客户端缓存的执行能力表现不俗。

  3. 更多特性:  NCache提供了Redis所没有的分布式缓存特性。参见这里:Redis vs NCache。

NCache更多详情:Nache Details  Edition Comparison  Download

(原文:How to Optimize ASP.NET Core Performance with Distributed Cache?)

相关文章:

  • 理解并从头搭建redis集群

  • .net core 使用Redis的发布订阅

  • ABP从入门到精通(3):aspnet-zero-core 使用Redis缓存

  • Redis集群~StackExchange.Redis(10月6号版1.1.608.0)连接Twemproxy支持Auth指令了

原文地址 http://www.cnblogs.com/BeanHsiang/p/8733100.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

用分布式缓存提升ASP.NET Core性能相关推荐

  1. dotnet watch+vs code提升asp.net core开发效率

    在园子中,已经又前辈介绍过dotnet watch的用法,但是是基于asp.net core 1.0的较老版本来讲解的,在asp.net core 2.0的今天,部分用法已经不太一样,所以就再写一篇文 ...

  2. WCF与ASP.NET Core性能比较

    \ 看新闻很累?看技术新闻更累?试试下载InfoQ手机客户端,每天上下班路上听新闻,有趣还有料! \ \\ 微软花了大量的时间和精力来开发ASP.NET Core.结果,这个开放的平台提供了许多首次出 ...

  3. ASP.NET Core 性能优化最佳实践

    本文提供了 ASP.NET Core 的性能最佳实践指南. 译文原文地址:https://docs.microsoft.com/en-us/aspnet/core/performance/perfor ...

  4. 分布式缓存服务DCS:企业版性能更强,稳定性更高

    摘要:企业版性能指标达到业界TOP1,行业领先30%,内核态实现真正多线程. 一.背景介绍 近年来,随着各行业业务需求急速增加,数据量和并发访问量呈指数级增长,原来只能依附于关系型数据库的传统&quo ...

  5. ASP.NET Core 性能对比评测(ASP.NET,Python,Java,NodeJS)

    前言 性能是我们日常生活中经常接触到的一个词语,更好的性能意味着能给我们带来更好的用户体检.比如我们在购买手机.显卡.CPU等的时候,可能会更加的关注于这样指标,所以本篇就来做一个性能评测. 性能也一 ...

  6. 在ASP.NET Core应用程序中使用分布式缓存

    本文要点 ASP.NET Core内置了分布式缓存接口. 分布式缓存的主要好处有性能.数据共享和稳定性. Couchbase服务器是一个内存优先的数据库,非常适合作为分布式缓存. NuGet程序包使得 ...

  7. ASP.NET Core 缓存技术 及 Nginx 缓存配置

    前言 在Asp.Net Core Nginx部署一文中,主要是讲述的如何利用Nginx来实现应用程序的部署,使用Nginx来部署主要有两大好处,第一是利用Nginx的负载均衡功能,第二是使用Nginx ...

  8. ASP.NET Core中的内存缓存

    ASP.NET Core中的内存中缓存 让我们看看如何通过缓存优化ASP.NET Core应用程序性能 我相信,在我们的工作中,每个人都收到来自客户的请求或来自我们应用程序用户的反馈,以提高响应速度. ...

  9. ASP.Net MVC4+Memcached+CodeFirst实现分布式缓存

    ASP.Net MVC4+Memcached+CodeFirst实现分布式缓存 原文:ASP.Net MVC4+Memcached+CodeFirst实现分布式缓存 ASP.Net MVC4+Memc ...

最新文章

  1. [学习笔记]矩形面积并
  2. 插件式设计的架构模型与实例
  3. 3.22 爬虫小记
  4. 《世界是数字的》读后感
  5. 【转载】SQL执行计划
  6. 初等数论--同余方程--二元一次不定方程的通解形式
  7. MakeFile中文手册(免费下载)-徐海兵整理
  8. python tkinter进度条_在python3.7中更新tkinter进度条
  9. doctype html h5,HTML DOCTYPE
  10. 编译libxml2-2.6.26 __open_missing_mode 错误
  11. 基于Fragment的百度地图框架的使用
  12. 排序算法之----快速排序(快速上手快速排序)
  13. 单链表的创建、插入、删除、倒置操作
  14. 新建MVC项目与发布
  15. idea 编译spring_《Spring源码解析(二)》构建 Spring5 源码工程,开启研读Spring源码之路...
  16. Incentive Mechanism Design for Distributed Coded Machine Learning论文笔记
  17. 译:Dataiku 白皮书之《在银行和保险行业应用数据科学》
  18. [编译原理随记]正则表达式转为NFA状态图(Thompsion构造法)
  19. Guava学习笔记:Google Guava 类库简介
  20. PC端如何使用ADB无线连接Android手机

热门文章

  1. .NET Framework 4.8预览
  2. PostgreSQL 统计信息pg_statistic格式及导入导出dump_stat - 兼容Oracle
  3. openssh登陆时提示服务器拒绝了密码
  4. Android数据库Realm实践
  5. exec和sp_executesql
  6. Java编程比C编程好吗?《精通Unix下C语言与项目实践》读书笔记(15)
  7. 基于ASP.NET Core api 的服务器事件发送
  8. Nginx实战部署常用功能演示(超详细版),绝对给力~~~
  9. 近业务=困死在一条船上?
  10. 大厂出品免费图标资源站