Добрый день Есть проект к которому в секунду стучится порядка 200-300 запросов (далее request) На каждый такой request выполняется 2-4 запроса в базу Проблема в том что сервер при такой нагрузке работает на 70-80% Но появилась острая необходимость логировать все request'ы и более того - ответы на них В начале я просто записывал все request'ы и ответы на них в базу, но сервер переставал справляться с такой нагрузкой, так как кол-во запросов выросло на 60-80%, и поэтому появлялась задержка Увеличивать железо пока не вариант Сейчас думаю над 2мя вариантами 1 - (может глупый) - логироватть все в файл - вопрос в том - я не знаю, на сколько этот метод лчше или хуже простой записи в базу, да и перебирать файлик гораздо сложнее чем БД 2 - дублировать все приходящие request'ы на другой сервер, который уже будет их логировать - тоже не знаю на счет ресурсов - как это вообще, много ресурсов сервера уйдет на дублирование request'a или нет ? 3 - надеюсь Вы мне что нибудь сможете подсказать, или же склонить в сторону какого либо варианта Спасибо =)
Веб-сервер nginx, PHP-FPM и версия как минимум PHP 7? лучше в базу, может если логика простая, то сделать функцию в базе, чтобы было 1-2 запроса с логироваанием вместо 2-4, смотря что логировать нужно, так как это может делать веб-сервер, ещё через redis
1. Все входящие запросы у вас и так логируются на уровне веб-сервера 2. в хайлоад проектах логи (те что указал тс) пишутся обычно в одтельный микросервис, application server просто выплевывает туда содержимое и забывает. Так умеют делать расширения для логирования практически любого современного фреймворка. 3. 70-80% нагрузки на ап, это выше нормы. Отлаживайте код смотрите что происходит, сколько тысяч пользователей одновременно обслуживаются этим сервером что вызывает такие нагрузки. Опять же 70-80% это что? CPU? IOPS? Озу?. конкретизируйте такие вещи.
Спасибо за ответы - понял что недостаточно открыто написал В общем - проект - это Такси сервис, и подавляющее большинство запросов содержат в себе показания счетчика и gps координаты То есть водитель раз в 4 секунды шлет свои координаты и показания счетчика на сервер А сервер это все записывает. Я бы рад что то кэшировать, но тут кэшировать то и нечего Сервер nginx / php 5.5 / FRM - Codeigniter 3 Я проект не стартовал, я его "поддерживаю" - так что ничего из этого не могу сменить, поэтому и приходится работать с тем что есть 70% нагрузки на проц - забирает mysql То что входящие запросы логируются в nginx - я знаю, но как посмотреть соответствующий ответ на этот запрос ?
в linux есть команды для работы с логами Вот тут нужно нанять специалиста, системного администратор, он оптимизирует mysql, возможно станет лучше работать
Всегда есть что кэшировать )) В общем случае mysql не любит, когда её дергают множеством запросов на вставку данных, а как я понял, их как минимум 1000 в секунду. Попробуйте собирать запросы на добавление в кучу и булькать их одним запросом, ну скажем раз в минуту.
В Mysql конфиге 5000 директив. Каждая из них так или иначе влияет про производительность и просто так лезть что-то менять не нужно. Смотрите какие задачи и запросы его грузят, смотрите можно ли и нужно ли их оптимизировать. Подумайте о том, достаточно ли будет просто настроить репликацию и писать всегда в мастер а читать всегда со слейва.