¿Cómo utilizar Varnish para pruebas A/B y lanzamiento de funciones?

¿Cómo utilizar Varnish para pruebas A/B y lanzamiento de funciones?

Hoy tenemos nuestra capa web expuesta al mundo. Nos gustaría agregar Varnish delante de nuestra capa web para acelerar el sitio y reducir las llamadas al backend. Sin embargo, tenemos algunas preocupaciones y me preguntaba cómo las aborda la mayoría de la gente:

  1. Pruebas A/B: ¿Cómo se prueban dos "versiones" de cada página y se comparan? Quiero decir, ¿cómo sabe el barniz qué página mostrar? ¿Si y cómo se guardan versiones separadas en cada página?

  2. Implementación de funciones: ¿cómo configuraría un mecanismo de implementación de funciones simple? Digamos que quiero abrir una nueva función/página para solo el 10% del tráfico... y luego aumentarla al 20%.

  3. ¿Cómo maneja las implementaciones de código? ¿Purgas todo el caché de barniz en cada implementación? (Tenemos implementaciones a diario). ¿O simplemente dejas que caduque lentamente (usando TTL)?

Cualquier idea y ejemplo sobre estos temas esmuy¡apreciado!

Respuesta1

Pruebas A/B: ¿Cómo se prueban dos "versiones" de cada página y se comparan? Quiero decir, ¿cómo sabe el barniz qué página mostrar? ¿Si y cómo se guardan versiones separadas en cada página?

Tienes varias opciones:

  • Simplemente expóngalos en diferentes URL.
  • Omita el caché de la URL específica. Puedes hacerlo regresando passen vcl_recv. Algo como esto:

    sub vcl_recv {
        if (req.url ~ "^/path/to/document") {
            return (pass);
        }
    }
    
  • Purgue explícitamente el caché cuando exponga una nueva versión.

Implementación de funciones: ¿cómo configuraría un mecanismo de implementación de funciones simple? Digamos que quiero abrir una nueva función/página para solo el 10% del tráfico... y luego aumentarla al 20%.

No estoy seguro de que exista una forma "simple" de hacer esto. Dado que puede colocar Ccódigo arbitrario en sus .vclarchivos, probablemente podría agregar algo de lógica para elegir un número aleatorio y luego seleccionar la ruta de backend adecuada según el resultado.

¿Cómo maneja las implementaciones de código? ¿Purgas todo el caché de barniz en cada implementación? (Tenemos implementaciones a diario). ¿O simplemente dejas que caduque lentamente (usando TTL)?

Para cambios importantes simplemente purgamos el caché y para cambios más pequeños simplemente dejamos que caduquen.

información relacionada