@aassdds
Люблю борщ и PHP

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

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

Сейчас думаю над 2мя вариантами
1 - (может глупый) - логироватть все в файл - вопрос в том - я не знаю, на сколько этот метод лчше или хуже простой записи в базу, да и перебирать файлик гораздо сложнее чем БД
2 - дублировать все приходящие request'ы на другой сервер, который уже будет их логировать - тоже не знаю на счет ресурсов - как это вообще, много ресурсов сервера уйдет на дублирование request'a или нет ?
3 - надеюсь Вы мне что нибудь сможете подсказать, или же склонить в сторону какого либо варианта
Спасибо =)
  • Вопрос задан
  • 1538 просмотров
Пригласить эксперта
Ответы на вопрос 3
@Fortop
Tech/Team lead
С уточнениями по результатам комментариев
Логи. Именно логи пишите в syslog.

А хранение и обработка истории операций это не логи. Это аналитика. Для этого существуют отдельные инструменты в зависимости от длительности истории. Для краткосрочной подойдут key-value БД типа Redis, которые будут накапливать информацию затем она будет агрегироваться и удаляться из них.

Ну и проверьте, что все 200-300 rps вам реально нужны к базе, а не к кешу.

Обычная практика показывает, что 1 млн пользователей в сутки создаёт нагрузку меньше 10 rps.
И при этом позволяет содержать 3-5 серверов
Ответ написан
dimonchik2013
@dimonchik2013
non progredi est regredi
логфайл
clickhouse
Ответ написан
Комментировать
Телепатически сложно попасть в 100%, но выглядит так:
1. Сделайте для начала просто сбор логов запросов (поисковых или подобных, видимо?) за сутки, например. Можно просто в текстовый файл.
2. Выкачайте получившийся лог на локальный комп, проанализируйте.
3. Если на этапе 2 вы выясните, что какие-то запросы повторяются, прикрутите кеш в памяти (сейчас самый модный в хорошем смысле - Redis).
Причём может оказаться, что повторяется часть запроса, которую можно кешировать (например, "лопаты совковые", "лопата грести деньги" - можно кешировать запрос "лопаты", а фильтровать уже по дополнению).
Если запросы совсем всегда разные, возможно, имеет смысл какие-то SQL-таблицы (которые участвуют в большинстве запросов) перекинуть на движок "memory" (для MySQL), или, опять же - в Redis.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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