서버 및 데이터베이스 다중화의 필요성
- 소규모 서비스의 백엔드 구조는 다음과 같을 것이다.
.png)
- 하나의 서버가 모든 요청을 핸들링하고 단일데이터베이스에서 요청한 정보를 가져와 웹브라우저에 제공하는 형식이다. 이 구조는 다음과 같은 중대한 문제점을 가지고 있다.
- 많은 요청이 한번에 몰릴 때 하나의 서버가 처리할 수 있는 임계치를 넘게되면 나머지 요청은 딜레이가 발생하거나 서버가 다운될 가능성이 존재한다.
- 많은 트래픽이 발생하지 않더라도 서버가 외,내부적 요인으로 인해 영구적 혹은 일시적으로라도 멈추게 되면 모든 서비스가 중단된다.
- 데이터베이스의 저장 임계치를 넘기게 될 경우 이전 데이터를 삭제하거나 더 이상의 데이터를 저장하지 못하게 된다. (이 때는 선택한 데이터베이스에 따라 scale-up, scale-out을 통해 해결할 수 있을 것이다.)
- 결과적으로 서버의 가용성이 떨어져 서비스를 일정하게 제공하기 어렵게 된다. 서버를 다중화 하여 문제를 해결해 보자. 먼저, 서버 다중화는 브라우저의 요청을 서버에 분산해줄 시스템이 필요하다.
로드밸런서를 이용한 웹 계층 다중화
부하 분산 집합에 속한 웹계층의 서버들에게 트래픽 부하를 고르게 분산하는 시스템이다. 구성은 다음과 같다.
.png)
- 단일 서버로 운용할 때 발생하는 서버 가용성 문제를 해결할 수 있다. 로드밸런서를 통해 하나의 서버가 다운되면 다른 서버를 통해 요청을 처리 할 수 있어 전체 전체 서버 다운 문제가 해결된다. 또한, 트래픽 부하를 두 대의 서버에 나누어 부담할 수 있어 과부하로 인한 서버 다운 문제 또한 해결 될 수 있다.
- 만약, 두 대의 서버가 처리할 수 없는 트래픽 부하가 생길 경우 새로운 서버를 추가하여 로드밸런서를 통해 자동적으로 트래픽을 분산하여 우아하게 대처할 수 있다.
- 웹 서버 계층은 해결되었다고 치자, 데이터 계층 즉, 데이터베이스는 어떻게 해결할 수 있을까?
Master-Slave 모델의 데이터베이스 다중화
여러 데이터베이스를 두었다고 가정하자. 하나의 데이터베이스는 쓰기연산만, 다른 데이터베이스들은 읽기연산만 처리하도록 한다. 보통 읽기 연산이 쓰기 연산보다 압도적으로 많기 때문에 통상적으로 읽기 전용 데이터베이스의 갯수가 많다. 읽기 전용 데이터베이스는 쓰기 전용 데이터베이스로부터 데이터를 업데이트 받는다.

- 읽기 트래픽은 여러 대의 데이터베이스에서 병렬 쿼리 처리가 가능하여 성능이 향상된다.
- 데이터가 복제되어 여러 데이터베이스에서 관리되므로 하나의 데이터베이스가 영구적으로 손상되더라도 다른 데이터베이스를 통해 복구가 가능하다. (안정성)
- 또한, 하나의 데이터베이스에 장애가 발생하여 일시적으로 처리가 불가능하더라도 다른 데이터베이스를 통해 서비스를 지속할 수 있다. (가용성)