01. 사용자 수에 따른 규모 확장성
정리
- 웹 계층은 무상태(statelesS) 계층으로
- 모든 계층에 다중화 도입.
- 가능한 많은 데이터 캐싱
- 여러 데이터 센터 지원
- 정적 콘텐츠는 (css, img) CDN으로 서비스
- 데이터 계층은 샤딩을 통해 규모 확장
- 각 계층은 독립적 서비스로 분할할 것.
- 시스템을 지속적으로 모니터링하고 자동화 도구들을 활용할 것.
DB
언제 NoSQL이 좋은가
- 아주 낮은 응답 지연시간이 요구됨
- 데이터가 비정형, 관계형이 아님
- 데이터를 serialize/deserialize 할수있음
- 아주많은 데이터를 저장할 필요가 있음
Scale up/ Scale out
- Scale up : 서버에 고사양 자원(CPU,RAM)등 추가 (수직적 확장)
- Scale out : 더 많은 서버 추가 (수평적 확장 = 샤딩)
- 샤드에 보관되는 데이터 사이에는 중복이 없다.
- 샤딩되고나면 조인이 어려워져서 비정규화하여 하나의 테이블에서 질의가 수행될 수 있도록 해야한다.
Cache
애플리케이션의 성능은 DB를 얼마나 자주 호출하느냐에 크게 좌우되는데, 캐시가 완화가능.
- 데이터 갱신은 자주 일어나지 않지만 참조는 빈번하면 고려해볼만 함.
- 휘발성 메모리에 저장됨을 기억해야함. 만료되면 삭제되어야함.
- 저장소의 원본을 갱신하는 연산과 캐시를 갱신하는 연산이 단일 트랜잭션으로 처리되지 않는 경우 이 일관성은 깨질 수 있다.
stateless 웹 계층
- 상태정보(사용자 세션 데이터같은 정보)를 웹 계층에서 제거하고, DB등 지속성 저장소에 저장해야한다.
- 상태 의존적인 서버는 같은 클라의 요청은 같은 서버로 가야하고, 이는 로드밸런서에 부담이 된다. & 장애처리가 힘들다.
메시지 큐
- 메시지의 무손실,비동기 통신을 지원한다. (메시지큐에 일단 보관된 메시지는 소비자가 꺼낼때까지 안전)
- 비동기통신으로 서버간 결합이 느슨해져 규모확장성이 보장되어야하는 안정적인 애플리케이션 구성에 좋다. ##
서적
- 가상 면접 사례로 배우는 대규모 시스템 설계 기초