集成缓存

集成缓存在 Citrix ADC 设备上提供内存存储,并向用户提供 Web 内容,而无需往返到源服务器。对于静态内容,集成缓存几乎不需要初始设置。启用集成缓存功能并执行基本设置(例如,确定允许缓存使用的 Citrix ADC 设备内存量)后,集成缓存将使用内置策略来存储和提供特定类型的静态内容,包括简单网页和图像文件。您还可以将集成缓存配置为存储和提供动态内容,这些内容通常被 Web 和应用程序服务器(例如,数据库记录和股票报价)标记为不可缓存。

注意:“集成缓存”术语可以与 AppCache 互换使用;请注意,从功能角度来看,两个术语的含义相同。

当请求或响应与内置策略或您创建的策略中指定的规则(逻辑表达式)匹配时,Citrix ADC 设备将执行与策略关联的操作。默认情况下,所有策略都将缓存的对象存储在中,并从“默认”内容组中检索这些对象,但是您可以为不同类型的内容创建自己的内容组。

要使 Citrix ADC 设备能够查找内容组中的缓存对象,您可以配置选择器,将缓存对象与表达式匹配,也可以指定用于查找内容组中的对象的参数。如果您使用选择器(Citrix 建议使用),请先对其进行配置,以便在配置内容组时指定选择器。接下来,设置要添加的任何内容组,以便在配置策略时可用。要完成初始配置,请通过将每个策略绑定到全局绑定点或虚拟服务器或可从其他策略库调用的标签来创建策略库。

您可以使用诸如在缓存对象计划到期之前预加载缓存对象等方法来调整集成缓存的性能。要在缓存数据离开 Citrix ADC 设备后管理缓存数据的处理,您可以配置插入到响应中的缓存相关标头。集成缓存还可以充当其他缓存服务器的转发代理。

注意:集成缓存需要熟悉 HTTP 请求和响应。 有关 HTTP 数据结构的信 ,请参阅"<http://livehttpheaders.mozdev.org/>."

集成缓存的工作原理

集成缓存监视流经 Citrix ADC 设备的 HTTP 和 SQL 请求,并将这些请求与存储策略进行比较。根据结果,集成缓存功能会在缓存中搜索响应,或将请求转发到源服务器。对于 HTTP 请求,集成缓存功能还可以提供缓存中的部分内容,以响应单个字节范围和多部分字节范围请求。

如果客户端接受压缩内容,则可以压缩缓存的数据。您可以为内容组配置过期时间,并可以有选择地过期内容组中的条目。

从集成缓存提供的数据是缓存命中,从源提供的数据是缓存未命中,如下表所述。

交易类型 规范
缓存命中 Citrix ADC 设备从缓存中提供的响应,包括:静态对象(例如,图像文件和静态网页)、200 OK 页、203 非权威响应页、300 多个选项页、301 永久移动页、302 已找到页、304 未修改页、这些响应是已知的作为积极的反应. Citrix ADC 设备还会缓存以下负面响应:307 临时重定向页面、403 禁止页面、404 未找到页面、410 已丢失页面。为了进一步提高性能,您可以将 Citrix ADC 设备配置为缓存其他类型的内容。
可存储缓存小姐 对于可存储缓存未命中,Citrix ADC 设备从源服务器获取响应,并将响应存储在缓存中,然后再将响应存储到客户端。
不可存储缓存小姐 不可存储的缓存缺失不适合缓存。默认情况下,任何包含以下状态代码的响应都是不可存储的缓存缺失:201、202、204、205、206 状态代码、除 403、404 和 410 之外的所有 4xx 代码、5xx 状态代码

注意 要将动态缓存与应用程序基础结构集成,请使用 NITRO API 远程发出缓存命令。例如,您可以配置在更新数据库表时使缓存响应过期的触发器。

要确保缓存响应与源服务器上的数据同步,请配置过期方法。Citrix ADC 设备收到与过期响应匹配的请求时,会刷新来自源服务器的响应。

注意 Citrix 建议您同步 Citrix ADC 设备和后端服务器上的时间。

动态缓存的工作原理

动态缓存基于参数-值对、字符串、字符串模式或其他数据评估 HTTP 请求和响应。例如,假设用户在错误报告应用程序中搜索 Bug 31231。浏览器代表用户发送以下请求:

GET /mybugreportingsystem/mybugreport.dll?IssuePage&RecordId=31231&Template=view&TableId=1000

Host: mycompany.net

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9) Gecko/2008052906 Firefox/3.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,\*/\*;q=0.8

Accept-Language: en-us,en;q=0.5

. . .

在此示例中,针对此错误报告应用程序的 GET 请求始终包含以下参数:

  • IssuePage
  • RecordID
  • 模板
  • TableId

GET 请求不会更新或更改数据,因此您可以在缓存策略和选择器中配置这些参数,如下所示:

  • 配置缓存策略,该策略在 HTTP 请求中查找字符串 mybugreporting系统和 GET 方法。此策略将匹配的请求定向到内容组中的错误。
  • 在 Bug 的内容组中,您可以配置一个匹配各种参数-值对的点击选择器,包括 IssuePage、RecordID 等。

注意:浏览器可以根据一个用户操作发送多个 GET 请求。以下是一系列三个单独的 GET 请求,当用户根据错误 ID 搜索错误时,浏览器会发出这些请求。

GET /mybugreportingsystem/mybugreport.dll?IssuePage&RecordId=31231&Template=view&TableId=1000

GET /mybugreportingsystem/mybugreport.dll?IssuePage&Template=viewbtns&RecordId=31231&TableId=1000

GET /mybugreportingsystem/mybugreport.dll?IssuePage&Template=viewbody&RecordId=31231&tableid=1000

为了满足这些请求,将多个响应发送到用户的浏览器,并且用户看到的 Web 页是响应的程序集。

如果用户更新了 Bug 报告,则应使用来自源服务器的数据刷新缓存中的相应响应。当用户更新错误报告时,错误报告应用程序会发出 HTTP POST 请求。在此示例中,您配置以下内容以确保 POST 请求触发缓存中的失效:

  • 一种请求时间失效策略,用于查找字符串 mybugreporting系统和 POST HTTP 请求方法,并将匹配的请求定向到内容组以获取错误报告。
  • 用于根据 RecordID 参数过期缓存内容的错误报告的内容组的失效选择器。此参数显示在所有响应中,因此失效选择器可以过期缓存中的所有相关项目。

以下摘录显示了更新示例错误报告的 POST 请求。

POST /mybugreportingsystem/mybugreport.dll?TransitionForm HTTP/1.1\r\n

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) Opera 7.23 [en]\r\n

Host: mybugreportingsystem\r\n

Cookie:ttSearch.134=%23options%3Afalse%23active%23owner%3Afalse%23unowned%3Afalse%23submitter%3Afalse%23incsub%3Atrue;

Cookie2: $Version=1\r\n

. . .

\r\n

ProjectId=2&RecordId=31231&TableId=1000&TransitionId=1&Action=Update&CopyProjectId=0&ReloadForm=0&State=&RecordLockId=49873+issues+in+HTTP&F43. . .

Citrix ADC 设备收到此请求后,将执行以下操作:

  • 将请求与无效策略匹配。
  • 查找策略中命名的内容组。
  • 为此内容组应用失效选择器,并使所有与 RecordID=31231 匹配的响应过期。

当用户为此错误报告发出新请求时,Citrix ADC 设备会转到源服务器,获取与报表实例关联的所有响应的更新副本,将响应存储在内容组中,然后将响应提供给用户的浏览器,该浏览器会重新组合报告并显示它。

配置集成缓存

要使用集成缓存,您必须安装许可证并启用该功能。启用集成缓存后,Citrix® Citrix ADC® 设备会自动缓存内置策略指定的静态对象,并生成有关缓存行为的统计信息。(内置策略在策略名称的初始位置有下划线。)

即使内置策略足以满足您的情况,您也可能需要修改全局属性。例如,您可能需要修改分配给集成缓存的 Citrix ADC 设备内存量。

如果您希望在更改设置之前观察缓存操作,请参阅 “显示缓存对象和缓存统计信息。“

意Citrix ADC 缓存是在重新启动设备时被清除的内存存储。

安装集成缓存许可证

需要集成缓存许可证。有关许可证的信息,请参阅有关获取许可证主题的信息。

从 Citrix 获取许可证代码,转到命令行界面,然后登录。

在命令行界面,将许可证文件复制到 /nsconfig/license 文件夹。

使用以下命令重新启动 Citrix ADC 设备:

reboot

启用集成缓存:启用集成缓存 时,Citrix ADC 设备将开始缓存服务器响应。如果您尚未配置任何策略或内容组,则内置策略将缓存的对象存储在默认内容组中。

在命令提示窗口中,键入以下命令之一启用或禁用集成缓存:

‘启用 ns 功能 IC’

配置缓存的全局属性

全局属性应用于所有缓存数据。您可以指定分配给集成缓存的 Citrix ADC 内存量、通过标头插入、验证缓存对象是否应提供的标准、缓存中允许的 POST 主体的最大长度、是否绕过 HTTP GET 请求的策略评估以及当则无法评估策略。

缓存内存容量仅受硬件设备的内存限制。此外,nCore Citrix ADC 设备中的任何数据包引擎(所有传入 TCP 请求的中央分发中心)都会知道由 nCore Citrix ADC 设备中其他数据包引擎缓存的对象。

注意: 当默认全局内存限制设置为 0 并启用集成缓存 (IC) 功能时,设备不会缓存任何对象。对于缓存,必须显式配置全局内存限制。但是,如果启用“set aaa parameter enableStaticPageCaching”选项,则设备中将会配置一些默认内存。此内存不足以缓存大型对象,因此有必要为 IC 分配更高的内存限制。您可以通过配置“set cache parameter –memLimit”命令来执行此操作。只有在保存配置并重新启动设备后,才会应用新设置。

您可以修改为缓存对象配置的全局内存限制。但是,当您将全局内存限制更新为低于现有值的值(例如,从 10 GB 到 4 GB)时,如果已使用较高的内存量(大于 4 GB)缓存对象,Citrix ADC 将继续使用该内存量。

这意味着,即使集成缓存限制配置为某个值,实际使用的限制可能会更高。但是,当从缓存中删除对象时,会释放过多的内存。

show cache 参数命令的输出指示配置的值(内存使用限制)和正在使用的实际值(内存使用限制(活动值))。

在命令提示窗口中,键入:

set cache parameter [-memLimit <MBytes>] [-via <string>] [-verifyUsing <criterion>] [-maxPostLen <positiveInteger>] [-prefetchMaxPending <positiveInteger>] [-enableBypass(YES|NO)] [-undefAction (NOCACHE|RESET)]

要使用 GUI 启用集成缓存,请执行以下操作:

导航到“系统”>“置”,单击“配置基本功能”,然后选择“集成缓存”。

使用 GUI 配置缓存的全局设置:

导航到“优化”>“集成缓存”,单击“更改缓存设 置”,然后配置缓存的全局设置。

要设置集成缓存的内置内容组、模式集和策略,请执行以下操作:

Citrix ADC 设备包括可用于缓存内容的内置集成缓存配置。配置包括一个名为 ctx_cg_poc 的内容组、一个名为 ctx_file_extensions 的模式集以及一组集成的缓存策略。在内容组 ctx_cg_poc 中,仅缓存 500 KB 或更小的对象。内容缓存为 86000 秒,内容组的内存限制为 512 MB。模式集是用于文件类型匹配的常见文件扩展名的索引数组。

下表列出了内置的集成缓存策略。默认情况下,策略不绑定到任何绑定点。如果希望 Citrix ADC 设备根据策略评估流量,则必须将它们绑定到绑定点。策略缓存 ctx_cg_poc 内容组中的对象。

集成缓存策略名称 策略规则
_cacheVPNStaticObjects HTTP.REQ.URL.SET_TEXT_MODE(IGNORECASE).CONTAINS_INDEX(“ctx_file_extensions”).BETWEEN(101,150)
_cacheTCPVPNStaticObjects HTTP.REQ.URL.ENDSWITH(“.css”)
_cacheOCVPNStaticObjects HTTP.REQ.URL.ENDSWITH(“.pdf”)
_cacheWFStaticObjects HTTP.REQ.URL.ENDSWITH(“.js”)
_mayNoCacheReq HTTP.RES.HEADER(“Content-Type”).CONTAINS(“application/x-javascript”)
_noCacheRest TRUE