고정부하

해결하고 싶은 문제

순간적으로 접속자가 폭증할 경우 원본 장애가 빈번하다. 랭킹, 검색, 핫딜, 항공권 등 특정 시간에 오픈되는 서비스에 이런 경우가 많다.

솔루션/패턴 설명

순간적으로 발생한 동일한 요청에 대해 최초의 결과를 공유한다. TTL(Time To Live)을 0으로 설정하면 원본서버의 1트랜잭션 시간동안(1ms 내외)만 결과는 유효하다.

../../_images/dgm017.png

M2 는 최초의 요청만 원본서버로 보낸다. 응답은 대기 중인 모든 클라이언트에게 공유됨과 동시에 만료된다. (=유효하지 않다.) 이 과정의 반복을 통해 접속자 수와 무관하게 원본부하를 고정시킨다.

구현

  • 웹서버 앞에 M2 를 배치한다. (=HTTP 통신이 가능하다.)

  • 모든 콘텐츠를 캐싱하고 TTL을 0으로 설정한다.

    {
       "hosting": [
          {
             "name": "www.example.com",
             "origin": {
                "protocol": "http",
                "address": [ "10.10.10.10", "10.10.10.11" ]
             },
             "functions": {
                "network": {
                   "cache": {
                      "ttl" : {
                         "res2xx": {
                            "sec": 0,
                            "ratio": 0,
                            "max": 0
                         }
                      }
                   }
                }
             }
          }
       ]
    }
    

장점/효과

  • 백엔드 부하를 고정/예측할 수 있어 서비스 안정성이 높아진다.

주의점

  • 읽기에는 적합하나 쓰기에는 사용할 수 없다.

  • 휘발성이 높은 콘텐츠에 대해서는 Memory-Only 모드 를 권장한다.

기타

로그인한 개인 페이지라도 공유할 수 있는 영역에 대해서는 AJAX 로 분리하는 것이 효과적이다.