Aller au contenu

Varnish

Diagrammes d'état

Varnish Reference - States

Vocabulaire Varnish

Objets

Reference: Varnish User Guide - VCL variables

  • req: la requête incoming.
  • bereq: la requête que Varnish construit (à partir de req) pour appeler le backend.
  • resp: la réponse que Varnish construit pour le client
  • obj: l'objet (read-only) qui sera stocké en cache

Primitives

VSLIST: liste simplement chaînée. Pointer forward only. Removal lent O(n). Add à la fin. Utilisé pour les queues LIFO

VSTAILQ: liste simplement chaînée. Pareil que la VSLIST sauf qu'on peut ajouter aussi à l'arrière grâce à un pointer de start et un pointer de end.

VLIST: liste doublement chaînée. Removal rapide, ajout n'importe où.

VTAILQ: liste doublement chaînée. Removal n'importe où. Add n'importe où. Double pointeur.

La ban_list de varnish est une VTAILQ et son start pointer est la ban_head

Varnishadm

  • storage.list: comment Varnish stocke son cache (default: malloc)

BAN / ban list / ban lurker

BAN added. L'éviction mémoire est assurée dans 2 cas:

  • Si obj.* ==> le Ban Lurker thread nettoie la mémoire en asynchrone en fonction de sa conf
  • Si req.* ==> le Ban Lurker thread n'accède pas à req.*, l'éviction se fait donc quand une requête client fait un hit sur l'item. (donc uniquement pour les accès fréquents)

Ban lurker

Code source

Principal concern: resource usage du ban lurker.

  • ban_lurker_work: lit systématiqment la ban.list (oban, "object ban" dans le code)
    • ban_lurker_test_ban: réalise un test sur chaque item
    • ban_lurker_mark_completed: complete le ban si ok

tests_test vs test ne renvoient pas le meme amount

Parameters

  • ban_cutoff
  • ban_dups
  • ban_lurker_age
  • ban_lurker_batch
  • ban_lurker_holdoff
  • ban_lurker_sleep

Ban list

Lire la ban list: varnishadm > ban.list

Ex:

1624299594.240308     0 C
  • timestamp
  • number of objects
  • C = ??? / G = gone

Varnishlog

Principe du varnishlog: monter ce qui se passe à l'intérieur de Varnish sur le traitement d'une requête.

Types de logs:

  • << Request >>: requête provenant d'un client
  • << Session >>

Varnishtest

VTC: le langage pour écrire des testcases

Les erreurs de sytaxe ne seront pas indiquées, have fun.

varnishtest -n 1 toto.vtc

VTC minimal :

varnishtest "varnish est ton ami"

# Thread Backend
server s1 {} -start

# Process varnishd
varnish v1 -vcl+backend {} -start

# Thread Client
client c1 {} -run

varnish v1 -expect sljlsfjlsf

client c1 {}