분산 잠금 관리자
Distributed lock manager이 글은 검증을 위해 인용구가 추가로 필요하다. – · · · (2010년 10월) (이 템플릿 |
운영체제는 자원에 대한 접근을 조직하고 직렬화하기 위해 잠금 관리자를 사용한다.DLM(Distributed Lock Manager)은 클러스터 전체 잠금 데이터베이스의 동일한 복사본과 함께 클러스터 내의 모든 기계에서 실행된다.이러한 방식으로 DLM은 여러 시스템의 클러스터에 분산된 소프트웨어 응용프로그램을 공유 리소스에 대한 액세스를 동기화하는 수단으로 제공한다.
DLM은 클러스터 내의 기계가 유니파이드 파일 시스템을 통해 서로의 스토리지를 사용할 수 있는 몇 가지 성공적인 클러스터 파일 시스템의 기반으로서 사용되어 왔으며, 성능과 가용성에 상당한 이점이 있다.주요 성능 이점은 참여 컴퓨터 간의 디스크 캐시 일관성 문제를 해결함으로써 얻어진다.DLM은 파일 잠금뿐만 아니라 모든 디스크 접근의 조정에도 사용된다.널리 사용되는 최초의 클러스터링 시스템인 VMScluster는 바로 이러한 방식으로 OpenVMS DLM에 의존했다.
자원.
DLM은 자원의 일반화된 개념을 사용하며, 이는 공유 액세스를 제어해야 하는 일부 실체다.이것은 파일, 레코드, 공유 메모리 영역 또는 애플리케이션 설계자가 선택한 다른 모든 것과 관련될 수 있다.여러 단계의 잠금이 구현될 수 있도록 자원의 계층 구조를 정의할 수 있다.예를 들어 가상 데이터베이스는 다음과 같이 리소스 계층을 정의할 수 있다.
- 데이터베이스
- 테이블
- 기록하다
- 밭
그런 다음 프로세스는 데이터베이스 전체와 데이터베이스의 특정 부분에 대한 잠금을 획득할 수 있다.하위 리소스를 잠그기 전에 상위 리소스에 대한 잠금을 얻어야 한다.
잠금 모드
VMSCluster 내에서 실행되는 프로세스는 자원에 대한 잠금을 얻을 수 있다.부여할 수 있는 잠금모드는 6가지로, 부여되는 배타성 수준을 결정하여, 잠금장치를 더 높은 수준 또는 더 낮은 수준의 잠금모드로 변환하는 것이 가능하다.모든 프로세스가 자원의 잠금을 해제하면 자원에 대한 시스템의 정보가 파괴된다.
- Null(NL).자원에 대한 관심을 나타내지만 다른 프로세스가 자원을 잠그는 것을 막지는 않는다.자원과 그 잠금 값 블록은 어떠한 프로세스도 잠그지 않는 경우에도 보존된다는 장점이 있다.
- 동시 읽기(CR).리소스를 읽기를 원하지만 업데이트하지 않음을 나타냄.다른 프로세스가 리소스를 읽거나 업데이트할 수 있도록 허용하지만, 다른 프로세스가 리소스에 독점적으로 액세스하지 못하게 한다.이것은 하위 자원에 대해 보다 제한적인 잠금을 얻을 수 있도록 보통 높은 수준의 자원에 사용된다.
- 동시 쓰기(CW).리소스를 읽고 업데이트하려는 욕구를 나타냄.또한 다른 프로세스가 리소스를 읽거나 업데이트할 수 있도록 허용하지만, 다른 프로세스가 리소스에 독점적으로 액세스하지 못하게 한다.이것은 하위 자원에 대해 더 제한적인 잠금을 얻을 수 있도록 높은 수준의 자원에 또한 일반적으로 사용된다.
- PR(Protected Read)이것은 전통적인 공유 잠금으로, 자원을 읽기를 원하지만 다른 사람이 그것을 업데이트하지 못하게 한다.그러나 다른 이들은 이 자료를 읽을 수도 있다.
- 보호된 쓰기(PW).이것은 자원을 읽고 업데이트하려는 욕구를 나타내며 다른 사람들이 자원을 업데이트하지 못하게 하는 전통적인 업데이트 잠금이다.그러나 동시 읽기 액세스 권한이 있는 다른 사용자는 이 리소스를 읽을 수 있다.
- 독점(EX).이것은 자원에 대한 읽기 및 업데이트 액세스를 허용하고, 다른 사람들이 자원에 대한 액세스 권한을 갖지 못하도록 하는 전통적인 독점 잠금이다.
다음 진실 표는 각 잠금 모드의 호환성을 보여준다.
모드 | NL | CR | CW | PR | PW | EX |
---|---|---|---|---|---|---|
NL | 네 | 네 | 네 | 네 | 네 | 네 |
CR | 네 | 네 | 네 | 네 | 네 | 아니요. |
CW | 네 | 네 | 네 | 아니요. | 아니요. | 아니요. |
PR | 네 | 네 | 아니요. | 네 | 아니요. | 아니요. |
PW | 네 | 네 | 아니요. | 아니요. | 아니요. | 아니요. |
EX | 네 | 아니요. | 아니요. | 아니요. | 아니요. | 아니요. |
잠금 장치 획득
프로세스는 잠금 요청을 수신하여 자원에 대한 잠금을 얻을 수 있다.이는 I/O 수행에 사용되는 QIO 기법과 유사하다.enqueue lock 요청은 프로세스가 잠금이 허가될 때까지 기다리는 동시에 완료되거나, 잠금을 획득했을 때 AST가 발생하는 비동기식으로 완료될 수 있다.
다른 프로세스에 의해 자원에 대한 접근을 막고 있는 잠금장치를 공정이 획득했을 때 촉발되는 차단 AST를 확립하는 것도 가능하다.그러면 원래 프로세스는 선택적으로 다른 액세스를 허용하는 조치를 취할 수 있다(예를 들어, 잠금을 강등하거나 해제함).
잠금 값 블록
잠금 값 블록은 각 리소스와 연결된다.이는 리소스에 대한 잠금(null lock 제외)을 획득한 모든 프로세스에서 읽을 수 있으며, 보호된 업데이트 또는 해당 리소스에 대한 독점 잠금을 획득한 프로세스에서 업데이트할 수 있다.
응용프로그램 설계자가 선택하는 자원에 대한 정보를 보관하는 데 사용할 수 있다.일반적인 용도는 리소스의 버전 번호를 보유하는 것이다.관련 엔티티(예: 데이터베이스 레코드)가 업데이트될 때마다 잠금 장치의 보유자는 잠금 값 블록을 증가시킨다.다른 프로세스가 리소스를 읽기를 원할 때 적절한 잠금을 얻고 현재 잠금 값을 프로세스가 리소스를 잠글 때 사용한 값과 비교한다.값이 같을 경우, 공정은 관련 실체가 지난번에 읽은 이후 갱신되지 않았음을 알고 있으므로 다시 읽을 필요가 없다.따라서 이 기법은 데이터베이스나 유사한 애플리케이션에서 다양한 유형의 캐시를 구현하는 데 사용될 수 있다.
교착 탐지
하나 이상의 공정이 자원 잠금장치를 획득했을 때, 각 공정이 다른 공정이 잠금장치를 획득하는 것을 막고 있는 상황을 연출할 수 있으며, 그 중 어느 것도 진행할 수 없다.이것은 교착상태로 알려져 있다(E. W. Dijkstra는 원래 그것을 치명적인 포옹이라고 불렀다).[1]
간단한 예로는 프로세스 1이 리소스 A에 대한 독점적 잠금을 획득하고 프로세스 2가 리소스 B에 대한 독점적 잠금을 획득한 경우를 들 수 있다.그런 다음 프로세스 1이 리소스 B를 잠그려고 하면 프로세스 2가 리소스 B를 해제할 때까지 기다려야 한다.그러나 프로세스 2가 리소스 A를 잠그려고 하면 두 프로세스 모두 서로를 영원히 기다리게 된다.
OpenVMS DLM은 주기적으로 교착 상태를 점검한다.위의 예에서 프로세스 중 하나의 두 번째 잠금 enqueue 요청이 교착 상태로 반환될 것이다.그런 다음 교착 상태를 해결하기 위한 조치를 취하는 것은 이 프로세스에 달려 있을 것이다. 이 경우, 그것이 얻은 첫 번째 잠금을 해제함으로써 말이다.
리눅스 클러스터링
Red Hat과 Oracle 모두 Linux용 클러스터링 소프트웨어를 개발했다.
OCFS2, Oracle Cluster File System은 2006년 1월 버전 2.6.16의 공식 Linux 커널에 추가되었다[2].OCFS2에 대한 알파 품질 코드 경고는 2.6.19에 제거되었다.
Red Hat의 DLM과 GFS2를 포함한 클러스터 소프트웨어는 2006년 11월 버전 2.6.19로 Linux 커널에 공식적으로 추가되었다.
두 시스템 모두 존경받는 VMS DLM을 모델로 한 DLM을 사용한다.[4] 오라클의 DLM은 보다 단순한 API를 가지고 있다. (핵심 기능,dlmlock()
에 8개의 매개 변수가 있는 반면 VMS 서비스와 Red Hat은dlm_lock
둘 다 11을 가지고 있다.)
기타 구현
기타 DLM 구현에는 다음이 포함된다.
- 구글이 느슨하게 연결된 분산형 시스템을 위한 잠금 서비스인 '통통'을 개발했다.[5]거친 결로 잠금을 위해 설계되었으며, 한정적이지만 신뢰할 수 있는 분산 파일 시스템도 제공한다.구글 파일 시스템, 빅테이블, 맵리듀스 등 구글 인프라 핵심 부품은 '통통'을 활용해 공유자원에 대한 액세스를 동기화한다.로크 서비스로 설계됐지만 현재 구글 내부에서는 DNS를 대체해 네임서버로 많이 사용되고 있다.[5]
- 야후에서 만들어진 아파치 동물원키퍼는 오픈소스 소프트웨어로 분산형[6] 잠금장치도 수행할 수 있다.
- Etcd는 Core에서 개발된 오픈 소스 소프트웨어다.OS를 [7]Apache License에 등록하십시오.분산 잠금 기능도 할 수 있다.[8]
- Redis는 오픈 소스, BSD 라이센스, 고급 키-값 캐시 및 저장소.[9]Redis는 분산 잠금 관리를 위한 Redlock 알고리즘 구현에 사용될 수 있다.[10]
- 하시코프가 [11]만든 하시코프의 집정관은 오픈소스 소프트웨어로 분산형 잠금장치(distributed lock)
- 타오카 분산형 잠금 매니저는[12] 교착상태를 피하기 위해 "트라이드 잠금" 방법을 사용한다.또한 각 잠금 장치에 대해 나노초 정밀도로 TTL을 지정할 수 있다.
- DLM은 OpenSSI와 같은 보다 야심찬 SSI 프로젝트의 핵심 구성요소이기도 하다.
참조
- ^ Gehani, Narain (1991). Ada: Concurrent Programming. p. 105. ISBN 9780929306087.
- ^ 커널/git/torvalds/linux.git - Linux 커널 소스 트리[permanent dead link].Kernel.org.2013-09-18에 검색됨
- ^ 커널/git/torvalds/linux.git - Linux 커널 소스 트리 Archive 2012-07-18 at archive.today.Git.kernel.org (2006-12-07)2013-09-18에 검색됨
- ^ OCFS2 파일 시스템.Lwn.net (2005-05-24)2013-09-18에 검색됨
- ^ a b Google Research 출판물: 통통한 분산 잠금 서비스.Research.google.com.2013-09-18에 검색됨
- ^ [1] Zookeeper.apache.org.2013-09-18에 검색됨
- ^ "CoreOS". coreos.com.
- ^ etcd: Distributed reliable key-value store for the most critical data of a distributed system, CoreOS, 2018-01-16, retrieved 2016-09-20
- ^ http://redis.io/ 2015-04-14년에 검색됨
- ^ "Distributed locks with Redis – Redis". redis.io. Retrieved 2015-04-14.
- ^ 영사 개요.2015-02-19년에 검색됨.
- ^ 2017-05-04년에 검색된 Taooka Description.