Almacenamiento en memoria caché de Edge

El almacenamiento en memoria caché en Edge es un modo simple y efectivo de mejorar el rendimiento del sistema. La API dynacache de WebSphere Application Server tiene funcionalidad incorporada de modo que si se establece la propiedad EdgeCacheable de una entrada de memoria caché en verdadera, se podrá almacenar en memoria caché de Edge. Esta propiedad se encarga automáticamente de la ESI, facilitando el almacenamiento en memoria caché de Edge virtualmente sin actividad general de configuración.

Nota: Puede utilizar el Almacenamiento en memoria caché de Edge para las tiendas que se ejecutan en el servidor de transacciones (tiendas que se migran de versiones anteriores de HCL Commerce). Para las tiendas que se ejecutan en el servidor de tienda, la característica Almacenamiento en memoria caché de Servidor web no está disponible.

El filtro de servlet de memoria caché crea atributos de solicitud con información de sesión que DynaCache de WebSphere Application Server deberá utilizar para crear el ID de memoria caché, el ID de dependencia y el ID de invalidación. Los atributos de peticiones de sesión no se pueden utilizar para crear el ID de memoria caché si el usuario desea almacenar en memoria caché el servlet o la JavaServerPage (Archivo JSP) fuera del servidor de aplicaciones. Para el almacenamiento en memoria caché de Servidor web o de Edge Server, sólo se pueden utilizar los parámetros de URL o cookies como el ID de memoria caché. Para almacenar en memoria caché las páginas de tienda de HCL Commerce, la información de sesión se pone en cookies de sesión.

El contenido de páginas de tienda se basa en información de sesión de usuario. Para almacenar en memoria caché estas páginas de tienda, se necesita la información de sesión como parte del ID de memoria caché. De forma predeterminada, el filtro de memoria caché configura la información de sesión (ID de idioma, ID de moneda preferida, Organización padre, ID de contrato y grupo de miembros) como atributos de petición. Para almacenar en memoria caché fuera del servidor de aplicaciones, esta información se almacenará como cookies de sesión basándose en los valores de configuración en instanceName.xml. Es posible cambiar el nombre de estos atributos, añadirlos o eliminarlos en wc-server.xml.

Edge Side Include (ESI) es un lenguaje de marcación simple que se puede utilizar para definir componentes de página web para el ensamblaje dinámico y la entrega de aplicaciones web en el borde de Internet.

La memoria caché del procesador ESI se puede supervisar mediante la aplicación de supervisor de memoria caché. Para que la memoria caché del procesador ESI esté visible en el supervisor de memoria caché (consulte el apartado de supervisor de memoria caché dinámica para obtener más detalles), se debe instalar la aplicación DynaCacheEsi como se ha descrito anteriormente y la propiedad esiInvalidationMonitor debe establecerse como verdadero (true) en el archivo plugin-cfg.xml.

Ejemplo:
<?xml version-"1.0"?>
<Config>
        <Property Name="esiEnable" Value="true"/>
        <Property Name="esiMaxCacheSize" Value="1024"  
        <Property Name="esiInvalidationMonitor"
Value="true"/>

Habilitar generación de cookies de Edge en wc-server.xml

HCL Commerce el contenido de las páginas de tienda se basa en la información de la sesión de usuario. Por consiguiente, para almacenar en memoria caché estas páginas de tienda, se necesita la información de sesión como parte de los ID de memoria caché. Actualmente el filtro de memoria caché configura la información de sesión (los ID de contrato del comprador y los grupos de miembros) en forma de atributos de petición. La información de sesión se configura como cookies de sesión basándose en el valor de configuración del archivo wc-server.xml.

Puede habilitar cookies cambiando el atributo enable a verdadero (true) en el componente siguiente:

<component
       
compClassName="com.ibm.commerce.dynacache.filter.EdgeCacheCookieHelper"
        enable="
true" name="DynaCacheCookie">
        <property
                CookieDomain=""
                CookiePath="/"
                MutipleStores="true"
                Timeout="3600" display="false">
                <ec name="memberGroups" value="true"/>
                <ec name="buyerContractIds" value="true"/>
        </property>
</component>
Si cambia el atributo value en el componente anterior, podrá seleccionar cuál de las cookies siguientes desea habilitar o deshabilitar:
  • WCDC_CACHEID2 (memberGroups)
  • WCDC_CACHEID3(buyerContractIds)

Habilitar soporte de cookie

Con la posibilidad de almacenamiento en memoria caché fuera de WebSphere Application Server, es posible proporcionar almacenamiento en memoria caché para cada tienda. En cachespec.xml la entrada de memoria caché de varias tiendas incluye el Id de tienda en el Id de componente. Asimismo, se realizan entradas de id de memoria caché para cada tienda.

Puede utilizar el almacenamiento de memoria caché de Edge del modo siguiente:

  • con una sola tienda
  • con varias tiendas

El Escucha de sucesos DynaCache escucha los sucesos de cambio de sesión desencadenados por el cambio de userId o storeId y, a continuación, realiza las acciones siguientes:

  • eliminar todas los cookies de sesión antiguos (si existen)
  • Crear nuevas cookies de sesión basadas en la configuración del objeto com.ibm.commerce.dynacache.DynaCacheCookie y los datos obtenidos en la estructura de catálogo básica
  • A cada cookie se le proporciona un periodo de caducidad de un día
  • Se proporcionan a cada cookie totales de control utilizando totales de control de una sola dirección del valor + clave de comerciante + fecha de hoy (aaaammdd)
  1. Si desea utilizar el almacenamiento en memoria caché de Edge para almacenar en la memoria caché páginas que no solo sean de WebSphere Application Server, esiEnable debe establecerse en verdadero (true). Verifique que la propiedad esiEnable esté establecida en verdadero (true)

    El procesador ESI es configurable mediante el archivo de configuración del plugin del servidor web de WebSphere, plugin-cfg.xml que se encuentra en el directorio WAS_installdir/config/cells/. Por ejemplo:

    
    <Property Name="esiEnable" Value="true"/>
    
  2. Abra cachespec.xml en el archivador de aplicación web (WAR) WEB-INF o el directorio WEB-INF de bean enterprise.
  3. Añada una propiedad al archivo cachespec.xml para habilitar el almacenamiento en memoria caché de Edge.
    
    <property name="EdgeCacheable">true</property>
    
  4. Lleve a cabo uno de los siguientes pasos:
    • Escenario de una sola tienda:
      1. Añada las siguientes entradas de componente en el archivo cachespec.xml en la etiqueta <cache-entry>.
        <component id="Component ID" type="cookie">
                <required>true</required>
        </component>
        
        ID de componente Definición
        WCDC_CACHEID2 Grupos de miembros
        WCDC_CACHEID3 ID de contrato de comprador
    • Escenario de varias tiendas:
      1. Inserte una entrada <cache-id> para cada tienda en el cachespec.xml con la estructura y las propiedades siguientes
        
        <!-- StoreCatalogDisplay?storeId=10001 -->
        <cache-id>
        <component id="" type="pathinfo">
                <required>true</required>
                <value>/StoreCatalogDisplay</value>
        </component>
        <component id="storeId" type="parameter">
                <required>true</required>
                <value>10001</value>
        </component>
        <component id="catalogId" type="parameter">
                <required>true</required>
        </component>
        <component id="WC_LANGID_10001" type="cookie">
                <required>true</required>
        </component>
        <component id="WC_CACHEID5_10001" type="cookie">
                <required>true</required>
        </component>
        </cache-id>
        
        <!-- StoreCatalogDisplay?storeId=10002 -->
        <cache-id>
        <component id="" type="pathinfo">
                <required>true</required>
                <value>/StoreCatalogDisplay</value>
        </component>
                <component id="storeId" type="parameter">
                <required>false</required>
        <value>10002</value>
        </component>
        <component id="catalogId" type="parameter">
                <required>true</required>
        </component>
        <component id="WC_LANGID_10002" type="cookie">
                <required>true</required>
        </component>
        <component id="WC_CACHEID5_10002" type="cookie">
                <required>true</required>
        </component>
        </cache-id>
        

        En la ejecución, el generador de cookies produce de forma dinámica una cookie que se denomina según este storeId. Por ejemplo, dados el storeId 10001 y una tienda inglesa, se generará la cookie WC_LANGID_10001=-1.

Almacenar en memoria caché de datos estáticos

De forma predeterminada, el procesador ESI almacena en memoria caché los datos estáticos, por ejemplo las imágenes y HTML, cuando WebSphere Application Server sirve dichos datos. Las entradas en memoria caché tienen un tiempo de espera predeterminado de 300 segundos. El valor de tiempo de espera se puede cambiar estableciendo la propiedad de sistema com.ibm.servlet.file.esi.timeOut en su JVM.

Por ejemplo: -D com.ibm.servlet.file.esi.timeOut=60

De forma predeterminada, HCL Commerce no almacena en memoria caché los datos estáticos. Puede habilitarlo especificando una entrada de memoria caché (cache-entry) en el archivo cachespec.xml. Consulte el apartado Servlet de archivo simple para obtener más detalles.

Almacenar en memoria caché páginas completas utilizando ESI

Para marcar una entrada que se debe almacenar en memoria caché utilizando ESI, utilice la propiedad EdgeCacheable. Esta propiedad también implica la propiedad de consume-subfragments. La página se almacenará en memoria caché como una página completa incluyendo todos los subfragmentos a menos que se haya especificado que uno de estos subfragmentos se debe almacenar en memoria caché de forma independiente (para obtener detalles consulte Almacenar en memoria caché fragmentos utilizando ESI). Para almacenar en memoria caché las páginas con ESI, defina el ID de caché utilizando componentes de tipo parámetro y cookie. No puede utilizar atributos de petición en la definición del id de memoria caché porque no están disponibles en el borde de la red.

El ejemplo siguiente muestra la entrada de memoria caché (cache-entry) que utiliza el plugin ESI:


<cache-entry>
        <class>servlet</class>
       
<name>strutsname</name>
        <property name="store-cookies">false</property>
        <property
name="save-attributes">false</property>
        <property name="EdgeCacheable">true</property>
Donde strutsname es com.ibm.commerce.struts. ECActionServlet.class (para la versión 9.0.0.x de HCL Commerce o v2.ECActionServlet.class de com.ibm.commerce.struts.para la versión 9.0.x.

   <cache-id>
                <component id="" type="pathinfo">
                        <required>true</required>      
            
                       
<value>/StoreCatalogDisplay</value>
                </component>
                <component id="storeId" type="parameter">
                        <required>true</required>
                </component>
                <component id="catalogId" type="parameter">
                        <required>true</required>
                </component>
        </cache-id>
</cache-entry>

Fragmentos con ESI

HCL Commerce utiliza el modelo de programación de modelo-vista-controlador (MVC), donde las llamadas a un servlet de controlador pueden incluir uno o más archivos JSP hijo para construir la vista. Para que los archivos JSP hijo sean almacenables en memoria caché de edge, tienen que poder solicitar estos archivos JSP externamente. El procesador ESI necesita que los fragmentos de edge se puedan solicitar externamente en edge. Por ejemplo, los fragmentos no deben basarse en la información establecida por el padre y otros fragmentos de la misma petición. Cada fragmento se vuelve a direccionar a través del servlet de controlador utilizando la propiedad alternate_url establecida en la política de memoria caché. Si los fragmentos se basan en un atributo de petición establecido por el padre, estos fragmentos no se podrán ejecutar. Una posible solución alternativa a esta situación es calcular el valor de atributo utilizando un filtro de servlet personalizado que se ejecuta en alternate_url.

En las páginas de productos comunes, la barra lateral incluye dinámicamente un fragmento (MiniCartDisplay.jsp) que visualiza un minicarro de la compra personalizado.

Para almacenar en memoria caché esta página de producto y el mini carro de la compra en edge, cree normas de ID de memoria caché que sólo contengan cookies o parámetros de URL. Para la página de producto, no será ningún problema porque toda la información necesaria para almacenarla en memoria caché está en el URL. Sin embargo, dado que el mini carro de la compra es exclusivo por cliente, para almacenarlo en memoria caché en edge utilice el ID del usuario como ID de memoria caché.

Dado que sólo se pueden utilizar cookies y parámetros de URL para definir la norma de ID de memoria caché y el URL no debe contener información del usuario, el único otro modo es utilizar un cookie personalizado que contenga la información de ID del usuario y utilizar eso como ID de memoria caché. Utilice el encadenamiento de filtros de servlet para encadenar con el filtro de memoria caché de HCL Commerce a fin de crear una cookie personalizada denominada WCDC_USERID basándose en el atributo de solicitud DC_userId creado por el filtro de memoria caché.

A continuación se muestra un ejemplo de cachespec.xml:


<cache-entry>
        <class>servlet</class>
        <name>/ToolTech/include/MiniShopCart.jsp</name>
        <property name="EdgeCacheable">true</property>
        <property
name="alternate_url">/servlet/ToolTech/include/MiniShopCart.jsp</property>
        <property
name="save-attributes">false</property>
        <property
name="do-not-consume">false</property>
        <cache-id>
                <component id="WCDC_USERID" type="cookie">
                        <required>true</required>
                </component>
        </cache-id>
</cache-entry>

<cache-entry>
        <class>servlet</class>
       
<name>strutsname</name>
        <property name="store-cookies">false</property>
        <property
name="save-attributes">false</property>
        <property name="EdgeCacheable">true</property>
        <cache-id>
                <component id="" type="pathinfo">
                        <required>true</required>
                       
<value>/TopCategoriesDisplay</value>
                </component>
                <component id="storeId" type="parameter">
                        <required>true</required>
                </component>
                <component id="catalogId" type="parameter">
                        <required>true</required>
                </component>
        </cache-id>
</cache-entry>
Donde strutsname es com.ibm.commerce.struts. ECActionServlet.class (para la versión 9.0.0.x de HCL Commerce) o v2.ECActionServlet.class de com.ibm.commerce.struts. para (versión 9.0.x).