1장 사용자 수에 따른 규모 확장성
가상면접으로 배우는 대규모 시스템 설계 기초
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 로 인한 위험성이 크다
- 비용이 많이 든다.
- 수평적 확장 : 수평적 확장은 샤딩이라고도 부르는데 더 많은 서버를 추가함으로써 성능을 향상시킬수 있다.
- 대규모 데이터베이스를 샤드라고 부르는 작은 단위로 분할하는 기술이다.
- 샤딩 전략
- 가장 중요한건 샤딩 키(파티션 키)
- 데이터 재샤딩
- 유명인사 문제
- 조인과 비정규화
- 가장 중요한건 샤딩 키(파티션 키)
- 수직적 확장 : 스케일업, 기존 서버에 더많은 또는 고성능의 자원을 증설하는 방법