https://eko-salon.ru/
Владелец сети городских магазинов автомобильных чехлов месяцами жаловался: сайты то не открываются с айфона, то сразу со всех устройств, и всегда все 184 одновременно. До меня проблему пытались решить покупкой более мощного сервера. Я воспроизвел аварию и разобрал журналы: дело оказалось не в мощности.
Падения
Сервер не задыхался от нагрузки, он сам отключал посетителей: защита от частых обращений молча отрезала адрес человека на пять минут, причем сразу от всех 184 сайтов. Под нее попадали обычные покупатели, особенно с телефонов. Вторая причина: у семи старых сайтов права на файлы не давали быстрой части сервера их читать, и каждая картинка шла через тяжелую, где всего 150 рабочих мест на всю сеть. Двух посетителей хватало, чтобы встали все магазины. Третья: диск переполнялся из-за системного журнала без ограничений.
Все исправил с возможностью отката за минуту, добавил кеш страниц для поисковых роботов (владелец просил их не блокировать) и перевел карту сайта из пересборки на лету в готовый файл, с 13 секунд до 0,03. Отказы живым посетителям упали с полутора тысяч в сутки до нуля, ошибки доступа с 8669 до нуля, перезагрузки прекратились.
Место и скорость
Диск был занят на 88 процентов: 169 копий магазина хранили каждая свой набор одинаковых картинок по 3,7 ГБ. Скопировать такой объем было некуда, поэтому одинаковые файлы я объединил в один, а старые не удалял, а откладывал в отдельную папку с возвратом одной командой. Перед этим доработал движок, чтобы загрузка картинки в одном городе не меняла ее в других, и написал проверку каждого файла по контрольной сумме до и после. За пять ночей объединено 19,3 миллиона файлов, через неделю наблюдения копии удалены: занято 147 ГБ вместо 755, без потерь и простоя.
Попутно ускорил сайты: современный формат картинок, свой шрифт вместо загрузки с Google, больше памяти под готовый код. И нашел опечатку в одном символе движка, из-за которой полтора года все внутренние ссылки шли через лишнее перенаправление: 240 тысяч лишних обращений в сутки. Страница товара стала открываться за 0,25 секунды вместо 2,2.
Сложность была не в том, чтобы улучшить, а в том, чтобы не сломать работающий бизнес: заказы идут круглосуточно, бэкапов не было, любое изменение затрагивает сразу 184 сайта. Поэтому все делалось скриптами с холостым прогоном и копиями настроек, а данные удалялись только после недели наблюдения. Ни одного простоя, ни одного потерянного файла.