Invalidación de memoria caché con Kafka y ZooKeeper

Puede utilizar Apache Kafka y Apache ZooKeeper para invalidar la memoria caché. Los trabajos de invalidación se pueden ejecutar desde servidores locales o remotos.

Si no utiliza Redis, puede utilizar Kafka y ZooKeeper para ejecutar la invalidación entre servidores de transacción, entre un servidor de transacción y servidores de tienda, o entre un servidor de transacción y servidores de búsqueda. Si utiliza Redis, Kafka no es necesario para la invalidación de la memoria caché. Para obtener más información, consulte HCL Cachecon Redis.

El flujo del proceso general para la invalidación de la caché de Kafka se muestra en el siguiente diagrama.
Nota: No puede realizar la invalidación de memoria caché remota de servidores xC utilizando Kafka y ZooKeeper.

HCL Commerce Version 9.1.10.0 or later Puede utilizar Kafka para ejecutar la invalidación entre servidores de transacción, entre un servidor de transacción y servidores de tienda, o entre un servidor de transacción y servidores de búsqueda. Zookeeper solo se comunicará con Kafka en estas circunstancias. El flujo del proceso general para la invalidación de la caché de Kafka se muestra en el siguiente diagrama.HCL Commerce Version 9.1.10.0 or later

Invalidación entre servidores de transacción

Cuando se realiza la invalidación de memoria caché de servidor de transacción, un servidor actúa como productor de mensajes y el otro como consumidor. Los mensajes utilizan un formato de denominación de temas predeterminado, topicnamePeerCacheInvalidation, donde topicname es su propio nombre de tema en Kafka. El productor envía mensajes al intermediario de Kafka, que los añade al tema de particiones. Por ejemplo, si un usuario de empresa actualiza los datos de autor, su servidor de transacción enviará los ID de invalidación de memoria caché al intermediario de Kafka cuando se comprometa la transacción de invalidación. El servidor de transacción del consumidor supervisa los mismos temas en el servidor de Kafka y cuando detecta los cambios de desplazamiento de mensajes, consultará al intermediario de Kafka para los ID de invalidación. A continuación, realizará la invalidación utilizando una correlación "tabla de base de datos - contenedor de memoria caché" preconfigurada.

HCL Commerce Version 9.1.10.0 or later

Algunos sucesos, como las operaciones de carga de datos, no desencadenan invalidación directamente. En su lugar, los desencadenantes de la tabla de base de datos, los trabajos de compilación de índice y otros trabajos diarios colocan nuevos registros en la tabla CACHEIVL a medida que se ejecutan. El trabajo del planificador de invalidación de la memoria caché explora la tabla CACHEIVL y detecta los cambios más recientes. A continuación, realizará la invalidación de la memoria caché local y enviará mensajes de invalidación al intermediario de Kafka. Como en el ejemplo anterior, cuando los servidores de transacción de igual nivel detectan los mensajes nuevos, la invalidación se realiza de forma preconfigurada en la correlación "tabla de base de datos - contenedor de memoria caché".

Nota: Este proceso también establece la invalidación para la memoria caché base, que utilizan las tiendas locales. No es necesario configurar por separado el almacenamiento en memoria caché para la tienda local.

Invalidación entre el servidor de transacción y el servidor de tienda

En este escenario, el servidor de transacción es el productor de mensajes y el servidor de tienda remoto es el consumidor de mensajes. El tema de invalidación de memoria caché en este escenario es diferente del escenario de invalidación de transacción a transacción. Si es necesario invalidar los mismos datos en los servidores de tienda y de transacción, se añadirá el mismo ID de invalidación a ambos temas. El nombre de tema para la invalidación de transacción a tienda se estructura como topicnameCacheInvalidation.

La lógica del proceso de invalidación es la misma que en el escenario de transacción a transacción. La única diferencia es que se invocará el método sendRemote de invalidación, en lugar del método sendPeer.

HCL Commerce Version 9.1.10.0 or later

Invalidación del servidor de búsqueda

El servidor de búsqueda utiliza CACHEIVL para coordinar la invalidación de la memoria caché. Todas las solicitudes de REST que se direccionan al servidor de búsqueda pasan por un filtro de servlet denominado TransactionFilter. En las horas preconfiguradas, el filtro comprueba los registros de la tabla CACHEIVL insertados recientemente. Estos se seleccionan para la invalidación.

Invalidación de memoria caché personalizable después de crear el índice de búsqueda

La invalidación de memoria caché en el servidor de tienda puede utilizar entradas personalizadas añadidas por el servidor de búsqueda durante el proceso de creación del índice. En este proceso, el servidor de búsqueda inserta los registros de invalidación personalizados en la tabla de base de datos CACHEIVL durante el proceso de creación del índice. A continuación, la base de datos envía los registros al servidor de transacción, que a su vez realiza solicitudes de invalidación en el servidor de la tienda, donde se realiza la invalidación de la memoria caché de servlet.

Puede utilizar el siguiente valor para guardar los registros en CACHEIVL cuando se invoca la API de REST de invalidación search/admin/resources/index/cache/invalidate.

A fin de establecer la configuración para la invalidación de la memoria caché después de crear el índice de búsqueda, edite el archivo de configuración personalizada workspace_dir/search-config-ext/src/runtime/config/com.ibm.commerce.search/wc-component.xml. Añada las siguientes propiedades, guarde y salga del archivo.
<_config:property name="CacheInvalidationForCatalogEntry" value="productId:$catEntryId$,CategoryDisplay:storeId:categoryId:$storeId$:$catGroupId$" />
<_config:property name="CacheInvalidationForCatalogGroup" value="CategoryDisplay:storeId:categoryId:$storeId$:$catGroupId$" />
<_config:property name="CacheInvalidationForStoreHeader"value="StoreHeader:storeId:catalogId:$storeId$:$catalogId$,StoreHeader:storeId:$storeId$" />