una importante versión del sistema de almacenamiento en caché de datos en memoria , que opera con datos en formato clave/valor y se caracteriza por su facilidad de uso. Memcached se utiliza comúnmente como una solución liviana para acelerar el funcionamiento de sitios web de alta carga mediante el almacenamiento en caché del acceso a bases de datos y datos intermedios. Código bajo licencia BSD.
En la nueva versión se estabilizó la implementación del almacén "", que ahora se compila por defecto (para deshabilitarlo, el script configure ofrece la opción "--disable-extstore"), pero requiere activación explícita al iniciar (las instalaciones antiguas continuarán funcionando sin cambios tras la actualización). A pesar de que en general el almacén "extstore" se considera estable, se recomienda tener precaución al implementarlo en sistemas muy grandes.
Extstore permite utilizar unidades SSD/Flash para aumentar el tamaño de la caché. Al igual que con la memoria RAM, el almacenamiento en Flash no es persistente y se reinicia al reiniciar. Se menciona como aplicación del nuevo modo la posibilidad de un cacheo efectivo de datos de gran tamaño. Al usar "extstore", las claves y los metadatos, como antes, se almacenan solo en memoria, pero los datos grandes asociados a las claves, cuyo tamaño excede el umbral establecido, se guardan en el almacenamiento externo, dejando solo un puntero en la RAM.
Si se vinculan datos de pequeño tamaño con la clave, Memcached funciona como de costumbre, manteniendo los datos en memoria y sin acceder al almacenamiento externo. Si hay suficiente memoria libre, los datos más solicitados pueden permanecer completamente en la caché en memoria (por ejemplo, se puede indicar que solo los objetos mayores de 1024 bytes, que no se han accedido en 3600 segundos, se escriban en Flash).
La implementación está optimizada para proporcionar el máximo rendimiento y la mínima carga en el CPU, a expensas de la eficiencia del almacenamiento (alto nivel de fragmentación). Para prolongar la vida útil de las unidades Flash, los datos se almacenan en búfer y se escriben en el almacenamiento de manera secuencial. Para mantener el estado de la caché entre reinicios, se puede utilizar la nueva función introducida en la versión 1.5.18 que permite escribir un volcado de la caché en un archivo. En el próximo inicio, se puede restaurar la caché desde este archivo para evitar picos de carga en los procesadores de contenido debido a la falta de caché (la caché se vuelve "caliente" de inmediato).
El segundo cambio importante en Memcached 1.6 fue la reestructuración del código para la interacción en red, que se adapta para manejar automáticamente las solicitudes por lotes dentro de una única llamada al sistema. Anteriormente, al enviar varios comandos 'GET' en un solo paquete TCP, memcached devolvía los resultados realizando llamadas al sistema por separado. En Memcached 1.6, las respuestas se agregan y se devuelven mediante el envío de una única llamada al sistema. Como resultado, ahora hay un promedio de 1.5 claves por llamada al sistema, lo que demuestra en pruebas una reducción de la carga en la CPU de hasta el 25% y una reducción de la latencia en varios por ciento.
La reestructuración del subsistema de red también permitió pasar a la asignación dinámica de búferes según sea necesario, en lugar de la asignación estática de búferes. Esta optimización redujo el consumo de memoria en espera de nuevos comandos a través de la conexión establecida por el cliente, de 4.5 KB a 400-500 bytes, y también eliminó muchas llamadas a malloc, realloc y free, que provocaban fragmentación innecesaria de la memoria en sistemas con un gran número de conexiones. Cada hilo de trabajo ahora maneja su propio grupo de búferes para lectura y escritura para las conexiones activas de los clientes. Para ajustar el tamaño de estos búferes,
se prevén las opciones '-o resp_obj_mem_limit=N' y '-o read_buf_mem_limt=N'.
En la rama 1.6 también se anunció la degradación del de interacción con el servidor. El mantenimiento del protocolo binario y la corrección de errores continuará, pero nuevas funcionalidades y actualizaciones de funciones existentes no se trasladarán. continuará su desarrollo sin cambios. El nuevo protocolo (versión textual del protocolo con comandos meta compactos), que demuestra una combinación óptima de rendimiento y fiabilidad. El nuevo protocolo abarca todas las operaciones anteriormente disponibles a través de los protocolos textual y binario.
Fuente: opennet.ru
