nginx не обеспечивает прирост производительности для API R Plumber, размещенного на AWS с Docker - PullRequest
0 голосов
/ 07 октября 2018

Я пытаюсь расширить вычислительно дорогой API R Plumber с помощью Docker и AWS, и я хочу обрабатывать несколько запросов, поэтому я хочу использовать Nginx, чтобы помочь с этим.

Я следую этому учебному пособию: https://www.knowru.com/blog/how-to-scale-up-credit-model-apis-using-aws/, которое непосредственно применимо к моему варианту использования, однако я не испытываю предложенного увеличения производительности.

Шаги, которые я выполняю, суммируются следующим образом:

1) Я создаю некоторые данные для тестирования API, которые могут быть реплицированы с использованием следующего кода R (убедитесь, что мои данные находятся вправильное расположение при выполнении следующих команд докера):

new.data <- list(
  Status.of.existing.checking.account='A11'
  , Duration.in.month=20
  , Credit.history='A32'
  , Savings.account.bonds='A65'
)

write_json(new.data, "~/Documents/data.json")

2) Используя Docker через командную строку, я запускаю экземпляр EC2.Единственное ключевое отличие между моим подходом и учебным пособием заключается в следующем: amazonec2-open-port 8000 line.

docker-machine create \
    --driver amazonec2 \
    --amazonec2-access-key xxx \
    --amazonec2-secret-key yyy \
    --amazonec2-region zzz \
    --amazonec2-instance-type t2.small \
    --amazonec2-open-port 8000 \
    nginx-testing-machine

3) Я создаю образ Docker из репозитория knowru github изатем запустите.

eval "$(docker-machine env nginx-testing-server)" && docker build -t 
knowru/plumber_example https://github.com/Knowru/plumber_example.git

eval "$(docker-machine env nginx-testing-server)" && docker run -p 
8000:8000 -d knowru/plumber_example

4) После определения IP-адреса моего EC2 с помощью docker-machine ip nginx-testing-server , я тестирую API с помощью siege.

siege -H 'Content-Type:application/json' 
"http://IP_ADDRESS:8000/predict POST < data.json" -b -c 10 -r 100

Это дает мне следующие результаты:

Transactions:               1000 hits
Availability:             100.00 %
Elapsed time:              13.32 secs
Data transferred:           0.03 MB
Response time:              0.13 secs
Transaction rate:          75.08 trans/sec
Throughput:             0.00 MB/sec
Concurrency:                9.74
Successful transactions:        1000
Failed transactions:               0
Longest transaction:            1.15
Shortest transaction:           0.06

5) Теперь я добавляю четыре других контейнера Docker, сопоставляемых с портом 8000 для каждого.

eval "$(docker-machine env nginx-testing-server)" && docker run -p 
8001:8000 -d knowru/plumber_example

eval "$(docker-machine env nginx-testing-server)" && docker run -p 
8002:8000 -d knowru/plumber_example

eval "$(docker-machine env nginx-testing-server)" && docker run -p 
8003:8000 -d knowru/plumber_example

eval "$(docker-machine env nginx-testing-server)" && docker run -p 
8004:8000 -d knowru/plumber_example

6)Я не совсем уверен, почему, но учебник клонирует репозиторий git на EC2, что делается здесь:

eval "$(docker-machine env nginx-testing-server)" && git clone 
https://github.com/Knowru/plumber_example.git

Затем я запускаю образ nginx (отмечая сопоставление портов 80: 8000, что яя не уверен):

eval "$(docker-machine env nginx-testing-server)" && docker run -v 
/home/ubuntu/plumber_example:/etc/nginx/conf.d:ro -d -p 80:8000 nginx

7) Я снова осаду, выполняя тот же тест

siege -H 'Content-Type:application/json' 
"http://IP_ADDRESS:8000/predict POST < data.json" -b -c 10 -r 100

, который дает мне очень похожие результаты

Transactions:               1000 hits
Availability:             100.00 %
Elapsed time:              14.04 secs
Data transferred:           0.03 MB
Response time:              0.14 secs
Transaction rate:          71.23 trans/sec
Throughput:             0.00 MB/sec
Concurrency:                9.71
Successful transactions:        1000
Failed transactions:               0
Longest transaction:            1.21
Shortest transaction:           0.07

Результаты невероятно похожи, поэтому я делаю что-то неправильно.Единственное, что я изменил, это порты, поэтому он подсказывает мне, что отображение портов неверно.Если это так, как мне сделать это правильно и каковы ограничения / требования для использования nginx?Заранее благодарю за любую помощь по этому вопросу - я полагаю, что это что-то довольно простое для тех, кто имеет опыт работы с этой технологией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...