Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
VMOD_XKEY(3)		    Library Functions Manual		    VMOD_XKEY(3)

NAME
     vmod_xkey - Surrogate keys support for Varnish Cache

SYNOPSIS
	import xkey [as name] [from "path"]

	INT purge(STRING keys)

	INT softpurge(STRING keys)

DESCRIPTION
     PLEASE  NOTE  that this VMOD is currently in maintenance mode and has known
     performance issues, particularly regarding scalability, which will  not  be
     addressed	in  this  implementation. For a more robust solution with proven
     scalability, improved syntax support, and proper  softpurge  functionality,
     consider using yKey, included in Varnish Enterprise.

     This  vmod  adds  secondary hashes to objects, allowing fast purging on all
     objects with this hash key.

     You can use this to indicate relationships, a bit like a "tag". Then  clear
     out  all  object that have this tag set. Two good use cases are news sites,
     where one might add all the stories mentioned on a particular page by arti-
     cle ID, letting each article referenced create an xkey header.

     Similarly with an e-commerce site, where various SKUs are often  referenced
     on a page.

     Hash  keys  are specified in the xkey response header. Multiple keys can be
     specified per header line with spaces and/or commas as separators. Alterna-
     tively, they can be specified in multiple xkey response headers.

     Preferably the secondary hash keys are set from  the  backend  application,
     but the header can also be set from VCL in vcl_backend_response.

     VCL example:

	vcl 4.0;
	import xkey;

	backend default { .host = "192.0.2.11"; .port = "8080"; }

	acl purgers {
	    "203.0.113.0"/24;
	}

	sub vcl_recv {
	    if (req.method == "PURGE") {
		if (client.ip !~ purgers) {
		    return (synth(403, "Forbidden"));
		}
		if (req.http.xkey) {
		    set req.http.n-gone = xkey.purge(req.http.xkey);
		    # or: set req.http.n-gone = xkey.softpurge(req.http.xkey)

		    return (synth(200, "Invalidated "+req.http.n-gone+" objects"));
		} else {
		    return (purge);
		}
	    }
	}

   Example
     On  an e-commerce site we have the backend application issue an xkey header
     for every product that is referenced on that page. So the header for a cer-
     tain page might look like this:

	HTTP/1.1 OK
	Server: Apache/2.2.15
	xkey: 8155054
	xkey: 166412
	xkey: 234323

     Alternatively you may instead use a single header with space separated val-
     ues like xkey: 8155054 166412 234323.

     This requires a bit of VCL to be in place. The VCL can be found above.

     Then, in order to keep the web in sync with the database, a trigger is  set
     up  in  the  database. When an SKU is updated this will trigger an HTTP re-
     quest towards the Varnish server, clearing out every object with the match-
     ing xkey header:

	PURGE / HTTP/1.1
	Host: www.example.com
	xkey: 166412

     Several xkey-purge headers are also supported like in the response  example
     above,  and you may also here use a single header with space seperated val-
     ues like xkey-purge: 166412 234323.

     Unlike xkey header for responses, purge header  is  fully	configurable  by
     means of adjusting the name of the header in the VCL example above.

     Note  the	xkey  header. It is probably a good idea to protect this with an
     ACL so random people from the Internet cannot purge your cache.

     Varnish will find the objects and clear them out, responding with:

	HTTP/1.1 200 Purged
	Date: Thu, 24 Apr 2014 17:08:28 GMT
	X-Varnish: 1990228115
	Via: 1.1 Varnish

     The objects are now cleared.

   INT purge(STRING keys)
     Description
	    Purges all objects hashed on any key found	in  the  keys  argument.
	    Returns the number of objects that were purged.

	    The keys may contain a list of space-separated ids.

   INT softpurge(STRING keys)
     Description
	    Performs  a  "soft purge" for all objects hashed on any key found in
	    the keys argument.	Returns the number of objects that were purged.

	    A softpurge differs from a regular purge in that it  resets  an  ob-
	    ject's TTL but keeps it available for grace mode and conditional re-
	    quests for the remainder of its configured grace and keep time.

   Counters
   #
	varnish_vsc_begin:: xkey

a XKEY COUNTERS
	Metrics from vmod_xkey

     g_keys a gauge - info
	Number of surrogate keys

	Number of surrogate keys in use. Increases after a request that includes
	a new key in the xkey header. Decreases when a key is purged or when all
	cache objects associated with a key expire.

     g_hashhead_bytes a gauge - debug
	Bytes used by all xkey_hashhead objects

	Total bytes used by hashhead objects. Tracks linearly with the number of
	surrogate keys in use.

     g_ochead_bytes a gauge - debug
	Bytes used by all xkey_ochead objects

	Total bytes used by ochead objects. Increases when an object is added to
	a key or a key is added to an object. Decreases when the relationship is
	removed.

     g_oc_bytes a gauge - debug
	Bytes used by all xkey_oc objects

	Total  bytes  used  by	oc  objects.  Tracks linearly with the number of
	cached objects that are referenced by surrogate keys.

     g_bytes a gauge - info
	Bytes used by xkeys

	Current number of bytes used by xkeys and their references to the object
	cache.

								    VMOD_XKEY(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=vmod_xkey&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help