五个 ASP.NET 性能提升器

录制的网络研讨会
通过罗恩侯赛因和尼克 Zulfiqar

了解如何使用分布式 .NET 缓存提高 ASP.NET 性能和可扩展性。 观看此网络研讨会,了解提高 ASP.NET 性能以实现 ASP.NET 应用程序可扩展性的五种方法,以及如何使用内存中分布式缓存来有效解决这些问题。

由我们的高级解决方案架构师和区域销售总监共同提供,请加入我们以了解:

  • ASP.NET 应用程序数据缓存
  • ASP.NET 会话状态缓存
  • ASP.NET SignalR Backplane 使用分布式缓存
  • ASP.NET View State 高速缓存
  • ASP.NET 输出缓存

今天我们将讨论 5 种提高 ASP.NET 应用程序性能和可伸缩性的方法。 这是一个非常热门的话题,我想说的是,它的需求量很大。 所以,我们很高兴为您带来这个。 Ron 将在一分钟内讨论这个问题,此外,您在此演示过程中有任何问题,请随时将它们输入到视频中,我将能够引起 Ron 的注意。

那么,罗恩,你是怎么开始的? 谢谢,尼克。 大家好,我的名字是 Ron,我将成为你们今天网络研讨会的演讲者,正如 Nick 建议的那样,我们今天选择的主题是五个 ASP.NET 性能提升器。 因此,我们将介绍五个不同的功能。 最初,我将讨论五个不同的问题,您通常会在 ASP.NET Web 应用程序中看到这些问题,这些问题实际上会减慢您的应用程序的速度、性能下降,然后可扩展性是另一种途径,另一个方面我们将讨论这些瓶颈,然后我将在分布式缓存系统的帮助下讨论不同的解决方案。 如何在您的 ASP.NET 应用程序中解决这些问题? 所以,这就是我们今天安排的内容,我将介绍不同的功能,我将提供示例应用程序,我将向您展示如何设置和开始使用它的所有操作。 因此,这将是一个互动性强、动手能力强的网络研讨会,正如尼克所说,如果有任何问题,请随时加入,我很乐意为您回答所有这些问题。 好吧,假设一切看起来都不错,我将从这个开始。

ASP.NET 在高流量 Web 应用程序中很受欢迎

所以,首先,我将讨论 ASP.NET 平台的总体情况。 ASP.NET 是一个非常流行的 Web 应用程序平台。 我们看到了很多 Web 部署,并且越来越受欢迎。 ASP.NET 平台的好处在于,它基于使用模式,可以很好地扩展,您可以处理数千个并发用户及其相关请求,而无需更改应用程序架构中的任何内容。 你可以创建一个网络农场,你可以创建一个网络花园,它为你提供了很多可扩展性选项,你可以在前面放置一个负载均衡器,然后你可以在不同的 Web 服务器之间路由请求,你可以实现线性可扩展性、水平可扩展性出 ASP.NET Web 场。

负载平衡器可能具有粘性负载平衡或相等负载平衡,具体取决于您的架构,取决于您的 Web 服务器或应用程序服务器的状态性质,然后您可以根据需要进行扩展。

网络农场部署

因此,这是 ASP.NET 应用程序的典型 Web 场部署,您有 N 个客户端通过负载平衡器在 Web 场中设置 Web 服务器,然后您拥有 ASP.NET 会话存储,这是一种数据您可能会在 ASP.NET Web 应用程序中看到。 然后它将是数据库服务器、关系数据库或 NoSQL database您可能正在来回处理大量数据,然后它可能是您的应用程序与之交互的任何其他后端数据系统大型机文件系统。 所以,这是非常流行的,非常可扩展的,非常快的,并且很多活跃的部署都在使用这个平台。

问题:可扩展性瓶颈

所以,让我们谈谈 ASP.NET 中的可伸缩性瓶颈。 问题究竟出在哪里? 它很好地扩展了可伸缩性问题,让我们快速定义什么是可伸缩性? 可扩展性是应用程序架构或部署应用程序的环境中的一种能力。 正是这种能力,您可以在不影响性能的情况下增加每秒请求数或给定请求、并发请求数。 如果您在五个用户下有一定的延迟。 你如何保持这种延迟? 您不会降低性能,也可以不提高性能,但至少您将性能保持在 5000 或 500,000 用户以下,这种能力本身称为可扩展性,您可以从系统中获得最大吞吐量,越来越多的请求负载正在处理,然后您的延迟不会随着用户负载的增长而增长。 因此,它本质上是极端负载下的性能或极端负载下的极端性能。 因此,这种能力称为可扩展性。

现在,典型的 ASP.NET 应用程序虽然 Web 场具有很强的可伸缩性,但它们现在会给您带来 Web 场内的可伸缩性问题,但它们可能会在峰值负载下导致缓慢,这主要是因为后端数据源。 因此,如果您的应用程序速度变慢,它会因为大量负载而阻塞,那么该应用程序是可扩展性的候选者,它需要在其内部具有可扩展的架构。 为什么应用程序会感受到你的世界,或者你会看到这样的情况,即应用程序在峰值负载下速度变慢,可能存在不同的数据存储额定瓶颈或应用程序内的某些瓶颈。 因此,从现在开始,我们将讨论 ASP.NET 应用程序中的五个不同瓶颈,这些瓶颈限制了您的可伸缩性,从而限制了您的横向扩展。

两个数据存储瓶颈

好的。 所以,首先,我们有两个数据存储瓶颈。

数据库无法扩展

我们有通常无法扩展的应用程序数据库,您将拥有 SQL Server、oracle 或任何其他流行的关系数据源形式的关系数据库。 它非常适合存储,但在处理大量事务负载时却不是很好。 它往往会阻塞,在某些情况下,它实际上会给您带来超时错误。 所以,或者至少它实际上会降低你的性能,你不能动态添加更多的数据库服务器,所以它将是单一来源的。 在某些情况下,如果您没有复制,这也是单点故障,然后最重要的是,这里的紧迫问题是它不是很快,在正常情况下它很慢,然后在峰值负载下它实际上会使情况恶化它无法适应增加的负载,并且进一步减慢了速度。 所以,这是我们的第一个瓶颈。

ASP.NET 会话状态存储

第二个瓶颈是围绕 ASP.NET 会话状态存储,现在会话状态是一种非常重要的数据。 它是具有用户信息的东西,例如,您可能有一个电子商务应用程序维护用户信息或购物车,它可能是预订系统,它可能是票务系统,它可能是您的财务系统。 因此,它可以是用户登录的任何类型的前端系统,并且他们在此会话对象中拥有非常重要的数据。

现在,这些是 ASP.NET 平台提供的三种模式,我们有 InProc,所有内容都存储在工作进程中。 因此,一切都位于应用程序进程中,因此您的工作进程不是无状态的,HTTP 协议本身是无状态的,但在这种情况下,您的工作进程将自己托管所有用户数据。 然后我们有第二个选项的 StateServer,然后我们有 SQL Server。 所以,谈谈这些传统的会话状态存储选项,让我们谈谈它们的瓶颈。

首先,InProc 它很快,因为它在内存中,没有序列化反序列化,但不利的一面是,首先,您无法处理网络花园场景。 在一个 Web 服务器上,对于给定的应用程序,您将只有一个工作进程,因为如果下一个请求转到另一个工作进程,您的会话数据现在就存在于那里,您不再拥有该会话数据,它必须是同一个工作进程并且这就是它限制你的原因,从技术上讲,它不可能使用 InProc 会话管理运行网络花园,所以这是这里的一个限制因素。

其次,您需要在负载均衡器上启用粘性会话位。 因此,首先,您限制了 Web 服务器上的性能或可扩展性或资源,并且应用程序只有一个进程。 其次,初始请求得到服务的 Web 服务器,后续请求将始终发送到同一台服务器。 这就是所有粘性会话负载平衡的工作原理,它完成了工作,但主要问题是这可能是一个 Web 服务器有很多用户处于活动状态,但其他 Web 服务器处于空闲状态,因为这些用户已经注销并且由于用户本质上是粘性的,他们永远不会去这个免费的服务器,他们总是会去同一个服务器,在那里他们必须去处理数据。 因此,这是另一个问题,您必须使用 InProc 进行粘性会话负载平衡,最重要的是,如果您的工作进程被回收,并且根据我们的经验,我们已经看到 ASP.NET 工作进程确实得到了很多回收,您将失去所有正确的数据,如果这是一项与维护相关的任务,如果服务器需要关闭,您必须关闭一个 Web 服务器 启动另一个 Web 服务器,您会因此丢失所有数据。 所以,这总结了所有的问题,所有你会看到的使用 ASP.NET 的 InProc 会话管理的瓶颈。 因此,这显然不是一种选择,而且它的可扩展性也不是很好,你有一个服务器,你达到了该服务器的容量,而粘性是负载平衡,它并没有真正的帮助。

第二个选项是 StateServer,它比 InProc 稍微好一点,因为它将数据从状态服务中的应用程序进程中取出,它可以是远程盒子或您的 Web 服务器之一,这完全取决于您,但问题在于它不是可扩展,它是单一来源,您可以在该服务器上扩展,但不能横向扩展。 它总是一个服务器,一个托管所有会话数据的服务,并且还将管理所有请求负载,如果您的请求负载增长,则没有添加更多资源的选项。 因此,与之相比,它不会向外扩展,最终您的状态服务可能会阻塞,例如,如果您有成百上千的用户,并且他们的相关请求使其每秒或每天请求者产生数百万个请求,或者在数百万以内,那么负载非常重. 因此,基于该 StateServer 将无法扩展并且无法应对不断增加的负载,然后它也是单点故障。 如果 StateServer 本身出现故障,您将丢失所有会话数据,并且会话数据是一种非常重要的数据,您不希望在您的用户购买某物或即将做出决定时丢失您的会话,并且它会影响作为回报的业务。

第三个选项是 SQL Server。 SQL Server 又是一个进程外会话管理,但它仍然很慢,它不可扩展,你不能添加更多 SQL Server,它并不意味着单独处理事务数据,所以你最终会遇到我们作为我们的一部分讨论的相同问题应用程序数据库,对于数据缓存和会话缓存,该问题仍然存在。 因此,会话状态不会使用 ASP.NET 平台提供的默认选项进行优化,这主要是因为它提供了 InProc、StateServer 和 SQL Server 的数据源。

我希望这已经围绕瓶颈建立了一些基本细节,当然我们会讨论解决方案,我们正在讨论分布式缓存及其比较的特性,我们将一一讨论如何处理这些问题,所以我想先列出所有问题,然后我们将一一讨论解决方案。 该图说明了相同的情况。

两个数据存储瓶颈

我们有数据存储瓶颈数据库,然后我们有 ASP.NET 会话存储或 InProc 或数据库作为会话管理器,这显然也是一个瓶颈,在大多数情况下,我们只有单一来源,它们不可扩展,不可扩展非常可靠,然后一般来说很慢。

ASP.NET View State 瓶颈

现在第三个重要的瓶颈是 ASP.NET view state. 对于 ASP.NET Web Farms,有一个视图状态,现在你们想知道什么是视图状态? 我很确定每个人都知道,但视图状态是一种客户端状态管理,它是一个数据包,它是您在网络农场中拥有的控件小部件的状态,它在服务器端构建并成为您的一部分响应数据包返回到存储它的浏览器,它从未在浏览器端真正使用过,当您作为分散请求数据包的一部分在该页面上发回时,它会被带回服务器。 因此,它与请求和响应数据包捆绑在一起,返回到浏览器,它从未真正在那里使用过,而视图状态的一个紧迫问题是通常非常沉重。 它的大小有数百千字节,考虑一下场景,您有大量事务负载,我们有数百万个事务,然后每个事务都有一个视图状态数据包捆绑,或者 ASP.NET Web 应用程序的请求响应数据包有查看状态的一部分,如果每个请求有数百千字节的视图状态并且您有数百万个事务,它将消耗大量带宽,并且通常会减慢您的页面响应速度,因为您正在处理来回传输大量数据,而且这些数据的大小也很大。

所以,这是另一个消耗带宽的瓶颈,你的原因会显着增加,然后它会减慢你的页面响应时间,因为视图状态通常很重,你正在处理更重的负载响应请求。 所以,这是另一种瓶颈,它是 ASP.NET 网络农场的一部分。 如果您有 ASP.NET Web Farms 应用程序,就无法摆脱这个问题。 默认情况下,您将不得不处理大量视图状态,此图涵盖了视图状态返回浏览器的位置,它是在服务器端构建的客户端状态管理并返回浏览器并将其带回回到你的帖子后面的服务器上。 现在请求和响应数据包很重,它们占用了大量带宽,沉重的有效负载也会减慢速度。

视图状态瓶颈

额外页面执行瓶颈

现在是第四个瓶颈,这是倒数第二个,在这之后我们还有一个瓶颈是额外的页面执行瓶颈。 现在这适用于 ASP.NET Web 场以及 ASP.NET MVC Web 应用程序。 在某些情况下,整个页面输出相同或动态页面中的部分相同,因此,您非常频繁地处理应用程序中的静态内容。 因此,页面输出不会经常更改,但您仍在执行这些请求。 可能有一个请求,它涉及一些被渲染的后端数据库,然后你从后端数据源获取一些数据,你读取这些数据,使其有意义应用一些日常业务逻辑层,数据访问层所有好东西,然后您呈现响应并将响应发送回浏览器中的最终用户。 现在,无论同一个循环必须再次进行,然后内容没有改变,你将不得不一次又一次地经历相同的循环。 无论是否更改,此页面都会执行,默认情况下,您正在处理大量静态内容,尽管内容没有更改,但您仍在执行相同的请求。 现在这会增加您的基础架构成本、额外的 CPU、额外的内存、额外的数据库资源,它可能会影响 Web 服务器上的容量,也可能会影响数据库站点的容量,一般来说,这会浪费大量昂贵的 CPU 和资源来执行某些操作这已经被执行了。 所以,这是另一个瓶颈,我们将讨论如何借助页面输出缓存来解决这个问题。 所以,这涵盖了我们的第四个瓶颈和第五个瓶颈,顺便说一下,这张图涉及静态输出上的页面执行,并使我们处理大量请求的更多数据库。

页面外执行瓶颈

ASP.NET SignalR Backplane 瓶颈

第五个瓶颈是 SignalR backplane. 现在这是一个非常具体的用例,您可能有也可能没有 SignalR,但对于熟悉 SignalR 并且如果您设置了背板的人来说,背板是公共消息总线,您的 Web 服务器会发送所有的消息而不是在客户端浏览器上发送推送功能。 可能存在很少客户端请求由其他 Web 服务器处理的情况。 因此,我们只是被广播到背板,背板依次广播消息、SignalR 消息到所有 Web 服务器,然后它们又向所有连接的客户端广播。 所以,使用 WebSockets ASP.NET SignalR backplane 如果您有一个网络农场,这是一个非常常见的设置。

现在 SignalR Backplane NCache 或者可以插入任何其他分布式缓存产品。它也可以是数据库,也可以是消息总线,但这里的想法是背板不应该有性能或吞吐量问题。 它应该表现得非常好,它应该给你低延迟,它给你高吞吐量,同时,它应该非常可靠,如果它出现故障并且你丢失所有会影响业务的 SignalR 消息。

数据库很慢,它们的可扩展性不是很好,它们的性能很慢, Redis 是一个选项,它不是本机 .NET,因此,您需要一些非常可扩展、非常快且非常可靠的东西。 因此,如果您使用的是 ASP.NET 应用程序中的另一个问题 SignalR backplane 结果。 所以,这完成了我们的五个瓶颈,我知道它有很多信息,但主要是它的数据库很慢,不是很可扩展,ASP.NET 会话状态默认情况下没有非常可扩展或快速或可靠的选项。 ASP.NET Web 场的视图状态也是一个瓶颈,它的争用源、带宽的过度利用、应用程序内的静态页面都将被执行,无论您的应用程序内容是否发生变化。 它将被执行,然后我们有 SignalR Backplane 这通常很慢并且不是很可靠,它不是很可扩展,并且您需要一些非常可扩展的东西,相比之下非常可靠。

所以,这完成了我们的五个瓶颈,在接下来的几张幻灯片中,我将讨论解决方案,然后我们将实际一一解决所有这些瓶颈,我将展示不同的解决方案。 如有任何问题,请告诉我,我很乐意现在为您回答这些问题。 我在这里排列了一些示例示例应用程序,所以我会使用它们。 所以,我认为在这一点上没有问题。 因此,我将很快开始使用该解决方案,因为我们在下一部分中有很多内容要介绍。

解决方案:内存中分布式缓存

我们有内存分布式缓存作为解决方案,我将使用 NCache 作为示例产品。 NCache 是主要的分布式缓存产品,基于 .NET 的分布式缓存,它是在 .NET 中编写的,主要用于 .NET 应用程序,它是我们的主要产品之一。 我会用 NCache 作为示例产品,我们将讨论其中的五个不同功能 NCache 这将解决这个问题,您会在 ASP.NET 应用程序中看到性能提升器。 它只会显着提高性能和可扩展性,这只是 ASP.NET 特定的功能,还有其他服务器端功能可以调整,还有一个单独的网络研讨会 如何提高 NCache 性能,这将把事情提升到一个全新的水平,这将进一步提高性能,但这个网络研讨会我将讨论五个不同的瓶颈,然后讨论五个不同的解决方案来解决这些瓶颈。

什么是内存中分布式缓存?

那么,什么是内存分布式缓存,以及它如何更快、更具可扩展性以及在某些情况下更可靠? 因此,分布式缓存是由多个廉价缓存服务器组成的集群,这些缓存服务器汇集在一起​​,形成其内存、CPU 以及网络资源的逻辑容量。 所以,如果你有一个服务器团队,并且这些服务器团队加入到一个集群中,它是应用程序的逻辑容量,但它是一组物理服务器或虚拟机,所以在我们后面有多种资源,你有能力即时添加更多服务器。 所以,廉价的缓存服务器,连接在一起,聚集在一起,他们汇集了他们的资源,这就是分布式缓存的基础。

然后我们跨缓存服务器同步缓存更新,它在数据方面非常一致,因为有多个服务器,多个客户端应用程序连接到它,所以在一个缓存服务器上进行的任何更新都必须在其他 Web 缓存服务器上可见以及连接到它的客户端,我使用了可见的术语,这意味着它必须是一致的。 我在这里没有使用复制作为术语,复制是另一个概念。 因此,所有更新都以同步方式或以一致方式应用于所有缓存服务器,因此您对所有客户端应用程序的数据具有相同的视图。

然后它应该针对事务以及内存容量以及其他资源进行扩展。 如果您添加更多服务器,它应该只是增加容量,如果您有两台服务器并且您带来第三台服务器,之前您使用第三台服务器处理 10,000 个请求,它应该将其增加到 15,000 个,另外两台服务器将容量翻倍,它应该每秒处理 20,000 个请求,这就是我们的经验。 当您添加服务器数量时,它实际上会增加容量和整体请求处理能力,我将向您展示一些基准数据来支持它。 这是典型的分布式缓存的部署架构。

内存中分布式缓存

您有一个缓存服务器团队,支持所有 Windows 环境 2008、2012 并且您的所有应用程序都以客户端-服务器模型连接到它,除了我们的关系数据库之外,它们还使用这个快速、可扩展和可靠的资源。 有一天他们会在关系数据库中给出这个存在,您可以将部分或全部数据放入缓存中。 会话状态这成为您的主要存储、视图状态、输出缓存、 SignalR backplane 这将成为您的主要提供者。

NCache 性能基准

让我向您展示一些基准数据,以支持它的可扩展性。 在我们的网站上公布了这些数字。 所以,这些是测试细节,然后如果你看一下性能,读取的增长并不是线性的写入,但这是我们将在今天的网络研讨会中使用的拓扑,读取和写入线性增长,这有读写线性增长以及备份。 因此,这也带有备份支持,这就是为什么写入性能或容量略低于分区没有任何备份的原因,因此这也有备份开销。 因此,这是我们最流行的读写拓扑,当您添加更多服务器时,它实际上也会扩展容量。

动手演示

让我带您进入我们的演示环境,设置分布式缓存,然后一一开始使用这些功能,如果有任何问题,请问各位?

我会用,我已经下载安装了 NCache,本次网络研讨会的范围不在 NCache 配置或设置。 所以,我将在这里跳过一些细节,但只是为了让你知道,我已经 下载 NCache 从我们的网站上获得了一个完整的试用版,然后我将它安装在我的两个缓存服务器盒上,我这边的一台机器将用作客户端。 你可以安装 NCache 也可以在客户端上使用,或者您可以根据需要使用 NuGet 包。

创建缓存

我将只创建一个缓存,我们将其命名为 aspnetcache,因为这是我们今天关注的内容。

创建信息图

我将选择分区副本缓存,所有这些设置都在我们的常规中详细讨论 NCache 架构 网络研讨会。

分区副本

异步复制选项,在这里,我指定了最初将成为我的缓存集群一部分的服务器。

指定服务器

保持 TCP/IP 端口的一切相同。 NCache 是基于 TCP/IP 的通信,服务器-服务器通信和客户端-服务器通过 TCP/IP 管理,然后是每个服务器上的缓存大小,我将保持一切默认保持驱逐默认并选择完成,就是这样。

完

这就是设置缓存是多么容易。 在右侧窗格中,我们有与此缓存相关的所有设置,顺便说一句,您还可以设置命令行以及 powerShell 工具,然后您也可以从命令行或 powershell 管理所有内容。 我将从我计划运行应用程序的位置添加 mybox。 因此,我们更新了客户端配置并且我能够连接到这个缓存,我将启动并测试这个缓存集群,就是这样。 至此,我的服务器站点设置已完成。 小伙伴们,有什么问题请告诉我吗? 好的,所以,这已经开始了。 我将右键单击并选择统计信息。

罗恩,我有一个问题,很快就可以了 NCache 流以支持 JSP 会话的 Java 应用程序 会话缓存还是仅 ASP.NET 应用程序? 好的,这是一个非常好的问题,主要是这个网络研讨会的重点是 ASP.NET,所以,我更关注 ASP.NET 网站,但是回答这个问题是肯定的 NCache 完全支持 Java 应用程序,我们有一个 Java 客户端,然后对于 Java 应用程序,如果你有 Java Web 会话或 JSP 会话,你可以很好地使用 NCache. 因此,我们的提供程序保持不变,这是一个无需更改代码的选项,并且我们有一个示例应用程序,它附带安装 NCache 也是。 所以,你只需要安装 NCache 在 Windows 环境下,或者您也可以使用容器,然后应用程序可以在 Windows 上,也可以在 Linux UNIX 环境下,它完全支持 Java 应用程序。

监控缓存统计

我打开统计只是为了查看一些监控方面,我还打开了一个安装的监控工具 NCache. 我将快速运行一个压力测试工具应用程序以验证我的缓存配置是否正确,接下来我将实际开始使用示例应用程序,一个客户端已连接,您应该在这里看到一些活动,然后我们有计数器显示来自两台服务器的每秒请求值,我们已经填充了一些图表。

客户端连接
计数器

因此,确保一切都正确配置,然后我们可以开始使用我们的示例应用程序。

因此,第一个示例应用程序是,这是五种不同的优化。 我将一一讨论这些,然后向您展示示例应用程序。 首先,您可以使用 NCache 对于数据缓存,我们有针对数据库瓶颈的详细 API。 您可以使用快速的内存中分布式缓存,它更快,因为它在内存中,它更具可扩展性,因为您可以添加更多服务器,然后通过添加更多服务器来增加运行时的容量。 您可以将它用于会话状态,这是一个无代码更改选项,会话在 NCache 因为这些是复制的,所以相比之下,会话也在一个快速且可扩展的存储库中进行管理,并且您不需要粘性会话负载平衡。 在我们实际展示这些示例应用程序后,我将讨论更多好处,但只是让您知道这些是您从中获得的一些好处 NCache 插入后立即 NCache 对于这些。

对于网络农场,你可以使用视图状态,你可以在服务器端存储视图状态,你不需要发送视图状态,它也减少了你的视图状态有效负载大小,然后你可以使用 NCache SignalR Backplane,这是我们的第四个选项,然后你也可以使用 NCache 用于输出缓存以及静态内容,这也适用于 ASP.NET core. 您可以将它用于 ASP 中的会话状态.NET core 您还可以将它用于 ASP 中的响应缓存.NET core 领域广泛应用,提供了卓越的解决方案。

ASP.NET 会话缓存示例

那么,让我们开始使用 ASP.NET 会话状态存储。 这是最简单的,你可以在五分钟内设置好,然后快速测试。 事实上,我将向您展示如何设置它,然后开始使用它。

所以,这是我们的第一个示例应用程序,我所做的是安装了它 NCache 也是,但我稍微修改了它。 对于会话缓存,您需要做的就是添加一个程序集标签,这两个程序集是多余的,这些是对象缓存的另一个用例,但您只需要 Alachisoft.NCache.SessionStoreProvider 程序集。 4.9 版是最新版本,然后您还需要此程序集的文化和公开令牌。 因此,这是对该会话状态程序集的典型引用,在此之后您需要将现有会话状态标记替换为 NCache. 如果您已经有一个会话状态标签,您需要替换它,如果您没有它是 InProc,在这种情况下您可以实际替换它,您可以将其添加为新标签。 这里模式是自定义的,提供者是 NCacheSessionsProvider,超时值是如果一个会话对象在 NCache 闲置超过二十分钟,它会自动过期从缓存中删除。

然后有一些设置,例如要启用的例外。 所以,这可以用作示例标签,您可以从这里复制并粘贴到应用程序中,然后最重要的是缓存名称,您只需指定缓存名称 aspnetcache。 我想我使用了同名的 aspnetcache,它会解析此示例的配置,因为您只指定名称。 因此,它只会从 client.ncconf aspnetcache 读取此缓存的配置,或者此文件也可以作为项目的一部分。 如果您有 NuGet 包,您实际上也可以将此文件作为项目的一部分,仅此而已。 你只需要保存它,让我把它作为一个主页,因为我们在这里使用了两个页面,我将运行它,这将为提供者启动来宾游戏会话,它会连接到 NCache 用于会话数据。

所以,我希望在缓存中创建一个会话对象,然后我将从会话中读回一些数据,并向您展示正在创建的会话对象。 这是一个猜谜游戏应用程序,它允许您猜测 0 到 23 之间的数字,然后它实际上从会话对象中打印出前一个客人。 所以,它猜测数字在 12 和 12 之间。所以,我只猜 23,数字在 13 和 23 之间。所以,它也读取最后一个数字。 让我们猜数字在 XNUMX 到 XNUMX 之间。所以,让我们再猜一次。 我无法猜测,希望我能到达那里,但只是为了让您知道必须在服务器端创建了一个会话对象。

让我在工具的帮助下向您展示这个,它就在那里, NCache test 是一个关键字,我将它附加到此示例应用程序中。 如果我更改它,这是为了区分不同应用程序的会话,可能存在您有两个应用程序并且您将为两个应用程序使用相同缓存的情况。 因此,在这种情况下,您可以将应用程序 ID 附加到会话变量,但通常一个应用程序应将其会话缓存在专用缓存中。 所以,如果你甚至将它指定为一个空字符串,但它已经创建并且这是你的 ASP.NET 会话 ID,这并不重要,这里的会话在这里被复制。 因此,如果此服务器出现故障,您将自动获得会话数据。

的更多好处 NCache 与 InProc 相比,会话状态命中进程外,因此您的 Web 进程要么是完全无状态的。 因此,这是 HTTP 协议的首选,它更具可扩展性,您可以添加更多资源,它更快,因为它在内存中,与 InProc 相比,它非常可靠。 如果服务器出现故障,您不必担心任何事情,最重要的是您不必再使用粘性会话或平衡。 您可以拥有相等的负载平衡,并且请求可以从一个 Web 服务器反弹到另一个 Web 服务器。 您不必担心任何事情,因为 Web 服务器不存储任何内容,实际会话对象存储在 NCache 这是您的应用程序和 StateServer 比较的外部进程存储。 这不是单点故障,如果服务器出现故障或您将其停机进行维护,您无需担心任何事情,它会正常工作而不会出现问题。

其次,它非常可扩展,您可以即时添加更多服务器。 它非常可靠,非常可扩展,相比之下速度更快。 对于数据库来说,它并不慢,它很快并且非常可扩展,并且在某些情况下,在您没有数据库复制的情况下,它在可靠性方面甚至更好。 因此,这涵盖了它以及其中的一个更重要的功能 NCache 是我们的多站点会话支持,这是另一个功能 多区域会话,您将在其中存储来自两个不同区域的会话 NCache 并且您可以拥有完全同步的会话。

ncache-多区域-aspnet-session

如果会话请求从一个服务器反弹到另一个服务器或从一个区域反弹到另一个,它会自动跨区域提供会话并将其带到这里,反之亦然。 因此,如果您需要让一侧朝下,您可以通过保持缓存运行一段时间来将所有流量路由到另一侧。 所以,这是另一个特点。 我们的主要航空公司之一,航空公司客户实际上正在使用此功能来实现他们的位置亲和力。 因此,这涵盖了我们的 ASP.NET 会话状态。 这是一个无代码更改提供程序,如果有任何问题,请告诉我,然后我已经回答了有关 JSP 会话的问题,您可以使用 NCache 也适用于基于 Java 的 Web 会话。 假设没有问题。

ASP.NET View State 缓存样本

接下来,我将谈论视图状态,现在 NCache 还有一个视图状态提供者,它的工作方式基本上是,我们在服务器端保持视图状态。 它又是一个提供者,你需要做的就是设置一个分区组,它是内容设置,它是 ContentOptimization.Configurations.ContentSettings。 部分组的名称是 nContentOptimization,然后它有一些设置,您可以在其中获取缓存名称,例如,我正在使用 mycache,我们设计我们的方式 ASP.NET view state provider 是我们在服务器端保持视图状态的权利。 所以,首先我将在没有缓存的情况下运行,虽然我已经插入了先前的提供程序,但是我已经将视图状态缓存设置为 false,我将运行它,我将向您展示实际的视图状态返回到浏览器。

所以,我会告诉你默认选项,然后我会告诉你 NCache 查看状态,我们将比较差异。 所以,有几个页面网络农场,我将向您展示查看页面源。

网络农场

这是默认的视图状态,值部分,我把它带到这里,让我在这里创建一个临时文档。 现在这是默认视图状态,它是我的响应数据包的一部分,当我推回此页面时,它也将成为我的请求数据包的一部分。 这是一个单独的请求,请注意有多少个字符,它已正确附加到请求和响应标头中,这对于我将发出的所有请求都是相同的。 让我再向您展示几个请求,并让我向您展示这一个的视图页面源。

因此,它几乎与您在屏幕上看到的相似。 现在有了 NCache 我们所做的是在我们的视图状态提供者的帮助下拦截您的视图状态。 我们在服务器端保持视图状态,这个值部分我们为网络农场的给定页面创建一个键和一个值,我们存储在服务器端,现在它存储在服务器端所以,我们发送一个小令牌回到浏览器。 所以,这是一个静态大小的令牌,它被发送回浏览器。 它永远不会真正改变,它总是会被发送到那里,然后被带回来再次使用,当你回帖时,你实际上是打电话给 NCache 并从中获取额外的视图状态 NCache 然后在您的网络农场上使用它来实际查看状态,这就是我们在幕后所做的。

您获得视图状态数据包的好处是因为它是一个令牌,所以它的大小会变得更小。 因此,这对减少请求和响应的有效负载大小具有总体影响。 因此,这提高了您的性能,其次,如果您有数百千字节的视图状态来回传输数千个请求,它将占用您的带宽。 S,这不会发生 NCache, NCache 视图状态是一个静态令牌,我将快速向您展示该令牌。

罗恩,让我直接回答这个问题,真的很快 NCache 是否有任何账单安全功能,例如会话加密和视图状态缓存? 是的,这些是您可以明确设置的功能,这些是通用的 NCache 特征。 所以,所有的视图状态已经是一个加密的字符串,但是如果你想进一步加密,让我看看它是否存在,你可以在缓存本身上启用加密,你需要停止它,设置加密,我们有 DES 提供程序,我们有 AES 供应商,我们有 FIPS 客户端,符合 FIPS 标准,DES AES 供应商。 所以,是的,您可以简单地设置它,来自客户端服务器的所有有效负载都将在此处加密和解密并分别获取。 所以,这是你可以按需设置的东西,你可以让事情顺利进行,通过这个问题,我还想强调一下,因为 NCache 不存储这是之后的视图状态 NCache 已插入 已作为提供者插入并注意区别,就是这么多字符与这么多字符。 所以,这是你的默认设置,这是 NCache 并亲自查看差异,这会减慢速度,在所有性能提高的情况下减少有效负载的大小,频带虚拟化成本会下降。 因此,您会看到架构中的许多改进,最重要的是,您的实际视图状态再也不会真正发送回浏览器。 它将存储在服务器端,通常是安全的。

所以,基于这个问题,谢谢你问这个 NCache 默认情况下,视图状态比默认选项更安全,因为我们将它存储在实际需要它的服务器端。 所以,我希望这会有所帮助。 我将关闭这个,关于视图状态的任何问题,否则我将继续我们的下一个部分。

应用程序数据缓存示例

由于时间限制,让我先向您展示对象缓存。 我想,我应该先介绍一下。 对于数据库瓶颈,任何存储在数据库中的东西都会减慢速度,或者您可以使用分布式缓存,例如 NCache。 这是 NCache API在这里。

缓存连接
Cache cache = NCache.InitializeCache("myCache");
cache.Dispose();
获取数据

Employee employee = (Employee) cache.Get("Employee:1000");
Employee employee = (Employee) cache["Employee:1000"];
bool isPresent = cache.Contains("Employee:1000");
写入数据
cache.Add("Employee:1000", employee);
cache.AddAsync("Employee:1000", employee);

cache.Insert("Employee:1000", employee);
cache.InsertAsync("Employee:1000", employee);
cache["Employee:1000"] = employee;

Employee employee = (Employee) cache.Remove("Employee:1000");
cache.RemoveAsync("Employee:1000");

这就是您连接缓存的方式,这就是您在进行操作的最后处理句柄的方式,所有内容都存储在键值对中,它是字符串键值 .NET 允许的对象,您可以将数据表映射到域对象和然后存储域对象,然后通过存储具有关系的单个对象或集合来处理域对象,SQL 搜索列表继续,但这是基本的创建、读取、更新、删除操作。

我将快速运行一个示例应用程序并演示您将如何实际使用 NCache 用于对象缓存。 您需要这两个摘要参考 Alachisoft.NCache.Web 和 Alachisoft.NCache。运行。 完成此操作后,让我将其作为启动页面并向您展示其背后的代码。 这是一个 ASP.NET 网络场,但如果您有控制器 MVC,您也可以使用相同的方法,然后我在此处和此应用程序中拥有此命名空间,我正在初始化 mycache,您需要指定缓存的名称和你也可以在这里指定服务器,在这里使用 InitParams 右缓存 InitParams,或者你可以指定名称并通过我之前向你展示的 client.ncconf 解析名称。 有一个 addObject,它添加了一个客户,名字是 David Jones,男,联系电话,这是地址,然后我调用 cache.Add。

同样,我通过更改页面来插入它,或者我实际上也可以更改名称,以确保它被更新,然后我调用 cache.Insert 然后我取回对象,得到对象的计数。 我正在删除该对象,我只是在运行负载测试。 100个项目将一次又一次地更新。 所以,让我们运行示例应用程序,这是开始使用它的直观方式,它只会启动应用程序,我将能够为您执行所有这些操作,在我实际执行此操作之前,我还想向您展示缓存的视图状态 NCache.

您可以看到三个页面的视图状态键,这是对象的实际键,然后实际视图状态位于值部分。 假设我们已经让我清除了内容,我现在忘了提及这一点。 所以,我们现在只处理对象缓存数据,实际上让我从管理器中完成,这很方便。 所以,我会添加一个对象,客户添加了我会取回这个对象。 所以,我们有 David Jones,23 岁。我会更新它,然后添加它,现在取回它是 David Jones 2,然后我们有 50 岁,再次获取它,缓存 1 中的项目,我将删除这个对象再次缓存 0 中的项目再次插入它,插入在添加中以及取回对象,然后我可以在缓存中向您展示这个。 因此,此时我正在处理一个对象,关键是附加到它的客户名称中的客户,然后我将开始加载,现在进行测试。 您会在缓存中看到一些活动,有请求进入,并且您有处理数据的客户端请求。

统计

如果我再次运行这个转储缓存键,它只会显示一百个键一起转储。 所以,这些是我添加的键。 所以,这就是开始使用对象缓存是多么简单,任何属于数据库并减慢速度的数据,都会限制你可以带来的可伸缩性 NCache 使用我们的对象缓存。 它可以是任何领域对象、集合、数据集、图像,任何类型的应用程序相关数据都可以使用对象缓存模型进行缓存。 我希望这会有所帮助,让我开始吧,好吧,这涵盖了我们的数据缓存接下来有 SignalR Backplane.

ASP.NET SignalR Backplane 样本

让我们来谈谈 信号R。 同 NCache 我们有强大的 发布/订阅消息 平台。 因此,我们有一个示例应用程序,我还将向您展示 NuGet 包。 NCache 库随安装一起安装,或者您可以使用我们的 NuGet 包。 因此,如果您访问我们的在线 NuGet 存储库并浏览 NCache,您将看到所有 NuGet 包。 Alachisoft.NCache.SDK 用于对象缓存,Linq 用于 linq 查询,我们有会话状态提供程序,然后我们也有开源和社区。

这是我在此应用程序中包含的 NuGet 包。 只需构建它,让我们看看它是否工作正常,因为它应该添加了一个 NuGet 包。 好吧,为了 SignalR Backplane 您需要做的就是确保添加了 SignalR NuGet 包,我的意思是如果尚未安装,则安装它,好吧。 因此,您添加了一个 NuGet 包,之后您需要添加,它根据需要添加了一些 SignalR 程序集和一些帮助程序集,之后如果您转到 web.config,我刚刚在其中添加了一些设置缓存的 myname 是 aspnetcache right 然后是 event 键,这是您喜欢的主题的名称。 因此,您实际上想提供一个主题名称,您希望根据该主题名称传输 SignalR 聊天消息或此特定聊天应用程序的 SignalR 消息,然后您需要做的就是在您指定的地方更改一行代码缓存的名称和事件键和指向词 NCache 并运行示例应用程序。 它会自动使用 NCache 对于 SignalR Backplan, NCache 成为您的后备计划,这就是插入是多么简单 NCache 用于 SignalR 应用程序。

获得其原生 .NET 的好处不同于 Redis 与数据库和消息总线相比,它快速、可扩展、可靠,然后我们有一个功能齐全的完全支持的 pub/sub 模型,它支持这一点。 因此,您也可以直接使用 pub/sub 消息传递,但是 pub/sub 消息传递的一个用例的一种扩展是我们的 SignalR Backplane 它也很容易设置。

所以,这个应用程序已经启动。 这里应该有钥匙,我觉得钥匙很难找到,只是为了给你看聊天 NCache,这是可行的,我将通过签署另一个用户(假设是尼克)将其传输到另一个浏览器。 如果我把它带回来,你可以看到它实际上也将消息广播到了另一个连接的客户端。 所以,这就是多么容易。 让我再问一次,然后检查它是否按预期工作,这样就可以了。 所以,这正在通过 NCache 它很容易设置,这就是你设置和最后一个功能的方式 NCache,第五个助推器是输出缓存。

罗恩,我有一个关于 SignalR 的问题,我们的 SignalR 消息作为可视对象存储在 NCache 或者做 NCache 为此使用通知? NCache 为此使用发布/订阅通知。 因此,我们在后台有一个发布/订阅消息传递平台,在缓存本身中,您只会看到一个对象,或者您甚至不会看到对象,因为它是一个主题。 所以,有一个主题被创建,它是一个逻辑隧道,多个工作流程连接起来,它们实际上是广播的 NCache,该主题的所有 SignalR 消息。 因此,如果您要问,它是一个通知框架,如果您会看到缓存中添加了很多消息,不,您不会,您只会看到一个主题,然后主题内有消息。 在 popper 遭遇中有一些统计数据,您可以可视化以查看主题中有多少消息,但就单个对象而言,您不会看到这些对象,您只会将一个对象视为一个主题。 我希望这会有所帮助。

ASP.NET 输出缓存示例

这里面的最后一个功能,我想我们的时间也很短,我会快速完成这个。 这是我们的输出缓存,您只需要设置输出缓存部分,您需要参考 NCache 输出缓存提供程序 dll。 就在这里,你需要这些参考资料 Ncache.Adapters, web, runtime in cache 然后你只需引用 N 个输出缓存提供者然后你将缓存的名称设置为 aspnetcache,版本应该是最新的。 它的工作方式是它实际上缓存静态页面的输出,您只需运行它,然后它就会缓存静态页面的输出。 如果它是整个页面或页面中的部分是静态的,并且您使用此指令输出缓存装饰您的部分静态页面,请指定持续时间、位置和 VaryByParam。 如果这些参数没有改变,那自动意味着这是相同的输出。

因此,缓存的输出呈现给您的最终用户,您不必执行页面,您不必涉及数据库,减轻工作进程的负载,关闭数据库,节省昂贵的 CPU 和机器资源为您的最终客户提供现成的页面输出。 因此,它总体上提高了您的性能,ASP.NET 将其作为一项功能提供,并且 NCache 将它带到分布式级别,我们在其中存储了非常可扩展、非常快速和非常可靠的页面输出 NCache 无需任何代码更改,这对于 ASP 来说是正确的.NET core 同样,您可以按照您可以使用的方式使用 NCache 在 ASP 内.NET core 网络应用程序也是如此。 我们对此进行了单独的网络研讨会,如果我们有分布式缓存,我们有会话存储,然后我们还有 ASP.NET core 响应缓存以及 EF 核心缓存。

因此,这些是我想强调的一些功能,这完成了我们的五个性能提升器。 我希望你喜欢它,如果有任何其他问题,请告诉我,我认为我们的时间也很短。 所以,如果现在还有其他问题,是时候问这些问题了,所以请告诉我。

总的来说,我还想提一下 NCache 是一个完全弹性的百分百正常运行时间动态缓存集群,没有单点故障。 我们有许多拓扑和功能,如加密、安全、压缩、电子邮件警报、数据库同步、类似 SQL 的搜索、连续查询、发布/订阅模型、关系数据 NCache,这些都作为不同功能的一部分进行了介绍。 因此,如果围绕这些问题有任何具体问题,请随时提出这些问题,否则,我将总结并交给尼克。

非常感谢罗恩,最后一个问题是可以为会话缓存设置一个自定义提供程序 NCache? NCache 已经是自定义提供程序。 NCache 位于自定义提供程序下,默认模式是 InProc、State Server 或 SQL Server,然后来自 ASP.NET 的第四种模式是自定义的。 所以, NCache provider 本身是一个自定义提供者。 如果有任何具体要求,我对这个问题有点困惑,否则请告诉我 NCache 本身是 ASP.NET 的自定义提供程序。

好的,非常感谢 Ron,如果没有更多问题,我要感谢大家今天来加入我们,再次感谢 Ron 对此的宝贵见解,如果您有任何问题,您可以随时通过向我们发送电子邮件与我们联系在 support@alachisoft.com. 您可以通过以下方式联系我们的销售团队 sales@alachisoft.com 销售团队的人员将很乐意与您合作,并确保您的所有问题都得到解答,提供您需要的所有信息,我还建议您可以从我们的网站下载试用版 NCache, 附带 30 天试用期。 我们还有一个中介,它有付费支持选项和免费开源版本,十三年来有很多内容。 感谢大家加入我们,我们下次再见,谢谢。

接下来做什么?

 

联系我们

联系电话
©版权所有 Alachisoft 2002 - 版权所有。 NCache 是 Diyatech Corp. 的注册商标。