За последние 24 часа нас посетили 16439 программистов и 1551 робот. Сейчас ищут 2050 программистов ...

Как сделать полное логирование и при этом не уронить сервер

Тема в разделе "PHP и базы данных", создана пользователем qwanderer, 1 июл 2017.

Метки:
  1. qwanderer

    qwanderer Новичок

    С нами с:
    1 июл 2017
    Сообщения:
    2
    Симпатии:
    0
    Добрый день
    Есть проект к которому в секунду стучится порядка 200-300 запросов (далее request)
    На каждый такой request выполняется 2-4 запроса в базу
    Проблема в том что сервер при такой нагрузке работает на 70-80%
    Но появилась острая необходимость логировать все request'ы и более того - ответы на них
    В начале я просто записывал все request'ы и ответы на них в базу, но сервер переставал справляться с такой нагрузкой, так как кол-во запросов выросло на 60-80%, и поэтому появлялась задержка
    Увеличивать железо пока не вариант

    Сейчас думаю над 2мя вариантами
    1 - (может глупый) - логироватть все в файл - вопрос в том - я не знаю, на сколько этот метод лчше или хуже простой записи в базу, да и перебирать файлик гораздо сложнее чем БД
    2 - дублировать все приходящие request'ы на другой сервер, который уже будет их логировать - тоже не знаю на счет ресурсов - как это вообще, много ресурсов сервера уйдет на дублирование request'a или нет ?
    3 - надеюсь Вы мне что нибудь сможете подсказать, или же склонить в сторону какого либо варианта
    Спасибо =)
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Веб-сервер nginx, PHP-FPM и версия как минимум PHP 7?

    лучше в базу, может если логика простая, то сделать функцию в базе, чтобы было 1-2 запроса с логироваанием вместо 2-4,

    смотря что логировать нужно, так как это может делать веб-сервер, ещё через redis
     
  3. t1grok

    t1grok Новичок

    С нами с:
    29 янв 2017
    Сообщения:
    119
    Симпатии:
    32
    RabbitMQ + MongoDB
     
  4. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    1. Все входящие запросы у вас и так логируются на уровне веб-сервера
    2. в хайлоад проектах логи (те что указал тс) пишутся обычно в одтельный микросервис, application server просто выплевывает туда содержимое и забывает. Так умеют делать расширения для логирования практически любого современного фреймворка.
    3. 70-80% нагрузки на ап, это выше нормы. Отлаживайте код смотрите что происходит, сколько тысяч пользователей одновременно обслуживаются этим сервером что вызывает такие нагрузки. Опять же 70-80% это что? CPU? IOPS? Озу?. конкретизируйте такие вещи.
     
  5. qwanderer

    qwanderer Новичок

    С нами с:
    1 июл 2017
    Сообщения:
    2
    Симпатии:
    0
    Спасибо за ответы - понял что недостаточно открыто написал
    В общем - проект - это Такси сервис, и подавляющее большинство запросов содержат в себе показания счетчика и gps координаты
    То есть водитель раз в 4 секунды шлет свои координаты и показания счетчика на сервер
    А сервер это все записывает. Я бы рад что то кэшировать, но тут кэшировать то и нечего
    Сервер nginx / php 5.5 / FRM - Codeigniter 3
    Я проект не стартовал, я его "поддерживаю" - так что ничего из этого не могу сменить, поэтому и приходится работать с тем что есть
    70% нагрузки на проц - забирает mysql

    То что входящие запросы логируются в nginx - я знаю, но как посмотреть соответствующий ответ на этот запрос ?
     
  6. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    в linux есть команды для работы с логами

    Вот тут нужно нанять специалиста, системного администратор, он оптимизирует mysql, возможно станет лучше работать
     
  7. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Всегда есть что кэшировать ))

    В общем случае mysql не любит, когда её дергают множеством запросов на вставку данных, а как я понял, их как минимум 1000 в секунду. Попробуйте собирать запросы на добавление в кучу и булькать их одним запросом, ну скажем раз в минуту.
     
    Fell-x27 нравится это.
  8. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    В Mysql конфиге 5000 директив. Каждая из них так или иначе влияет про производительность и просто так лезть что-то менять не нужно.
    Смотрите какие задачи и запросы его грузят, смотрите можно ли и нужно ли их оптимизировать. Подумайте о том, достаточно ли будет просто настроить репликацию и писать всегда в мастер а читать всегда со слейва.
     
  9. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Еще могу посоветовать установить mysqltuner. Может, чем сможет помочь.