Главный принцип решения проблем с высокой нагрузкой заключается в том, чтобы не спешить и не пытаться угадать причину.
Спешим, поэтому угадываем
Очень трудно удержаться от того чтобы переходить к действиям, и вместо этого продолжать изучать проблему.
Проблемы оптимизации обычно давят на сознание. Сервер тормозит, пользователи жалуются, надо срочно принимать меры.
В таком давлении кажется что вдумчивому исследованию нет места. Надо предпринимать попытки сразу всё исправить. Ведь мы знаем свою систему?
Угадать не получается
Но на практике, с угадыванием причин дело обстоит очень плохо.
Мы, разработчики, переоцениваем свои возможности на этот счёт. Часто мы не попадаем с предсказанием.
Тратим время на ложный след
Если мы угадываем, то мы предполагаем причину. И начинаем исправлять, не убедившись, что причина именно в этом.
Потратив время на “исправления”, не достигаем результата и всё нужно начинать заново. Получается что теряем время зря.
В ещё большей спешке мы отправляемся на новый круг.
Пример
- Cервер тормозил и долго отвечал.
- Программист работавший на проекте, знал что есть фоновые задачи которые долго выполняются из-за медленных запросов.
- Он решил что всё дело в фоновых задачах и стал заниматься их оптимизацией.
- Потратил несколько часов, оптимизировал.
- Но проблема не ушла. Сервер продолжал тормозить.
Копнули раз
После отброса этой версии и сбора информации выяснилось, что на сервере не хватает оперативной памяти.
Тут тоже можно было перейти к предположениям и обвинить например БД и перейти к оптимизации БД.
Копнули два
Но мы сделали замер используемой памяти по программам и выяснили, что память съедена вовсе не основным PHP приложением сервера, и даже не БД, а обычными фоновыми процессами Node.js.
Копнули три
Как только это стало явным, причина была найдена — крон запускал множество процессов, которые не завершали работу и в результате съели всю память.
Пофиксили
Пофиксили быстро. Если бы не оптимизировали запросы (угадывание) а занимались установлением точной причины то проблема решилась бы в разы быстрее.
Заключение
90% работы по решению проблемы с высокой нагрузкой, это поиск причины. И только 10% — устранение причины.
Не спешите угадывать, дайте себе время на поиск настоящей причины. Оно окупится.