less than 1 minute read

분산 시스템은 어떤 오류라도 발생할 수 있다. 오류를 다루는 가장 간단한 방법은 오류가 발생하면 전체 시스템 실패로 만들어버리는 방법이 있지만, 내부 컴포넌트의 오류가 발생해도 서비스가 올바르게 동작하는 것이 대부분의 목적일 것이다.

트랜잭션에서 사용한 것과 동일한 접근 방식이 분산 시스템을 위한 추상화에 들어 맞는다.

  • 트랜잭션을 사용하면 애플리케이션은 충돌이 없고(원자성)
  • 다른 사람이 데이터베이스에 동시에 액세스하지 않으며(고립성)
  • 저장 장치가 완벽하게 신뢰할 수 있는 것처럼 가장할 수 있습니다(내구성)

충돌, 경합 조건, 디스크 장애가 발생하더라도 트랜잭션 추상화는 이러한 문제를 숨겨준다.

애플리케이션이 분산 시스템의 추상화는 다음과 같다.

  • 분산 시스템에서 가장 중요한 추상화 중 하나는 합의(consensus)다. 즉, 모든 노드가 무언가에 동의하도록 하는 것이다.

합의는 애플리케이션에서 다양한 용도로 사용할 수 있다.

단일 리더 복제 기능이 있는 데이터베이스가 있다고 가정하자. 리더가 사망하여 다른 노드로 장애 조치해야 하는 경우, 나머지 데이터베이스 노드는 합의를 사용하여 새 리더를 선출할 수 있다.

리더는 한 명만 있어야 하며 모든 노드가 리더가 누구인지 동의하는 것이 중요하다. 두 노드가 모두 자신이 리더라고 믿는 경우 이러한 상황을 분할 뇌(split brain)라고 하며, 종종 데이터 손실로 이어진다. 합의를 올바르게 구현하면 이러한 문제를 방지하는 데 도움이 된다.