Mail.ru Group์๋ Tarantool์ด ์์ต๋๋ค. ์ด๊ฒ์ Lua์ ์ ํ๋ฆฌ์ผ์ด์
์๋ฒ์ด๋ฉฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ญํ ๋ ํฉ๋๋ค(๋๋ ๊ทธ ๋ฐ๋). ๋น ๋ฅด๊ณ ๋ฉ์ง์ง๋ง ํ ์๋ฒ์ ๊ธฐ๋ฅ์ ์ฌ์ ํ โโ๋ฌด์ ํ์ด ์๋๋๋ค. ์์ง ์ค์ผ์ผ๋ง๋ ๋ง๋ณํต์น์ฝ์ด ์๋๋ฏ๋ก Tarantool์๋ ์ํ ์ค์ผ์ผ๋ง์ ์ํ ๋๊ตฌ์ธ vshard ๋ชจ๋์ด ์์ต๋๋ค.
์ข์ ์์: ์ฐ๋ฆฌ๋ ๋ช ๊ฐ์ง ์ค์ํ ์ ๋ณด๋ฅผ ์์งํ์ต๋๋ค(์:
๊ทธ๋ฆฌ๊ณ ์ ํํ ๋ฌธ์ ๊ฐ ๋ฌด์์ ๋๊น?
์ฐ๋ฆฌ์๊ฒ ๋ ๊ฑฐ๋ฏธ๋ ์๊ณ , 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
๋ฐ๋ผ์ ํฅํ ์ค๋ฉ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํด ํ๋์ ๋ ธ๋๊ฐ ์คํ๋ฉ๋๋ค. ํธ๊ธฐ์ฌ์ด ๋ง์ ์ผ๋ฐ์ธ์ด๋ผ๋ฉด ์ฆ์ ์น ์ธํฐํ์ด์ค๋ฅผ ์ด๊ณ ๋ง์ฐ์ค๋ก ํ ๋ ธ๋์ ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ฑํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ฆ๊ธธ ์ ์์ง๋ง ์์ง ๊ธฐ๋ปํ๊ธฐ์๋ ์ด๋ฅด๋ค. ์์ง๊น์ง๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ ์ฉํ ์์ ์ ์ํํ ์ ์์ผ๋ฏ๋ก ๋์ค์ ๋ฐฐํฌ์ ๋ํด ์ค๋ช ํ๊ฒ ์ง๋ง ์ด์ ์ฝ๋๋ฅผ ์์ฑํ ์ฐจ๋ก์ ๋๋ค.
์์ฉ ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ
์์ํด ๋ณด์ธ์. ์ฐ๋ฆฌ๋ ํ๋ฃจ์ ํ ๋ฒ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ณ ์ ์ฅํ๊ณ ๋ณด๊ณ ์๋ฅผ ์์ฑํด์ผ ํ๋ ํ๋ก์ ํธ๋ฅผ ์ค๊ณํ๊ณ ์์ต๋๋ค.
๋ค์ด์ด๊ทธ๋จ ๊ทธ๋ฆฌ๊ธฐ๋ฅผ ์์ํ๊ณ ๊ทธ ์์ ๊ฒ์ดํธ์จ์ด, ์คํ ๋ฆฌ์ง, ์ค์ผ์ค๋ฌ๋ผ๋ ์ธ ๊ฐ์ง ๊ตฌ์ฑ ์์๋ฅผ ๋ฐฐ์นํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ํคํ
์ฒ๋ฅผ ์ถ๊ฐ๋ก ์ฐ๊ตฌํ๊ณ ์์ต๋๋ค. vshard๋ฅผ ์คํ ๋ฆฌ์ง๋ก ์ฌ์ฉํ๋ฏ๋ก vshard-router ๋ฐ vshard-storage๋ฅผ ๊ตฌ์ฑํ์ ์ถ๊ฐํฉ๋๋ค. ๊ฒ์ดํธ์จ์ด๋ ์ค์ผ์ค๋ฌ ๋ชจ๋ ์คํ ๋ฆฌ์ง์ ์ง์ ์ก์ธ์คํ์ง ์์ต๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ๋ผ์ฐํฐ์ ๋ชฉ์ ์ด๊ณ ๊ทธ๊ฒ์ด ๋ง๋ค์ด์ง ์ด์ ์
๋๋ค.
์ด ๋ค์ด์ด๊ทธ๋จ์ ๊ตฌ์ฑ ์์๊ฐ ์ถ์์ ์ผ๋ก ๋ณด์ด๊ธฐ ๋๋ฌธ์ ํ๋ก์ ํธ์์ ๊ตฌ์ถํ ๋ด์ฉ์ ์ ํํ๊ฒ ๋ํ๋ด์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด๊ฒ์ด ์ค์ Tarantool์ ์ด๋ป๊ฒ ํฌ์๋๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ํ๋ก์ธ์ค๋ณ๋ก ๊ตฌ์ฑ ์์๋ฅผ ๊ทธ๋ฃนํํด ๋ณด๊ฒ ์ต๋๋ค.
vshard-router์ ๊ฒ์ดํธ์จ์ด๋ฅผ ๋ณ๋์ ์ธ์คํด์ค์ ์ ์งํ๋ ๊ฒ์ ๊ฑฐ์ ์๋ฏธ๊ฐ ์์ต๋๋ค. ์ด๊ฒ์ด ์ด๋ฏธ ๋ผ์ฐํฐ์ ์ฑ
์์ด๋ผ๋ฉด ์ ๋คํธ์ํฌ๋ฅผ ๋ค์ ํ ๋ฒ ์ํํด์ผ ํฉ๋๊น? ๋์ผํ ํ๋ก์ธ์ค ๋ด์์ ์คํ๋์ด์ผ ํฉ๋๋ค. ์ฆ, ๊ฒ์ดํธ์จ์ด์ vshard.router.cfg๊ฐ ๋ชจ๋ ํ๋์ ํ๋ก์ธ์ค์์ ์ด๊ธฐํ๋๊ณ ๋ก์ปฌ์์ ์ํธ ์์ฉํ ์ ์์ต๋๋ค.
๋์์ธ ๋จ๊ณ์์๋ ์ธ ๊ฐ์ง ์ปดํฌ๋ํธ๋ก ์์ ํ๋ ๊ฒ์ด ํธ๋ฆฌํ์ง๋ง, ๊ฐ๋ฐ์๋ก์ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋์ Tarnatool์ ์ธ ๊ฐ์ง ์ธ์คํด์ค๋ฅผ ์คํํ๋ ๊ฒ์ ์๊ฐํ๊ณ ์ถ์ง ์์ต๋๋ค. ํ ์คํธ๋ฅผ ์คํํ๊ณ ๊ฒ์ดํธ์จ์ด๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์์ฑํ๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ์๋๋ฉด ๋๋ฃ๋ค์๊ฒ ๊ธฐ๋ฅ์ ์์ฐํ๊ณ ์ถ์ ์๋ ์์ต๋๋ค. ์ธ ๊ฐ์ ๋ณต์ฌ๋ณธ์ ๋ฐฐํฌํ๋ ๋ฒ๊ฑฐ๋ก์์ ๊ฒช์ด์ผ ํ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ์ด๊ฒ์ด ์ญํ ์ ๊ฐ๋ ์ด ํ์ํ ๋ฐฉ๋ฒ์ ๋๋ค. ์ญํ ์ ์นดํธ๋ฆฌ์ง์ ์ํด ์๋ช ์ฃผ๊ธฐ๊ฐ ๊ด๋ฆฌ๋๋ ์ผ๋ฐ Luash ๋ชจ๋์ ๋๋ค. ์ด ์์๋ ๊ฒ์ดํธ์จ์ด, ๋ผ์ฐํฐ, ์คํ ๋ฆฌ์ง, ์ค์ผ์ค๋ฌ ๋ฑ ๋ค ๊ฐ์ง๊ฐ ์์ต๋๋ค. ๋ค๋ฅธ ํ๋ก์ ํธ์ ๋ ๋ง์ ๋ด์ฉ์ด ์์ ์ ์์ต๋๋ค. ๋ชจ๋ ์ญํ ์ ํ๋์ ํ๋ก์ธ์ค์์ ์คํ๋ ์ ์์ผ๋ฉฐ ์ด๊ฒ์ผ๋ก ์ถฉ๋ถํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ค๋น ๋๋ ํ๋ก๋์
๋ฐฐํฌ์ ๊ฒฝ์ฐ ํ๋์จ์ด ๊ธฐ๋ฅ์ ๋ฐ๋ผ ๊ฐ Tarantool ํ๋ก์ธ์ค์ ๊ณ ์ ํ ์ญํ ์งํฉ์ ํ ๋นํฉ๋๋ค.
ํ ํด๋ก์ง ๊ด๋ฆฌ
์ด๋ค ์ญํ ์ด ์คํ๋๊ณ ์๋์ง์ ๋ํ ์ ๋ณด๋ ์ด๋๊ฐ์ ์ ์ฅ๋์ด์ผ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด "์ด๋๊ฐ"๋ ์์์ ์ด๋ฏธ ์ธ๊ธํ ๋ถ์ฐ ๊ตฌ์ฑ์ ๋๋ค. ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ํด๋ฌ์คํฐ ํ ํด๋ก์ง์ ๋๋ค. ๋ค์์ 3๊ฐ์ Tarantool ํ๋ก์ธ์ค๋ก ๊ตฌ์ฑ๋ 5๊ฐ์ ๋ณต์ ๊ทธ๋ฃน์ ๋๋ค:
์ฐ๋ฆฌ๋ ๋ฐ์ดํฐ ์์ค์ ์ํ์ง ์์ผ๋ฏ๋ก ํ๋ก์ธ์ค ์คํ์ ๋ํ ์ ๋ณด๋ฅผ ์ฃผ์ ๊น๊ฒ ์ทจ๊ธํฉ๋๋ค. ์นดํธ๋ฆฌ์ง๋ XNUMX๋จ๊ณ ์ปค๋ฐ์ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑ์ ์ถ์ ํฉ๋๋ค. ๊ตฌ์ฑ์ ์
๋ฐ์ดํธํ๋ ค๋ฉด ๋จผ์ ๋ชจ๋ ์ธ์คํด์ค๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ๊ณ ์ ๊ตฌ์ฑ์ ์๋ฝํ ์ค๋น๊ฐ ๋์๋์ง ํ์ธํฉ๋๋ค. ๊ทธ ํ ๋ ๋ฒ์งธ ๋จ๊ณ์์๋ ๊ตฌ์ฑ์ ์ ์ฉํฉ๋๋ค. ๋ฐ๋ผ์ ํ๋์ ์ฌ๋ณธ์ ์ผ์์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ๊ฒ์ผ๋ก ํ๋ช
๋๋๋ผ๋ ๋์ ์ผ์ ๋ฐ์ํ์ง ์์ต๋๋ค. ๊ตฌ์ฑ์ด ์ ์ฉ๋์ง ์๊ณ ๋ฏธ๋ฆฌ ์ค๋ฅ๊ฐ ํ์๋ฉ๋๋ค.
๋ํ ํ ํด๋ก์ง ์น์ ์๋ ๊ฐ ๋ณต์ ๊ทธ๋ฃน์ ๋ฆฌ๋์ ๊ฐ์ ์ค์ํ ๋งค๊ฐ ๋ณ์๊ฐ ํ์๋ฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ด๋ ๋ น์ ์ค์ธ ๋ณต์ฌ๋ณธ์ ๋๋ค. ๋๋จธ์ง๋ ์์ธ๊ฐ ์์ ์ ์์ง๋ง ๋๋ถ๋ถ ์ฝ๊ธฐ ์ ์ฉ์ ๋๋ค. ๋๋๋ก ์ฉ๊ฐํ ๊ฐ๋ฐ์๋ ์ถฉ๋์ ๋๋ ค์ํ์ง ์๊ณ ์ฌ๋ฌ ๋ณต์ ๋ณธ์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๋ ฌ๋ก ์ธ ์ ์์ง๋ง, ๋ฌด์จ ์ผ์ด ์์ด๋ ๋ ๋ฒ ์ํํด์๋ ์๋๋ ์์ ์ด ์์ต๋๋ค. ์ด๋ฅผ ์ํด ์ง๋์์ ํ์๊ฐ ์์ต๋๋ค.
์ญํ ์ ์ถ
๊ทธ๋ฌํ ์ํคํ ์ฒ์ ์ถ์์ ์ธ ์ญํ ์ด ์กด์ฌํ๋ ค๋ฉด ํ๋ ์์ํฌ๊ฐ ์ด๋ฅผ ์ด๋ป๊ฒ๋ ๊ด๋ฆฌํด์ผ ํฉ๋๋ค. ๋น์ฐํ 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 ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ ์ํ๋ฅผ ๋ชจ๋ํฐ๋งํฉ๋๋ค.
์ด ํ๋กํ ์ฝ์ ๊ธฐ๋ฐ์ผ๋ก ์นดํธ๋ฆฌ์ง๋ ์๋ ์คํจ ์ฒ๋ฆฌ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ๊ฐ ํ๋ก์ธ์ค๋ ํด๋น ํ๊ฒฝ์ ๋ชจ๋ํฐ๋งํ๊ณ ๋ฆฌ๋๊ฐ ๊ฐ์๊ธฐ ์๋ต์ ๋ฉ ์ถ๋ฉด ๋ณต์ ๋ณธ์ด ํด๋น ์ญํ ์ ๋์ ํ ์ ์์ผ๋ฉฐ ์นดํธ๋ฆฌ์ง๋ ์ด์ ๋ฐ๋ผ ์คํ ์ค์ธ ์ญํ ์ ๊ตฌ์ฑํฉ๋๋ค.
์ฌ๊ธฐ์ ์ฃผ์ํด์ผ ํ ์ ์ ์ ํ์ ์์ฃผ ๋ฐ๋ณตํ๋ฉด ๋ณต์ ์ค์ ๋ฐ์ดํฐ ์ถฉ๋์ด ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค. ๋ฌผ๋ก ์๋ ์ฅ์ ์กฐ์น๋ฅผ ๋ฌด์์๋ก ํ์ฑํํด์๋ ์ ๋ฉ๋๋ค. ์ฐ๋ฆฌ๋ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ๋ช
ํํ๊ฒ ์ดํดํ๊ณ ๋ฆฌ๋๊ฐ ๋ณต์๋๊ณ ์๊ด์ด ๊ทธ์๊ฒ ๋ฐํ๋ ํ์๋ ๋ณต์ ๊ฐ ์ค๋จ๋์ง ์๋๋ก ํด์ผ ํฉ๋๋ค.
์ด ๋ชจ๋ ๊ฒ์์ ์ญํ ์ด ๋ง์ดํฌ๋ก์๋น์ค์ ์ ์ฌํ๋ค๋ ๋๋์ ๋ฐ์ ์ ์์ต๋๋ค. ์ด๋ค ์๋ฏธ์์๋ 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 ํฌํธ๋ฅผ ์ง์ ํ์ต๋๋ค. ํด๋น ํฌํธ๋ก ์ด๋ํ์ฌ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
ํ๋ก์ธ์ค๊ฐ ์คํ ์ค์ด์ง๋ง ์์ง ๊ตฌ์ฑ๋์ง ์์ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ์นดํธ๋ฆฌ์ง๋ ์์ง ๋๊ฐ ๋๊ตฌ์ ๋ณต์ ํด์ผ ํ๋์ง ๋ชจ๋ฅด๊ณ ์ค์ค๋ก ๊ฒฐ์ ์ ๋ด๋ฆด ์ ์์ผ๋ฏ๋ก ์ฐ๋ฆฌ์ ์กฐ์น๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๋ค. ํ์ง๋ง ์ ํ์ ์ฌ์ง๊ฐ ๋ง์ง ์์ต๋๋ค. ์ ํด๋ฌ์คํฐ์ ์๋ช
์ ์ฒซ ๋ฒ์งธ ๋
ธ๋์ ๊ตฌ์ฑ์ผ๋ก ์์๋ฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ํด๋ฌ์คํฐ์ ๋ค๋ฅธ ํญ๋ชฉ์ ์ถ๊ฐํ๊ณ ์ญํ ์ ํ ๋นํ๋ฉด ์ด ์์ ์์ ๋ฐฐํฌ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ ์ ์์ต๋๋ค.
๊ธด ์ผ์ฃผ์ผ์ ์ผ์ ๋ง์น๊ณ ์ข์ํ๋ ์๋ฃ ํ ์์ ๋ฐ๋ฅด๋ฉฐ ํด์์ ์ทจํ์ธ์. ์์ฉ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ฒฐ๊ณผ
๊ฒฐ๊ณผ๋ ๋ฌด์์ ๋๊น? ์ํํด๋ณด๊ณ , ์ฌ์ฉํ๊ณ , ํผ๋๋ฐฑ์ ๋จ๊ธฐ๊ณ , Github์์ ํฐ์ผ์ ๋ง๋์ธ์.
์ฐธ์กฐ
[1]
์ถ์ฒ : habr.com