GA(글로벌 가속기) 이해하기

GA(Global Accelerator) 개념

GA는 클라이언트가 “가속 IP 또는 CNAME”으로 접속하면, 트래픽을 가장 가까운 알리바바 클라우드 전송 네트워크의 접속 지점(Access Point/POP)으로 먼저 받아서, 그 뒤 알리바바 글로벌 전송 네트워크를 통해 백엔드(오리진)까지 전달해 주는 네트워크 가속 서비스입니다.

추가로 GA는 캐싱(CDN처럼 콘텐츠 저장) 기능은 없습니다.


구성요소(표준 Standard GA 기준)

GA에서 “가속이 실제로 동작”하려면 최소 아래 구성이 필요합니다.

  • Acceleration Area / Acceleration Region(가속 지역) “사용자가 어디서 접속하느냐(진입)”에 맞춰 설정하는 영역/리전입니다.
  • Accelerated IP Address Type(가속 IP 타입)
    • EIP 타입: 가속 리전별로 EIP가 붙는 방식
    • Anycast EIP 타입: 더 자동 근접 접속 성격 (가속 지역 지정 방식이 달라짐)
  • Listener(리스너): TCP/UDP/HTTP/HTTPS 수신 규칙(포트, 라우팅 등)
  • Endpoint Group(엔드포인트 그룹): 백엔드가 있는 “리전 단위 묶음”
  • Endpoint(엔드포인트): 실제 오리진(ECS/SLB/ALB/NLB/ENI/Custom IP/도메인 등)

참고: Basic GA는 “가속 IP로만 접속하는 단순 포인트-투-포인트” 성격이고, Standard는 Listener/Endpoint Group 등 구성이 더 풍부합니다.


트래픽 흐름(네가 이해한 흐름을 “정식 용어”로)

  • Client(예: 대한민국 사용자)
  • DNS: 내 도메인 → (CNAME 레코드) → GA가 제공한 ga-xxxx.aliyunga… 호스트명
  • 그 GA 호스트명은 DNS에서 **A 레코드(가속 IP들)**로 해석됨
  • 클라이언트는 가속 IP 중 하나로 접속 → 근접 POP/Access Point로 유입
  • POP에서 Listener 규칙 적용 → (알리바바 전송 네트워크) → Endpoint Group 리전으로 전달
  • Endpoint Group에서 오리진으로 연결 생성/전달 → Endpoint(오리진)

여기서 중요한 포인트 2개:

  1. 가속 IP는 “클라이언트가 접속하는 입구 IP”
  2. Endpoint Group 화면에 보이는 IP들은 “클라이언트용 IP”가 아니라 오리진으로 나갈 때 쓰는 IP 풀(아래 참고)

💡참고 사항

“가속 IP 2개”가 생기는 이유

Pay-as-you-go Standard GA에서 EIP 타입을 쓰면, 가속 리전(Acceleration Region)마다 accelerated IP(EIP)가 2개 할당되고 둘 다 동시에 트래픽을 받을 수 있게 설계되어(HA) 2개가 보이는 게 정상입니다.

https://www.alibabacloud.com/help/en/ga/user-guide/overview-1/

“Default Endpoint Group에 IP가 4개” 보이는 이유

Endpoint를 Endpoint Group에 추가하면 GA가 최소 4개의 “endpoint group IP address”를 할당할 수 있고, 콘솔에서 그 수를 확인할 수 있다고 명시되어 있습니다.

이 IP들은 주로:

  • 오리진 보안그룹/방화벽 allowlist 설계할 때 참고하거나
  • 오리진에서 “어떤 소스 IP로 들어오냐”를 확인할 때 의미가 있습니다.

(다만, 오리진 보안그룹이 이미 0.0.0.0/0 등으로 열려 있으면 따로 등록 안 해도 접속은 됩니다.)


설정 절차(콘솔 기준, Standard + Pay-as-you-go)

Step 1) Standard GA 인스턴스 생성

  • Billing: Pay-as-you-go
  • Accelerated IP Address Type 선택(EIP / Anycast EIP)
  • (EIP 타입이면) Acceleration Area/Region과 대역폭(최소값/범위 제약 있음) 설정

비용 구조는 Pay-as-you-go Standard 기준 instance fee + CU fee + data transfer fee로 안내됩니다.

Step 2) Listener 생성

  • Protocol(TCP/UDP/HTTP/HTTPS), Port 범위 지정
  • 포트 범위는 엔드포인트 수/포트 수에 따라 충분히 넓어야 생성이 됩니다(문서에 산식 예시 있음).
  • Port Mapping은 “포트 변환이 필요할 때만” 추가합니다.
    • 리스너 포트와 백엔드 포트가 같다면 보통 매핑 없이 그대로 포워딩되므로, “80→80” 같은 매핑은 의미가 없어 UI에서 막히는 경우가 많습니다.

Step 3) Endpoint Group 생성

  • Endpoint Group Region: 예) 싱가포르
  • (멀티 그룹이면) Traffic Distribution Ratio로 분배 가능
  • Health Check 설정(필요 시)

Step 4) Endpoint 추가

  • ECS / SLB / ALB / NLB / ENI / Custom IP / 도메인 등에서 선택
  • Weight로 분산/제외(0이면 제외)
  • 지원 형태는 API/가이드에 정리되어 있습니다.

Step 5) DNS 연결(도메인 붙이기)

  • 일반적으로 내 서비스 도메인(www 등) → CNAME → ga-xxxx.aliyunga… 로 설정합니다.
  • 그러면 그 ga-xxxx 호스트명이 다시 A 레코드(가속 IP 2개 등)로 해석되어 접속이 이뤄집니다.

루트 도메인(@)은 DNS 사업자 정책상 CNAME이 안 되는 경우가 있어, 그땐 ALIAS/ANAME 또는 A 레코드 방식 등으로 우회합니다(이 부분은 DNS 제공자 기능에 따라 달라요).


네트워크 속도 검증

cat > ga_vs_origin.sh <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
GA_HOST="${GA_HOST:-ga-bp1hs....aliyunga0017.com}" # GA CNAME 입력
ORIGIN_IP="${ORIGIN_IP:-47.253.X.X}" # origin server 입력
URL_PATH="${URL_PATH:-/}" # 예: /health
N="${N:-30}"
CONNECT_TIMEOUT="${CONNECT_TIMEOUT:-2}"
MAX_TIME="${MAX_TIME:-5}"
# URL_PATH normalize
[[ "$URL_PATH" == /* ]] || URL_PATH="/$URL_PATH"
GA_URL="<http://$>{GA_HOST}${URL_PATH}"
ORIGIN_URL="<http://$>{ORIGIN_IP}${URL_PATH}"
echo "GA_URL = $GA_URL"
echo "ORIGIN_URL = $ORIGIN_URL"
echo
FMT='connect=%{time_connect} ttfb=%{time_starttransfer} total=%{time_total}\\n'
run() {
local label="$1" url="$2" out="$3"
echo "== $label =="
: > "$out"
for ((i=1; i<=N; i++)); do
curl -sS -o /dev/null --no-keepalive -H 'Connection: close' --connect-timeout "$CONNECT_TIMEOUT" --max-time "$MAX_TIME" -w "$FMT" "${url}?t=${i}" >> "$out"
done
echo
}
stat_one() {
local file="$1" metric="$2"
awk -v m="$metric" '{for(i=1;i<=NF;i++){split($i,a,"="); if(a[1]==m) print a[2];}}' "$file" | sort -n | awk -v m="$metric" '
{a[NR]=$1}
END{
n=NR; if(n==0){print m": no data"; exit}
sum=0; for(i=1;i<=n;i++) sum+=a[i]
idx50=int(n*0.50+0.5); if(idx50<1) idx50=1; if(idx50>n) idx50=n
idx95=int(n*0.95+0.5); if(idx95<1) idx95=1; if(idx95>n) idx95=n
avg=sum/n; p50=a[idx50]; p95=a[idx95]; mn=a[1]; mx=a[n]
printf("%s n=%d avg=%.6fs(%.1fms) p50=%.6fs(%.1fms) p95=%.6fs(%.1fms) min=%.6fs max=%.6fs\\n",
m, n, avg, avg*1000, p50, p50*1000, p95, p95*1000, mn, mx)
}'
}
report() {
local label="$1" file="$2"
echo "---- $label summary ----"
stat_one "$file" connect
stat_one "$file" ttfb
stat_one "$file" total
echo
}
run "GA" "$GA_URL" ga.txt
run "ORIGIN" "$ORIGIN_URL" origin.txt
report "GA" ga.txt
report "ORIGIN" origin.txt
echo "Raw logs: ga.txt, origin.txt"
EOF
chmod +x ga_vs_origin.sh
bash ./ga_vs_origin.sh

댓글 남기기