CS전공지식 노트/3. 네트워크

네트워크 #9 : 대규모 트래픽으로 인한 서버 과부하 해결방법

berryberries 2023. 8. 21. 22:16

1. 서버 과부하

  • 서버가 리소스를 소진하여 들어오는 요청을 처리하지 못할 때 발생
  • 트래픽이 많이 발생하고 이를 적절히 해결하지 못하면 서버과부하가 걸린다.

ex ) 사용자의 웹요청을 처리하지 못해 응답없음이 뜬다.

2. 서버 과부하의 원인

  • 자원의 한계점 도달했을 때
    1. 서버의 CPU 사용량이 80-90%에 도달할 때
    2. 메모리가 부족해 계속해서 스와핑이 발생할 떄

▶ 모니터링을 통한 자원의 적절한 할당으로 해결가능하다.

 

3. 서버 과부하 해결방법

1) 모니터링을 통한 자원 할당

AWS 오토스케일링

  • 서비스 이용불가능 상태 발생 이전 cloud watch가 계속해서 모니터링하여 서버 대수를 늘려주는 방법
  • 애플리케이션을 자동으로 모니터링하고 자원의 용량을 자동으로 조정 
동작원리


- EC2 인스턴스 클러스터가 있고 8개의 인스턴스가 필요하다
- 하드웨어가 터졌다던지 소프트웨어 문제가 터져서 EC2 한개가 죽어버렸다
- 이것을 오토스케일링이 감지를 한다
- 시작구성에 맞는 인스턴스를 생성을 해서 오토 스케일링 클러스터에 넣어준다.

* 스케일링 : 인스턴스나 컴퓨팅파워를 높이는 것

② netdata를 이용한 모니터링

  • CPU 사용량, 디스크 활동, 대역폭 사용량, 웹 사이트 방문 등과 같은 실시간 메트릭을 수집 한 다음 해석하기 쉬운 실시간 차트로 표시하도록 설계된 오픈 소스 도구
  • slack 과 연동해서 설정한 임계치를 기반으로 알림 서비스를 구축할 수 있다.

③ 모니터링을 하는 이유

  • 서버 과부화로 인해 서버 중지에 대한 대처를 할 수 있다.
    1. 어떤 페이지에 어떤 트래픽이 얼마나 발생했는지?
    2. 어떤 네트워크에서 병목현상이 일어났는지?
  • 활용도가 낮은 페이지, 높은 페이지를 파악할 수 있어 나중에 서비스 개선에도 도움을 준다.
  • 모니터링한 결과물을 알려주면서 서비스의 중단 등의 여부를 사용자에게 알려준다.

▶ 문제점을 파악하고 해결하기 위해 모니터링은 필수적이다

 

2) 로드밸런서

  • 로드밸런싱 기술을 제공하는 서비스 또는 장치
  • 클라이언트와 네트워크 트래픽이 집중되는 서버들 또는 네트워크 허브 사이에 위치한다
  • 장애가 발생했을 때, 트래픽을 다른 기능 서버로 리디렉션하여 시스템 중단을 방지한다.
  • 종류 : L4스위치, L7스위치

ex) AWS 오토스케일링은 구성하는데 시간이 걸리기 때문에 로드밸런서로 트래픽을 분산시켜야 한다. 

 

로드밸런싱
- 네트워크 또는 서버에 가해지는 로드를 분산 해주는 기술
- 중앙처리장치 혹은 저장장치와 같은 컴퓨터 자원들에게 작업을 나누는 것을 의미
- 여러 대의 서버를 두고 서비스를 제공하는 분산 처리 시스템에서 필요한 기술

3) 블랙스완 프로토콜

  • 블랙스완 : 예측할 수 없는 사고가 일어난 것
  • 사후에는 사고의 원인 등을 분석할 수 있지만 사전에는 이 사고를 예측할 수 없는 것
  • 매번 일어나기 때문에 이에 따라 대비해야한다.
ex ) 구글

1. 영향을 받은 시스템과 각 시스템의 상대적 위험 수준을 확인
2.  체계적으로 데이터를 수집하고 원인에 대한 가설을 수립한 후 이를 테스팅
3. 잠재적으로 영향을 받을 수 있는 내부의 모든 팀에 연락
4. 최대한 빨리 취약점에 영향을 받는 모든 시스템을 업데이트
5. 복원계획을 포함한 우리의 대응 과정을 파트너와 고객 등 외부에 전달

4) 서킷 브레이커 ( 서킷 브레이커 패턴 )

  • 서비스 장애를 감지하고 연쇄적으로 생기는 에러를 방지하는 기법
  • 서비스와 서비스 사이에 서킷브레이커 계층을 두고 미리 설정해놓은 timeout 임계값에 도달하면 서킷브레이커가 그 이후의 추가호출에 무조건 에러를 반환하게한다.
  • 클라이언트 측면에서 장애를 방지하기 위한 도구로써, 실패할 수 있는 작업을 계속 시도하지 않도록 방지한다.
  • 서킷브레이커가 구현된 라이브러리 : 넷플릭스의 Hystrix와 Resilience4j

① 서킷 브레이커 사례

스레드의 차단

  • 스레드 하나 차단 => O
  • 다중 스레드 상황에서 대다수의 스레드가 에러가 있는 서비스에 요청을 보낸다면 정상작동하는 스레드도 차단된다.

계단식 실패

  • 하나이상의 부품, 서비스 등의 고장이 연결되어있는 다른 부품, 서비스의 고장으로 이어지는 것을 말합니다.
  • 서비스 A,B,C,D가 이어져 있는 상태에서 A에 장애가 생긴다면,  B,C,D의 서비스응답도 지연된다.

② 서킷 브레이커 동작과정 & 상태

  • 서킷브레이커는 closed, open, half_open 의 상태값을 갖는다.
  • 각각의 정해진 임계치가 넘어갈 경우 요청이 차단된다.

 서킷 브레이커 장점

  • 연속적인 에러 발생을 막아준다
  • 일부서비스가 종료되더라도 다른 서비스들은 이상없이 동작하게 만들 수 있으며 사용자경험을 높여준다.

5) 컨텐츠 관리

① 불필요한 컨텐츠 제거

  • 불필요한 쿼리 등을 제거

ex) 인프런 장애복구사례

② CDN을 통한 컨텐츠 제공

  • 사용자 가까이, 그리고 분산된 대규모 서버 네트워크를 기반으로 컨텐츠를 제공해서 메인 서버에 대한 부하를 줄인다..

③ 컨텐츠 캐싱

  • 브라우저 캐시를 통해 해당 요청에 관한 항목을 캐시에서 응답을 읽어 네트워크 요청에 관한 비용을 모두 제거한다.

④ 컨텐츠 압축

  • 텍스트 기반 리소스는 gzip 또는 Brotli를 통해 압축한다.
    • 압축하면 70% 정도까지 압축할 수 있습니다.

⑤ 컨텐츠의 우하한 저하(미리 준비된 응답)

  • 시스템의 과도한 부하를 줄이기 위해 제공하는 컨텐츠 및 기능을 일시적으로 줄이는 전략
  • 예시
    • 정적 텍스트 페이지를 제공, 검색을 비활성화, 적은 수의 검색 결과를 반환, 필수적이지 않은 기능을 비활성화
    • 실제사례: 2023.05.31 서울시 경보 오발령 사태시 NHK WEB

 

 

참고자료