Как веб-сайт должен обрабатывать сбой базы данных

В настоящее время я создаю веб-сайт на php с бэкэндом базы данных (может быть MySQL или SQL Server), и я недавно понял, что если моя база данных сбой в любой момент, мой сайт не будет работать должным образом и, вероятно, вызовет некоторые головные боли.

Итак, что нужно показывать на веб-сайте, если моя база данных (или любой важный внешний компонент) не работает? Мой конкретный веб-сайт в значительной степени опирается на его базу данных и без него будет практически бесполезен.

Один из вариантов, о котором мне сказали, – это отправить по электронной почте администратору веб-сайта и отобразить страницу «Ошибка 500», в которой говорится, что с сервером что-то не так, и в основном сделать сайт непригодным до исправления проблемы. Есть ли что-нибудь еще, что я мог бы сделать, чтобы обойти эту проблему? Существуют ли какие-либо способы разработки веб-сайта, чтобы сбой базы данных (любого важного компонента) не был проблемой?

Я ищу общие правила, а также конкретные примеры того, как люди работали над этим в прошлом. Кроме того, эти примеры не просто должны быть для моего веб-сайта.

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

Вообще говоря:

  • Шансы такой проблемы довольно низкие
  • Если ваш сайт является нормальным , люди будут иногда принимать проблемы, особенно если вы об этом общаетесь.

Если вы можете себе это позволить (и у вас есть технические знания, чтобы установить это) , вы можете использовать два сервера баз данных, с репликацией (MySQL поддерживает это) между ними: один мастер, который вы используете, и ведомый, который считается резервным ,

Затем, если мастер падает, ваше приложение будет использовать подчиненный.

Конечно, это значительно уменьшит риск проблемы с базой данных (одновременное сбой двух серверов в то же время весьма маловероятен), но у вас все еще будут проблемы со всеми другими компонентами – например, с вашим веб-сервером: если у вас есть только один, вы можете рассмотреть возможность использования двух, а второй – в качестве резервного.

После этого, если у вас все еще есть деньги (и вы думаете, что вам нужно еще лучшее время безотказной работы для вашего сайта) , вам нужно подумать о случае, когда у вашего центра обработки данных есть проблема – настройка сервера в двух разных местах …

  1. Правильная вещь для отображения – это простое сообщение об ошибке «oops», которое не дает информации, которая была бы полезной для хакеров. Что-то вроде «Мы испытываем технические трудности» или «веб-сайт недоступен». Это для целей безопасности .

  2. Было бы неплохо иметь систему регистрации ошибок и уведомлений, чтобы уведомлять администратора в случае сбоя. Это было бы довольно просто написать, но я уверен, что уже есть библиотеки, которые справляются с этим. (Есть учебник с примерами кода на http://net.tutsplus.com/tutorials/php/404403-website-error-pages-with-php-auto-mailer/ и более простой пример в http: //www.w3schools .com / php / php_error.asp )

  3. Существуют способы разработки архитектуры вашего веб-сайта для обработки сбоя компонента базы данных. Это не архитектура вашего сайта, это архитектура всей среды. Например, кластеризация базы данных для высокой доступности (http://en.wikipedia.org/wiki/High-availability_cluster). Это не дешево.

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

http://www.google.com/search?q=Error+Handling+Guidelines&rls=com.microsoft:en-us&ie=UTF-8&oe=UTF-8&startIndex=&startPage=1

редактировать

Я нашел это и подумал, что это очень хороший ресурс для ответа на то, как обрабатывать ошибки:

http://www.nyphp.org/PHundamentals/7_PHP-Error-Handling

Считается лучшей практикой возвращать код состояния HTTP 500 в случае, если ваша база данных не работает или какая-либо другая искалеченная служба не позволяет вашему веб-сайту нормально функционировать. В зависимости от функциональности ваших веб-сайтов это может быть на странице или на сайте. Например, ваша страница «О нас» может не нуждаться в возможностях базы данных во время вашей страницы поиска. Таким образом, вы можете сохранить страницу «О нас», но верните код статуса 500, когда кто-то перейдет на вашу страницу поиска.

Не указывайте техническую информацию о том, почему сайт не работает с конечным пользователем. Это может представлять угрозу безопасности.

Если вы используете apache, этот документ расскажет вам, как настраивать страницы пользовательских ошибок:

http://httpd.apache.org/docs/2.0/custom-error.html

Я рекомендую вам использовать простой HTML для ваших 500 кодовых страниц кода. Вы также можете, чтобы ваши страницы PHP отправляли код состояния 500 через функцию header (), описанную здесь:

http://php.net/manual/en/function.header.php