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.
![](../images/Cache_Invalidation.png)
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.
Invalidación entre servidores de transacción
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.![](../images/Cache_Invalidation_TS.png)
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é".
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
.
![](../images/Cache_Invalidation_TS_toStore.png)
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.
![](../images/Cache_Invalidation_onSearch.png)
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.
<_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$" />