Zookeeper / Chubby -vs- MySql NDB - PullRequest
       6

Zookeeper / Chubby -vs- MySql NDB

15 голосов
/ 21 февраля 2010

Я недавно читал статью Паксоса, теорему о ФЛП и т. Д. И оценивал Apache Zookeeper для проекта. Я также знакомился с Chubby (сервис распределенной блокировки Google) и различной литературой, доступной в Интернете. Мой основной сценарий использования Zookeeper заключается в реализации репликации и общей координации для распределенной системы.

Мне было просто интересно, каково конкретное преимущество, которое Zookeeper или Chubby-подобная система распределенной блокировки приносит на стол. В основном мне просто интересно, почему я не могу просто использовать MySQL NDB Cluster. Я продолжаю слышать, что MySQL имеет много проблем с репликацией. Я надеялся, что некоторые с большим опытом в этой области могут пролить свет на это.

Заранее спасибо ..

Упрощенный список моих требований:

  • У меня однородная распределенная система.
  • Мне нужны некоторые средства для поддержания согласованного состояния во всех моих узлах.
  • Моя система предоставляет сервис, и взаимодействие с клиентами приведет к некоторому изменению коллективного состояния моей системы.
  • Высокая доступность является целью, поэтому отключение узла не должно влиять на службу.
  • Я ожидаю, что система будет обслуживать как минимум пару тысяч запросов в секунду.
  • Я ожидаю, что коллективное состояние системы будет ограничено по размеру (в основном вставки / удаления будут временными ... но в устойчивом состоянии я ожидаю много обновлений и чтений)

Ответы [ 2 ]

16 голосов
/ 24 февраля 2010

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

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

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

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

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

11 голосов
/ 22 февраля 2010

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

Использование Innodb и одного из приведенных выше решений для репликации позволит скопировать ваши данные на ваше устройство Failover, что является большой частью решаемой проблемы восстановления, но для переконфигурирования вашей системы требуется дополнительный клей, чтобы подключить устройство Failover к сети , Обычно это выполняется с помощью кластерной системы, такой как RHCS, Pacemaker или Heartbeat (в Linux) или MS Cluster для Windows. Эти системы представляют собой наборы инструментов, и вам остается только испачкать руки, превратив их в решение, подходящее для вашей среды. Однако для всех этих систем существует короткий период простоя, пока система замечает, что первичный произошел сбой, и перенастраивает систему для использования модуля Failover. Это может занять десятки секунд: попытка уменьшить это может сделать вашу систему обнаружения сбоев слишком чувствительной, и вы можете обнаружить, что ваша система отказывается без необходимости.

Двигаясь вверх, MySQL NDB призван сократить время восстановления и в некоторой степени помочь расширить вашу базу данных для повышения производительности. Однако MySQL NDB имеет довольно узкий диапазон применимости. Система отображает реляционную базу данных в распределенную хеш-таблицу, и поэтому для сложных запросов, включающих множественные объединения между таблицами, между компонентом MySQL и компонентами хранилища (узлами NDB) довольно много трафика, что делает сложные запросы медленными. Однако запросы, которые хорошо подходят, действительно выполняются очень быстро. Я смотрел на этот продукт несколько раз, но мои существующие базы данных были слишком сложными, чтобы соответствовать им, и для получения хорошей производительности потребовалось бы много изменений. Однако, если вы находитесь на стадии проектирования новой системы, NDB будет работать хорошо, если вы будете помнить о ее ограничениях по ходу работы. Кроме того, вы можете обнаружить, что вам нужно немало машин для обеспечения хорошего решения NDB: пара узлов MySQL плюс 3 или более узлов NDB - хотя узлы MySQL и NDB могут сосуществовать, если ваши требования к производительности не слишком велики.

Даже MySQL NDB не может справиться с полной потерей сайта - пожар в центре обработки данных, ошибка администратора и т. Д. В этом случае вам обычно требуется другой поток репликации, работающий на сайте DR. Обычно это делается асинхронно, чтобы сбой соединения на межсайтовой ссылке не останавливал всю вашу базу данных. Это обеспечивается опцией географической репликации NDB (в платной телефонной версии), но я думаю, что MySQL 5.1 и выше может обеспечить это изначально.

К сожалению, я мало что знаю о Zookeeper и Chubby. Надеюсь, что кто-то еще сможет понять эти аспекты.

...