수직적 규모 확장은 CPU, 메모리 등의 서버 자원을 추가하는 행위를 말한다. 그에 반해 수평적 규모 확장은 더 많은 서버를 추가하여 성능을 개선하는 작업이다.
간단하게 서버 성능을 높여야할때는 수직적 규모 확장이 좋은 선택이 될 수 있다. 하지만 수직적 규모 확장은 성능 확장의 한계가 있고, 장애에 대한 복구, 다중화 방안이 없다는 단점이 있다. 즉, 서버 장애 발생시 서비스는 완전히 중지된다. 이러한 단점 때문에, 대규모 애플리케이션을 지원하는 데는 수평적 규모 확장법이 보다 적절하다.
로드밸런서는 트래픽 부하를 웹 서버들에게 분산하는 역할을 한다.
사용자는 로드밸런서의 공개 IP 주소로 접속한다. 로드밸런서와 서버 간의 통신은 같은 네트워크에서만 사용할 수 있는 사설 IP로 연결하여 보안성을 높인다.
서버 하나가 다운되면 다른 서버로 트래픽을 전송하기 때문에 장애 대응이 가능하다. 또한 트래픽 증가시 로드밸런서를 통해 트래픽을 분산할 수 있어 우아한 대응이 가능하다.
웹 서버처럼 데이터베이스도 트래픽 분산 및 장애 대응을 위해 다중화를 할 수 있다. 보통은 서버 사이에 주(master) - 부(slave) 관계를 설정하고 데이터 원본은 주 서버에, 사본은 부 서버에 저장한다.
데이터베이스 다중화 장점은 아래와 같다.
데이터 서버 다운 케이스
로드밸런서와 데이터베이스 다중화를 적용한 설계
본 포스트는 알렉스 쉬 저자의 가상 면접 사례로 배우는 대규모 시스템 설계 기초를 기반으로 스터디하며 정리한 내용들입니다.