Jump to content

Менеджер распределенных блокировок

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

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

DLM использует обобщенное понятие ресурса , который представляет собой некоторый объект, к которому необходимо контролировать общий доступ. Это может относиться к файлу, записи, области общей памяти или чему-либо еще, что выберет разработчик приложения . Может быть определена иерархия ресурсов, так что может быть реализовано несколько уровней блокировки. Например, гипотетическая база данных может определить иерархию ресурсов следующим образом:

  • База данных
  • Стол
  • Записывать
  • Поле

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

Режимы блокировки

[ редактировать ]

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

  • Нуль (Нидерланды). Указывает на интерес к ресурсу, но не препятствует его блокировке другими процессами. Его преимущество заключается в том, что ресурс и его блок значений блокировки сохраняются, даже если никакие процессы его не блокируют.
  • Параллельное чтение (CR). Указывает на желание прочитать (но не обновить) ресурс. Это позволяет другим процессам читать или обновлять ресурс, но не позволяет другим процессам иметь к нему монопольный доступ. Обычно это применяется к ресурсам высокого уровня, чтобы можно было получить более строгие блокировки для подчиненных ресурсов.
  • Одновременная запись (CW). Указывает на желание читать и обновлять ресурс. Это также позволяет другим процессам читать или обновлять ресурс, но не позволяет другим процессам иметь к нему монопольный доступ. Это также обычно применяется к ресурсам высокого уровня, чтобы можно было получить более строгие блокировки для подчиненных ресурсов.
  • Защищенное чтение (PR). Это традиционная блокировка общего ресурса , которая указывает на желание прочитать ресурс, но не позволяет другим его обновлять. Однако другие также могут прочитать этот ресурс.
  • Защищенная запись (PW). Это традиционная блокировка обновления , которая указывает на желание прочитать и обновить ресурс и не позволяет другим обновлять его. Однако другие пользователи, имеющие доступ к параллельному чтению, могут читать ресурс.
  • Эксклюзивный (EX). Это традиционная монопольная блокировка , которая разрешает доступ для чтения и обновления к ресурсу и предотвращает доступ к нему других лиц.

Следующая таблица истинности показывает совместимость каждого режима блокировки с другими:

Режим Нидерланды ЧР CW пиар ПВ БЫВШИЙ
Нидерланды Да Да Да Да Да Да
ЧР Да Да Да Да Да Нет
CW Да Да Да Нет Нет Нет
пиар Да Да Нет Да Нет Нет
ПВ Да Да Нет Нет Нет Нет
БЫВШИЙ Да Нет Нет Нет Нет Нет

Получение блокировки

[ редактировать ]

Процесс может получить блокировку ресурса, в очередь поставив запрос на блокировку . Это похоже на технику QIO , которая используется для выполнения ввода-вывода. Запрос на блокировку постановки в очередь может быть выполнен либо синхронно, и в этом случае процесс ждет, пока блокировка будет предоставлена, либо асинхронно, и в этом случае AST происходит , когда блокировка получена.

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

Блокировать блок значений

[ редактировать ]

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

Его можно использовать для хранения любой информации о ресурсе, которую выбирает разработчик приложения. Типичное использование — хранение номера версии ресурса. Каждый раз, когда связанный объект (например, запись базы данных) обновляется, владелец блокировки увеличивает блок значений блокировки. Когда другой процесс желает прочитать ресурс, он получает соответствующую блокировку и сравнивает текущее значение блокировки со значением, которое он имел в последний раз, когда процесс блокировал ресурс. Если значение то же самое, процесс знает, что связанный объект не обновлялся с момента его последнего чтения, и поэтому нет необходимости читать его снова. Следовательно, этот метод можно использовать для реализации различных типов кэша в базе данных или аналогичном приложении.

Обнаружение тупиковой ситуации

[ редактировать ]

Когда один или несколько процессов получили блокировки ресурсов, может возникнуть ситуация, когда каждый из них не позволяет другому получить блокировку, и ни один из них не может продолжить работу. Это известно как тупик ( Э. У. Дейкстра первоначально назвал это смертельным объятием ). [1]

Простой пример: процесс 1 получил монопольную блокировку ресурса A, а процесс 2 получил эксклюзивную блокировку ресурса B. Если затем процесс 1 попытается заблокировать ресурс B, ему придется дождаться, пока процесс 2 освободит его. Но если Процесс 2 затем попытается заблокировать Ресурс А, оба процесса будут ждать друг друга вечно.

OpenVMS DLM периодически проверяет наличие тупиковых ситуаций. В приведенном выше примере второй запрос на постановку блокировки в очередь одного из процессов вернется со статусом взаимоблокировки. Тогда этот процесс должен будет предпринять действия по разрешению взаимоблокировки — в данном случае путем снятия первой полученной блокировки.

Кластеризация Linux

[ редактировать ]

И Red Hat , и Oracle разработали программное обеспечение для кластеризации для Linux .

OCFS2 , добавлена ​​файловая система Oracle Cluster. [2] в официальное ядро ​​Linux версии 2.6.16 в январе 2006 года. Предупреждение об альфа-качестве кода в OCFS2 было удалено в версии 2.6.19.

Кластерное программное обеспечение Red Hat, включая DLM и GFS2, было официально добавлено в ядро ​​Linux. [3] с версией 2.6.19, ноябрь 2006 г.

Обе системы используют DLM, созданный по образцу почтенной VMS DLM. [4] Oracle DLM имеет более простой API. (основная функция, dlmlock(), имеет восемь параметров, тогда как VMS SYS$ENQ сервис и Red Hat dlm_lock у обоих по 11.)

Другие реализации

[ редактировать ]

Другие реализации DLM включают следующее:

  • Google разработал Chubby — сервис блокировки для слабосвязанных распределенных систем. [5] Он предназначен для грубой блокировки, а также обеспечивает ограниченную, но надежную распределенную файловую систему. Ключевые части инфраструктуры Google, включая Google File System , Bigtable и MapReduce , используют Chubby для синхронизации доступа к общим ресурсам. Хотя Chubby был разработан как служба блокировки, сейчас он активно используется внутри Google в качестве сервера имен , заменяя DNS . [5]
  • Apache ZooKeeper , созданный в Yahoo , представляет собой программное обеспечение с открытым исходным кодом и может использоваться для выполнения распределенных блокировок. [6] также.
  • Etcd — это программное обеспечение с открытым исходным кодом, разработанное в CoreOS по лицензии Apache. [7] Его также можно использовать для выполнения распределенных блокировок. [8]
  • Redis — это открытый исходный код, лицензированный Redis Source Available License, расширенный кэш и хранилище «ключ-значение». [9] Redis можно использовать для реализации алгоритма Redlock для распределенного управления блокировками. [10]
  • ХашиКорп Консул , [11] который был создан HashiCorp , представляет собой программное обеспечение с открытым исходным кодом и также может использоваться для выполнения распределенных блокировок.
  • Менеджер распределенных блокировок Taooka [12] использует методы «try lock», чтобы избежать взаимоблокировок . Он также может указать TTL для каждой блокировки с точностью до наносекунды.
  • DLM также является ключевым компонентом более амбициозных проектов единого образа системы (SSI), таких как OpenSSI .
  1. ^ Гехани, Нараин (1991). Ада: Параллельное программирование . Силиконовый пресс. п. 105. ИСБН  9780929306087 .
  2. ^ kernel/git/torvalds/linux.git — дерево исходного кода ядра Linux. [ постоянная мертвая ссылка ] . Кернел.орг. Проверено 18 сентября 2013 г.
  3. ^ kernel/git/torvalds/linux.git — дерево исходного кода ядра Linux . Архивировано 18 июля 2012 г. в archive.today . Git.kernel.org (07.12.2006). Проверено 18 сентября 2013 г.
  4. ^ Файловая система OCFS2 . Lwn.net (24 мая 2005 г.). Проверено 18 сентября 2013 г.
  5. ^ Перейти обратно: а б Публикация исследования Google: Служба распределенной блокировки Chubby . Research.google.com. Проверено 18 сентября 2013 г.
  6. ^ [1] . Zookeeper.apache.org. Проверено 18 сентября 2013 г.
  7. ^ «КореОС» . coreos.com .
  8. ^ etcd: Распределенное надежное хранилище значений ключей для наиболее важных данных распределенной системы , CoreOS, 16 января 2018 г. , получено 20 сентября 2016 г.
  9. ^ redis.io http://redis.io/ . Проверено 14 апреля 2015 г. {{cite web}}: Отсутствует или пусто |title= ( помощь ) [ название отсутствует ]
  10. ^ «Распределенные блокировки с Redis — Redis» . redis.io . Проверено 14 апреля 2015 г.
  11. ^ Обзор консула . Проверено 19 февраля 2015 г.
  12. ^ Описание Taooka . Архивировано 3 мая 2017 г. на Wayback Machine. Проверено 4 мая 2017 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 9335032618fb5f57fd93d8b9a5892b9a__1721285220
URL1:https://arc.ask3.ru/arc/aa/93/9a/9335032618fb5f57fd93d8b9a5892b9a.html
Заголовок, (Title) документа по адресу, URL1:
Distributed lock manager - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)