Dragonfly ํ”„๋กœ์ ํŠธ๋Š” Redis ๋ฐ Memcached๋ฅผ ๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ๋Œ€์ฒดํ•  ์ œํ’ˆ์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Dragonfly ์ธ๋ฉ”๋ชจ๋ฆฌ ์บ์‹ฑ ์‹œ์Šคํ…œ์˜ ์ฒซ ๋ฒˆ์งธ ๋ฆด๋ฆฌ์Šค๊ฐ€ ์ถœ์‹œ๋˜์–ด Memcached ๋ฐ Redis ํ”„๋กœํ† ์ฝœ์„ ์ง€์›ํ•˜์ง€๋งŒ ํ›จ์”ฌ ๋” ๋†’์€ ์„ฑ๋Šฅ๊ณผ ๋” ์ ์€ ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋น„๋กœ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์‹œ์Šคํ…œ์€ ํ‚ค/๊ฐ’ ํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๋ฉฐ, DBMS์— ๋Œ€ํ•œ ๋Š๋ฆฐ ์ฟผ๋ฆฌ์™€ RAM์˜ ์ค‘๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹ฑํ•˜์—ฌ ๋กœ๋“œ๊ฐ€ ๋งŽ์€ ์‚ฌ์ดํŠธ์˜ ์ž‘์—… ์†๋„๋ฅผ ๋†’์ด๋Š” ๊ฒฝ๋Ÿ‰ ์†”๋ฃจ์…˜์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Dragonfly ์ฝ”๋“œ๋Š” C/C++๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ BSL(Business Source License)์— ๋”ฐ๋ผ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

BSL ๋ผ์ด์„ ์Šค๋Š” Open Core ๋ชจ๋ธ์˜ ๋Œ€์•ˆ์œผ๋กœ MySQL์˜ ๊ณต๋™ ์ฐฝ๋ฆฝ์ž๊ฐ€ ์ œ์•ˆํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. BSL์˜ ํ•ต์‹ฌ์€ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ ์ฝ”๋“œ๋ฅผ ์ฒ˜์Œ์—๋Š” ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ถ”๊ฐ€ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ํ•œ๋™์•ˆ ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์šฐํšŒํ•˜๋ ค๋ฉด ์ƒ์šฉ ๋ผ์ด์„ ์Šค๋ฅผ ๊ตฌ์ž…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Dragonfly ํ”„๋กœ์ ํŠธ์˜ ์ถ”๊ฐ€ ๋ผ์ด์„ ์Šค ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ฝ”๋“œ๋Š” 2.0๋…„ 1์›” 2027์ผ์—๋งŒ Apache XNUMX ๋ผ์ด์„ ์Šค๋กœ ์ด์ „๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ๋ผ์ด์„ ์Šค๋Š” ์„œ๋น„์Šค์™€ ์ œํ’ˆ์˜ ์šด์˜์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ๋งŒ ์ฝ”๋“œ ์‚ฌ์šฉ์„ ํ—ˆ์šฉํ•˜์ง€๋งŒ Dragonfly์˜ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ์—ญํ• ์„ ํ•˜๋Š” ์œ ๋ฃŒ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค ์ƒ์„ฑ์—๋Š” ์‚ฌ์šฉ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž์™€ ์‹œ์—ฐ๋œ ํ…Œ์ŠคํŠธ์— ๋”ฐ๋ฅด๋ฉด Dragonfly๋Š” ๊ฐ€์žฅ ๋น ๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ์ €์žฅ ์‹œ์Šคํ…œ์ด๋ผ๊ณ  ์ฃผ์žฅํ•ฉ๋‹ˆ๋‹ค. Redis์— ๋น„ํ•ด Dragonfly๋Š” ์ผ๋ฐ˜ ์›Œํฌ๋กœ๋“œ์—์„œ ์„ฑ๋Šฅ์ด 25๋ฐฐ ํ–ฅ์ƒ๋˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋น„๊ฐ€ 2๋ฐฐ ๊ฐ์†Œํ–ˆ์Šต๋‹ˆ๋‹ค. Dragonfly ์„œ๋ฒ„ ํ•œ ๋Œ€๋Š” ์ดˆ๋‹น ์ˆ˜๋ฐฑ๋งŒ ๊ฐœ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Amazon EC6 c16gn.3.8xlarge ํ™˜๊ฒฝ์—์„œ๋Š” ์ดˆ๋‹น XNUMX๋งŒ ๊ฐœ์˜ ์š”์ฒญ ์„ฑ๋Šฅ์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

Dragonfly ํ”„๋กœ์ ํŠธ๋Š” Redis ๋ฐ Memcached๋ฅผ ๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ๋Œ€์ฒดํ•  ์ œํ’ˆ์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

5GB์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ํ…Œ์ŠคํŠธ์—์„œ Dragonfly๋Š” Redis๋ณด๋‹ค 30% ์ ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•„์š”๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค. "bgsave" ๋ช…๋ น์œผ๋กœ ์Šค๋ƒ…์ƒท์„ ์ƒ์„ฑํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋น„๊ฐ€ ์ฆ๊ฐ€ํ•˜์ง€๋งŒ ํ”ผํฌ ์ˆœ๊ฐ„์—๋Š” Redis๋ณด๋‹ค ๊ฑฐ์˜ 30๋ฐฐ ์ ์€ ์–‘์œผ๋กœ ์œ ์ง€๋˜๋ฉฐ ์Šค๋ƒ…์ƒท ๊ธฐ๋ก ์ž‘์—… ์ž์ฒด๋„ ํ›จ์”ฌ ๋น ๋ฆ…๋‹ˆ๋‹ค(ํ…Œ์ŠคํŠธ์—์„œ Dragonfly์˜ ์Šค๋ƒ…์ƒท์€ 42์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค). ์ดˆ, Redis - XNUMX์ดˆ).

Dragonfly ํ”„๋กœ์ ํŠธ๋Š” Redis ๋ฐ Memcached๋ฅผ ๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ๋Œ€์ฒดํ•  ์ œํ’ˆ์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

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

์ฒซ ๋ฒˆ์งธ ๋ฆด๋ฆฌ์Šค์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ ์ค‘์—๋Š” RESP2 ํ”„๋กœํ† ์ฝœ ๋ฐ 130๊ฐœ์˜ Redis ๋ช…๋ น์— ๋Œ€ํ•œ ์ง€์›์ด ์–ธ๊ธ‰๋˜์–ด ์žˆ์œผ๋ฉฐ ์ด๋Š” ๋Œ€๋žต Redis 2.8 ๋ฆด๋ฆฌ์Šค์˜ ๊ธฐ๋Šฅ๊ณผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ Dragonfly๋Š” CAS(check-and-set)๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  memcached ๋ช…๋ น์„ ์ง€์›ํ•˜๊ณ , ์Šค๋ƒ…์ƒท ์ƒ์„ฑ์„ ์œ„ํ•œ ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ง€์›ํ•˜๋ฉฐ, ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋น„๋ฅผ ์ œ๊ณตํ•˜๊ณ , Lua 5.4 ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ๋‚ด์žฅ๋˜์–ด ์žˆ์œผ๋ฉฐ, ํ•ด์‹œ์™€ ๊ฐ™์€ ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์„ธํŠธ ๋ฐ ๋ชฉ๋ก(ZSET, HSET, LIST, SETS ๋ฐ STRING).

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

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€