Computing

Lease 개념 (Heartbeats, Time-bound Lock) 본문

Parallel | Distributed Computing/개념

Lease 개념 (Heartbeats, Time-bound Lock)

jhson989 2023. 4. 17. 22:57

Lease 개념과 lock과의 비교

분산컴퓨팅 분야에서 자주 사용되는 lease[1](리스, [ liːs ])란 개념은 lock과 유사한데, lease는 그것을 획득한 프로세스(=lease holder)에게 해당 lease와 연관된 자원의 독점을 보장해주는 도구[2]이다. lock과의 유일한 차이점이라면 주어진 시간 동안에만 holder에게 독점적 권한을 준다는 점이다. 주어진 시간이 만료되면(expired) lease는 자동으로 해제되고 다른 프로세스가 획득할 수 있게 된다.

 

전통적인 lock은 lock을 획득한 프로세스가 명시적으로 해제(release)할 때까지 유지된다. 이러한 전통적인 lock에게 치명적인 단점이 있으니, lock을 획득한 프로세스가 어떠한 오류에 의해 lock을 release하지 않는다면 lock을 해제할 방법이 없다는 것이다. 특히 수 많은 서버 컴퓨터가 포함된 분산 컴퓨팅 환경에서는 서버 하나의 고장, 네트워크의 단선, 프로세스의 에러 등 수 많은 오류가 발생할 수 있기에 더욱 치명적인 단점이 된다.

 

그에 비해 lease는 주어진 기간동안에만 유효하다. 따라서 lease를 획득한 프로세스에 갑작스러운 예외 케이스(서버 컴퓨터 고장남, 네트워크 스위치가 고장남, 단전됨, 등등)가 발생하여 명시적으로 lease를 해제하지 못하더라도, 주어진 시간이 지나면 자동으로 해제되기에 전체 시스템은 문제 없이 작동한다.

 

 

 

Lease의 한계와 반복 Update

Lease는 주어진 시간 동안만 유효하다는 전제가 있기에 현재 시간을 정확히 트랙킹하는 것이 중요하다[3]. Lease 시스템은 lease를 관리하는 Server와 lease를 획득하여 자원을 사용하는 Client로 구성된다. Client가 어떤 자원을 사용하기 위해서는 Server에게 해당 자원과 연관된 lease 할당을 요청해야하며, Server는 할당 가능여부를 확인한 후 Client에게 lease를 할당한다.

 

이때 Server의 시간이 Client보다 빠른 경우 문제가 발생한다. 8:00까지 유효한 lease가 있고, Server의 시계는 8:00를, Client의 시계는 7:59을 가리킨다고 하자. Client는 아직 유효 기간이 남았다고 생각하여 계속 해당 자원을 쓰는데도 Server는 자신의 시계에 맞춰 해당 lease를 해제할 것이다. 이처럼 lease를 문제없이 사용하기 위해서는 분산 시스템에서 모든 서버의 시간을 정확히 일치시켜야 한다는 제약사항이 있다.

 

이런 한계를 극복하기 위해 단순히 유효 기간만을 설정하는 것이 아닌 Update(refresh, 혹은 heartbeat라고도 함)라는 개념을 도입하였다. 여전히 Client는 Server에 요청하여 Lease를 획득한다. 다만 ttl(time to live, 유효기간)을 어느 특정 순간으로 설정하지 않는다. 대신 Client가 Update라고 하는 주기적인 신호를 Server로 보내도록 하고, Server는 이 Update가 주어진 시간이 지나도 도착하지 않는다면 Lease를 해제한다.

 

예를 들어 Client는 Update 신호를 10초마다 Server에 보내고, Server는 40초동안 Update가 도착하지 않는다면 lease를 해제하도록 설정되어 있다고 하자. Client가 문제없다면 10초마다 주기적으로 Update 신호를 Server에 보낼것이고, 어느 순간이 되면 자신의 모든 일을 끝내고 lease를 해제할 것이다. 만약 Client가 고장나 꺼지게 된다면 더 이상 Update 신호를 보내지 못하게 된다. Server는 Update가 40초 이상 수신되지 않는다면 Client에 문제가 생겼다고 판단하고 lease를 자동으로 해제한다.

 

이러한 Lease Update 신호를 Heartbeat(심장박동)라고도 한다고 했는데, 이는 lease 시스템이 서버가 살아있다 없다를 판단하는데 사용할 수 있기 때문이다. 위의 예와 마찬가지로, Client는 Server의 Lease를 획득하고 반복적으로 Update 신호를 보낸다. 만약 Update 신호가 어느 정도 기간동안 도착하지 않는다면 Server 입장에서는 Client에 문제가 발생했다(Client가 죽음)는 것을 알 수 있다. Kubernetes의 경우 이러한 Lease 시스템을 이용해 Node가 살아있는 지 여부를 확인한다[4].

 

Heartbeat 개념

 

Reference

[1] Gray, Cary; David Cheriton (December 1989). Leases: An Efficient Fault-Tolerant Mechanism for Distributed File Cache Consistency. Proceedings of the Twelfth ACM Symposium on Operating Systems Principles. Vol. 23. pp. 202–210. CiteSeerX 10.1.1.115.1696. doi:10.1145/74850.74870. ISBN 978-0897913386. S2CID 1119226.

[2] https://en.wikipedia.org/wiki/Lease_(computer_science)

[3] https://medium.com/nerd-for-tech/leases-fences-distributed-design-patterns-c1983eccc9b1

[4] https://kubernetes.io/docs/concepts/architecture/nodes/#heartbeats