Операционные системы используют менеджеры блокировок (англ.) для организации и координации доступа к ресурсам. Распределенный менеджер блокировок (англ. Distributed lock manager, DLM, [1]) работает на каждой машине в кластере, с идентичной копией базы данных блокировок кластера. Таким образом, DLM является пакетом программного обеспечения, который позволяет компьютерам в кластере координировать доступ к совместно используемым ресурсам .
Различные реализации DLM были использованы в качестве основы для нескольких успешных кластерных файловых систем, в которых машины в кластере можно использовать для хранения файлов друг друга с помощью единой файловой системы, со значительными преимуществами в плане повышения производительности и доступности . Основное преимущество производительности достигается за счет решения проблемы когерентности дискового кэша между участвующими компьютерами. DLM используется не только для блокировки файлов, но и для координации всех видов дискового доступа. VMS Сluster (ранее именовавшийся VAX Cluster), первая система кластеризации получившая широкое распространение, основывается на VAX/VMS (в последующем OpenVMS) DLM именно таким образом.
DEC VAX/VMS была первой широкодоступной операционной системой с реализацией DLM. Данный функционал появился в версии 4, хотя пользовательский интерфейс был таким же, как у однопроцессорного менеджера блокировки, который впервые был реализован в версии 3.
DLM использует обобщенное понятие ресурса, как некоего объекта, к которому должен контролироваться общий доступ. Это может быть файл, запись, область общей памяти, или что-нибудь еще, что выбрал разработчик приложения. Разработчик сам описывает иерархию ресурсов, так что он может определить необходимое количество уровней блокировки. Например, гипотетическая база данных могла бы описывать иерархию ресурсов следующим образом :
Таким образом процесс в рамках выполнения получает возможность устанавливать необходимые блокировки на базу данных в целом (родительский ресурс), а потом и на отдельные части базы данных(подчиненные ресурсы).
Процесс, выполняющийся внутри VMS Cluster может получить блокировку ресурса. DLM реализует шесть режимов блокировки, и каждый из них определяет разные уровни предоставляемой эксклюзивности (совместимости). В процессе использования ресурса можно преобразовать уровень режима блокировки на более высокий или более низкий. Когда все процессы разблокируют ресурс, информация системы о ресурсе уничтожается.
Следующая таблица истинности показывает совместимость каждого режима блокировки с другими:
Mode | NL | CR | CW | PR | PW | EX |
---|---|---|---|---|---|---|
NL | Да | Да | Да | Да | Да | Да |
CR | Да | Да | Да | Да | Да | Нет |
CW | Да | Да | Да | Нет | Нет | Нет |
PR | Да | Да | Нет | Да | Нет | Нет |
PW | Да | Да | Нет | Нет | Нет | Нет |
EX | Да | Нет | Нет | Нет | Нет | Нет |
Процесс может заблокировать ресурс с помощью постановки в очередь (SYS$ENQ) запроса блокировки. Это похоже на Queue IO (англ.) — технологию VMS, которая используется для выполнения операций ввода/вывода. Запрос блокировки может выполняться либо полностью синхронно, в этом случае процесс ожидает, пока блокировка не выдается, или асинхронно, и в этом случае срабатывает механизм асинхронного системного прерывания (англ.)(AST) , когда будет получена блокировка.
Кроме того, можно установить блокирующий AST (Blocking AST), который срабатывает, когда процесс получил блокировку, предотвращая доступ к ресурсу другим процессом (на жаргоне разработчиков VMS именуеются как DoorBell AST). Оригинальный процесс может затем при необходимости принять меры, чтобы позволить другим доступ (например, понизив или сняв блокировку). Blocking AST - предоставляется разработчикам приложений удобный способ координации инстанций приложений в тех случаях, когда допускается активность только одной инстанции, а остальные переводятся в режим ожидания. Пример использования в VMS Cluster - Cluster Node Alias, DECNet/LAT/IP адрес, мигрирующий в зависимости от степени загруженности (Load Balancing) узла или его доступности (Failover).
Блок значения блокировки размеров в 32 байта связан с каждым ресурсом. Он может быть прочитан при получении любого вида блокировки (кроме блокировки NULL) и может быть обновлен с помощью процесса, который получил блокировку ресурса уровня PW или EX.
Он может быть использован для хранения какой-либо информации о ресурсе, который выбирает разработчик приложений. Пример использования: хранения номера версии ресурса. Каждый раз, когда связанный с ним объект (например, запись в базе данных) обновляется, владелец блокировки инкрементирует блок значения блокировки. Когда другой процесс желает прочитать ресурс, он получает соответствующую блокировку и сравнивает текущее значение блокировки с значением, которое было в прошлый раз, когда процесс обращался к заблокированному ресурсу. Если значение такое же, процесс знает, что связанный с ним ресурс не был обновлен с момента последнего времени его чтения, и, следовательно, нет необходимости читать его снова. Следовательно, этот метод может быть использован для реализации различных типов кэш-памяти в базе данных или аналогичных приложениях.
Другой пример использования: межпроцессное взаимодействие (IPC - InterProcess Communication) - в тех случаях, когда требуется высокая реактивность обмена небольшими порциями данных (в пределах 32-х байт) между процессами на различных узлах VMS Cluster при требованиях низкой латентности. Для обмена бóльшими порциями данных (до 1 Mb) - используется технология ICC (IntraCluster Communication service, SYS$ICC [2]).
Взаимная блокировка (deadlock) — ситуация при которой несколько процессов находятся в состоянии бесконечного ожидания ресурсов, занятых самими этими процессами. Э. Дейкстра первоначально назвал такую ситуацию «смертельным объятием»[3].
OpenVMS DLM периодически проверяет процессы на ситуации взаимной блокировки. В случае, когда один процесс блокирует ресурс 1, ожидая освобождения ресурса 2, блокируемого вторым процессом, который в свою очередь ожидает освобождения ресурса 1, то второй процесс вызывает статус взаимной блокировки. В этом случае предпринимаются меры по выходу из состояния взаимной блокировки, освобождая от блокировки ресурс, который был заблокирован первым.
В январе 2006 года в ядро Linux версии 2.6.16 был включен код OCFS2 (Oracle Cluster File System)[4], предложенный программистами одноименной корпорации, в ноябре 2006 в ядро версии 2.6.19 был добавлен код[5] поддержки кластерного ПО от корпорации Red Hat, в частности, поддержку файловой системы GFS2 (англ.). Обе системы основаны на успешной модели VMS DLM[6]. При этом распределенный менеджер блокировок от Oracle имел упрощенный API — его базовая функция dlmlock()
имела всего 8 параметров, когда как аналогичный системный вызов SYS$ENQ
в VMS, а также функция dlm_lock
в DLM от Red Hat имели по 11 параметров.
Корпорация Google разработала свою реализацию сервиса блокировки для слабосвязанных распределенных систем, которую назвали Chubby[7]. Этот сервис предназначен для обеспечения грубой блокировки (Coarse Grained Lock), а также для поддержки функционально-ограниченной, но надежной распределенной файловую систему. Основные части инфраструктуры Google, включая Google File System, BigTable и MapReduce, использует Chubby для синхронизации доступа к разделяемым ресурсам. Хотя сервис Chubby изначально разработан в качестве службы блокировки, сейчас он широко используется в Google в качестве сервера имен, вытесняя DNS[7].
Apache Zookeeper, проект Apache Software Foundation, представляет собой распределенное иерархическое хранилище ключей и значений, которое используется для обеспечения распределенной службы конфигураций, службы синхронизации и реестра имен для больших распределенных систем[8]. Также ZooKeeper может использоваться как распределенный менеджер блокировок[9]. Изначально Zookeeper был суб-проектом в рамках Hadoop, но в настоящем входит в основной список проектов ASF.
Архитектура Zookeeper поддерживает высокую доступность за счет избыточности услуг. Таким образом, клиенты могут инициировать выборы другого лидера Zookeeper, если не отвечает текущий. Узлы Zookeeper хранят свои данные в иерархическом пространстве имен, аналогичном файловой системе или дереву структуры данных[10].
Zookeeper используется многими компаниями, в том числе Rackspace, Yahoo![11], Одноклассники, Reddit[12] и eBay, а также платформа полнотекстового поиска с открытым исходным кодом Solr[13].
Демон etcd
, который позволяет обновлять настройки узлов в рамках инфраструктуры кластера CoreOS, также предоставляет возможности распределенного менеджера блокировок[14].
Нереляционная высокопроизводительная СУБД Redis, представляющая собой сетевое журналируемое хранилище данных типа «ключ — значение» с открытым исходным кодом, может быть использована для реализации алгоритма распределенного управления блокировками Redlock[15].
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .