핵심은 두가지.
웹/모바일 트래픽 증가로 인해 추가 처리 서버 필요. => 웹 서버확장.
데이터 용량 확보가 필요. -> 데이터베이스 서버.
.
🎱 관계형보다 비 관계형 데이터가 더 적합한 경우
🎱 스케일 업 vs 스케일 아웃
스케일 업 = 수직적 규모 확장. 즉, 서버에 고사양 자원(더 좋은 CPU, 더 많은 RAM 등)을 추가
스케일 아웃 = 수평적 규모 확장. 즉, 더 많은 서버를 추가.
스케일 업의 한계점 ?
결국 대규모 애플리케이션을 지원할 때는 수평적 규모 확장, 즉 Scale-out이 더욱 적합하다.
🎱 로드밸런서
자 이제 스케일아웃을 통해 웹 서버를 다중화 하였다.
이제 앞에 로드밸런서를 두고 public ip로 클라이언트의 접속을 받게 한다.
(즉, 더이상 웹서버는 클라이언트 접속을 직접 처리하지 않는다.)
로드밸런서는 사이에서 중개역할을 하며 private ip로 웹서버와 통신, 부하를 처리한다. 당연히 다수의 웹 서버로 스케일아웃 했기 때문에 failover도 가능하다.
🎱 DB 다중화
통상적으로 write 보단 read가 훨씬 많다.
그러니 MASTER / SLAVE로 DB를 나누고. 각각에 write/ read 연산을 맡기자.
이로 인해 기대할 수 있는 이득은 아래와 같다.
🎱 캐시
이번엔 Latency를 개선해볼 차례다.
- read-through caching strategy
요청받은 웹 서버는 캐시에 응답이 저장돼있는지 확인 후. 있으면 캐시에서 반환. 없으면 DB에서 데이터를 읽어서 캐시에 쓴 후 반환.
캐시에 대한 여러 TIP
🎱 CDN
정적 콘텐츠를 전송하는데 쓰이는 지리적으로 분산된 서버의 네트워크.
Request path, Query String, cookie, request header에 기반하여 HTML 페이지를 캐싱함.
어떤 사용자가 웹 사이트를 방문하면, 그 사용자에게 가장 가까운 CDN 서버가 정적 콘텐츠를 전달하게 된다.