Memcache API e Integración

Integración de backend de caché de alto rendimiento utilizando las extensiones PECL memcache o memcached para el sistema de caché de Drupal.

memcache
44,499 sites
58
drupal.org

Install

Drupal 11, 10, 9 v8.x-2.7
composer require 'drupal/memcache:8.x-2.7'
Drupal 8 v8.x-2.3
composer require 'drupal/memcache:8.x-2.3'

Overview

El módulo Memcache API e Integración proporciona un backend de caché de alto rendimiento para Drupal que almacena los datos en caché en servidores memcache en lugar de la base de datos. Esto mejora significativamente el rendimiento del sitio al descargar las operaciones de caché de la base de datos a servidores de caché dedicados basados en memoria.

El módulo soporta tanto las extensiones PHP PECL memcache como memcached, con detección y selección automática. Implementa la interfaz CacheBackendInterface de Drupal para una integración perfecta con el sistema de caché de Drupal, e incluye una implementación de backend de bloqueo para bloqueo distribuido entre múltiples servidores web.

Las características arquitectónicas clave incluyen soporte para múltiples servidores memcache organizados en clústeres, división automática de elementos de caché grandes (más de 470KB) en fragmentos, invalidación de etiquetas de caché usando marcas de tiempo almacenadas en memcache, y prefijos de clave configurables para implementaciones multi-sitio que comparten instancias de memcache.

El submódulo Memcache Admin incluido proporciona una interfaz completa para monitorear las estadísticas del servidor memcache, incluyendo ratios de aciertos/fallos, uso de memoria, información de conexión y detalles de operaciones de caché por solicitud.

Features

  • Implementa la interfaz CacheBackendInterface de Drupal para reemplazo transparente del backend de caché
  • Soporta extensiones PHP PECL memcache y memcached con detección automática
  • Soporte multi-servidor con agrupación de servidores para aislamiento de bins de caché
  • División automática de elementos grandes para elementos de caché que exceden 470KB
  • Invalidación de etiquetas de caché basada en marcas de tiempo almacenadas en memcache (modo opcional sin base de datos)
  • Implementación de backend de bloqueo para bloqueo distribuido usando memcache
  • Configuración de prefijo de clave para múltiples sitios Drupal que comparten servidores memcache
  • Algoritmo de hash de clave configurable (predeterminado: sha1) para claves que exceden 250 bytes
  • Soporte para conexiones Unix socket a servidores memcache
  • Soporte de conexión persistente para la extensión memcache
  • Soporte de autenticación SASL para conexiones memcached seguras
  • Anulación del contenedor de arranque para usar memcache durante el arranque temprano de Drupal
  • Modo de depuración para registrar todas las operaciones de memcache
  • Soporte de proxy Mcrouter para recopilación de estadísticas
  • Visualización de estadísticas por página mostrando operaciones de caché, aciertos y fallos
  • Informe detallado de estadísticas del servidor con capacidades de inspección de slabs

Use Cases

Caché para sitios web de alto tráfico

Reemplace el caché de base de datos con memcache para sitios Drupal de alto tráfico. Configure memcache como el backend de caché predeterminado para eliminar cuellos de botella de la base de datos. Establezca $settings['cache']['default'] = 'cache.backend.memcache' en settings.php. Esto descarga todas las lecturas y escrituras de caché de la base de datos a servidores memcache dedicados, reduciendo significativamente la carga de la base de datos y mejorando los tiempos de respuesta.

Entorno multi-servidor con balanceo de carga

Implemente memcache para sitios Drupal que se ejecutan en múltiples servidores web detrás de un balanceador de carga. Todos los servidores web se conectan a servidores memcache compartidos, asegurando consistencia de caché en todo el clúster. Configure el backend de bloqueo para usar memcache para bloqueo distribuido: agregue la anulación del servicio de bloqueo de example.services.yml para prevenir condiciones de carrera durante las reconstrucciones de caché.

Separar bins de caché por importancia

Enrute diferentes bins de caché a clústeres memcache dedicados según la importancia y patrones de acceso. Por ejemplo, enrute los bins 'render' y 'page' a un clúster más grande y dedicado mientras mantiene bins menos críticos en un clúster más pequeño. Configure usando $settings['memcache']['bins'] = ['render' => 'cluster_render', 'page' => 'cluster_render', 'default' => 'default'].

Multi-sitio Drupal con memcache compartido

Comparta servidores memcache entre múltiples sitios Drupal manteniendo el aislamiento de caché. Configure prefijos de clave únicos para cada sitio: $settings['memcache']['key_prefix'] = 'site1'; Esto asegura que las claves de caché de cada sitio tengan espacio de nombres y no colisionen con otros sitios que comparten la misma infraestructura memcache.

Arranque sin base de datos

Configure Drupal para usar memcache durante el arranque temprano antes de que la base de datos esté disponible. Esto elimina consultas a la base de datos durante la inicialización del contenedor de caché. Implemente la definición del contenedor de arranque del README.md en settings.php usando la invalidación de etiquetas de caché respaldada por base de datos (modo híbrido) o el modo memcache puro con la anulación del servicio TimestampCacheTagsChecksum.

Monitoreo de rendimiento y depuración

Habilite el submódulo memcache_admin para monitorear el rendimiento de caché y depurar problemas de caché. Habilite las estadísticas por página en la configuración de administración para ver operaciones de caché en tiempo real incluyendo aciertos, fallos y tiempos para cada solicitud. Use los informes en /admin/reports/memcache para ver la salud del servidor, uso de memoria y ratios de aciertos en todos los servidores configurados.

Tips

  • Para implementaciones de producción, use la extensión PECL memcached sobre memcache ya que soporta más características y se mantiene activamente.
  • Habilite la compresión con Memcached::OPT_COMPRESSION => TRUE para almacenar más datos en la memoria disponible.
  • Use hash consistente (Memcached::OPT_DISTRIBUTION => Memcached::DISTRIBUTION_CONSISTENT) para minimizar la invalidación de caché al agregar o eliminar servidores.
  • Configure clústeres memcache separados para cachés render/page vs otros bins para optimizar la asignación de memoria para diferentes patrones de acceso.
  • Cuando use múltiples sitios Drupal, siempre establezca valores key_prefix únicos para prevenir colisiones de claves de caché.
  • Monitoree las tasas de expulsión en las estadísticas de administración - expulsiones altas indican asignación de memoria insuficiente.
  • Para máximo rendimiento, implemente la definición del contenedor de arranque para usar memcache durante el arranque temprano de Drupal.
  • Use sockets Unix en lugar de TCP para conexiones locales a memcached para reducir la sobrecarga de red.

Technical Details

Admin Pages 5
Configuración de Memcache Admin /admin/config/system/memcache

Página de configuración para el módulo Memcache Admin. Controla si las estadísticas de memcache por página se muestran en la parte inferior de cada página para usuarios con los permisos apropiados.

Estadísticas de Memcache /admin/reports/memcache

Muestra estadísticas completas para todos los servidores memcache configurados. Muestra la versión del controlador PECL en uso, lista todos los endpoints de servidor configurados con sus bins de caché asignados, y proporciona tablas de estadísticas detalladas incluyendo tiempo de actividad, uso de memoria, conteos de conexiones, ratios de aciertos/fallos de caché, expulsiones y métricas de rendimiento. Enlaces a estadísticas de servidores individuales para análisis más profundo.

Estadísticas de Memcache - Clúster /admin/reports/memcache/{cluster}

Muestra estadísticas para un clúster memcache específico, mostrando datos para todos los servidores en ese clúster.

Estadísticas de Memcache - Servidor /admin/reports/memcache/{cluster}/{server}

Muestra estadísticas sin procesar para un servidor memcache específico. Proporciona navegación para ver diferentes tipos de estadísticas (default, slabs, items, sizes) cuando se usa la extensión Memcache. Muestra pares propiedad/valor para todas las métricas del servidor.

Estadísticas de Memcache - Volcado de caché del slab /admin/reports/memcache/{cluster}/{server}/{type}/cachedump/{slab}

Muestra el contenido de un slab memcache específico, mostrando claves en caché con sus tamaños y tiempos de expiración. Requiere el permiso 'access slab cachedump'. Solo disponible con la extensión Memcache.

Permissions 2
Acceder a estadísticas de memcache

Permite a los usuarios ver las estadísticas de memcache en la página de informes y ver las estadísticas por página cuando están habilitadas. Este es un permiso estándar sin restricciones de seguridad especiales.

Acceder al volcado de caché del slab de memcache

Permite a los usuarios ver el contenido de slabs memcache individuales, incluyendo claves en caché y sus metadatos. Este es un permiso restringido porque puede exponer datos de caché potencialmente sensibles.

Troubleshooting 6
Mensaje de error al establecer clave

Actualice su biblioteca PECL memcache a la versión 2.2.1 o superior. También verifique que la compresión zlib a nivel de php.ini no esté en conflicto con memcache (ver http://drupal.org/node/273824).

SERVER_ERROR objeto demasiado grande para caché

Modifique el archivo de configuración de memcached (/etc/memcached.conf) para aumentar el tamaño máximo de elemento: --max-item-size=5M. El predeterminado es 1MB que puede ser insuficiente para algunos elementos en caché.

Error de extensión memcache no encontrada

Instale la extensión PHP PECL memcache o memcached. Para la mayoría de sistemas: pecl install memcache o pecl install memcached. Asegúrese de que la extensión esté habilitada en php.ini.

Inconsistencia de caché con múltiples servidores

Habilite la distribución de hash consistente. Para PECL memcache: establezca memcache.hash_strategy=consistent en php.ini. Para PECL memcached: este es el predeterminado, pero puede establecerse explícitamente via $settings['memcache']['options'][Memcached::OPT_DISTRIBUTION] = Memcached::DISTRIBUTION_CONSISTENT.

Errores de conexión rechazada o tiempo de espera

Verifique que el demonio memcached esté ejecutándose (systemctl status memcached). Compruebe las reglas del firewall si memcached está en un servidor remoto. Verifique que el host:port configurado coincida con la configuración del demonio memcached.

Las estadísticas no se muestran en admin

Asegúrese de tener el permiso 'access memcache statistics'. Si ve estadísticas por página, habilite la opción en /admin/config/system/memcache. Note que las estadísticas no se muestran para usuarios anónimos.

Security Notes 4
  • El permiso 'access slab cachedump' puede exponer datos sensibles en caché incluyendo información de sesión y datos de usuario. Otorgue este permiso solo a administradores de alta confianza.
  • La autenticación SASL debe habilitarse para servidores memcached accesibles a través de redes no confiables para prevenir acceso no autorizado.
  • Memcached no tiene control de acceso integrado más allá de la seguridad a nivel de red. Asegúrese de que los puertos de memcached estén protegidos por firewall apropiadamente.
  • Los datos en caché se almacenan sin cifrar en memoria. No almacene datos altamente sensibles en bins de caché sin cifrado adicional.