![[네트워크 이론] 가용성, 이중화, 로드 밸런싱](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmaRgI%2FbtsNwauLGl4%2F86ep3OBiwBVOsbgRKog56K%2Fimg.png)
이글은 혼자 공부하는 네트워크(저자 : 강민철)의 책과 강의 내용을 개인적으로 정리하는 글임을 알립니다.
가용성
가용성이란 시스템이나 네트워크가 얼마나 안정적으로 기능을 수행할 수 있는지를 나타내는 개념이다. 흔히 ‘불안정하다’, ‘안정적이다’라는 표현으로 대체되지만, 명확한 정의로는 일정 수준의 성능을 꾸준히 유지하며 기능을 제공할 수 있는 특성을 의미한다.
가용성의 수준은 고가용성(high availability)이라는 개념으로 수치화할 수 있으며, 이는 전체 사용 시간 중 실제로 사용 가능한 시간의 비율을 말한다.
업타임을 전체 시간(업타임 + 다운타임)으로 나눈 값이 가용성이며, 일반적으로 이 수치가 높을수록 시스템이 안정적이라고 평가받는다.
- 업타임 : 정상적인 사용 시간
- 다운타임 : 정상적인 사용이 불가능한 시간
예를 들어 가용성 99.999%는 ‘5나인’이라고 불리며, 이는 연간 약 5.26분, 월 기준 약 26.3초만 장애가 발생하는 수준을 의미한다.
이처럼 가용성은 웹 서비스에서 매우 중요한 목표로, 가능한 높은 수치를 달성하는 것이 핵심이다.
가용성을 높이려면 다운 타임을 낮추어야 한다.
핵심은 문제가 발생하지 않도록 하는 것이 아니라, 문제가 발생하더라도 계속 기능할 수 있도록 설계하는 것이다.
문제가 발생하더라도 기능할 수 있는 능력을 결함 감내(fault tolerance)라 부른다.
즉, 가용성을 높이기 위해서는 결함을 감내할 수 있도록 서비스나 인프라를 설계하는 것이 중요하다.
이중화
이중화는 무언가를 이중으로 두는 기술로, 가용성을 높이기 위한 대표적인 방식이다.
이중화의 대상은 서버, 네트워크 장비, 데이터베이스, 프로그램 등 다양하며, 주로 문제가 발생했을 때 전체 시스템이 중단되는 위험을 줄이기 위해 적용된다.
이때 시스템 전체가 중단될 수 있는 단일 지점을 SPOF(Single Point Of Failure)라 하며, 이를 최소화하는 것이 중요하다.
이중화 방식에는 액티브/스탠바이와 액티브/액티브 두 가지가 있다.
- 액티브/스탠바이는 한 시스템이 가동되고 다른 하나는 대기 상태로 있다가, 문제가 발생하면 자동으로 대체되는 구조이며, 비교적 안전하지만 성능 이점은 크지 않다.
- 반면 액티브/액티브는 두 시스템 모두 가동되어 부하를 분산시키지만, 한쪽에 문제가 생길 경우 급격한 부하 전이가 발생할 수 있다.
이중화는 두 대의 시스템만으로 구성되는 것에 그치지 않고, 다수의 장비로도 확장 가능하다. 세 개 이상의 장비를 구성하면 ‘다중화’라고 하며, 이는 이중화보다 더 높은 안정성을 제공한다. 무언가를 여러 개 두는 구조는 그만큼 장애에 강한 설계를 가능하게 한다.
결론적으로, 가용성을 높이고 SPOF를 제거하기 위한 방안으로 이중화 또는 다중화를 도입하는 것이 일반적인 전략이다. 이러한 구조는 장애 발생 시 서비스 지속성과 복구 시간을 최소화하며, 고가용성을 달성하는 핵심 수단이 된다.
로드 밸런싱
로드 밸런싱
고가용성을 요구하는 시스템에서 서버를 다중화하더라도, 트래픽이 한 지점에 몰리면 문제가 발생할 수 있다.
트래픽은 특정 시점에 네트워크를 경유하는 데이터의 양을 의미하며, 일반적으로는 특정 노드를 경유한 패킷의 양으로 측정된다.
서버에 과도한 트래픽이 몰리면 CPU 발열, 메모리 부족, 응답 지연, 응답 누락 등 다양한 문제가 생겨 가용성이 저하된다.
이러한 문제를 해결하기 위해 트래픽 분산이 필요하며, 이는 단순한 서버 다중화로는 해결되지 않는다.
특정 서버에만 요청이 집중되면 해당 서버의 가용성이 떨어지고 병목 현상이 발생할 수 있기 때문에, 여러 서버에 고르게 트래픽을 분산해야 진정한 고가용성을 달성할 수 있다.
트래픽을 분산시키는 대표적인 기술은 로드 밸런싱(load balancing)이다.
이는 부하 분산이라는 뜻으로, 클라이언트로부터 들어오는 요청을 여러 서버에 균등하게 나누는 방식이다. 로드 밸런서는 하드웨어 네트워크 장비일 수도 있고, HAProxy, Envoy 같은 소프트웨어일 수도 있으며, Nginx 같은 웹 서버에도 내장된 기능으로 제공된다.
로드 밸런서는 일반적으로 이중화 또는 다중화된 서버와 클라이언트 사이에 위치한다. 클라이언트는 로드 밸런서에게 요청을 보내고, 로드 밸런서는 이를 적절한 서버에 분배함으로써 전체 시스템의 안정성과 성능을 동시에 높이는 핵심 장치로 작용한다.
헬스 체크
- 다중화된 서버 환경에서는 특정 서버에 문제가 발생했을 때 이를 빠르게 감지하는 것이 중요하다.
- 이를 위해 서버들이 주기적으로 현재 정상인지, 요청에 응답 가능한 상태인지 검사하며 이를 헬스 체크(health check)라 한다.
- 헬스 체크는 주로 로드 밸런서에 의해 수행되며, HTTP, ICMP 등의 프로토콜을 활용하여 서버 상태를 모니터링한다.
또한 로드 밸런서 주도의 헬스 체크 외에도 서버 간에 하트비트(heartbeat)라는 메시지를 주고받아 문제를 감지하는 방법도 있다. 하트비트는 서버가 주기적으로 메시지를 보내고, 상대 서버가 이를 수신하지 못할 경우 장애로 판단하는 방식이다. 이로 인해 시스템은 더욱 빠르게 장애를 감지하고 대응할 수 있다.
로드 밸런싱 알고리즘
로드 밸런서는 여러 서버 중 어떤 서버에 요청을 전달할지를 결정해야 하며, 이때 부하를 균등하게 분산하기 위한 선택 기준이 바로 로드 밸런싱 알고리즘이다. 알고리즘에 따라 요청을 분산하는 방식이 달라진다.
대표적인 알고리즘으로는 라운드 로빈 알고리즘과 최소 연결 알고리즘이 있다.
라운드 로빈은 서버를 순차적으로 돌아가며 요청을 전달하고, 최소 연결 알고리즘은 현재 연결 수가 가장 적은 서버에 우선적으로 부하를 전달하는 방식이다. 이 외에도 무작위 선택, 해시 기반 선택, 응답 시간 기반 선택 등의 방식도 존재한다.
서버마다 성능이 다른 경우에는 각 서버에 가중치를 부여한 알고리즘을 사용하는데, 이를 가중치 라운드 로빈 알고리즘과 가중치 최소 연결 알고리즘이라고 부른다. 이 방식은 가중치가 높은 서버에 더 많은 요청이 할당되도록 한다.
예를 들어 서버 1의 가중치가 5이고, 서버 2의 가중치가 1이라면, 클라이언트 요청이 분산될 때 서버 1이 서버 2보다 다섯 배 많은 요청을 처리하게 된다. 성능 차이가 있는 서버 환경에서는 이러한 가중치 기반 알고리즘이 부하 분산에 효과적으로 작용한다.
포워드 프록시와 리버스 프록시
초기 네트워크 학습에서는 클라이언트와 서버가 직접 통신하는 구조처럼 설명되지만, 실제로는 이들 사이에 다양한 중간 서버가 존재할 수 있다.
이때 최종적으로 자원을 생성해 응답을 주는 서버를 오리진 서버(origin server)라고 한다. 클라이언트와 오리진 서버 사이에는 여러 중간 서버가 개입될 수 있다.
대표적인 중간 서버 유형으로는 프록시(proxy)와 게이트웨이(gateway)가 있다.
- 프록시(포워드 프록시): 클라이언트가 직접 선택해 메시지를 전달하는 중개자로, 일반적으로 오리진 서버보다 클라이언트에 가까운 위치에 있다. 주로 캐시 저장, 암호화, 접근 제한 등 다양한 기능을 제공한다.
- 게이트웨이(리버스 프록시): 네트워크 외부와의 연결 지점에 위치하여 오리진 서버 역할을 수행한다. 게이트웨이는 수신된 요청을 적절히 변환하여 다른 서버로 전달하는 역할을 하며, 일반적으로 리버스 프록시로도 불린다. 게이트웨이는 로드 밸런서처럼도 동작할 수 있다.
두 개념을 비교하면, 프록시는 클라이언트 측에 더 가까이 위치하고, 게이트웨이는 오리진 서버 측에 더 가까이 위치한다.
프록시는 클라이언트가 선택한 메시지 전달 대리자로서 작동하며, 게이트웨이는 수신된 요청을 변환하여 다른 서버로 전달하는 중개자 역할을 한다.
다중화된 오리진 서버의 네트워크를 ‘오리진 서버들이 사는 대저택’에 비유한다면, 프록시는 클라이언트들을 대신해 대저택에 심부름을 가는 심부름꾼에 해당하고, 게이트웨이는 대저택을 지키는 경비에 비유할 수 있다.
포워드 프록시
- 클라이언트 쪽에서 선택하는 프록시이다.
- 클라이언트가 직접 서버에 접근하지 않고, 포워드 프록시에게 요청을 보낸다.
- 프록시는 그 요청을 대신 서버에 전달하고, 응답을 받아서 클라이언트에게 다시 전달한다.
- 즉, 클라이언트가 숨고, 프록시가 대신 나서는 구조이다.
예시
- 사내 컴퓨터에서 외부 웹사이트 접속 시, 프록시 서버를 통해 나가도록 설정하는 것
- 차단된 사이트에 우회 접속할 때 사용하는 VPN이나 프록시 프로그램
리버스 프록시
- 서버 쪽에서 운영하는 프록시이다.
- 클라이언트는 오리진 서버가 어딘지 모른 채, 리버스 프록시에게 요청을 보낸다.
- 리버스 프록시는 내부의 여러 오리진 서버 중 하나를 대신 선택해 요청을 전달하고, 응답을 받아 다시 클라이언트에게 전달한다.
- 즉, 서버가 숨고, 프록시가 앞에 나서는 구조이다.
예시
- 대형 웹사이트에서 Nginx나 Envoy 등을 이용해 로드 밸런싱 및 보안을 수행할 때 클라이언트는 http://www.example.com으로 요청하지만, 실제로는 내부의 여러 서버 중 하나로 요청이 전달됨
'네트워크 > 네트워크 이론' 카테고리의 다른 글
[네트워크 이론] 무선 네트워크 (0) | 2025.04.24 |
---|---|
[네트워크 이론] 암호화 방식 (0) | 2025.04.24 |
[네트워크 이론] 응용 계층 - HTTP (0) | 2025.04.23 |
[네트워크 이론] 응용 계층 - DNS와 자원 (0) | 2025.04.22 |
[네트워크 이론] 전송 계층 - TCP와 UDP (0) | 2025.04.22 |