Dyna Cache是好的前台开发架构师的必备技能,好的Dyna Cache配置才能保证Commerce快速响应用户的请求。
下文是关于Dyna Cache的介绍,同时还推荐一本Redbook帮助大家更深入的了解Dyna Cache的机制。
http://www.redbooks.ibm.com/abstracts/sg247393.html
From developerworks
作者:
1 引言
WebSphere Commerce(以下简称WC)6.0可以利用WebSphere Application Server(以下简称WAS)6.0动态高速缓存服务来高速缓存servlet或JSP文件。
服务器上的大多数HTTP请求都是针对产品目录信息的。WC 6.0命令接收到请求后从数据库中检索信息,并将结果显示为JSP
页面。当客户单击某链接查看产品或产品类别页面时,WC 6.0应用大部分时间都用于分析 HTTP
请求、访问数据库和动态创建页面。较大的站点流量和数据库中大量的产品和类别信息会增加装入servlet或JSP文件所用的时间。
如果自上一次查看以来,产品目录信息没有更改,则下一次客户请求时WC
6.0应用不需要重新执行servlet或JSP文件。提供已存储在高速缓存中的等价静态servlet或JSP文件将更加快捷。通过在位于Web模块的
WEB-INF目录中的cachespec.xml文件中定义高速缓存条目元素和相应规则,可构造servlet或JSP的高速缓存。如果该高速缓存条目
不在内存中,则它会在第一次访问请求发生时动态生成。然后此页面将存储到内存中,在其所依据的数据被修改之前此页面不必重新生成。
在此,我们通过一个具体的例子来介绍如何在WC 6.0中高速缓存高级 B2B 直销原型商店产品目录JSP页面。
回页首
2 动态高速缓存定制举例
2.1 启用动态高速缓存和servlet高速缓存服务
缺省情况下,在创建WC 6.0实例期间,系统自动启用动态高速缓存服务、servlet高速缓存和磁盘卸载。如果动态高速缓存服务和servlet高速缓存服务没有启用,那么可以参照以下步骤启用它们。
(1)打开WAS管理控制台(默认端口是9102, 例如 http://myhost:9102/admin);
(2)在管理控制台左侧导航树中单击服务器 > 应用程序服务器;
(3)单击服务器server1;
(4)单击容器服务,再单击其下的动态高速缓存服务;
(5)选择服务器启动时启用服务;
(6)单击应用或确定;
(7)配置servlet高速缓存:在管理控制台左侧导航树中单击服务器 > 应用程序服务器,点击server1 > Web容器设置,点击Web容器,选择启用servlet高速缓存。
(8)重新启动WC实例;
2.2 安装高速缓存监视器
WAS 6.0提供了动态高速缓存监视器应用程序,以显示高速缓存统计信息、Edge
Side和磁盘统计信息、高速缓存条目、相关性标识以及高速缓存策略信息。为了检查WAS动态高速缓存的内容和行为,我们应该安装WAS动态高速缓存监视
器。要使用动态高速缓存监视器,应在每台使用动态高速缓存的应用程序服务器上安装CacheMonitor.ear文件,该文件位于
WAS_installdir\installableApps目录中。
下面是在WAS 6.0上安装并启动高速缓存监视器的具体步骤:
(1) 打开WAS 6.0的管理控制台 (默认端口为9102,例如http://myhost:9102/admin);
(2) 在导航树中打开Applications > Install New Application;
(3) 点击Local file system并且指定到<WAS>\installableApps\CacheMonitor.ear目录,点击Next;
(4) 在"Preparing for the application installation"页面点击Next;
(5) 忽略跳出的"Application Security Warnings"消息框,点击Continue;
(6) 安装步骤:
a. 在"Select installation options"页面使用缺省设置,点击Next;
b. 在"Map modules to servers"页面选择动态高速缓存监视器,并为高速缓存监视器选择两个虚拟主机,例如server1和 webserver1,点击Apply,如图1所示;
图1
c. 在"Map virtual hosts for web modules"页面,选择动态高速缓存监视器和其所对应的虚拟主机,例如VH_demo,点击Next,如图2所示;
图2
d. 在"Map security roles to users/groups"页面使用缺省设置,点击Next;
e. 在"Summary"页面使用缺省设置,点击Finish。
(7) 点击Save to Master Configuration,然后点击Save按钮保存配置;
(8) 点击Servers > Web servers;
(9)
确定别名/cachemonitor/*已经自动加到文件<WAS>\profiles\<inst>\config
\cells\WC_<inst>_cell\nodes\webserver1_node\servers\webserver1
\plugin-cfg.xml中,否则,选择webserver1然后点击"Generate
Plug-in"以重新生成plugin-cfg.xml;
(10) 进入Applications > Enterprise Applications,选中"Dynamic Cache Monitor",点击Start,以启动高速缓存监视器,如图3所示;
图3
(11)
我们可以通过以下URL来访问高速缓存监视器:https://<hostname>:<virtual_host_port>
/cachemonitor(例如 https://myhost/cachemonitor,假定虚拟主机为VH_demo)。
2.3 定义动态高速缓存策略
在动态高速缓存定制过程中,最核心的就是高速缓存策略的定义了。高速缓存配置被定义在高速缓存策略配置文件(cachespec.xml)中,
该文件存放于以下目录中:<WAS_installdir>/profiles/<instance>
/installedApps/WC_<instance>_cell/WC_<instance>.ear
/Stores.war/WEB-INF。
我们通过以下步骤定义动态高速缓存策略:
2.3.1 确定是servlet高速缓存还是JSP高速缓存
为使动态高速缓存能够高速缓存servlet或JSP页面结果,我们必须在cachespec.xml中定义cache-entry元素来标明是servlet高速缓存还是JSP高速缓存,例如:
<cache-entry>
<class>servlet</class>
<name>name</name>
...
</cache-entry>
|
其中,对于servlet高速缓存,<name>是servlet的映射;对于JSP高速缓存,<name>是JSP文件的相对Web路径。在本例中,需要高速缓存的是JSP文件。
2.3.2 确定页面高速缓存还是页面片段高速缓存
高速缓存整个Web页面,就意味着整个页面作为大高速缓存条目被高速缓存,这样能够节省可观的应用程序服务器处理量,但这种方法只有在外部HTTP
请求包含用来寻找条目的所有信息时才有用。高速缓存Web页面中的片段,则该片段可被更广范围的目标用户重用。请求Web页面时,将重新组装不同的片段以
产生页面。
所以当确定高速缓存策略时,判断Web页面应该被高速缓存为整个页面还是页面片段是一个重要环节。如果该页面输出具有与用户相关的部分,则应以分段高速缓存的方法高速缓存页面输出。也就是说,以分开的条目形式高速缓存JSP,然后当它们被请求时,再重新组合在一起。
如图4所示,本例中,对于高级B2B直销原型商店,产品目录页面输出依赖于用户信息,因此不可能高速缓存整个页面,所以使用分段高速缓存。
图4
产品目录页面对应的JSP文件是/AdvancedB2BDirect/ShoppingArea/CatalogSection
/CategorySubsection/StoreCatalogDisplay.jsp,该文件中包含以下JSP页
面:CachedHeaderDisplay.jsp,CachedSidebarDisplay.jsp,CachedStoreCatalogDisplay.jsp。
StoreCatalogDisplay.jsp本身不应该被高速缓存,因为它包含确定用户信息的逻辑。因此必须高速缓存的页面应该
是:CachedHeaderDisplay.jsp,CachedSidebarDisplay.jsp和
CachedStoreCatalogDisplay.jsp。
2.3.3定义高速缓存标识
每个cache-id元素定义一个用于高速缓存对象的规则,对于JSP高速缓存,我们应该为每一个需要高速缓存的JSP页面定义一个高速缓存条目,如下所示,设置CachedHeaderDisplay.jsp文件的高速缓存条目:
<cache-entry>
<class>servlet</class>
<name>/AdvancedB2BDirect/include/
CachedHeaderDisplay.jsp</name>
<property name="save-attributes">false</property>
<cache-id>
<component id="storeId" type="parameter">
<required>true</required>
</component>
<component id="catalogId" type="parameter">
<required>true</required>
</component>
<component id="userType" type="parameter">
<required>true</required>
</component>
<component id="DC_lang" type="attribute">
<required>true</required>
</component>
</cache-id>
</cache-entry>
|
设置CachedSidebarDisplay.jsp文件的高速缓存条目:
<cache-entry>
<class>servlet</class>
<name>/AdvancedB2BDirect/include
/CachedSidebarDisplay.jsp</name>
<property name="save-attributes">false</property>
<cache-id>
<component id="storeId" type="parameter">
<required>true</required>
</component>
<component id="catalogId" type="parameter">
<required>true</required>
</component>
<component id="userType" type="parameter">
<required>true</required>
</component>
<component id="userState" type="parameter">
<required>true</required>
</component>
<component id="DC_lang" type="attribute">
<required>true</required>
</component>
</cache-id>
</cache-entry>
|
设置CachedStoreCatalogDisplay.jsp文件的高速缓存条目:
<cache-entry>
<class>servlet</class>
<name>/AdvancedB2BDirect/ShoppingArea/CatalogSecion
/CategorySubsection/CachedStoreCatalogDisplay.jsp</name>
<property name="save-attributes">false</property>
<cache-id>
<component id="storeId" type="parameter">
<required>true</required>
</component>
<component id="catalogId" type="parameter">
<required>true</required>
</component>
<component id="displayApproverLink" type="parameter">
<required>true</required>
</component>
<component id="DC_lang" type="attribute">
<required>true</required>
</component>
</cache-id>
</cache-entry>
|
其中,每个定义的component(组件)成为生成的高速缓存标识的一部分。
2.3.4 定义相关性标识
在定义了高速缓存条目之后,我们就需要定义条目的相关性标识。相关性标识也称为分组标识,它通过相同的组标识来对多个高速缓存条目进行分组。例如:
<dependency-id>storeId
<component id="storeId" type="parameter">
<required>true</required>
</component>
</dependency-id>
<dependency-id>catalogId
<component id="catalogId" type="parameter">
<required>true</required>
</component>
</dependency-id>
|
2.3.5 如何使被高速缓存的数据无效
用于识别并更新不再有效的页面或者片段的机制称为失效。在定义高速缓存失效时应该考虑什么会使得被高速缓存的 JSP 内容无效,使得高速缓存内容无效的事件包括:在产品目录中添加、除去或者更新条目以及打开、关闭、暂挂商店等等。
如果商店管理员要在商店关闭时让所有被高速缓存的JSP页面失效,那么所有JSP页面应该具有相同的相关性标识storeId。例如:
<invalidation>storeId
<component id="" type="pathinfo" ignore-value="true">
<required>true</required>
<value>/StoreOpen</value>
<value>/StoreClose</value>
</component>
<component id="targetStoreId" type="parameter">
<required>true</required>
</component>
</invalidation>
|
当以上<value>元素中的命令(storeOpen,storeClose)被调用时,其将使得与相关性标识storeId关联的所有高速缓存条目失效。
至此,我们就完成了对产品目录页面对应的JSP文件的高速缓存策略的定义,把以上代码拷贝到cachespec.xml文件中,重新启动WC实例,这些高速缓存策略就开始生效了。
2.4 使用监视器查看高速缓存信息
在定义了高速缓存条目之后,我们可以使用高速缓存监视器来查看高速缓存信息:
(1)登录高级B2B直销原型商店;
(2)浏览高级B2B直销原型商店的商品目录;
(3)访问高速缓存监视器来查看当前高速缓存策略信息,如图5所示:
图5
回页首
3 结束语
在本文中我们介绍了WC6.0中动态高速缓存的功能,并详细说明了如何启动动态高速缓存和servlet高速缓存服务、如何安装高速缓存监视器、如
何定义动态高速缓存策略以及如何使用监视器查看高速缓存信息。虽然我们以高级B2B直销原型商店为例说明的操作步骤,但这种方法是可以适用于任何WC商店
的,这样,WC的用户管理人员就可以根据实际情况来定制各种商店的动态高速缓存策略了。
posted on 2010-11-20 13:06
Kelvin Cheng 阅读(541)
评论(0) 编辑 收藏 所属分类:
前台开发