[대규모 시스템 설계 기초] 단일 서버부터 시작하기

haaaalin·2023년 2월 27일
3

여태 부트캠프로 진행했던 프로젝트들은 거의 1개의 서버로 진행했고, 만약 필요하다면 AI 서버를 따로 두어 AI 관련 작업만 실행하도록 설계했던 적이 있었다.

이 책을 읽으며 어떻게 많은 사용자를 수용할 수 있도록 서비스를 발전시키는 지 알아볼 기회다.

단일 서버

단 한 대의 서버에서 실행되는 서비스를 한 번 설계해보자.

단일 서버라면 하나의 서버가 웹, 앱 요청을 처리하며 데이터베이스, 캐시 등이 전부 서버 한 대에서 실행이 된다.

이건 사용자가 조금이라도 늘면 절대 충분하지 않다. 따라서 여러 서버를 두어야 한다.

위와 같이 웹/모바일 트래픽 처리 서버(웹 계층)과 데이터베이스 서버(데이터 계층) 이렇게 각 계층을 분리하여 서버를 운영하는 것이 좋다.

이 설계에서 사용자는 웹 서버에 바로 연결된다.

따라서 웹 서버가 다운된다면? 사용자는 웹 사이트에 접속할 수 없다.

이를 막기 위해서는 부하 분산기 또는 로드밸런서를 도입해야 한다.

로드밸런서

  • 서버 둘 중 하나가 다운되어도, 다른 서버가 트래픽 처리를 하고 있어도 되니 서비스 전체가 다운되는 일을 방지한다.
  • 두 대의 서버가 처리하기 힘든 트래픽 양이 되어도 웹 서버 계층에 더 많은 서버를 추가하기만 하면 된다. 그러면 알아서 로드밸런서가 트래픽을 분산시킨다.

CDN

정적 콘텐츠를 전송하는 데 쓰이는, 지리적으로 분산된 서버의 네트워크

CDN 서버는 원본 서버에서 불러온 파일을 캐시하고 사용자에게 반환한다. 파일은 TTL에 명시된 시간이 끝날 때까지 캐시된다.

만료되지 않은 이미지에 대한 요청은 캐시를 통해 CDN에서 바로 반환된다.

메시지 큐와 자동화

메시지큐

메시지의 무손실, 즉 메시지 큐에 일단 보관된 메시지는 소비자가 꺼낼 때까지 안전히 보관되는 것을 보장하는 비동기 통신을 지원하는 컴포넌트

예를 들어 사진 보정 애플리케이션이라면 시간이 오래 걸리는 보정 같은 경우, 사진 보정 작업을 큐에 넣고, 메시지 큐에서 꺼내어 비동기적으로 완료하면 된다.

이렇게 메시지 큐를 적용하게 되면, 생산자와 소비자 서비스 규모는 각기 독립적으로 확장될 수 있다.

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

로그: 에러 로그를 모니터링하는 것은 중요. 세스템의 오류와 문제들을 보다 쉽게 탐색 가능

메트릭: 메트릭을 잘 수집하면, 사업 현황에 관한 유용한 정보와 시스템의 현재 상태를 파악할 수 있다.

  • 호스트 단위 메트릭: CPU, 메트릭, 디스크 I/O에 관한 메트릭
  • 종합 메트릭: 데이터베이스 계층의 성능, 캐시 계층의 성능
  • 핵심 비즈니스 메트릭: 일별 능동 사용자, 수익, 재방문

자동화: 개발자가 만드는 코드가 어떤 검증 절차를 자동으로 거쳐 기존 코드와 합쳐지고, 이 외에도 빌드, 테스트, 배포 등의 절차를 자동화 가능

위와 같은 것들을 모두 고려해서 설계한 설계안이다.

profile
한 걸음 한 걸음 쌓아가자😎

0개의 댓글