1 λΆ„ μ†Œμš”

Celeryλž€?

Celery λž€, λ™μ‹œμ„± ν”„λ‘œκ·Έλž˜λ°μ—μ„œ κ°€μž₯ 많이 μ‚¬μš©ν•˜λŠ” 기법 쀑 ν•˜λ‚˜μž„.

λΆ„μ‚° λ©”μ‹œμ§€ 전달을 기반으둜 λ™μž‘ν•˜λŠ” 비동기 μž‘μ—… 큐 라고 ν•œλ‹€.

  • 즉, μ‹€μ‹œκ°„ μ²˜λ¦¬μ— 쀑점을 두고 μž‘μ—… μ˜ˆμ•½μ„ μ§€μ›ν•˜λŠ” μž‘μ—… 큐 μΈκ±°μž„!!
    • μŠ€μΌ€μ€„λ§λ„ μ§€μ›ν•˜κΈ΄ 함

CeleryλŠ” λ©”μ‹œμ§€λ₯Ό μ „λ‹¬ν•˜λŠ” μ—­ν• (Publisher)κ³Ό λ©”μ‹œμ§€λ₯Ό Message Broker μ—μ„œ 가져와 μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” Worker 의 역할을 λ‹΄λ‹Ήν•œλ‹€.

Worker?

Worker λŠ” μ›Ή μ„œλΉ„μŠ€μ—μ„œ λ°±μ—”λ“œμ˜ μž‘μ—…μ„ μ²˜λ¦¬ν•˜λŠ” λ³„λ„μ˜ Frame μž„!

이둜 인해 μ‚¬μš©μžμ—κ²Œ 즉각적인 λ°˜μ‘μ„ 보여쀄 ν•„μš”κ°€ μ—†λŠ” μž‘μ—…λ“€λ‘œ 인해 μ‚¬μš©μžκ°€ λŠλΌλŠ” μ‹œκ°„ 지연을 μ΅œμ†Œν™” ν•  수 있음.

이처럼 Celery λ₯Ό μ‚¬μš©ν•˜λ©΄, API μ„œλ²„λ₯Ό κ°œλ°œν•˜κ³  μš΄μ˜ν•˜λ©΄μ„œ μ‚¬μš©μž μš”μ²­μ— 포함될 ν•„μš”κ°€ μ—†λŠ” λΆˆν•„μš”ν•œ κ³Όμ •μ΄λ‚˜ 무거운 쿼리 μ‹€ν–‰ λ“±μ˜ μž‘μ—…μ„ Celery Task 둜 μ •μ˜ν•΄μ„œ Broker(RabbitMQ, Redis λ“±) 와 Consumer(Celery Worker) λ₯Ό μ΄μš©ν•΄ 비동기 μ²˜λ¦¬ν•˜μ—¬ μ‚¬μš©μžμ—κ²Œ λΉ λ₯΄κ²Œ 응닡을 μ œκ³΅ν•  수 μžˆλ‹€!!

[μ‚¬μš©μž μš”μ²­μ— 포함될 ν•„μš” μ—†λŠ” μž‘μ—… μ˜ˆμ‹œ]

- νšŒμ›κ°€μž… μΆ•ν•˜ 이메일 λ°œμ†‘
- μ£Όλ¬Έ λ‚΄μ—­ λ‹€μš΄λ‘œλ“œ

Celery ꡬ성 μš”μ†Œ

Broker

Broker λŠ” Task(Message)λ₯Ό Worker μ—κ²Œ μ „λ‹¬ν•˜λŠ” μ—­ν• μž„

Client

Client λŠ” Taskλ₯Ό 생성 ν•˜λŠ” μ—­ν• μž„

Worker

Worker λŠ” Taskλ₯Ό μ‹€ν–‰ν•˜κ³  μ²˜λ¦¬ν•˜λŠ” μ—­ν• 

Celery λ™μž‘ ꡬ쑰

image

CeleryλŠ” μ›Ή μ„œλ²„μ—μ„œ λ°œμƒν•œ μš”μ²­(Task) 을 Message Broker μ—μ„œ λ°›μ•„ Celeryλ₯Ό μ΄μš©ν•΄ λΆ„μ‚° μ²˜λ¦¬ν•¨!

Celeryμ—μ„œλŠ” μž‘μ—…μ΄ μ™„λ£Œλ˜λŠ” μ΄λ²€νŠΈμ— λŒ€ν•΄ DB Taskλ₯Ό μˆ˜ν–‰ν•¨!

Celery Broker?

Broker λŠ” Client 와 Worker μ‚¬μ΄μ—μ„œ λ©”μ‹œμ§€λ₯Ό μ „λ‹¬ν•˜λŠ” μ—­ν• μž„!

5.0 버전 κΈ°μ€€μœΌλ‘œ λ‹€μŒκ³Ό 같은 Broker λ₯Ό μ§€μ›ν•œλ‹€κ³  ν•œλ‹€.

  • RabbitMQ
    • RabbitMQ의 인증 및 인가 방식을 κ·ΈλŒ€λ‘œ μ‚¬μš©ν•  수 μžˆλ‹€!
    • 맀우 효율적 & κ΄‘λ²”μœ„ν•œ 배포 및 ν…ŒμŠ€νŠΈλœ λ©”μ‹œμ§€ λΈŒλ‘œμ»€μž„
    • κ³ κΈ‰ λΌμš°νŒ… μš”κ΅¬ 사항이 μžˆλŠ” μ—”ν„°ν”„λΌμ΄μ¦ˆ λ©”μ‹œμ§•μ„ μ œκ³΅ν•˜λŠ”λ°μ— 적합
  • Redis
    • μ‹œμž‘μ΄ λΉ λ₯΄κ³  κ°€λ²Όμš΄ Broker
    • ν•˜μ§€λ§Œ μ•ˆμ •μ μΈ 전달을 μ§€μ›ν•˜μ§€λŠ” μ•ŠλŠ”λ‹€
    • μ‹œμŠ€ν…œμ΄ μ’…λ£Œλ˜λŠ” 경우, λͺ‡ λΆ„ λ™μ•ˆ μž‘μ—…μ— λŒ€ν•œ 정보가 μ†μ‹€λ˜λŠ” 것이 μ€‘μš”ν•˜μ§€ μ•Šμ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— 적합
    • Redis μžμ²΄κ°€ λ©”λͺ¨λ¦¬λ₯Ό μ‚¬μš©ν•˜μ—¬ μ €μž₯ν•˜λŠ” 방법이라, λ©”λͺ¨λ¦¬κ°€ λΆ€μ‘±ν•œ μƒν™©μ—μ„œλŠ” μž„μ˜λ‘œ Key κ°€ μ‚­μ œλ  수 있음 β†’ Task λ₯Ό 받아도 μ‚­μ œλ  수 있음
    • λ©”μ‹œμ§€ 손싀 방지 기법이 μ—†μŒγ…œγ…œ
  • Amazon SQS
  • Zookeeper

Message Broker

Message Broker λž€, μ†‘μ‹ μžμ˜ 이전 λ©”μ‹œμ§€ ν”„λ‘œν† μ½œλ‘œλΆ€ν„°μ˜ λ©”μ‹œμ§€λ₯Ό μˆ˜μ‹ μžμ˜ 이전 λ©”μ‹œμ§€ ν”„λ‘œν† μ½œλ‘œ λ³€ν™˜ν•˜λŠ” 쀑간 λͺ¨λ“ˆμž„!

Kafka, ActiveMQ, RabbitMQ, Redis 등이 여기에 해당됨

참고 자료

[Celery] Python - Celeryλž€?

Python Celeryλž€

νƒœκ·Έ: ,

μΉ΄ν…Œκ³ λ¦¬:

μ—…λ°μ΄νŠΈ:

λŒ“κΈ€λ‚¨κΈ°κΈ°