서버/서버 공통

[서버] 한 서비스에 여러 서버를 사용하자 (로드 밸런싱)

삐뚤어진 개발자 2020. 7. 18.

서버 로드 밸런싱 / 로드 밸런서?

서비스를 구축할 때 거의 필수적인 서버, 서버에서 로드 밸런싱, 로드 밸런서는 무엇을 의미할 까요?

아무리 좋은 서버라고 해도 서비스의 사용자가 많거나 서버 부하가 많이 걸리는 서비스라면 한대의 서버로 감당할 수 없을 것입니다. 아무리 슈퍼 컴퓨터라도 전세계의 몇십억 인구가 사용하는 구글, 아마존 등에서 제공하는 여러가지 서비스들을 하나의 서버 컴퓨터로 작동시킬 수는 없겠죠??

 

그래서 필요한 것이 로드 밸런서, 로드 밸런싱입니다.

예를 들어 웹 페이지를 접속하여 페이지가 떳을때, 우리는 '웹페이지가 로드 됐다' 라고 합니다.

로드 밸런싱이란 로드를 밸런스 있게 분배하여 많은 트래픽을 효율적으로 서버들에게 분배하는 것을 말합니다.

 

 

서버 증설?

서비스를 운영하다가 업데이트도 꾸준히 하고, 홍보 마케팅도 게을리 하지 않았습니다.

그러니 갑자기 많은 사람들이 서비스를 이용하게 되어 서버를 증설해야합니다.

 

이렇게 되면 크게 두가지로 나뉩니다.

사용하던 서버를 팔거나, 버리고 새로운 서버를 구매하여 구축하는 방법, Scale-up

사용하던 서버를 계속 사용하고, 다른 새로운 서버를 구매하여 같이 사용하는 방법, Scale-out

 

출처 : 가비아

어떤 것이 더 가성비가 좋을까요?? 더 좋은 성능의 서버를 구매하고 쓰던 서버를 버리는 건 정말 서버가 있다면, 낭비겠지만, 클라우드 서버를 사용하는 경우는 더 좋은 서버로 scale up 하는 것이 더 저렴할 수 있으니 잘 고려해야 할 것입니다.

 

대부분의 경우가 기존 서버를 사용하면서, 새로운 서버를 증설하는 편이 더 경제적일 것입니다.

하지만, scale out은 각 하드웨어 서버가 나누어져 있기 때문에 각각 독립적인 서버로 문제가 발생할 수 있습니다. 

예를 들어 a 사용자가 a 서버에서 회원가입하여 a서버 디비에 로그인 정보가 있습니다. 하지만 사용자 a가 다음에 b 서버에 접속하여 로그인하려고 하면 로그인 정보가 없어서 로그인이 안될수 있습니다.

 

하지만 이런 문제도 아래와 같은 아키텍쳐로 해결할 수 있습니다.

naver 메인 서버 아키텍쳐

 

웹서버를 여러개로 나누고 데이터베이스는 하나로 합치는 것이죠. 

 

 

 

 

 

로드밸런스 방법론 (알고리즘)

로드 밸런싱을 하는 알고리즘도 여러가지가 있습니다.

 

라운드 로빈 (round robin)

요청의 순서에 따라 배정하는 방식입니다. 순서대로 로드 밸런싱 되기 때문에

- 같은 스펙의 서버를 구축했을때 사용하기 좋습니다. 스펙 차이가 있는 여러대의 서버를 사용할 경우, 트래픽이 일정하게 분산되어, 상대적으로 좋은 성능의 서버가 성능 낭비가 되기 때문입니다. 

- 또한 서버와의 연결이 오래 지속되는 경우는 활용하기 적합하지 않습니다. 서버와의 연결이 계속 이어지고 있는데, 라운드 로빈 방식으로 트래픽을 계속 나눠준다면 비대칭화가 되겠죠?

 

 

가중 라운드로빈(weighted round robin method)

서버의 스펙이 모두 다르다면? 가중치를 설정하여 라운드 로빈 방식을 활용하는 것입니다.

예를들어 A 서버 컴퓨터 B 서버 컴퓨터 2대를 가지고 로드밸런싱을 하는데, A 서버가 B 서버보다 스펙이 2배가 좋습니다. 그렇다면 가중치를  A서버 2 B 서버 1로 설정하여 B서버보다 A서버에게 2배로 요청을 하게 되는 방식입니다.

라운드 로빈 방식의 비대칭화 문제점을 해결한 응용방법이라 볼수 있습니다.

 

ip 해시 (ip hash)

클라이언트의 IP 주소를 특정 서버로 요청하는 방식입니다.  지역마다 아이피가 설정되어 있기 때문에 예를들어 외국에서 들어온 아이피같은 경우 A 서버로, 국내에서 들어온 경우 B 서버로 보내는 방식입니다.

클라이언트의 아이피를 해싱하여 서버를 지정하기 때문에, 같은 아이피로 들어온다면 매번 같은 서버로 연결되는 것이 보장됩니다.

 

최소 연결(least connection)

요청이 들어온 시점에 가장 적은 연결상태를 보이는 서버에 우선적으로 요청하는 방식입니다. 자주 세션처리가 늦어지거나, 서버의 연결시간을 예측하기 어려워 트래픽 분배가 어려운 경우에 적합한 방식입니다.

예를 들어 채팅 서비스를 구축하는데 서버와 연결을 끊을지, 계속 연결 해놓을지를 결정하는 것은 클라이언트 마음입니다. 그럴땐 최소 연결 방식을 고려해보는 것이 좋습니다.

 

 

최소 리스폰 타임(least response time)

서버의 현재 응답시간을 고려하여 트래픽을 분배하는 방식입니다. (응답시간, 연결 상태 등을 고려합니다.)

최소 연결 방식과 더불어 응답속도를 고려하기 때문에, 가장 적은 연결을 하고 있고, 응답속도도 가장 빠른 서버에 우선적으로 연결하는 방식입니다.

 

 

 

 

 

 

osi 4, osi 7 계층 로드밸런싱

osi 개념 이란? osi 개념을

2020/05/28 - [IT/네트워크] - L1 L2 L3 L4 장비? / OSI 7 계층 (Layer) 1/2

2020/06/13 - [IT/네트워크] - L5 ~ L7 정리 / OSI 7계층 2/2

 

로드 밸런스 역할을 할 수 있는 네트워크 계층은 4, 7 계층입니다. 

네트워크 osi 계층은 낮은 숫자가 갈수록 물리적인 영역입니다.

4 계층, 7 계층에서 로드 밸런싱을 하는경우 각각 장단점이 있습니다.

 

아래의 표로 정리해봤습니다.

   L4  L7
네트워크 계층 4계층 전송계층 7계층 응용계층
특징 로드밸런싱을 TCP/UDP 포트 정보를 바탕으로 함 로드밸런싱을 TCP/UDP 정보는 물론 HTTP의 URI,FTP의 파일명, 쿠키 정보등을 바탕으로 함
장점 - 데이터 영역으로 가기전 패킷 레벨에서 로드 밸런싱을 해주기 때문에 효율이 좋고 속도가 빠름

- 데이터 내용을 복호화(암호화의 반대)할 필요가 없기 때문에 해킹으로 부터 비교적 안전함

- L7 로드밸런서보다 가격이 저렴함 
- 네트워크 상위계층에서 로드 밸런싱 하기 때문에, L4에 비해 섬세한 라우팅이 가능함

- 캐싱 기능을 제공함

- 비정상적인 트래픽을 분석후 사전에 필터링 할수 있어, 트래픽 공격 방어에 좋음 (안정적인 서비스 운영 가능)
단점 - 패킷의 내용을 복호화하지 않아 내용을 볼수 없기 때문에 섬세한 라우팅이 불가능

- 사용자의 IP가 수시로 바뀌는 경우 연속적인 서비스를 제공하기 어려움
- 패킷의 내용을 복호화 해야하기 때문에 비용이 많이 듦

- 클라이언트가 로드밸런서와 인증서를 공유해야하기 때문에, 해커가 로드밸런서를 통해 클라이언트 데이터에 접근 할수 있음 (보안적 문제)

 

 

 

 

 

 

reference : https://post.naver.com/viewer/postView.nhn?volumeNo=27046347&memberNo=2521903

 

 

 

 

긴글 읽어 주셔서 감사합니다.

더 궁금하신 사항은 댓글로 문의해주시면 빠르게 답변드리겠습니다.

 

댓글