Главный принцип решения проблем с высокой нагрузкой заключается в том, чтобы не спешить и не пытаться угадать причину.

Спешим, поэтому угадываем

Очень трудно удержаться от того чтобы переходить к действиям, и вместо этого продолжать изучать проблему.

Проблемы оптимизации обычно давят на сознание. Сервер тормозит, пользователи жалуются, надо срочно принимать меры.

В таком давлении кажется что вдумчивому исследованию нет места. Надо предпринимать попытки сразу всё исправить. Ведь мы знаем свою систему?

Угадать не получается

Но на практике, с угадыванием причин дело обстоит очень плохо.

Мы, разработчики, переоцениваем свои возможности на этот счёт. Часто мы не попадаем с предсказанием.

Тратим время на ложный след

Если мы угадываем, то мы предполагаем причину. И начинаем исправлять, не убедившись, что причина именно в этом.

Потратив время на “исправления”, не достигаем результата и всё нужно начинать заново. Получается что теряем время зря.

В ещё большей спешке мы отправляемся на новый круг.

Пример

  1. Cервер тормозил и долго отвечал.
  2. Программист работавший на проекте, знал что есть фоновые задачи которые долго выполняются из-за медленных запросов.
  3. Он решил что всё дело в фоновых задачах и стал заниматься их оптимизацией.
  4. Потратил несколько часов, оптимизировал.
  5. Но проблема не ушла. Сервер продолжал тормозить.

Копнули раз

После отброса этой версии и сбора информации выяснилось, что на сервере не хватает оперативной памяти.

Тут тоже можно было перейти к предположениям и обвинить например БД и перейти к оптимизации БД.

Копнули два

Но мы сделали замер используемой памяти по программам и выяснили, что память съедена вовсе не основным PHP приложением сервера, и даже не БД, а обычными фоновыми процессами Node.js.

Копнули три

Как только это стало явным, причина была найдена — крон запускал множество процессов, которые не завершали работу и в результате съели всю память.

Пофиксили

Пофиксили быстро. Если бы не оптимизировали запросы (угадывание) а занимались установлением точной причины то проблема решилась бы в разы быстрее.

Заключение

90% работы по решению проблемы с высокой нагрузкой, это поиск причины. И только 10% — устранение причины.

Не спешите угадывать, дайте себе время на поиск настоящей причины. Оно окупится.