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
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: ""
Si 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>
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.
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.
Le 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
Procédure
- Ouvrez WebSphere Commerce Developer et basculez vers la vue Explorateur d'entreprise.
-
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.
-
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> -
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"/> -
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> - Sauvegardez et fermez le fichier de configuration personnalisé.
-
Accédez au répertoire ci-dessous.
workspace_dir\Liberty\servers\crsServer\configDropins\overrides
- Modifier le fichier de configuration personnalisé jndi.xml. Si le fichier n'existe pas, créez-le.
-
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=""/> -
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=" "/> - Sauvegardez et fermez le fichier de configuration personnalisé.
- Déployez vos modifications dans l'environnement d'exécution HCL Commerce.
- 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 :
Pour plus de détails, voir 3.3 Configurations du producteur dans la documentation Apache Kafka.//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); - Optimiser les configurations du consommateur
- Utilisez les paramètres suivants avec les consommateurs :
Pour plus de détails, voir 3.4 Configurations du consommateur dans la documentation Apache Kafka.//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");
Exemple
Que faire ensuite
- 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