BackEnd/네트워크와 인프라

[대규모 시스템 설계] 메시지 큐, 로그, 메트릭, 자동화

짱호 2022. 3. 9. 14:25
반응형

가상 면접 사례로 배우는 대규모 시스템 설계 기초 요약정리 글입니다.

 

메시지 큐는 메시지의 무손실을 보장하는, 비동기 통신을 지원하는 컴포넌트다.
일반적으로 Kafka나 RabbitMQ 같은 메시지 브로커들을 많이 사용한다.

이들은 메시지 버퍼 역할을 하며 메시지를 비동기적으로 전송한다.

 

메시지 큐의 기본 아키텍처

메시지 큐의 기본 아키텍처는 아주 간단하다.

  1. 입력 서비스(생산자 또는 발행자)가 메시지를 만든다.
  2. 해당 메시지를 메시지 큐에 발행(publish)한다.
  3. 소비자 또는 구독자가 해당 메시지를 받아 그에 맞는 동작을 수행한다.

 

메시지 큐의 강점

메시지 큐를 이용하면 서비스 또는 서버 간 결합이 느슨해져, 규모 확장성이 보장되어야 하는 안정적 애플리케이션을 구성하기 좋다.

생산자는 소비자의 서비스가 다운되어 있어도 메시지를 발행할 수 있고, 반대로 소비자는 생산자가 가용 상태가 아니라도 큐에 들어있는 메시지를 수신할 수 있다.

예를 들어, 이미지 보정 애플리케이션을 만든다고 생각해보자.

샤프닝, 블러링 등의 보정 작업은 시간이 많이 걸리기 때문에 비동기적으로 처리하는 게 유리하다.
따라서 서버는 보정 작업이 필요한 이미지를 메시지 큐에 발행하고, 실제 보정 작업을 수행하는 프로세스들은 작업을 메시지 큐에서 꺼내서 비동기적으로 처리한다.

이렇게 하면 웹 서버와 보정 작업 프로세스를 각각 독립적으로 확장할 수 있게 된다.

 

로그, 메트릭, 자동화

소규모 웹 서비스를 만들 때는 로그나 메트릭, 자동화 같은 것들이 꼭 필요한 것은 아니다.
하지만 서비스 규모가 커지면 이러한 도구들에 필수적으로 투자해야 한다.

 

로그

에러 로그 모니터링은 중요하다.
시스템의 오류와 문제들을 더 쉽게 찾아낼 수 있도록 해주기 때문이다.
로그를 단일 서비스로 모아주는 도구를 활용하면 더 편리하게 모니터링할 수 있다.

 

메트릭

메트릭을 잘 수집하면 사업에 유용한 의미 있는 데이터를 얻을 수도 있고, 시스템의 상태를 쉽게 파악할 수도 있다.

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

 

자동화

시스템이 크고 복잡해지면 생산성이 떨어지기 마련이다.
이런 경우 자동화 도구를 활용하면 생산성을 크게 올릴 수 있다.

예를 들면, CI(지속적 통합) 도구를 활용하면 코드 검증 절차를 자동으로 지원해주기 때문에
개발자는 문제를 쉽게 감지할 수 있게 된다.
이외에도 빌드, 테스트, 배포 등의 절차를 자동화할 수 있으므로 개발 생산성을 올릴 수 있다.

 

시스템 구성하기

다음은 메시지 큐와 다양한 도구들을 적용해 수정한 시스템 구성안이다.

반응형