본문 바로가기

Programming/Python

[django] 비동기 큐 작업에 대하여 알아보자! (celery)

동기와 비동기

 

 

(이미치 출처 : http://ojava.tistory.com/17)

어떤 서비스에 회원가입을 하면 메일이 날라오는 경우가 있다.

  1. 동기 : 메일이 날라올 때까지 아무것도 하지 못한다.

  2. 비동기 : 메일이 날라오지 않더라도 다른 작업을 할 수 있다.

 


동기비동기

장점

한가지 업무를 빠르게 끝내기 좋다.

여러 업무를 동시에 진행 할 수 있다.

단점

한가지 업무가 끝날 때 까지 다른 업무를 하지 못한다.

프로세스들은 컴퓨팅 파워를 공유하므로 자체 성능은 저하된다.(ex) context change(업무 교체에 소요되는 시간) 의 delay를 갖는다.)

 

큐(Queue) 작업이 필요한 이유

 

앞에서 비동기 작업을 하면 메일을 보내면서 여러가지 일을 할 수 있지만, 동시에 대용량의 작업을 하게 되면 컴퓨팅 파워가 급감해 서비스에 방해가 될 수 있습니다. 그래서 일을 처리하기 힘든 대용량의 데이터를 큐라는 작업 공간에 임시로 보내어 대용량의 작업을 나누어 순차적(각 각의 프로세스는 순차적이지 않음)으로 처리하게 됩니다.

 

구조

1. django에 등록한 Task를 Message Broker로 보낸다.

2. 테스크를 Celery에서 비동기 처리한다.

?(왜 이렇게 간단해 보이지…….ㅋㅋ)

 

 

 

 

 

aws 리소스

elastic cache 요금 : https://aws.amazon.com/ko/elasticache/pricing/amazon MQ 요금 : https://aws.amazon.com/ko/amazon-mq/pricing/SQS 요금 : https://aws.amazon.com/ko/sqs/pricing/

요금/성능 : elastic cache > amazon MQ > SQS

 

SQS 사용안내서 : https://docs.aws.amazon.com/ko_kr/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html

 

SQS VS Elastic cache

https://stackshare.io/stackups/amazon-elasticache-vs-amazon-sqs

SQS + django + celery

https://www.calazan.com/using-amazon-sqs-with-django-and-celery/

 

SQS main 옵션

 

 

SQS 도입 !!!!!!!!!

메일에 관한 데이터만 처리하기 때문에 큰 트래픽이 생기지 않을 것으로 예상

월 1기가의 송신데이터가 1GB일 때 무료

수신은 모든 데이터의 상관없이 무료

프리티어 종료 시 한 달에 표준 대기열 이용 시 0.4 USD, FIFO 대기열 이용 시 0.5 USD 다.

 

SQS 생성 옵션 : https://docs.aws.amazon.com/ko_kr/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html

SSE 옵션 비용 : https://aws.amazon.com/ko/kms/pricing/

lamda +SQS : https://devblog.croquis.com/ko/2017-05-13-1-aws-serverless-1/

django + celery + sqs tutorial :

https://medium.com/@markgituma/using-django-2-and-celery-with-sqs-8a314a53f8ef

 

용어 개념

  • celery

웹 서비스를 하면서 응답을 받기 오래 걸리는 작업이 종종 있습니다. 그럴 경우 사용자는 응답을 받기 위해 오랜 시간을 기다려야 합니다. 보통 웹 서비스에서 응답 시간은 서비스의 생명과 직결되므로 비동기로 작업을 처리하게 넘기고 바로 응답을 하는 경우가 많습니다. celery는 그 작업을 할 수 있도록 도와주는 파이썬 프레임워크입니다. 보통 이런 프레임워크를 worker라고 부릅니다.

 

  • task

비동기 큐 작업을 할 프로세스입니다.

  • Message broker

메시지 브로커(message broker), 인터페이스 엔진(interface engine[1])은 송신자의 이전 메시지 프로토콜로부터의 메시지를 수신자의 이전 메시지 프로토콜로 변환하는 중간 컴퓨터 프로그램 모듈이다. 메시지 브로커들은 응용 소프트웨어가 이전에 정의해둔 메시지를 교환할 수 있는 전기통신의 요소 또는 컴퓨터 네트워크이다.[1] 메시지 브로커들은 메시지 지향 미들웨어(MOM)의 빌딩 블록이지만 일반적으로 MOM과 원격 프로시저 호출(RPC) 등의 전통적인 미들웨어를 대체하지는 않는다

queue 공간이자, Task들을 처리 및 관리하는 역할을 합니다.

 

  • 메세지 브로커의 종류

아마존 웹 서비스(AWS) 심플 큐 서비스(SQS)

아파치 ActiveMQ

아파치 카프카

아파치 Qpid

Celery

Enduro/X 트랜잭셔널 메시지 큐 (Transactional Message Queue, TMQ)

파이낸셜 퓨전 메시지 브로커 (사이베이스)

퓨즈 메시지 브로커 (엔터프라이즈 ActiveMQ)

IBM 앱 커넥트

IBM 웹스피어 MQ

마이크로소프트 애저 서비스 버스 (마이크로소프트)

마이크로소프트 비즈토크 서버 (마이크로소프트)

NATS (MIT 오픈 소스 라이선스: Go로 개발됨)ㅌ

오픈 메시지 큐

오라클 메시지 브로커 (오라클)

RabbitMQ (모질라 공용 허가서, 얼랭으로 개발됨)

레디스: 오픈 소스 인메모리 데이터 구조 스토어 (데이터베이스, 캐시, 메시지 브로커로 사용됨)

  • worker

유저가 다른 업무를 보는동안 보이지 않는 곳에서 task를 처리하는 착한 친구입니다.

  • flower

celery의 Log 정보를 GUI로 볼수있는 celery 의 extension tool 입니다!.

 

Celery Document

http://docs.celeryproject.org/en/latest/

 

Celery - Distributed Task Queue — Celery 4.3.0 documentation

This document describes the current stable version of Celery (4.3). For development docs, go here.

docs.celeryproject.org