Qu’est-ce que Traefik ?
Traefik est un proxy inverse et un équilibreur de charge moderne à sept couches, centré autour d’un concept fondamental : la découverte de services d’abord.
La plus grande différence avec les reverse proxies traditionnels (comme Nginx) est que vous n’avez pas besoin d’écrire manuellement un grand nombre de fichiers de configuration ; Traefik « observe » de manière proactive votre environnement d’exécution et génère automatiquement des règles de routage.
Grâce à la fonction « service comme configuration », Traefik est particulièrement adapté à ces scénarios :
- Docker / Docker Compose
- Kubernetes (contrôleur d’entrée)
- Architecture des microservices
- Services en ligne pour petites équipes ou développeurs indépendants
En termes simples, si votre service est « dynamique », Traefik est bien moins simple que les agents inverses traditionnels.
Référence
disposition
Je tiens à remercier exoscale.ch VincentBernat, qui a généreusement fourni l’infrastructure nécessaire au benchmarking.
Je l’ai testé avec 4 machines virtuelles, configurées comme suit :
32 Go de mémoire 8 cœurs CPU Disque SSD de 10 Go Ubuntu 14.04 LTS 64 bits
Installer
Une machine virtuelle est utilisée pour lancer l’outil de benchmarking wrk Une machine virtuelle pour Traefik (v1.0.0-beta.416) / nginx (v1.4.6) Qui configure deux machines virtuelles pour deux serveurs backend dans Go ? Chaque machine virtuelle a été réglée selon les restrictions suivantes :
Nginx
Voici la méthode d’utilisation du fichier de configuration Nginx /etc/nginx/nginx.conf :
Voici les fichiers de configuration de l’hébergement virtuel Nginx utilisés :
Traefik
Voici les fichiers utilisés pour traefik.toml :
résultat whoami :
wrk -t20 -c1000 -d60s -H « Host : test.traefik » --latence http://IP-whoami:80/bench Test de 1m en cours @ http://IP-whoami:80/bench 20 fils et 1000 connexions Statistiques de thread Moyenne Stdev Max +/- Stdev Latence 70,28 ms 134,72 ms 1,91s 89,94 % Requis/Sec 2,92k 742,42 8,78k 68,80 % Distribution de latence 50 % 10,63 ms 75 % 75,64 ms 90 % 205,65 ms 99 % 668,28 ms 3476705 requêtes en 1,00 million, 384,61 Mo de lecture Erreurs de socket : connexion 0, lecture 0, écriture 0, délai 103 Demandes/s : 57894,35 Transfert/s : 6,40 Mo nginx :
wrk -t20 -c1000 -d60s -H « Host : test.traefik » --latence http://IP-nginx:8001/bench Test de 1 mètre @ http://IP-nginx:8001/bench 20 fils et 1000 connexions Statistiques de thread Moyenne Stdev Max +/- Stdev Latence 101,25 ms 180,09 ms 1,99s 89,34 % Exigence/Sec 1,69k 567,69 9,39k 72,62 % Distribution de latence 50 % 15,46 ms 75 % 129,11 ms 90 % 302,44 ms 99 % 846,59 ms 2018427 requêtes en 1,00 million, 298,36 Mo de lecture Erreurs de socket : connexion 0, lecture 0, écriture 0, délai d’attente 90 Demandes/s : 33591,67 Transfert/seconde : 4,97 Mo Traefik
wrk -t20 -c1000 -d60s -H « Host : test.traefik » --latence http://IP-traefik:8000/bench Test de 1 minute @ http://IP-traefik:8000/bench 20 fils et 1000 connexions Statistiques de thread Moyenne Stdev Max +/- Stdev Latence 91,72 ms 150,43 ms 2,00 s 90,50 % Exigence/seconde 1,43k 266,37 2,97k 69,77 % Distribution de latence 50 % 19,74 ms 75 % 121,98 ms 90 % 237,39 ms 99 % 687,49 ms 1705073 requêtes en 1,00 million, 188,63 Mo de lecture Erreurs de socket : connexion 0, lecture 0, écriture 0, délai d’attente 7 Demandes/s : 28392,44 Transfert/sec : 3,14 Mo
conclusion La vitesse de Traefik est clairement plus lente que celle de Nginx, mais l’écart n’est pas énorme : Traefik gère 28 392 requêtes par seconde, tandis que Nginx en gère 33 591 par seconde, avec un ratio performance de 85 %. Pour un projet jeune, c’est plutôt bon :) !
Quelques points à améliorer :
Utilisez GO_REUSEPORT moniteurs
Chaque cœur CPU fait tourner une instance serveur séparée : GOMAXPROCS=1 (les benchmarks montrent que Traefik a beaucoup plus de changement de contexte que nginx).
Langue source:La connexion hyperlientérée est visible. |