|
1011 / 355 / 59
Регистрация: 28.02.2013
Сообщений: 937
|
|
Что будет если на сервер придет одновременно два запроса?29.06.2020, 10:10. Показов 7730. Ответов 22
Доброго дня!) Вопрос теоретический, но все же. Смотрите например есть форма куда забиваются данные, по нажатию кнопки эти данные отправляются на сервер, на сервере на основе этих данных формируется отчет в word (например отчет формируется в течении 5 минут) и возвращается обратно пользователю.
Что будет если в то время пока формируется отчет, с другого компа отправят еще запрос (или 2 запроса)? Что в этом случае будет делать сервер, он эти запросы в очередь поставит? Добавлено через 3 минуты Т.е. я к чему: если например с интервалом в 1 секунду (чисто гипотетически) придет 10 запросов из формы, то если принять что на один отчет сервер тратит 5 минут, последний пользователь который отправил запрос получит ответ через 10*5=50 минут?
0
|
|
| 29.06.2020, 10:10 | |
|
Ответы с готовыми решениями:
22
Что будет, если два разных потока попытаются отправить одновременно одному клиенту два разных пакета Два запроса на сервер одновременно Что будет, если несколько пользователей одновременно будут производить обновление БД... |
|
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,246
|
||
| 01.07.2020, 19:55 | ||
|
Я не знаток веб-серверов.
Если я не ошибаюсь, то Nignix - событийный, основанный на round-robin. А Apache форкнет поток. Боюсь тут ввести в заблуждение. Т.е. если я не ошибаюсь, то Апач создаст полностью новый поток. Запустит в нем Джангу, проделает всю бизнес-логику. Тут прилетает новый запрос, новый поток, новая джанга. Возможно, есть настройки у Апача, чтобы он работал событийно. В общем, так до потери сознания сервером. Т.е. можно его положить - до 500-й ошибки. Nginx форкать ничего не будет, новую Джангу создавать не будет. Он существующей Джанге даст во вьюху новый запрос. А когда Джанга отработает, поймает ее ответ. И вернет юзеру. Т.е. положить сервак тоже можно - но он должен протянуть на Nginx чуть дольше. В общем, мне кажется, что: 1. Архитектура классического веб-приложения тут не очень подходит. Потому что будет открытое соединение по http держаться 5 минут. Это плохо. 2. Надо бы такую длительную задачу ставить в очередь на серваке. Будут ресурсы у сервака - он сделает задачу и отдаст юзеру. 3. Юзеру надо сообщить о том, что задача в работе. Включить спиннер. 4. Периодически опрашивать сервак Аяксом: готов ли отчет. 5. Когда отчет готов, забрать его аяксом и дать юзеру. Но я вот в этом всем очень плаваю. И если кто из гуру ответит на поставленный вопрос, было бы просто здорово. Так что присоединяюсь к вопросу. Добавлено через 6 минут Минут за 5+ . Плюс - потому что точно не за 5 минут. Даже если будет 16 ядер на 10 задач. Закон Амдала не позволит закончить в один срок.
1
|
||
|
Просто Лис
|
|
| 14.07.2020, 15:10 | |
|
Смотря как развёрнуто приложение. Если более-менее стандартная связка nginx+uwsgi, то второй запрос придёт на свободный воркер и будет выполнен параллельно. Если всего воркеров 4, то максимум будет обработано 4 запроса параллельно. nginx будет остальные запросы придерживать, пока не освободится воркер. Скорее всего клиенту отдастся ошибка 502 по истечении таймаута (около минуты).
3
|
|
|
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,246
|
|
| 14.07.2020, 15:57 | |
|
А worker в nginx - это же поток. Т.е. будет все же новый поток, в нем новая Django. Так?
0
|
|
|
Просто Лис
|
|||||||
| 14.07.2020, 16:10 | |||||||
|
Нет, речь шла про worker uwsgi. Их создаётся фиксированное количество. nginx вообще не умеет запускать никакой код и только проксирует запросы.
Добавлено через 1 минуту
2
|
|||||||
|
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,246
|
|
| 14.07.2020, 16:14 | |
|
Я запутался worker nginx - это же отдельный поток. Значит в отдельном потоке отработает worker uwsgi. В общем, я потерял нить абсолютно.
Нельзя ли расписать всю схему полностью от запуска веб-сервера через прилет первого запроса и последующих запросов до отдачи ответа на каждый запрос. При этом подчеркнуть разницу Apache и Nginx. И особо отметить момент: когда запускается новая Django. Совсем не запускать новую Django нельзя. Когда-то же она должна была создаться хотя бы одна. А вот будет ли она создаваться заново на каждый запрос - этот вопрос интересен.
1
|
|
|
Просто Лис
|
||
| 14.07.2020, 16:26 | ||
|
Будет многабукв. Раз: есть демон nginx'а - он слушает порты и принимает запросы. Он намного проще апача: раздаёт статику (файлы) и не выполняет никакой код. Проксирует запросы дальше. Например, на unix-сокет. Да, у него есть воркеры, которые позволяют утилизировать все ресурсы системы. Два: есть демон uwsgi - он может выполнять код на различных языках. В том числе питон. Он слушает unix-сокет (со своим бинарным протоколом) и запускает воркеры, внутри которых работает копия wsgi-приложения. Джанго как раз для развёртывания предлагает wsgi-интерфейс. Таким образом запущенное приложение выглядит так: * база данных (может быть на другом сервере) * uwsgi с воркерами * nginx Запрос приходит на nginx - он находит нужный location и передаёт запрос uwsgi. uwsgi находит свой свободный воркер и передаёт запрос в приложение. Если воркер упал - он перезапускается.
3
|
||
|
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,246
|
|
| 14.07.2020, 16:28 | |
|
Так, а в воркере uwsgi что происходит? Каждый раз запуск джанги с последующим ее закрытием?
0
|
|
|
|
|
| 14.07.2020, 21:11 | |
|
Рыжий Лис, отдельный воркер uwsgi, gunicorn etc = отдельный инстанс приложения?
0
|
|
|
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,246
|
||
| 15.07.2020, 09:03 | ||
|
Т.е.: 1. Летит запрос от посетителя сайта. 2. Сработал nginx. Nginx событийный. Он взял и пробросил, допустим, запрос, на gunicorn. И дальше занимается своими делами - когда будет надо, ему дадут ответ, либо таймаут истечет. 3. Gunicorn запускает свой воркер уже в отдельном потоке. В нем новая Django. 4. Django отработала, вернула ответ. 5. Gunicorn получил ответ, завершил работу потока. Вернул ответ серверу nginx. 6. Сервер nginx обнаружил событие ответа на запрос и вернул результат юзеру. Так получается?
0
|
||
|
Просто Лис
|
||||||||||||||
| 15.07.2020, 09:12 | ||||||||||||||
Добавлено через 1 минуту https://docs.gunicorn.org/en/s... deployment
2
|
||||||||||||||
|
|
||
| 15.07.2020, 13:23 | ||
|
Рыжий Лис,
Допустим, есть модель А. Приходит запрос на первый инстанс и создаётся экземпляр этой модели (запись в бд, тот же постгрес, к примеру). На второй инстанс приложения приходит запрос на получение этой записи. Я верно понимаю, что запись будет доступна (так как каждый инстанс обращается к бд, когда есть определённый запрос, и на момент запроса на второй инстанс приложения запись в бд уже есть)?
0
|
||
|
Просто Лис
|
|
| 15.07.2020, 13:32 | |
|
Да, всё верно. Если в базу вставили запись (INSERT или обновили UPDATE, или удалили DELETE) и при этом сделали коммит (COMMIT, в джанге по умолчанию autocommit включён), то при следующих запросах (в том числе и из других воркеров) к базе будет отдаваться изменённая версия данных.
А вот если коммит не делать (я периодически об это обжигаюсь), то всем остальным клиента будет отдаваться старая версия данных, и только ты в текущей сессии будешь видеть новые (пока не закоммитишь или не откатишь изменения). Впрочем, для джанги такие случаи редки (хотя она тоже умеет в транзакции).
1
|
|
|
|
|
| 15.07.2020, 13:39 | |
|
Рыжий Лис, теперь понятно, об что я иногда бился в фласке с алхимией
0
|
|
|
|
|||||||
| 15.07.2020, 13:48 | |||||||
|
Рыжий Лис, погоди, ты же об этом?
autocommit в False выставлен по дефолту
0
|
|||||||
|
Просто Лис
|
||
| 15.07.2020, 13:52 | ||
|
Видимо, да, про это.
1
|
||
|
|
|
| 15.07.2020, 14:42 | |
|
Рыжий Лис, вот и я теперь понял. Спасибо.
0
|
|
| 15.07.2020, 14:42 | |
|
Помогаю со студенческими работами здесь
20
Что будет, если не установить параметр запроса? Что будет результатом выполнения запроса e(5,[1,2,5,8,1,5,7],X), если ЛП выглядит следующим образом Что будет просисходить в оперативке, если запустить два одинаковых процесса? Что будет, если поставить две разные Windows на два разных HHD? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|