Кэширование страниц сайта на случай гибели 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 резервной копии.







Обзор AgeStar NSB3AS1T NAS для 3.5" SATA HDD
Комментариев и оценок: 186
Обзор AgeStar NSB3AS1T NAS для 3.5" SATA HDD - сетевого хранилища на базе 3.5" SATA HDD с возможностью подключения по USB. 10/100 Mbit, SATA 3.5"
AgeStar FUBCP USB2.0 to IDE/SATA Adapter
Комментариев и оценок: 99
AgeStar FUBCP - подключение IDE или SATA 2.5",3.5" или 5.25" устройств через USB
Обзор жесткого диска HDD 2ТБ Western Digital WD20EARS
Комментариев и оценок: 74
Краткий обзор жесткого диска HDD 2ТБ Western Digital WD20EARS-00MVWB0 с фотографиями и тестами производительности.Многофункциональное устройство Canon LaserBase MF3228
Комментариев и оценок: 57
Многофункциональное устройство Canon LaserBase MF3228. Описание, впечатления от работы, ссылка на драйвера.
AgeStar SUB2O1 2.5" SATA External Enclosure
Комментариев и оценок: 54
Обзор с картинками и тестами AgeStar SUB201 - внешней USB коробки для 2.5" SATA винчестеров.