글

지구 반대편까지 300ms

외주로 MVP를 만들어 준 서비스가 하나 있다. 처음부터 전 세계 사용자를 받는 서비스였고, API 서버는 서울 리전에 한 대뿐이었다. 오픈한 지 얼마 안 됐는데 해외 가입자만 450명이 넘었다. 처음엔 Cloudflare에 DNS만 맡기고 프록시는 끈 회색 구름 상태로 쓰고 있었다.

해외에서 재 보니 미국은 600ms 안팎, 남미는 1초가 넘었다. 그 시간의 대부분이 데이터를 주고받기 전에 연결을 맺는 데 쓰이고 있었다. 사용자 가까운 엣지가 연결을 대신 받아 주면 줄어들 거라고 보고 프록시를 켰다. 주황 구름이다. 그런데 서울에서 서울 서버로 가는 요청까지 눈에 띄게 느려졌다. 다른 나라에서도 재 봤다. 369ms가 나오다가 2000ms가 나왔다. 어디서 들어오든 그냥 느린 웹사이트가 되어 있었다.

무료 프록시는 사용자를 가까운 엣지까지는 빨리 데려다준다. 문제는 엣지에서 서울 서버까지다. 그 구간은 그때그때 정해지는 길로 가고, 연결도 매번 새로 맺는다. 캐시가 안 되는 API는 요청마다 그 길을 다시 탄다.

Argo Smart Routing을 켰다. Cloudflare 망 안에서 덜 막히는 길을 골라 서버까지 가고, 엣지와 서버 사이 연결은 미리 열어 둔다. 다시 쟀다.

  1. 미국 200~340ms
  2. 유럽 280~410ms
  3. 남미 310~450ms
  4. 서울 37~45ms

해외는 대체로 200~400ms대로 모였다. 어디서 들어와도 쾌적한 웹사이트가 됐다.

빛으로 재 보면

이 숫자가 얼마나 좋은지는 빛의 속도로 따져 보면 보인다. 서울에서 상파울루까지는 직선으로 약 18,300km다. 빛은 진공에서 초속 30만km를 가지만 광섬유 안에서는 20만km쯤으로 느려진다. 케이블이 지구 표면을 따라 직선으로 깔려 있다고 쳐도 한 번 왕복에 183ms가 걸린다. 물리적으로 이보다 빠를 수는 없다.

프록시 없이 서버에 직접 붙으면 응답을 받기 전에 TCP 연결, TLS 핸드셰이크, 실제 요청까지 세 번을 왕복한다. 이론상 최소 549ms. 실제로 잰 값은 1초를 넘었다.

Argo를 켜면 핸드셰이크는 상파울루 근처 엣지와 나눈다. 엣지는 이미 열려 있는 연결로 서울까지 한 번만 왕복한다. 이론상 최소가 183ms로 내려간다. 실제로 잰 값은 310~450ms였다. 빛이 한 번 왕복하는 시간의 두 배 안쪽이다.

지구 반대편에서 보낸 요청이 그만큼 빨리 돌아온다. 서버를 한 대 더 두지도, 코드를 한 줄 고치지도 않았다. 대시보드에서 스위치 하나를 켰을 뿐이다.

X에 공유

댓글 0

← 글 목록으로