Configuración ideal de Barniz & nginx para garantizar la coinheritance del caching en múltiples instancias

Buscando la configuration ideal que implica nginx como nuestro equilibrador de carga de la capa superior que distribuye la carga a través de múltiples instancias de Barniz.

¿Cuál es la mejor manera de distribuir esta carga? Una forma sería simplemente distribuir uniformemente entre instancias u otra para distribuir la carga en function del patrón de URL de la request. ¿Hay una mejor práctica para esto?

También – tenemos una situación en la que tendremos que manualmente (desde el backend) purgar elementos específicos de nuestros cachings. ¿Es la forma más efectiva de hacer esto simplemente para emitir una pequeña petición HTTP "PURGE" a cada una de nuestras instancias de Varnish?

    One Solution collect form web for “Configuración ideal de Barniz & nginx para garantizar la coinheritance del caching en múltiples instancias”

    ¿Cuál es la mejor manera de distribuir esta carga? Una forma sería simplemente distribuir uniformemente entre instancias u otra para distribuir la carga en function del patrón de URL de la request. ¿Hay una mejor práctica para esto?

    Depende. Dos razones por las que desearía basar la distribución en algo así como un hash de URL:

    1. Tamaño del caching. Si está almacenando en caching suficientes datos en general para llenar el caching de un backend dado, ayudaría a que una determinada URL siempre llegara al mismo backend, para distribuir el almacenamiento de datos de caching entre backends en lugar de almacenar duplicates.
    2. Velocidad de una request perdida / duración de la caching. Si el cliente solicita la falta de caching es un problema y la caching no dura mucho time, probablemente obtendrá less errores si una determinada pieza de contenido siempre golpea un server dado de Barniz.

    También – tenemos una situación en la que tendremos que manualmente (desde el backend) purgar elementos específicos de nuestros cachings. ¿Es la forma más efectiva de hacer esto simplemente para emitir una pequeña petición HTTP "PURGE" a cada una de nuestras instancias de Varnish?

    Eso funciona, pero deja al siguiente solicitante del contenido con una caching potencialmente lenta. Una alternativa es usar req.hash_always_miss de Varnish para forzar una actualización de un recurso en la caching en lugar de simplemente invalidarla, por lo que una request desde fuera no se verá forzada a perder.

    Así que algo como esto en vcl:

     acl purge { "localhost"; } sub vcl_recv { /* add this into your existing config: */ if (req.http.X-Varnish-Nuke == "1" && client.ip ~ purge) { set req.hash_always_miss = true; } } 

    A continuación, una request con ese set de encabezado forzará una request de backend para actualizar el contenido en la caching (con curl o wget, --header "X-Varnish-Nuke: 1" ).

    El linux y los temas del servidor de Windows, como ubuntu, centos, apache, nginx, debian y consejos de red.