Как веб-сайт должен обрабатывать сбой базы данных - PullRequest
3 голосов
/ 03 марта 2011

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

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

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

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

Ответы [ 3 ]

5 голосов
/ 03 марта 2011

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

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

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


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

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


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

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

2 голосов
/ 03 марта 2011
  1. Надлежащим отображением является простое сообщение об ошибке «упс», которое не выдает никакой информации, которая была бы полезна хакерам. Что-то вроде «у нас возникли технические трудности» или «сайт недоступен». Это в целях безопасности .

  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

1 голос
/ 03 марта 2011

Рекомендуется возвращать код состояния 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...