CDN이란?

CDN은 Content Delivery Network 의 약어로서 전 세계에 전략적으로 분산되어있는 서버 네트워크입니다(지리적으로). CDN은 사용자가 리소스를 다운로드 할 수있는 대체 서버 노드를 제공하여 작동합니다. 이러한 노드는 전 세계에 퍼져 있기 때문에 지연 시간 감소로 인해 컨텐츠의 빠른 응답과 다운로드 시간을 제공함으로써 사용자에게 더 가까운 전략적 이점을 제공합니다.


예를 들어, 미국에 거주하는 사용자가 중국에 있는 컨텐츠를 가져온다고 하면 거리가 멀기 때문에 느리고 국제회선을 사용해서 비용 또한 비쌉니다.


CDN을 사용하면 미국의 CDN 서버에 복사를 하여 미국에 거주하고 있는 사용자의 요청을 미국 CDN으로 연결하기 때문에 비용, 속도를 보장할 수 있습니다.

만약 1대의 CDN서버에 장애가 나도 다른 CDN서버로 재연결 하기 때문에 안정성 또한 보장합니다.

목적

각 CDN 노드의 목적은 사이트의 정적 컨텐트 (이미지, CSS / JS 파일, 구성 요소)를 캐시하는 것입니다. 이것은 전 세계에 걸쳐 CDN 서버 노드에 복사를 제공합니다. 따라서 사용자가 사이트를 요청하면 사용자에게 가장 가까운 노드가 데이터를 전송하여 대기 시간을 줄이고 사이트 로딩을 빠르게 제공 할 수 있습니다.

이와 같이 CDN은 캐시기능이 존재하는데 프록시와 유사합니다. 해외에서 요청이 들어왔을 때, CDN 노드에 기존에 방문한 기록이 있을 경우, 해당 노드에서 바로 처리하여 보여줍니다. 이것을 가능하게 하는 기술을 GSLB라 합니다.

GSLB란?

Global server Load Balancing의 약어로 이름에 로드 밸런싱이 들어있어 로드 밸런스의 발전된 형태로 생각 할 수 있지마 DNS 서비스의 발전된 형태입니다. DNS 서비스는 도메인 이름을 IP주소로 변환하는 일을 하는 서비스입니다. 하나의 도메인 주소에 대해서 여러 개의 IP주소를 넘겨줄 수 있는데, 이 기능을 사용해서 가용성 구성과 로드 밸런싱 기능을 수행할 수 있습니다. 하지만 가용성과 로드 밸런싱이 본 기능은 아니라서, 이런 목적으로 사용하기에는 한계가 있다.

예를 들어, 클라이언트가 표준 DNS에 질의를 할 경우, DNS 서버는 로컬 데이터베이스의 IP 목록을 확인해서 그 중 하나를 반환 할 뿐, 네트워크 지연, 성능, 트래픽 유입, 서비스 실패 등은 전혀 고려하지 않습니다. 이런 한계에도 불구하고 인터넷 영역에서 로드 밸런싱을 할 수 있다는 장점이 있습니다. 지역을 뛰어넘는 넓은 영역에서의 로드밸런싱 및 가용성 구성을 위한 좋은 솔루션이 되는데 이를 위해서는 몇 가지 문제들을 해결해야 합니다. 이 문제를 해결한게 GSLB입니다.

DNS와 GSLB 차이점

재해 복구


DNS는 서버의 상태를 알 수 없어서 서비스를 실패하는 유저가 생길 수 있습니다.

GSLB는 서버의 상태를 모니터링 하고 실패한 서버의 IP는 응답에서 제외 하므로, 유저는 서비스를 계속 이용할 수 있습니다.

로드밸런싱




DNS는 Round Robin 방식을 사용하기 때문에 정교한 로드 밸런싱이 힘듭니다.

GSLB는 서버의 로드를 모니터링 하기 때문에 로드가 적은 서버의 IP를 반환하는 식으로 정교한 로드밸런싱을 할 수 있습니다.

레이턴시 기반 서비스


DNS는 Round Robin 방식을 사용하여 유저는 네트워크상에서 멀리 떨어진 위치의 서버로 연결 할 수도 있습니다.

GSLB는 각 지역별로 서버에 대한 레이턴시(latency) 정보를 가지고 있기 때문에 유저가 접근을 하면, 유저의 지역으로 부터 가까운(더 작은 레이턴시를 가지는) 서버로 연결을 합니다.

위치기반 서비스


DNS에서 유저는 Round Robin하게 서버로 연결됩니다.

GSLB는 유저의 지역정보를 기반으로, 해당 지역을 서비스하는 서버로 연결 할 수 있습니다.

GSLB 기술

health check

GSLB는 등록된 호스트들에 대해서 주기적으로 health check를 수행합니다. 호스트가 실패할 경우 DNS 응답에서 해당 호스트를 제거합니다. 실패한 호스트로의 접근을 막기 때문에 서버의 가용성을 높일 수 있습니다.


위 로직을 보면 사용자 요청이 들어올 때, health check를 하는 것처럼 보이지만 사실은 요청이 없어도 주기적으로 health check를 해 사용할 수 있는 서버목록을 갱신합니다.

TTL

DNS에서 권한(authority)을 가진 네임서버는 특정 레코드에 대해서 TTL을 설정할 수 있습니다. 캐시 네임서버는 TTL시간동안 캐시에 저장하고 클라이언트로 부터 요청이 오면, 캐시에 저장된 걸 반환합니다. 만약 TTL 값이 지나치게 길다면, GSLB의 상태정보가 제대로 동기화 되지 않고 TTL 값이 지나치게 짧으면, 네임서버에 가해지는 부담이 커집니다. GSLB와 같이 주소 변경에 민감한 서비스라면 부하를 감수하고라도 TTL 값을 짧게 가져가야 합니다.


네트워크 거리 & 지역

주기적으로 성능을 측정하고 그 결과를 저장합니다. DNS 질의가 오면, 지리적으로 가까운 서버를 반환하거나 네트워크 거리가 가까운 서버를 반환합니다. 지리적으로 가까운 서버의 경우 RTT(Round Trip Time)도 짧기 때문에, 네트워크 거리가 가까운 경우와 동일한 결과를 반환하는 경우가 많습니다.


GSLB는 Local name server와 Second Level name server 사이에 위치해 있습니다.

'' 카테고리의 다른 글

GraphQL이란?  (0) 2019.09.13
서버 사이드 렌더링(SSR), 클라이언트 사이드 렌더링(CSR)  (0) 2018.12.23
CDN이란  (0) 2018.12.22
SPA (Single Page Application)  (0) 2018.12.22
Phantom JS란?  (0) 2017.10.22
CORS  (1) 2017.03.17

+ Random Posts