Розподілений менеджер блокуваньОпераційні системи використовують менеджери блокувань для організації та серіалізації доступу до ресурсів. Розподілений менеджер блокувань (англ. Distributed lock manager, DLM) працює на кожній машині в кластері, з ідентичною копією бази даних блокувань кластера. Таким чином, DLM є пакетом програмного забезпечення, який дозволяє комп'ютерам в кластері синхронізувати свої доступи до спільно використовуваних ресурсів . Різні реалізації DLM були використані як основа для декількох успішних кластерних файлових систем, в яких вузли кластера можна використовувати для зберігання файлів один одного за допомогою єдиної файлової системи, зі значними перевагами у плані підвищення продуктивності і доступності . Основна перевага продуктивності досягається за рахунок вирішення проблеми когерентності дискового кешу між комп'ютерами, що беруть участь в кластері. DLM використовується не тільки для блокування файлів , але і для координації всіх видів дискового доступу. VMScluster , перша система кластеризації одержала широке поширення, покладається на OpenVMS DLM саме таким чином. Реалізація VMSDEC VMS була першою широко доступною операційною системою, де було реалізовано DLM. Даний функціонал з'явився у версії 4, хоча інтерфейс користувача був таким же, як і у однопроцесорного менеджера блокування, якого вперше було реалізовано у версії 3. РесурсиDLM використовує узагальнене поняття ресурсу, як окремого об'єкта, до якого треба контролювати загальний доступ. Це може бути файл, запис, область загальної пам'яті, або щось ще, що вибрав розробник програми. Розробник сам описує ієрархію ресурсів, отже він сам визначає необхідну кількість рівнів блокування. Наприклад, гіпотетична база даних могла б описувати ієрархію ресурсів таким чином:
Таким чином процес в рамках виконання отримує можливість встановлювати необхідні блокування на базу даних в цілому (батьківський ресурс), а потім і на окремі частини бази даних (підпорядковані ресурси). Режими блокуванняПроцес, що виконується в межах VMSCluster може отримати блокування ресурсу. DLM реалізує шість режимів блокування, і кожен з них визначає різні рівні ексклюзивності доступу. У процесі використання ресурсу можна перетворити рівень режиму блокування на більш високий або більш низький. Коли усі процеси розблокують ресурс, інформація про ресурсі знищується.
Наступна таблиця істинності показує сумісність кожного режиму блокування з іншими:
Отримання блокуванняПроцес може заблокувати ресурс з допомогою постановки в чергу запиту блокування. Цей механізм схожий на Queue IO[en] — технологію VMS, яка використовується для виконання операцій введення/виводу. Запит блокування може виконуватися або повністю синхронно, в цьому випадку процес чекає, поки блокування не видається, або асинхронно, і в цьому випадку спрацьовує механізм асинхронної системної пастки[en] (англ. AST) , коли буде отримана блокування. Крім того, можна встановити блокуючий AST, який спрацьовує, коли процес отримав блокування, запобігаючи доступ до ресурсу іншим процесом. Оригінальний процес може потім при необхідності вжити заходів, щоб дозволити іншим доступ (наприклад, знизивши або знявши блокування). Блок значення блокуванняБлок значення блокування пов'язаний з кожним ресурсом. Він може бути прочитаний при отриманні будь-якого виду блокування (крім блокування NULL) і його може бути поновлено за допомогою процесу, який отримав блокування ресурсу рівня PW або EX. Його може бути використано для зберігання будь-якої інформації про ресурс, який вибирає розробник додатків. Зазвичай він використовується для зберігання номера версії ресурсу. Кожного разу, коли пов'язаний з ним об'єкт (наприклад, запис у базі даних) оновлюється, власник блокування інкрементує значення блоку. Коли інший процес бажає прочитати ресурс, він отримує відповідне значення блокування і порівнює поточне значення блокування з значенням, яке було минулого разу, коли процес звертався до заблокованого ресурсу. Якщо значення таке ж, процес знає, що пов'язаного з ним ресурсу не було оновлено з моменту останнього часу його читання, і, отже, немає необхідності читати його знову. Отже, цей метод може бути використано для реалізації різних типів кеш-пам'яті в базі даних або аналогічних програмах. Визначення ситуацій взаємного блокуванняВзаємне блокування (deadlock) — ситуація, при якій декілька процесів знаходяться в стані нескінченного очікування ресурсів, зайнятих самими цими процесами. Е. Дейкстра спочатку назвав таку ситуацію «смертельними обіймами»[1]. OpenVMS DLM періодично перевіряє процеси на ситуації взаємного блокування. У разі, коли перший процес блокує ресурс 1, очікуючи звільнення ресурсу 2, блокованою другим процесом, який, в свою чергу, очікує звільнення ресурсу 1, то другий процес викликає статус взаємного блокування. У цьому випадку вживаються заходи по виходу із стану взаємної блокування, звільняючи від блокування ресурс, якого було заблоковано першим. Кластеризація в LinuxУ січні 2006 року до ядра Linux версії 2.6.16 було включено код OCFS2 (Oracle Cluster File System)[2], який запропонували програмісти однойменної корпорації; в листопаді 2006 до ядра версії 2.6.19 було додано код[3] підтримки кластерного ПЗ від компанії Red Hat, зокрема підтримку файлової системи {{ safesubst:p{{ safesubst:#ifGFS2:{{{2}}}|1|2}}|{{{3}}}|}}. Обидві системи базуються на успішної моделі VMS DLM[4]. При цьому розподілений менеджер блокувань від Oracle має спрощений API — базова функція Chubby, сервіс блокування від GoogleКорпорація Google розробила свою реалізацію сервісу блокування для слабозв'язанних розподілених систем, яку назвали Chubby[5]. Цей сервіс призначений для забезпечення грубого блокування (Coarse Grained Lock), а також для підтримки функціонально-обмеженої, але надійної розподіленої файлової системи. Основні частини інфраструктури Google, включаючи Google File System, BigTable та MapReduce, використовують Chubby для синхронізації доступу до ресурсів, що розділяються. Хоча сервіс Chubby спочатку було розроблено як службу блокування, зараз Google його широко використовує як сервер імен, витісняючи DNS. ZooKeeperApache Zookeeper, проект Apache Software Foundation — це розподілене ієрархічне сховище ключів і значень, яке використовується для забезпечення розподіленої служби конфігурацій, служби синхронізації та реєстру імен для великих розподілених систем[6]. Також ZooKeeper може використовуватися як розподілений менеджер блокувань[7]. Спочатку Zookeeper було започатковано як суб-проект в рамках Hadoop, але зараз він входить до списку основних проектів ASF. Архітектура Zookeeper підтримує високу доступність за рахунок надлишковості послуг. Таким чином, клієнти можуть ініціювати вибори іншого лідера Zookeeper, якщо поточний не відповідає на запити. Вузли Zookeeper зберігають свої дані в ієрархічному просторі імен, аналогічному файловій системі або дереву структури даних[8]. Zookeeper використовується багатьма компаніями, в тому числі Rackspace, Yahoo![9], Однокласники, Reddit[10] і eBay , а також платформа повнотекстового пошуку з відкритим кодом Solr[11]. ETCDДемон Алгоритм Redlock в RedisНереляційна високопродуктивна СУБД Redis, що представляє собою мережевий журналируемое сховище даних типу «ключ — значення» з відкритим вихідним кодом, може бути використана для реалізації алгоритму розподіленого управління блокуваннями Redlock[13]. Зноски
Information related to Розподілений менеджер блокувань |