Как увеличить количество запросов в секунду в тесте распределенной саранчовой нагрузки

Я не могу пройти 1200 RPS, независимо от того, использую ли я 4 или 5 рабочих.

Я пытался запустить locust в трех вариантах - один, четыре и пять рабочих процессов (docker-compose up --scale worker_locust=num_of_workers). Я использую 3000 клиентов с коэффициентом вывода 100. Загружаемая мной служба - это пустышка, которая всегда возвращает yo и HTTP 200, т. Е. Ничего не делает, а возвращает постоянную строку. Когда у меня есть один рабочий, я получаю до 600 запросов в секунду (и начинаю видеть некоторые ошибки HTTP), когда у меня 4 рабочих, я могу получить до ~ 1200 запросов в секунду (без единой ошибки HTTP):

введите описание изображения здесь

Когда у меня 5 рабочих, я получаю примерно 1200 запросов в секунду, но с меньшей загрузкой ЦП: введите описание изображения здесь

Я полагаю, что если ЦП вышел из строя в случае с 5 рабочими (относительно случая с 4 рабочими), то это не ЦП ограничивает RPS.

Я использую это на 6-ядерном MacBook.

В locustfile.py я использую сообщения, по сути, почти пустые запросы (всего несколько параметров):

from locust import HttpUser, task, between, constant


class QuickstartUser(HttpUser):
    wait_time = constant(1)  # seconds

    @task
    def add_empty_model(self):
        self.client.post(
            "/models",
            json={
                "grouping": {
                    "grouping": "a/b"
                },
                "container_image": "myrepo.com",
                "container_tag": "0.3.0",
                "prediction_type": "prediction_type",
                "model_state_base64": "bXkgc3RhdGU=",
                "model_config": {},
                "meta": {}
            }
        )

Мой docker-compose.yml:

services:
  myservice:
      build:
          context: ../
      ports:
          - "8000:8000"

  master_locust:
      image: locustio/locust
      ports:
          - "8089:8089"
      volumes:
          - ./:/mnt/locust
      command: -f /mnt/locust/locustfile.py --master

  worker_locust:
      image: locustio/locust
      volumes:
          - ./:/mnt/locust
      command: -f /mnt/locust/locustfile.py --worker --master-host master_locust

Может кто-нибудь подсказать, в каком направлении двигаться к 2000 RPS?


person Anton Daneyko    schedule 30.10.2020    source источник
comment
Привет. У меня такая же проблема. Я пробовал один, четыре и пять рабочих, используя соответственно один, два и три компьютера, но количество запросов в секунду осталось прежним (около 200). Вы нашли решение?   -  person Hamidreza    schedule 11.04.2021
comment
Есть некоторое неразрешенное непонимание между тем, как я понимаю, как все работает, и тем, как можно предложить единственный ответ. Я понимаю такой тест следующим образом: если мой сервис может обрабатывать один запрос в секунду и если этот сервер бомбардируется 1000 запросов в секунду от саранчовых рабочих, то я ожидаю увидеть 999 ответов об ошибках и 1 успех, если рабочие имеют таймаут в одну секунду. Основываясь на комментарии ниже, кажется, что я не понимаю, что на самом деле делает саранча, но я не понимаю, что сказал @Cyberwiz.   -  person Anton Daneyko    schedule 16.04.2021


Ответы (1)


Вам следует ознакомиться с FAQ.

https://github.com/locustio/locust/wiki/FAQ#increase-my-request-raterps

Вероятно, ваш сервер не может обрабатывать больше запросов, по крайней мере, с вашей одной машины. Есть и другие вещи, которые вы можете сделать, чтобы убедиться, что это так. Вы можете попробовать FastHttpUser, работающий на нескольких машинах, или просто увеличив количество пользователей. Но если можете, проверьте, как сервер справляется с нагрузкой, и посмотрите, что вы можете там оптимизировать.

person Solowalker    schedule 30.10.2020
comment
AFAI RPS создается рабочими и не имеет ничего общего с сервером, который обслуживает запросы. Если мой сервер может обрабатывать 1 запрос в секунду, и я заполняю его 1000 RPS с 2 рабочими, то я ожидаю увидеть 1 обслуживаемый запрос и 999 ошибок. Я считаю, что возможности сервера здесь не рассматриваются. - person Anton Daneyko; 30.10.2020
comment
Извините, но это предположение чаще всего неверно, поскольку серверы почти всегда реализуют очередь и / или пытаются выполнить больше одновременных запросов, чем у них есть ядра ЦП. Если время отклика увеличивается по мере увеличения вашей нагрузки, вам нужно сначала исследовать на стороне сервера, так как это ваша наиболее вероятная причина. Только если ваш сервер говорит, что у вас хорошее время отклика (проверьте журнал доступа или что-то еще), но саранча говорит, что они плохие, тогда, ВОЗМОЖНО, вы можете обвинить саранчу :) - person Cyberwiz; 31.10.2020
comment
@Cyberwiz Спасибо за ваш вклад, Ларс! RPS - запрос в секунду или ответ в секунду? - person Anton Daneyko; 04.11.2020