가상면접사례로 배우는 대규모 시스템 설계 기초(2)

오늘 배운 것

1장 사용자 수에 따른 규모 확장성

앞서 로드밸런서로 웹 서버 부하분산, DB 다중화로 DB부하 분산 성공.

응답시간을 줄이기 위해 캐시와 정적 콘텐츠는 CDN을 도입하라. (동적 콘텐츠도 되긴 하는데 범위를 벗어남)

캐시 사용 시 유의할 점

  1. 캐시는 적은 update, 많은 read일때 유리하다.
  2. 캐시의 위치는 메모리, 영속적인 데이터는 놓으면 안된다.
  3. 만료 정책이 없으면 데이터는 캐시에 계속 남는다. 너무 짧으면 DB를 너무 자주 읽게 되고, 너무 길면 원본과 차이가 날 가능성이 높아진다.

  4. 일관성(consistency)은 어떻게 유지되는가. 원본과 캐시 내의 사본이 같은지 여부를 말한다. 원본 갱신과 캐시 갱신이 단일 트랜잭션이 아니라면 일관성이 깨질 수 있다. 여러 지역에 시스템이 확장되는 경우 일관성을 유지하는 것이 어렵다. 페이스북의 논문 “Scaling Memcache at Faebook”을 참고하라.

  5. 장애 대처, 캐시 서버를 한 대만 두면, 단일 장애 지점(SPOF)이 될 것이다.

         단일장애지점이란, 어떤 특정 지점에서의 장애가 전체 시스템의 동작을 중단 시키는 경우를 말한다. 그래서 여러 지역에 캐시 서버를 분산해야 한다. 
    
  6. 캐시 메모리는 얼마나 크게 잡을 것인가. 너무 작으면 데이터가 캐시에서 자주 밀려나서 캐시 성능이 떨어진다.
  7. 데이터 방출 정책은 무엇인가. 캐시가 꽉 차면 기존 데이터를 내보내야 한다. LRU, LFU, FIFO…

CDN

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

동적 콘텐츠 캐싱은 상대적으로 새로운 개념이다. 우선 이 책에선 정적 콘텐츠만 보자.

여러 지역단위의 캐시와 DB의 관계가 CDN과 원본서버와 비슷하다.

CDN사용 시 고려해야 할 사항

  1. 비용: CDN은 보통 제3 사업자에 의해 운영된다. 자주 사용되는 콘텐츠를 캐싱해야 한다.
  2. 적절한 만료시점: 시의성이 중요한 콘텐츠는 만료 시점을 잘 정해야 한다. 너무 짧으면 자주 원본서버에 접속해야 하고, 길면 신선도가 떨어진다.
  3. CDN 자체가 죽었을 경우 대처방안을 고려해야 한다.
  4. 콘텐츠 무효화 방법, 아직 만료되지 않았더라도 아래 방법 가운데 하나를 써서 CDN에서 제거할 수 있다.
    • CDN 사업자가 제공하는 API로 제거
    • 다른 버전을 서비스하도록 오브젝트 버저닝 이용.

Stateless 웹 계층

state 의존적인 아키텍처

stateless 아키텍처

데이터센터

메시지 큐

로그, 메트릭, 그리고 자동화

메시지 큐, 로그, 메트릭, 자동화 등을 반영하여 수정한 설계안

데이터베이스의 규모 확장

수직적 확장

수평적 확장

1M 사용자, 그 이상

results matching ""

    No results matching ""