Kaj je Traefik?
Traefik je sodoben sedemplastni obratni proxy in uravnoteževalnik obremenitve, osredotočen okoli osnovnega koncepta — Service Discovery First.
Največja razlika v primerjavi s tradicionalnimi reverznimi proxyji (kot je Nginx) je, da ni treba ročno pisati velikega števila konfiguracijskih datotek; Traefik proaktivno "opazuje" vaše okolje za izvajanje in samodejno generira pravila usmerjanja.
Zaradi funkcije "storitev kot konfiguracija" je Traefik še posebej primeren za naslednje scenarije:
- Docker / Docker Compose
- Kubernetes (Ingress Controller)
- Arhitektura mikrostoritev
- Spletne storitve za majhne ekipe ali neodvisne razvijalce
Preprosto povedano, če je vaša storitev "dinamična", je Traefik veliko manj zapletov kot tradicionalni reverse agenti.
Primerjalni rezultat
Razpolaganja
Rad bi se zahvalil exoscale.ch Vincentu Bernatu, ki je velikodušno zagotovil infrastrukturo, potrebno za benchmarking.
Testiral sem ga s 4 virtualnimi stroji, konfiguriranimi takole:
32 GB pomnilnika 8 CPU jeder 10GB SSD disk Ubuntu 14.04 LTS 64-bit
Pripraviti
Za zagon orodja za primerjavo wrk se uporablja virtualni stroj Virtualni stroj za Traefik (v1.0.0-beta.416) / nginx (v1.4.6) Kdo konfigurira dva virtualna stroja za dva backend strežnika v Go? Vsak virtualni stroj je bil prilagojen z naslednjimi omejitvami:
Nginx
Spodaj je način uporabe konfiguracijske datoteke Nginx /etc/nginx/nginx.conf:
Spodaj so uporabljene konfiguracijske datoteke za virtualno gostovanje Nginx:
Traefik
Naslednje so datoteke, uporabljene za traefik.toml:
Rezultat Whoami:
wrk -t20 -c1000 -d60s -H "Gostitelj: test.traefik" --zakasnitev http://IP-whoami:80/bench Izvajam 1m test @ http://IP-whoami:80/bench 20 navoja in 1000 povezav Statistika teme Avg Stdev Max +/- Stdev Zakasnitev: 70,28 ms 134,72 ms 1,91 s 89,94 % Zahteve/Sec 2,92k 742,42 8,78k 68,80% Porazdelitev zakasnitve 50 % 10,63 ms 75 % 75,64 ms 90 % 205,65 ms 99% 668,28ms 3476705 zahtevkov v 1,00 m, 384,61 MB prebranih Napake vtičnikov: connect 0, read 0, write 0, timeout 103 Zahteve/sek: 57894.35 Prenos/sek: 6,40 MB NGINX:
wrk -t20 -c1000 -d60s -H "Gostitelj: test.traefik" --zakasnitev http://IP-nginx:8001/bench Izvajam 1m test @ http://IP-nginx:8001/bench 20 navoja in 1000 povezav Statistika teme Avg Stdev Max +/- Stdev Zakasnitev 101,25ms 180,09ms 1,99s 89,34% Zahteve/Sec 1,69k 567,69 9,39k 72,62% Porazdelitev zakasnitve 50% 15,46ms 75 % 129,11 ms 90% 302,44ms 99 % 846,59 ms 2018427 zahtevkov v 1,00 m, 298,36 MB prebranega Napake vtičnice: connect 0, read 0, write 0, timeout 90 Zahteve/sek: 33591,67 Prenos/sek: 4,97 MB Traefik
wrk -t20 -c1000 -d60s -H "Gostitelj: test.traefik" --zakasnitev http://IP-traefik:8000/bench Izvajam 1m test @ http://IP-traefik:8000/bench 20 navoja in 1000 povezav Statistika teme Avg Stdev Max +/- Stdev Zakasnitev 91,72ms 150,43ms 2,00s 90,50% Zahteve/Sec 1,43k 266,37 2,97k 69,77% Porazdelitev zakasnitve 50 % 19,74 ms 75 % 121,98 ms 90 % 237,39 ms 99 % 687,49 ms 1705073 zahteve v 1,00 m, 188,63 MB prebranega Napake socket: connect 0, read 0, write 0, timeout 7 Zahteve/sek: 28392,44 Prenos/sek: 3,14 MB
Sklep Traefikova hitrost je očitno počasnejša od Nginxove, a razlika ni velika: Traefik obdela 28.392 zahtevkov na sekundo, medtem ko Nginx obdela 33.591 zahtevkov na sekundo, z razmerjem zmogljivosti 85%. Za mlad projekt je to kar dobra :)!
Nekaj področij za izboljšave:
Uporabite GO_REUSEPORT monitorje
Vsako jedro procesorja poganja ločeno strežniško instanco GOMAXPROCS=1 (testi kažejo, da ima Traefik veliko več preklapljanja konteksta kot nginx).
Izvirno:Prijava do hiperpovezave je vidna. |