가상면접으로 배우는 대규모 시스템 설계 기초
1장 사용자 수에 따른 규모 확장성
단일 서버 -> 데이터베이스 분리 -> 수평적 확장 vs 수직적 확장
수직적 확장 : 스케일업
- 단점 : 한계가 존재함, 장애 복구에 대한 방안이나 다중화 방안을 제시하지 않는다.
수평적 확장 : 스케일 아웃
로드벨런서 : L2(Data link 계층을 사용, Mac주소 기반 부하 분산), L3(Network 계층을 사용, IP주소 기반 부하 분산),
L4(Transport 계층을 사용, Port 기반 부하 분산), L7(Application 계층을 사용, 요청(URL) 기반 부하 분산)데이터 베이스 다중화 : master - slave 방식
- 쓰기는 마스터 읽기는 슬레이브로 부하 분산이되어 성능이 좋아진다.
- 분산저장해서 하나가 파괴되어도 다른 DB로 작업 할수 있어서 가용성과 안정성이 높아진다.
캐쉬 : 값비싼 연산 결과를 메모리안에 두고 빨리 처리 될수 있도록 하는 저장소이다.
- 캐쉬 계층 : 데이터가 잠시 보관 되는 곳으로 DB 보다 훨씬 빠르다.
- 읽기 주도형 캐쉬 전략(read-through caching strategy)
- 데이터 갱신은 자주 일어나지 않지만 참조가 빈번이 일어날때
- 영속적으로 보관할때는 캐시가 좋지는 않다.
- 캐시에 보관된 데이터는 어떻게 만료되는지 고려 해야 된다.
- 일관성은 어떻게 유지해야 되는지 고려해야 된다.
- 장애에는 어떻게 대응 해야 되는지 고려해야 된다
- 캐시 메모리의 크기를 고려해야 된다.
- 데이터 방출 정책이 무엇인지 고려해야 된다. LRU, LFU, FIFO
CDN : 정적 콘텐츠를 전송하는 데 쓰이는 지리적으로 분산된 서버의 네트워크
- 비용 문제를 고려하자
- 적절한 만료 시한 설정
- CDN 장애에 대한 대처 방안
무상태(stateless) 웹 계층
- 상태 정보 의존적인 아키텍처(세션 데이터 사용)
- 무상태 아키텍처 : 상태 정보는 공유 저장소로 부터 가지고 온다.
데이터 센터
- 장애가 없는 상황에서 사용자는 지리적으로 가까운 데이터 센터를 이용한다 (geoDNS-routing, geo-routing)
- 다중 데이터 센터 아키텍처
- 트래픽 우회 : 올바른 데이터 센터로 트래픽을 보내는 효과적인 방법
- 데이터 동기화 : 데이터 센터마다 별도의 데이터 베이스를 사용하는 상황
- 테스트 와 배포 : 여러 위치에 배포하고 테스트 해야 되는 상황
메시지 큐 : 메시지의 무손실을 보장하는 비동기 통신을 지원하는 컴포넌트
- 생산자/소비자
- 서버간의 느슨한 결합
로그, 메트릭 그리고 자동화
- 로그 : 에러 로그를 모니터링하는것이 중요하다.
- 메트릭 : 메트릭을 잘 수집하면 사업 현황에 관한 유용한 정보를 언을 수도 있고 시스템의 현재 상태를 손쉽게 파악할수 있다.
- 호스트 단위 메트릭
- 종합 메트릭
- 핵심 비지니스 메트릭
- 자동화 : 시스템이 크고 복잡해지면 생산성을 높이기 위해 자동화 도구를 사용해야 된다.
데이터 베이스의 규모확장
- 수직적 확장 : 스케일업, 기존 서버에 더많은 또는 고성능의 자원을 증설하는 방법
- 하드웨어에는 한계가 있다.
- SPOF 로 인한 위험성이 크다
- 비용이 많이 든다.
- 수평적 확장 : 수평적 확장은 샤딩이라고도 부르는데 더 많은 서버를 추가함으로써 성능을 향상시킬수 있다.
- 대규모 데이터베이스를 샤드라고 부르는 작은 단위로 분할하는 기술이다.
- 샤딩 전략
- 가장 중요한건 샤딩 키(파티션 키)
- 데이터 재샤딩
- 유명인사 문제
- 조인과 비정규화
- 가장 중요한건 샤딩 키(파티션 키)
- 수직적 확장 : 스케일업, 기존 서버에 더많은 또는 고성능의 자원을 증설하는 방법