Архитектура базы данных мастер-мастер и мастер-подчиненный?

117

Я слышал о двух типах архитектур баз данных.

  • мастер-мастер

  • ведущий-ведомый

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

Мастер-подчиненный напоминает мне SVN (который мне не нравится), где у вас есть один центральный блок, который обрабатывает вещи.

Вопросы:

  1. Каковы плюсы и минусы каждого из них?

  2. Если вы хотите иметь локальную базу данных на своем мобильном телефоне, например, iPhone, какая из них вам больше подходит?

  3. Является ли выбор одного из этих факторов решающим фактором, который следует тщательно рассмотреть?

never_had_a_name
источник
1
Теорема CAP -> Доступность согласованности Допуск раздела утверждает, что у вас не может быть всех трех вместе. В зависимости от приложения вы можете выбрать любое из них.
Pritam Banerjee

Ответы:

87

Мы жертвуем доступностью, согласованностью и сложностью. Сначала ответьте на последний вопрос: имеет ли это значение? Да очень! Выбор в отношении того, как следует управлять вашими данными, является абсолютно фундаментальным, и не существует «передовой практики», позволяющей уклоняться от решений. Вы должны понимать свои особые требования.

Есть фундаментальное напряжение:

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

Главный-подчиненный: согласованность не так уж и сложна, потому что у каждой части данных есть ровно один хозяин-хозяин. Но что тогда делать, если этого мастера не видно, нужна какая-то отложенная работа.

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

В Википедии, кажется, есть хорошее резюме преимуществ и недостатков

преимущества

  • Если один мастер выходит из строя, другие мастера будут продолжать обновлять базу данных.

  • Мастера могут быть расположены на нескольких физических сайтах, т.е. распределены по сети.

Недостатки

  • Большинство систем репликации с несколькими ведущими являются непостоянно согласованными, то есть ленивыми и асинхронными, нарушающими свойства ACID.

  • Системы активной репликации сложны и вызывают некоторую задержку связи.

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

DJNA
источник
CouchDB использует MVCC. Решает ли этот тип проблему согласованности, с которой сталкиваются несколько мастеров, потому что, когда один из них снова подключился к сети, система управления версиями обрабатывает согласованность, и этот мастер получит правильные обновленные данные.
never_had_a_name
8
Но что происходит, когда два пользователя делают что-то противоречащее - например, два пользователя пытаются купить последний товар на складе? Представьте себе сценарий, в котором у нас есть два мастера, и каждый пользователь обращается к другому мастеру, а затем мы получаем какой-то сбой связи - в конечном итоге будет либо нарушение целостности, либо снижение доступности - одному пользователю говорят «извините, дружище, Я действительно не знаю, что происходит, пока не поговорю с другим мастером », или у нас возникнет неприятный конфликт, когда связь будет восстановлена ​​- и это может стать очень сложным.
djna
2
Что используют финансовая торговля или фондовые рынки? Они будут постоянно сталкиваться с этой проблемой?
CMCDragonkai
3
Там, где вам нужна единая обновляемая «правда» (как в финансовых системах), вам нужен Мастер / Подчиненный или даже просто Мастер. Если вы можете исправить правду позже (подумайте о конфликтах слияния в системе контроля версий, такой как Git), вы можете использовать Master / Master.
djna
djna делает очень важное наблюдение. База данных теперь должна иметь некую логику "разрешения конфликтов". Что самое главное? Самые «свежие» данные? Это имеет смысл, если вы переписываете поле, но не имеет смысла, если вы делаете «счетчик» и вам нужно, чтобы все процессы увеличивались (или уменьшались) перед возвратом результата. Тем более, что вы не продаете товары, которых нет в наличии. Если у вас был сетевой раздел, что произойдет, когда он снова соберется? Все это ерунда CAP theorum. Здесь также могут быть алгоритмы, подобные Paxos, для достижения консенсуса между разными машинами.
Питер Корлесс
95

Также исследуя различные архитектуры баз данных. Я собрал много информации, которая может иметь отношение к другим исследованиям в будущем. Я наткнулся

  1. Репликация Master-Slave
  2. Мастер-Мастер Репликация
  3. Кластер MySQL

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

1. Репликация "ведущий-ведомый"

Pros

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

Cons

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

2. Репликация мастер-мастер

Pros

  • Приложения могут читать от обоих мастеров
  • Распределяет нагрузку записи между обоими главными узлами
  • Простое, автоматическое и быстрое переключение при отказе

Cons

  • Слабо последовательный
  • Не так просто, как master-slave настроить и развернуть

3. Кластер MySQL

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

См. MySQL Cluster 101 для получения дополнительной информации.

Pros

  • (Высокая доступность) Нет единой точки отказа
  • Очень высокая пропускная способность
  • 99,99% времени безотказной работы
  • Авто-Sharding
  • Отзывчивость в реальном времени
  • Операции в сети (изменение схемы и т. Д.)
  • Распределенная запись

Cons

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

Skillachie
источник
2
Вы также можете написать что-нибудь о Галере? Кластер Percona XtraDB?
Иванов
«Возможно, придется перезапустить приложение» как часть минусов. Что это означает?
Лили
1
Если вам нужно изменить IP-адрес сервера БД, его нужно будет настроить в приложении, а также для чтения с нового выбранного мастера. В результате вам может потребоваться перезапустить приложение, чтобы получить новые параметры конфигурации. Все зависит от ваших текущих настроек. Вы также можете использовать плавающий IP-адрес, чтобы обойти это. Просто чтобы дать вам общее представление
Skillachie