Używam Play 2.1, aby rozwijać swoją aplikację. Jest to dość łatwe w użyciu środowisko. Jestem w stanie szybko opracować swoją aplikację. Ale natrafiłem też na pewne problemy z skalowalnością. Wygląda na to, że gra 2.1 nie działa tak szybko, jak twierdzono. Może dlatego, że nie wiedziałem, jak dostroić wydajność.Jak dostroić skalowalność aplikacji do gry?
Mój problem jest następujący: Mam interfejs API do logowania użytkownika za pomocą jego/jej poczty e-mail.
Użyłem Apache Benchmark (ab), aby użyć wydajności. Jedno pojedyncze żądanie zajmuje około 230ms. Kiedy jest 5 jednoczesnych żądań, czas odpowiedzi jest wystarczająco szybki, około 280 ms.
Concurrency Level: 5
Time taken for tests: 0.306 seconds
Complete requests: 5
Failed requests: 0
Write errors: 0
Total transferred: 3495 bytes
Total POSTed: 1065
HTML transferred: 3135 bytes
Requests per second: 16.34 [#/sec] (mean)
Time per request: 306.009 [ms] (mean)
Time per request: 61.202 [ms] (mean, across all concurrent requests)
Transfer rate: 11.15 [Kbytes/sec] received
3.40 kb/s sent
14.55 kb/s total
Connection Times (ms)
min mean[+/-sd] median max
Connect: 1 1 0.1 1 1
Processing: 280 290 13.8 292 305
Waiting: 278 288 13.7 291 304
Total: 280 291 13.9 293 306
Jednak, gdy użyłem 100 równoczesnych żądań, otrzymałem bardzo złe wyniki.
Concurrency Level: 100
Time taken for tests: 4.243 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Total transferred: 69900 bytes
Total POSTed: 21300
HTML transferred: 62700 bytes
Requests per second: 23.57 [#/sec] (mean)
Time per request: 4243.058 [ms] (mean)
Time per request: 42.431 [ms] (mean, across all concurrent requests)
Transfer rate: 16.09 [Kbytes/sec] received
4.90 kb/s sent
20.99 kb/s total
Connection Times (ms)
min mean[+/-sd] median max
Connect: 1 62 31.5 83 89
Processing: 996 3744 544.7 3902 4146
Waiting: 995 3727 542.0 3894 4146
Total: 1084 3806 542.6 3968 4204
Mój serwer: Intel i7, 8 rdzeni, 2,8 GHz, 8 GB pamięci. Użyłem domyślnego ustawienia struktury gry. Ktoś wie, jak dostroić wydajność struktury gry?
Myślę, że odnosi się do rozmiaru puli wątków. Dokument mówi, że domyślny rozmiar puli wątków odtwarzania to # rdzenie. W takim przypadku oczekiwany czas na obsłużenie wszystkich 100 żądań wynosi:
230ms * (100/8) = 2875ms
Czy powinienem zwiększyć rozmiar domyślnej puli wątków? Ale dokument mówi, że powinienem uzyskać najlepszą wydajność, gdy rozmiar basenu jest równy # rdzeniu.
Czy rozmiar puli wątków Netty (serwera WWW) ma wpływ na wydajność? Nie znalazłem żadnych informacji o jego wartości domyślnej. Ktoś wie, jak jest skonfigurowany?
Dziękujemy!
Wygląda na to, że pytanie dotyczy skalowalności zamiast wydajności. Jeśli chodzi o wydajność, IMHO 230ms/Req też nie jest takie szybkie, więc sprawdziłbym również, co jest tego przyczyną. Czy masz jakąś wskazówkę, co zajmuje większość czasu, np. wywołania zaplecza, obliczenia specyficzne dla aplikacji lub renderowanie szablonu? – MartinGrotzke
Upewnij się, że porównujesz grę w trybie PROD, uruchamiając 'play start'. Tryb DEV ma mnóstwo kosztów dla automatycznego przeładowania. –