Рубрики
Без рубрики

Убить пересмешника…

и шаги, чтобы воскресить его. Теги с Python, Coroutine, Gevent.

MockingBird (3 часть серии)

В предыдущих постах серии я рассказал, почему возникла необходимость в MockingBird, а что мы сделали, чтобы реализовать его.

Чтобы повторить, он был реализован с помощью колбы и Python и был запущен на машине, используя следующую команду:

Python Mockingbird.py.

Это означало, что колбу работал в своем режиме по умолчанию – разработка, на своем собственном сервере и использовал один процесс – в идеале с одним потоком, но я прочитал конфликтующие документы, которые упоминают, что Flask – это Путь по умолчанию сейчас).

Если один поток вокруг, то колба будет служить только одним запросом одновременно. Это в сочетании с сон на 0,5 м, мы применимы, будут означать, что мы смогли служить только 2 запроса в секунду. Который не идеален.

Моя цель составляла 1200 запросов в минуту в минимальном минимуме.

Мои тесты первоначально прошли хорошо, мы смогли обрабатывать брошенную нагрузку в пересмешке довольно хорошо (вероятно, из-за вышеупомянутой резьбой) для коротких проверенных прочности и низкой нагрузки. Но я заметил что-то странное в журналах моих тестов, когда я применил полную нагрузку.

Тайм-ауты, многие из них.

Тайм-аут в исходном MS был установлен на 60-х годов. И MockingBird не смог прислать ответы на большинство запросов (> 60%) в то время.

И это было то, как я убил насмешливую птицу.

Глядя на бревна, я начал проклинать у себя за то, что не думал о решении. Повторно, все это будет означать потерю времени. И время – это то, что мы не можем позволить себе в моей нынешней организации.

Так что я пошел прочитать групповую документацию (отличный ресурс BTW), который упомянул, что встроенный веб-сервер был не идеален для производственных нагрузок (которые я бросил на него). Это могло бы работать, если бы у меня не было блокирующего вызова сна, но это было необходимо. Так что еще мог работать?

Я решил взглянуть на некоторые рекомендуемые серверы. Один из них, в частности, был Боевик , с его поддержкой разных видов рабочих.

Работник должен просто поставить его, копию вашего кода, который работает параллельно другим работникам. Прочитайте Дизайн док для получения дополнительной информации.

Пип устанавливает боевиков

Как установить Gunicorn на вашу систему

Я также решил использовать работника Gevent для Gunicorn для обработки нескольких запросов. Это решение было принято, поскольку нам нужен был работник Asyncio для оптимизации для нашего принудительного времени ожидания IO. Для дополнительной информации Я предлагаю прочитать документацию, связанную выше.

PIP Установить Gevent

Как установить Gevent.

После выполнения этих двух вещей, это просто выдача правильной команды (никаких изменений кода не требуется для существующих файлов!) Чтобы запустить приложение.

Все, что нужно, это один дополнительный файл в корневом каталоге вашего проекта:

from flaskapi import api

if __name__ == "__main__":
    api.run()

Назовите это все, что вы хотите. Я назвал это wsgi.py

Команда:

Gunicorn – Worker-Class Gevent -w 4 Фласкапи: API –bind 0.0.0.0:5000 –daemon

  • 0.0.0.0 важно, если вы хотите получить доступ в интранете к вашему API/серверу
  • -w 4 означает 4 рабочих: идеальное значение должно быть количество процессоров + 1
  • –daemon означает, что процессы будут порождены на заднем плане

Это можно увидеть, чтобы начать 5 процессов на сервере, один мастер и 4 рабочих, каждый обслуживающий несколько запросов в секунду. Это сработало Sorta Fine для нагрузки, которую мы бросали на него, но нам пришлось в конечном итоге обновить наш маленький сервер (ЦП ударял на 100% на пиковой нагрузке), чтобы приземлиться последовательными результатами, даже при длительной пиковой нагрузке.

И поэтому пересмешник живет, чтобы петь другой день.

Так что это приводит к концу серии постов MockingBird. Одним из надежд, что это было информативным!

MockingBird (3 часть серии)

Оригинал: “https://dev.to/mikotian/to-kill-a-mockingbird-5c2j”