Configuration de l'invalidation de cache à distance

A l'aide d'Apache Kafka et d'Apache ZooKeeper, vous pouvez exécuter l'invalidation du cache à partir du HCL Commerce Transaction server ou à distance à partir d'un serveur Liberty. Vous pouvez activer et personnaliser cette fonction en modifiant les fichiers de configuration HCL Commerce.

Avant de commencer

HCL Commerce La version 9 utilise Apache Kafka et Apache ZooKeeper pour synchroniser de manière transparente les données sur plusieurs serveurs. La procédure suivante suppose que vous disposez d'installations fonctionnelles des deux produits sur votre réseau.
Important : Installez et exécutez Kafka et ZooKeeper en tant que serveurs isolés dans des conteneurs Docker dédiés. Aucune des deux applications n'est associée à HCL Commerce. Configurez Kafka à l'aide de variables Vault ou d'environnement.
Voici un exemple pour définir les variables d'environnement :
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: ""
Remarque : HCL Commerce Version 9.1.10.0 or laterSi vous souhaitez établir une communication sécurisée avec Kafka, vous pouvez utiliser le paramètre facultatif fourni. Voici un exemple pour définir les variables d'environnement :

- KAFKA_SERVERS=<kafkaServerHostOrIPList>
- KAFKA_TOPIC_PREFIX=<kafkaTopicPrefix>
- KAFKA_AUTHENTICATION_USERID=<kafkaAuthenticationUserID>
- KAFKA_AUTHENTICATION_PASSWORD=<kafkaAuthenticationPassword>
Lorsque les variables sont définies, HCL Commerce configure Kafka au démarrage à l'aide de la commande Run Engine, run set-kafka-server <KafkaServers> <TopicPrefix> <ZookeeperServers>"https://help.hcltechsw.com/commerce/9.0.0/developer/refs/rre_transaction.html

Si la chaîne <KafkaServers> commence par (no-crs), alors Transaction server ne publiera pas les messages d'invalidation destinés à être reçus par le Store server.

Remarque : Si les conteneurs, tels que DB2 et TS-App, se trouvent dans des fuseaux horaires distincts lors de la définition de Kafka/ Zookeeper dans v9, les invalidations risquent de ne pas se produire correctement. Dans les propriétés Kafka, assurez-vous que log.message.timestamp.type = LogAppendTime. Par défaut, cette valeur est définie sur log.message.timestamp.type = CreateTime.

HCL Commerce Version 9.1.10.0 or laterLe mot de passe d'authentification Kafka doit être la chaîne chiffrée à l'aide de wcs_encrypt password. La chaîne chiffrée ASCII doit être enregistrée dans le fichier de configuration, avec le mot de passe de Sasl des serveurs Kafka.

Pourquoi et quand exécuter cette tâche

Effectuez les procédures suivantes pour activer l'invalidation du cache à distance :

Procédure

Configurer le Transaction server
  1. Ouvrez WebSphere Commerce Developer et basculez vers la vue Explorateur d'entreprise.
  2. Accédez au répertoire suivant et ouvrez le fichier de configuration personnalisé Transaction server wc-component.xml pour édition.
    workspace_dir\WC\xml\config\com.ibm.commerce.foundation-ext.

    Si l'annuaire ou le fichier de configuration n'existent pas, créez-les.

    1. Créez le répertoire.
      1. Accédez au chemin suivant.

        workspace_dir\WC\xml\config\

      2. Créez le répertoire extension.

        com.ibm.commerce.foundation-ext

    2. Créez le fichier de configuration personnalisé dans le répertoire extension.
      1. Accédez au répertoire extension, workspace_dir\WC\xml\config\com.ibm.commerce.foundation-ext\.
      2. Créez un fichier wc-component.xml vide dans le dossier com.ibm.commerce.component_name-ext. Ce fichier est votre fichier wc-component.xml personnalisé.
      3. Ajoutez les éléments XML de base requis pour votre fichier wc-component.xml personnalisé.
        1. Ouvrez votre fichier personnalisé wc-component.xml vide dans un éditeur XML.
        2. Copiez le contenu du fichier de configuration par défaut dans votre fichier de configuration personnalisé (workspace_dir\WC\xml\config\com.ibm.commerce.foundation\wc-component.xml), ou créez-le à partir de zéro en copiant le code suivant dans le fichier :
          <?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. Ajoutez ou modifiez le fichier XML pour toutes les propriétés que vous souhaitez modifier dans votre fichier personnalisé wc-component.xml :
        1. Naviguez jusqu'au fichier de configuration du composant par défaut à l'emplacement suivant.
          workspace_dir\WC\xml\config\com.ibm.commerce.foundation\wc-component.xml
          Important : Ne modifiez pas les propriétés directement dans ce fichier, car vos modifications seraient écrasées pas les mises à jour ultérieures des produits HCL.
        2. Copiez les éléments XML des propriétés du fichier de configuration de composant par défaut que vous souhaitez modifier vers votre fichier wc-component.xml personnalisé. Insérez les éléments XML copiés après l'élément <_config:extendedconfiguration>.

          Même si vous ne copiez que certains éléments, vous devez conserver leur hiérarchie XML dans le fichier. Par exemple, si vous souhaitez modifier la propriété définie dans un élément <_config:property> spécifique, vous devez conserver les éléments parent et ancêtre de l'élément <_config:property>, mais vous pouvez supprimer tous les objets de même niveau si vous ne les modifiez pas. Consultez l'exemple à la fin de cette rubrique.

          S'il n'existait pas auparavant, votre fichier de configuration personnalisé est maintenant créé et prêt à être personnalisé ultérieurement.

  3. Localisez le paramètre wc.store.remote.kafka du regroupement de configuration RemoteStoreConfiguration. Ajoutez les adresses des clusters de courtier Apache Kafka, en tant que chaîne séparée par virgule, à l'attribut valeur. Définissez les numéros de port en fonction de votre environnement local. Par exemple :
    <_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. Localisez le paramètre wc.store.remote.kafka.topicPrefix dans le même regroupement de configuration. Ajoutez le préfixe du sujet pour l'invalidation du cache. Cette chaîne contient la même valeur que le préfixe configuré dans le serveur de magasin distant. La valeur doit être identique sur tous les serveurs de transactions.
    <!-- value to kafka servers topic prefix -->
        <_config:property name="wc.store.remote.kafka.topicPrefix" value="sampleprefix"/>
  5. Localisez le paramètre wc.remote.zookeeper du regroupement de configuration TransactionKafkaConfiguration. Ajoutez les adresses des serveurs Apache ZooKeeper, en tant que chaîne séparée par virgule, à l'attribut valeur. Définissez les numéros de port en fonction de votre environnement local. Par exemple :
    <_config:configgrouping name="TransactionKafkaConfiguration">
        ...
        <_config:property name="wc.remote.zookeeper" value="zookeeper1:2181,zookeeper2:2181,zookeeper3:2181/kafka"/>
        ...
    </_config:configgrouping>
  6. Sauvegardez et fermez le fichier de configuration personnalisé.
Configurer le serveur de magasin
  1. Accédez au répertoire ci-dessous.
    workspace_dir\Liberty\servers\crsServer\configDropins\overrides
  2. Modifier le fichier de configuration personnalisé jndi.xml. Si le fichier n'existe pas, créez-le.
  3. Ajoutez la chaîne de configuration des serveurs ZooKeeper à l'attribut jndiName de l'élément jndiEntry. La valeur est la même que la chaîne de configuration ZooKeeper dans le Transaction server.
    <jndiEntry jndiName="com.ibm.commerce.foundation.server.services.zookeeper.hostnameport" value=""/>
  4. Ajoutez la chaîne de préfixe du sujet. Cette valeur est la même que la chaîne de préfixe du sujet dans le Transaction server.
    <jndiEntry jndiName="com.ibm.commerce.foundation.server.services.cacheinvalidation.topicprefix" value=" "/>
  5. Sauvegardez et fermez le fichier de configuration personnalisé.
  6. Déployez vos modifications dans l'environnement d'exécution HCL Commerce.
Suivre les meilleures pratiques
Utilisez les pratiques suivantes comme guide lors de la configuration de votre installation Kafka.
Lire sur les approches éprouvées
Consultez Votre zookeeper a-t-il besoin de maintenance ? sur le blogue HCL et la documentation Apache Kafka pour obtenir des conseils et des utilitaires qui peuvent vous aider à optimiser votre configuration.
Configurer la conservation des messages
La conservation des messages par défaut est de 7 jours, ce qui est très excessif lorsque les messages ne sont plus nécessaires après le traitement des invalidations de cache par toutes les applications. Un délai de conservation de 10 minutes est suffisant pour la plupart des configurations.
Désactiver la configuration automatique des sujets
Par défaut, si un message est envoyé à un sujet qui n'est pas déjà configuré, Kafka le crée automatiquement. Cette approche entraîne un défaut de définition de configurations telles que la conservation des messages et le facteur de réplication, ce qui peut entraîner des problèmes d'indisponibilité. Pour éviter de tels problèmes, désactivez la configuration automatique des sujets. Cela force le client à configurer des sujets avec les paramètres que vous avez définis.
Utiliser des répliques
Les répliques offrent une haute disponibilité. Par exemple, avec deux courtiers, la configuration peut être la suivante :
CacheInvalidation leader: broker0 replica: broker1
PeerCacheInvalidation leader: broker1 replica: broker0
Optimiser les configurations du producteur
Utilisez les paramètres suivants avec les producteurs :
//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);
Pour plus de détails, voir 3.3 Configurations du producteur dans la documentation Apache Kafka.
Optimiser les configurations du consommateur
Utilisez les paramètres suivants avec les consommateurs :
//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"); 
Pour plus de détails, voir 3.4 Configurations du consommateur dans la documentation Apache Kafka.
Notez que puisque chaque serveur définit son propre groupe de consommateurs (configuration de consommateur unique) et que tous les messages sont stockés avec une clé statique, une partition unique est utilisée. Cela garantit que les messages sont reçus dans le même ordre selon lequel ils ont été créés.

Exemple

Vous pouvez examiner le contenu de vos messages en utilisant Kafdrop, ou utiliser kafka-manager pour gérer le sujet et les courtiers. Les messages ont le format suivant, selon la transaction.
Les messages Transaction server à Transaction server présentent le format suivant :
Les messages entre un serveur de transactions et un serveur de magasin ont un format similaire :

Que faire ensuite

Pour améliorer les performances et optimiser les données pour l'analyse, vous pouvez activer, désactiver et personnaliser les paramètres de cache individuels. Les DistributedMaps des serveurs de transactions et de magasin suivants sont pertinentes pour Kafka.
DistributedMaps dans le 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 dans le serveur de magasin
  • WCFlexFlowDistributedMapCache
  • WCStoreDistributedMapCache
  • WCSEORedirectRulesDistributedMapCache
  • WCSEOURLDistributedMapCache
  • WCSEOURLToken2URLKeywordDistributedMapCache
  • WCSEOURLKeyword2URLTokenDistributedMapCache
  • WCRESTTagDistributedMapCache
  • WCLayoutDistributedMapCache
Pour plus d'informations sur la personnalisation des DistributedMaps, voir Complément de configuration du cache de données de HCL Commerce.