오늘은 면접 대비로 지난 프로젝트 정리를 하다가 명확하지 않은 내용에 대해 추가적으로 공부를 했다.
서버가 처리해야 될 요청(Load)을 여러 서버로 나누어(Balancing) 처리하는 것.
리소스 풀 전체에 네트워크 트래픽을 균등하게 배포해 한 대의 서버로 부하가 집중되지 않게 해준다.
: 고정된 규칙을 따르며 현재 서버 상태와 무관하다.
- 라운드 로빈 방식
클라이언트로부터 받은 요청을 순서대로 할당하는 방식. 서버 성능이 동일하고 처리 시간이 짧으면 균등하게 분산이 이루어진다.- 가중 라운드 로빈 방식
각 서버마다 우선순위나 가중치를 부여해 지정한 정수 값 만큼 할당해 분산처리한다.- IP 해시 방식
클라이언트의 IP주소를 특정 서버로 매핑해서 요청을 처리한다. 이 방식은 클라이언트가 항상 동일한 서버로 연결된다.
: 트래픽을 나누기 전에 서버의 현재 상태를 검사한다.
- 최소 연결 방식
요청이 들어온 시점에 가장 적은 연결 상태인 서버에 우선적으로 트래픽을 배분한다.
서버에 분배된 트래픽들이 일정하지 않은 경우에 사용한다.- 가중 최소 연결 방식
최소 연결 방식에 각 서버별로 다른 가중치를 적용해 할당- 최소 응답 시간 방식 (최소 리스폰타임)
서버의 현재 연결 상태와 응답시간(요청을 보내고 최초 응답을 받을 때까지 걸리는 시간)을 고려해 트래픽을 배분한다. 가장 연결이 적고 응답시간이 짧은 서버에 배분한다.- 리소스 기반 방식
트래픽 분배 전에 서버 부하를 분석해 해당 서버에 충분히 여유 리소스가 있는지 먼저 확인하고 배분한다.
L4 로드밸런서와 L7 로드밸런서가 가장 많이 활용된다.
L4 전송계층에서 TCP/UDP 포트 정보를 바탕으로 로드밸런싱을 수행한다.
ex) http://naver.com은 1번서버, https://naver.com 은 2번서버 처럼 포트번호에 따라 분배
데이터 안을 들여다 보지 않고 패킷레벨에서 로드를 분산하기 때문에 속도가 빠르고 효율이 좋다. -> 반대로 데이터를 모르기때문에 섬세한 라우팅이 불가능하다.
데이터 내용을 복호화할 필요가 없어 안전하다.
L7 로드밸런서보다 가격이 저렴하다.
클라이언트의 IP가 수시로 바뀌면 연속적인 서비스를 제공하기 어렵다.
L7 응용(어플리케이션)계층에서 TCP/UDP에 추가로 URI, 파일명, 쿠키정보등을 바탕으로 로드밸런싱을 수행한다.
ex) www.naver.com/finance 는 1번서버 www.naver.com/webtoon은 2번서버
HTTP/HTTPS 프로토콜의 헤더를 보고 적절한 서버로 분배한다.
상위계층에서 로드를 분산하기 때문에 섬세한 라우팅이 가능하다.
캐싱기능을 제공한다.
비정상적인 트래픽을 사전에 필터링할 수 있어 안정성이 높다.
패킷의 내용을 복호화해야돼서 비용이 더 높다.
클라이언트가 로드밸런서와 인증서를 공유하기 때문에 로드밸런서를 통해 클라이언트의 데이터에 접근하는 공격을 받을 수 있어 보안상의 위험성이 존재한다.