ADC

对内容交换虚拟服务器的永久支持

应用程序正在从单体架构向微服务架构转变。同一应用程序的不同版本可以共存于微服务架构中。NetScaler 设备必须支持应用程序的持续部署。它是由执行 Canary 部署的平台(例如 Spinnaker)实现的。在持续部署设置中,应用程序的更新版本会自动部署并分阶段向客户端流量开放,直到应用程序稳定以承受全部流量。此外,必须为客户提供不间断的服务。

NetScaler 内容交换功能使 NetScaler 设备能够根据绑定到内容交换虚拟服务器的策略在多个负载平衡虚拟服务器之间分发客户端请求。

对于持续部署,内容切换用于选择为应用程序的不同版本提供服务的负载平衡虚拟服务器。

在内容切换中,由于内容交换策略的变化,为特定应用程序版本选择的负载平衡虚拟服务器在运行时会发生变化。在此过渡期间,如果某些会话使用旧版本的应用程序,则必须继续仅由旧版本提供此类流量。为了支持这一需求,NetScaler 设备在内容交换虚拟服务器后面的多个负载平衡组之间保持持久性。内容交换虚拟服务器的持久性允许客户端从一个版本无缝过渡到另一个版本。

内容交换虚拟服务器上支持的持久性类型

内容交换虚拟服务器支持以下持久性类型。

持久性类型 说明
源 IP SOURCEIP。来自相同客户端 IP 地址的连接是同一个持久会话的一部分。有关更多详细信息,请参阅源 IP 地址持久性。
HTTP 缓存 COOKIEINSERT。具有相同 HTTP Cookie 标头的连接是同一个持久性会话的一部分。NetScaler 设备插入的 cookie 的格式为:**NSC_=** 其中 NSC_XXXX 是派生自虚拟服务器名称的虚拟服务器 ID。有关更多详细信息,请参阅 HTTP Cookie 持久性。
SSL Session ID(SSL 会话 ID) SSLSESSION。具有相同 SSL 会话 ID 的连接是同一个持久性会话的一部分。有关更多详细信息,请参阅 SSL 会话 ID 持久性。

您可以为基于 HTTP Cookie 的持久性配置超时值。如果将超时值设置为 0,则不论使用哪一个 HTTP Cookie 版本,ADC 设备均不指定到期时间。然后,到期时间取决于客户端软件,并且此类 Cookie 仅在软件运行时有效。

根据您配置的持久性类型,虚拟服务器可以支持 250,000 个同步持久连接,也可以支持 NetScaler 设备上内存量限制的任意数量的永久连接。下表显示了哪些类型的持久性属于每种类别。

持久性类型 支持的同时持续连接的数量
源 IP,SSL 会话 ID 250,000
HTTP 缓存 内存限制。在 CookieInsert 中,如果超时不为 0,则连接数量受内存限制。

某些类型的持久性特定于特定类型的虚拟服务器。下表列出了每种类型的持久性,并指出了哪些类型的虚拟服务器支持哪些类型的持久性。

持久性类型 HTTP HTTPS TCP UDP/IP SSL_Bridge SSL_TCP RTSP SIP_UDP
源码/IP
COOKIEINSERT
SSLSESSION

备份持久性支持

您可以将内容交换虚拟服务器配置为在 Cookie 持久性类型失败时使用源 IP 持久性类型作为备份持久性类型。它对于微服务架构中的金丝雀部署很有用。 当 cookie 持久性类型失败时,只有当客户端浏览器在请求中未返回任何 Cookie 时,设备才会回退到基于源 IP 的持久性。但是,如果浏览器返回 cookie(不一定是持久性 cookie),则假定浏览器支持 cookie,因此不会触发备份持久化。 您还可以为备份持久性设置超时值。超时是持久会话生效的时间段。

内容交换虚拟服务器上的持久性是如何工作的

场景 1:没有持久性的内容交换虚拟服务器

以下示例说明了使用不具有持久性的内容交换虚拟服务器部署应用程序的多个版本。

persistence-cs1

当客户端 C1 向应用程序发送请求时,该请求将发送到 NetScaler 设备中的内容交换虚拟服务器。内容交换虚拟服务器评估策略并将请求转发到为应用程序版本 v1 提供服务的负载平衡虚拟服务器 (LB1)。

persistence-cs2

假设已经部署了应用程序的新版本 v2,必须向一部分用户公开。根据相应的内容交换策略,为 v2 版本提供服务的新负载平衡虚拟服务器 (LB2) 绑定到内容交换虚拟服务器。

当客户端 C1 发送新请求时,将再次评估策略并将请求转发到负载平衡虚拟服务器 LB2。因此,如果部署了有状态应用程序的多个版本,则该应用程序的事务将失败。

场景 2:具有持久性的内容交换虚拟服务器

以下示例说明了使用具有持久性的内容交换虚拟服务器部署应用程序的多个版本。

persistence-cs3

当客户端 C1 向应用程序发送请求时,该请求将发送到 NetScaler 设备中的内容交换虚拟服务器。内容交换虚拟服务器评估策略,创建持久会话条目,并将请求转发到为应用程序版本 v1 提供服务的负载平衡虚拟服务器 LB1。

persistence-cs4

同一个客户端 C1 再次请求应用程序,并将请求发送到 NetScaler 设备中的内容交换虚拟服务器。对持久会话的查询已完成,负载平衡虚拟服务器 LB1 取自现有持久会话,并将请求转发到 LB1。使用此解决方案不会破坏现有事务;因此,保持了应用程序的状态性质。

persistence-cs5

让我们考虑一个新的客户端 C2。新请求 C2 通过策略评估发送到应用程序的更新版本,因为此客户端不存在持久性会话。它可以在不破坏其状态的情况下成功推出新版本的应用程序。

由于有了持久性支持,客户可以无缝部署应用程序的多个内容或不同版本,而不会影响现有事务,特别是针对有状态的应用程序。如果不坚持不懈,这是不可能的。

使用 CLI 在内容交换虚拟服务器上配置持久性类型

在命令提示符下,键入:

set cs vserver <name> -PersistenceType <type> [-timeout <integer>]
<!--NeedCopy-->

示例:

set cs vserver Vserver-CS-1 -persistenceType SOURCEIP -timeout 60
<!--NeedCopy-->

使用 GUI 在内容交换虚拟服务器上配置持久性类型

  1. 导航到“流量管理”>“内容交换”>“虚拟服务器”,然后单击“添加”。

  2. 基本设置中,配置持久性详细信息。