Memcached es un sistema de almacenamiento en caché de memoria de propósito general. Esto significa que está diseñado para guardar (o almacenar en caché) las respuestas a las preguntas que tardan mucho tiempo en calcularse o recuperarse. y es probable que se les pregunte de nuevo . Un caso de uso común es acelerar el uso de una base de datos:por ejemplo, si esperamos necesitar la lista de "nombres de todas las personas que están en el equipo X" repetidamente, podríamos colocar estos datos en Memcached en lugar de ejecutar una consulta SQL. cada vez. (Nota:Memcached se conoce ocasionalmente como "memcache". Nos ceñiremos al nombre completo a lo largo de este artículo).
Los cachés son útiles para crear aplicaciones e infraestructura escalables, lo cual es fundamental para ser un ingeniero de confiabilidad del sitio (SRE). Este artículo analiza lo que se necesita para operar Memcached de manera efectiva.
Recomendaciones de memoria y demonización de Memcached
Memcached funciona mejor cuando está limitado a la cantidad de memoria que el sistema tiene disponible: desalojará datos cuando ocupa más espacio que el límite de memoria. Se necesitará algo de espacio de memoria para lo que podemos llamar "sobrecarga":la memoria necesaria para las operaciones administrativas de Memcached, el sistema operativo y los procesos auxiliares.
Más contenido excelente
- Curso en línea gratuito:Descripción general técnica de RHEL
- Aprender comandos avanzados de Linux
- Descargar hojas de trucos
- Encuentre una alternativa de código abierto
- Lea el contenido principal de Linux
- Consulte los recursos de código abierto
Esto se establece a través de -m indicador de línea de comandos, que es probablemente el único indicador que necesitará para ejecutar Memcached. La -d El indicador (daemonize) generalmente no es útil:en los sistemas operativos modernos basados en systemd, Memcached no debería demonizarse a sí mismo. Del mismo modo, si lo ejecuta bajo Docker, tampoco debería demonizarse a sí mismo.
Ejecutar Memcached en un contenedor está bien, pero es importante considerar qué más se ejecuta en el host y ajustar cuidadosamente los requisitos de memoria.
Mirando los datos de Memcached con estadísticas
Cuando está ejecutando Memcached, a menudo es una buena idea conectarse directamente y jugar para ver qué está pasando. Es razonablemente seguro, incluso con instancias de producción, siempre que tenga un poco de cuidado.
El comando más seguro para ejecutar es stats . Hará que Memcached escupa una gran cantidad de estadísticas y detalles que suelen ser útiles:
$ echo stats | nc localhost 11211
...
STAT uptime 1346
...
STAT max_connections 1024
STAT curr_connections 2
STAT total_connections 6
STAT rejected_connections 4
...
STAT get_hits 0
STAT get_misses 0
STAT get_expired 0
...
END
Las estadísticas más interesantes suelen ser "aciertos", "errores" y "caducados". A menudo, estos pueden contar una historia interesante sobre cuán efectivo es el caché. Si se reduce la eficacia, esto es motivo de preocupación, ya que podría degradar el rendimiento de la aplicación.
Una cosa un poco menos segura para probar es almacenar y recuperar. Esta es una buena manera de "patear los neumáticos" y aprender cómo funciona:
$ echo stats | nc localhost 11211
set my_key 0 0 8
my_value^M
STORED
get my_key
VALUE my_key 0 8
my_value
END
Después de escribir my_value , debe enviar un final de línea al estilo DOS:retorno y nueva línea. Esto se hace en una consola Linux usando Ctrl+V y luego presionando Enter , que generará el return carácter (ASCII 13), y luego presione Enter como de costumbre para generar la nueva línea carácter (ASCII 10).
El primer 0 es para "metadatos" y pasa 0 significa que no hay metadatos interesantes. Se trata como una máscara de bits, por lo que 0 tiene todos los bits desactivados. El segundo 0 es por tiempo de caducidad. Significa "no caducan". En general, esto está bien para las pruebas. En la configuración de producción, es bueno establecer un tiempo de caducidad para las claves.
Si se trata de una instancia importante, se debe tener cuidado de no sobrescribir una clave importante. Sin embargo, la capacidad de almacenar y recuperar rápidamente a través de la línea de comandos permite asegurarse de que Memcached se está ejecutando correctamente.
Compartir Memcached como servicio
Tenga en cuenta que en una configuración moderna de microservicios, muchos servicios querrán guardar datos en Memcache, y vale la pena idear una estrategia para administrar eso. Una opción es ejecutar Memcache o un clúster por servicio. Sin embargo, esto es a menudo complicado y de alto mantenimiento. A menudo, lo correcto es hacer que los servicios compartan un Memcache. En ese caso, es una buena idea implementar algunas políticas razonables; por ejemplo, obligar a anteponer el nombre del servicio a la clave. Esto permite verificar qué servicios usan cuánto espacio usando el cachedump comando:
$ echo 'stats items' | nc -w 1 localhost 11211|grep ':number '
STAT items:1:number 2
Este comando mostrará todos los ID de "losa". Memcache almacena claves de tamaño similar en losas; este ejemplo tiene solo una losa:
$ echo 'stats cachedump 1 1000' | nc -w 1 localhost 11211
ITEM my_key [8 b; 0 s]
ITEM foo [5 b; 0 s]
END
Aquí hay dos claves:una con un valor de 8 bytes y otra con un valor de 5 bytes.
En un escenario más realista con muchas claves, es posible que desee procesar estos datos con awk o un script y, utilizando una convención local, averigüe cuánto espacio está usando cada servicio.
Esto se puede integrar en un sistema de monitoreo, como Prometheus, para rastrear el comportamiento a lo largo del tiempo.
Además, dado que muchos equipos comparten el mismo servicio, es una guía útil sugerir que los servicios cifren y autentican los datos que están almacenando en caché. El cifrado simétrico en las CPU modernas es eficaz y esto permite modelos de seguridad mucho más simples. Un ejemplo de una biblioteca que admite esto es Fernet de criptografía. (Déjame saber en los comentarios si quieres leer más sobre esto).
Conclusión
Memcached es una tecnología de código abierto común que admite un SRE. En este artículo, observé cómo consultar estadísticas comunes al respecto, ofrecí algunos consejos de configuración y mostré cómo ayudar a varios equipos a compartir un solo clúster de Memcached de una manera fácil de monitorear y segura. ¿Tienes otras preguntas sobre cómo administrar Memcached? Pregunta en los comentarios y con gusto compartiré más consejos.