Scalability
1 Scalability
- 한 명의 사용자를 지원하는 시스템에서 시작해서 몇백만 사용자를 지원하는 시스템을 설계해보자
1.1 시스템 규모 확장 기법
- 시스템 규모 확장 기법을 요약하면 아래와 같다
- 웹 계층은 무상태 계층으로
- 모든 계층에 다중화를 도입
- 가능한 많은 데이터를 캐시할 것
- 여러 데이터 센터를 지원할 것
- 정적 콘텐츠를 CDN을 통해 서비스 할 것
- 데이터 계층은 샤딩을 통해 규모를 확장할 것
- 각 계층은 독립적 서비스로 분할할 것
- 시스템을 지속적으로 모니터링하고 자동화 도구들을 활용할 것
2 Scale up
- 특정 노드의 고사양 자원의 양을 늘리는 방법을 말한다
- 예를 들어 서버에 메모리를 추가해서 서버의 처리 능력을 향상시킬 수 있다
- 대규모 서비스에서는 Scale up의 단점으로 인해 사용하지 않는다
2.1 장점
- 서버로 유입되는 트래픽의 양이 적을 때 좋은 선택이 된다
- Scale up 일반적으로 Scale out 보다 구현하기 쉽다
2.2 단점
- 수직적 규모 확장에는 한계가 있다
- 한 대의 서버에 CPU와 메모리를 무한대로 증설할 방법은 없다
- 자동복구 방안이나 다중화 방안을 제시하지 않는다
- 서버에 장애가 발생하면 모든 서비스가 완전히 중단된다
- SPOF로 인한 위험성이 크다
- 비용이 많이 든다
- 고성능 서버로 갈수록 가격이 올라가기 마련이다.
3 Scale out
- 노드의 개수를 늘리는 방법을 말한다
- 서버를 추가하므로써 서버 한 대가 다뤄야 하는 부하를 줄일 수 있다
3.1 장점
- 여러개의 서버를 두어 한 서버에 장애가 발생해도 모든 서비스가 중단되지 않는다
- SPOF로 인한 위험성이 낮다
3.2 단점
- Scale out 일반적으로 Scale up 보다 구현하기 어렵다.
4 웹 계층 다중화
- 웹 계층의 수평적 규모 확장을 위해 로드밸런서를 사용한다
4.1 로드밸런서
- 로드밸런서는 부하 분산 집합에 속한 웹 서버들에게 트래픽을 고르게 분산하는 역할을 한다.
- 웹 서버는 클라이언트의 접속을 집적 처리하지 않는다.
- 더 나은 보안을 위해 서버 간 통신(로드밸런서와 웹 서버)에는 사설 IP 주소를 이용한다.
가용성
- 부하 분산 집합에 웹 서버를 추가하면 가용성이 향상된다