[AWS] Global Accelerator
1. Global Accelerator 란?
AWS 는 전 세계에 리전이 구축되어있다. 만약 클라이언트가 먼 해외 리전에 구축된 서비스를 이용한다면 수많은 네트워크를 거쳐 데이터를 송수신하게 되어 지연시간이 길어진다. AWS 는 이러한 지연시간의 감소를 위해 AWS 내부에서 전용회선을 통한 네트워크를 구축해놓아 네트워크 경로를 최적화할 수 있으며, 이 기술을 Global Accelerator (이하 GA) 라고 한다.
1) Global Accelerator 동작 흐름
GA 생성시 두개의 정적 Anycast IP가 제공되고, 해당 IP는 AWS Edge Location에도 공개된다.
클라이언트가 IP 입력 시 가장 빠르게 접근할 수 있는 Edge Location으로 데이터가 전송되어져 AWS 내부 네트워크로 진입하여 GA에게 전달된다.
또한, Anycast IP는 설정한 AWS 서비스 엔드포인트들과 연결되어져 있다. EC2, EIP, ALB, NLB 와 연결 가능하며, 요청한 데이터에 대해 가장 빠르게 응답 가능한 서비스로 데이터가 전송되어진다.
AWS 내부 네트워크에서는 전용 회선으로 트래픽이 전송되어 속도가 매우 빠르다.
GA는 Health Check를 통해 지속적으로 연결된 엔드포인트들의 상태를 확인하여 Failover 환경을 구성한다.
2. Global Accelerator 환경 구성
1) 인프라 구성
구성할 인프라는 아래 그림과 같다.
웹서비스를 제공하는 회사가 시드니와 상파울루 AWS 리전에 서버를 구축해놓았다. 이 때, 시드니는 ALB로 로드밸런싱한다.
GA를 사용해 전 세계의 클라이언트가 가장 빠르게 응답받을 수 있는 서버로 트래픽을 전송한다.
-
GA를 제외한 인프라를 구성한다.
-
GA를 생성한다 (리전이 글로벌로 바뀐다).
80/TCP 리스너를 추가한다.
시드니와 상파울루 엔드포인트 그룹을 추가한다. Traffic dial은 엔드포인트 그룹에 대해 트래픽이 전달되는 퍼센티지(%) 이다.
시드니 엔드포인트 그룹에는 ALB를, 상파울루 엔드포인트 그룹에는 두개의 인스턴스를 추가한다.
Preserver client IP address 항목을 체크해제하면 엔드포인트에 전달되어지는 패킷의 출발지가 GA의 IP로 바뀐다.
Weight는 각 엔드포인트에 전달되어지는 트래픽의 비중이다. (자신의 Weight)/ (전체 Weight 합) 으로 계산된다.
이제 두 리전의 클라이언트에서 GA의 Anycast IP로 접근해본다.
# -----------Seoul-Client----------- #
$ for i in {1..100}; do curl -s -q 15.197.148.56 ; done | sort | uniq -c | sort -nr
51 This is Sydney-WEB1
49 This is Sydney-WEB2
# ---------------------------------- #
# ----------Virginia-Client----------#
$ for i in {1..100}; do curl -s -q 15.197.148.56 ; done | sort | uniq -c | sort -nr
58 This is Saopaulo-WEB2
42 This is Saopaulo-WEB1
# ---------------------------------- #
서울에서는 시드니 웹 서버가, 버지니아에서는 상파울로 웹 서버가 응답한다.
2) Traffic Dial, Weight 테스트
Traffic Dial 은 엔드포인트 그룹으로 향하는 트래픽의 비중을 조절한다.
현재는 두 엔드포인트 그룹 모두 100%로 되어있기 때문에 무조건 자기와 가까운 (응답이 빠른) 쪽으로 트래픽이 전달된다.
확인을 위해 시드니쪽의 Traffic Dial 을 50%로 설정하고 서울 클라이언트에서 테스트한다.
# -----------Seoul-Client----------- #
$ for i in {1..100}; do curl -s -q 15.197.148.56 ; done | sort | uniq -c | sort -nr
31 This is Sydney-WEB2
27 This is Sydney-WEB1
25 This is Saopaulo-WEB2
17 This is Saopaulo-WEB1
대략 절반정도의 트래픽은 시드니가 아닌 상파울로로 전달되어지는 것을 볼 수 있다.
Weight는 각 엔드포인트들로 향하는 트래픽의 가중치이다.
현재 상파울로의 두 엔드포인트들의 Weight는 128로 동일하다. 확인을 위해 WEB1의 Weight를 0으로 설정하고, 버지니아 클라이언트에서 테스트한다.
# ----------Virginia-Client----------#
$ for i in {1..100}; do curl -s -q 15.197.148.56 ; done | sort | uniq -c | sort -nr
100 This is Saopaulo-WEB2
모든 트래픽이 WEB2 로만 전달되어지는 것을 볼 수 있다.
3) Failover 테스트
상파울로의 두 인스턴스를 중지시키면, GA에서 두 인스턴스의 상태가 Unhealthy 로 변경된다.
버지니아 클라이언트에서 테스트한다.
# ----------Virginia-Client----------#
$ for i in {1..100}; do curl -s -q 15.197.148.56 ; done | sort | uniq -c | sort -nr
50 This is Sydney-WEB2
50 This is Sydney-WEB1
상파울로 엔드포인트가 Unhealthy하기 때문에 GA가 트래픽을 시드니로 전송했음을 알 수 있다.
다시 두 인스턴스를 가동하면 상파울로로 트래픽이 전송된다.
댓글남기기