0. 들어가며


확장 가능하고 신뢰성 있는 서비스를 제공하기 위해서는 분산 시스템을 구성하는 것이 중요하다. 하지만 일관성, 가용성, 파티션 허용성, 짧은 지연 시간 등 여러 요인으로 분산 시스템을 구성하는 것은 쉽지 않다. 하지만 해야한다.

1. 호텔 객실 예약 시스템으로 살펴보는 분산 시스템 예시


분산 시스템의 각 속성을 들여다보면서 사용할 예시는 호텔 객실 예약 시스템이다.

2. 일관성


분산 시스템에서 일관성이란 분산 시스템을 구성하는 모든 노드가 동일한 상태나 데이터를 저장하고 있는 개념이다. 주로 강한 일관성, 최종 일관성 두가지가 있다.

2.1 강한 일관성 (strong consistency)

쓰기 작업 이후 수행된 모든 읽기 작업이 항상 최신 값을 반환하도록 하는 일관성 수준 → 엄격한 동기화와 작업 순서 유지가 필요하다. 분산 트랜잭션이나 분산 잠금을 이용하거나 팩소스, 래프트 알고리즘 등을 적용해 구현한다.

개발자 입장에서는 시스템이 예측 가능하고 직관적으로 동작하지만 각 노드가 데이터 업데이트 순서에 동의할 때 까지 기다려야하기 때문에 처리속도가 느리거나 가용성이 떨어질 수 있다. 따라서 민감한 데이터를 다루는 은행 시스템 같은 곳에서 적용한다.

2.2 최종 일관성 (eventual consistency)

최종 일관성은 일시적으로 데이터 불일치를 허용하지만 시간이 지나면 모든 레플리카 DB나 노드가 동일한 상태로 도달하도록 보장하는 방식이다. 비동기적으로 각 노드를 업데이트하지만 최종적으로는 모든 레플리카가 동일한 값을 가지게 된다.