Redis, RabbitMQ 차이점을 알아보자

지수 🤓·2020년 4월 28일
1

개념 정리

목록 보기
6/17
post-thumbnail

오래 걸리는 작업은 비동기 처리 방식을 사용해 사용자가 해당 작업을 기다리지 않고 다른 작업을 진행할 수 있도록 하면 좋다. 사용자 측면에서 속도 개선을 유도할 수 있다.

Celery

Celery 는 Python 으로 작성된 분산 메시지 전달을 기반으로 한 비동기 작업 큐로, Worker 의 한 종류다.

별도로 실행 중인 Worker Process가 Broker로부터 Message를 전달 받아 작업을 대신 수행해 주는 라이브러리다.

흐름

요청을 받은 뷰에서는 Broker에게 해당 작업 실행을 위임하고 각 작업을 구분할 수 있는 Task ID 를 발급받게 된다. 해당 작업은 Broker가 놀고있는 Worker에게 넘겨서 Worker가 비동기로 수행하도록 한다.

Django 서버에서 Task를 Message Borker를 통해 전달을 하면 하나 이상의 Celery Worker가 Message Broker Queue에 있는 Task를 받아서 이를 처리한다.

Celery를 사용하기 위해서는 Message Broker가 필요한데 대표적으로 Redis와 RabbitMQ가 있다.

Redis

디스크에 상주하는 인메모리 데이터베이스 / 컴퓨터 메모리를 이용한(in-memory) Cache 서버

Key-Value를 이용해 Celery가 처리할 작업을 Celery에 보낸 후 Cache 에서 해당 Key를 제거하는 방식으로 작동한다.

  • Redis는 데이터 검색을 위해 Database에 접근하기 전 메모리에서 Cache를 가져다 쓴다는 점에서 속도가 빠르다.
  • 매우 빠른 서비스 및 메모리 내 기능을 제공하기 때문에 지속성이 중요하지 않고 약간의 손실을 견딜 수있는 짧은 보존 메시지에 적합하다.
  • 큰 메시지를 처리 할 때는 대기 시간이 오래 걸린다.

RabbitMQ

메시지 브로커이다.

응용 프로그램(applications)에게 메시지를 주고 받을 수 있으며, 메시지가 수신될 때까지 안전하게 있을 수 있도록 하는 공용 플래폼(common platform)을 제공한다.

  • 메시지를 다른 대기열로 보낼 수있는 라우팅 시스템을 갖추고 있다.
  • 우선 순위가 높은 메시지를 먼저 사용하기 위해 작업자가 사용할 수있는 메시지의 우선 순위를 지원한다.
  • 메시지 브로커로서 Redis와 비교할 때 훨씬 더 다양한 기능을 제공한다.
  • 크고 복잡한 메시지에 적합하다.

전에 플레이리스 공유 서비스의 크롤링 기능을 Celery + RabbitMQ를 사용해서 만들었다. 지금 공부를 하고 보니 Redis로 하는 것이 더 효율적이었을 것 같다. 그 이유는 크롤링 기능이 복잡하지 않고, 속도가 중요한 기능이였고 지속성이 중요하지 않기 때문이다.

타운컴퍼니 기술블로그
성능 비교
성능 비교2

profile
Backend Junior Developer

0개의 댓글