Задать вопрос
@Suleimanov_Ismar

Из-за большого количество посетителей сайт поплыл, что делать?

Здравствуйте всем, прошу подскажите что делать?
Описание
Сделал сайт, как обычно на Html, Css, Jquery, Ajax, Php.
Начал тестировать его, Зашли разом на сайт 10 чел и начали неимоверно быстро нажимать на все подряд одно временно, за 1 мин поступило около 1500 запросов в базу и столько же ответов, и все тютю сайт поплыл, все перестало выводится, добавляться он вообще завис .
Нужно учитывать, что сайт всегда взаимодействует с базой, нужно постоянно что то записывать и выводить.

Вопросы:
Как исправить проблему, кроме как переделывать на Nodejs?
Есть ли решения кроме Nodejs?
Как сделать чтобы на сайт могли зайти миллион людей и чтобы сайт выдержал нагрузки.

Заранее Спасибо всем огромное.
  • Вопрос задан
  • 2982 просмотра
Подписаться 4 Оценить Комментировать
Решения вопроса 1
iiifx
@iiifx
PHP, OOP, SOLID, Yii2, Composer, PHPStorm
Как исправить проблему, кроме как переделывать на Nodejs?

Контролировать запросы к БД. Не создавать повторных идентичных запросов без нужды. Повторно использовать полученные данные. Использовать кэширование данных. Оптимизировать структуру БД, включая индексы.

Есть ли решения кроме Nodejs?

Проблема у вас не в PHP.

Как сделать чтобы на сайт могли зайти неимоверное количество людей и чтобы сайт выдержал нагрузки

Использовать рекомендации, которые я и другие вам написали.

Правда жизни: Прочитал книгу "Как изучить PHP за 20 минут" - сделал сайт. Все классно, но если заходит больше 3х человек сайт перестает работать! PHP - га**о! Ухожу на NodeJS\Ruby\Python\*...
Ответ написан
Пригласить эксперта
Ответы на вопрос 6
@Nc_Soft
Переписывай на ноду, ляжет еще быстрее :D
Ответ написан
Комментировать
@deliro
Профилировать, логировать слоу запросы, искать узкие места. 1500 запросов - это не о чём. У меня в данный момент включен парсер, который делает 1000 запросов в секунду к базе и ей норм.

P.S. vk.com написан на PHP и ему тоже норм.
Ответ написан
@karminski
Senior React.JS Developer
Ну вообще то 1500 запросов в минуту это совсем таки мало. Такую "нагрузку" держит стандартный веб-сервер (Apache + PHP) на виртуалке с 512Мб оперативной памяти и 1 ядром. Так что, на мой взгляд, что-то не ладное в вашем коде. На чём собственно сайт? Какой PHP движок?

Плюс ко всему, вы вопрос неверно строите. Что значит в вашем понимании "неимоверное количество людей"? Для каких целей? Ваш сайт - соцсеть? Интернет магазин?

А что у вас с кешированием MySQL-запросов, данных? Наверно не используете?
Ответ написан
Комментировать
iam_not_a_robot
@iam_not_a_robot
Ставлю на что что у вас индексы в базе данных не расставлены поэтому запросы медленно идут, поэтому всё долго и падает
Ответ написан
@asd111
Используй memcache или redis, чтобы каждый раз не ходить в БД за одними и теми же данными - должно существенно поднять производительность.
Для сайтов с миллионами посетителей используют мощные сервера или несколько серверов - вертикальное или горизонтальное масштабирование, как правило используется горизонтальное плюс те же redis, memcache, elastic search и т.п.

Memcache и redis это такие программы(службы), которые работают в фоне и позволяют сохранять данные в оперативной памяти в формате ключ:значение. Например
123: "Здесь какой то длинный текст полученный из БД"
. К этим данным доступ осуществляется быстрее чем к БД, т.к. данные находятся в оперативной памяти, но чтобы они туда попали нужно их туда записать из БД и потом можно пользоваться. У redis более богатые возможности, но начать можно c memcache. У memcache тоже очень большие возможности - можно почитать книжки на эту тему.

Вот мануал для php.
php.net/manual/ru/book.memcached.php

Работа с кэшем выглядит примерно так:
<?php
$m = new Memcached();
$m->addServer('localhost', 11211);

if (!($text = $m->get('my_text'))) {    // Проверяем есть ли значение в кэше и если нет то идем в базу
    if ($m->getResultCode() == Memcached::RES_NOTFOUND) {
        $text = Get_Data_From_DB(); // Получение каких нибудь данных из БД
        $m->set('my_text', $text);  // Установка значения в кэше
    } else {
        /* log error */
        /* ...       */
    }
}
?>
Ответ написан
@andreyvlru
менеджер-программист
1500 / 10 / 60 = 2.5 запроса в секунду это очень мало

локализуйте проблему
Вам нужно узнать сколько по времени генерируются страницы
за какое время выполняются запросы к базе
и после этого вам станет понятно что улучшать
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы