사용자 수에 따른 규모 확장성 다루기

수직적 규모확장 vs 수평적 규모확장

캐시

캐시를 사용 할 때에는 아래와 같은 유의점이 있다

  1. 캐시는 어떤 상황에 바람직한가?
    • 데이터 갱신은 자주 일어나지 않지만, 참조는 빈번하게 일어난다면 고려해볼만하다.
  2. 어떤 데이터를 캐시에 두어야하는가?
    • 캐시는 데이터를 휘발성 메모리에 두므로, 영속적으로 보관할 데이터를 캐시에 두는 것은 바람직하지 않다.
  3. 캐시에 보관된 데이터는 어떻게 만료 되는가?
  4. 일관성은 어떻게 유지되는가?
    • 일관성은 데이터 저장소의 원본을 갱신하는 연산과 캐시를 갱신하는 연산이 단일 트랜잭션으로 처리되지 않는 경우 일관성이 깨진다.
  5. 장애에는 어떻게 대처할 것인가?
    • 캐시 서버를 한대만 두는 경우 해당 서버는 단일 장애 지점 (SPOF)이 되어버린다.
  6. 캐시 메모리는 얼마나 크게 잡을 것인가?
    • 캐시 메모리가 너무 작으면 액세스 패턴에 따라서는 데이터가 너무 자주 캐시에서 밀려나버려서 (eviction) 캐시의 성능이 떨어지게 된다. 이를 막을 방법은 캐시 메모리를 과할당하는것
  7. 데이터 방출(eviction) 정책은 무엇인가?
    • 캐시가 꽉 차버리면 추가로 캐시에 데이터를 넣어야 할 경우 기존 데이터를 내보내야한다. 이것을 캐시 데이터 방출 정책이라고 하는데, LRU(Leat Recently Used), LFU(Least Frequently Used), FIFO(First In First Out)과 같은 정책이 있다.

CDN

CDN 사용 시 고려해봐야할 점

  1. 비용
    • 자주 사용되지 않는 콘텐츠를 캐싱하는 것은 이득이 크지 않으므로, CDN에서 빼는 것을 고려하자.
  2. 적절한 만료 시한 설정
    • 시의성이 중요한 콘텐츠의 경우, 만료시점을 잘 설정해야한다. 너무 길면 콘텐츠의 신선도가 떨어지고, 너무 짧으면 원본서버에 빈번히 접속하게 되어 좋지 않다.
  3. CDN 장애에 대한 대처 방안
    • CDN 자체가 죽었을 경우, 웹사이트/애플리케이션이 어떻게 동작할 지 고려해야한다.
  4. 콘텐츠 무효화 (Invalidation) 방법
    • CDN 서비스 사업자가 제공하는 API로 무효화하기.
    • 콘텐츠의 다른 버전을 서비스하도록 오브젝트 버저닝 이용하기. URL 마지막에 버전 번호를 인자로 주기.

무상태(Statelss) 웹 계층

웹 계층을 수평적으로 확장하는 방법을 고려해보자.

메시지 큐

메시지 큐(message queue)