Edge를 활용한 애플리케이션 성능 향상
만약 애플리케이션 엔드포인트를 인터넷에 직접 배치한다면 애플리케이션으로부터 멀리 있는 최종 사용자는 성능 관점에서 이상적이지 않은 경험을 할 수 있습니다. 여기서 성능 저하의 가장 큰 원인 중 하나는 최종 사용자로부터 애플리케이션까지의 먼 거리입니다.
예를 들어, aws 미국 버지니아 리전에 위치한 애플리케이션이 있고 싱가포르의 사용자가 해당 어플리케이션에 접근한다고 가정해보면 액세스하려는 싱가포르의 사용자는 먼저 인도로 라우팅 된 다음 이집트, 남아공, 스페인, 영국, 캐나다 등으로 라우팅 후 시카고에서 미국으로 진입하여 최종적으로 aws 미국 버지니아 리전에 도달할 수 있습니다. 우리 모두는 두 점 사이에 최단 거리가 직선이라는 것을 알고 있지만 불행히도 퍼블 릭 인터넷은 우리가 원하는 직선 경로를 거의 생성하지 않습니다. 성능을 향상시키려면 사용자가 있는 곳에서 애플리케이션까지 더 짧고 직선과 유사한 라인을 만들어야 합니다. 어떻게 해야 할까요 ?
우리는 이 문제를 해결할 수 있는 방법이 있습니다. 바로 aws 엣지 서비스를 활용하는 것입니다. 예를 들어 엣지 서비스 중 하나인 아마존 클라우드 프론트의 경우 최종 사용자의 위치와 가장 가까운 곳에서 콘텐츠를 캐시할 수 있습니다. 캐시는 웹 서비스를 가속화할 수 있는 아주 유용한 방법입니다.
엣지 로케이션에서의 캐싱은 이미지, 비디오, 자바스크립트 및 css 파일과 같은 정적 자산에 적합합니다. 그러나 오늘날 우리는 점점 늘어나고 있는 최종사용자별 보유한 동적 컨텐츠 요청 또한 고민해야 합니다. 프로필 페이지, 일부 API 전자상거래 카트 등과 같은 동적 요청은 캐시할 수 없습니다. 각 요청은 애플리케이션 서버에 도착해야 하며 이는 퍼블릭 인터넷을 가로지르는 긴 여정을 의미합니다. 여기서 좋은 소식은 클라우드 프론트가 콘텐츠를 캐시하는 단순한 cdn이 아니라는 것입니다.
클라우드 프론트는 엣지 로케이션을 aws 리전에 연결하는 aws의 글로벌 네트워크를 활용합니다. 이것은 일반적인 퍼블릭 인터넷을 경유하는 것보다 훨씬 빠르고 안정적인 성능을 얻을 수 있음을 의미합니다. 즉 캐싱을 할 수 없는 동적 컨텐츠의 경우에도 aws 글로벌 네트워크를 활용함으로써 컨텐츠 전송이 소요되는 시간을 크게 단축할 수 있습니다. 성능 개선뿐만 아니라 디도스 공격 방어 측면에서도 aws 엣지 서비스는 매우 좋은 대안이 될 수 있습니다.
전 세계적으로 퍼져있는 엣지 로케이션은 각각 수백 Gbps의 밴드리스 가용량을 제공하고 있습니다. 그리고 모든 패킷을 실시간으로 검사하여 악성 패킷으로 판단되면 애플리케이션으로 전달하지 않고 엣지 레벨에서 차단할 수 있는 환경을 제공합니다. 또한 Shield Advanced와 같은 엣지 서비스를 함께 구현하여 다양한 방식의 대규모 디도스 공격으로부터 더 높은 수준의 보호를 실현할 수 있습니다.
현재 엣지 로케이션에서 동작하는 서비스들은 다음과 같습니다.
Amazon CloudFront
AWS Global Accelerator
AWS WAF
AWS Shield
Amazon Route 53
CloudFront Functions
/Lambda@Edge
- CloudFront는 aws의 cdn 서비스로 http 및 https 프로토콜 기반의 트래픽을 가속합니다.
- Global Accelerator는 tcp/udp 기반의 트래픽까지 모두 가속할 수 있습니다. aws WAF는 다양한 웹 계층의 공격으로부터 애플리케이션을 보호합니다.
- Shield는 디도스 공격으로부터 애플리케이션을 보호합니다.
- Route 53은 aws의 DNS 서비스로 매우 높은 가용성을 기반으로 다양한 라우팅 정책을 제공합니다.
- CloudFront Functions, Lambda@Edge는 엣지 환경에서 사용할 수 있는 컴퓨팅 자원으로 다양한 비즈니스 로직을 애플리케이션으로부터 엣지로 오프로딩할 수 있습니다.
AWS Edge services로 어떻게 성능을 개선할 수 있는가 ?
Amazon CloudFront로 웹 성능 개선하기
정적 컨텐츠 (image, CSS, JS, videos)
- 콘텐츠를 사용자 가까이로 이동 (캐싱)
- 파일을 더 작게 만들기 (압축)
동적 컨텐츠 (profile names, ecommerce carts, APIs)
- AWS 글로벌 네트워크를 통한 가속화 (경로 최적화)
- 사용자와 가까운 곳에서 연결 종료(Edge에서 TCP/TLS 연결)
- 연결 시에 발생하는 프로토콜 레벨의 오버헤드 최적화
캐시가 가능한 정적 컨텐츠의 성능에서 가장 중요한 것은 바로 캐시 히트율을 높이는 것입니다. 캐시된 컨텐츠는 애플리케이션과의 통신으로 발생하는 추가 지연이 없기 때문에 가장 빠른 응답을 제공할 수 있기 때문입니다. 클라우드 프론트는 다층화된 캐시 계층을 제공하여 이를 실현합니다. 최종 사용자의 요청은 가장 먼저 엣지 로케이션으로 인입되며 캐시되어 있는 컨텐츠인 경우에는 바로 최종 사용자에게 응답합니다. 엣지 로케이션에서 캐시미스가 발생하는 경우 해당 요청은 바로 애플리케이션으로 전달되지 않으며 중간 캐시 계층인 리저널 엣지 캐시로 전달되어 한 번 더 캐시여부를 확인합니다.
Regional Edge에서도 캐시 미스가 발생한다면 애플리케이션으로 요청이 전달되게 됩니다. 캐시 히트율을 더욱 개선하기 위하여 클라우드 프론트에 오리진 쉴드를 추가적으로 고려할 수 있습니다. 클라우드 프론트의 오리진 쉴드는 중간 캐시 계층을 추가하여 캐시 히트율 측면에서 도움을 줄 수 있기 때문입니다.
클라우드 프론트의 캐시 서버 또한 내부적으로 각 역할별로 계층화되어 있습니다.