https://github.com/jiangwenyuan/nuster
Nuster ist ein schneller Cache-Server.
Die technischen Daten können sich ändern. Die neueste Version lautet https://github.com/jiangwenyuan/nuster/blob/master/README.md. Siehe master / README.md).
Nuster ist ein Cache-Server, der auf HAProxy basiert und mit HAProxy kompatibel ist. Mit der ACL von HAProxy können Sie detaillierte Cache-Regeln definieren.
Super früh
Testergebnisse 3-mal mehr als Nginx für Einzelkern, 2-mal mehr als Nginx für Mehrkern und 3-mal mehr als Lack war dort.
Klicken Sie hier für Details (https://github.com/jiangwenyuan/nuster/wiki/Web-cache-server-performance-benchmark:-nuster-vs-nginx-vs-varnish-vs-squid).
make TARGET=linux2628
make install
Siehe HAProxy README (README)
Definieren Sie "nuster cache on" im Abschnitt "** global ** und in den Abschnitten ** backend ** und ** listen ** Definieren Sie auch die Nuster-Regel
syntax: nuster cache on|off [share on|off] [data-size size] [dict-size size] [purge-method method]
default: none
context: global
Entscheiden Sie, ob Sie den Cache verwenden möchten.
Die maximale Cache-Größe kann mit ** Datengröße ** in den Einheiten m
, M
, g
und G
eingestellt werden.
Der Standardwert ist 1 MB und das Minimum ist 1 MB. Es wird nur der Inhalt des Respawns berechnet.
syntax: nuster cache [on|off]
default: on
context: backend, listen
Definieren Sie einen Cache-Filter. Sie müssen auch "Cache-Regel" definieren.
Sie kann unabhängig voneinander durch Ein- und Ausschalten gesteuert werden.
Wenn Sie mehrere Filter haben, setzen Sie den Cache-Filter zuletzt.
syntax: nuster-rule name [key KEY] [ttl TTL] [code CODE] [if|unless condition]
default: none
context: backend, listen
Definieren Sie eine Cache-Regel. Wenn es mehrere Regeln gibt, definieren Sie die Reihenfolge sorgfältig. Wenn Sie übereinstimmen können, wird es aufhören.
acl pathA path /a.html
nuster cache
nuster-rule all ttl 3600
nuster-rule path01 ttl 60 if pathA
path01
wird nicht ausgeführt, da alle alle Anforderungen zwischengespeichert haben
name
Definieren Sie einen Namen
key KEY
Definieren Sie den Schlüssel, indem Sie mit den folgenden Schlüsselwörtern eine Verbindung mit .
herstellen.
NAME
NAME
NAME
Der Standardschlüssel ist 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;
Generieren Sie Folgendes:
ので、ディフォルトkeyはGEThttpwww.example.com/qname=X&type=Y
で、
key method.scheme.host.path.header_ASDF.cookie_user.param_type
ist
GEThttpwww.example.com/qZnusterY
になる。
Wenn der Cache denselben Schlüssel wie die Anforderung hat, wird der Cache zurückgegeben.
ttl TTL
Definieren Sie ein Leben. Die Einheiten sind "d", "h", "m" und "s", und die Standardeinstellung ist "3600" Sekunden. Wenn es "0" ist, läuft es nicht ab.
code CODE1,CODE2...
Die Standardeinstellung speichert nur 200 Antworten zwischen, wenn Sie etwas anderes zwischenspeichern möchten Definieren. Im Fall von "all" werden alle zwischengespeichert.
nuster-rule only200
nuster-rule 200and404 code 200,404
nuster-rule all code all
if|unless condition
Verwenden Sie HAProxy ACL. See 7. Using ACLs and fetching samples section in HAProxy configuration
Setzen Sie "debug" auf "global" oder starten Sie "haproxy" mit "-d".
Nachrichten über den Cache enthalten "[CACHE]".
Setze Option http-buffer-request
Geben Sie "body" für den benutzerdefinierten Schlüssel ein.
Der POST-Body ist möglicherweise unvollständig, daher ** Option http-buffer-request ** Siehe Abschnitt in [HAProxy-Konfiguration](doc / configuration.txt)
Es ist möglicherweise besser, ein Backend nur für POST zu installieren
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