缩放 ASP.NET SignalR 具有分布式缓存的应用程序

录制的网络研讨会
Kal Ali 和 Nick Zulfiqar

ASP.NET SignalR 是一个面向 Web 开发人员的开源库,如今非常普遍地用于向应用程序添加实时 Web 功能。 您可以使用 ASP.NET SignalR 一旦信息可用,就将内容从服务器端推送到所有连接的客户端。

SignalR 有助于简化向应用程序添加实时 Web 功能所需的开发工作。 可以使用 SignalR 的一些常见应用程序是聊天系统, 物联网(IOT)、游戏应用程序、航空公司预订系统、证券交易所应用程序等等。

SignalR 的问题在于默认情况下它不可扩展。 而且,为了创建网络场,Microsoft 提供了使用 SignalR backplane 通常可以将其定义为中央消息存储,并且所有 Web 服务器都同时连接到该中央消息存储。 SignalR 消息通过背板广播到所有连接的终端客户端。

通常情况下, SignalR backplane 是一种关系数据库,速度慢且不可扩展,无法处理极端消息负载,这是高流量实时 Web 应用程序的核心要求。 SignalR backplane 还需要非常可靠和高度可用,以便您在应用程序端拥有百分百的正常运行时间。

在此网络研讨会中,您将了解如何 NCache SignalR backplane 与传统的实时部署和扩展选项相比,这是一个更好的选择 ASP.NET SignalR 带背板的 Web 应用程序。 我们演示如何 NCache 可以用作您的 SignalR backplane 无需任何主要编码。

我们的高级解决方案架构师涵盖:

  • 简介 ASP.NET SignalR 及其常见用例
  • 扩展 SignalR 应用程序和传统背板选项的问题
  • 为什么 NCache 相比之下,背板是更好的选择
  • 运用 NCache 作为 ASP.NET 应用程序的背板
  • NCache Nuget 包 SignalR backplane
  • 使用创建、部署和运行 SignalR 应用程序 NCache 背板

因此,今天我们将讨论 SignalR 作为一种技术,在您的应用程序中如何以及在何处使用它,以及在这种情况下引入背板时会出现哪些问题,以及如何使用是您拥有的可能选项以及您如何基本上解决这些问题? 所以,我将涵盖所有这些不同的东西,作为一个示例产品,我将使用 NCache. 所以,我们稍后会谈到那部分,最初我们只会在那里介绍一些基本理论。

SignalR 简介

那么,让我们开始真正介绍 SignalR。 因此,这些是我从 Microsoft 文档中复制的一些定义。 所以, 什么是 SignalR? SignalR 基本上是一个开源库,开发人员可以使用它在 ASP.NET 应用程序中引入实时 Web 功能。 所以,让我举一个例子来解释,我在这里的意思和具体含义。 例如,您有一个正在访问网页的用户,他或她有一些数据,这些数据存在于页面上,但如果该数据需要是最新的,或者如果用户想要在正常情况下获取更新的数据,用户要么必须刷新页面,基本上用户必须发送一个请求,然后作为响应接收到更新的数据,要么这个要么有一些需要在后面实现的长期持有。 但是,如果您有 SignalR,则不需要这样做,稍后我将详细介绍这些细节,这是 SignalR 是非常好的候选者的非常好的用例之一。

因此,其次,SignalR 使您能够将多个代码推送内容直接发送到客户端。 因此,基本上客户端必须发送请求以获取更新数据的部分是,它不再需要存在。 所以,基本上,你是客户端,一旦服务器中有一些新数据,所有实际连接到 Web 服务器的客户端都会得到更新。 因此,服务器不必等待客户端实际请求新数据。 数据将在客户端自动更新。 因此,SignalR 的最佳之处在于,它向您展示了功能。 因此,您只需要在应用程序中引入 SignalR 资源,并且需要调用一些特定的函数,其他一切都由 SignalR 处理。 因此,您的应用程序将使用 SignalR 从客户端发送消息到服务以及从服务器到客户端,无论您的场景是什么,以及其他所有内容,我指的是传输层。 SignalR 逻辑处理消息如何传输以及如何通知其他所有内容。 因此,您无需在应用程序中执行此操作,只需在应用程序中引入这些 API,其他一切都由 SignalR 自动处理。 所以,在这张图中,如果你能看到就在这里。

我只是给你一个例子。 所以,在 SignalR 中有一个集线器的概念。 所以,在这张图中,我们可以看到服务器,这是一个 Web 服务器,这是一个连接的客户端。 它可以是 HTML 或 JavaScript 客户端。 因此,该服务器能够在此处在客户端调用此函数 myClientFunc(),反之亦然。 如果你看这张图。

客户端能够调用这个特定的函数 我的服务器函数() 在服务器端。 所以,基本上我们都知道 HTTP 是一个无状态协议。 有一个请求,然后有一个响应,没有别的了,剩下的一切都被删除了,但是使用 SignalR 发生的事情是 SignalR 在下面使用 WebSocket 来维护连接。 因此,这些是针对较新的技术,但在较旧的技术中,它们使用基本技术中的普通技术,但它使用 WebSockets 的概念,它能够从服务器调用函数到客户端,然后从客户端到服务器端取决于它是如何完成的。

所以,让我解释一下 SignalR 的一些一般用例。 所以,第一个是聊天系统。 这也是微软自己共享的一个示例项目,在我的演示中,我将使用微软提供的聊天系统,我将拥有 NCache 与它集成,但让我们回到这里的示例。 因此,在这里您需要需要发送的实时消息,例如,如果您有一个群组,该群组中有多个成员,并且如果任何成员发送消息,则该消息通知需要由组的所有成员,并且需要立即完成。 任何形式的延迟都是无法承受的,游戏行业也是如此。 因此,例如,您有在线多人游戏,需要进行大量思考,因为在同一会话结束时有很多玩家一起玩,并且游戏的细节需要与所有人同步.

第三个用例是例如航空公司预订系统。 因此,如果已预订机票或特定座位,则需要通知当前正在查看该特定数据的所有其他人或所有其他用户,该特定机票或该特定座位已被预订并且无法预订不再。

股票的类似例子,因为如果它们不断变化,价值就会上升和下降。 因此,它们需要在客户端快速更新,这是一个非常好的要求。

另一个是第二屏内容,可以是广告或任何其他需要显示的通知,最后是设备互联网、物联网。 所以,基本上,这些设备不断地收集一些数据,他们正在分析它,他们正在抛出一些通知。 因此,所有这些东西都需要某种可靠性,并且迫切需要将这些东西接收到接收器上。 因此,所有这些用例都是可以使用 SignalR 的非常好的场景,而且一般来说,如果今天谈论它,它实际上正在被使用。

所以,如果我可以转到下一张幻灯片。 伙计们,如果你有任何问题,你可以随时加入,如果有问题,尼克会告诉我,我很乐意回答你。

扩展 SignalR 应用程序

所以,让我们谈谈扩展 SignalR 应用程序。 因此,如果您在此处查看此示例。

这个例子基本上表明,你有一个网络农场,也可以是一个网络花园,但我给它的例子是网络农场。 因此,您在这里有一个网络农场,在这里您有许多网络服务器,您在这两者之间有一个负载平衡,涉及所有请求,这些请求将进入您网络农场中存在的所有网络服务器,然后你有所有这些不同的客户。 这些客户端将连接到网络场中的任何网络服务器。

所以,如果你在这里举这个例子,客户端 A 连接到这个 Web 服务器,客户端 B 连接到这个 Web 服务器,客户端 C 连接到这个 Web 服务器。 所以,这里的问题是,例如,如果这个 Web 服务器需要发送消息,它需要发送任何类型的消息或通知。 它只能将该通知发送到其特定连接的客户端,在这种情况下,如果此客户端 A 正在发送一条消息,它只会被连接到此 Web 服务器的客户端接收,在这种情况下它只是一个。

那么,如果有一个群聊,并且在至少三个客户端之间进行,并且它们将连接到三个不同的 Web 服务器,该怎么办。 因此,如果其中一个客户端发送消息,其他客户端现在将能够在此特定场景中接收此消息,因为只有连接到特定 Web 服务器的客户端才能接收该通知。 因此,在这种情况下,仅限于连接到 Web 服务器的客户端能够接收此通知,为了摆脱这种情况,SignalR 引入了一个名称为的术语 SignalR Backplane.

SignalR Backplane

让我解释一下这到底是什么。 因此,如果您采用相同的示例,但在不同的场景中略有不同,您在这里有一个 Web 场,并且中间有一个负载均衡器,让我们假设所有客户端的请求都通过该负载均衡器进入,并且来到他们各自的网络服务。

SignalR Backplane 途径
SignalR Backplane 途径

因此,在这种情况下,这里有一个共享总线,有一个共享存储库,它连接到此处表单中存在的所有 Web 服务器。 因此,如果您假设您有十个 Web 服务器,并且所有这些服务器实际上都将在这里连接到该背板,这是用于发送或基本上广播消息或任何通知的常用位置到所有连接的 Web 服务器。

因此,在这种情况下,如果此 Web 服务器正在生成通知或消息,它不会直接发送到连接的客户端。 它实际上会首先将其发送到背板,一旦背板收到此通知或消息,它就会将其发送到所有连接的 Web 服务器,然后 Web 服务器会将它们发送到连接的客户端,并在此这样,它确保消息或通知不仅限于该特定 Web 服务器的连接客户端。 例如,所有连接到该特定网络场的客户端都会收到它。 所以,让我们一步一步来。

因此,例如,有一个通知,该 Web 服务器必须发送。 因此,它要做的第一件事就是在此处通知背板,而背板将在此处执行的操作是将其广播到此处的所有连接的 Web 服务器。 因此,第一条消息由背板接收,然后背板将其发送到服务器 XNUMX,然后发送到服务器 XNUMX,然后在这些特定的 Web 服务器中,这两个服务器将该消息发送到所有连接的客户端到他们的场景中。

因此,在这种情况下,与这里的场景不同,例如,如果像我之前提到的那样正在进行群聊,所有这些客户都不会获得一致的体验或视图,但在这种情况下,如果有一个群聊天继续进行,所有客户端都会有一致的视图,他们会立即收到任何更新或任何新消息的通知。所以,这是在场景中引入背板的主要好处,但现在,我们要开始了看看背板方案有哪些限制,我们可能有哪些可能的选择?

瓶颈与 SignalR Backplane

好的。 所以,我提到了瓶颈 SignalR Backplane. 因此,这些是在 SignalR Backplane 这些也是,任何可能的候选人都可以被标记为被用作 SignalR Backplane 在 SignalR 场景中。

延迟和吞吐量

因此,第一个是延迟和吞吐量。 SignalR Backplane 需要非常低的延迟和高吞吐量,让我解释一下,低延迟是什么意思? 延迟基本上是指时间 SignalR Backplane 或者 Backplane 在收到消息后处理消息,在这种情况下处理该消息然后将其广播或发送到所有连接的 Web 服务所需的时间,即延迟。

所以,它基本上需要非常小,这意味着它一旦收到消息,就需要快速将其发送到网络场中所有连接的网络服务器。 例如,吞吐量是消息的总数,它可以在某个时间范围内完成,它可以是一秒、十秒甚至一百秒,具体取决于此处存在的测量尺度。

通常在本地部署环境应用程序中,这些数据库就像在它们的背板中一样,但数据库几乎没有限制。 数据库通常很慢,它们无法横向扩展,并且通常在高事务负载下阻塞。 因此,它们很慢,然后无法扩展,因为它是单个服务器,然后有一个备份,例如,如果这是一个场景,但它是单个服务器,并且有一定的限制,它只能处理这个数字之后收到的请求,它将开始被这些事务通知所淹没,并且实际上会开始影响您的应用程序。 因此,您基本上可以在您的环境中扩展 Web 服务器的数量,以处理不断增加的 Web 表单负载,但是当这些应用程序必须与数据库取得联系时。 例如,在银行的瓶颈所在的地方,你的所有应用程序都会在性能部分受到影响。

保证消息传递

接下来是保证您的消息的传递。 SignalR Backplane 必须是可靠的,它应该确保有保证的消息传递。 不应该出现这样的情况,即消息没有被完全传递,或者由于任何情况都没有正确接收。 因此,它需要保证消息的传递。

另一个是我前面提到的数据库,数据库在极端负载下可能会阻塞,并且它也存在单点故障。 因此,如果该特定服务器基本上在您的整个环境中出现故障,则不应该出现这种情况,那么应该有某种有效的备份,可以在紧急情况下从该特定情况中快速恢复的任何情况下。

背板的高可用性

第三个是它需要具有高可用性。 因此,由于任何情况,SignalR 都需要高度可用,如果出现任何类型的问题,整个系统现在应该停机。 应该有某种备份可以帮助继续操作,如果出现情况,它不应该很快受到影响。 应该有某种备份,并且应该能够维护一切或保持环境正常运行,直到一切都可以恢复正常,这可能是在计划的情况下,其中有某种计划或计划外的维护情况,任何事情都可能发生出错。

所以,如果我们在这里看这张图。

数据库中的可扩展性瓶颈
数据库中的可扩展性瓶颈

我们可以使用数据库查看可扩展性瓶颈,这正是我现在在这里向你们解释的内容,您拥有所有连接的客户端,并且他们的请求通过负载均衡器重新路由,这就是您的网络农场. 正如我之前提到的,你可以扩展这个网络农场,你可以增加网络服务器的数量,这实际上会增加请求的总数,你的环境基本上可以在一个时间点接受,但实际问题取决于,当这些 Web 服务器必须与后端与后端的数据库联系时,它可能适用于任何场景,但不仅适用于 SignalR,也可能适用于任何其他场景。

内存中分布式缓存作为 SignalR Backplane

所以,我将介绍解决方案。 对此的解决方案是使用内存中的分布式缓存作为 SignalR Backplane 我将如前所述,我将使用 NCache 作为一个样品产品和 NCache 是一个开源产品。 我们有不同的版本,如果需要,您可以对它们进行评估。

缓存服务器集群

那么,让我解释一下内存中分布式缓存是什么? 因此,基本上内存中的分布式缓存是缓存廉价缓存服务器的集群。 所以,你有不同的缓存服务器托管相同的缓存,它在逻辑上是一个单元,但在下面有多个服务器,它们托管这个缓存,一旦它们在一起,就需要多个服务器。 他们不仅将总计算能力资源整合在一起,而且还整合了内存资源。 因此,由于您拥有服务器数量,因此您基本上可以扩展在特定设定时间内可以完成的事务数量以及可以存储的数据总数。

现在,我一般解释 什么是内存分布式缓存? 我不是在谈论 SignalR,但我会​​将所有这些功能与最初讨论的瓶颈进行映射。 所以,最初我只是在解释,这可能是分布式缓存,可以用于对象缓存场景或会话缓存场景,它现在适用于所有这些,但我也会将这些功能映射到那里。

跨服务器同步缓存

因此,这里有多个多台服务器将它们的内存资源和计算能力资源集中在一起,接下来就是缓存在服务之间同步。 所以,参考 NCache 例如,即使您有四个缓存服务器托管相同的缓存,并且有一些新数据被添加到缓存中,它的作用也是如此。 有一个分布图,一旦数据被添加或更新,甚至被删除,它就会被更新。

因此,在任何时间点,即使其中一台服务器,其中一台缓存服务器添加了一个新项目,集群中的所有其他服务器也会自动立即收到通知,现在有一个新项目添加到缓存中. 因此,它确保了整个环境彼此保持同步,并且有不同的拓扑将数据保存在缓存中,这是一个单独的讨论,但一般来说,一旦添加了项目,集群中的所有服务器都会得到通知正在添加的新项目。 因此,这样可以确保它对同一服装中的所有服务器立即可见。

线性可伸缩性

第三个是线性可扩展的,正如我之前向您提到的,这些是多个服务器,它们被拉在一起,您可以根据需要在此处添加任意数量的服务器,并且缓存会自动调整。 它基本上增加了它可以处理的总请求,它还增加了可以添加到同一缓存中的成员数据的总数。 所以,它都是线性可扩展的。 因此,当您扩展应用程序层时,您还可以扩展缓存层,这是数据库的瓶颈之一。 您永远无法扩展您的数据库环境,但有了它,您绝对可以扩展您的缓存服务器、整个缓存,这样您就可以真正提高应用程序的性能。

可靠性数据复制

第四是可靠性的数据复制。 因此,正如我之前向您提到的,这些是多个数字,多个服务器,它们被拉在一起。 因此,根据拓扑,在其他服务器上维护着复制。 因此,即使其中一台服务器出现故障,该丢失服务器的数据也会复制到其他任何一台服务器上,并且会自动启动恢复过程,然后它会调出该数据并将其放回缓存的活动分区。 例如,如果我们正在讨论副本的分区,作为拓扑 NCache. 因此,它会自动带来该数据并将其添加到同一个缓存中。 因此,即使其中一台服务器已消失,数据也不会丢失,并且如果有任何客户端连接到该服务器,该服务器已丢失,它们会自动检测到这一点,并且它们会将其连接故障转移到集群中存在的剩余服务,这是另一个关键的事情之一,它不是单点故障。 因此,如果您有多个服务器,只要您在集群中保留一个缓存服务器,您的缓存就会正常工作,您将响应传入的请求,因此,即使其中一台服务器出现故障,整个缓存不会关闭。 您的环境不会下降,您的应用程序继续正常工作。 所以,现在我将绘制所有这些我刚刚讨论过的事情或之前讨论过的瓶颈 SignalR Backplane.

所以,如果你去这里,第一个是延迟和吞吐量。 因此,正如我之前提到的,延迟是处理时间的数量。 因此,如果您有很多服务器生成大量消息,那么这些请求将直接进入背板,在这种情况下,背板是 Ncache. 因此,如果您觉得您的环境变得阻塞,您可以添加服务器数量,这实际上会增加处理该数量请求的总容量。

我可以在这里问一个问题吗? 设置有多复杂 NCache as SignalR Backplane? 这很简单,我们对文档有非常详细和解释性的解释,它可以帮助您完成它,我将准确地完成它和动手演示部分,我将在那里提到这个问题。

因此,回到通常观察到的瓶颈 SignalR Backplane 和映射 NCache 上一个通用的残疾缓存功能就可以了。 所以,正如我之前提到的,你的延迟非常低,因为你有多个服务器,它们实际上可以处理传入的请求。所以,这会自动减少延迟,显然你也会增加吞吐量延迟低,吞吐量会自动下降,总体性能会下降。

第二个是保证消息的传递。 所以,在 NCache 客户端到服务器的算法和逻辑,有很多检查被维护。 因此,例如,如果客户端尝试连接到集群缓存,并且由于某种原因无法传递该消息,则会实施内部重试。 所以,客户端 NCache 客户端自动尝试重新连接到缓存服务器,这都是可配置的,因为您可以配置重试次数,您可以配置,它应该重试所有这些多长时间? 因此,基本上您可以确保您的客户端能够在这种情况下连接到您的特定缓存集群,即使在连接已经保持并且发现它被破坏时也是如此。 同样,在该特定场景中,它将确保消息实际被传递。

第三个是背板的高可用性,这是我最初提到的关键之一,您有多个托管缓存的服务器。 因此,如果其中一台服务器出现故障,并不意味着整个缓存都出现故障。 您的其他服务器将能够处理即将到来的负载。它们将使客户端故障转移到集群中存在的其余服务器的连接。 因此,通过这种方式,它确保了高可用性,它确保了消息被实际传递,最后,它确保了在你添加数量时性能会大大提高,因为你在应用程序层上横向扩展。 您还可以在缓存层上横向扩展。

卡尔另一个问题,每次使用能得到多少性能提升 NCache as SignalR Backplane,与数据库相比还是有任何基准? 好吧,具体到 SignalR,我可能需要查看这些基准,但总的来说,就基准而言,就正在完成的交易数量而言,我绝对可以稍后显示这些,有一个截图。 所以,我可以证明这一点。

在那里。 因此,这些是可扩展性数字,它们也特定于拓扑,但这些通常是一次。 因此,由于您有许多服务器,实际上您增加了可以完成的事务总数和事务并分解为每秒读取和写入。 因此,这些绝对可以与数据库进行比较,因为它不可扩展。 因此,与数据库相比,它们将成为缓存实际出现的时间。

好的。 所以,来到这里。 这是一个典型的部署 Ncache.

因此,我们建议有一个单独的缓存层,正如您在此看到的那样,但您也可以在与您的应用程序相同的服务器上拥有缓存。 所以,这也是受支持的,但我们建议有一个单独的缓存层,我将参考它进行推荐讨论,所以,这是您的应用程序层,您拥有所有应用程序服务器,这是您的缓存层. 同样,它是线性可扩展的,您可以根据需要在此处添加任意数量的服务器,然后就像我之前提到的所有这些服务器,它们不需要任何特定的硬件。 它们不需要任何高科技,或者它们是廉价的服务器,并且具有 NCache 唯一的预录 NCache 是 .NET 4.0,否则 NCache 所有 Windows 环境都支持。 推荐的操作系统是 Windows Server 2008、12 和 16,其中有 .NET 4.0,您绝对可以使用它 NCache.

有两种不同的安装类型。 有 NCache 缓存服务器安装,它实际上可以托管一个缓存,然后有一个 remote client 安装。 Remote client 可以有一个本地或基本上独立的缓存,它们可以,它们有库和资源供客户端连接到远程集群缓存,正如我之前提到的,集群缓存就是其中一个,它托管在缓存服务器安装上. 所以,这是一个典型的部署,你所有的应用程序都连接到数据库到缓存层,缓存层也连接到后面的数据库。 我们有功能,它也受支持并且可以使用。 所以, NCache 例如,它不仅可以用作 SignalR 的背板,还可以用于数据缓存、会话缓存,我们还有其他网络研讨会和文档,如果您对此感兴趣,可以帮助您进行配置。

好的。 所以,现在这张图基本上显示了 NCache, 它被部署为 SignalR Backplane.

因此,它与我们最初看到的同一个非常相似。 所以,这是你的网络农场,你让我们假设这里有一个负载均衡器。 所以,所有客户端请求都被重新路由,所以这里不是平面背板, NCache 在这里用作背板,并且您在这里有许多服务器,正如我之前在本例中提到的那样,它们是线性可扩展的。 我们这里有三台 Web 服务器和三台缓存服务器。 因此,在这种情况下,此 Web 服务器就在此处生成通知或消息,并将此通知发送到背板,在这种情况下,背板是 NCache。 什么 NCache 会做? 它基本上会依次发布这个消息,将这个通知广播给这个消息的所有订阅者。 因此,一旦收到此消息 NCache,然后将其广播到所有连接的 Web 服务器。 在这种情况下,然后将其发送到所有连接的客户端。 因此,通过这种方式,它确保了所有连接的客户在处理他们的应用程序时都有一致的查看器和经验丰富的 NCache 在这种情况下作为背板插入。 这些是我已经谈到的数字。 因此,由于您基本上拥有许多服务器,您可以看到读取次数和正在执行的写入次数呈线性增长。 因此,它是线性可扩展的,不会停止,因此您可以在您的环境中根据需要在此处添加任意数量的服务器。

动手演示

所以,我将进入实际动手演示部分,在这里,我将演示如何创建缓存? 我将快速浏览它,因为这不是议程的一部分,但我们确实有其他网络研讨会,我们正在讨论每一个细节,我们正在讨论最佳实践和其他一般性建议,当你创建缓存或配置和设置与缓存创建过程相关的不同设置。

Install 安装 NCache 并创建集群缓存

因此,您需要做的第一件事是,您需要安装、完成并下载一份 NCache 从我们的网站,然后您需要在您的环境中安装它。 我有两台机器,它们有 NCache 已经安装在他们身上,我将使用它。 所以,我只是要登录那些。 我在这里登录了 demo1 和 demo2。 所以,随着 NCache 有一个工具 NCache 管理器,你基本上可以通过它创建和配置,使用和管理缓存,所以这是你打开 NCache 经理。 这是您获得的视图,如果您右键单击集群缓存并单击创建新集群缓存,这就是您获得的视图。

因此,所有缓存都需要命名。 我将继续为它命名 SignalRCache。 正如我之前提到的,所有缓存都需要命名,但这不区分大小写,您可以以任何方式使用它。 点击下一步。 这四个 拓扑结构 我们在其他网络研讨会中对此进行了介绍。

这是一个应用程序策略,我将保持一切默认,我将配置我刚刚向您展示的两个缓存服务器,demo1 和 demo2 就在这里,只需单击下一步。 这是集群通信的端口。 所以, NCache 使用 TCP/IP 端口来维持其连接。 所以,我只是在寻找 Nestor,这是缓存大小。 如果你正在使用 NCache 对于 SignalR 和作为 SignalR 的 BackPlane,大小并不重要,因为它只是一个队列,它将在缓存中维护,并且一旦该消息被发送到连接的客户端,就会被删除。 因此,除了单个项目之外,没有任何其他内容将存储在缓存和单个项目中,我将在稍后查看它附带的实际示例时讨论它。

因此,我将在此处保持所有默认设置,我将关闭 Evictions,因为我不希望删除任何内容,即使在缓存已满的情况下也是如此。 我将选中此框,当我单击“完成”时将启动缓存,我将单击“完成”。 所以,这就是在您的环境中创建缓存是多么容易使用 NCache. 所以,我只是要等待缓存启动,然后我要添加一个 remote client 对它来说,这将是我的个人机器。 好的,缓存已启动,我们可以在这里看到,此时此零活动正在进行,但那是因为我们没有其他应用程序,现在基本上没有应用程序连接到此缓存。

因此,我将继续将我的机器作为客户端节点添加到其中以添加客户端,或者只需右键单击此处并单击添加节点。 我将给它我的个人机器 IP,它可以是机器名称或 IP,两者都受支持。 只需点击此处完成。

我们可以看到我的机器被添加为 remote client 就在这儿。 所以,我只是要快速测试这个缓存,看看是否一切正常,在此之前它其实很好,让我告诉你 的监控工具 NCache. 所以,如果你正在使用 NCache 作为背板,您可以使用监控工具,它是一个出色的工具,它可以为您提供有关缓存中发生的确切情况的相当多的细节,帮助您调试问题,实际上您可以获得很多细节,性能如何正在发生的事情,以及如何从何处和何处获取实际命中,以及总体上可以改进的地方。 所以,如果我在这里右击缓存名称,我可以点击监控集群。 这打开 NCache 监控,可用于监控缓存。 所以,它在这里向你展示了一堆不同的东西,如果你在这里打开服务器仪表板,它可以让我很好地了解缓存中到底发生了什么,不同的图表,这是 CPU 图表,这个是正在使用的总网络,这是缓存大小,这是传入的请求总数。因此,它向您展示了当您拥有正确的工作环境时可以使用和查看的很多不同的东西在这里,我要做的是,从我的个人盒子里。 我只是要运行一个StressTest 工具应用程序来模拟缓存上的一些虚拟负载。 此工具随附安装 NCache. 所以,我只是去寻找它。 我只是要输入STR,它会出现StressTest 工具。

所以,Kal 在你拉数据的时候,你可以回答什么样的大型机 NCache SignalR 的用途? 好的。 所以,基本上 NCache 正在使用 发布/订阅模型. 因此,所有这些基本上都是 Web 服务器的客户端,它们作为发布者和订阅者连接起来。 因此,任何客户端实际上都可以发布消息,并且所有连接的客户端也是订阅者。 因此,他们也会收到有关它的通知。 因此,它基本上是 Pub/Sub 模型,我们有一个完整的单独实现的 API 以及仅 Pub/Sub 的整个框架,但在使用 SignalR Pub/Sub 的下面,您也可以单独使用它。

添加示例数据并监控缓存

好的。 所以,我只是要打开StressTest 工具。 所以,这就是位置,它实际上在哪里,它是一个 C:\程序文件\NCache\bin\工具 所以,我们只是在这里寻找一个压力测试工具,只是要在命令提示符下打开实例,它将它拖放到这里。 好吧,实际上,我太快地按了 Enter 键,只是为了清除屏幕。 好的,我要做的是,我要输入 Okay this is StressTest tool。 我要给缓存名称一个空格,缓存名称是signalrcache。 我现在就按 Enter 键。 所以,如果我回到这个视图并打开统计数据,我们应该会看到请求进入并立即执行此操作。 好的,看看现在和这里有一些请求进来,你可以看到现在有一​​堆不同的请求进入两个连接的缓存服务器。 所以,这似乎一切都正常工作,它也接受了一个请求。 如果你在这里打开监控工具,你会看到一个客户端连接到这里,一个客户端连接到这里,如果我们看这里,我们看到进来的请求总数有很大的跳跃,你还可以看到内存图也受到了一些影响。

因此,如果我们确实验证了它的工作原理。 所以,我现在要停止这个工具,它会回到 NCache 经理。 我要右击这里。 我要清除这其中的内容。

运行 SignalR 聊天示例

所以,既然我们已经设置了一个缓存并且它工作得很好,我们已经对其进行了测试,它似乎工作得很好。 所以,我要做的是,我将打开安装在 NCache 我将按照文档,逐步发布在我们的网站上,了解如何基本配置它。 你可以配置它,你自己的 ASP.NET 应用程序来使用 NCache 作为背板。 所以,如果我直接回到安装目录 NCache 即在 c:\program files\ncache 就在这里,我可以进入示例文件夹,然后进入 dotnet 并在此处,如果我们只是在此处查找,我们可以看到此处给出了 SignalRChat 示例。 所以,这是安装的 NCache 这与我将在演示中使用的完全相同。 我这里已经打开了。 因此,我将打开文档,该文档可让您逐步了解如何在自己的特定环境中配置它。

所以,如果我们就在这里。 因此,您需要做的第一件事是,您需要安装 NuGet软件包 让我准确地向您展示我们正在谈论的 NuGet 包。 因此,如果我们只是右键单击此处并单击管理 NuGet 包以获取解决方案。 好的,如果我们进入浏览器,我们正在浏览 nuget.org。 我只是去寻找 NCache,好吧,就在这里,如果你稍微往下看,我可能会错过它,但它是社区 SignalR,好吧,没时间,我可以找到它,NuGet 包的名称是 Alachisoft.NCache.SignalR. 所以,它应该出现在这里, Alachisoft.NCache.SignalR. 因此,这需要安装在您的应用程序中。 我现在不需要安装它,因为我已经安装了 NCache 并且已经有需要库的引用,但如果您不使用 NCache 安装,您绝对可以将其添加为 NuGet 包。 您只需将它安装在您的应用程序产品项目中。

下一步是包含这两个命名空间 Alachisoft.NCache.SignalR 然后 微软 Microsoft.AspNet.SignalR. 因此,这些需要在 Startup.cs 中引入,我将按照示例项目进行操作,但您需要参考您自己的特定设置来进行操作。 所以,如果你在这里进入 Startup.cs,你直​​接在顶部,我们可以看到这两个已经在这里引用 Alachisoft.NCache.SignalR微软.AspNet.SignalR. 所以,这里已经加起来了。

让我们看看下一步。 所以,现在我们需要修改web.config。 所以,我们需要在这里添加这两个特定的键,让我解释一下它们是什么? 第一个,即名称缓存是实际的缓存名称。 所以,你需要给它你将要使用它的缓存,它将会开启并运行,你需要使用它。

第二个是偶数键,这就是多重​​键的区别。 因此,如果您将相同的缓存用作多个不同应用程序的背板介质。 对,所以,这就是它的不同之处。 因此,它基本上打开了缓存中的一个通道,所有具有相同值的应用程序都可以通过该通道获得通知。 因此,如果有两个应用程序需要相互通信,它们需要具有相同的值,但如果有不同的应用程序,您可以根据您的具体环境更改此值。 所以,现在,这里说是 Chat,如果我们回到这里的示例项目并进入 web.config,我们可以看到它是在这里设置的。

缓存名称不同,我要做的是,将其更改为我们创建的缓存,即 signalrcache。 正如我之前提到的,这是缓存名称不区分大小写,因此您可以使用它。 所以,我要继续保存这个。 让我们回到这里,所以这些东西基本上,这些都是可以使用的重载,我将展示我在我的环境中使用的东西。 最初,您只是注册到字符串变量,这些变量将采用我们最初存储在 web.config 中的值。 那是缓存名称以及通道,例如名称,然后这是您指定的位置 NCache 应该可以使用。 基本上,它只是两三行代码,需要在您的应用程序中引入。 你应该很好去使用 NCache 作为应用程序中的背板。

最初有一个问题是指它有多难 配置 NCache 作为背板 对于您的特定应用程序,这很容易。 所以,只需要引入三行代码,你应该有 NCache 作为您特定环境的背板,如果我回到这里的项目,请访问 startup.cs。 我们有特定的相同代码。 这里只有一些检查,只是为了确保这些值实际上就位,然后就在这里。 我们在这里有这个电话,它介绍了 NCache 用作背板。 所以,我现在要做的是,我实际上要运行这个应用程序并打开它的几个实例。 所以,我可以告诉你,这个聊天室现在是如何工作的。 所以,我只是在这里点击运行,它应该打开它。 好的。 所以,构建完成它现在应该打开。 好的,只是等待加载,它不需要这么长时间,但它是现在。

好的,同时让我快速浏览一下我们正在使用的幻灯片。 所以,如果我在这里点击 Default.html,这里应该会弹出一个窗口,询问我要使用的名称。 因此,由于这是一个聊天室,因此您需要使用该名称注册自己。 因此,当您发送消息时,其他收件人应该确切地知道该消息来自谁。 所以,就在这里,它在问我的名字。 我将继续命名 Kal。 我要打个招呼并尝试发送它,同时在这里打开它的另一个实例,它应该打开。 仍然没有发送,但让我们验证缓存名称是否正确,返回 web.config。 我想我把名字弄错了。 所以,它是信号缓存。 我可能需要再次运行它。 我只是继续前进并停下来,因为缓存名称不正确,它显然会关闭这些实例。 这些不起作用,所以我需要再次运行这些。 好的。 所以,让我们再验证一次signalrcache,现在它是正确的。 此时它正在停止实例。 好吧,再运行一次,这应该会更快,因为已经完成了。

在此期间,如果您有任何问题? 请随时询问。 好的。 所以,构建完成了,现在,我们只是打开它好了。 所以,Kal 我在这里有一个问题,它是否也适用于 SignalR 核心? 是的,它确实有效,因为 NCache 是否支持 .NET Core 也是。 所以,它确实适用于“是”。 好的,另一个问题是什么消息传递功能 NCache SignalR 以外的优惠? 正如我最初在 SignalR 下面提到的,整个实现作为背板, NCache 正在使用 Pub/Sub 模型,但除此之外,您也可以单独使用 Pub/Sub。 它总是需要用作 SignalR 的背板,但除此之外,我们有事件,事件可以是数据驱动的事件,也可以是特定的用户定义事件,您基本上可以通过这些事件通知其他应用程序的某些事件。 较新的项目被添加、更新或删除,我们拥有这些功能,然后您还拥有连续查询功能。

因此,在指定缓存中的某些结果集的情况下,如果对该结果集进行了任何更新,则结果集可能是同一个缓存中的多个项目并且其中任何一个都被更新,它将是请求的客户端因为它会收到通知,所以这些也是存在的。 所以,我只是点击了默认的。 它应该问我的名字,现在我就等着吧。 好的。 所以,我要给它起个名字,Kal,希望能工作。 所以,我只是要输入你好并发送它。 现在,我将复制此链接并粘贴到此处。 好的,提供名称,我将给它取名为 Nick。 好的就在这里,所以从这里,我发了一条消息说你好,它也在这里收到。 所以,这是尼克的问候。 所以,我只需要输入尼克的问候,然后发送。 所以,就在这里,尼克向尼克发送了这条消息,如果你回顾卡尔的观点,我们也可以看到它也是在这里提出的。

所以,我们可以在这里发送多条消息,只要我们想要,它们将被所有连接的客户端接收到这个特定的场景。 因此,我们可以看到 Kal 发送了一堆消息,并且在 Nick 的视图中也收到了这些消息。 因此,它们会自动更新,如果您只从 Nick 发送最后一个,也从 Nick 发送,然后将其发送出去,您可以看到它来自 Nick,并且从这个视图中,我们可以看到正确这里。 因此,如果我们快速查看我们创建的缓存以及他正在使用的缓存。 我们可以看到这里添加了一个项目,正如我之前提到的,只添加了一个对象,其余的只是一个队列,在传输时临时维护。

因此,如果我们在内部使用工具 NCache 它的名称为转储缓存键,它将转储缓存中存在的键。 因此,我只想快速向您展示,我们将其命名为 signalrcache,然后按 Enter。

它将提取缓存中存在的所有项目。 所以,此时它们只有一个,我们可以看到这里放置了这个项目,名称为 chat,这个字符串值与我们在应用程序中针对事件键值配置的值完全相同。 因此,这是需要在所有应用程序中使用的通用密钥,需要使用此特定通道来发送和接收消息。 因此,这需要在所有方面都相同,这正是要确保所有连接到该特定缓存的客户端或连接的 Web 服务器都将得到通知以及任何正在发生的此类事情。 所以,拥有它是多么容易 NCache 作为应用程序中的背板。

如果我快速浏览一下我们已经在这里讨论过的内容,让我快速完成最后一个屏幕和最后一张演示幻灯片 NCache 在它下面。 它使用 Pub/Sub 模型。

因此,您连接了客户端应用程序,它可以是 .NET 应用程序或 java 应用程序,并且它们已连接到发布者和订阅者,这两种方式都是双向的。 因此,任何发送任何连接客户端的应用程序都会发送消息猜测,它会接收到所有连接的客户端,并且这样可以确保所有连接的客户端实际接收到所有消息。

因此,如果您快速浏览一下我们在今天的网络研讨会中讨论的内容,我们是否讨论了 SignalR 作为一种技术。 它是什么以及它如何在不同的情况下提供帮助? 迫切需要它,因为应用程序不能等待客户端实际发送通知,或者只有这样他们才能用相应的数据进行响应。 他们希望客户很快就会自动收到更新数据的通知。 那么,我们讨论了 SignalR 是什么? 它基本上是如何工作的? 可能的可能性有哪些不同的用例,以及当前实际上在哪里使用 SignalR?

因此,它们不仅仅是未来的用例。 它们也是当前的用例,扩展 SignalR 应用程序如何在一致性方面存在某种问题,以及 SignalR 自己如何引入背板概念,通过该概念,他们可以确保所有连接的客户端都获得一致的视图并且他们得到立即通知任何在缓存中发生的事情。 我认为有一个问题。

好的。 那么,让我讨论一下与 SignalR Backplane. 我们讨论了这三个要点,正如我之前提到的,这也是任何解决方案都可以利用的机会,我们讨论的解决方案是内存中分布式缓存。 在这种情况下,它是 NCache 我们绘制了不同的特征,不同的东西 NCache 拥有了,多么 SignalR Backplane 真的需要吗? NCache 完美地映射到它们,这是一个优秀的用例,基本上是优秀的候选者,成为 SignalR 应用程序的背板,我们讨论了 NCache。 怎么样 NCache 可以用吗? 我们讨论了可扩展性数字,我们还继续进行了示例项目的动手演示,该示例项目随安装 NCache 以及如何使用它,然后这里有这个文档,它有助于完成此配置的每个过程。

所以,我想这就是我的结局,尼克交给你。 谢谢,Kal,这非常有用,如果有人有问题,请告诉我们,或者您可以在问题框中输入这些问题。 只是为了回顾一下 NCache 解决方案可用于 下载 从我们的网站 www。alachisoft.com。 我们有社区版、开源版以及 企业版 你可以下载,看看企业有 30 天的试用期,你可以在继续之前使用它来测试,开源当然是免费使用的。 所以,没有问题,我要感谢大家加入我们,感谢 Kal 的时间,并期待在下一次网络研讨会上见到你。

接下来做什么?

 

联系我们

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