Czym jest Traefik?
Traefik to nowoczesny, siedmiowarstwowy odwrotny proxy i load balancer, oparty na kluczowej koncepcji — Service Discovery First.
Największa różnica w porównaniu z tradycyjnymi proxy odwróconymi (takimi jak Nginx) polega na tym, że nie musisz ręcznie zapisywać dużej liczby plików konfiguracyjnych; Traefik proaktywnie "obserwuje" twoje środowisko uruchomieniowe i automatycznie generuje reguły routingu.
Dzięki funkcji "service as configuration" Traefik jest szczególnie odpowiedni w następujących scenariuszach:
- Docker / Docker Compose
- Kubernetes (Kontroler wejścia)
- Architektura mikroserwisów
- Usługi online dla małych zespołów lub niezależnych programistów
Mówiąc wprost, jeśli Twoja usługa jest "dynamiczna", Traefik jest znacznie mniej bezproblemowy niż tradycyjni agentzy odwróceni.
Benchmark
usposobienie
Chcę podziękować exoscale.ch Vincentowi Bernatowi, który hojnie zapewnił infrastrukturę niezbędną do benchmarkingu.
Przetestowałem to na 4 maszynach wirtualnych, skonfigurowanych następująco:
32 GB pamięci 8 rdzeni CPU 10GB dysk SSD Ubuntu 14.04 LTS 64-bit
Zakładać
Do uruchomienia narzędzia benchmarkingowego wrk używa się maszyny wirtualnej Maszyna wirtualna dla Traefik (v1.0.0-beta.416) / nginx (v1.4.6) Kto konfiguruje dwie maszyny wirtualne dla dwóch serwerów backendowych w Go? Każda maszyna wirtualna została dostrojona według następujących ograniczeń:
Nginx
Poniżej przedstawiono metodę użycia pliku konfiguracyjnego Nginx /etc/nginx/nginx.conf:
Poniżej znajdują się użyte pliki konfiguracyjne wirtualnego hostingu Nginx:
Traefik
Poniżej przedstawiono pliki używane dla traefik.toml:
wynik Whoami:
wrk -t20 -c1000 -d60s -H "Host: test.traefik" --opóźnienia http://IP-whoami:80/bench Robię test 1 m @ http://IP-whoami:80/bench 20 gwintów i 1000 połączeń Statystyki wątku Średnia Maksymalny Poziom Tempa +/- TWzrost Opóźnienia: 70,28ms, 134,72ms, 1,91s, 89,94%. Wymagania/sekcje 2,92k 742,42 8,78k 68,80% Rozkład opóźnień 50% 10,63ms 75% 75,64ms 90% 205,65ms 99% 668,28ms 3476705 żądań w 1,00m, 384,61MB odczytu Błędy gniazda: connect 0, read 0, write 0, timeout 103 Liczba pśaktów/sek: 57894.35 Transfer/sek: 6,40MB NGinx:
wrk -t20 -c1000 -d60s -H "Host: test.traefik" --opóźnienia http://IP-nginx:8001/bench Przeprowadzam test 1 m @ http://IP-nginx:8001/bench 20 gwintów i 1000 połączeń Statystyki wątku Średnia Maksymalny Poziom Tempa +/- TWzrost Opóźnienia: 101,25ms, 180,09ms, 1,99s, 89,34% Wymagania/sekcje 1,69 tys. 567,69 9,39 tys. 72,62% Rozkład opóźnień 50% 15,46ms 75% 129,11ms 90% 302,44ms 99% 846,59ms 2018427 żądań w 1,00m, 298,36MB odczytu Błędy gniazd: connect 0, read 0, write 0, timeout 90 Liczba próśb/sek: 33591.67 Transfer/sec: 4,97MB Traefik
wrk -t20 -c1000 -d60s -H "Host: test.traefik" --opóźnienia http://IP-traefik:8000/bench Wykonuję test 1 m @ http://IP-traefik:8000/bench 20 gwintów i 1000 połączeń Statystyki wątku Średnia Maksymalny Poziom Tempa +/- TWzrost Opóźnienie: 91,72ms, 150,43ms, 2,00s, 90,50% Wymagania/sek 1,43k 266,37 2,97k 69,77% Rozkład opóźnień 50% 19,74ms 75% 121,98ms 90% 237,39ms 99% 687,49ms 1705073 żądań w 1,00m, odczyt 188,63MB Błędy gniazda: connect 0, read 0, write 0, timeout 7 Żądania/sek: 28392.44 Transfer/sek: 3,14MB
konkluzja Szybkość Traefika jest wyraźnie wolniejsza niż Nginx, ale różnica nie jest duża: Traefik obsługuje 28 392 zapytań na sekundę, podczas gdy Nginx obsługuje 33 591 zapytań na sekundę, z wskaźnikiem wydajności na poziomie 85%. Jak na młody projekt, to całkiem niezły :)!
Kilka obszarów do poprawy:
Używaj GO_REUSEPORT monitorów
Każdy rdzeń CPU uruchamia osobną instancję serwera GOMAXPROCS=1 (benchmarki pokazują, że Traefik ma znacznie więcej przełączania kontekstu niż nginx).
Oryginał:Logowanie do linku jest widoczne. |