티스토리 뷰

서버의 부하

대량의 패킷이 서버로 요청 될 경우에 서버가 모두 처리하지 못할 수 있는 상황이 발생한다.

이를 해결하기 위한 부하 분산 방법에 대해 알아보자.

DNS를 이용한 부하분산

DNS서버에 같은 이름으로 여러대의 웹 서버를 등록하는 방법

  • 라운드로빈을 이용하여 차례대로 다른서버에 요청을 보낸다.
  • DNS의 경우 서버의 상태를 체크할 수 없어 서버가 요청을 받을 수 없는 상태에도 해당 서버에 요청을 보내는 단점이 있다.
  • 클라이언트 측에서 여러페이지에 걸쳐 대화를 하는경우 중간에 끊길 수도있다.
    • 예를들어 로그인을 한 상태인경우 로그인상태가 다른서버에 접근하더라도 유지가 되어야한다.

복수페이지의 대화를 진행하는 방법

  • 전후의 관계를 나타내는 데이터를 추가
  • 쿠키를 HTTP헤더에 추가

로드밸런서(부하분산장치)

DNS에 로드밸런서를 등록하여 사용한다.

DNS에 여러 IP를 등록하여 사용할 경우의 문제점인 서버상태 체크를 로드밸런서를 통해 해결한다.

 

  • 서버의 CPU, 메모리 상태 수집
  • 시험 패킷을 통해 응답 시간으로 부하를 판단한다.

단, 부하는 단시간에 증가하거나 감소 할 수 있음을 조심해야한다.

가장 좋은 방법은 웹서버의 능력을 설정한 후 해당 능력 이상의 부하를 주지않도록 리퀘스트를 분배하는 방법이 가장 좋다

캐시서버를 이용한 부하분산

DNS에 캐시서버를 등록하여 사용하는 방식

캐시서버를 사용할 경우 Via라는 헤더가 추가된다. 이는 캐시서버를 경유함을 의미한다

프록시

클라이언트와 웹서버 중간에 들어가 중계기 역할을 한다.

데이터를 캐시에 저장하여 웹서버 대신에 데이터를 클라이언트로 전송하는 역할을 한다.

데이터가 있는경우 캐시서버를 통해 응답을 한다

캐시 서버에서 웹 서버로 전송한 Request
If-Modified-Since: Wed, 21 Sep  ... // 이전에 데이터가 캐시에 저장되어 있는경우 해당 헤더에 추가

웹 서버에서 캐시 서버로 Response
HTTp/1.1 304 Not Modified // If-Modified-Since 이후로 변경이 없으면 반환한다. 콘텐츠 변경이 없음을 의미한다

포워드 프록시

  • 캐시 서버를 클라이언트 측에 두는방식
  • 캐시서버 이용을 목적
  • 클라이언트의 정보를 숨길 수 있다.

장점

  • 저속회선 인터넷에서 인터넷에 빠르게 액세스가 가능하다.
  • 리퀘스트의 내용을 조사함으로 request 내용에 문제가 있을경우 액세스접근을 막을 수 있다.
    -> 방화벽으로 막을 수 없는 패킷에 추가적으로 안전장치가 추가 된것과 같다. 

단점

  • 브라우저의 설정에 문제가 있을경우 제대로 동작하지 않는다.

리버스 프록시

  • 캐시서버를 웹서버 측에 두는 방식
  • 웹서버의 정보를 숨길 수 있다.

장점

  • 브라우저 설정이 필요없다.