Celery: ๋ธŒ๋กœ์ปค ์ง€์›์œผ๋กœ์„œ Redis๋ฅผ ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. [๊ฑฐ๋ถ€]

์— ๋งŒ๋“  2016๋…„ 06์›” 24์ผ  ยท  54์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: celery/celery

Redis์— ๋Œ€ํ•œ ์ง€์›์„ ์ œ๊ฑฐํ•˜๋ฉด RabbitMQ ๋˜๋Š” Kafka/nsq์— ์‹œ๊ฐ„์„ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Python 3์—์„œ asyncio๋กœ ์ด์‹ํ•˜๋Š” ๊ฑฐ๋Œ€ํ•œ ์ž‘์—…๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์‹ฌ๊ฐํ•˜๊ฒŒ ๊ณ ๋ ค๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์žฌ๋ฏธ๋กœ ์ด ์ž‘์—…์„ ํ•˜๋ ค๋ฉด ์šด์†ก ์ˆ˜๋‹จ์˜ ์ธ๊ธฐ๊ฐ€ ์ค‘์š”ํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ตญ ๋‚˜๋Š” ๋‚ด๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์„ ์„ ํƒํ•˜๊ฒ ์ง€๋งŒ ์ ์–ด๋„ ์—ฌ๊ธฐ์—์„œ ๋‹น์‹ ์˜ ์šฐ๋ ค๋ฅผ ํ‘œ๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Project Governance

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์•ˆ๋…•ํ•˜์„ธ์š”. ์ €๋Š” Redis Labs์—์„œ ์ผํ•˜๋ฉฐ ์ตœ๊ทผ๊นŒ์ง€ ์…€๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ์ž์˜€์Šต๋‹ˆ๋‹ค. @thedrow ๊ฐ€ ์ด ์‚ฌ์‹ค์„

๋ชจ๋“  54 ๋Œ“๊ธ€

ํ˜„์žฌ ์…€๋Ÿฌ๋ฆฌ์˜ ๋Œ€์•ˆ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: huey ๋ฐ rq ์ด๋Š” ๋ช…์‹œ์ ์œผ๋กœ redis๋ฅผ ๋ธŒ๋กœ์ปค๋กœ ์ง€์›ํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค. ์ƒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ’€๋ ธ์„ ๋•Œ ์•„๋ฌด ๊ฒƒ๋„ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

@ask sql ๋ธŒ๋กœ์ปค ์ง€์› ์ค‘๋‹จ์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ? ํ”„๋กœ๋•์…˜์—์„œ sql ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ๋งŽ์ด ์žˆ๋Š”์ง€ ์˜์‹ฌ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์ด ํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ์‹ค์ œ๋กœ ํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๋Š” ๋˜ํ•œ rabbitmq๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์ด ๋ง ๊ทธ๋Œ€๋กœ ํ•œ ๋ช…๋ น ๊ฑฐ๋ฆฌ์— ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋Š” ๋„์ปค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋” ์ด์ƒ _๊ทธ๋ ‡๊ฒŒ_ ์–ด๋ ต์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” RabbitMQ / Redis / SQS / Qpid ์ด์™ธ์˜ ๋‹ค๋ฅธ ๋ชจ๋“  ๋ธŒ๋กœ์ปค๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ธŒ๋กœ์ปค๋กœ์„œ์˜ SQL์— ๋Œ€ํ•œ ์ง€์›์„ ์ค‘๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค. :)

(๋ณต์ œํ•˜๋‹ค)

์ €๋Š” ์…€๋Ÿฌ๋ฆฌ ์ปค๋ฎค๋‹ˆํ‹ฐ์— ๊ทธ๋ ‡๊ฒŒ ์–ฝ๋งค์ด๋Š” ์‚ฌ๋žŒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋‚ด $0.02์— ๊ด€๊ณ„์—†์ด:

  • Redis๋Š” ์ •๋ง ์ธ๊ธฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. Google ํŠธ๋ Œ๋“œ๊ฐ€ ๋Œ€ํ‘œ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค๋ฉด ์ง€์›๋˜๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  ๋ธŒ๋กœ์ปค _combined_๋งŒํผ ์ธ๊ธฐ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ •๋ง ์ข‹์€ ๋ธŒ๋กœ์ปค _๋ฐ_ ๋ฐฑ์—”๋“œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(RabbitMQ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž„)
  • ๋Œ€๊ทœ๋ชจ ํด๋ผ์šฐ๋“œ ๊ณต๊ธ‰์—…์ฒด๊ฐ€ ์™„์ „ ๊ด€๋ฆฌํ˜• ์„œ๋น„์Šค๋กœ ๊ณ ์œ ํ•˜๊ฒŒ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ์šฐ๋ฆฌ๋Š” Redis๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค!

์œ ์ง€ ๊ด€๋ฆฌ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ์˜๊ฒฌ์— ๊ณต๊ฐํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ์กฐ์น˜๋Š” ์ง€์† ๊ฐ€๋Šฅ์„ฑ์„ ํ–ฅํ•œ ํ•œ ๊ฑธ์Œ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹น์‹ ์ด ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ '์ ˆ๋‹จ'์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฐฉ์ •์‹์˜ '๊ณต๊ธ‰' ์ธก๋ฉด์—์„œ ์ง€์—ญ ์‚ฌํšŒ์—์„œ ์…€๋Ÿฌ๋ฆฌ์— ๋” ๋งŽ์€ ๊ธฐ์—ฌ๋ฅผ ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?
์ปค๋ฐ‹ ๋ฐ PR์„ ๋Œ€์ถฉ ์‚ดํŽด๋ณด๋ฉด ๋‚ด๊ฐ€ ๊ธฐ์—ฌํ•œ ๋ช‡ ๊ฐœ์˜ ์˜คํ”ˆ ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๋น„๊ตํ•˜์—ฌ ์…€๋Ÿฌ๋ฆฌ๋Š” ์ฃผ๋กœ ํ•œ ์‚ฌ๋žŒ์˜ ์ž‘์—…์ž„์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@MaximilianR ๋‚˜ ์ž์‹ ์„ ์œ„ํ•ด ๋งํ•˜๊ธฐ:

  1. ์ด๊ฒƒ์€ ๊ฑท๊ธฐ์— ์ƒ๋‹นํ•œ ๊ทœ๋ชจ์˜ ์ฝ”๋“œ๋ฒ ์ด์Šค์ž…๋‹ˆ๋‹ค.
  2. ํŠนํžˆ ๋‹น์‹ ์ด ๋‹ค์‹œ๋งˆ์™€ ayncio์˜ ์ „๋ฌธ๊ฐ€๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ
  3. ๋ณด๊ณ ๋œ ๋ฌธ์ œ์˜ ๊นŠ์ด์— ๋Œ€ํ•œ ์ง๊ด€์ด ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜๋„ ์ €๋Š” ์…€๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์œผ๋ฉด ๊ธฐ๊บผ์ด ๋„์™€๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

@MaximilianR , ๋งŽ์€ ๊ธฐ์—ฌ์ž๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ ํ™•์‹คํžˆ ๋‚˜๋Š” ๋งŽ์€ ์ผ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๊ฐ€ ๋„ˆ๋ฌด ๋นจ๋ฆฌ ์„ฑ์žฅํ–ˆ๊ณ  ์–ด๋Š ์‹œ์ ์—์„œ ๋‚˜๋Š” ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ IRC/email/StackOverflow ๋“ฑ์—์„œ ์‚ฌ์šฉ์ž๋ฅผ ์ง€์›ํ•˜๋Š” ๊ฒƒ ์ค‘์—์„œ ์„ ํƒํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๋‹ค์ค‘ ์ฒ˜๋ฆฌ ํ’€ ๊ต์ฐฉ ์ƒํƒœ ๋ฌธ์ œ์™€ ๊ฐ™์€ ๋ฌธ์ œ๋Š” ์ง‘์ค‘ ์ฝ”๋”ฉ์— 6๊ฐœ์›”์ด ํ›จ์”ฌ ๋„˜๊ฒŒ ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์„ ๋ฉ˜ํ† ๋ง. ๊ทธ ์‹œ์ ์—์„œ ์šฐ๋ฆฌ๋Š” ๋‹ค์šด๋กœ๋“œ์—์„œ ๊ฑฐ์˜ RabbitMQ์˜ ํฌ๊ธฐ์˜€์ง€๋งŒ 8๋ช…์ด ํ’€ํƒ€์ž„์œผ๋กœ ์ผํ•˜๋Š” ๊ณณ์—์„œ๋Š” ๋‚˜๋ฐ–์— ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

์ ˆ๋‹จํ•ด์•ผ ํ•  ๋‹ค๋ฅธ ํ•ญ๋ชฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ Redis๋งŒํผ ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

amqp/kombu๋ฅผ ์™„์ „ํ•œ asyncio๋กœ ์ด์‹ํ•˜๋Š” ์ž‘์—…๋„ ์‹œ๊ฐ„์„ ๋งŽ์ด ๋‹จ์ถ•ํ–ˆ์ง€๋งŒ ์—ฌ๋Ÿฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ์™„๋ฃŒ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

@ask ์œ„์˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์—ฌ์ „ํžˆ SQS์— ๋…ธ๋ ฅ์„ ๊ธฐ์šธ์ด๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๊นŒ? ์—ฌ๊ธฐ์— ์—ด๋ฆฐ SQS ํ‹ฐ์ผ“์ด ํ•˜๋‚˜๋งŒ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ๋ฌธ์„œ์— "์‹คํ—˜์ " ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. SQS์˜ ํ˜„์žฌ ์ƒํƒœ์™€ ํ–ฅํ›„ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋Œ€ํ•ด ์กฐ์–ธํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์šฐ๋ฆฌ๋Š” ํ”„๋กœ๋•์…˜์—์„œ Celery + SQS๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋ฏ€๋กœ ์ด๋ฅผ ์œ„ํ•ด ์•ฝ๊ฐ„์˜ ๋…ธ๋ ฅ์„ ๊ธฐ์šธ์ผ ์ˆ˜๋Š” ์žˆ์ง€๋งŒ SQS๊ฐ€ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ์žฅ๊ธฐ ๊ณ„ํš์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ์—๋Š” ๊ทธ๋Ÿฐ ์ƒํ™ฉ์— ๋น ์ง€๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@ ์œ„์—์„œ

ํ™•์‹คํžˆ ํ”„๋กœ์ ํŠธ์— ์ตœ์„ ์„ ๋‹คํ•˜์ง€๋งŒ Redis ์ง€์›์ด ์ค‘๋‹จ๋˜๋ฉด ๋‚ด๋ถ€์ ์œผ๋กœ Celery๋ฅผ ์ œ๊ฑฐํ•˜๋„๋ก ํ™•์‹คํžˆ ๋ฐ€์–ด๋ถ™์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™œ ์šฐ๋ฆฌ๊ฐ€ RabbitMQ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์ธ์ง€ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด ๋น„๊ณต๊ฐœ๋กœ ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ณต๊ฐœ์ ์œผ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ๋ฅผ ๋น„๋‚œํ•˜๊ณ  ์‹ถ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

๊ด€๋ จ: Docker์—์„œ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜์˜ ๋ช…๋ น์ด๋ผ๊ณ  ์ œ์•ˆํ•˜๋ฉด ํšจ๊ณผ์ ์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ๋‚˜๋จธ์ง€ ์‚ฌ๋žŒ๋“ค์ด ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ์‹์€ ๋ฐ˜๋“œ์‹œ ๊ทธ๋Ÿฐ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

@nicksloan SQS๋Š” ์ด์ œ ๋งˆ์Šคํ„ฐ ๋ฌธ์„œ์—์„œ ์ง€์›๋˜๋Š” ์ „์†ก์œผ๋กœ ๋‚˜์—ด๋ฉ๋‹ˆ๋‹ค. http://docs.celeryproject.org/en/master/getting-started/brokers/index.html

๋น„๋™๊ธฐ I/O๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ SQS ์ „์†ก์„ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๋Š” ์ž‘์—…์€ 1000๋‹ฌ๋Ÿฌ๊ฐ€ ์กฐ๊ธˆ ๋„˜๋Š” ํ›„์›์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

@scoates Redis ์ „์†ก์€ ๋ฉ”์‹œ์ง€ ์ฝ๊ธฐ์— ๋น„๋™๊ธฐ I/O๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํ•จ๊ป˜ ํ•ดํ‚น๋˜์—ˆ์ง€๋งŒ ๊ฒŒ์‹œ๋Š” ์—ฌ์ „ํžˆ ๋™๊ธฐ์‹์ด๊ธฐ ๋•Œ๋ฌธ์— ๋” ๋‚˜์œ ์ƒํ™ฉ์— ์žˆ์Šต๋‹ˆ๋‹ค. Python redis ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋™๊ธฐ์‹์ด๋ฏ€๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ฝ๋Š” ๋ฐ์—๋„ ์—ฌ์ „ํžˆ ์—ฌ๋Ÿฌ ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉฐ ์ž‘๋™ ๋ฐฉ์‹์— ๋Œ€ํ•œ ๋งŽ์€ ๋ถˆํ™•์‹ค์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒ„๊ทธ๋Š” ์‰ฝ๊ฒŒ ์ˆจ๊ธธ ์ˆ˜ ์žˆ์œผ๋ฉฐ, redis-py ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ์šฐ๋ฆฌ๊ฐ€ ๋น„์ •ํ†ต์ ์ธ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•  ๋•Œ ๊ธ‰๊ฒฉํ•œ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ €๋Š” Redis๋ฅผ ์ง€์›ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ •๋ง ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” RabbitMQ/Pivotal์—์„œ ์ผํ•  ๋•Œ Celery๊ฐ€ ๊ตฌํ˜„ํ•˜๋Š” ํŒจํ„ด์— ๋Œ€ํ•œ Python์˜ ๊ณตํ†ต ์†”๋ฃจ์…˜์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ๋Š๊ผˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๊ฒƒ์„ ์œ„ํ•ด ์‹ธ์šฐ๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ํšŒ์‚ฌ๊ฐ€ ๊ณ„์† ์ž‘๋™ํ•˜๋„๋ก ํˆฌ์žํ•˜์ง€ ์•Š์œผ๋ฉด ๋‚˜๋Š” ์†Œ๋ฐฉ์„ ๋– ๋‚  ๊ฒƒ์ด๊ณ  ์ตœ์•…์˜ ๊ฒฝ์šฐ ์ง€๊ธˆ์ฒ˜๋Ÿผ ์‚ฌ๋žŒ๋“ค์ด ํ”„๋กœ์ ํŠธ๋ฅผ ๋น„ํŒํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์šด์†ก๊ณผ ๊ด€๋ จ๋œ ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‚ด ์‚ถ์„ ๋” ๋น„์ฐธํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ  ์‚ฌ๊ธฐ๋ฅผ ๋–จ์–ด๋œจ๋ฆฝ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์…€๋Ÿฌ๋ฆฌ์˜ ์—ญ์‚ฌ๋ฅผ ๊ณ ๋ คํ•  ๋•Œ ๋„ˆ๋ฌด ๊ธ‰์ง„์ ์ผ ์ˆ˜ ์žˆ์ง€๋งŒ RabbitMQ ๋Œ€์‹  Redis๋งŒ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด ๋ณด์…จ์Šต๋‹ˆ๊นŒ?

@MaximilianR ๊ณ ๋ คํ–ˆ์ง€๋งŒ ์ œ ์—ด์ •์€ ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ๊ณผ ์˜ฌ๋ฐ”๋ฅธ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ๊ตฌ์ถ•์— ์žˆ์Šต๋‹ˆ๋‹ค. Redis๋Š” ์•„์ง ๋ฉ”์‹œ์ง€ ํ™•์ธ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์ž‘๋™ํ•˜๋Š” BRPOPLPUSH ๊ตฌํ˜„์„ ์ œ๊ณตํ•˜์ง€ ์•Š์•˜์œผ๋ฉฐ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ ๋ฒฝ์‹œ๊ณ„ ์‹œ๊ฐ„์— ์˜์กดํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์‚ฌ์‹ค์„ ์ธ์ •ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์‚ฌ์‹ค์ด ๋ฐํ˜€์ง€๋ฉด์„œ ๋”์šฑ ์กฐ์‹ฌ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. RabbitMQ๋Š” ์ ์–ด๋„ ๋ฌธ์ œ ๊ณต๊ฐ„์„ ์‹ฌ๊ฐํ•˜๊ฒŒ ๊ณต๊ฒฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ Kafka ๋ฐ NSQ์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ž‘์—… ๋Œ€๊ธฐ์—ด์„ ๊ฐ„๋‹จํ•œ ๋ชฉ๋ก ์ž‘์—…์œผ๋กœ ์ทจ๊ธ‰ํ•˜๊ณ  ์žˆ์ง€๋งŒ Celery๊ฐ€ ๊ทธ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋˜๊ธฐ๋ฅผ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค. :)

@scoates : ๋‚˜๋Š” ๋‚ด๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ฐœ์ „ํ•˜๊ณ  ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด ๋งํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. 2016๋…„์— "rabbitmq๋Š” ๋ฐฐํฌํ•˜๊ธฐ ์–ด๋ ต๋‹ค"๋Š” ๋ง์€ ๋ง๋„ ์•ˆ๋˜๋Š” ์†Œ๋ฆฌ์˜€๋‹ค. ์–ด๋”˜๊ฐ€์— ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์•„๋ฌด๊ฒƒ๋„ ๋ชจ๋ฅธ๋‹ค๊ณ  ํ•ด๋„ ์ •๋ง ๋„์›€์ด ๋˜๋Š” ๋„์ปค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž˜๋ชป๋œ ๊ฐ€์ •์„ ํ•˜์ง€ ๋งˆ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@ ์šฐ๋ฆฌ์™€ ํ•จ๊ป˜ ํ™•์ธํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. Celery๋Š” ํ›Œ๋ฅญํ•œ ์ œํ’ˆ์ด๋ฉฐ ๊ท€ํ•˜(๋ฐ ์ปค๋ฎค๋‹ˆํ‹ฐ)๊ฐ€ ๊ฐ€์ง„ ์ œํ•œ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ณ ๋ คํ•  ๋•Œ ํ•ต์‹ฌ ์ œํ’ˆ์— ์ง‘์ค‘ํ•˜๋Š” ๊ฒƒ์ด ์ตœ์„ ์˜ ๊ฒฐ์ •์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ์—ฌ๋Ÿฌ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ผํ•œ ํ›Œ๋ฅญํ•œ ๊ธฐ๋Šฅ์„ ์‹œ๋„ํ•˜๊ณ  ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ์–ด๋ ค์šด ์ผ์ธ์ง€ ์ƒ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์†Œ๋น„์ž ์ž…์žฅ์—์„œ๋Š” ์„ ํƒ์˜ ํญ์ด ๋„ˆ๋ฌด ๋„“์–ด ์ œํ’ˆ์ด ๋ณต์žกํ•ด์ง€๋Š” ๊ฒƒ ๊ฐ™์•„์š”. ๋‚˜๋Š” ์ด๊ฒƒ์ด ์•„๋งˆ๋„ ์ผ๋ถ€ ์‚ฌ์šฉ์ž๋ฅผ ํ™”๋‚˜๊ฒŒ ํ•  ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•˜์ง€๋งŒ ๋” ์ ์€ ๋ธŒ๋กœ์ปค๋ฅผ ๊ณ ์ˆ˜ํ•˜๋Š” ๊ฒƒ์ด ์ œํ’ˆ์— ๋Œ€ํ•ด ์˜ฌ๋ฐ”๋ฅธ ์ผ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. AMQP๊ฐ€ ํ‘œ์ค€์ด๊ณ  ์ž˜ ๋ฐ›์•„๋“ค์—ฌ์ง€๋Š” ํ”„๋กœํ† ์ฝœ์ธ ๊ฒƒ์— ์ดˆ์ ์„ ๋งž์ถ”๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  rabbitmq๊ฐ€ ์•„์ฃผ ์ข‹์€ ๊ตฌํ˜„์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ •๋ง ํ•  ์ผ์ด ๋งŽ์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์€ ์Šฌํ”ˆ ์ผ์ด์ง€๋งŒ, ๋ชจ๋“  ์šด์†ก ์ˆ˜๋‹จ๊ณผ ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ํ•ฉ์น˜๋ฉด ์ผ์ฃผ์ผ์— ๋ช‡ ์‹œ๊ฐ„์œผ๋กœ ์ง€์† ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Redis ํ”„๋กœํ† ์ฝœ์€ ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ „์†ก์„ ์™„์ „ํžˆ ๋น„๋™๊ธฐ์‹์œผ๋กœ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ค์šธ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. Celery๊ฐ€ ๋ชจ๋“  Tornado ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ ˆ์ด์–ด๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋™์ผํ•œ ๋ ˆ์ด์–ด๋ฅผ asyncio ๋ฐ Twisted์— ๋Œ€ํ•ด ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์žˆ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

Python์€ stdlib์˜ asyncio๋กœ ํฌ๊ฒŒ ๋ณ€ํ™”ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ƒˆ๋กœ์šด ์›น ํ”„๋ ˆ์ž„์›Œํฌ, ์ƒˆ๋กœ์šด ๋„คํŠธ์›Œํฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ ๊ฑฐ์˜ ์ „์ฒด ์ƒํƒœ๊ณ„๊ฐ€ ์ ์‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋” ์ด์ƒ ์ž์ฒด ์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ž‘์—…์ด ์กฐ๊ธˆ ๋” ์‰ฌ์›Œ์ง€์ง€๋งŒ ์ „ํ™˜์—๋Š” ์•ฝ๊ฐ„์˜ ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์—ฌ๋Ÿฌ ์–ธ์–ด๋ฅผ ์ง€์›ํ•˜๋Š” ์ƒˆ ๋ฉ”์‹œ์ง€ ํ”„๋กœํ† ์ฝœ์ด ์žˆ์œผ๋ฏ€๋กœ Go ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์œผ๋กœ ์ƒˆ ์ž‘์—…์ž๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. Redis๋Š” ๋ฉ”์‹œ์ง€ ํ—ค๋”, ์†์„ฑ ๋“ฑ์„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์‹œ์ง• ์ƒํ˜ธ ์šด์šฉ์„ฑ์— ๊ฐ€์žฅ ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. AMQP ํ”„๋กœํ† ์ฝœ์€ ์›๋ž˜ ์‚ฌ์šฉ ์‚ฌ๋ก€ ์ค‘ ํ•˜๋‚˜์˜€๊ธฐ ๋•Œ๋ฌธ์— ํ™•์‹คํžˆ ์šฐ์œ„์— ์žˆ์Šต๋‹ˆ๋‹ค.

@sk ๋‚ด ์ ‘๊ทผ ๋ฐฉ์‹์€ ํšŒ์‚ฌ๊ฐ€ ๋ธŒ๋กœ์ปค๋ฅผ ์œ ์ง€ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ Redis ์—ฐ๊ตฌ์†Œ์˜ ๋ˆ„๊ตฐ๊ฐ€์™€ ์ด์•ผ๊ธฐ๋ฅผ ํ•ด๋ณด๊ณ  ์šฐ๋ฆฌ๊ฐ€ ์–ด๋–ค ๊ด€์‹ฌ์„ ๋Œ ์ˆ˜ ์žˆ๋Š”์ง€ ๋ณด๋„๋ก ํ•ฉ์‹œ๋‹ค.
MongoDB ๋ฐ ๊ธฐํƒ€ ์„œ๋น„์Šค๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.
SQL ๋ธŒ๋กœ์ปค์˜ ๊ฒฝ์šฐ ์ข‹์€ ์ƒ๊ฐ์ด ์•„๋‹ˆ๋ฉฐ ์ง€์›ํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๋Œ€์‹  ์ถ”์ถœํ•˜์—ฌ ์œ ์ง€ ๊ด€๋ฆฌํ•  ์‚ฌ๋žŒ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ด€์‹ฌ์ด ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์œผ๋ฉด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์ผ์ข…์˜ ๋ธŒ๋กœ์ปค๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” Pub/Sub ๊ธฐ๋Šฅ์ด ์žˆ์ง€๋งŒ ํ˜„์žฌ ๊ตฌํ˜„๋˜์–ด ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— Postgres์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์„ ๋น„์ถ”์ฒœํ•˜๊ณ  ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€ ๋ณผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์œ ์ง€ ๋ณด์ˆ˜๋ฅผ ์ธ์ˆ˜ํ•˜๊ฑฐ๋‚˜ ํ›„์›์„ ํ†ตํ•ด ์ด๋ฅผ ์œ„ํ•ด ๋‹จ๊ณ„๋ฅผ ๋ฐŸ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ์šฐ๋ฆฌ๋Š” ์‚ฌ๋žŒ๋“ค์ด ํ•„์š”๋กœ ํ•˜๋Š” ์ œํ’ˆ์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ ์•„๋ฌด๋„ ์ง€์›ํ•˜๊ณ  ์‹ถ์–ดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ์‹œ์ ์—์„œ ์ด 18ํ‘œ๋ฅผ ๋ฐ›์„ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด Redis Labs๋ฅผ ๋‹จ๋…์œผ๋กœ ํ”๋“ค ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. :)

๊ทธ๋Ÿฌ๋‚˜ ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ํšŒ์‚ฌ๊ฐ€ ๊ณ„์† ์ž‘๋™ํ•˜๋„๋ก ํˆฌ์žํ•˜์ง€ ์•Š์œผ๋ฉด ๋‚˜๋Š” ์†Œ๋ฐฉ์„ ๋– ๋‚  ๊ฒƒ์ด๊ณ  ์ตœ์•…์˜ ๊ฒฝ์šฐ ์ง€๊ธˆ์ฒ˜๋Ÿผ ์‚ฌ๋žŒ๋“ค์ด ํ”„๋กœ์ ํŠธ๋ฅผ ๋น„ํŒํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์šด์†ก๊ณผ ๊ด€๋ จ๋œ ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‚ด ์‚ถ์„ ๋” ๋น„์ฐธํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ  ์‚ฌ๊ธฐ๋ฅผ ๋–จ์–ด๋œจ๋ฆฝ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ์—์„œ redis ๋ธŒ๋กœ์ปค์™€ ํ•จ๊ป˜ celery๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๊ทธ๊ฒƒ์— ์˜์กดํ•˜๊ณ  ์žˆ์ง€๋งŒ ๊ทธ ์˜๊ฒฌ์— ๊ฐ•๋ ฅํžˆ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋†’์€ ์ˆ˜์ค€์˜ ํ’ˆ์งˆ์„ ์œ ์ง€ํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ์ƒ๋Ÿฌ๋ฆฌ๋ผ๋Š” ์ด๋ฆ„์„ ๋ถˆ๋ฆฌ๊ณ  ๋ชจ๋“  ์‚ฌ์šฉ์ž๋ฅผ ๋ถˆํ–‰ํ•˜๊ฒŒ ๋งŒ๋“ค ๋ฟ์ž…๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”. ์ €๋Š” Redis Labs์—์„œ ์ผํ•˜๋ฉฐ ์ตœ๊ทผ๊นŒ์ง€ ์…€๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ์ž์˜€์Šต๋‹ˆ๋‹ค. @thedrow ๊ฐ€ ์ด ์‚ฌ์‹ค์„

@dvirsky ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Redis์— ๋ฐ›์œผ๋ฉฐ , ์ด ๋ฐฑ์—”๋“œ๋ฅผ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด(์˜ˆ๋ฅผ ๋“ค์–ด) Redis ์ธก์—์„œ ์ตœ์ƒ์˜ ์†”๋ฃจ์…˜์„ ์ฐพ๋Š” ๋ฐ ์ฐธ์—ฌํ•˜๊ณ  ์ž ์žฌ์ ์œผ๋กœ ๊ตฌํ˜„์—์„œ ํŠน์ • ์‚ฌํ•ญ์„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด Redis ๋ฉ”์‹œ์ง• ์ง€์›์„ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค. HA ์ง€์› ๊ฒฝํ—˜์„ ๊ฐ–๊ธฐ ์œ„ํ•ด ์–ด๋Š ์‹œ์ ์—์„œ Sentinel/Redis Cluster๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฑ์—”๋“œ์˜ ๊ธฐ๋Šฅ์„ ๊ฐ•์กฐํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ํ•„์š”ํ•œ ๋…ธ๋ ฅ์„ ํ‰๊ฐ€ํ•˜๊ณ  ์žˆ๋Š” ๋น ๋ฅธ ์‹œ์ผ ๋‚ด์— ์ข‹์€ ์†Œ์‹์ด ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ •๋ง ์ข‹์€ ์†Œ์‹์ž…๋‹ˆ๋‹ค! ๋‚˜๋Š” ๋‹น์‹ ์ด ๊ทธ๊ฒƒ์— ์ปค๋ฐ‹ํ•˜๊ธฐ ์ „์— ๊ด€๋ จ๋œ ์ž‘์—…์„ ์•Œ๊ณ  ์‹ถ์–ดํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์™„์ „ํžˆ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค :)

์ง€๊ธˆ ์—ฌ๊ธฐ ์ƒˆ๋ฒฝ 3์‹œ์ด๊ณ  ๋ฌธ์ œ ๋ชฉ๋ก์„ ์ˆ˜์ง‘ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ์—ฌ๊ธฐ์— ๋ช‡ ๊ฐ€์ง€ ์งง์€ ๋ฉ”๋ชจ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

Celery๋Š” Redis์— ๋Œ€ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๊ตฌํ˜„๋˜๋Š” ๊ธฐ๋Šฅ ์„ธํŠธ๋ฅผ ๋Œ€์‹  ์ •์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
AMQP API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ผ๋ฐ˜์ ์ธ ๋ฐฉ์‹์œผ๋กœ ๋ฉ”์‹œ์ง•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฆ„-๋Œ€๊ธฐ์—ด ๋ฉ”์‹œ์ง•, ๊ฒŒ์‹œ/๊ตฌ๋… ๋ฐ ์ฃผ์ œ ๋ผ์šฐํŒ…. ํ† ํ”ฝ ๋ผ์šฐํŒ…์€ ์—„๊ฒฉํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์€ ์•„๋‹ˆ์ง€๋งŒ ๋‚˜๋จธ์ง€๋Š” 1) ์ž‘์—… ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ, 2) ๋ชจ๋‹ˆํ„ฐ๋ง ์ด๋ฒคํŠธ ๋ณด๋‚ด๊ธฐ/๋ฐ›๊ธฐ, 3) ์ž‘์—…์ž์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๊ธฐ(์˜ˆ: ์ข…๋ฃŒ/๋™์‹œ์„ฑ ์ฆ๊ฐ€ ๋“ฑ)์™€ ๊ฐ™์€ Celery์˜ ์ฃผ์š” ๊ธฐ๋Šฅ์— ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ).

1) ์ž‘์—…์— ๋Œ€ํ•ด ์ž‘์—…์ž๋ฅผ ์ฐจ๋‹จํ•˜์ง€ ์•Š๋„๋ก ๋น„๋™๊ธฐํ™”๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ๋ฒ„์ „์€ ๋™๊ธฐ์‹ redis-py ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํ•ดํ‚นํ–ˆ๋‹ค.
๊ทธ๊ฒƒ์€ ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์†Œ๋น„ํ•˜์ง€๋งŒ ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€ ์ •ํ™•ํžˆ ์•Œ์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ์ „ํžˆ ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋น„๋™๊ธฐ redis ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ด๋ฏธ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Tornado/asyncio ๋˜๋Š” ์›์‹œ ์ž‘์—…์„ ๋งŽ์ด ํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋Š” ๊ทธ๋ ‡์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋„ˆ๋ฌด ๊นŒ๋‹ค๋กœ์›Œ.

2) ์—ฐ๊ฒฐ ๊ด€๋ฆฌ

์šฐ๋ฆฌ๋Š” ์ž‘์—…์„ ์†Œ๋น„ํ•˜๋Š” ํ•˜๋‚˜์˜ ์—ฐ๊ฒฐ๊ณผ pubsub๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•˜๋‚˜์˜ ์—ฐ๊ฒฐ, ๊ทธ ๋‹ค์Œ ํ’€์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฉ”์‹œ์ง€ ํ™•์ธ ๋˜๋Š” ํ™•์ธ๋˜์ง€ ์•Š์€ ๋ฉ”์‹œ์ง€ ๋ณต์›๊ณผ ๊ฐ™์€ ๋Œ€์—ญ ์™ธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์—ฐ๊ฒฐ ์ˆ˜ ์—ฌ๊ธฐ์„œ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ์™€ ๊ด€๋ จํ•˜์—ฌ ์•ฝ๊ฐ„์˜ ํ˜ผ๋ž€์ด ์žˆ์œผ๋ฉฐ ์‚ฌ์šฉ ํ›„ ๋ชจ๋“  ์—ฐ๊ฒฐ์„ ๋‹ซ์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3) ๋ฉ”์‹œ์ง€ ์ˆ˜์‹ ํ™•์ธ

๋ฉ”์‹œ์ง€๋Š” ํ™•์ธ๋œ ํ›„์—๋งŒ ์„œ๋ฒ„์—์„œ ์ œ๊ฑฐ๋˜๋ฉฐ ๋ชจ๋“  ๋ฉ”์‹œ์ง€ ์†Œ๋น„์ž๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณต์›ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋Š” ๊ฐ€์‹œ์„ฑ ์ œํ•œ ์‹œ๊ฐ„์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธ€์Ž„, ์—‰๋ง์ด์•ผ.
๋‚˜์ค‘์— ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@ask ๋•๋ถ„์— "1" ์ง€์ ์— ๋Œ€ํ•ด ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜์กดํ•˜๋Š” ๋Œ€์‹  ๋ธŒ๋กœ์ปค ๋‚ด๋ถ€์—์„œ ์ง์ ‘ ๋ณด๋‚ด๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ช…๋ น์— ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ ๋น„๋™๊ธฐ Redis ์ง€์›์„ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹จ 2๊ฐœ, ๊ทธ๋ฆฌ๊ณ  ์ผ๋ถ€ ๋‹ค๋ฅธ ์ž‘์€ ๋ฌธ์ œ๋Š” ๊ณง ์†”๋ฃจ์…˜์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„ ์ž‘๋™ํ•˜์ง€๋งŒ ๋ฉ”์‹œ์ง€ ์Šน์ธ์œผ๋กœ ์ธํ•ด ๋ฉ”์‹œ์ง€๊ฐ€ ์†์‹ค๋  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์ง€๋งŒ ์Šน์ธ ์—๋ฎฌ๋ ˆ์ด์…˜ ์ด์ „์— ์ƒํ™ฉ์ด ํ›จ์”ฌ ๋” ๋‚˜๋นด๊ธฐ ๋•Œ๋ฌธ์— ์œ„์‹œ๋ฆฌ์ŠคํŠธ ํ•ญ๋ชฉ์ž…๋‹ˆ๋‹ค. ์ž‘์—…์ž๋Š” ๋™๊ธฐ์‹ Redis ํด๋ผ์ด์–ธํŠธ์— ์˜ํ•ด ์ฐจ๋‹จ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋กœ ์ธํ•ด ์„ฑ๋Šฅ์ด ์ €ํ•˜๋˜๊ณ  ๋“œ๋ฌธ ๊ฒฝ์šฐ์—๋Š” ์ž‘์—…์ž๊ฐ€ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.

1) ์ž‘์—…์— ๋Œ€ํ•ด ์ž‘์—…์ž๋ฅผ ์ฐจ๋‹จํ•˜์ง€ ์•Š๋„๋ก ๋น„๋™๊ธฐํ™”๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ํ™•์ธํ•œ ๊ฒฐ๊ณผ ๋น„๋™๊ธฐ redis ํด๋ผ์ด์–ธํŠธ๋Š” ์™„๋ฒฝํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค(ํ† ๋„ค์ด๋„์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€๊ฐ€ ์žˆ์Œ). ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์—์„œ ๋‚ด๊ฐ€ ์—ฌ๋Ÿฌ ๋ฒˆ ์ˆ˜ํ–‰ํ•œ ๊ฒƒ์€ ์Šค๋ ˆ๋“œ ํ’€ ์‹คํ–‰๊ธฐ์™€ ํ“จ์ฒ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ redis-py๊ฐ€ ๋น„๋™๊ธฐ ํด๋ผ์ด์–ธํŠธ์ฒ˜๋Ÿผ ์ž‘๋™ํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋™์‹œ ์ž‘์—…์ด ๋„ˆ๋ฌด ๋งŽ์ง€ ์•Š๊ณ  ๋ช‡ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•œ ๋น„๋™๊ธฐ ํด๋ผ์ด์–ธํŠธ๋ณด๋‹ค ๋” ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

ํŽธ์ง‘: ๋‚˜๋Š” ์•„์ง ํŒŒ์ด์ฌ์˜ asyncio๋กœ ์ง์ ‘ ์ž‘์—…ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ, ๋‚ด๊ฐ€ ๋ณธ ๋ฐ”๋กœ๋Š” ํ† ๋„ค์ด๋„์™€ ๋งค์šฐ ์œ ์‚ฌํ•˜๋ฏ€๋กœ ์ด ํŒจํ„ด์€ ์•„๋งˆ๋„ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@dvirsky ์šฐ๋ฆฌ๋Š” ๋˜ํ•œ fork ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. Python์€ ์ด ๊ฒฝ์šฐ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฉฐ cpython์šฉ ํŒจ์น˜๊ฐ€ ์ƒ์„ฑ๋œ ๊ฒฝ์šฐ์—๋„ ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ์•ˆ์ „ํ•˜๋ ค๋ฉด ๊ธฐ์กด Python ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ์ตœ์†Œํ•œ C ํ™•์žฅ์„ ์กฐ์‹ฌ์Šค๋Ÿฝ๊ฒŒ ํŒจ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์–ผ๋งˆ ์ „์— Python ๋ฒ„๊ทธ ์ถ”์ ๊ธฐ์—์„œ ์‹คํ˜„๋˜์—ˆ์œผ๋ฉฐ ์ด๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ ๋น„๋™๊ธฐ I/O๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ˆ˜ํ–‰ํ•œ ์ด์œ ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ํ•ต์‹ฌ ๋น„๋™๊ธฐ I/O ์ง€์›์ด ํฌํ•จ๋œ Python์˜ ๋ฏธ๋ž˜์ด๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์œผ๋กœ ๊ทธ๊ณณ์œผ๋กœ ์ด๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@antirez ๋‹ค์‹œ:

ํฌ์ธํŠธ "1"์— ๋Œ€ํ•ด ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜์กดํ•˜๋Š” ๋Œ€์‹  ๋ธŒ๋กœ์ปค ๋‚ด๋ถ€์—์„œ ์ง์ ‘ ๋ณด๋‚ด๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ช…๋ น์— ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ ๋น„๋™๊ธฐ Redis ์ง€์›์„ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๋ ‡๊ฒŒํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. redis-py์˜ ๋Œ€๋ถ€๋ถ„์˜ ์ฝ”๋“œ๋Š” ๋ช…๋ น ๊ตฌํ˜„์ด ์•„๋‹Œ ๋„คํŠธ์›Œํ‚น ๋ฐ ์—ฐ๊ฒฐ ๊ด€๋ฆฌ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค...

@dvirsky ์šฐ๋ฆฌ๋Š” ์ด๋ฅผ ์œ„ํ•ด ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋Š” ์—ฐ๊ฒฐ ๊ด€๋ฆฌ ์ œ๋„ค๋ฆญ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํ‚น์ด ๋งŽ์ง€๋Š” ์•Š์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์ด ํ”„๋กœํ† ์ฝœ์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๊ฑฐ์˜ โ€‹โ€‹์ˆ˜๋™์œผ๋กœ ๋˜๋Š” ๊ธฐ์กด redis ํด๋ž˜์Šค์— ์—ฐ๊ฒฐํ•˜์—ฌ ์ด๋ฏธ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@ask ์˜ˆ, redis ํ”„๋กœํ† ์ฝœ์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๊ธฐ ์œ„ํ•œ ์ „์šฉ C ํ™•์žฅ์ธ hiredis๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. IIRC๋Š” ๋น„๋™๊ธฐ ํด๋ผ์ด์–ธํŠธ์—์„œ๋„ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ redis๋ฅผ ๋น„๋™๊ธฐํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ์ „๋žต์„ ์„ ํƒํ•˜์…จ์Šต๋‹ˆ๊นŒ?

์–ด์จŒ๋“  ์ตœ๊ทผ ๋น„๋™๊ธฐ ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ์‚ดํŽด๋ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” ์ง€๋‚œ 1๋…„ ๋ฐ˜ ๋™์•ˆ ํŒŒ์ด์ฌ ์ž‘์—…์„ ๋งŽ์ด ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. https://github.com/leporo/tornado-redis ๊ฐ€ ๊ทธ๋‹ค์ง€ ํ™œ์„ฑํ™”๋˜์ง€ ์•Š์•˜์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ „๋žต์ด ๋งŽ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ ๋ฃจํ”„์— ์†Œ์ผ“์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์˜ˆ๋ฅผ ๋“ค์–ด BRPOP๋ฅผ ๋™๊ธฐ์ ์œผ๋กœ ๋ณด๋‚ธ ๋‹ค์Œ ์†Œ์ผ“์„ ์ฝ์„ ์ˆ˜ ์žˆ์„ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ์‘๋‹ต์„ ๋™๊ธฐ์ ์œผ๋กœ ์ฝ์Šต๋‹ˆ๋‹ค. ;)

์‘๋‹ต์„ ํŒŒ์‹ฑํ•˜๋Š” ๋„์ค‘์— ๋‹ค์‹œ ์‹œ์ž‘ํ•  ๋ฐฉ๋ฒ•์ด ์—†๊ธฐ ๋•Œ๋ฌธ์—

@dvirsky ํ”„๋กœํ† ์ฝœ ๊ตฌ๋ฌธ ๋ถ„์„ ์ด์™ธ์˜ ๋‹ค๋ฅธ ์šฉ๋„๋กœ hiredis๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ gevent/eventlet๊ณผ์˜ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ(๋‹ค์ค‘ ์ฒ˜๋ฆฌ ๋Œ€์‹  ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ)๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  Celery๊ฐ€ PyPy์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฒฝ์šฐ ์ž„์˜์˜ ์ด์‹์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

@dvirsky ๋˜ํ•œ py-hiredis๋Š” ํ˜„์žฌ ํ”„๋กœํ† ์ฝœ ๊ตฌ๋ฌธ ๋ถ„์„ ์ด์™ธ์˜ ๊ธฐ๋Šฅ์„ ๋…ธ์ถœํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Python์€ ์–ด๋Š ์‹œ์ ์—์„œ ์ ์ ˆํ•œ ๋น„๋™๊ธฐ redis ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•„์š”ํ•  ๊ฒƒ์ด๋ฏ€๋กœ ์ ์ ˆํ•œ ๊ฒƒ์„ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ๋‚˜์œ ์ƒ๊ฐ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด redis-py์—์„œ ์ผ๋ถ€ ํ”„๋กœํ† ์ฝœ ๊ตฌ๋ฌธ ๋ถ„์„ ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•ฉ๋‹ˆ๋‹ค.

๋‹น์‹ ์€ ์ง€๊ธˆ gevent๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

@dvirsky ์šฐ๋ฆฌ๋Š” ๋น„๋™๊ธฐ I/O๋กœ gevent, eventlet ๋ฐ ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ(prefork)์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•˜๋‚˜๋ฅผ ์ง€์›ํ•˜๋ฉด ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค๋ฅธ ํ•˜๋‚˜๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, gevent๊ฐ€ ์ž‘์—…์— ๋” ์ ํ•ฉํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํƒœ์Šคํฌ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์“ฐ๊ธฐ๋งŒ ํ•˜๊ฑฐ๋‚˜ HTTP ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ.
gevent์—์„œ FD๋ฅผ ๋…ธ์ถœํ•˜๊ณ  ๋“ฑ๋กํ•˜๋Š” ๊ฒƒ์€ ์‰ฝ์ง€๋งŒ py-hiredis์—์„œ ์ถ”๊ฐ€ ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

@dvirsky ๋‹ค์Œ์€ https://gist.github.com/GuoJing/5875326
gevent์™€ ํ˜‘๋ ฅํ•˜๋ ค๋ฉด FD๋ฅผ ๋…ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ €๋Š” ์ตœ๊ทผ์— Redis์— ๋Œ€ํ•œ celery ์ง€์›์„ ๋‘˜๋Ÿฌ์‹ผ ๋ฌธ์ œ์— ๋Œ€ํ•ด ์†Œ๊ฐœ๋ฐ›์•˜๊ณ  ์ฒ ์ €ํ•œ ๋ถ„์„์„ ์™„๋ฃŒํ•˜์ง€๋Š” ์•Š์•˜์ง€๋งŒ asyncio๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ python redis ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ž‘์„ฑ/์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€ ์ƒ๊ฐ์ฒ˜๋Ÿผ ๋“ค๋ฆฌ์ง€๋งŒ ์ตœ๊ทผ ๋ฒค์น˜๋งˆํฌ์—์„œ๋Š” ๊ทธ๊ฒŒ ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ํ•œ ๋งŽ์€ ์„ฑ๋Šฅ์„ ๋Œ์–ด๋‚ด๊ธฐ ์œ„ํ•ด asyncio+libuv ์œ„์— ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ฐธ์กฐ๋ฅผ ์œ„ํ•ด

์ด ์ž…์žฅ์— ๋ฐ˜๋Œ€ํ•˜๊ฑฐ๋‚˜ ๋ฌธ์ œ๋ฅผ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ์ž์ด์ž ์‚ฌ์šฉ์ž๋กœ์„œ Redis ํด๋ผ์ด์–ธํŠธ์— ๋Œ€ํ•œ ์ œ ๊ฒฝํ—˜์— ๋”ฐ๋ฅด๋ฉด libuv์— ์ „์ ์œผ๋กœ ์˜์กดํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ตœ๋Œ€ ์„ฑ๋Šฅ์„ ๋‹ฌ์„ฑํ•˜๋Š” ๊ฒƒ์„ ์‹ค์ œ๋กœ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ณ ์šฉ์€ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค. libuv์—๋Š” ์‹ค์ œ๋กœ ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” io ์†๋„๋ฅผ ๋Šฆ์ถ”๋Š” ์ˆ˜๋งŽ์€ ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ioredis๋Š” Node๋ฅผ ํ†ตํ•ด ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ์„ฑ๋Šฅ์ด ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋‚ด๊ฐ€ ์ƒ์ƒํ•˜๋Š” ์†”๋ฃจ์…˜์—๋Š” ํ˜ผํ•ฉ ๊ณ ์šฉ ๋น„๋™๊ธฐ ๊ตฌํ˜„์ด ์žˆ์Šต๋‹ˆ๋‹ค. (๋‹ค๋ฅด๊ฒŒ ๋งํ•˜๋ฉด ์ˆ˜๋งŽ์€ ์„ ํƒ๊ณผ ๋ฒค์น˜๋งˆํ‚น์„ ํ†ตํ•ด ๋งŽ์€ ๋Œ€์•ˆ์„ ์‹œ๋„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.)

@merl-dev ๋ฌธ์ œ๋Š” ์—ฌ์ „ํžˆ PyPy์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ hiredis+cffi๋Š” ์ˆœ์ˆ˜ํ•œ python ํ”„๋กœํ† ์ฝœ ํŒŒ์„œ ๊ตฌํ˜„๋ณด๋‹ค redis ํ”„๋กœํ† ์ฝœ์„ ํŒŒ์‹ฑํ•  ๋•Œ ๋” ๋Š๋ฆฝ๋‹ˆ๋‹ค.
์ ์–ด๋„ ๋‚ด ๋ฒ„์ „์—๋Š” redis-py์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ํ…Œ์ŠคํŠธ ์‹คํŒจ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/redis/hiredis-py/pull/46 ์ฐธ์กฐ

๊ณ ์šฉ๋œ ํด๋ผ์ด์–ธํŠธ๋ฅผ CPython ํ™•์žฅ์œผ๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์€ ์ „์ ์œผ๋กœ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์—ฌ์ „ํžˆ CFFI์— ๋Œ€ํ•ด 100% ํ™•์‹ ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€์„œ ์žก์ž

@thedrow ์ด๊ฒƒ์€ ๋‚˜๋ฅผ ์ƒ๊ธฐ์‹œ์ผœ์ค๋‹ˆ๋‹ค - ์ƒˆ๋กœ์šด redis ์ŠคํŠธ๋ฆผ ๊ธฐ๋Šฅ์„

์šฐ๋ฆฌ๋Š”ํ•˜์ง€ ์•Š์•˜๋‹ค. ํ˜„์žฌ๋กœ์„œ๋Š” redis ๋ธŒ๋กœ์ปค๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์ด ์—†์Šต๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๋Š” ์—ฌ๋Ÿฌ๋ถ„์ด ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ์œ ๊ฐ€ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž์Šต๋‹ˆ๋‹ค.

@theedrow ์šฐ๋ฆฌ๋Š”... ์•„๋ฌด๊ฒƒ๋„ ์•ฝ์†ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์ง€๋งŒ Redis ์ƒํƒœ๊ณ„๋ฅผ ์‚ฌ์ „์— ์ง€์›ํ•˜๋Š” ๋ฐ ๋” ๋งŽ์€ ๋ฆฌ์†Œ์Šค๋ฅผ ํ• ์• ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@dvirsky ์ด ์ œ์•ˆ์„ ๋ง์”€ ํ•˜์‹œ๋Š” ๊ฑด๊ฐ€์š”? ๋”ฐ๋ผ์„œ TAPPEND ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€๊ธฐ์—ด์— ์ถ”๊ฐ€ํ•˜๊ณ  TREAD + TACK ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€๊ธฐ์—ด์—์„œ ์ œ๊ฑฐ, ์ฒ˜๋ฆฌ ๋ฐ ์Šน์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@georgepsarakis ๋” ์ด์ƒ ์ œ์•ˆ์ด ์•„๋‹ˆ๋ฉฐ ์ž‘๋™ํ•˜๋ฉฐ ์ ‘๋‘์‚ฌ๋Š” X, ์ฆ‰ XADD์ž…๋‹ˆ๋‹ค. https://www.youtube.com/watch?v=ELDzy9lCFHQ ์ฐธ์กฐ

๊ทธ๋ ‡๋‹ค๋ฉด redis ๋ธŒ๋กœ์ปค ์ง€์›์— ๋Œ€ํ•œ ์ตœ์ข… ์š”์ฒญ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๊ณง ์‚ฌ์šฉ์ด ์ค‘๋‹จ๋  ์˜ˆ์ •์ž…๋‹ˆ๊นŒ?

์ง€๊ธˆ์€ ์•„๋‹™๋‹ˆ๋‹ค.

์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ์–ด๋Š ์ชฝ์œผ๋กœ ๊ธฐ์šธ๊ณ  ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์—ˆ์ง€๋งŒ ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ์žˆ๊ณ  Redis๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ƒ๊ฐ์œผ๋กœ ์ธํ•ด ๋ธŒ๋กœ์ปค๋กœ Redis์™€ ํ•จ๊ป˜ ๊ฐ€๊ธฐ๋ฅผ ์ฃผ์ €ํ•ฉ๋‹ˆ๋‹ค. ์ƒ๊ฐ?

redis ๋ธŒ๋กœ์ปค๊ฐ€ ๊ฐ€๊นŒ์šด ์žฅ๋ž˜์— ๊ณ„์† ์œ ์ง€๋  ๊ฒƒ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๊ทธ๊ฒƒ์„ ์ค‘๊ณ„ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ ๋™์•ˆ #301 / 601 ์€ ์˜ค๋ž˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@ermik ์€ ๊ด€๋ จ ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋„์›€์„

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰