ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [시스템 설계] 사용자가 늘어난다면 어떻게 할까? (2)
    프로그래밍 2022. 9. 19. 09:40

     

    이전까지 사용자가 늘어날 경우에 웹계층과 데이터계층에서 이루어지는 일들에 대해서 알아보았다. 

    이번에는 응답시간(latency) 개선을 위한 작업들에 대해서 알아본다. 

     

    캐시

    캐시란 값비싼 연산 결과, 혹은 자주 참조되는 데이터를 메모리 안에 두고 뒤이은 요청이 보다 빨리 처리될 수 있도록 하는 저장소이다.

    캐시 계층(cache tier)

    캐시 계층은 데이터가 잠시 보관되는 곳으로 DB보다 훨씬 빠르다. 
    이를 통해 성능 개선 뿐 아니라 DB 부하를 줄일 수 있고 캐시 계층 규모를 독립적으로 확장시키는 것도 가능해진다. 

    캐시 서버를 두는 방법

    위의 그림은 캐시 서버를 두는 방법인데, 
    먼더 캐시에 데이터가 있는지 없는지 (응답) 확인한다. 
    만약 캐시에 데이터가 있으면 그대로 웹 서버에 반환하고, 없다면 DB 에서 데이터를 읽어 캐시로 가져온다. 
    이를 읽기 주도형 캐시 전략(read-through caching strategy)이라고 한다.

     

    캐시 사용시 유의할 점

    - 캐시가 어떤 상황에 바람직한지 생각하기 
    데이터 갱신이 자주 일어나진 않아도 참조가 빈번하게 일어난다면 고려해본다. 

    - 어떤 데이터를 캐시에 두어야 하는지 생각하기
    캐시는 데이터를 휘발성 메모리에 두므로 영속적으로 보관할 데이터를 캐시에 두는 건 바람직하지 않다. 

    - 캐시에 보관된 데이터는 어떻게 만료(expire) 되는지 생각하기
    만료 정책에 대해 고려해보기. 너무 빨리 만료되거나 만료기한을 두지 않아 캐시에 데이터가 계속 남아있는 경우가 있다. 

    - 일관성(consistency)를 어떻게 유지시킬지 생각하기 
    일관성은 데이터 저장소의 원본과 캐시 내 사본의 싱크 여부이다. 
    저장소 원본을 갱신하는 연산과 캐시를 갱신하는 연산이 단일 트랜잭션으로 처리되지 않는 경우 데이터 싱크가 맞지 않을 수 있다. 

    - 장애에 대해선 어떻게 대처할지 생각하기
    캐시 서버를 한 대만 둘 경우 해당 서버가 단일 장애 지점(Single Point of Failure, SPOF)이 되어버릴 수 있기 때문에 
    캐시 서버를 분산시킬 필요가 있다. 

    - 캐시 메모리를 얼마나 크게 잡을지 생각하기 
    캐시 메모리가 너무 작으면 엑세스 패턴에 따라서 데이터가 너무 자주 캐시에 밀려다보러(eviction) 캐시 성능이 떨어진다. 
    이를 방지하기 위해 캐시 메모리를 과할당(overprovision) 한다. 

    - 데이터 방출(eviction) 정책을 정하기 
    캐시가 꽉 찰 경우 추가로 캐시에 데이터를 넣어야되면 기존 데이터를 내보내야한다. 
    이는 캐시 데이터 방출 정책이라고 부르는데, 이 중 가장 널리 쓰이는 것이 LRU(Least Recently Used - 마지막으로 사용된 시점이 가장 오래된 데이터를 내보내는 정책)이다. 
    다른 정책으로는 LFU(Least Frequently Used - 사용된 빈도가 가장 낮은 데이터를 내보내는 정책), FIFO(First In First Out - 가장 먼저 들어온 데이터를 가장 먼저 내보내는 것) 이 있으며 경우에 맞게 사용한다. 

     

    콘텐츠 전송 네트워크(CDN)

    CDN이란 정적 콘텐츠를 전송하는데에 쓰이는 지리적으로 분산된 서버의 네트워크이다. 
    이미지, 비디오, CSS, JavaScript 파일 등을 캐시할 수 있다.

     

    CDN 사용 시 고려할 사항들 

    - 비용
    CDN은 제 3 사업자에 의해 운영되는 경우가 많으므로 자주 사용되지 않는 콘텐츠를 캐싱하는 것은 그다지 이득이 크지 않을 수 있다. 

    - 적절한 만료 시한 설정
    시의성이 중요한(time-sensitive) 콘텐츠의 경우 만료 시점을 잘 설정해야한다. 

    - CDN 장애에 대한 대처 방안
    CDN 자체가 죽었을 경우에 웹사이트가 어떻게 동작해야하는지에 대해 고려한다 

    - 콘텐츠 무효화(invalidation) 방법
    아직 만료되지 않은 콘텐츠라 하더라도 아래 방법 중 하나도 CDN 에서 제거할 수 있다. 

    • CDN 서비스 사업자가 제공하는 API로 콘텐츠 무효화
    • 콘텐츠의 다른 버전을 서비스하도록 오브젝트 버저닝(object versioning) 이용

     

    캐시와 CDN을 추가한 설계

     

    댓글

Designed by Tistory.