Configuración de la invalidación de la memoria caché remota

Mediante Apache Kafka y Apache ZooKeeper, puede ejecutar la invalidación de memoria caché desde HCL Commerce Transaction server o de forma remota desde un servidor Liberty. Puede habilitar y personalizar esta característica al editar los archivos de configuración de HCL Commerce.

Antes de empezar

HCL CommerceLa versión 9 utiliza Apache Kafka y Apache ZooKeeper para sincronizar de forma transparente los datos entre varios servidores. El procedimiento siguiente presupone que tiene instalaciones de trabajo de ambos productos en la red.
Importante: Instale y ejecute Kafka y ZooKeeper como servidores aislados en contenedores de Docker dedicados. Ninguna de las dos aplicaciones está incluida en HCL Commerce. Configure Kafka utilizando variables de almacenamiento o de entorno.
A continuación se muestra un ejemplo para establecer variables de entorno:
crsApp:
  enabled: true
  name: crs-app
  image: commerce/crs-app
  tag: v9-latest
  replica: 1
  resources:
    requests:
      memory: 2048Mi
      cpu: 500m
    limits:
      memory: 4096Mi
      cpu: 2
  ## when using custom envParameters, use key: value format
  envParameters:
    auth: 
      ZOOKEEPER_SERVERS: my-kafka-zookeeper.kafka.svc.cluster.local:2181
      KAFKA_SERVERS: my-kafka.kafka.svc.cluster.local:9092
      KAFKA_TOPIC_PREFIX: sample
    live: 
      ZOOKEEPER_SERVERS: my-kafka-zookeeper.kafka.svc.cluster.local:2181
      KAFKA_SERVERS: my-kafka.kafka.svc.cluster.local:9092
      KAFKA_TOPIC_PREFIX: sample     
  nodeLabel: ""
  fileBeatConfigMap: ""
  nodeSelector: {}
  coresSharingPersistentVolumeClaim: ""
Nota: HCL Commerce Version 9.1.10.0 or laterSi desea establecer una comunicación segura con Kafka, puede utilizar el parámetro opcional proporcionado. A continuación se muestra un ejemplo para establecer variables de entorno:

- KAFKA_SERVERS=<kafkaServerHostOrIPList>
- KAFKA_TOPIC_PREFIX=<kafkaTopicPrefix>
- KAFKA_AUTHENTICATION_USERID=<kafkaAuthenticationUserID>
- KAFKA_AUTHENTICATION_PASSWORD=<kafkaAuthenticationPassword>
Cuando se establecen las variables, HCL Commerce configura kafka durante el inicio utilizando el mandato run engine, run set-kafka-server <KafkaServers> <TopicPrefix> <ZookeeperServers>"https://help.hcltechsw.com/commerce/9.0.0/developer/refs/rre_transaction.html

Si la cadena <KafkaServers> empieza por (no-crs), Transaction server no publicará los mensajes de invalidación pensados para que los reciba el Store server.

Nota: Si los contenedores, como DB2 y TS-App, están en zonas horarias separadas al establecer Kafka/ Zookeeper en la versión 9, es posible que las invalidaciones no se produzcan correctamente. En las propiedades de Kafka, asegúrese de lo siguiente: log.message.timestamp.type = LogAppendTime. De forma predeterminada, el valor se establece en log.message.timestamp.type = CreateTime.

HCL Commerce Version 9.1.10.0 or laterLa contraseña de autenticación de Kafka debe ser la cadena cifrada utilizando wcs_encrypt password. La cadena cifrada ASCII debe guardarse en el archivo de configuración, junto con la contraseña del Sasl de los servidores Kafka.

Por qué y cuándo se efectúa esta tarea

Complete los procedimientos siguientes para habilitar la invalidación de memoria caché remota:

Procedimiento

Configurar el Transaction server
  1. Abra WebSphere Commerce Developer y cambie a la vista Explorador de empresa.
  2. Vaya al siguiente directorio y abra el archivo de configuración personalizada Transaction server wc-component.xml para editarlo.
    workspace_dir\WC\xml\config\com.ibm.commerce.foundation-ext .

    Si el archivo de directorio o configuración no existe, deberá crearlos.

    1. Cree el directorio.
      1. Navegue hasta la siguiente vía de acceso.

        workspace_dir\WC\xml\config\

      2. Cree el directorio de extensión.

        com.ibm.commerce.foundation-ext

    2. Cree el archivo de configuración personalizada dentro del directorio de extensión.
      1. Vaya al directorio de extensión, workspace_dir\WC\xml\config\com.ibm.commerce.foundation-ext\.
      2. Cree un archivo vacío wc-component.xml en la carpeta com.ibm.commerce.component_name-ext. Este archivo es el archivo wc-component.xml personalizado.
      3. Añada los elementos XML básicos que son necesarios para el archivo wc-component.xml personalizado.
        1. Abra el archivo vacío personalizado wc-component.xml en un editor XML.
        2. Copie el contenido del archivo de configuración predeterminado en el archivo de configuración personalizado (workspace_dir\WC\xml\config\com.ibm.commerce.foundation\wc-component.xml) o créelo desde cero copiando el código siguiente en el archivo:
          <?xml version="1.0" encoding="UTF-8"?>
          <_config:DevelopmentComponentConfiguration
          	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          	xsi:schemaLocation="http://www.ibm.com/xmlns/prod/commerce/foundation/config ../xsd/wc-component.xsd "
          	xmlns:_config="http://www.ibm.com/xmlns/prod/commerce/foundation/config">
          
              <_config:extendedconfiguration>
          
          	
              </_config:extendedconfiguration>
          	
          </_config:DevelopmentComponentConfiguration>
      4. Añada o modifique el XML para cualquiera de las propiedades que desee cambiar en el archivo wc-component.xml personalizado.
        1. Vaya hasta el archivo de configuración de componente predeterminado en la siguiente vía de acceso.
          workspace_dir\WC\xml\config\com.ibm.commerce.foundation\wc-component.xml
          Importante: No cambie nunca las propiedades directamente en este archivo porque los cambios se sobrescribirán con futuras actualizaciones de software de HCL.
        2. Copie los elementos XML para las propiedades que desea cambiar del archivo de configuración de componente predeterminado en el archivo wc-component.xml. Inserte los elementos XML copiados después del elemento <_config:extendedconfiguration>.

          Aunque esté copiando únicamente determinados elementos, debe mantener la jerarquía XML para aquellos elementos del archivo. Por ejemplo, si desea cambiar la propiedad definida en un elemento <_config:property> específico, debe conservar los elementos padre y predecesor del elemento <_config:property>, pero puede eliminar todos los iguales si no los cambia. Vea el ejemplo que figura al final de este tema.

          Si anteriormente no existía, el archivo de configuración personalizado se creará ahora y estará listo para que pueda personalizarlo aún más.

  3. Localice el parámetro wc.store.remote.kafka de la agrupación de configuración de RemoteStoreConfiguration. Añada las direcciones de los clústeres de intermediario de Apache Kafka, como una cadena separada por comas, al atributo value. Establezca los números de puerto según el entorno local. Por ejemplo:
    <_config:configgrouping name="RemoteStoreConfiguration">
        ...
        <!-- value to kafka servers connection string -->
        <_config:property name="wc.store.remote.kafka" value="kafka-broker1:9092,kafka-broker2:9092,kafka-broker3:9092"/>
        ...
    </_config:configgrouping>
  4. Localice el parámetro wc.store.remote.kafka.topicPrefix en la misma agrupación de configuración. Añada el prefijo de tema para la invalidación de memoria caché. Esta cadena contiene el mismo valor que el prefijo configurado en el servidor de tienda remoto. El valor debe ser el mismo en los servidores de transacción.
    <!-- value to kafka servers topic prefix -->
        <_config:property name="wc.store.remote.kafka.topicPrefix" value="sampleprefix"/>
  5. Localice el parámetro wc.remote.zookeeper de la agrupación de configuración TransactionKafkaConfiguration. Añada las direcciones de los servidores Apache ZooKeeper, como una cadena separada por comas, al atributo value . Establezca los números de puerto según el entorno local. Por ejemplo:
    <_config:configgrouping name="TransactionKafkaConfiguration">
        ...
        <_config:property name="wc.remote.zookeeper" value="zookeeper1:2181,zookeeper2:2181,zookeeper3:2181/kafka"/>
        ...
    </_config:configgrouping>
  6. Guarde y cierre el archivo de configuración personalizado.
Configurar del servidor de tienda
  1. Vaya al siguiente directorio.
    workspace_dir\Liberty\servers\crsServer\configDropins\overrides
  2. Edite el archivo de configuración personalizado jndi.xml. Si el archivo no existe, créelo.
  3. Añada la cadena de configuración para los servidores ZooKeeper al atributo jndiName del elemento jndiEntry. El valor es el mismo que la serie de configuración ZooKeeper en Transaction server.
    <jndiEntry jndiName="com.ibm.commerce.foundation.server.services.zookeeper.hostnameport" value=""/>
  4. Añada la cadena del prefijo del tema. Este valor es el mismo que la cadena del prefijo del tema en Transaction server.
    <jndiEntry jndiName="com.ibm.commerce.foundation.server.services.cacheinvalidation.topicprefix" value=" "/>
  5. Guarde y cierre el archivo de configuración personalizado.
  6. Despliegue los cambios en el entorno de ejecución de HCL Commerce.
Siga las prácticas recomendadas
Utilice las siguientes prácticas como guía al configurar la instalación de Kafka.
Lea acerca de enfoques comprobados
Consulte ¿Zookeeper necesita mantenimiento? en el blog de HCL y la documentación de Apache Kafkapara obtener consejos y programas de utilidad que pueden ayudarle a optimizar la configuración.
Configurar retención de mensajes
La retención de mensajes predeterminada es de 7 días, lo que es muy excesivo cuando todos los mensajes ya no son necesarios después de que todas las aplicaciones hayan procesado invalidaciones de memoria caché. Un tiempo de retención de 10 minutos es suficiente para la mayoría de configuraciones.
Inhabilitar configuración automática de temas
De forma predeterminada, si se envía un mensaje a un tema que todavía no está configurado, Kafka lo creará automáticamente. Este enfoque hace que configuraciones como retención de mensajes y factor de réplica no se configuren, lo que puede causar problemas de interrupción. Para evitar estos problemas, inhabilite la configuración automática de los temas. Esto fuerza al cliente a configurar temas con los parámetros que ha definido.
Utilizar réplicas
Las réplicas proporcionan una alta disponibilidad. Por ejemplo, con dos intermediarios, la configuración puede ser la siguiente:
CacheInvalidation leader: broker0 replica: broker1
PeerCacheInvalidation leader: broker1 replica: broker0
Optimizar las configuraciones de los productores
Utilice los valores siguientes con los productores:
//acks=all, This means the leader will wait for the full set of in-sync replicas to acknowledge the record. 
        //This guarantees that the record will not be lost as long as at least one in-sync replica remains alive.
        configValues.put(ProducerConfig.ACKS_CONFIG, "all");

        // Setting a value greater than zero will cause the client to resend any record whose send fails with a potentially transient error.
        configValues.put(ProducerConfig.RETRIES_CONFIG, 0);

        //The producer will attempt to batch records together into fewer requests whenever multiple records are being sent to the same partition. 
        configValues.put(ProducerConfig.BATCH_SIZE_CONFIG, 16384);

        //LINGER_MS_CONFIG, This setting gives the upper bound on the delay for batching.
        configValues.put(ProducerConfig.LINGER_MS_CONFIG, 1);

        //buffer.memory, The total bytes of memory the producer can use to buffer records waiting to be sent to the server. 
        configValues.put(ProducerConfig.BUFFER_MEMORY_CONFIG, 33554432);
Para obtener más información, consulte 3.3 Configuraciones de productor en la documentación de Apache Kafka.
Optimizar las configuraciones de los consumidores
Utilice los valores siguientes con los consumidores:
//ENABLE_AUTO_COMMIT_CONFIG : If true, periodically commit to Kafka the offsets of messages already returned by the consumer.
        configValues.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, "true");

 // AUTO_OFFSET_RESET_CONFIG : earliest: automatically reset the offset to the earliest offset
configValues.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest"); 
Para obtener más información, consulte 3.4 Consumer Configs en la documentación de Apache Kafka.
Tenga en cuenta que puesto que cada servidor define su propio grupo de consumidores (configuración de consumidor único) y todos los mensajes se almacenan con una clave estática, se utiliza una única partición. Esto garantiza que los mensajes se reciban en el mismo orden en que se crearon.

Ejemplo

Puede examinar el contenido de los mensajes mediante Kafdrop, o utilizar Kafka-Manager para gestionar el tema y los intermediarios. Los mensajes tienen el formato siguiente, en función de la transacción.
Los mensajes Transaction server y Transaction server tienen el formato siguiente:
Los mensajes de transacción a tienda tienen un formato similar:

Qué hacer a continuación

Para mejorar el rendimiento y optimizar los datos del análisis, puede habilitar, inhabilitar y personalizar los valores individuales de la memoria caché. Los siguientes DistributedMaps de servidor de transacción y de tienda son relevantes para Kafka.
DistributedMaps en Transaction server
  • WCSessionDistributedMapCache
  • WCCatalogEntryDistributedMapCache
  • WCCatalogGroupDistributedMapCache
  • WCMiscDistributedMapCache
  • WCUserDistributedMapCache
  • WCPriceDistributedMapCache
  • WCMarketingDistributedMapCache
  • WCPromotionDistributedMapCache
  • WCContractDistributedMapCache
  • WCTelesalesDistributedMapCache
  • WCSystemDistributedMapCache
  • WCFlexFlowDistributedMapCache
  • WCRESTTagDistributedMapCache
  • WCSEOURLKeyword2URLTokenDistributedMapCache
  • wCSEOURLToken2URLKeywordDistributedMapCache
  • WCSEORedirectRulesDistributedMapCache
  • WCSEOURLDistributedMapCache
  • WCWidgetDefinitionDistributedMapCache
  • WCLayoutDistributedMapCache
  • WCSEOPageDefinitionDistributedMapCache
  • WCPR_Cache
DistributedMaps en el servidor de tienda
  • WCFlexFlowDistributedMapCache
  • WCStoreDistributedMapCache
  • WCSEORedirectRulesDistributedMapCache
  • WCSEOURLDistributedMapCache
  • WCSEOURLToken2URLKeywordDistributedMapCache
  • WCSEOURLKeyword2URLTokenDistributedMapCache
  • WCRESTTagDistributedMapCache
  • WCLayoutDistributedMapCache
Para obtener información sobre la personalización de DistributedMaps, consulte Configuración adicional de la memoria caché de datos de HCL Commerce .