AWS 오토스케일링: CloudWatch와 함께 작동하여 애플리케이션의 트래픽을 모니터링하고, 설정된 지표를 기준으로 인스턴스를 자동으로 늘리거나 줄여서 트래픽 증가 또는 감소에 유연하게 대응할 수 있다.
Netdata: 무료로 제공되는 모니터링 도구 중 하나로, 설정한 threshold을 초과할 경우 Slack 등과 연동하여 알림을 받을 수 있어 자원 사용량의 문제를 빠르게 파악하고 대응할 수 있다.
활용
- 트래픽 분석: 특정 페이지 또는 기능에 대한 트래픽이 증가하는 경우, 해당 웹페이지 또는 서비스의 병목 현상을 파악할 수 있다.
- 서비스 개선 및 문제 해결: 페이지별 활용도 및 성능 데이터를 분석하여 서비스의 개선점을 찾을 수 있다.
- 자원 할당 및 효율화: 모니터링 결과를 기반으로 자원 할당을 조정하여 비효율적인 부분을 개선하고, 서버 리소스를 효율적으로 사용할 수 있다.
- 오토스케일링 구성에 시간이 걸리므로 앞단에 로드밸런서를 두어 트래픽을 분산시킬 수 있다.
- 특정 서버의 장애를 로드밸런서가 감지하여 해당 서버로의 트래픽을 다른 정상적인 서버에 분삼시킴으로써 시스템의 안정성과 가용성을 높일 수 있다.
서비스 장애를 감지하고 연쇄적으로 생기는 에러를 방지하는 방법
서비스에 장애가 발생하면 서킷 브레이커가 해당 서비스에 대한 요청을 차단하여, 해당 장애로부터 시스템 전체에 영향을 미치는 것을 방지
- 서비스 간의 통신에서 timeout 값을 설정하여 일정 시간 이내에 응답을 받지 못할 경우 해당 요청을 중단하고 에러를 반환
동작 과정
- 서킷브레이커 closed 상태: 네트워크의 실패율 < 임계치
→ 서비스에 대한 요청은 정상적으로 처리- 서킷브레이커 open 상태 (fail fast 상태): 네트워크의 실패율 > 임계치
→ 서비스에 대한 요청은 모두 차단되거나, 에러를 반환하여 서비스를 이용할 수 없는 상태- 서킷브레이커 half_open 상태: Open 상태에서 일정 시간 동안 지난 후, 서비스가 정상적으로 작동하는지 확인하기 위한 단계
→ 서비스가 정상적으로 응답을 반환하면, 장애가 해결되었다고 간주하고 서킷 브레이커를 Closed 상태로 전환
→ 서비스가 여전히 응답을 하지 않으면, 장애가 지속되고 있다고 판단하여 서킷 브레이커를 다시 Open 상태로 전환
불필요한 컨텐츠 제거: 실제 필요한 값들만 받아오고 요청할 수 있도록 쿼리 개선
- "SELECT *"과 같이 모든 컬럼을 가져오는 쿼리는 데이터베이스 성능에 부정적인 영향을 미칠 수 있으므로 개선해야 한다.
CDN(Content Distribution Network): 동일한 컨텐츠를 가진 서버를 지리적으로 분산하여 웹 콘텐츠를 더 빠르게 제공하는 기술
- 성능 향상: CDN은 지리적 가까운 서버를 활용하여 사용자가 콘텐츠에 빠르게 액세스할 수 있는 것을 목표로 한다.
- 지리적 요소에 더해, 성능 측면에서 더 나은 선택이 가능한 경우 해당서버로 리디렉션할 수 있다.
- 특징
- 고가용성: 복제된 콘텐츠를 여러 위치에 저장하므로 특정 서버의 장애가 전체 서비스에 영향을 미치지 않도록 한다.
- 대역폭 최적화: 대량의 데이터 전송을 처리하고 네트워크 트래픽을 효율적으로 관리함으로써 원본 서버에 대한 부하를 줄이고 네트워크 병목 현상을 방지한다.
- 성능 향상: CDN은 지역적으로 분산된 서버를 사용하여 콘텐츠에 빠르게 액세스할 수 있도록 도움을 준다.
- 보안: CDN은 DDoS 및 웹 어플리케이션 방화벽과 같은 보안 기능을 제공하여 원본 서버를 공격으로부터 보호한다.
- CDN 활용 예시: OTT(Included Netflix)
컨텐츠 캐싱: 라우저의 세션 저장소, 로컬 저장소, 쿠키 등을 활용하여 서버에 대한 반복적인 요청을 줄이는 방법
컨텐츠 압축: Text 기반 리소스를 gzip나 brotli와 같은 압축 알고리즘을 사용하여 압축하는 것
→ 70%까지 압축 가능
컨텐츠의 우하한 저하: 사용자에게 필요하지 않거나 중요하지 않은 정보를 제공하지 않음으로써 시스템의 부하를 줄이는 방법
- 검색 결과에서 필수적이지 않은 정보를 생략하거나, 로딩 시간이 긴 콘텐츠를 조건부로 로딩하지 않는 방식
→ 정상적인 상태
→ 시스템 부하 상태
- Server
- 비디오 파일 분할: 비디오 파일은 여러 개의 청크로 나누어 진다.
이러한 청크는 동일한 콘텐츠를 서로 다른 비트레이트(화질)로 인코딩한 버전으로 준비된다.- Manifest 파일: 서버는 비디오 스트림의 모든 청크에 대한 정보를 포함하는 manifest 파일을 제공한다.
→ manifest 파일에는 각 청크의 URL 정보와 해당 청크의 비트레이트 옵션 등이 포함
- Client
- 대역폭 측정: 클라이언트는 주기적으로 현재의 네트워크 대역폭을 측정
- 비트레이트 선택: 대역폭 측정 결과에 따라 클라이언트는 manifest 파일을 참고하여 적절한 비트레이트 수준의 청크를 선택
- 동적 조절: 클라이언트는 비디오 재생 중에도 대역폭 상태를 모니터링하며 필요한 경우 비트레이트를 동적으로 조절
- DASH는 다양한 디바이스와 환경에서 스트리밍 서비스를 최적화를 진행한다.
→ 사용자 경험을 향상 & 네트워크 부하↓