Node.js

로드밸런싱, 로드밸런서, 네트워크 계층

이경찬 :) 2024. 1. 12. 15:27

로드 밸런싱?

컴퓨터 네트워크 기술의 일종으로 여러 중앙처리장치 혹은 저장장치와 같은 컴퓨터 자원들에게 트래픽을 분산하는 것을 의미합니다.

기존의 싱글서버

 

로드 밸런싱을 사용하지 않으면 위와같이 사용자의 트래픽을 하나의 서버에서 일을 처리해야 합니다.

 

로드밸런싱 사용

 

위그림과 같이 로드밸런싱을 사용하여서 사용자의 트래픽을 분산시켜줍니다.

사용자의 트래픽을 분산 시키는 로드밸런싱에의해 사용자는 더욱 더 좋은 반응성있는 기능을 제공을 받을 수 있습니다.

현대 사회에서는 일상자체가 전자트래픽으로 이루어진다고 볼 수 있는데요 이런 많은 트래픽들의 부하를 감당하기 위해 로드밸런싱을 사용합니다.

 

네트워크 계층

로드 밸런싱은 네트워킹 스택의 여러 계층에서 작동하므로 로드 밸런싱을 연구할 때 네트워크 계층을 이해하는 것이 중요합니다.

 

OSI 7 Layers

 

OSI 7 계층은 정보통신업체 사이의 장비 호환성을 위해서 1984년 국제표준화기구에서 발표한 표준 프로토콜 입니다.

하위계층으로 갈수록 하드웨어에 가까워지고, 상위계층으로 갈수록 소프트웨어에 더 가깝습니다. 1계층부터 4계층까지를 하위계층, 5계층부터 7계층까지를 상위계층으로 분류하고, 상위계층은 하위계층의 기능을 이어받아 사용합니다.

 

[L1] 물리 계층

 

- 시스템의 물리적 전기적 표현을 나타내는 층위입니다. 케이블 종류, 무선 주파수 링크, 핀, 전압 등의 물리적인 요건을 의미합니다. 라우터나 스위치의 전원이 켜져있는지, 케이블이 제대로 연결되어 있는지 여부 등에 모두 1계층인 물리 계층에 해당됩니다.

 

[L2] 데이터 링크 계층

 

- 데이터 링크 계층은 직접적으로 연결된 두 개의 노드 사이에 데이터 전송을 가능하게 하고, 물리 계층에서 발생한 오류를 수정하기도 합니다. 또한 대부분의 스위치는 바로 2계층인 데이터 링크 계층에서 작동합니다.

 

[L3] 네트워크 계층

 

- 네트워크의 핵심인 라우팅(데이터가 가야할 길을 찾는 기능)의 대부분의 3계층인 네트워크 계층에서 작동합니다. 이 계층은 여러 대의 라우터들을 바탕으로 데이터를 패킷 단위로 잘게 쪼개어 전송하는 층위에 해당합니다. 데이터가 전송될 수 있는 수 많은 경우의 수 중 가장 효율적인 라우팅의 방법을 찾는 것 또한 이 단계에서 가능해집니다.

 

[L4] 전송 계층

 

- 전송 계층은 보내고자 하는 데이터의 용량과, 속도, 목적지를 처리합니다. 전송 계층에 가장 대표적인 것은 전송 제어 프로토콜(TCP)입니다. TCP는 인터넷 프로토콜(IP) 위에 구축되기 때문에 TCP/IP로 알려져 있습니다.

 

[L5] 세션 계층

 

- 5계층에서 실제 네트워크 연결이 이뤄집니다. 두 대의 기기가 '대화'하기 위해서는 하나의 '세션'이 열려야만 합니다. 세션 계층에서는 프로세스간의 통신을 제어하고, 통신과정이 진행될 때 동기화를 유지하는 역할을 합니다.

 

[L6] 표현 계층

 

- 응용프로그램 형식을 네트워크 형식으로 변환하거나 그 반대의 경우가 일어나는 계층이 표현 계층입니다. 6계층은 응용프로그램 혹은 네트워크를 위해 데이터를 '표현'하는 계층에 해당합니다. 대표적인 예로 데이터를 안전하게 주고 받기 위해 암호화하고 복호화 하는 과정이 필요한데 이러한 과정이 바로 표현 계층인 6계층에서 이루어집니다.

 

[L7] 응용 계층

 

- 마지막 응용 계층은 사용자가 네트워크에 접근할 수 있도록 인터페이스를 지공하는 계층입니다. 사용자에게 가장 직접적으로 보이는 부분이 바로 이 응용 계층에 해당하는 것입니다. 구글의 크롬과 같은 브라우저나 스카이프, 아웃룩 등의 응용 프로그램이 이 응용 계층에서 동작합니다.

 

아래 그림은 각 계층에 해당하는 대표적인 프로토콜 입니다.

 

계층별 대표적인 프로토콜

그럼 어떻게 사용자 트래픽을 분산시켜주나요?

 

로드 밸런서의 기본 기능

로드밸런서는 Health Check, Tunneling, Nat, DSR의 기능이 존재하여 로드밸런싱을 가능하게 합니다.

지금부터 위의 기능들을 자세하게 알아보겠습니다.

 

1. Health Check(상태 확인)

- 서버들에 대한 주기적인 Health Check를 통해 서버들의 장애 여부를 판단하여, 정상 동작 중인 서버로만 트래픽을 보냅니다.

- L3 체크 : ICMP를 이용하여 서버의 IP 주소가 통신 가능한 상태인지를 확인합니다.

- L4 체크: TCP는 3 Way-Handshaking(전송 - 확인/전송 - 확인)를 기반으로 통신하는데, 이러한 TCP의 특성을 바탕으로 각 포트 상태를 체크하는 방식입니다.

-L7 체크: 어플리케이션 계층에서 체크를 수행합니다. 실제 웹페이지에 통신을 시도하여 이상 유무를 파악합니다.

 

2. Tunneling (터널링)

- 데이터 스트림을 인터넷 상에서 가상의 파이프를 통해 전달시키는 기술입니다. 패킷 내에 터널링할 대상을 캡슐화시켜 목적지까지 전송합니다.

- 연결된 상호 간에만 캡슐화된 패킷을 구별해 캡슐화를 해제하게 합니다.

 

터널링을 하는 이유?

더보기

터널링의 개념은 여러 가지 이유로 로드 밸런싱에 사용되며 인터넷의 가상 파이프를 통해 데이터 스트림을 효율적으로 전송하는 메커니즘을 제공합니다. 부하 분산에 터널링을 사용하는 몇 가지 주요 이유는 다음과 같습니다.

  1. 향상된 보안:
    • 터널링에는 패킷 내에 데이터를 캡슐화하여 추가 보안 계층을 제공하는 경우가 많습니다. 데이터를 캡슐화함으로써 전송 중 외부 위협과 무단 액세스에 덜 취약해집니다. 이는 로드 밸런싱된 환경에서 사용자 자격 증명이나 금융 데이터와 같은 민감한 정보를 전송할 때 특히 중요합니다.
  2. 다양한 프로토콜 지원:
    • 로드 밸런싱 시스템은 서로 다른 네트워크 프로토콜을 사용하는 서버 간에 트래픽을 분산해야 할 수도 있습니다. 터널링을 사용하면 서버에서 사용하는 특정 프로토콜에 관계없이 데이터 스트림을 캡슐화할 수 있습니다. 이를 통해 로드 밸런서가 트래픽을 효율적으로 관리하고 다양한 백엔드 서버에 분산할 수 있습니다.
  3. 네트워크 분할 및 격리:
    • 터널링을 사용하면 특정 유형의 트래픽에 대한 가상 파이프를 생성하여 네트워크 분할이 가능합니다. 이러한 세분화는 다양한 유형의 데이터 또는 서비스를 격리하고 간섭을 방지하며 네트워크의 전반적인 보안과 효율성을 향상시키는 데 도움이 됩니다.
  4. 네트워크 전반에 걸친 부하 분산:
    • 서버가 서로 다른 지리적 위치나 네트워크에 있는 로드 밸런싱 시나리오에서 터널링을 사용하면 인터넷을 통해 가상 연결을 생성할 수 있습니다. 이렇게 하면 물리적으로 분산되어 있는 경우에도 서버 간에 트래픽을 효율적으로 분산할 수 있습니다.
  5. 라우팅 효율성을 위한 캡슐화:
    • 터널링은 패킷 내에 데이터를 캡슐화하여 보다 효율적인 라우팅을 허용합니다. 이는 데이터가 다양한 네트워크 경로를 통과해야 하는 로드 밸런싱에서 특히 중요합니다. 캡슐화는 캡슐화된 패킷을 명확하게 구분하고 로드 밸런싱 인프라를 통해 패킷을 최적으로 라우팅하는 데 도움이 됩니다.
  6. 간소화된 관리 및 모니터링:
    • 터널에 데이터를 캡슐화하면 네트워크 트래픽 관리 및 모니터링이 단순화됩니다. 이를 통해 특정 유형의 트래픽을 더 쉽게 식별하고 추적할 수 있으므로 로드 밸런싱 시스템이 미리 정의된 규칙에 따라 트래픽을 더 쉽게 분석하고 배포할 수 있습니다.
  7. 유연성 및 상호 운용성:
    • 터널링은 로드 밸런싱 설정에 유연성과 상호 운용성을 제공합니다. 특정 요구 사항에 따라 다양한 유형의 캡슐화 프로토콜을 사용할 수 있으며 이러한 유연성을 통해 로드 밸런서는 다양한 네트워킹 기술 및 장치와 함께 작동할 수 있습니다.

요약하면, 터널링은 보안을 강화하고, 다양한 프로토콜을 지원하고, 네트워크 전반에 걸쳐 효율적인 트래픽 분산을 가능하게 하고, 다양한 네트워킹 환경과 유연하고 상호 운용 가능한 방식으로 데이터 스트림을 캡슐화하고 관리하는 메커니즘을 제공하기 때문에 로드 밸런싱에서 중요한 개념입니다.

3. NAT (Network Address Translation)

 

- 내부 네트워크에서 사용하는 사설 IP 주소와 로드 밸런서 외부의 공인 IP 주소 간의 변환 역할.

- 로드밸런싱 관점에서는 여러 개의 호스트가 하나의 공인 IP 주소(VLAN or VIP)를 통해 접속하는 것이 주 목적입니다.

- SNAT ( Source Network Address Translation) : 내부에서 외부로 트래픽이 나가는 경우.

내부 사설 IP 주소 -> 외부 공인 IP주소로 변환

- DNAT (Destination Network Address Translation) : 외부에서 내부로 트래픽이 들어오는 경우.

외부 공인 IP 주소 -> 내부 사설 IP 주소로 변환

 

4. DSR (Destination Network Address Translation)

 

-  서버에서 클라이언트로 트래픽이 되돌아가는 경우, 목적지를 클라이언트로 설정한 다음, 네트워크 장비나 로드밸런서를 거치지 않고 바로 클라이언트를 찾아가는 방식

- 이 기능을 통해 로드밸런서의 부하는 줄려줄 수 있음

 

로드밸런싱 알고리즘

로드밸런스가 어떻게 트래픽을 서버에 부하하는 방법을 알아보겠습니다.

 

라운드 로빈 방식

- 서버로 들어온 요청을 순서대로 돌아가며 배정하는 방식입니다.

- 클라이언트의 요청을 순서대로 분배하기 때문에 서버들이 동일한 스펙을 갖고 있고, 서버와의 연결(세션)이 오래 지속되지 않는 경우에 활용하기 적합합니다.

 

가중 라운드로빈 방식

- 각각의 서버마다 가중치를 매기고 가중치가 높은 서버에 클라이언트 요청을 우선적으로 배분합니다.

- 주로 서버의 트래픽 처리 능력이 상이한 경우에 사용되는 로드밸런싱 방식입니다.

 

ex) 예를들어서 서버 A 의 가중치가 : 6 / 서버 Bㅇ릐 가중치가: 2 이면

=> A 서버에 6만큼의 요청, B 서버에 2만큼의 요청을 합니다.

 

IP 해시 방식

- 클라이언트의 IP 주소를 특정 서버로 매핑하여 요청을 처리하는 방식입니다.

- 사용자의 IP를 해싱하여 부하를 분산하기 때문에 사용자가 항상 동일한 서버로 연결되는 것을 보장합니다.

- 경로가 보장되며, 접속자 수가 많을수록 분산 및 효율이 뛰어납니다.

 

해시 방식의 이점

더보기

부하 분산을 위한 IP 해시 방법은 여러 가지 장점을 제공하므로 특정 시나리오에서 좋은 선택이 됩니다. IP 해시 방법이 효과적인 것으로 간주되는 몇 가지 이유는 다음과 같습니다.

  1. 세션 지속성:
    • IP 해시 방식은 해싱을 사용하여 클라이언트의 IP 주소를 특정 서버에 매핑함으로써 세션 지속성을 보장합니다. 이는 사용자가 서버에 연결을 설정하면 동일한 사용자의 후속 요청이 일관되게 동일한 서버로 전달된다는 것을 의미합니다. 이는 사용자가 여러 상호 작용에서 상태를 유지해야 하는 애플리케이션에 특히 유용합니다.
  2. 예측 가능한 라우팅:
    • IP 해시 방법은 예측 가능하고 결정적인 트래픽 라우팅 방법을 제공합니다. 각각의 고유한 클라이언트 IP 주소는 동일한 서버에 일관되게 매핑되어 안정적이고 예측 가능한 라우팅 메커니즘을 만듭니다. 이러한 예측 가능성으로 인해 문제 해결 및 유지 관리가 단순화됩니다.
  3. 서버 리소스의 효율적인 활용:
    • 각 사용자는 지속적으로 동일한 서버로 연결되므로 서버는 사용자별 데이터, 세션 또는 구성을 캐시할 수 있습니다. 이는 서버가 여러 서버에 걸쳐 사용자별 데이터를 복제하거나 동기화할 필요가 없기 때문에 서버 리소스를 보다 효율적으로 활용하고 성능을 향상시킬 수 있습니다.
  4. 부하 분산:
    • IP 해시 방법은 클라이언트 IP 주소의 해시를 기반으로 서버 전체에 로드를 분산합니다. 이렇게 하면 특히 연결된 사용자 수가 많은 경우 상대적으로 트래픽이 균등하게 분산될 수 있습니다. 로드 분산은 고유한 클라이언트 IP 주소 수에 비례하여 서버 리소스를 균형 있고 효율적으로 활용하는 데 기여합니다.
  5. 세션 중단 방지:
    • 각 사용자는 지속적으로 동일한 서버로 연결되므로 사용자의 요청이 다른 서버로 전송될 때 발생할 수 있는 세션 중단이나 데이터 불일치 가능성이 줄어듭니다. 이는 지속적인 사용자 세션에 의존하는 애플리케이션에 특히 중요합니다.
  6. 확장성:
    • IP 해시 방법은 연결된 사용자 수가 증가함에 따라 확장이 잘되는 경향이 있습니다. 사용자 수가 많을수록 배포 효율성이 향상되어 증가된 부하를 처리할 때 전반적인 확장성이 향상됩니다.
  7. 단순성과 구현 용이성:
    • IP 해시 방법을 구현하는 것은 비교적 간단합니다. 복잡한 알고리즘이나 정교한 로드 밸런싱 메커니즘이 필요하지 않습니다. 접근 방식이 단순하기 때문에 특히 보다 정교한 로드 밸런싱 설정이 필요하지 않은 시나리오에서 구현 및 관리가 더 쉬워집니다.

IP 해시 방법에는 장점이 있지만 모든 유형의 애플리케이션이나 환경에 적합하지 않을 수 있다는 점에 유의하는 것이 중요합니다. 로드 밸런싱 방법을 선택할 때는 애플리케이션의 특성, 사용자 행동, 클라이언트 IP 주소 분포 등을 고려해야 합니다.

 

최소 연결 방식

- Request가 들어온 시점에 가장 적은 세션상태를 보이는 서버에 우선적으로 트래픽을 할당합니다.

- 자주 세션이 길어지거나, 서버에 분배된 트래픽들이 일정하지 않은 경우에 적합합니다.

 

최소 응답시간 방식

- 서버의 현재 연결 상태와 응답시간을 모두 고려하여, 가장 짧은 응답 시간을 보내는 서버로 트래픽을 할당하는 방식입니다.

- 각 서버들의 가용한 리소스와 성능, 처리중인 데이터 양 등이 상이할 경우에 적합합니다.

 

대역폭 방식

- 서버들과의 대역폭을 고려하여 서버에 트래픽을 할당합니다.

 

이렇게 로드밸런싱을 왜 사용하고, 로드밸런싱의 기본 기능들을 알아보았습니다.

로드밸런싱을 하게 하는 로드밸런서에는 L4 로드밸런서와 L7 로드밸런서가 가장 많이 활용되는데, 그 이유는 L4 로드밸런서부터 포트 정보를 바탕으로 로드를 분산 가능하기 때문입니다. 즉, 한 대의 서버에 각기 다른 포트 번호를 부여하여 다수의 서버 프로그램을 운영하는 경우라면 최소 L4 로드밸런서 이상을 사용해야만 합니다.

 

특정 기능이 필요한 것이 아니라면, 초당 연결수, 동시 연결수, 처리용량을 성능 지표로 하여 L4 로드밸런서와 L7 로드밸런서 중 적절히 선택해야 합니다.

 

그렇다면 L4 로드밸런서와 L7 로드 밸런서를 알아보겠습니다.

 

L4 로드밸런서 VS L7 로드 밸런서

 

L4 로드 밸런서

4계층 -> 네트워크 계층(IP, IPX)이나, 3 계층 -> 전송계층(TCP, UDP)의 정보를 바탕으로 로드를 분산합니다.

즉, IP 주소, 포트번호, MAC 주소, 전송 프로토콜 등에 따라 트래픽을 분산하는 것이 가능합니다.

 

L4 로드 밸런싱

 

장점

 

- 패킷의 내용을 확인하지 않고 로드를 분산하므로 속도가 빠르고 효율이 높습니다

- 데이터의 내용을 복호화할 필요가 없기에 안전합니다.

- L7 로드밸런서보다 가격이 저렴합니다.

 

단점

 

- 패킷의 내용을 살펴볼 수 없으므로, 섬세한 라우팅이 불가능합니다.

- 사용자의 IP가 수시로 바뀌는 경우라면, 연속적인 서비스를 제공하기 어렵습니다.

 

L7 로드 밸런서

 

7계층 - 어플리케이션 계층 (HTTP, FTP, SMTP 등)에서 로드를 분산하기 때문에, HTTP 헤더, 쿠키 등과 같은 사용자 요청을 기준으로 특정 서버에 트래픽을 분산하는 것이 가능합니다.

 

L7 로드밸런싱

 

- L4 로드밸런서의 기능에 더하여, 패킷의 내용을 확인하고 그 내용에 따라 로드를 특정 서버에 분배하는 것이 가능합니다.

- 특정한 패턴을 지닌 바이러스를 감지해 네트워크 보호가 가능합니다.

- Dos/DDos 와 같은 비정상적인 트래픽 필터링이 가능합니다.

 

L7 로드밸런서 방식

 

- URL 스위칭 : 특정 하위 URL들은 특정 서버로 처리하는 방식입니다.

ex) '../leekc/image' => 이미지 처리 서버 / '.../leekc/video' => 동영상 처리 서버

 

- 컨텍스트 스위칭 방식 : 클라이언트가 요청한 특정 리소스에 대해 특정 서버로 연결 가능

 

ex) 이미지 파일에 대해서는 확장자를 참조하여, 별도로 구성된 이미지 파일이 있는 서버 or 스토리지로 직접 연결

 

- 쿠키 지속성 : 쿠키 정보를 바탕으로 클라이언트가 연결했었던 동일한 서버에 계속 할당해 주는 방식. 특히, 사설 네트워크에 있던 클라이언트의 IP 주소가 공인 IP 주소로 치환되어 전송하는 방식을 지원

 

ex) X-Forwarded-For 헤더에 클라이언트 IP 주소를 별도로 기입

 

장점

 

- 상위 계층에서 로드를 분산하기 때문에 훨씬 더 섬세한 라우팅 가능

- 캐싱 기능을 제공

- 비정상적인 트래픽을 사전에 필터링할 수 있어 서비스 안정성이 높습니다

 

단점

 

- L4 로드밸런서에 비해 비싸다

- 패킷의 내용을 복호화하여야 하므로 더 높은 비용을 지불해야 합니다.

- 클라이언트가 로드밸런서와 인증서를 공유해야 하기 때문에, 공격자가 로드밸런서를 통해 클라이언트의 데이터에 접근할 수 있는 보안상의 위험성이 존재합니다