서버에서 살아남기

서버의 부하 분산 본문

네트워크

서버의 부하 분산

개발롬 2022. 8. 21. 01:59

성공과 실패를 결정하는 1%의 네트워크 책을 읽고 리퀘스트를 분배한 서버의 부하 분산과 캐시 서버를 이용한 서버의 부하 분산을 정리하려고 합니다.

1. 리퀘스트를 분배한 서버의 부하 분산

분산 처리 : 복수의 서버를 사용하여 처리를 분담하는 방법으로 서버 한 대당 처리량을 줄이는 것

부하 분산의 가장 간단한 방법은 서버를 여러 대 두는 것입니다. 이 방법을 사용할 경우 클라이언트가 보내는 리퀘스트를 웹 서버에 분배하는 구조가 필요합니다.

서버에 엑세스 할 때 DNS서버에 조회하여 IP주소를 조회하는데, DNS서버는 조회가 있을 때마다 차례대로 IP주소를 되돌려줍니다.

예를 들어 http://www.soohyun.co.kr 이라는 서버명이 있고, 192.0.2.10 192.0.2.20 192.0.2.30 이 있다고 가정해보면,

이렇게 그림과 같이 차례를 바꿔가며 회답을 합니다. 1주기를 순환하고 원래대로 돌아가는 것을 라운드 로빈이라고 합니다.

그러나 웹 서버 중 문제가 있는 서버가 있어도 DNS서버는 웹 서버가 동작하는지 안하는지 확인하지 못하므로 웹 서버가 멈췄어도 IP주소를 회답합니다.

이러한 단점을 피하기 위해 부하 분산 장치로드 밸런서 등이 나왔습니다.

 

부하 분산 장치에 웹 서버가 연상되는 http://www.soohyun.co.kr 과 똑같은 이름을 붙이고, 부하 분산 장치의 IP주소를 DNS서버에 등록합니다.

그러면 클라이언트는 부하 분산 장치가 웹 서버라고 생각하여 여기에 리퀘스트를 보내고 부하분산 장치는 여러대의 서버에 리퀘스트를 분배합니다.

1-1. 여러대의 웹 서버에 리퀘스트를 전송 시, 판단 하는 기준

1) 통신이 단순한 엑세스 일 때

  • 웹 서버의 부하 상태가 판단 근거입니다. 웹서버와 정기적으로 정보를 교환하여 CPU나 메모리의 사용률 등을 수집하고 이것을 바탕으로 부하가 낮은지, 시험 패킷을 웹 서버에 보내 응답 시간으로 부하를 판단하는 방법이 일반적입니다.

2) 통신이 복수 페이지에 걸려 있을 때

  • 웹 서버의 부하와 관계없이 이전의 리퀘스트와 같은 웹 서버에 전송해야 하는데, 그러려면 통신이 복수의 페이지에 걸려있는지 먼저 판단해야 합니다. 첫번째 보낸 통신과 그 다음에 보내는 통신이 같은 것인지 전후 관계를 확인하기 위한 정보를 HTTP 헤더에 부가합니다(쿠키) 그래서 이전과 같은 통신이라면 이전과 같은 웹서버에 보내고, 그렇지 않으면 부하가 적은 웹 서버에 전송하도록 처리합니다.

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

데이터베이스 서버와 웹 서버 같이 역할에 따라 분산 처리하는 방법 중 하나가 캐시 서버를 사용하는 방법입니다.
캐시 서버는 프록시 라는 구조를 사용하여 데이터를 캐시에 저장하는 서버입니다.

프록시
: 웹 서버와 클라이언트 사이에 들어가서 웹 서버에 대한 엑세스 동작을 중개하는 역할
: 웹 서버에서 받은 데이터를 디스크에 저장해두고, 웹 서버를 대신하여 클라이언트에 데이터를 반송하는 기능(=캐시)

케시 서버는 웹 서버에서 받아 보관해둔 데이터를 클라이언트에 송신만 하면 되기 때문에 빠르게 데이터를 송신할 수 있지만, 웹 서버의 데이터가 변경되면 캐시의 데이터는 사용할 수 없습니다.

2-1. 캐시서버의 동작

클라이언트에서 캐시 서버로 요청을 보낼 수 있게 웹 서버 대신 캐시 서버를 DNS 서버에 등록합니다.

1) 데이터가 캐시에 저장이 안되어 있는 경우

  1. 캐시 서버는 클라이언트에서 받아온 리퀘스트 메세지에 캐시 서버를 경유한 것을 나타내는 값을 헤더에 추가하여 웹 서버에 전달 (캐시 서버의 설정에 따라 붙지 않는 경우도 있음)
  2. 응답 메세지를 캐시 서버로 전달
  3. 응답 메세지에 1-1) 과 같이 캐시 서버를 경유했다는 것을 나타내는 값을 헤더에 추가
  4. 응답 메세지를 캐시에 저장하고 저장한 일시 기록

 

2) 데이터가 캐시에 저장이 되어 있는 경우

  1. 캐시 서버는 클라이언트에서 받아온 리퀘스트 메세지에 캐시 서버를 경유한 것을 나타내는 값을 헤더에 추가하여 웹 서버에 전달 (캐시 서버의 설정에 따라 붙지 않는 경우도 있음)
  2. 웹 서버측에서 데이터가 변경되었는지 조사하기 위한 If-Modified-Since 라는 헤더 필드를 추가하여 웹 서버에 전송
  3. 웹 서버는 If-Modified-Since값과 페이지 데이터의 최종 갱신 일시를 비교하여 변경이 없으면 변경이 없다라는 것을 나타내는 응답 메세지 반송
  4. 캐시 서버는 최신 데이터와 같다는 것을 확인했기 때문에 캐시에서 데이터를 추출하여 클라이언트에게 전다

'네트워크' 카테고리의 다른 글

사설 IP와 VPN  (0) 2023.07.27
브라우저에 www.google.com 을 입력하면?  (0) 2023.03.26
라우터가 하는 일  (0) 2022.05.29