네트워크, 안정성을 위한 기술

dobby·2024년 5월 30일
0
post-thumbnail

서비스를 사용하는 사용자가 증가할 수록 서버가 불안정해지고 부하가 가중된다.
사용자가 폭증하게 되면 서버가 뻗기에 서버를 안정적으로 관리할 방법을 찾아 적절하게 적용해야 한다.

가용성

'네트워크가 안정적이다', '서버가 불안정하다'와 같은 표현은 흔히 사용되는 표현이다.
안정성은 '특정 기능을 언제든 균일한 성능으로 수행할 수 있는 특성'으로 정의할 수 있다.

안정적인 웹 서버는 언제든지 응답 메시지를 제공할 수 있는 서버를 의미하며,
안정적인 라우터는 언제든지 라우팅 기능을 제공할 수 있는 라우터를 의미한다.

이러한 인정성의 정도를 나타내는 용어로 가용성, 고가용성이 있다.

가용성이란 '컴퓨터 시스템이 특정 기능을 실제로 수행할 수 있는 시간의 비율'을 의미한다.
즉, 전체 사용 시간 중에서 정상적인 사용 시간을 의미한다.
정상적인 사용 시간을 업타임, 정상적인 사용이 불가능한 시간을 다운타임으로 정의한다.

수식의 결과값이 크다는 것은 전체 사용 시간 중에서 대부분을 사용 가능하다는 말과도 같다.
이를 '가용성이 높다'라고 표현하며, 가용성이 높은 성질을 고가용성(High Availability, HA)이라고 한다.

이 수식을 백분율로 표기했을 때, 일반적으로 안정적이라고 평가받는 시스템은 99.999% 이상을 목표로 한다.

가용성1년간 다운타임한 달간 다운타임한 주간 다운타임
90%36.53일73.05시간16.8시간
99%3.65일7.31시간1.68시간
99.5%1.83일3.65시간50.4분
99.9%8.77시간48.83시분10.08분
99.95%4.38시간21.92분5.04분
99.99%52.56분4.38분1.01분
99.999%5.26분26.3초6.05초

가용성을 높이려면 다운타임을 낮춰야 한다.
하지만 과도한 트래픽, 소프트웨어상의 오류, 하드웨어 장애, 보안 공격 등 발생 원인이 너무 다양하기 때문에, 다운타임의 발생 원인을 모두 찾아 차단하기는 어렵다.

핵심은 [ 문제가 발생하지 않도록 하는 것이 아니라, 문제가 발생하더라도 계속 기능할 수 있도록 설계하는 것 ]이다.
다운타임을 낮추고 가용성을 높이기 위해서는 결함을 감내할 수 있도록 서비스나 인프라를 설계하는 것이 중요하다.


이중화

결함을 감내하여 가용성을 높이기 위한 가장 기본적이고 대표적인 방법으로, 예비를 마련하는 방법이다.

이중화할 수 있는 대상은 다양하다. 서버 컴퓨터, 스위치, 데이터베이스 등이 이중화할 수 있는 대상이다.

이중화할 수 있는 대상은 대부분이 문제가 발생할 경우 시스템 전체가 중단될 수 있는 대상이라는 공통점이 있다.
이를 단일 장애점(Single Point Of Failure, SPOF)이라고 한다.

SPOF는 최대한 없애는 것이 좋다.
즉, 가용성을 높이기 위해서는 SPOF를 이중화하는 것이 좋다.

이중화 구성

이중화 구성에는 액티브/스탠바이, 액티브/액티브 두 가지 방식이 있다.

액티브는 가동 상태를 의미하며, 스탠바이는 액티브의 백업으로서 대기하는 상태를 의미한다.
액티브/스탠바이는 한 시스템은 가동하고, 다른 시스템은 백업 용도로 대기 상태로 두는 이중화 구성 방식이고,
액티브/액티브는 두 시스템 모두를 가동 상태로 두는 구성 방식을 의미한다.

액티브/스탠바이

안전한 구성 방식이지만, 하나의 장비를 사용할 때에 비해 성능상의 큰 변화를 기대하기는 어렵다.
두 장비가 동시에 가동되지 않고 한 번에 하나만 가동되기 때문이다.

액티브/액티브

부하를 분산시킬수 있고, 두 시스템이 함께 가동되므로 성능상의 이점도 있다.
하지만, 한 시스템에 문제가 발생하면 순간적으로 다른 시스템에 부하가 급증할 수 있으며, 추가적인 문제가 발생할 수 있다.

이중화는 '무언가를 이중으로 두는 기술'이며 이를 확장해
'무언가를 여러 개 두는 기술'을 다중화라고 한다.

오늘날 많은 사용자가 이용하는 거의 모든 서비스는 하나 이상의 시스템이 다중화되어 구성된다.


로드 밸런싱

애플리케이션을 지원하는 리소스 풀 전체에 네트워크 트래픽을 균등하게 배포하는 방법이다.
최신 애플리케이션은 수백만 명의 사용자를 동시에 처리하고 정확한 텍스트, 비디오, 이미지 및 기타 데이터를 빠르고 안정적인 방식으로 각 사용자에게 반환해야 한다.
이렇게 많은 양의 트래픽을 처리하기 위해 대부분의 애플리케이션에는 데이터가 중복되는 리소스 서버가 많이 있다.
로드 밸런서는 사용자와 서버 그룹 사이에 위치하며 보이지 않는 촉진자 역할을 하여 모든 리소스 서버가 동일하게 사용되도록 하는 디바이스이다.

고가용성을 요구하는 호스트는 클라이언트보단 일반적으로 서버이다.
트래픽은 서버의 가용성에 큰 영향을 끼치는 요소이다.
서버에 과도한 트래픽이 몰리면 온갖 문제가 발생할 수 있다.

과도한 트래픽은 서버의 가용성을 떨어뜨린다.
이는 서버를 다중화해도 마찬가지이다.
따라서 서버를 다중화했더라도 트래픽을 고르게 분산해야 가용성이 높아진다.

트래픽의 고른 분배를 위해 사용되는 기술이 로드 밸런싱이다.
애플리케이션을 지원하는 리소스 풀 전체에 네트워크 트래픽을 균등하게 배포하는 방법이다.

  1. 사용자가 web.zigispace.net에 접속하기 위해 DNS에 질의한다.
  2. LDNS는 web.zigispace.net을 관리하는 NS를 찾기 위해 root부터 순차 질의한다.
  3. zigispace.net을 관리하는 NS로 web.zigispace.net에 대해 질의한다.
  4. DNS 서버는 GSLB로 web.zigispace.net에 대해 위임했으므로 GSLB 서버가 NS 서버라고 LDNS에 응답한다.
  5. LDNS는 다시 GSLB로 web.zigispace.net에 대해 질의한다.

GSLB는 단순히 주소 정보를 응답해주는 것이 아니라, 헬스체크를 통해 해당 IP가 정상적인 서비스가 가능한 상태인지 확인하고 서비스가 가능한 지역의 서버 IP로 응답한다.

만약 서울 데이터 센터의 서버에 문제가 발생하면, 서울 데이터 센터 서버 IP를 사용자에게 응답하지 않고 부산 데이터 센터의 IP 주소만 응답하게 된다.


로드밸런서 종류

로드 밸런서는 어떤 것을 기준으로 요청을 분산시키느냐에 따라 네 가지 종류로 나뉠 수 있다.

종류로드밸런싱 기준
L2데이터 전송 계층에서 Mac 주소를 바탕으로 로드 밸런싱
L3네트워크 계층에서 IP 주소를 바탕으로 로드 밸런싱
L4전송 계층에서 동작, IP 주소와 Port를 바탕으로 로드 밸런싱
L7응용 계층에서 동작, 클라이언트의 요청을 바탕으로 로드 밸런싱 (endpoint)

L7 로드 밸런서

ALB(애플리케이션 로드 밸런서) 라고도 하는 Layer7 로드 밸런서는 OSI 모델의 애플리케이션 계층에서 작동한다.
L7 로드 밸런서는 요청 내용에 따라 들어오는 트래픽을 분배하며, 세션 상태를 유지하거나 컨텐츠 기반 라우팅이 필요한 복잡한 애플리케이션에 유용할 수 있다.
또한 SSL/TLS Termination과 같은 고급 기능을 제공할 수도 있다.


로드밸런서는 일반적으로 이중화나 다중화된 서버와 클라이언트 사이에 위치한다.
클라이언트들은 로드 밸런서에 요청을 보내고, 로드 밸런서는 해당 요청을 각 서버에 균등하게 분배한다.

부하가 균등하게 분산되도록 부하 대상을 선택하는 방법을 '로드 밸런싱 알고리즘'이라 부른다.

로드 밸런싱 알고리즘

부하 분산이란?
둘 이상의 서버 간에 트래픽을 분산하는 방식이다.

무작위 DNS 부하 분산 기술

라운드 로빈 알고리즘:
로드 밸런서가 들어오는 요청을 각 서버에 번갈아가며 보낸다.
이는 각 서버의 성능이 동일하고, 요청 처리 시간이 짧은 애플리케이션의 경우에 균등하게 분산할 수 있다는 장점이 있다.

스마트 부하 분산 기술

Anycast 라우팅:
부분적으로 클라이언트와 서버간의 가장 빠른 이동 시간을 기반으로 서버를 선택한다.

최소 연결 방법(알고리즘)

로드밸런서가 각 서버의 현재 연결 수를 추적한다.
요청이 들어오면 활성 연결이 가장 적은 서버, 즉 현재 연결 수가 가장 적은 서버로 요청을 보낸다.
동적인 분산 알고리즘으로, 각 서버에 대한 현재 연결 수를 동적으로 카운트할 수 있고, 이를 통해 서버 부하를 분산시킬 수 있다.


헬스체크

다중화된 서버 환경에서 어떤 서버에 문제가 생긴다면 다른 서버들이 이를 빠르게 감지할 수 있어야 한다.
현재 문제가 있는 서버는 없는지, 현재 요청에 대해 올바른 응답을 할 수 있는 상태인지를 주기적으로 검사하는 경우가 많다.
이를 헬스 체크(health check)라고 한다.

L7 로드 밸런서에 대해 설명해주세요
ALB(애플리케이션 로드 밸런서) 라고도 하는 Layer7 로드 밸런서는 OSI 모델의 애플리케이션 계층에서 작동합니다.
L7 로드 밸런서는 요청 내용에 따라 들어오는 트래픽을 분배하며, 세션 상태를 유지하거나 컨텐츠 기반 라우팅이 필요한 복잡한 애플리케이션에 유용할 수 있습니다.
또한 SSL/TLS Termination과 같은 고급 기능을 제공할 수도 있습니다.


GSLB(전역 서버 부하 분산)

인터넷 트래픽을 전 세계에 걸쳐 분산된 수 많은 연결된 서버에 배포하는 방식이다.
GSLB의 이점은 향상된 안정성, 대기 시간 감소 등이 있다.

글로벌 특정 지역에 집중되는 트래픽을 분산하는 DNS 기반의 로드밸런싱 기술이다.
DNS 서버는 서버 IP 주소를 매핑 시켜줄 때, 단순 라운드 로빈으로 매핑 시켜주지만, GSLB는 사용자의 IP 주소를 보고 위치기반으로 가장 응답성이 높고 정상 운영중인 서버로 매핑시켜줄 수 있다.

글로벌 특정 지역에 트래픽이 증가할 경우, DNS 기반으로 인접 지역으로 네트워크 트래픽을 자동 분산한다.
특정 서버에 장애가 발생할 경우에는 네트워크 트래픽을 정상 리소스로 로드 밸런싱함으로써 서비스가 안정적으로 지속될 수 있도록 한다.


NEXT. 네트워크 안정성을 위한 기술2


도서
혼자 공부하는 네트워크

profile
성장통을 겪고 있습니다.

0개의 댓글