본문 바로가기
IT/Applications

Apache Traffic Server(ATS)로 CDN 맛보기

by 촌초니 2022. 4. 23.

CDN (Content Delivery Network)은 정적 리소스를 서비스할때 지리적으로 가까운 곳에서 Contents를 서비스하고, 캐싱을 사용하여 실제 서버에 부하를 줄이고 딜리버리 속도도 올리는 서비스에 있어 중요한 기능이다.

 

여기에서는 Apache Traffic Server(ATS)를 이용하여 캐싱된 contents를 딜리버리하고 실제 웹서버에는 부하를 받지 않게 하는 기능을 설명하려한다.

ATS에는 여러가지 기능이 있지만 다 사용해보진 못했기에.. 이것만 기술함

 

목표 테스트 환경은 User -> ATS(:8080) -> HTTPD(:80) 이고, ATS에서 캐싱을 하여 추후에는 HTTPD로의 유입이 없이 ATS의 캐시로만 처리하는게 이번 테스트의 목표임

 

ATS설치 전에 오리진 웹서버로 사용할 apache 설치를 먼저 한다.

apache 설치

 

apache 홈디렉토리에 hello.html 파일을 만들고 서비스를 기동한다.

 

ATS 설치는 아래 공식사이트에서 쉽게 설명되어있다.

https://docs.trafficserver.apache.org/en/latest/getting-started/index.en.html#installing-from-distribution-packages

그런데... epel에 패키지가 없는듯..  설치가 안되서 직접 rpm을 다운받아 설치진행

 

ATS 설치

 

설치 후 캐싱 설정

  • 설치 위치는 /etc/trafficserver 이고,
  • 캐싱을 위해 설정해야할 파일
    • 기본 설정을 위한 records.config
    • 캐싱 설정을 위한 cache.config
    • 연결을 위한 remap.config
    • 캐싱 데이터 퍼지 테스트를 위한 ip_allow.config
    • 캐싱 파일 사이즈 조절 및 위치 설정을 위한 storage.config (optional)
    • 정상작동 확인을 위해 로깅설정을 위한 logging.config

record.config 에 아래 내용 수정 (2 -> 0)

records.config

cache.config 에 아래 내용 추가

cache.config

remap.config 내용 추가

remap.config

캐싱된 데이터를 PURGE할 수 있게 기본적으로 제공되는 ACL에는 127.0.0.1, ::1 만 allow되어있기 때문에 편한 테스트를 위해 해당 IP주소도 allow 해줌 (localhost로 해도 되지만 PURGE 명령어 수행시 소스IP가 localhost가 아닌 실제IP로 찍히기때문에 허용해주는게 좋다)

ip_allow.config

로그가 기본적으로 binary로 찍히기때문에 쉬운 확인을 위해 ascii 로 설정

logging.config

위 로그 설정 후에는 아래 커맨드로 로그 확인 가능

tail -f /var/log/trafficserver/access.log

굳이 로그설정을 하지 않았다면 아래의 커맨드로 로그 확인 가능

/opt/trafficserver/bin/traffic_logcat -f /var/log/trafficserver/squid.blog

 

테스트 결과

처음 호출 시 ATS로그에는 TCP_MISS가 찍히고 HTTPD로그에도 access log가 정상적으로 찍힌다.

그러나 두번째 호출에서는 ATS로그에 TCP_HIT 가 찍히고 HTTPD로그에는 아무것도 찍히지 않는다. 즉, ATS의 캐싱 데이터로 서비스가 된 것이고 오리진 서버인 HTTPD에는 유입은 되지 않았음을 확인할 수 있다.

테스트 결과 1

이 상태에서 한번 더 호출하게되면 ATS에서는 TCP_MEM_HIT가 찍히고 메모리에 있는 캐싱 데이터로 서비스를 하게 되고 디스크의 캐싱 데이터보다 빠른 서비스를 할 수 있다. 물론 사람이 체감은 못하지만.. 대량의 요청이 들어오게되면 아무래도 메모리가 빠르겠지.

테스트 결과 2

여기에서 추가로 PURGE를 하게되면 캐싱 데이터가 사라지고 이후부터 다시 오리진 서버인 HTTPD까지 호출이 되고 테스트 결과 1의 값과 동일한 결과를 얻게된다.

purge 테스트 결과

 

끝!