[JAVA] Explosive speed framework light-4j vérifié avec Docker pour Mac: vitesse de réponse

Objectif

En regardant les résultats ci-dessous, un tel débit sort-il vraiment dans un environnement de CPU et de mémoire limités? J'ai pensé, en utilisant Docker pour Mac, j'ai essayé de vérifier quel type de résultat serait obtenu dans l'environnement Kubernetes. https://github.com/networknt/microservices-framework-benchmark/blob/master/README.md

Cette fois, le but est de confirmer la différence de vitesse de réponse et de débit avec la même limite de ressources appliquée. Les empreintes CPU et mémoire de chaque framework seront optimisées séparément, elles ne sont donc pas prises en compte dans ce résultat de vérification. Aussi, si j'ai le temps, je pense à enquêter dans l'environnement GKE.

Afin de rendre cette vérification facile à reproduire, le fichier manifeste Dockerfile et Kubernetes, une fois en conteneur, sont tous stockés dans le référentiel GitHub.

Conditions préalables

environnement

Méthode de vérification

Chargez le service cible à partir du conteneur de chargement wrk. Toutes les charges sont données via le service. Changez le pod qui fournit réellement la charge avec le service. L'outil qui donne la charge utilise wrk et implémente comme suit

wrk


$ wrk -t4 -c64 -d60s http://microservice.default.svc.cluster.local:30000/  --latency

Etant donné que la surcharge de la partie de préchauffage est ignorée, la commande ci-dessus est exécutée deux fois et le résultat de la deuxième mesure est traité comme un résultat valide.

De plus, le conteneur à mesurer est mesuré avec les ressources suivantes données et un pod est démarré.

resource


        resources:
          requests:
            cpu: 200m
            memory: 400Mi
          limits:
            cpu: 200m
            memory: 400Mi

De plus, le fichier manifeste Dockerfile et Kubernetes lorsqu'ils sont conteneurisés sont tous https://github.com/h-r-k-matsumoto/microservices-framework-benchmark Il est stocké dans le référentiel de. Les applications Java sont conteneurisées à l'aide de jib. Et il est basé sur jdk10. C'est parce que jdk8 n'optimise pas le nombre de threads comme indiqué ci-dessous. https://qiita.com/h-r-k-matsumoto/items/17349e1154afd610c2e5

Cible de vérification

Les 6 éléments suivants qui me tiennent à cœur sont ciblés.

résultat de l'inspection

Cadre débit(req/min) moyenne(ms) 90%LINE(ms) 99%LINE(ms)
light-4j 295,125 29.35ms 72.17ms 99.01ms
go-http 163,557 48.11ms 119.78ms 304.28ms
iris 143,173 66.62ms 174.93ms 571.83ms
spring-boot2-undertow 107,540 46.04ms 94.61ms 196.11ms
spring-boot2-tomcat 38,068 117.01ms 290.70ms 492.55ms
helidon-se 30,742 160.51ms 299.11ms 969.99ms

Considération

** light-4j était certainement explosif. ** ** Cependant, la différence de vitesse n'était pas aussi grande que sur le site d'origine.

Compte tenu de l'opération réelle, il est nécessaire de considérer l'API dans JSON et gRPC. La vérification de cette partie doit également être envisagée.

Puisqu'il n'a pas été possible de désactiver le système d'échange avec Docker pour Mac, je voudrais procéder à la vérification même dans l'environnement GKE.

Il est difficile de changer le cadre en light-4j, mais au moins je veux le changer en spring-boot2-undertow.

Supplément

La méthode d'exécution est https://github.com/h-r-k-matsumoto/microservices-framework-benchmark/blob/fix/master/k8s_reproduce_benchmark/DockerForMac.md Veuillez confirmer.

Après cela, en termes de light-4j, kubernetes a de mauvaises performances, donc je pense que c'est un arrêt. https://gitter.im/networknt/light-4j?at=5bf5948a958fc53895c9dbe5

référence

Recommended Posts

Explosive speed framework light-4j vérifié avec Docker pour Mac: vitesse de réponse
Explosive Speed Framework Light-4j vérifié avec Docker pour Mac: Empreinte
Conseils pour exécuter Go avec Docker