가상면접 사례로 배우는 대규모 시스템 설계 기초를 읽고 정리한 내용입니다
1장 요약
단일 서버에서 시스템의 규모를 확장해나가는 과정에서 필요한 요소들을 단계적으로 소개한다.
기본 아키텍처
- 클라이언트: 웹 브라우저, 모바일 앱
- 웹서버
- 데이터베이스: RDBMS, NoSQL(키-값, 그래프, 칼럼, 문서)
로드밸런서
: 웹서버에 트래픽 분산시키는 역할
-> 시스템의 가용성을 높임 (단일 서버의 단점 X)
데이터베이스 다중화
- master-slave
- master: insert, delete, update 연산
- slave (master의 복사본): read 연산
응답시간(latency) 개선하기
캐시
: 자주 참조되는 값 또는 값비싼 연산 결과를 저장하는 임시 메모리
CDN (Content Delivery Network)
: 정적 컨텐츠를 전송하는 데 쓰이는, 지리적으로 분산된 서버의 네트워크
무상태 아키텍처
- 웹 계층을 수평적으로 확장(scale-out)하기 위해 무상태(stateless)하게 설계
- 따로 상태 정보를 저장하는 데이터베이스를 두는 게 바람직
데이터 센터
- 지리적 라우팅: 사용자를 가장 가까운 데이터 센터로 안내
데이터베이스의 규모 확장하기
- 샤딩: 데이터베이스의 수평적 확장
- 메시지 큐, 로그, 메트릭, 자동화 + 데이터베이스의 규모를 확장한 디자인