Что если несколько пользователей одновременно обратятся к скрипту?

Имеется следующая связка:

apache - php - mysql
или
nginx - php - mysql

Собственно вопросы: Что происходит когда

1) разные пользователи одновременно обращаются к разным php-скриптам на nginx или apache сервере?
2) а если одновременно и к одному скрипту?
3) несколько пользователей по средством скрипта одновременно запросили данные из БД (MySQL), например, для рендера динамической страницы (и если эта самая страница не закеширована не сервере)?
4) нужно одновременно записать в одну таблицу (MySQL) данные от нескольких пользователей? Например, они одновременно отправили комментарий?

Интересно именно в контексте apache/nginx - php - mysql.
Как происходит обработка одновременных запросов от разных пользователей в логике описанных серверов, в логике php и mysql? Ставятся ли запросы в очередь, выполняются ли параллельно или может происходят какие-то ошибки?
И в какую сторону копать, чтобы разобраться в этом? Заранее спасибо.
  • Вопрос задан
  • 2280 просмотров
Решения вопроса 1
saboteur_kiev
@saboteur_kiev
build engineer
1) разные пользователи одновременно обращаются к разным php-скриптам на nginx или apache сервере?

Не очень понятен вопрос. Каким образом разные пользователи обращаются к разным php скриптам ?
Пользователи обращаются к веб серверу (apache/nginx), и к скриптам (с точки зрения скрипта) обращается только один пользователь, от имени которого запущен собственно apache/nginx.
Как работает многозадачность в apache/nginx можно читать спецификации. Но парралельная обработка одного и того же скрипта не проблема.

2) а если одновременно и к одному скрипту?

Тоже самое

3) несколько пользователей по средством скрипта одновременно запросили данные из БД (MySQL), например, для рендера динамической страницы (и если эта самая страница не закеширована не сервере)?

Опять таки, запрос идет от одного пользователя, от имени которого запущен веб-сервер, который запускает php скрипт, который делает запрос. Нормальная база данных написана так, чтобы обрабатывать много парралельных запросов. Поэтому подобный вопрос имеет смысл поднимать только для очень нагруженных серверов, когда скорости не хватает, и нужно идти в оптимизацию/кластеризацию.

4) нужно одновременно записать в одну таблицу (MySQL) данные от нескольких пользователей? Например, они одновременно отправили комментарий?

Mysql обработает запросы по очереди, в порядке их поступления. Именно потому, что в базу пишут не разные скрипты одновременно, а сам сервер базы - параллельные запросы он поставит в очередь и выполнит.
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
l3ftoverz
@l3ftoverz Куратор тега PHP
Rings of Saturn - The Husk
разные пользователи одновременно обращаются к разным php-скриптам на nginx или apache сервере?
Вопрос или утверждение?

а если одновременно и к одному скрипту?
Запустится 2 потока одного скрипта.

несколько пользователей по средством скрипта одновременно запросили данные из БД (MySQL)
У MySQL есть очередь запросов.

нужно одновременно записать в одну таблицу (MySQL) данные от нескольких пользователей? Например, они одновременно отправили комментарий?
Без проблем вставятся, смотря какой код, какие условия.
Ответ написан
Adamos
@Adamos
Весь вопрос вокруг банальной и обычной для новичков ошибки.
Я считал что-то из базы, обработал и хочу записать.
Что будет, если между этими событиями база изменится?
Правильный ответ: база не должна изменяться между этими событиями.
Либо блокировка записей, либо - и желательно - правильные запросы, которые делают получение данных и их изменение атомарным.
Ответ написан
Stalker_RED
@Stalker_RED
Кое-что из перечисленного выстраивается в очереди, кое что может работать и параллельно (это настраивается).

Ну и ошибки могут быть, конечно, если код не рассчитан на параллельную работу.
Ответ написан
@metajiji
1) и 2) разные пользователи запустят скрипт, более ничего не произойдет. Проблемы могут быть, если этот скрипт пишет данные в файл. В таком случае данные в файле будут от последнего, кто запустил скрипт, а в случае записи в конец файла получим кашу :)
3) и 4) работа с базой по сети, там есть очередь коннектора и блокировок, причем это уже проблемы сервера, а не скрипта, можете не беспокоиться. Беспокоиться нужно если база в файле, например sqlite, msaccess, вот там блокировки нужно самостоятельно обрабатывать.
Ответ написан
Acuna
@Acuna
Заполнил свой профиль
Так ведь скрипт - это тот же index.php, то есть сам сайт по сути) Если уж совсем на пальцах, то сервер - это папка, где хранятся файлы, а браузер просматривает эти файлы (это и есть HTTP), что произойдет если миллион человек запросят файл index.php? Сервер им его отдаст, ибо это просто его просмотр. Это не многозадачность, это просто обращение к файлу. Другой вопрос если этот скрипт что-то пишет в другой текстовый файл (не в БД, БД это как раз многозадачность), то там будут возникать блокировки и вообще что угодно, вплоть до его повреждения. Но это уже из другой области вопрос, а вы про HTTP спрашиваете.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы