Tarantool ์นดํŠธ๋ฆฌ์ง€: Lua ๋ฐฑ์—”๋“œ๋ฅผ ์„ธ ์ค„๋กœ ์ƒค๋”ฉ

Tarantool ์นดํŠธ๋ฆฌ์ง€: Lua ๋ฐฑ์—”๋“œ๋ฅผ ์„ธ ์ค„๋กœ ์ƒค๋”ฉ

Mail.ru Group์—๋Š” Tarantool์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Lua์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์ด๋ฉฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ญํ• ๋„ ํ•ฉ๋‹ˆ๋‹ค(๋˜๋Š” ๊ทธ ๋ฐ˜๋Œ€). ๋น ๋ฅด๊ณ  ๋ฉ‹์ง€์ง€๋งŒ ํ•œ ์„œ๋ฒ„์˜ ๊ธฐ๋Šฅ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋ฌด์ œํ•œ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ˆ˜์ง ์Šค์ผ€์ผ๋ง๋„ ๋งŒ๋ณ‘ํ†ต์น˜์•ฝ์ด ์•„๋‹ˆ๋ฏ€๋กœ Tarantool์—๋Š” ์ˆ˜ํ‰ ์Šค์ผ€์ผ๋ง์„ ์œ„ํ•œ ๋„๊ตฌ์ธ vshard ๋ชจ๋“ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค. [1]. ์ด๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ ์„œ๋ฒ„์— ๊ฑธ์ณ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„ํ• ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋ฅผ ์„ค์ •ํ•˜๊ณ  ๋น„์ฆˆ๋‹ˆ์Šค ๋…ผ๋ฆฌ๋ฅผ ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ข‹์€ ์†Œ์‹: ์šฐ๋ฆฌ๋Š” ๋ช‡ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ–ˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: [2], [3]) ๊ทธ๋ฆฌ๊ณ  ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์†”๋ฃจ์…˜์„ ํฌ๊ฒŒ ๋‹จ์ˆœํ™”ํ•  ๋˜ ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

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

๊ทธ๋ฆฌ๊ณ  ์ •ํ™•ํžˆ ๋ฌธ์ œ๊ฐ€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์šฐ๋ฆฌ์—๊ฒ ๋…๊ฑฐ๋ฏธ๋„ ์žˆ๊ณ , vshard๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌด์—‡์„ ๋” ๋ฐ”๋ž„ ์ˆ˜ ์žˆ๊ฒ ์Šต๋‹ˆ๊นŒ?

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

์นดํŠธ๋ฆฌ์ง€ ์ž์ฒด๋Š” vshard ๊ตฌ์„ฑ์„ ๊ด€๋ฆฌํ•˜๋ฉฐ ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์ž์ฒด ๋ถ„์‚ฐ ๊ตฌ์„ฑ. ์ด๋Š” ๋ณธ์งˆ์ ์œผ๋กœ ๊ฐ„๋‹จํ•œ YAML ํŒŒ์ผ์ด๋ฉฐ, ๊ทธ ๋ณต์‚ฌ๋ณธ์€ ๊ฐ Tarantool ์ธ์Šคํ„ด์Šค์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๋‹จ์ˆœํ™”๋Š” ํ”„๋ ˆ์ž„์›Œํฌ ์ž์ฒด๊ฐ€ ๊ตฌ์„ฑ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ๋ชจ๋“  ๊ณณ์—์„œ ๋™์ผํ•œ์ง€ ํ™•์ธํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

์šฐ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ๊ณ„์†ํ•ด์„œ ํ•ด๊ฒฐํ–ˆ์œผ๋ฉฐ ์–ด๋Š ์‹œ์ ์—์„œ๋Š” ์ƒ์„ฑ, ๊ฐœ๋ฐœ, ํ…Œ์ŠคํŠธ, CI/CD, ์œ ์ง€ ๊ด€๋ฆฌ ๋“ฑ ์ „์ฒด ์ˆ˜๋ช… ์ฃผ๊ธฐ ๋™์•ˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž‘์—…์„ ๋‹จ์ˆœํ™”ํ•˜๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์นดํŠธ๋ฆฌ์ง€๋Š” ๊ฐ Tarantool ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ์—ญํ•  ๊ฐœ๋…์„ ๋„์ž…ํ•ฉ๋‹ˆ๋‹ค. ์—ญํ• ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ ์ž‘์„ฑ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์—ญํ• ์€ ํ•˜๋‚˜์˜ Tarantool ์ธ์Šคํ„ด์Šค์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋Š” ํ…Œ์ŠคํŠธ์— ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

Tarantool ์นดํŠธ๋ฆฌ์ง€์˜ ์ฃผ์š” ํŠน์ง•:

  • ์ž๋™ํ™”๋œ ํด๋Ÿฌ์Šคํ„ฐ ์กฐ์ •;
  • ์ƒˆ๋กœ์šด ์—ญํ• ์„ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐœ๋ฐœ ๋ฐ ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ…œํ”Œ๋ฆฟ
  • ๋‚ด์žฅ๋œ ์ž๋™ ์ƒค๋”ฉ;
  • Luatest ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ์™€์˜ ํ†ตํ•ฉ
  • WebUI ๋ฐ API๋ฅผ ์‚ฌ์šฉํ•œ ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ
  • ํŒจํ‚ค์ง• ๋ฐ ๋ฐฐํฌ ๋„๊ตฌ.

์•ˆ๋…•, ์›”๋“œ!

ํ”„๋ ˆ์ž„์›Œํฌ ์ž์ฒด๋ฅผ ๋นจ๋ฆฌ ๋ณด์—ฌ๋“œ๋ฆฌ๊ณ  ์‹ถ๊ธฐ ๋•Œ๋ฌธ์— ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋Š” ๋‚˜์ค‘์— ํ•˜๊ณ  ๊ฐ„๋‹จํ•œ ๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. Tarantool ์ž์ฒด๊ฐ€ ์ด๋ฏธ ์„ค์น˜๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ๋‚จ์€ ์ž‘์—…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

$ tarantoolctl rocks install cartridge-cli
$ export PATH=$PWD/.rocks/bin/:$PATH

๋‹ค์Œ ๋‘ ๋ช…๋ น์€ ๋ช…๋ น์ค„ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์„ค์น˜ํ•˜๊ณ  ํ…œํ”Œ๋ฆฟ์—์„œ ์ฒซ ๋ฒˆ์งธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

$ cartridge create --name myapp

๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ ์–ป๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค:

myapp/
โ”œโ”€โ”€ .git/
โ”œโ”€โ”€ .gitignore
โ”œโ”€โ”€ app/roles/custom.lua
โ”œโ”€โ”€ deps.sh
โ”œโ”€โ”€ init.lua
โ”œโ”€โ”€ myapp-scm-1.rockspec
โ”œโ”€โ”€ test
โ”‚   โ”œโ”€โ”€ helper
โ”‚   โ”‚   โ”œโ”€โ”€ integration.lua
โ”‚   โ”‚   โ””โ”€โ”€ unit.lua
โ”‚   โ”œโ”€โ”€ helper.lua
โ”‚   โ”œโ”€โ”€ integration/api_test.lua
โ”‚   โ””โ”€โ”€ unit/sample_test.lua
โ””โ”€โ”€ tmp/

์ด๊ฒƒ์€ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด์ง„ "Hello, World!"๊ฐ€ ํฌํ•จ๋œ git ์ €์žฅ์†Œ์ž…๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜. ์ด์ „์— ์ข…์†์„ฑ(ํ”„๋ ˆ์ž„์›Œํฌ ์ž์ฒด ํฌํ•จ)์„ ์„ค์น˜ํ•œ ํ›„ ์ฆ‰์‹œ ์‹คํ–‰ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

$ tarantoolctl rocks make
$ ./init.lua --http-port 8080

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

์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœ

์ƒ์ƒํ•ด ๋ณด์„ธ์š”. ์šฐ๋ฆฌ๋Š” ํ•˜๋ฃจ์— ํ•œ ๋ฒˆ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•˜๊ณ  ์ €์žฅํ•˜๊ณ  ๋ณด๊ณ ์„œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค๊ณ„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Tarantool ์นดํŠธ๋ฆฌ์ง€: Lua ๋ฐฑ์—”๋“œ๋ฅผ ์„ธ ์ค„๋กœ ์ƒค๋”ฉ

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

Tarantool ์นดํŠธ๋ฆฌ์ง€: Lua ๋ฐฑ์—”๋“œ๋ฅผ ์„ธ ์ค„๋กœ ์ƒค๋”ฉ

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

Tarantool ์นดํŠธ๋ฆฌ์ง€: Lua ๋ฐฑ์—”๋“œ๋ฅผ ์„ธ ์ค„๋กœ ์ƒค๋”ฉ

vshard-router์™€ ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ๋ณ„๋„์˜ ์ธ์Šคํ„ด์Šค์— ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์€ ๊ฑฐ์˜ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ด๋ฏธ ๋ผ์šฐํ„ฐ์˜ ์ฑ…์ž„์ด๋ผ๋ฉด ์™œ ๋„คํŠธ์›Œํฌ๋ฅผ ๋‹ค์‹œ ํ•œ ๋ฒˆ ์„œํ•‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋™์ผํ•œ ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์‹คํ–‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๊ฒŒ์ดํŠธ์›จ์ด์™€ vshard.router.cfg๊ฐ€ ๋ชจ๋‘ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค์—์„œ ์ดˆ๊ธฐํ™”๋˜๊ณ  ๋กœ์ปฌ์—์„œ ์ƒํ˜ธ ์ž‘์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

Tarantool ์นดํŠธ๋ฆฌ์ง€: Lua ๋ฐฑ์—”๋“œ๋ฅผ ์„ธ ์ค„๋กœ ์ƒค๋”ฉ

๊ทธ๋ฆฌ๊ณ  ์ค€๋น„ ๋˜๋Š” ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ์˜ ๊ฒฝ์šฐ ํ•˜๋“œ์›จ์–ด ๊ธฐ๋Šฅ์— ๋”ฐ๋ผ ๊ฐ Tarantool ํ”„๋กœ์„ธ์Šค์— ๊ณ ์œ ํ•œ ์—ญํ•  ์ง‘ํ•ฉ์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

Tarantool ์นดํŠธ๋ฆฌ์ง€: Lua ๋ฐฑ์—”๋“œ๋ฅผ ์„ธ ์ค„๋กœ ์ƒค๋”ฉ

ํ† ํด๋กœ์ง€ ๊ด€๋ฆฌ

์–ด๋–ค ์—ญํ• ์ด ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋Š” ์–ด๋”˜๊ฐ€์— ์ €์žฅ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด "์–ด๋”˜๊ฐ€"๋Š” ์œ„์—์„œ ์ด๋ฏธ ์–ธ๊ธ‰ํ•œ ๋ถ„์‚ฐ ๊ตฌ์„ฑ์ž…๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ํด๋Ÿฌ์Šคํ„ฐ ํ† ํด๋กœ์ง€์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ์€ 3๊ฐœ์˜ Tarantool ํ”„๋กœ์„ธ์Šค๋กœ ๊ตฌ์„ฑ๋œ 5๊ฐœ์˜ ๋ณต์ œ ๊ทธ๋ฃน์ž…๋‹ˆ๋‹ค:

Tarantool ์นดํŠธ๋ฆฌ์ง€: Lua ๋ฐฑ์—”๋“œ๋ฅผ ์„ธ ์ค„๋กœ ์ƒค๋”ฉ

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

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

Tarantool ์นดํŠธ๋ฆฌ์ง€: Lua ๋ฐฑ์—”๋“œ๋ฅผ ์„ธ ์ค„๋กœ ์ƒค๋”ฉ

์—ญํ• ์˜ ์‚ถ

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

function init()
function validate_config()
function apply_config()
function stop()

๊ฐ ์—ญํ• ์—๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. init. ์—ญํ• ์ด ํ™œ์„ฑํ™”๋˜๊ฑฐ๋‚˜ Tarantool์ด ๋‹ค์‹œ ์‹œ์ž‘๋  ๋•Œ ํ•œ ๋ฒˆ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด box.space.create๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๊ฒƒ์ด ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ํŠน์ • ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ผ๋ถ€ ๋ฐฐ๊ฒฝ ํŒŒ์ด๋ฒ„๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ init ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์นดํŠธ๋ฆฌ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—ญํ• ์ด ํ† ํด๋กœ์ง€๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๋ถ„์‚ฐ ๊ตฌ์„ฑ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์ผํ•œ ๊ตฌ์„ฑ์—์„œ ์ƒˆ ์„น์…˜์„ ์„ ์–ธํ•˜๊ณ  ์—ฌ๊ธฐ์— ๋น„์ฆˆ๋‹ˆ์Šค ๊ตฌ์„ฑ์˜ ์ผ๋ถ€๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์˜ˆ์—์„œ๋Š” ์Šค์ผ€์ค„๋Ÿฌ ์—ญํ• ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ๋˜๋Š” ์ผ์ • ์„ค์ •์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐ ํ˜ธ์ถœ validate_config ะธ apply_config ๋ถ„์‚ฐ ๊ตฌ์„ฑ์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค. XNUMX๋‹จ๊ณ„ ์ปค๋ฐ‹์œผ๋กœ ๊ตฌ์„ฑ์ด ์ ์šฉ๋˜๋ฉด ํด๋Ÿฌ์Šคํ„ฐ๋Š” ๊ฐ ์—ญํ• ์ด ์ด ์ƒˆ ๊ตฌ์„ฑ์„ ์ˆ˜๋ฝํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž์—๊ฒŒ ์˜ค๋ฅ˜๋ฅผ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์‚ฌ๋žŒ์ด ๊ตฌ์„ฑ์ด ์ •์ƒ์ด๋ผ๊ณ  ๋™์˜ํ•˜๋ฉด apply_config.

๋˜ํ•œ ์—ญํ• ์—๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค stop, ์ด๋Š” ์—ญํ• ์˜ ์ถœ๋ ฅ์„ ์ •๋ฆฌํ•˜๋Š” ๋ฐ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ์„œ๋ฒ„์— ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๊ณ  ๋งํ•˜๋ฉด ์‚ฌ์šฉ์„ ์‹œ์ž‘ํ•œ ํŒŒ์ด๋ฒ„๋ฅผ ์ค‘์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. init.

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

๋˜ ๋‹ค๋ฅธ ์ค‘์š”ํ•œ ์ ์€ ๋‚ด๊ฒฐํ•จ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์นดํŠธ๋ฆฌ์ง€๋Š” SWIM ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค. [4]. ๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ ํ”„๋กœ์„ธ์Šค๋Š” UDP๋ฅผ ํ†ตํ•ด ์„œ๋กœ "์†Œ๋ฌธ"์„ ๊ตํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ์ด์›ƒ์—๊ฒŒ ์ตœ์‹  ๋‰ด์Šค๋ฅผ ์•Œ๋ฆฌ๊ณ  ์ด์— ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค. ๊ฐ‘์ž๊ธฐ ๋Œ€๋‹ต์ด ์˜ค์ง€ ์•Š์œผ๋ฉด ํƒ€๋ž€ํˆด์€ ๋ญ”๊ฐ€ ์ž˜๋ชป๋˜์—ˆ๋‹ค๊ณ  ์˜์‹ฌํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๊ณ , ์ž ์‹œ ํ›„ ์ฃฝ์Œ์„ ์™ธ์šฐ๊ณ  ์ด ์†Œ์‹์„ ์ฃผ๋ณ€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์•Œ๋ฆฌ๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

Tarantool ์นดํŠธ๋ฆฌ์ง€: Lua ๋ฐฑ์—”๋“œ๋ฅผ ์„ธ ์ค„๋กœ ์ƒค๋”ฉ

์ด ํ”„๋กœํ† ์ฝœ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์นดํŠธ๋ฆฌ์ง€๋Š” ์ž๋™ ์‹คํŒจ ์ฒ˜๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ํ•ด๋‹น ํ™˜๊ฒฝ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ๋ฆฌ๋”๊ฐ€ ๊ฐ‘์ž๊ธฐ ์‘๋‹ต์„ ๋ฉˆ ์ถ”๋ฉด ๋ณต์ œ๋ณธ์ด ํ•ด๋‹น ์—ญํ• ์„ ๋Œ€์‹ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์นดํŠธ๋ฆฌ์ง€๋Š” ์ด์— ๋”ฐ๋ผ ์‹คํ–‰ ์ค‘์ธ ์—ญํ• ์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

Tarantool ์นดํŠธ๋ฆฌ์ง€: Lua ๋ฐฑ์—”๋“œ๋ฅผ ์„ธ ์ค„๋กœ ์ƒค๋”ฉ

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

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

Docker์™€ ๋‹ฌ๋ฆฌ ์šฐ๋ฆฌ๋Š” "์ด๋ฏธ์ง€" ์—ญํ• ์„ ๋‹ค๋ฅธ ๋จธ์‹ ์œผ๋กœ ๊ฐ€์ ธ์™€ ๊ทธ๊ณณ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ์—ญํ• ์€ Docker ์ปจํ…Œ์ด๋„ˆ๋งŒํผ ๊ณ ๋ฆฝ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค์—์„œ ๋‘ ๊ฐœ์˜ ๋™์ผํ•œ ์—ญํ• ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์—ญํ• ์€ ์กด์žฌํ•˜๊ฑฐ๋‚˜ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์˜๋ฏธ์—์„œ๋Š” ์‹ฑ๊ธ€ํ†ค์ž…๋‹ˆ๋‹ค. ์…‹์งธ, ์ „์ฒด ๋ณต์ œ ๊ทธ๋ฃน ๋‚ด์—์„œ ์—ญํ• ์ด ๋™์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํ„ฐ๋ฌด๋‹ˆ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋Š” ๋™์ผํ•˜์ง€๋งŒ ๊ตฌ์„ฑ์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

๋ฐฐํฌ ๋„๊ตฌ

์ €๋Š” ์นดํŠธ๋ฆฌ์ง€๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ์— ์–ด๋–ป๊ฒŒ ๋„์›€์ด ๋˜๋Š”์ง€ ๋ณด์—ฌ์ฃผ๊ฒ ๋‹ค๊ณ  ์•ฝ์†ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ์‚ถ์„ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํ”„๋ ˆ์ž„์›Œํฌ๋Š” RPM ํŒจํ‚ค์ง€๋ฅผ ํŒจํ‚ค์ง€ํ•ฉ๋‹ˆ๋‹ค.

$ cartridge pack rpm myapp -- ัƒะฟะฐะบัƒะตั‚ ะดะปั ะฝะฐั ./myapp-0.1.0-1.rpm
$ sudo yum install ./myapp-0.1.0-1.rpm

์„ค์น˜๋œ ํŒจํ‚ค์ง€์—๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์„ค์น˜๋œ ์ข…์†์„ฑ ๋“ฑ ํ•„์š”ํ•œ ๊ฑฐ์˜ ๋ชจ๋“  ๊ฒƒ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. Tarantool์€ RPM ํŒจํ‚ค์ง€์˜ ์ข…์†์„ฑ์œผ๋กœ ์„œ๋ฒ„์— ๋„์ฐฉํ•  ์˜ˆ์ •์ด๋ฉฐ ์„œ๋น„์Šค๋ฅผ ์‹œ์ž‘ํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” systemd๋ฅผ ํ†ตํ•ด ์ˆ˜ํ–‰๋˜์ง€๋งŒ ๋จผ์ € ์•ฝ๊ฐ„์˜ ๊ตฌ์„ฑ์„ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ ๊ฐ ํ”„๋กœ์„ธ์Šค์˜ URI๋ฅผ ์ง€์ •ํ•˜์‹ญ์‹œ์˜ค. ์˜ˆ๋ฅผ ๋“ค์–ด XNUMX๊ฐœ๋ฉด ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

$ sudo tee /etc/tarantool/conf.d/demo.yml <<CONFIG
myapp.router: {"advertise_uri": "localhost:3301", "http_port": 8080}
myapp.storage_A: {"advertise_uri": "localhost:3302", "http_enabled": False}
myapp.storage_B: {"advertise_uri": "localhost:3303", "http_enabled": False}
CONFIG

์—ฌ๊ธฐ์—๋Š” ํฅ๋ฏธ๋กœ์šด ๋‰˜์•™์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”์ด๋„ˆ๋ฆฌ ํ”„๋กœํ† ์ฝœ ํฌํŠธ๋งŒ ์ง€์ •ํ•˜๋Š” ๋Œ€์‹  ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ ํฌํ•จํ•œ ํ”„๋กœ์„ธ์Šค์˜ ์ „์ฒด ๊ณต๊ฐœ ์ฃผ์†Œ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋…ธ๋“œ๊ฐ€ ์„œ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. Advertising_uri ์ฃผ์†Œ๋กœ 0.0.0.0์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์†Œ์ผ“ ๋ฐ”์ธ๋“œ๊ฐ€ ์•„๋‹Œ ์™ธ๋ถ€ IP ์ฃผ์†Œ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์—†์œผ๋ฉด ์•„๋ฌด ๊ฒƒ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์นดํŠธ๋ฆฌ์ง€๋Š” ์ž˜๋ชป๋œ ๊ด‘๊ณ _uri๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋…ธ๋“œ๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์—†๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ๊ตฌ์„ฑ์ด ์ค€๋น„๋˜์—ˆ์œผ๋ฏ€๋กœ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ์‹œ์Šคํ…œ ์žฅ์น˜์—์„œ๋Š” ๋‘˜ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค ์‹œ์ž‘์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์นดํŠธ๋ฆฌ์ง€์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ์†Œ์œ„ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘๋™ํ•˜๋Š” ์ธ์Šคํ„ด์Šคํ™”๋œ ๋‹จ์œ„:

$ sudo systemctl start myapp@router
$ sudo systemctl start myapp@storage_A
$ sudo systemctl start myapp@storage_B

๊ตฌ์„ฑ์—์„œ Cartridge๊ฐ€ ์›น ์ธํ„ฐํŽ˜์ด์Šค(8080)๋ฅผ ์ œ๊ณตํ•˜๋Š” HTTP ํฌํŠธ๋ฅผ ์ง€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ํฌํŠธ๋กœ ์ด๋™ํ•˜์—ฌ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Tarantool ์นดํŠธ๋ฆฌ์ง€: Lua ๋ฐฑ์—”๋“œ๋ฅผ ์„ธ ์ค„๋กœ ์ƒค๋”ฉ

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

๊ธด ์ผ์ฃผ์ผ์˜ ์ผ์„ ๋งˆ์น˜๊ณ  ์ข‹์•„ํ•˜๋Š” ์Œ๋ฃŒ ํ•œ ์ž”์„ ๋”ฐ๋ฅด๋ฉฐ ํœด์‹์„ ์ทจํ•˜์„ธ์š”. ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Tarantool ์นดํŠธ๋ฆฌ์ง€: Lua ๋ฐฑ์—”๋“œ๋ฅผ ์„ธ ์ค„๋กœ ์ƒค๋”ฉ

๊ฒฐ๊ณผ

๊ฒฐ๊ณผ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์‹œํ—˜ํ•ด๋ณด๊ณ , ์‚ฌ์šฉํ•˜๊ณ , ํ”ผ๋“œ๋ฐฑ์„ ๋‚จ๊ธฐ๊ณ , Github์—์„œ ํ‹ฐ์ผ“์„ ๋งŒ๋“œ์„ธ์š”.

์ฐธ์กฐ

[1] Tarantool ยป 2.2 ยป ์ฐธ์กฐ ยป Rocks ์ฐธ์กฐ ยป ๋ชจ๋“ˆ vshard

[2] Tarantool์„ ๊ธฐ๋ฐ˜์œผ๋กœ Alfa-Bank ํˆฌ์ž ์‚ฌ์—…์˜ ํ•ต์‹ฌ์„ ๊ตฌํ˜„ํ•œ ๋ฐฉ๋ฒ•

[3] ์ฐจ์„ธ๋Œ€ ์ฒญ๊ตฌ ์•„ํ‚คํ…์ฒ˜: Tarantool๋กœ์˜ ์ „ํ™˜์„ ํ†ตํ•œ ๋ณ€ํ™”

[4] SWIM - ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ ํ”„๋กœํ† ์ฝœ

[5] GitHub - tarantool/cartridge-cli

[6] GitHub - tarantool/์นดํŠธ๋ฆฌ์ง€

์ถœ์ฒ˜ : habr.com

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