누워서 보는 웹 애플리케이션 성능 II – 다운 샘플링이 가져오는 왜곡 현상들

이전 글(누워서 보는 웹 애플리케이션 성능 – 평균과 분포)에서는 개별 응답시간을 평균 응답시간으로 표현할 경우 왜곡 현상이 발생되는 것을 다루었습니다. 간단히 말해 Y축의 데이터를 평균화 시키면서 나타나는 왜곡 현상입니니다. 이번 글에서는 샘플링 주기(X축의 데이터 왜곡 현상)가 가져 오는 문제점 및 와탭이 APM/SMS 서비스를 운영하면서 만난 유사한 문제들과 그 해결책을 공유하고자 합니다.

APM에서 발생하는 샘플링 문제 

N사의 APM을 사용하면서 고객들이 가지는 몇몇 고충들이 있었는데요…

  • 장애가 난 후 적게는 몇 분에서, 많게는 몇십 분이 지난 후에 장애를 인지하게 된다.
  • 성능에 대한 문제가 발생했음에도 불구하고 응답시간이 낮은 트랜잭션의 비율이 많으면  문제가 안 보인다.

실제 Quora에 올라온 글입니다.

newrelic issue

간단히 요약하면, ‘N사는 1분 평균의 데이터를 보여주기 때문에 최근 20초 동안 애플리케이션에 문제가 발생하더라도, 나머지 40초 간의 정상적인 트랜잭션으로 인해 데이터가 평균화 되면서 실제 문제를 못 보는 경우가 발생한다.’라는 것입니다.

왜 이런 현상이 발생하는 걸까요? N사는 이렇게 데이터를 보여주기 때문입니다.

N APM

실제 데이터는 트랜젝션 응답시간이 늦어지는 장애나 병목 구간이 보이지만, N사가 보여주는 데이터는 2.3초 정도의 응답시간으로 잔잔하게 진행되는 느낌만 나는 것이죠. 실제 N사를 비롯한 SaaS형 APM을 제공하는 회사 몇 군데는 이렇게 응답시간을 표현하고 있습니다.

실시간 데이터 수집으로 표현의 문제를 해결.

타사의 SaaS형 APM이 가진 데이터 왜곡 문제를 해결하기 위한 와탭의 해결 방법은 데이터 수집 주기를 짧게 만들어 더욱 촘촘하게 데이터를 보여 주는 방법입니다.

위 영상을 보시길 바랍니다. 1분 주기로 보여줄 것을 5초 주기로 보여 준다면 위와 같이 정말 빠르게 장애를 인지하고, 그 후속 조치를 취할 수 있습니다. 하지만 짧은 주기마다 데이터를 전송한다는 것은  SaaS형에서는 많은 기술적 제약과 한계를 극복해야 함을 의미합니다.

SaaS 환경에서 실시간 전송 시 만나는 제약들…

실시간 전송 시 만나는 제약사항/요구사항들을 정리해 보았습니다.

  • HTTP 통신은 포기 – 실제 Document를 전송하는 프로토콜이라 통신할 때 갑자기 메모리가 튀는 현상이 발생하겠죠.
  • 암호화 방식 고민 – HTTPS를 쓰지 못 합니다. 그리고 실시간으로 데이터가 전송되어야 하다 보니 선택적 암호화 방식을 고민해야 합니다. 와탭은 AES128, AES256, Plain Text, XOR Mask 등 다양한 데이터 암호화 방식을 쓸 수 있으며, 상황에 따라 유동적으로 데이터 마다 다른 암호화 방식을 적용할 수도 있습니다.
  • 데이터 압축 전송 기술 – 타사의 SaaS형 APM처럼 실제 데이터를 json 포맷으로 보낼 수 는 없습니다. 네트워크 부하를 줄이기 위해서 더 압축된 포맷으로 보내야 합니다.
  • File 아키이빙 기술 – 많은 양의 실시간 데이터를 일반 RDBMS에 저장하는 것은 불가능 합니다. 원가/검색 속도 등의 문제로 일반 RDBMS에서는 불가능하죠. 더 많은 데이터를 간결하게 저장하고, 화면에 바로 보여줄 수 있는 기술들이 필요합니다.
  • 실시간 전송 –  5초의 짧은 주기로 데이터를 보낸다는 것은, 이미 문제를 해결할 수 있는 가치 판단이 들어간 데이터가 전송되어야 합니다. 데이터를 저장한 후 추후 분석해서 보여 준다면 분석 시간이 오래 걸려 장애 인지 시간이 늦어지기 때문입니다.

위 목록을 포함한 다양한 제약사항/요구사항에 대한 솔루션 및 기술 노하우가 내부에 없다면 실시간 SaaS형 APM을 만든다는 것은 불가능합니다.

다운 샘플링으로 인해 트랜드 데이터가 가져오는 동일한 왜곡 문제들…

실제 데이터를 짧은 주기로 수집하고 있더라도, N사처럼 데이터를 왜곡하여 표현할 수 밖에 없는 경우가 있습니다. 즉 짧은 주기(예를 들어 1초, 1분)의 데이터를 가지고 있더라도, 장시간(1달, 1년의 기간)의 데이터를 표현한다면 (다운 샘플링 할수 밖에 없다면)  화면 상의 제약으로 평균으로 표현해야 하므로, 데이터 왜곡 현상이 발생할 수 밖에 없습니다.

cpu 24

위 그림은 CPU 사용량을 24시간 기준으로 보여주는 차트입니다.  1분 데이터가 Raw 데이터이므로 촘촘하게 잘 보입니다.  24일 16시 부근에서 발생한 데이터를 봐 주세요.

cpu 2 days

하지만 하루를 초과한 트렌드 데이터를 보여 주면 다음과 같은 왜곡 현상이 나타날 수 밖에 없습니다. 24일 16시 부근의 데이터는 정확히 인지되지 않습니다. 긴 기간을 다 Raw 데이터로 담을 수 없기 때문에, 평균값으로 처리 하므로 위 그림과 같이 왜곡 현상이 발생하게 됩니다.

cpu min_max
그럼 장기간의 데이터를 왜곡 없이 보여주려면 어떻게 해야 할까요?

와탭은 이에 대한 해답으로 Avg(평균값) 뿐만 아니라 Min/Max를 다 보여주는 방식을 취하고 있습니다. 24일 16시 부근 데이터를 보시면 인지되시죠?  긴 기간을 다 Raw 데이터로 담을 수 없기 때문에 줄어든 시간 범위 만큼의 Min/Max 값을 같이 표현함으로써 왜곡 현상을 줄일 수 있습니다.

맺음말

성능을 측정하는 사람이라면 항상 평균보다 더 나은 지표를 찾는 습관이 필요합니다. 와탭의 해결 방법이 여러분에게 도움이 되었기를 바랍니다.