수직적 규모 확장 vs 수평적 규모 확장
- 수직적 규모 확장
- 서버에 고사양 자원(CPU, RAM)을 추가하는 행위이다.
- 확장에 한계가 있다.
- 장애에 대한 자동복구 방안이나 다중화 방안을 제시하지 않는다.
- 수평적 규모 확장
- 더 많은 서버를 추가하여 성능을 개선하는 행위이다.
로드밸런서
- 클라이언트로부터 들어오는 요청을 여러 웹 서버로 분산하여 부하를 줄이고 가용성을 높이는 역할을 수행한다.
- 로드밸런서의 공개 IP 주소를 통해 클라이언트와 통신을 하고, 서버 간 통신은 사설 IP주소를 사용한다.
데이터베이스 다중화
- 서버 사이에 주(master)-부(slave) 관계를 설정하고 데이터 원본은 주 서버에, 사본은 부 서버에 저장하는 방식이다.
- 쓰기 연산은 마스터에만하고, 부 데이터베이스는 주 데이터베이스로부터 사본을 전달받아 읽기 연산만을 수행한다.
데이터베이스 수평적 확장(샤딩)
- 샤딩은 대규모 데이터베이스를 샤드라고 부르는 작은 단위로 분할하는 기술을 일컫는다.
- 모든 샤드는 같은 스키마를 쓰지만 샤드에 보관되는 데이터 사이에는 중복이 없다.
- 샤딩 키(파티션 키)를 통해 데이터를 분산시켜 저장한다.
- 문제
- 재샤딩
- 유명인사 문제
- 조인과 비정규화
캐시
- 빈번하게 접근하는 데이터를 빠르게 제공하기 위한 임시 저장소.
- 캐시 우선 읽기 전략(read-through caching strategy)
- 요청에 대한 응답값을 데이터베이스가 아닌 캐시에서 우선 찾는다. 해당 데이터가 있으면 반환하고 없으면 데이터베이스에서 찾아 캐시에 저장 후 반환한다.
- 고려 할 점
- 데이터 갱신이 자주 일어나지 않는 상황이 유리하다.
- 만료 시간
- 일관성
- 장애 처리
- 메모리 크기
- 데이터 방출 정책
콘텐츠 전송 네트워크(CDN)
- 정적 콘텐츠를 전송하는데 쓰이는, 지리적으로 분산된 서버의 네트워크이다.
- 고려할 사항
- 비용
- 만료 시한
- 장애 처리
- 콘텐츠 무효화
메시지 큐
- 메시지의 무손실을 보장하는, 비동기 통신을 지원하는 컴포넌트.
- 생산자/발행자(producer/publisher)는 메시지를 만들어 큐에 발행하고, 구독자(consumer/subscriber)는 메시지를 받아 처리한다.
- 메시지 큐를 이용하면 서비스 또는 서버간 결합이 느슨해져, 규모 확장성이 보장되어야 하는 안정적 애플리케이션을 구성하기 좋다.
로그, 메트릭, 자동화
- 로그: 시스템에서 발생하는 이벤트들 기록.
- 메트릭: 시스템의 주요 성능 지표를 수집 및 분석.
- 호스트 단위 메트릭: CPU, 메모리, 디스크I/O 등
- 종합 메트릭: DB 계층 성능, 캐시 계층 성능 등
- 핵심 비즈니스 매트릭: 일병 능동 사용자, 수익, 재방문 등
- 자동화: CI/CD
정리
- 웹 계층은 무상태 계층으로
- 모든 계층에 다중화 도입
- 가능한 한 많은 데이터를 캐시할 것
- 여러 데이터 센터를 지원할 것
- 정적 콘텐츠는 CDN을 통해 서비스 할 것
- 데이터 계층을 샤딩을 통해 그 규모를 확장할 것
- 각 계층은 독립적 서비스로 분할할 것
- 시스템을 지속적으로 모니터링하고, 자동화 도구들을 활용할 것
'시스템 설계 > 가상 면접 사례로 배우는 대규모 시스템 설계 기초' 카테고리의 다른 글
6장. 키-값 저장소 설계 (0) | 2025.01.24 |
---|---|
5장. 안정 해시 설계 (0) | 2025.01.20 |
4장. 처리율 제한 장치의 설계 (1) | 2025.01.17 |
3장. 시스템 설계 면접 공략법 (1) | 2025.01.12 |
2장. 개략적인 규모 추정 (0) | 2025.01.12 |
댓글