Кэширование страниц сайта на случай гибели MySQL-сервера

Поскольку мой сайт живёт на хорошом, но высоконагруженном shared-хостинге, который иногда любит терять MySQL-сервер, то стала задача кэширования страниц сайта на диске сервера на случай гибели MySQL-сервера и возможности работы сайта в автономном режиме, которая была успешно решена следующим образом:

  • Создана папка для хранения закэшированных страниц с запрещением прямого доступа туда средствами Apache
  • В CMS включен ob_start(); до начала любого вывода данных
  • В конце формирования страницы в штатном режиме добавлена функция, которая сохраняет текущую страницу со всеми потрохами в файл на диске. Не забываем выключить её для зарегистрированных пользователей, что-бы данные не предназначенные для анонимных пользователей не попали в сеть.
    Делаю следующим образом: file_put_contents(CACHE.$sCachleFile,ob_get_contents());    //write page cache to file
  • При подключение к базе данных вешаю проверку, которая на случай отказа вызывает мою функцию для чтения дискового кэша:
    $dbLinkId = @mysql_connect(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD) or fnOffilneMode();
if(is_file(CACHE.$sCachleFile)){  //Cache страницы существует
//get page cache
echo file_get_contents(CACHE.$sCachleFile);
//write cache log
file_put_contents(
CACHE.'cache_hint_log_file.log',
date('c').' '.$sCachleFile."\n",
FILE_APPEND
);
}else{ //Показать шаблон оффлайнового режима
require_once(TEMPLATES.'site_offline.php');
}

Кажись работает :)

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

Работа над ошибками

Неделя свободного полёта кэша на случай смерти MySQL-сервера, показала, что это решение не спасает от гибели Apache и сервера как компьютера :)

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

А именно:

  • Добавлена запись в файловый лог попаданий в кэшь - что-бы было чем махать перед хостером, когда я буду кричать с пеной у рта "Верните мне моё бабло!!" :)
  • Изменён способ именования файлов кэша страниц - сейчас генерю их методом md5('слегка обработанное от мусора значение адреса')
  • Вывешен гламурный блочёк над левым меню, который информирует посетителей об очередном падалове MySQL-сервера и сообщает дату и время, когда страница была закэширована
  • Сделан флаг, передёрнув который, подключаемые модули могут сказать, что страница не должна попасть к кэшь. Применил для страниц, на которых могу зависнуть персональные данные посетителей.
  • Для страниц, которых не нашлось в кэше, показываю специательный шаблон, с общим текстом что-то типа "Вельмi соррi" и HTTP-заголовками, говорящими гуглам, что всё плохо - зайдите позже.

А вообще баловство всё это - к сожалению похоже нужно искать более другой белорусский хостинг :(

Добавлено: Поиск нового хостинга откладывается на неопределённый период. Через недельку сервер начал исправляться - теперь выпадение из жизни наблюдается раз в сутки-двое на время около пары минут в самую глубокую локальную ночь. Похоже поддержка не зря ест свой хлеб, хотя иногда она его ест очень медленно :)
Возможно MySQL-сервер отстреливают для создания server-wide резервной копии.

Тэги:

CMS howto MySQL Varvashenia CMS Кэширование Сервер Хостинг
RSSAdd to Google

Обсуждение:

  • Автор: (Анонимус)
  • Тема: Вопрос о хостинге
  • А какой у тебя хостинг? Предупреди товарищей от ошибок с хостингом.

  • Отправлено:
  • Автор: Dmitrii Varvashenia
  • Тема: Вопрос о хостинге
  • Хостинг самый что ни на есть белорусский и я его считаю лучшим из доступных на белорусской площадке -- от хостер.бай.

    Всё предыдущее многолетнее сотрудничество показало его очень надёжным, хотя первые баго-ласточки именно на этом сервере (vh27) стали вылазить с месяц-два назад. Я пока всё ещё верю, что ребята работают и стандартная отписка сапорта "Купите VPS" после очень вменяемого диалога является следствием их занятости над решением проблемы :)

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

    Этой ночью mysql вышел покурить в самое гиблое время и всего на минут 15, что я считаю прогрессом :)

    Поскольку мой новый кэшь после апдэйта ещё не подтянулся, то я потерял 2-х посетителей и 3 хита, нагрянувших именно в эти 15 минут.

    Ещё с неделю-другую пособираю статистику и буду решать что с этим делать дальше.

  • Отправлено:
  • Автор: Dmitrii Varvashenia
  • Тема: Забыл отчитаться
  • хостер исправился - теперь мускул не падает даже во время бэкапов.

  • Отправлено:

Как вам материальчик? *



















Тема:

Мысль:

Как звать-то:

Почта:

PS: Комментарии публикуются только после проверки модератором.

PPS: E-mail'ы не публикуются.

* обязательные поля