LINUX.ORG.RU

Глупый вопрос про веб-фреймворк и загрузку фоток

 , , ,


0

3

Здравствуйте

Вот читаю я доку про gunicorn. В ней написано, что количество воркеров желательно делать 2 * число_ядер + 1.

Допустим, у меня 1-ядерный VPS. Запускаю я свой бекенд с тремя воркерами. Бекенд умеет принимать фотки от пользователей. 3 юзера одновременно начинают заливать фото -> сервис парализован: даже гет-запросы перестают обрабатываться

Как решается эта проблема в среде синхронных фреймворков?

★★★★★

Последнее исправление: makoven (всего исправлений: 2)

Ответ на: комментарий от anonymous

Читеришь. Если так делать то отхватишь рейс кондишн и неопределенное поведение. Сессия на то и сессия, лочится, сторадж.

deep-purple ★★★★★
()
Ответ на: комментарий от deep-purple

Читеришь

Так эта функция именно для этого и сделана, чтоб всё изменённое в сессии сохранить и этот лок преждевременно снять, чтоб освободить сессию для других страниц. Можно даже сразу открыть сессию «read only», если ничего изменять не собираешься (из http://php.net/manual/en/function.session-start.php Example #4). :)

session_start([
    'read_and_close'  => true,
]); 

anonymous
()
Ответ на: комментарий от anonymous

если ничего изменять не собираешься

В том то и суть. Если что-то туда пишешь, то будет «висеть».

deep-purple ★★★★★
()

написано, что количество воркеров желательно делать 2 * число_ядер + 1

Херня там написана. Количество воркеров должно быть равно желаемому количеству одновременно обрабатываемых запросов. А уж будет ли это тормозить на конкретном количестве ядер и сколько сожрёт памяти - это другой вопрос.

И ещё, загугли chunked file upload. Сейчас не обязательно пропихивать гигабайты в одном запросе.

no-such-file ★★★★★
()
Ответ на: комментарий от vinvlad

Ну стэк-то как раз не CoW

Стек тоже CoW. Это тредам нужен отдельный стек заранее, а процессу нет.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Херня там написана. Количество воркеров должно быть равно желаемому количеству одновременно обрабатываемых запросов. А уж будет ли это тормозить на конкретном количестве ядер и сколько сожрёт памяти - это другой вопрос.

Термин «воркер» может иметь смысл, отличный от обработчика конкретного запроса, как, например, в NGINX. Это может быть просто процесс, в контексте которого выполняются зеленые потоки или асинхронные callback-и. Просто рекомендация «2 * число_ядер + 1» неявно подразумевает, что будут использоваться «Async Workers» - это видно из содержимого соответствующего раздела документации.

Стек тоже CoW. Это тредам нужен отдельный стек заранее, а процессу нет.

Я имел в виду, что дочерний процесс начнет далее работать со стеком по своему и памяти может набежать достаточно - это зависит от того, какой код будет выполняться.

vinvlad ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.