Celery & RabbitMQ

윤일권·2023년 1월 2일
1

우리는 flask를 사용하여 프로젝트를 구현하려한다.
하지만 flask는 동기적으로 처리하기 때문에 데이터 처리 메일 전송 등 무거운 작업이나
시간이 오래 걸리는 작업들은 앞선 처리가 될 때까지 기다려야한다.
때문에 celery랑 rabbitMQ를 사용하여 비동기로 실행하도록하여 퀄리티를 높이고자 한다.

Celery

  • Celery? 처음으로 생각나는 것이 초록색 멀대같이 생긴 수분 가득한 채소가 생각난다. 거기서 나온 말인 것은 맞다. 이는 Celery 공식페이지나 깃허브에서 실제 Celery사진이 나와 있다.
    (이름 유래는 알 수 없으나 Task Queue와 관련 있을 것 같다.)

  • Celery란?

    • 방대한 양의 메시지를 처리하는 동시에 이러한 시스템을 유지 관리하는 데 필요한 도구를 운영에 제공하는 단순하고 유연하며 신뢰할 수 있는 분산 시스템입니다.
    • 클라이언트와 워커 사이를 중재하는 브로커를 사용하여 메세지를 통해 통신한다.
    • Task를 시작하기 위해 클라이언트는 큐에 메세지를 추가하고, 브로커는 워커에게 메세지를 전달한다.
    • 고가용성(메세지 시 Retry), 수평적 확장, 빠른 속도 등 장점이 있다.
    • 위 정의가 뭔말인지 잘 와닿지가 않는다. 그래도 하나하나 살펴보자
  • Task Queue

    • 어느 문서나 글을 보아도 Task Queue가 등장한다. 그렇다면 이게 대체 뭘까?
    • 스레드 또는 시스템 간에 작업을 분산시키기 위한 메커니즘
    • Task : 하나의 작업 단위, Task Queue의 입력
    • Worker Process : 전용 작업자 프로세스는 수행할 새 Task가 있는지 대기열을 지속적으로 모니터링 한다.

다시 되짚어보자.
flask는 동기적 처리를 한다 -> 느리다 -> 이를 위해 Celery를 사용한다 -> Celery를 사용하기 위해서 Message Broker를 통해 Flask에 테스크를 Celery로 전달해준다 -> Celery는 Task를 받아 비동기적으로 처리한다

그렇다면 Message Broker는 무엇인지 더 살펴보겠습니다.

RabbitMQ

위 내용을 이해하고 오셨다면 RabbitMQ가 Message Broker 중 하나라는 것을 아실겁니다.
그렇다면 Message Broker은 무엇이며? 어떤 역할을 할까? 라는 생각이 드실겁니다.
이제 한번 알아봅시다.

  • Message Broker란?
    • 송신자로부터 전달 받은 메세지를 수신자에게 전달해주는 중간 역할이다.
    • 송신자는 Flask 즉 클라이언트를 말하는 것이고, 수신자는 Celery 즉 Worker 말한다.
    • 응용 소프트웨어 간에 메세지를 교환할 수 있게 한다.
    • 메세지가 적재되는 공간 : Message Queue
    • DW : 실시간으로 데이터를 수집하고 관리하는 서버
    • AS : 이 데이터를 가공하여 사용하는 서버

      Message Broker를 사용하면 DW에서는 수집한 데이터를 관리하고, AS는 이 데이터를 가공하여 사용한다.
      기존 : 실시간으로 데이터가 계속 쌓이는 TABLE을 빠르게 조회하는 것은 힘들다. 조회 성능을 높이기위해 테이블에 INDEX를 걸면 INSERT 속도가 느려진다.
      Meassage Broker : AS에서는 별도의 조회과정이 필요없이, 메세지 큐에 적재되는 메시지를 감시하고 있다가 메시지가 적재되면 바로 가져다가 사용할 수 있다.

profile
생각하는 개발자가 되겠습니다!!

0개의 댓글