Я сейчас подправляю свой Akka Http server
и получаю очень ужасные результаты при загрузке его с одновременными запросами.Так как я не был уверен, возможно, у меня где-то был скрытый блокирующий запрос ввода-вывода, я подумал, что стоило бы протестировать пример проекта с сайта Akka Http:
В качестве альтернативы, вы можете загрузить новый проект sbt.с уже настроенным HTTP Akka с использованием шаблона Giter8:
sbt -Dsbt.version=0.13.15 new https://github.com/akka/akka-http-scala-seed.g8
Я пошел вперед и загрузил его в соответствии с инструкциями и запустил сервер на локальном хосте:
/path/to/bootstrap/sbt run
[info] Running com.example.QuickstartServer
Server online at http://127.0.0.1:8080/
http://127.0.0.1:8080/
Я выполнил несколько очень простых тестов с помощью инструмента "ab
":
Простой тест, выполняющий последовательные запросы:
ab -n 1000 http://127.0.0.1:8080/users
Server Software: akka-http/10.1.5
Server Hostname: 127.0.0.1
Server Port: 8080
Document Path: /users
Document Length: 12 bytes
Concurrency Level: 1
Time taken for tests: 0.880 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 165000 bytes
HTML transferred: 12000 bytes
Requests per second: 1136.74 [#/sec] (mean)
Time per request: 0.880 [ms] (mean)
Time per request: 0.880 [ms] (mean, across all concurrent requests)
Transfer rate: 183.17 [Kbytes/sec] received
Мы видим, что "time per request" is 0.880 ms [mean]
в этом случае
Теперь я увеличил параллелизм до 5:
ab -n 1000 -c 5 http://127.0.0.1:8080/users
Concurrency Level: 5
Time taken for tests: 0.408 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 165000 bytes
HTML transferred: 12000 bytes
Requests per second: 2450.39 [#/sec] (mean)
Time per request: 2.040 [ms] (mean)
Time per request: 0.408 [ms] (mean, across all concurrent requests)
Transfer rate: 394.84 [Kbytes/sec] received
Теперь Time per request
довольно резко увеличился на 2,040 [мс] (среднее значение) (хотя пропускная способность намного выше)
иснова увеличивая до 50 одновременных запросов:
ab -n 1000 -c 50 http://127.0.0.1:8080/users
Concurrency Level: 50
Time taken for tests: 0.277 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 165000 bytes
HTML transferred: 12000 bytes
Requests per second: 3607.35 [#/sec] (mean)
Time per request: 13.861 [ms] (mean)
Time per request: 0.277 [ms] (mean, across all concurrent requests)
Transfer rate: 581.26 [Kbytes/sec] received
Здесь задержка очень высока, 13,861мс против первого случая, который был на 0,880мс (задержка увеличилась примерно в 16 раз)
Этопростой сервер не имеет блокировкиIO.
Мне интересно, что я должен настроить, чтобы задержка была как можно ниже.