bunny.net의 pricing zone을 보고난 단상

Bunny.net CDN에는 Cloudflare등을 비롯한 다른 CDN에서 찾아보기 힘든 기능이 있다. 바로 Pricing Zone 기능이다.

국가·대륙별로 네트워크 비용이 다른것은 많이 들어봤을 것이다. 한국 비용이 다른 국가에 비해서 지나치게 높다는 이야기를 들어서 더더욱 잘 알고 있을것이다. Bunny.net에서는 내가 원하는 대륙에서만 데이터를 쏠 수 있다. 굳이 네트워크 비용이 비싼 대륙에서 데이터를 쏠 필요는 없다고 주장한다.

Bunny.net의 CDN Pulling zone 설정. 필자도 아시아·유럽·미국만 켜놨다.

그렇다면, 이것은 어떻게 동작할까? 일단 가장 가까운 곳으로 연결하려면 Anycast가 필요하다. Anycast만으로 이 모든 경우의 수를 커버하기 위해서는 5! (= 5 * 4 * 3 * 2 * 1) 120개의 IP블록이 필요하다. 일반적으로 ISP에서는 /24 부터 BGP를 받아준다. /32를 BGP로 받아준다면 최대 2^32개의 라우팅 테이블이 생길 것이다. 공개 ASN이 2byte니까(asn < 65528), 라우팅 테이블을 관리하는데만 8GB가 필요하다. 하드웨어 스팩상으로도 어렵다.

사실 bunney.net은 anycast를 거의 사용하지 않는것으로 보인다. 대신 GeoDNS를 이용하는것 같다. 즉, DNS 서버의 IP 주소를 가지고 위치를 역산하는 방식을 주로 사용하는것 같다. 이것을 알 수 있는것이, Bunny.net의 nslookup 결과가 모두 Anycast가 적용되지 않은 단일 서버를 가르킨다.

Cloudflare의 경우에는 Anycast를 적극적으로 사용하는 것 같다.
그도 그럴것이, 그쪽은 상품군이 Free, Pro, Bussiness, Enterprise로 4개이다. /24 IP 블록이 4개만 있으면 충분히 구현 가능하다. 사실 Free하고 Pro하고 차이가 있는지도 모르겠고, Pro = Bussiness라고 한다면 많으면 2개만으로도 구현 가능한 것 같다.

예를 들어, Asia를 활성화 하고 한국(KT)에서 nslookup 실행시 한국 Vultr 리전의 IP가 나온다.

The Constant Company = Vultr 이다.

마찬가지로, 일본 DNS 서버을 통해 nslookup 실행시 일본 Edge가 표시된다.

일본·미국은 Datapacket(Datacamp)의 서버를 사용한다.

이 정책은 생각보다 잘 움직이는것 같다. 특히, 8.8.8.8이나 1.1.1.1 에서도 정확한 위치를 파악한다. 당연하게도 우리가 바라보는건 Anycast이지만, 해당 DNS 서버가 외부로 요청하는건 모두 서버 고유의 IP를 사용할 테니 문제가 없다.

이렇게 Scripted DNS (GeoDNS)를 사용하면 생각보다 정확하게 사용자 타겟팅이 될 것 같다. 이 정도로 사용자를 타겟팅 할 수 있는 DNS가 있다면 Anycast보다 더욱 정교한 리전 타겟팅이 가능할 것 같다. 이를 활용하면 다음과 같이 될 것이다.

  • 국내의 해외망이 부실한 통신사는 국내 서버 연결
  • 국내의 해외망이 괜찮은 통신사는 일본 서버로 연결 (datapacket등)
  • 해외는 anycast로 적절한 곳으로 라우팅 (LA, EU 등)

어디까지나 생각이다. 다만에 저번글에서 보듯, Anycast만으로는 깔끔하게 위치에 따른 라우팅이 어렵다. 그렇기에 GeoDNS까지 합쳐져야 완벽해 질 것이라 생각한다. IP 블록을 여러개 구해서 대륙별로 쪼개고, 해당 대륙 안에서만 Anycast를 실행하는 등의 추가적인 작업이 있어야 완벽한 지리 타게팅이 될 것 같다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

댓글을 작성하기 위해 아래의 숫자를 입력해 주세요. *Captcha loading…