Memcache (d) frente a Varnish para acelerar la arquitectura web de 3 niveles

111

Estoy tratando de acelerar mi punto de referencia (arquitectura web de 3 niveles) y tengo algunas preguntas generales relacionadas con Memcache (d) y Varnish.

  • ¿Cuál es la diferencia?
    Me parece que Varnish está detrás del servidor web, almacenando páginas web en caché y no requiere cambios en el código, solo configuración.
    Por otro lado, Memcached es un sistema de almacenamiento en caché de propósito general y se usa principalmente para almacenar en caché el resultado de la base de datos y requiere un cambio en el getmétodo (primera búsqueda de caché).

  • ¿Puedo usar ambos? ¿Barniz en el servidor web frontal y Memcached para el almacenamiento en caché de la base de datos?

  • ¿Cuál es una mejor opción?

    (escenario 1 - principalmente escritura,
    escenario 2 - principalmente lectura,
    escenario 3 - lectura y escritura son similares)

usuario449219
fuente

Respuestas:

269
  • El barniz está delante del servidor web; funciona como un proxy http inverso que almacena en caché.
  • Puedes usar ambos.
  • Principalmente escritura: Varnish deberá tener las páginas afectadas purgadas. Esto resultará en una sobrecarga y pocos beneficios para las páginas modificadas.
  • Principalmente leído: el barniz probablemente cubrirá la mayor parte.
  • Lectura y escritura similares: Varnish le proporcionará muchas de las páginas, Memcache proporcionará información para las páginas que tienen una combinación de datos nuevos y conocidos, lo que le permitirá generar páginas más rápido.

Un ejemplo que podría aplicarse a stackoverflow.com: agregar este comentario invalidaba la caché de la página, por lo que esta página tendría que borrarse de Varnish (y también de mi página de perfil, que probablemente no vale la pena almacenar en caché para empezar. Recordando invalidar todo las páginas afectadas pueden ser un problema). Sin embargo, todos los comentarios todavía están en Memcache, por lo que la base de datos solo tiene que escribir este comentario. La base de datos no necesita hacer nada más para generar la página. Memcache extrae todos los comentarios y la página se vuelve a grabar hasta que alguien la afecta nuevamente (tal vez votando mi respuesta). Una vez más, la base de datos escribe el voto, todos los demás datos se extraen de Memcache y la vida es rápida.

Memcache evita que su base de datos haga mucho trabajo de lectura, Varnish salva su servidor web dinámico de la carga de la CPU al hacer que genere páginas con menos frecuencia (y también aligera un poco la carga de la base de datos si no es para Memcache).

Jeff Ferland
fuente
3
esto: "(tal vez votando mi respuesta)" me hizo votar a favor de su respuesta
Cesc
por lo que no se recomienda a sitios como stackoverflow (o sitios como Facebook con página de alimentación de actividades) utilizar barniz. ¿Lo es?
Mohammad Reza Esmaeilzadeh
@jbferland Mi pregunta en su ejemplo es que la parte superior de esta página tiene una foto mía con la cantidad de puntos que he recibido, ¿cómo podemos almacenar en caché con Varnish pero mostrar esa área dinámica?
Hossj
@Hossj usando etiquetas ESI.
Johny Pie
El barniz puede estar delante de un servidor web pero también detrás del servidor web. También puede estar al mismo tiempo delante y detrás del mismo servidor web ;-) Por ejemplo, Varnish no es compatible con SSL, por lo que no es raro tener un servidor web delante de Varnish para manejar HTTPS. Luego, el tráfico se envía a Varnish, que luego se comunica con el servidor web de la aplicación, que puede ser el mismo servidor que el que maneja el tráfico HTTPS.
Matt
32

Mi experiencia proviene del uso de Varnish con Drupal. En términos tan simples como sea posible, así es como respondería:

En general, Varnish funciona para tráfico no autenticado (a través de cookies) y Memcached almacenará en caché el tráfico autenticado.

Así que usa ambos.

Joe Hyde
fuente
5
Lo lograste, por cierto, creo que Varnish funciona mejor en el almacenamiento en caché de usuarios anónimos ...
Allan Jikamu