들어가기 앞서…
이렇게 세션에 관해서 열심히 쓰고 있었는데 말이죠… 생각보다 기본 개념 중에 모르는 게 많더라구요 …?
그래서 이해하는데도 정리하는데도 시간이 오래 걸렸어요..
그냥 정합성 해결법 3가지 블라블라 대충 글 올려도 되긴 하는데, 연구실에서 배운대로라면… 이해도 못했는데 막 쓴 것은 제 것이 아니기 때문에 고냥 찬찬히 step by step으로 기록을 해볼라 합니다..하하
데이터 정합성 문제 해결법3가지(Sticky Session, Session Clustering, Session Storage)는 커밍쑨!
💡세션 개념을 정리하다보니 가장 기본적으로 자주 등장하는 개념인 로드 밸런싱(Load Balancing).
어디서 많이 들어봤긴 했지만 막상 설명하자니, 잘 모르겠고 어려워보이진 않는가
그래서 세션이나 웹서버트래픽에 관련된 글에 들어가기 전, “로드 밸런싱”이 무엇인가에 대해 정리해보고자 한다.
현대 사회에서 인터넷 발달로 인해 데이터 통신이 활발해졌고 이에 따른 트래픽도 증가하고 있다. 인터넷 검색 뿐만 아니라 온라인 채팅방, SNS, 유튜브, 넷플리스, 모바일 게임, 다양한 애플리케이션 등 인터넷을 통하지 않은 것이 없다.
이에 따라 아무리 성능이 뛰어난 서버라도, 한 대의 서버로는 모든 트래픽을 감당하기 어려워졌다. 이에 기업들은 서버를 추가로 구비해 여러 대의 서버에 동일한 데이터를 저장해 수많은 트래픽을 효과적으로 분산하여 처리한다.
하지만 이때, 여러 대의 서버에 어떻게 일관성있게 응답할까? 누군가 여러 트래픽을 여러 서버로 분산시켜주지 않는다면, 여러 대의 서버를 가동시키더라도 한 서버에 모든 트래픽이 몰리는 최악의 상황이 발생할지도 모른다.
이를 위한 기술이 바로 로드 밸런싱이다.
🤔로드밸런싱이란?
서버가 처리해야 할 업무 혹은 요청(Load)을 여러 대의 서버로 나누어(Balancing) 처리하는 방법
- 이는 한 대의 서버로 부하가 집중되지 않도록 트래픽을 관리해 각각의 서버가 최적의 퍼포먼스를 보일 수 있도록 하기 위해서 등장하였다.
🔍로드 밸런싱을 사용하는 이유?
서비스 규모가 커질 수록 원활한 서비스 동작을 위해 아래 2가지 방식으로 트래픽에 대처할 수 있다.
- Scale-Up 방식 : 서버 자체의 성능 확장
- Scale-out방식 : 서버를 여러 대 운영
만약, Scale-out방식을 통해 트래픽을 처리한다면, 데이터를 일치시키기 위해서 여러 대의 서버로 트래픽을 균등하게 분산해주는 로드 밸런싱이 반드시 필요하다.
뿐만 아니라,
애플리케이션 서버와 클라이언트간의 트래픽을 제어하는 로드 밸런싱은 애플리케이션의 “가용성”, “확장성”, “보안” 및 “성능”이 향상되며, 서버 과부하를 방지한다.
Load balancers improve application availability and responsiveness and prevent server overload. Each load balancer sits between client devices and backend servers, receiving and then distributing incoming requests to any available server capable of fulfilling them. _netscaler
애플리케이션 가용성
- 애플리케이션 가동 중지 없이 애플리케이션 서버 유지 관리 또는 업그레이드 실행 가능
- 백업 사이트에 자동 재해 복구 제공
- 상태 확인한 후 가동 중지를 유발할 수 있는 문제 방지
서버가 장애가 발생하거나, 유지 관리로 인해서 애플리케이션 가동을 중지한 시간이 늘어날 경우, 방문자는 애플리케이션을 사용할 없게 될 수 없게 된다. 하지만 로드 밸런서는 서버 문제를 자동으로 감지하고 클라이언트 트래픽을 사용 가능한 서버로 리디렉션하여 시스템의 내결함성을 높인다.
(내결함성 : 시스템의 일부 구성 요소가 작동하지 않더라도 계속 작동할 수 있는 기능)
애플리케이션 확장성
- 한 서버에 대한 트래픽 병목 현상을 방지
- 필요한 경우 다른 서버를 추가하거나 제거할 수 있도록 애플리케이션 트래픽을 예측
- 안심하고 조정할 수 있도록 시스템에 중복성 추가
애플리케이션 보안
- 인터넷 애플리케이션에 또 다른 보안 계층을 추가할 수 있는 보안 기능이 있다. (특히, 분산 서비스 거부 공격 DDoS 방지)
- 트래픽 모니터링 및 악성 콘텐츠 차단
- 공격 트래픽을 여러 백엔드 서버로 자동으로 리디렉션하여 영향 최소화
- 추가 보안을 위해 네트워크 방화벽 그룹을 통해 트래픽 라운딩
애플리케이션 성능
- 응답시간을 늘리고, 네트워크 지연시간을 줄임으로써 애플리케이션 성능 향상
- 서버 간에 로드를 균등하게 배포하여 애플리케이션 성능 향상
- 클라이언트 요청을 지리적으로 더 가까운 서버로 리디렉션하여 지연 시간 단축
- 물리적 및 가상 컴퓨팅 리소스의 신뢰성 및 성능 보장시킴
👨🏫로드밸런싱 알고리즘 (⭐)
로드밸런서가 서로 다른 각각의 클라이언트 요청에 대해 가장 적합한 서버를 결정하기 위해선 규칙이 필요하다.
이를 로드 밸런싱 알고리즘이라고 한다.
로드 밸런싱 알고리즘은 크게 2가지 카테고리로 나뉜다.
- 정적 로드 밸런싱
- 동적 로드 밸런싱
각각의 로드 밸런싱 알고리즘에 대해 알아보도록 하겠다.
(1) 정적 로드 밸런싱
고정된 규칙을 따르며, 현재 서버 상태와 무관하다.
📌라운드 로빈 방식 (Round Robin Method)
- 서버에 들어온 요청을 순서대로 돌아가며 배정하는 방식이다.
- 활용 : 순서대로 돌아가며 배정해야 하기 때문에, 여러 대의 서버가 동일한 스펙을 갖고 있고, 서버와의 연결(세션)이 오래 지속되지 않는 경우에 적합
📌가중 기반 라운드 로빈 방식 (Weighted Round Robin Method)
- 우선순위 또는 용량에 따라 각 서버에 서로 다른 가중치를 할당한다.
- 가중치가 높은 서버에 클라이언트 요청을 우선적으로 배분한다.
- server A = 3, B = 2, C = 1의 가중치를 할당했다고 가정한다면 아래와 같은 그림으로 배분이 된다.
- e.g. 서버 A 가중치가 5이고, 서버 B의 가중치가 2라면, 로드 밸런서는 라운드로빈 방식으로 서버 A에 5개, 서버 B에 2개의 요청을 전달한다.
- 활용 : 주로 서버의 트래픽 처리 능력이 상이한 경우 사용
📌IP 해시 방식 (IP Hash Method)
- 클라이언트 IP 주소를 특정 서버로 매핑하여 요청을 처리하는 방식이다.
- 사용자의 IP를 해싱하여, 로드를 분배 ⇒ 사용자가 항상 동일한 서버로 연결되는 것을 보장한다.
- 해싱(Hashing): 임의의 길이를 지닌 데이터를 고정된 길이의 데이터로 매핑하는 것 또는 함수
- 활용 : 클라이언트를 특정 서버에 고정시키는 것과 같이 지속적으로 연결할 경우
(2) 동적 로드 밸런싱
트래픽을 배포하기 전에 서버의 현재 상태를 검사한다.
📌최소 연결 방식 (Least Connection Method)
- 라운드 로빈과 가중 라운드 로빈에서는 로드 밸런서가 각 서버의 현재 로드 연결을 고려하지 않는다.
- 만약 서버 A에서 클라이언트의 1, 2 와 서버 B에서 클라이언트의 3 요청은 연결이 끊기지 않았다. 그러나 클라이언트의 4,5, 6 요청은 이미 연결이 끊겼다. 이제 라운드 로빈 알고리즘에 따라 새로운 요청이 들어오면 서버 A, 그 다음 서버 B, 그리고 서버 C로 전달된다. 서버 A에 로드가 쌓이고 서버 A 리소스는 빠르게 소진될 것이다.
- 이때, 최소 연결 방식은 새로운 요청이 들어온 시점에 가장 적은 연결상태를 보이는 서버에 우선적으로 트래픽 배분하는 방식이다.
- 활용 : 자주 세션이 길어지거나, 서버에 분배된 트래픽들이 일정하지 않은 경우에 적합
📌최소 응답 시간 방식(Least Response Time Method)
- 서버의 연결 상태와 응답시간을 고려해 가장 응답시간이 빠른 서버에게 우선적으로 할당하는 방식
- 응답시간(Response Time): 서버에게 요청을 보내고 최초 응답을 받을 때까지 소요되는 시간
- 가장 적은 연결 상태와 가장 짧은 응답시간을 보이는 서버에 우선적으로 배분
⚙️로드밸런싱 작동과정
- 클라이언트 요청 → 로드 밸런서로 이동
- 로드 밸런서는 한 두 서버에 요청이 몰리고, 나머지가 유휴 상태가 되지 않도록 각 요청에 알맞은 서버에 균등하게 배포
🚛로드 밸런싱 유형 (⭐)
애플리케이션 로드 밸런싱
네트워크 로드 밸런싱
글로벌 서버 로드 밸런싱
DNS 로드 밸런싱
- 애플리케이션 로드 밸런싱
- HTTP, SSL세션 ID와 같은 요청 콘텐츠를 확인하여 트래픽을 리디렉션
- 네트워크 로드 밸런싱
- IP 주소 및 기타 네트워크 정보를 검사해 리디렉션
- 글로벌 서버 로드 밸런싱
- 지리적으로 분산되어 있는 여러 서버에서 실행
(ex. 여러 데이터 센터, 여러 국가, 전 세계의 타사 클라우드 제공업체 등) - 클라이언트와 지리적으로 더 가까운 서버에 트래픽을 리디렉션!
- 지리적으로 분산되어 있는 여러 서버에서 실행
- DNS 로드 밸런싱
- 도메인 네트워크 요청을 라우팅하도록 구성함
- 도메인 : 웹 사이트, 메일, 인쇄 서버, 인터넷을 통해 액세스할 수 있는 다른 서비스 등
애플리케이션 로드 밸런싱을 L7로드 밸런서로, 네트워크 로드 밸런싱을 L4 로드 밸런서라고 부르기도 한다. (이걸 이해 못해서 각각 다른 개념인 줄 알았다.ㅎㅎ)
이 4가지 중에서 부하 분산에는 L4로드밸런서와 L7 로드밸런서가 가장 많이 활용된다.
L4 로드밸런서부터 포트(Port) 정보를 바탕으로 로드를 분산하는 것이 가능하기 때문이다.
여기서 L4와 L7이란 무엇인가?
네트워크 통신 시스템은 OSI 7계층으로 나뉜다. 각 계층(Layer)이 L1, L2, L3 … L7에 해당한다. L4, L7은 각각 Layer 4(전송계층) 프로토콜과 Layer 7 (응용계층)의 프로토콜 헤더를 부하 분산에 이용하기 때문에 붙은 접두사이다. 즉, L4는 Layer 4인 전송계층(Transport Layer), L7은 Layer 7인 응용계층(Application Layer)을 의미한다.
→ 이전까지는 그냥 물리계층, 네트워크 계층 … 이런 식으로 알았는데 L로 줄여 쓸 수 있다는 것을 이제 알았다..ㅎ
상위 계층에서 사용되는 장비는 하위 계층의 장비가 갖고 있는 하위 계층의 장비가 갖고 있는 기능을 모두 가지고 있으며, 상위 계층으로 갈수록 더욱 정교한 로드밸런싱이 가능하다.
따라서 한 대의 서버에 각기 다른 포트 번호를 부여해서 다수의 서버 프로그램을 운영하는 경우라면 최소 L4 로드밸런서 이상을 사용해야 한다.
⚡L4 vs L7
L4(Layer 4) 로드밸런싱
- L4 로드밸런서는 네트워크 계층(IP, IPX)이나 전송계층(TCP,UDP)의 정보를 바탕으로 로드를 분산한다.
- IP주소나 포트번호, MAC주소, 전송 프로토콜에 따라 트래픽을 나눈다.
L7(Layer 7) 로드밸런싱
- 7계층(Layer 7)인 애플리케이션 계층(HTTP, FTP, SMTP)에서 로드를 분산하기 때문에 HTTP 헤더, 쿠키 등과 같은 사용자의 요청을 기준으로 특정 서버에 트래픽을 분산한다.
- 즉, 패킷의 내용을 확인하고 그 내용에 따라 로드를 특정 서버에 분배하는 것이 가능하다.
- 특정한 패턴을 지닌 바이러스를 감지해 네트워크를 보호할 수 있으며, DoS/DDoS와 같은 비정상적인 트래픽을 필터링할 수 있어 네트워크 보안 분야에서도 활용된다.
다음 글은 세션, 토큰, 쿠키에 관련한 개념을 정리하는 글로 가져오겠습니다!
📎References
- 로드 밸런싱이란 무엇인가요?(aws amazon), https://aws.amazon.com/ko/what-is/load-balancing/
- 로드 밸런싱에 대해 알아보자!(우아한 테크코스 - 3기_파피), https://tecoble.techcourse.co.kr/post/2021-11-07-load-balancing/
- 로드 밸런서(Load Balancer)의 개념과 특징(가비아), https://m.post.naver.com/viewer/postView.naver?volumeNo=27046347&memberNo=2521903
- 서버 부하 분산 쉽게 이해하기(네트워크엔지니어환영), https://aws-hyoh.tistory.com/entry/Server-Load-Balancing-쉽게-이해하기
- Types of Load Balancing Algorithms, https://iq.opengenus.org/load-balancing-algorithms/
'🗃️Backend' 카테고리의 다른 글
[대규모서비스] 대규모 트래픽 해결 (1) Scale Up & Scale out (4) | 2023.08.16 |
---|---|
[Spring] 0. About Spring + 1. 프로젝트 환경설정 (ing) (2) | 2023.07.25 |