501
12
장
회복 탄력성
즉, 일관성을 보장하기 위해 여러 데이터베이스 노드에 걸친 트랜잭션 읽기를 시작해야 한다.
하지만 일반적으로 사람들은 트랜잭션 읽기를 수행하고 있지 않은데, 느리기 때문이다. 잠금
lock
이 필요하며, 한 번의 읽기가 전체 시스템을 블록시킬 수 있다.
이미 논의했듯이 분산 시스템은 실패를 예상해야 한다. 일관된 노드 집합에서 트랜잭션 읽기를
생각해보자. 읽기가 시작되는 동안 특정 레코드를 잠그도록 원격 노드에 요청한다. 읽기를 완
료하고 원격 노드에 잠금을 해제해달라고 요청했지만, 이제는 원격 노드와 통신할 수 없다. 어
떻게 해야 할까? 잠금은 단일 프로세스 시스템에서도 제대로 구현하기가 매우 어렵고, 물론 분
산 시스템에서는 훨씬 더 구현하기 어렵다.
6
장에서 분산 트랜잭션에 대해 이야기했던 것을 기억하는가? 분산 트랜잭션이 어려운 핵심적
인 이유는 여러 노드에서 일관성을 보장하는 것, 바로 이 문제 때문이다.
다중 노드 일관성을 제대로 확보하는 것은 매우 어려우므로, 만약 필요하다면 직접 개발하지
않기를 매우
강력히강력히
권하고 싶다. 대신 이러한 특성을 제공하는 데이터 저장소나 잠금 서비스
를 고르길 바란다. 예를 들어,
5
.
9
.
2
절 ‘동적 서비스 레지스트리’에서 설명한 콘술은 여러 노드
간에 구성 정보를 공유하도록 설계된 강력한 일관성이 있는 키/값 저장소를 구현한다. ‘친구는
다른 친구가 자신의 암호를 쓰게 하지 않는다
Friends
don
’
t
let
friends
write
their
own
crypto ...