Azure CDN – DSA(Dynamic Site Acceleration) 동적 사이트 가속

CDN은 잘 변하지 않는 정적인(static) 컨텐츠를 사용자 가까운 캐싱서버에 캐싱해 놓고 사용자 요청이 있을 때 캐싱서버에서 컨텐츠를 가져가기 때문에 웹 사이트의 속도를 향상 시킬 수 있다. 정적인 컨텐츠는 이미지, 동영상, JavaScript, CSS 파일이다. 쇼핑카트 페이지 같은 동적인(Dynamic) 컨텐츠는 내용이 자꾸 변하기 때문에 전통적인 CDN의 도움을 받지 못한다. 하지만 지속적인 CDN의 기술 발전은 다양한 기술을 사용해서 동적인 컨텐츠도 빠르게 사용자에게 도달 하도록 돕고 있다. 그 중에 DSA(Dynamic Site Acceleration) 기능이 Azure CDN에 들어왔다.

Azure CDN은 Akamai와 Verizon CDN을 선택할 수 있다. 자세한 내용은 “Azure CDN 완전정복” 시리즈를 참조바란다.

DSA는 몇 가지 방법으로 동적 컨텐츠의 성능을 올려준다. 상세 내용은 문서 참조

  1. Route / network optimizations: 최적의 라우팅 경로를 BGP(경계 게이트웨이 프로토콜)를 통해서 찾아내서 가장 빠르고 안정적인 네트워크 경로(라우팅 경로)를 사용
  2. TCP optimization: TCP의 기본 행동중에 Slow Start를 제거,  TCP Connection을 영구적인 커넥션(persistent connection)으로 유지, TCP packet parameters 튜닝(Akamai only) 기술을 사용하여 TCP 를 최적화

    그림은 TCP가 처음 3way 핸드쉐이크이크러러커넥션을을맺고고느린 시작으로로컨텐츠를 전송하는 방법에에대한 설명이다.
  3. Resource prefetching (Akamai only): HTML 구문을 분석해서 이미지, CSS, Javascript 파일 같이 HTML에 포함된 리소스를 미리 캐싱해서 제공
  4. Adaptive Image Compression (Akamai only): 모바일과 같이 네트워크가 느려지는 상황에서는 고해상도 JPEG 파일이 아닌 작은 이미지를 보내주는 기술

DSA 가격

DSA의 가격이 정적인 컨텐츠에 대한 CDN 가격 보다 조금 비싸다.

실제 적용 테스트

테스트 해본 사이트는 Word Press 사이트인 본 블로그  사이트에 적용해봤다.

Azure 포탈에서 CDN 끝점을 만들때 DSA를 적용하려면 아래 그림처럼 “Optimized for” 옵션을 “Dynamic site acceleration” 으로 설정한다. Route/ network optimization에서 Probe로 사용할 URL을 지정할 때 10KB 크기의 지워지지 않는 적당한 컨텐츠가 없어서 샘플파일을 다운받아 사이트에 업로드 후 적용했다.

사이트에 실제로 적용할 때는 Azure CDN에 두 개의 끝점(End Point)를 만들어서 정적인 컨텐츠와 동적인 컨텐츠에 대한 CDN 적용을 다르게 하는게 효율적이다.  아래 그림은 ilseokoh.azureedge.net은 DSA로 설정된 CDN 끝점이고, ilseokohstatic.azureedge.net은 일반 CDN 설정이다. 두 개 모두 DNS 관리 사이트에서 CNAME을 등록하고 Azure Portal에서 custom domain 설정을 했다.

Word Press에서 Static Contents에만 General web delivery 타입의 끝점을 적용하는 플러그인이 많다. 그 중에서 CDN Enabler 라는 플러그인을 적용해서 wp-content, wp-include 디렉토리에 들어있는 컨텐츠는 static.ilseokoh.com으로 요청하도록 설정했다.

적용 후 실제 http://dsa.ilseokoh.com/ 로 접속을 해서 테스트를 해보면 동적 컨텐츠인 홈페이지 등은 DSA가 적용된 dsa.ilseokoh.com 에서 컨텐츠를 가져오고 이미지 같은 정적인 컨텐츠는 static.ilseokoh.com 에서 가져온다.

브라우저 캐싱을 꺼놓고 접속 해보니 체감 속도는 무척 빠르다. 실제 성능 측정을 객관적으로 할 자신은 없다.

테스트를 마치고 설정을 모두 삭제했기 때문에 현재는 본 블로그에 CDN이 적용되지 않는다. CDN까지 적용할 만한 블로그는 아니다 ^^