1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Вопрос пыхапэ-разработчикам

Тема в разделе "Оффтопик", создана пользователем MySt1k, 3 июл 2015.

  1. Автор темы
    MySt1k

    MySt1k Старожил Пользователь

    Баллы:
    173
    Очень давно отложил этот вопрос на потом, так как не было нужды разбираться... и вот инфраструктура расширилась и пришло время решать проблему. Собственно вопрос.
    Как правильно работать с несколькими базами данных, допустим 3, с недоступной, допустим 1 базой , при этом используя mysqli?

    Объясняю.
    Есть 3 коннекта
    $mysqli = new mysqli("localhost","admin","admin","admin");
    $mysqli2 = new mysqli("localhost","admin","admin","admin");
    $mysqli3 = new mysqli("remotehost","admin","admin","admin", "3308");
    ...
    Есть множество запросов к каждой базе данных, но они ни как не связаны друг с другом. В коде нет зависимостей.
    ...
    Но в друг $mysqli3 отказала. Смотрим в браузер... О боже... да у нас тут везде "Warning: mysqli_fetch_array() exp..." и прочая гадость. Да еще и страница долго грузится... беда...
    Как профессионально это решить? Дабы часть веб-программы работала с теми бд, которые онлайн, не трогая код тех бд, которые оффлайн.
    На этот вопрос меня вдохновляет Яндекс компания... у них там все так налажено, что если несколько серверов упадут, сервис продолжит работать... Почему Яндекс? Потому что они были откровенно открыты по этому поводу и очень подробно расписали как у них устроено, но к сожалению, это на мой вопрос не отвечает.
     
    Последнее редактирование: 3 июл 2015
  2. book777

    book777 Старожил Пользователь

    Баллы:
    123
    У их бэкапятся БД. При отказе подключается другая

    P.S. "Warning: mysqli_fetch_array() exp..." нужно условие подключения к БД делать, чтоб ошибок не возникало. А в случае отказа перенаправлять на резервный БД с бэкапом за прошлый день
     
  3. Автор темы
    MySt1k

    MySt1k Старожил Пользователь

    Баллы:
    173
    Даже если так, у меня по другому... Если у меня отключится бд №3... нужно просто её как то проигнорировать, вот в этом вопрос...
     
  4. book777

    book777 Старожил Пользователь

    Баллы:
    123
    Просто в каждом употреблении запроса к этой БД обволакивай условием if($mysqli3) {...}
     
  5. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Каждый вызов делай не к конкретной, а той, что вернет функция проверки доступности
     
  6. STRELOK2022

    STRELOK2022 Активный участник Пользователь

    Баллы:
    88
    Имя в Minecraft:
    PolarWooolf
    У них все сервера дублируются, и не на один раз. Не знаю как у Яши, но у гугла в минуту сгорает несколько серверов, но это абсолютно никто не замечает...
     
  7. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Чувак, копай в сторону кластера.
     
  8. skynetxxx

    skynetxxx Старожил Пользователь

    Баллы:
    123
    Зачем ему кластер, если он спрашивает совершенно о другом?
    Как тебе уже тут писали, нужно обернуть все запросы к соединению с $mysqli3 в условие, либо же написать специальный класс, который будет выполнять запрос только в случае доступности базы данных.
    Логично, что они не будут отвечать на вопросы начинающего разработчика, который сам не понимает, зачем ему это нужно. Выход из строя базы данных - это в любом случае нештатная ситуация, и если оно происходит часто, то нужно пересмотреть архитектуру приложения либо железо (хостинг за 50 рублей/месяц?). Скорее всего механизм Яндекса, о котором идёт речь называется репликация (синхронизация данных между базами данных на разных серверах). Этот механизм не "серебряная пуля", поэтому использовать за пределами кластера, где это жизненно необходимо, я бы не стал.
    Был опыт использования репликации не по назначению, объединял базы данных на двух разных серверах (один в Германии, другой во Франции), но она потребляла большой объём трафика да и тратила на это порядочные системные ресурсы, что было решено изменить архитектуру приложения, использующего удалённую базу данных.
     
  9. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Потому что кластер как раз решает проблему нагрузки, или в случае ддоса. Баз же не сама по себе отваливается, такое бывает когда овер90000 посещаемость или ддос.
     

Поделиться этой страницей