고가용성, 로드 밸런싱, 복제
고가용성, 로드 밸런싱, 복제 (High Availability, Load Balancing, and Replication)
서버가 죽어도 서비스는 계속돼야 한다면? 여러 대의 컴퓨터에 같은 데이터를 나눠 서빙하고 싶다면? 그게 바로 고가용성(high availability)과 로드 밸런싱(load balancing)의 세계예요. 어떤 서버가 어떤 역할을 하고, 동기/비동기 방식은 뭐가 다른지, 이 개념부터 차근차근 정리해 볼게요.
데이터베이스 서버가 함께 동작한다는 것 (Database Servers Working Together)
데이터베이스 서버들은 서로 협력해서 두 가지 일을 할 수 있어요.
- 고가용성 (High Availability) — 프라이머리 서버가 실패하면 두 번째 서버가 빠르게 인수(인계)하도록 하는 것.
- 로드 밸런싱 (Load Balancing) — 여러 컴퓨터가 같은 데이터를 서빙하도록 하는 것.
이상적으로는 데이터베이스 서버들이 매끄럽게(seamlessly) 협력할 수 있어야 해요. 정적 웹 페이지를 서빙하는 웹 서버는 여러 머신에 웹 요청을 로드 밸런싱하기만 하면 꽤 쉽게 결합할 수 있어요. 사실 읽기 전용(read-only) 데이터베이스 서버도 비교적 쉽게 결합할 수 있어요.
하지만 대부분의 데이터베이스 서버는 읽기/쓰기(read/write) 요청이 섞여 있고, 읽기/쓰기 서버는 결합하기가 훨씬 어려워요. 왜냐하면:
- 읽기 전용 데이터는 각 서버에 한 번만 두면 되지만,
- 어떤 서버에 대한 쓰기가 모든 서버에 전파돼야 그 서버들에 대한 이후 읽기 요청이 일관된 결과를 반환하기 때문이에요.
동기화 문제 (The Synchronization Problem)
이 동기화(synchronization) 문제가 서버들이 함께 동작하는 데 있어 근본적인 어려움이에요. 모든 사용 사례에서 동기화 문제의 영향을 없애줄 단일 솔루션은 없기 때문에, 여러 솔루션이 존재해요. 각 솔루션은 이 문제를 다른 방식으로 다루고, 특정 워크로드에 대해 그 영향을 최소화해요.
주요 용어 정리 (Key Terminology)
서버의 역할 (Roles)
- read/write, master, primary 서버 — 데이터를 수정할 수 있는 서버.
- standby, secondary 서버 — 프라이머리의 변경 사항을 추적하는 서버.
대기 서버의 종류 (Types of standby servers)
- warm standby 서버 — 프라이머리로 승격(promote)되기 전까지 연결할 수 없는 대기 서버.
- hot standby 서버 — 연결을 받아들이고 읽기 전용 쿼리를 서빙하는 대기 서버.
동기 vs 비동기 (Synchronous vs Asynchronous)
동기 방식 (Synchronous)
동기 방식에서는 데이터를 수정하는 트랜잭션이 모든 서버가 그 트랜잭션을 커밋할 때까지 커밋된 것으로 간주되지 않아요.
- 페일오버(failover) 시 데이터가 손실되지 않는다는 것을 보장해요.
- 어느 서버를 쿼리하든 모든 로드 밸런싱 서버가 일관된 결과를 반환한다는 것을 보장해요.
비동기 방식 (Asynchronous)
반면 비동기 방식은 커밋과 다른 서버로의 전파 사이에 다소 지연을 허용해요. 그래서:
- 백업 서버로 전환할 때 일부 트랜잭션이 손실될 가능성이 생겨요.
- 로드 밸런싱 서버가 약간 오래된(stale) 결과를 반환할 수 있어요.
비동기 통신은 동기 방식이 너무 느릴 때 사용돼요.
세분성 (Granularity)
솔루션은 그 세분성(granularity) 으로도 분류할 수 있어요.
- 어떤 솔루션은 전체 데이터베이스 서버만 다룰 수 있어요.
- 다른 솔루션은 테이블별(per-table) 또는 데이터베이스별(per-database) 수준에서 제어를 허용해요.
성능 고려 (Performance Considerations)
어떤 선택을 하든 성능을 반드시 고려해야 해요. 보통 기능과 성능 사이에 트레이드오프가 있어요.
- 예를 들어 느린 네트워크에서 완전 동기 방식은 성능을 절반 이상 깎을 수 있어요.
- 반면 비동기 방식은 성능 영향이 최소일 수 있어요.
이 섹션의 나머지 부분에서는 다양한 페일오버(failover), 복제(replication), 로드 밸런싱 솔루션을 개요로 설명해요.