2015-01-09 2 views
4

Я читал о GFS и ее модели согласованности, но я не понимаю ее. В частности, кто-то может дать мне конкретный пример сценарий (или объяснения того, почему это не может произойти) из:Модель согласованности файловой системы Google

  • одновременной звукозаписывающей Append, что может привести к рекордно дублированию
  • одновременно запись дописывания, что может привести к неопределенные регионы
  • одновременных операций записи (на один блок), которые могут привести к неопределенным регионов

ответ

3

Я цитирую от http://research.google.com/archive/gfs.html. Проверьте Таблицы 1, который представляет собой краткое изложение возможных результатов для записи/присоединяет:

Table 1 from GFS whitepaper

  1. «Если запись Append терпит неудачу в любом реплики, клиент повторит операцию. В результате реплики одного и того же фрагмента могут содержать разные данные, включая дубликаты одной и той же записи полностью или частично. " Таким образом, любой сбой на реплике (например, таймаут) приведет к дублированию записи по крайней мере на других репликах. Это может произойти без одновременной записи.

  2. Такая же ситуация, которая вызывает дублируемую запись, также вызывает несогласованную (и, следовательно, неопределенную) область. Если реплика не подтвердила мутацию, она, возможно, не выполнила ее. В этом случае, когда клиент повторяет добавление, эта реплика должна будет добавить дополнение вместо отсутствующих данных, чтобы запись могла быть записана с правильным смещением. Таким образом, одна реплика будет иметь прописку, а другая будет иметь ранее записанную запись в этом регионе.

  3. Сбой записи может привести к непоследовательной (следовательно, неопределенной) области. Более интересно, успешные параллельные записи могут вызывать согласованные, но неопределенные области. «Если запись в приложении большой или пересекает границу блока, код клиента GFS разбивает его на несколько операций записи . Они [...] могут чередоваться и перезаписываться параллельными операциями от других клиентов.Следовательно, общая область файлов может содержать фрагменты из разных клиентов , хотя реплики будут идентичными, поскольку отдельные операции успешно завершены в том же порядке на всех репликах. Это оставляет область файла в последовательном но неопределенном состоянии [...].»

+0

Привет, Даниэль, спасибо за ваш ответ, он отвечает на большинство моих вопросов. Однако есть еще одна вещь: мой основной источник путаницы исходит из того, что клиент только общается с основной репликой и именно эта реплика ждет подтверждения от других. Поэтому, если одна вторичная реплика не удастся добавить, то первичный узнает, что это произошло, и нет причин увеличивать указатель до конца файла, поэтому новый подход Впоследствии nds должны переопределить эту несогласованную область. Что мне не хватает? – Simone

+0

Я думаю, что можно было бы сделать, как вы говорите. Но я думаю, что GFS этого не делает. Я полагаю, что они упомянули об этом, если бы это сделали. Моя необразованная догадка заключается в том, что это увеличение пропускной способности для одновременных приложений. Если первичке захотелось вернуть указатель в случае сбоя, он не смог бы принять другие добавления к записи во время выполнения. Если он увеличивает указатель даже для неудачных мутаций, он может сразу принять другие приложения. Было бы здорово, если бы кто-то мог подтвердить/исправить эту теорию. –

+0

Как только основной получает сбой на реплике, следующая запись, которую она вставляет, обязательно будет одной и той же правой? Как говорится, «клиент повторяет» операцию. Тогда как другие добавления будут такими, как вы говорите. – sww

1

Я не думаю, что это на самом деле имеет дело с одновременным Append но с хотя бы один раз семантики их системы.

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

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

В этом случае представляется, что GFS определил по крайней мере один раз доставка на узлы хранения.

+0

Спасибо за ваш ответ! Так что это должно произойти только в случае, если основной сервер ломоть испытывает ошибку после того, как уже написано данные и правильно обновил конец файла? – Simone

Смежные вопросы