동기와 비동기
(이미치 출처 : http://ojava.tistory.com/17)
어떤 서비스에 회원가입을 하면 메일이 날라오는 경우가 있다.
-
동기 : 메일이 날라올 때까지 아무것도 하지 못한다.
-
비동기 : 메일이 날라오지 않더라도 다른 작업을 할 수 있다.
동기비동기
장점 |
한가지 업무를 빠르게 끝내기 좋다. |
여러 업무를 동시에 진행 할 수 있다. |
단점 |
한가지 업무가 끝날 때 까지 다른 업무를 하지 못한다. |
프로세스들은 컴퓨팅 파워를 공유하므로 자체 성능은 저하된다.(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)
Enduro/X 트랜잭셔널 메시지 큐 (Transactional Message Queue, TMQ)
파이낸셜 퓨전 메시지 브로커 (사이베이스)
퓨즈 메시지 브로커 (엔터프라이즈 ActiveMQ)
NATS (MIT 오픈 소스 라이선스: Go로 개발됨)ㅌ
오라클 메시지 브로커 (오라클)
RabbitMQ (모질라 공용 허가서, 얼랭으로 개발됨)
레디스: 오픈 소스 인메모리 데이터 구조 스토어 (데이터베이스, 캐시, 메시지 브로커로 사용됨)
-
worker
유저가 다른 업무를 보는동안 보이지 않는 곳에서 task를 처리하는 착한 친구입니다.
-
flower
celery의 Log 정보를 GUI로 볼수있는 celery 의 extension tool 입니다!.
Celery Document
http://docs.celeryproject.org/en/latest/
'Programming > Python' 카테고리의 다른 글
PEP 8 -- Style Guide for Python Code (0) | 2019.03.04 |
---|---|
Python의 디자인 원칙 : PEP 20 (0) | 2019.03.04 |
Django 설치 & 실행 (0) | 2019.01.19 |
네이버 인기검색어 크롤링을 해보자!(feat.파이썬) (0) | 2019.01.16 |
파이썬 설치하기(+IDE 포함+ Professional 버전 학생 인증하는법) (0) | 2019.01.16 |