웹 계층에서 규모 확장
- Scale Up vs Scale Out
- 로드밸런서 ? 여러 대의 서버에 고르게 부하가 분산되도록 하는 장치
- 클라이언트에 대한 요청을 로드밸런서가 직접 받고 실제 웹 서버는 사설 IP로 내부 통신
데이터 계층에서의 규모 확장
- 데이터 베이스 다중화
- 서버 사이에 주-부 관계를 설정
- 쓰기 연산은 마스터에서만 지원하고 slave는 읽기만을 담당하도록 함
- 성능 개선 → 쿼리는 부 서버들이 담당
- 안정성 → 서버실 불나도 데이터 보존 가능
- 가용성 → 서버실 불나도 다른 지역에 있는 데이터로 사용 가능
- 질문 ? 가용성 vs 안정성 뭐가 다른 개념일까?
- if(만약에)
- 주/부 한대씩일 때 부 서버가 다운된다면 주 서버에서 모든연산 진행
- 주 서버가 다운된다면 부 서버중 하나가 주 서버 역할을 하게됨. 이때 주서버의 쓰기 연산이 부 서버에 반영 되지 않았다면 데이터 유실이 발생할 수 있는데, 이는 복구 스크립트 등으로 해결함.
응답 시간 개선
- 캐시 사용시 유의점
- 어떤 상황에 바람직한가? 데이터 갱신보다 참조가 더 많이 일어나는 상황
- 어떤 데이터를 캐시에 두어야 하는가? 영속적으로 보관할 필요없는 데이터
- 캐시에 보관된 데이터를 어떻게 만료시킬 것인가? 너무 길지도 짧지도 않게
- DB와의 일관성 유지 방법? DB에 쓰기연산과 캐시의 쓰기연산이 하나의 트랜잭션이 아닐 경우 문제
- 장애 대처 방법? 단일장애지점을 회피하기 위해 캐시 서버를 여러대 둠
- 캐시 서버 메모리 할당? 너무 적게 잡으면 데이터가 너무 자주 밀려남. 과할당하는 것이 나음
- 데이터 방출 정책? 메모리가 꽉 찼을 때 어떤 데이터를 방출할지
- Least Frequently Used
- Least Recently Used
- CDN
- 정적 콘텐츠를 전송하는 데 쓰이는 지리적으로 분산된 서버의 네트워크
- 사용시 유의점
- 비용 ? CDN은 보통 서드파티에 의해 운영되기 때문에 데이터 전송량에 따라 비용 발생
- 적절한 만료 시한 설정 ? time-sensitive한 데이터는 신선도의 문제가 발생
- CDN 장애에 대한 대처 방안 ? 기존 서버에서 가져오도록 설정
- 콘텐츠 무효화 ? 만료되지 않은 컨텐츠를 무효화하고 싶은 경우
- cdn에서 제공하는 api 호출
- version 관리
무상태 웹 계층
- 세션 등의 상태 정보를 보관하는 아키텍처에서는 Sticky Session 등을 통해 해당 상태를 가진 계층이 반드시 해당 서버에 전달되도록 해야하는데 이는 비용이 큼
- 공유 데이터 센터에 상태정보를 보관하고 서버에서는 무상태로 유지되도록 해야함