[대규모 시스템 설계] 사용자 수에 따른 규모 확장성 - 규모 확장, 로드밸런서, 데이터베이스 다중화

Gmini.Y·2024년 3월 25일
0

수직적 규모 확장 vs 수평적 규모 확장

수직적 규모 확장은 CPU, 메모리 등의 서버 자원을 추가하는 행위를 말한다. 그에 반해 수평적 규모 확장은 더 많은 서버를 추가하여 성능을 개선하는 작업이다.
간단하게 서버 성능을 높여야할때는 수직적 규모 확장이 좋은 선택이 될 수 있다. 하지만 수직적 규모 확장은 성능 확장의 한계가 있고, 장애에 대한 복구, 다중화 방안이 없다는 단점이 있다. 즉, 서버 장애 발생시 서비스는 완전히 중지된다. 이러한 단점 때문에, 대규모 애플리케이션을 지원하는 데는 수평적 규모 확장법이 보다 적절하다.

로드밸런서

로드밸런서는 트래픽 부하를 웹 서버들에게 분산하는 역할을 한다.

사용자는 로드밸런서의 공개 IP 주소로 접속한다. 로드밸런서와 서버 간의 통신은 같은 네트워크에서만 사용할 수 있는 사설 IP로 연결하여 보안성을 높인다.
서버 하나가 다운되면 다른 서버로 트래픽을 전송하기 때문에 장애 대응이 가능하다. 또한 트래픽 증가시 로드밸런서를 통해 트래픽을 분산할 수 있어 우아한 대응이 가능하다.

데이터베이스 다중화

웹 서버처럼 데이터베이스도 트래픽 분산 및 장애 대응을 위해 다중화를 할 수 있다. 보통은 서버 사이에 주(master) - 부(slave) 관계를 설정하고 데이터 원본은 주 서버에, 사본은 부 서버에 저장한다.

  • 주 데이터베이스 : 쓰기 연산은 주 데이터베이스에서만 지원한다.
  • 부 데이터베이스 : 주 데이터베이스로부터 사본을 전달받으며 읽기 연산만을 지원한다. 대부분의 서비스는 읽기 연산의 비중이 쓰기 연산보다 훨씬 많기 때문에 통상 부 데이터베이스의 수가 많다.

데이터베이스 다중화 장점은 아래와 같다.

  • 성능 개선 : 데이터베이스 연산 병렬화를 통해 성능이 개선된다.
  • 안정성 : 데이터베이스 서버 중 일부가 파괴되어도 데이터가 보존된다.
  • 가용성 : 데이터베이스 서버 중 일부에서 장애가 발생해도 다른 서버를 이용해 지속적인 서비스가 가능하다.

데이터 서버 다운 케이스

  • 부 서버가 한 대 인데 다운되면 읽기 연산은 일시적으로 모두 주 데이터베이스 전달된다. 즉시 새로운 부 데이터베이스를 생성한다.
  • 주 데이터베이스 서버가 다운되면 한 대의 부 데이터베이스가 새로운 주 데이터베이스로 교체하고 즉시 새로운 부 데이터베이스를 생성한다. 부 데이터베이스에 보관된 데이터가 최신 상태가 아니라면 복구 스크립트를 돌려서 추가해야 한다.

로드밸런서와 데이터베이스 다중화를 적용한 설계


본 포스트는 알렉스 쉬 저자의 가상 면접 사례로 배우는 대규모 시스템 설계 기초를 기반으로 스터디하며 정리한 내용들입니다.

0개의 댓글