Présentation du serveur de cache nuster

https://github.com/jiangwenyuan/nuster

Nuster est un serveur de cache rapide.

Les spécifications sont susceptibles d'être modifiées, la dernière est donc [https://github.com/jiangwenyuan/nuster/blob/master/README.md](https://github.com/jiangwenyuan/nuster/blob/ Voir master / README.md).

introduction

Nuster est un serveur de cache développé basé sur HAProxy et est compatible avec HAProxy. Et vous pouvez définir des règles de cache détaillées à l'aide de l'ACL de HAProxy.

Performance

Très tôt

Résultats des tests 3 fois plus que nginx pour un seul cœur, 2 fois plus que nginx pour le multi-cœur et 3 fois plus que le vernis était là.

Cliquez ici pour plus de détails (https://github.com/jiangwenyuan/nuster/wiki/Web-cache-server-performance-benchmark:-nuster-vs-nginx-vs-varnish-vs-squid).

Installation

make TARGET=linux2628
make install

Voir HAProxy README (README)

Comment utiliser

Définissez nuster cache on dans la section ** global ** et dans les sections ** backend ** et ** listen ** Définir également la règle nuster

Directif

cache

syntax: nuster cache on|off [share on|off] [data-size size] [dict-size size] [purge-method method]

default: none

context: global

Décidez si vous souhaitez utiliser le cache.

La taille maximale du cache peut être définie avec ** data-size ** dans les unités «m», «M», «g» et «G».

La valeur par défaut est 1 Mo et le minimum est 1 Mo. Seul le contenu de la réapparition est calculé.

nuster cache

syntax: nuster cache [on|off]

default: on

context: backend, listen

Définissez un filtre de cache. Vous devez également définir cache-rule.

Il peut être contrôlé indépendamment en allumant et éteignant.

Si vous avez plusieurs filtres, placez le filtre de cache en dernier.

nuster-rule

syntax: nuster-rule name [key KEY] [ttl TTL] [code CODE] [if|unless condition]

default: none

context: backend, listen

Définissez une règle de cache. S'il y a plusieurs règles, définissez l'ordre avec soin. Si vous pouvez correspondre, cela s'arrêtera.

acl pathA path /a.html
nuster cache
nuster-rule all ttl 3600
nuster-rule path01 ttl 60 if pathA

path01 n'est pas exécuté car toutes ont mis en cache toutes les demandes

name

Définissez un nom

key KEY

Définissez la clé en vous connectant avec «.» Avec les mots-clés suivants.

La clé par défaut est method.scheme.host.path.query.body

Example

GET http://www.example.com/q?name=X&type=Y

http header:
GET /q?name=X&type=Y HTTP/1.1
Host: www.example.com
ASDF: Z
Cookie: logged_in=yes; user=nuster;

Générez les éléments suivants:

ので、ディフォルトkeyはGEThttpwww.example.com/qname=X&type=Yで、 key method.scheme.host.path.header_ASDF.cookie_user.param_type est GEThttpwww.example.com/qZnusterYになる。

Si le cache a la même clé que la requête, le cache est renvoyé.

ttl TTL

Définissez une vie. Les unités sont «d», «h», «m» et «s», et la valeur par défaut est «3600» secondes. S'il vaut «0», il n'expirera pas.

code CODE1,CODE2...

La valeur par défaut ne met en cache que 200 réponses, si vous souhaitez mettre en cache autre chose Définir. Dans le cas de «tous», tous sont mis en cache.

nuster-rule only200
nuster-rule 200and404 code 200,404
nuster-rule all code all

if|unless condition

Utilisez HAProxy ACL. See 7. Using ACLs and fetching samples section in HAProxy configuration

FAQ

méthode de débogage?

Définissez debug sur global ou démarrez haproxy avec -d.

Les messages concernant le cache incluent «[CACHE]».

Comment mettre en cache les requêtes POST?

ʻSet option http-buffer-request`

Entrez body pour la clé personnalisée.

Le corps du POST peut être incomplet, donc ** option http-buffer-request ** Voir la section dans [Configuration HAProxy](doc / configuration.txt)

Il peut être préférable d'installer un backend pour POST seul

Example

global
    nuster cache on data-size 100m
    #daemon
    ## to debug cache
    #debug
defaults
    retries 3
    option redispatch
    timeout client  30s
    timeout connect 30s
    timeout server  30s
frontend web1
    bind *:8080
    mode http
    acl pathPost path /search
    use_backend app1a if pathPost
    default_backend app1b
backend app1a
    balance roundrobin
    # mode must be http
    mode http

    # http-buffer-request must be enabled to cache post request
    option http-buffer-request

    acl pathPost path /search

    # enable cache for this proxy
    nuster cache on

    # cache /search for 120 seconds. Only works when POST/PUT
    nuster-rule rpost ttl 120 if pathPost

    server s1 10.0.0.10:8080
backend app1b
    balance     roundrobin
    mode http

    nuster cache on

    # cache /a.jpg, not expire
    acl pathA path /a.jpg
    nuster-rule r1 ttl 0 if pathA

    # cache /mypage, key contains cookie[userId], so it will be cached per user
    acl pathB path /mypage
    nuster-rule r2 key method.scheme.host.path.query.cookie_userId ttl 60 if pathB

    # cache /a.html if response's header[cache] is yes
    http-request set-var(txn.pathC) path
    acl pathC var(txn.pathC) -m str /a.html
    acl resHdrCache1 res.hdr(cache) yes
    nuster-rule r3 if pathC resHdrCache1

    # cache /heavy for 100 seconds if be_conn greater than 10
    acl heavypage path /heavy
    acl tooFast be_conn ge 100
    nuster-rule heavy ttl 100 if heavypage tooFast 

    # cache all if response's header[asdf] is fdsa
    acl resHdrCache2 res.hdr(asdf)  fdsa
    nuster-rule resCache ttl 0 if resHdrCache1

    server s1 10.0.0.10:8080

frontend web2
    bind *:8081
    mode http
    default_backend app2
backend app2
    balance     roundrobin
    mode http

    # disable cache on this proxy
    nuster cache off
    nuster-rule all

    server s2 10.0.0.11:8080

listen web3
    bind *:8082
    mode http

    nuster cache
    nuster-rule everything

    server s3 10.0.0.12:8080

Recommended Posts

Présentation du serveur de cache nuster
Construire un serveur de cache Pypi sur QNAP