본문 바로가기
💻 하나씩 차곡차곡/Back-end

시스템 설계 기초 (로드밸런스, 메세지 큐, CDN, DNS 등)

by 뚜루리 2024. 8. 12.
728x90
320x100
아래의 내용은 <가상 면접 사례로 배우는 대규모 시스템 설계 기초> 을 바탕으로 정리한 내용입니다.

 

 

 

 

  1. 사용자는 웹 브라우저나 모바일 앱을 통해 도메인 이름을 이용하여 웹사이트에 접속한다. 이 접속을 위해서 DNS에 질의하여 IP주소로 변환하는 과정이 필요하다.
    • DNS(Dmain Name Service) : 도메인 이름을 IP주소로 반환한다. ex) www.test.com -> 100.100.100.100
  2. 정적 콘텐츠 (JS, CSS, 이미지 등)은 웹서버를 통해 서비스하지 않고 CDN을 통해 제공하여 더 나은 성능을 보장한다. 
    • CDN(콘텐츠 전송 네트워크) : 정적 네트워크를 전송하는데 쓰이는, 지리적으로 분산된 서버의 네트워크로  JS, CSS, 이미지 등을 캐시할 수 있다.
    • CDN 사용시 고려해야 할 사항 : 적절한 만료 시한 설정, 비용, 장에 애 대한 대처 방안, 콘텐츠 무효화
  3. 로드밸런스를 통해 자동적으로 트래픽을 분산시킨다.
    • 로드밸런스 : 웹 서버들에게 트래픽 부하를 고르게 분산하는 역할. 
    • 로드밸런스 동작 방식
      1. 사용자는 바로 웹서버에 접속하지 않고 로드밸런스의 공개 IP주소로 접속한다.
      2. 로드밸런스는 더 나은 보안을 위해 사설 IP주소를 통해 웹서버로 통신한다.
      3. 웹사이트로 유입되는 트래픽이 가파르게 증가하면 트래픽이 감당할 수 없는 시점이 될 때 로드 밸런스가 자동적으로 트래픽을 분산하기 시작한다.
  4. 요청을 받은 웹서버는 캐시에 응답이 저장되어 있는지를 본후 저장되어 있다면 해당 데이터를 클라이언트에 반환하고 없는 경우에는 데이터베이스 질의를 통해 데이터를 찾아 캐시에 저장한 뒤 클라이언트에 반환한다. (읽기 주도형 캐시 전략)
    • 캐시 : 데이터가 잠시 보관되는 곳. 데이터베이스보다 훨씬 빠르다. 별도의 캐시 계층을 두면 성능이 개선(응답시간 개선)될 뿐만 아니라 데이터베이스의 부하를 줄일 수도 있고, 캐시 계층의 규모를 독립적으로 확장시키는 것도 가능해 진다.
    • 캐시 사용시 고려해야 할 사항 : 어떤 데이터를 캐시에 두어야 하는가, 캐시의 만료 정책, 장애에는 어떻게 대처하는가?(캐시서버 분산), 데이터 방출 정책(가장 널리 쓰이는 것 LRU, FIFO)
  5. 또한 웹 계층은 무상태(Stateless) 로 설계 해야 한다.
    • 사용자로부터의 HTTP요청은 어떤 웹서버로도 전달될 수 있고 웹서버는 상태 정보가 필요할 경우 공유 저장소로부터 데이터를 가져오고 상태 정보는 웹서버로부터 물리적으로 분리되어있음 -> 단순하고, 안정적이며 규모 확장이 쉽니다.
  6. 메시지 큐에 시간이 오래 걸리는 프로세스를 메시지 큐에 넣어 요청이 들어왔을 때 메시지 큐에서 꺼내서 비동기적으로 처리를 완료한다. -> 생산자와 소비자 서비스의 규모는 각기 독립적으로 확장할 수 있다. 각 컴포넌트가 보다 느슨히 결합될 수 있도록 하고, 결함에 대한 내성을 높인다.

  7. 데이터베이스 수평적 확장 (샤딩, Sharding)을 통해 더 많은 서버를 추가함으로써 성능을 향상 시킬 수 있도록 한다.
    • 수평적 확장 : 스케일 업이라고도 부른다. 기존 서버에 혹은 고성능의 자원을 증설하는 방법.
    • 샤딩 : 데이터베이스를 샤드라고 부르는 작은 단위로 분할하는 기술을 일컫는다. 모든 샤드는 같은 스키마를 쓰지만 샤드에 보관되는 데이터 사이에는 중복이 없다.
    • 샤딩 사용시 주의할 점 : 재샤딩(데이터가 너무 많아져서 하나의 샤드로는 더이상 감당하기 어려울 때, 샤드간 데이터 분포가 균등하지 못하여 어느 샤드에 할당된 공간 소모가 다른 샤드에 비해 빨리 진행될 때), 유명인사문제(특정 샤드에 질의가 집중되어 서버에 과부하가 걸리는 문제), 조인과 비정규화(하나의 데이터베이스를 여러 샤드 서버로 쪼개고 나면, 여러 샤드에 걸친 데이터를 조인하기 힘들어 지는 것.)
  8. 도구 사용 (로그, 메트릭, 자동화)
    1. 로그 : 에러 로그를 모니터링 한다. 
    2. 메트릭 : 메트릭 수집을 통해 사업 현황에 관한 유용한 정보를 얻을 수도 있고 시스템의 현재 상태를 손쉽게 파악할 수 도 있다.
    3. 자동화 : 자동화 도구 (빌드, 테스트, 배포 등)을 자동화하면 생산성이 높아지며 개발자가 만드는 코드가 어떤 검증 절차를 자동으로 거치도록 할 수 있어서 문제를 쉽게 감지할 수 있다.
728x90
320x100