Mail.ru Group ááœáẠáá»áœááºá¯ááºááá¯á·ááœáẠTarantool ááŸáááẠ- áááºážááẠáá±áá¬áá±á·á
Ạ(ááá¯á·ááá¯áẠá¡ááŒááºá¡ááŸááºá¡á¬ážááŒáá·áº?) ááŸá
áºáááá¯ážááá·áº Lua ááŸá application server áá
áºáá¯ááŒá
áºáááºá áááºážááẠááŒááºáááºááŒá®áž á¡á±ážááŒáá±á¬áºáááºáž áá¬áá¬áá
áºáá¯á áá¯ááºáá±á¬ááºááá¯ááºá
áœááºážáá»á¬ážááŸá¬ á¡ááá·áºá¡áááºáááŸáááŸááá±áá²ááŒá
áºáááºá áá±á«ááºááá¯áẠá¡ááá¯ááºážá¡áá¬ááẠpanacea ááá¯ááºáá«á ááá¯á·ááŒá±á¬áá·áº Tarantool ááœáẠá¡áá»á¬ážááá¯áẠáá»áááºááŸáááŒááºážá¡ááœáẠáááááá¬áá»á¬áž ááŸáááẠ- vshard module
ááááºážáá±á¬ááºáž- áá»áœááºá¯ááºááá¯á·ááẠááŒá®ážáá¬ážáá±á¬ááá¯ááºáá»ááºá¡áá»áá¯á·ááᯠá
á¯áá±á¬ááºážáá¬ážááẠ(á¥ááá¬
á¡ááá¡áá»ááŒá¿áá¬ááá¬áá²á
áá«ááá¯á·ááŸá¬ tarantula ááŸááááºá áá«ááá¯á·ááŸá¬ vshard ááŸáááẠ- áááºážáá¬áááºááá¯áá»ááºáá²á
áááá¡áá»ááºá á¡áááºááŒá±áá²á·ááá á¹á áá«á vshard configuration ááᯠLua ááá¬ážáá»á¬ážááŸáááá·áº configure áá¯ááºáá¬ážáááºá áá»á¬ážááŒá¬ážáá±á¬ Tarantool áá¯ááºáááºážá ááºáá»á¬áž ááŸááºáááºá áœá¬á¡áá¯ááºáá¯ááºááẠááŒáá·áºáá±ááá·áºá áá áºá¡ááœááºá ááœá²á·á ááºážááŸá¯áá¯á¶á á¶ááẠáá±áá¬ááá¯ááºážááœáẠáá°áá®ááá«áááºá áá«ááᯠáááºáá°áá០ááá¯ááºááá¯ááºááá¯ááºáá»ááºááŒáá°ážá ááá¯á·ááŒá±á¬áá·áºá scriptsá Ansible ááŸáá·áº deployment systems á¡áá»áá¯ážá¡á á¬ážá¡á¬ážáá¯á¶ážááᯠá¡áá¯á¶ážááŒá¯áá«áááºá
Cartridge ááá¯ááºááá¯ááºá vshard configuration ááᯠá á®áá¶ááá·áºááœá²áááºá áááºážááẠáááºážáá¡áá±á«áº á¡ááŒá±áá¶áááºá ááá¯ááºááá¯áẠááŒáá·áºáá±ááŸá¯áá¯á¶á á¶. áááºážááẠá¡ááŒá±áá¶á¡á¬ážááŒáá·áº ááá¯ážááŸááºážáá±á¬ YAML ááá¯ááºááŒá áºááŒá®ážá Tarantool á¥ááá¬áá áºáá¯á á®ááœáẠááááºážáááºážáá¬ážááá·áº áááá¹áá°ááŒá áºáááºá ááá¯ážááŸááºážááŸá¯ááŸá¬ áá°áá±á¬ááºááá¯ááºááá¯ááºá áááºážáááœá²á·á ááºážáá¯á¶ááᯠá á±á¬áá·áºááŒáá·áºááŒá®áž áá±áá¬ááá¯ááºážááœáẠáá°áá®ááŒá±á¬ááºáž áá±áá»á¬á á±áááºá
áá¯áááá¡áá±áá²á·ááá±á¬á· á¡áááºááŒá±áá²á·ááá á¹á áá«á vshard configuration ááẠbusiness logic ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááŸáá·áº áá¬ááŸáááá¯ááºáá² programmer ááᯠáá°á·á¡áá¯ááºá០á¡á¬áá¯á¶ááŒá±á¬ááºážá á±áá¯á¶áá¬ááŒá áºáááºá ááá±á¬áá»ááºáá áºáá¯á áááºáá±á¬ááºáá¯á¶ááᯠááœá±ážááœá±ážáá±á¬á¡áá«á á¡á áááºá¡ááá¯ááºážáá áºáá¯áá»ááºážá á®ááŸáá·áº áááºážááá¯á·á á¡ááŒááºá¡ááŸááºáááºááœááºááŸá¯á¡ááŒá±á¬ááºáž ááŒá±á¬ááá¯áá±á·ááŸááá«áááºá áá±áá¬á ááºáᬠ3 áá¯ááá¯á· á¡á á¯ááá¯ááºá¡ááŒá¯á¶ááá¯ááºáá¯ááºááẠá ááºážá á¬ážááẠá á±á¬ááœááºážáá±áá«áááºá
áá»áœááºá¯ááºááá¯á·ááẠá€ááŒá¿áá¬áá»á¬ážááᯠáááºáá«áááºáá«ááŒá±ááŸááºážáá²á·ááŒá®ážá áá áºáá»áááºáá»áááºááœáẠáááºážáááá ááºáááºážáá áºáá¯áá¯á¶ážááœáẠá¡ááá®áá±ážááŸááºážááŸáá·áºá¡áá¯ááºáá¯ááºáááœááºáá°á á±ááá·áº áá»ááºážáááºáááºážááᯠáááºáá®ážááá¯ááºáááº- áááºáá®ážááŸá¯á ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯á á ááºážáááºááŸá¯á CI/CDá ááŒá¯ááŒááºááááºážááááºážááŸá¯á
Cartridge ááẠTarantool áá¯ááºáááºážá ááºáá áºáá¯á á®á¡ááœáẠá¡áááºážááá¹ááá áºáá¯á ááá±á¬ááá¬ážááᯠááááºáááºáá±ážáááºá á¡áááºážááá¹ááá»á¬ážááẠdeveloper áá áºáŠážá¡á¬áž áá¯ááºáá±ážáá¬ážááŒááºážá¡áá±á«áº á¡á¬áá¯á¶á áá¯ááºááá¯ááºá á±ááá·áº á¡áá°á¡ááá áºáá¯ááŒá áºáááºá ááá±á¬áá»ááºááœáẠáááŸáááá¯ááºáá±á¬ á¡áááºážááá¹áá¡á¬ážáá¯á¶ážááᯠTarantool á¥ááá¬áá áºáá¯áá±á«áºááœáẠáá¯ááºáá±á¬ááºááá¯ááºááŒá®áž áááºážááẠá ááºážáááºááŸá¯áá»á¬ážá¡ááœáẠáá¯á¶áá±á¬ááºáááºááŒá áºáááºá
Tarantool Cartridge áá¡áááá¡ááºá¹áá«áááºáá»á¬áž
- á¡ááá¯á¡áá»á±á¬áẠá¡á á¯ááá¯áẠá á¯á ááºážááŸá¯ á
- á¡áááºážááá¹áá¡áá áºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á á¡ááá®áá±ážááŸááºážá áá¯ááºáá±á¬ááºááá¯ááºá áœááºážááᯠáá»á²á·ááœááºááŒááºážá
- ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááŸáá·áº á¡áá¯á¶ážáá»ááŸá¯á¡ááœáẠáá»áŸá±á¬ááºááœáŸá¬áá¯á¶á á¶áá¯á¶á á¶á
- built-in á¡ááá¯á¡áá»á±á¬áẠsharding;
- Luatest á ááºážáááºááŸá¯áá±á¬ááºááŸáá·áº áá±á«ááºážá ááºážááŒááºážá
- WebUI ááŸáá·áº API ááᯠá¡áá¯á¶ážááŒá¯á á¡á á¯á¡áá±ážá á®áá¶ááá·áºááœá²ááŸá¯á
- áá¯ááºááá¯ážááŒááºážááŸáá·áº á¡áá¯á¶ážáá»áááááá¬áá»á¬ážá
áááºá¹ááá¬áá«ááá¹áá¬áá±á¬á!
áá°áá±á¬ááºááᯠááá¯ááºááá¯ááºááŒáááẠáá»áœááºá¯ááºáá á±á¬áá·áºááá¯ááºáá±á¬á·áá±á¬ááŒá±á¬áá·áº áá±á¬ááºááá¯ááºážááœáẠáááá¯áá¬ááá¬ááŸáá·áºáááºáááºááá·áº áá¬ááºáááºážááᯠáá»ááºáá¬ážáá²á·áᬠááá¯ážááŸááºážááá·áºá¡áá¬ááŒáá·áº á áááºáá«áááºá Tarantool ááá¯ááºááá¯ááºá áááºáááºááŒá®ážáá¬ážááá¯á· áá°áááẠáá»ááºáá¬á¡áá¯ááºáá¯ááºááááºá
$ tarantoolctl rocks install cartridge-cli
$ export PATH=$PWD/.rocks/bin/:$PATH
ဠcommand ááŸá áºáá¯ááẠcommand line utilities ááᯠááá·áºááœááºážááŒá®áž template á០áááºá ááááá¯á¶áž application ááᯠáááºáá®ážááá¯ááºáááº-
$ 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 repository áá áºáá¯ááŒá áºáááºá áá»áŸá±á¬ááºááœáŸá¬á ááááºá ááŸá®ááá¯ááŸá¯áá»á¬áž (áá°áá±á¬ááºááá¯ááºááá¯áẠá¡áá«á¡áááº) ááᯠáááºáááºááŒá®ážáá«á áááºážááᯠáá»ááºáá»ááºáž run ááŒáá«á áá¯á·á
$ tarantoolctl rocks make
$ ./init.lua --http-port 8080
ááá¯á·ááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·ááœáẠá¡áá¬ááẠsharded application á¡ááœáẠáá¯ááºáá±á¬ááºáá±áá±á¬ node áá áºáá¯ááŸááááºá á á°ážá ááºážááá¯áá±á¬áá°áá áºáá±á¬ááºááẠáááºá¡ááºáá¬áá±á·á áºááá¯áá»ááºáá»ááºážááœáá·áºááá¯ááºááŒá®áž áá±á¬ááºá áºááŒáá·áº node áá áºáá¯áá¡á á¯á¡áá±ážáá áºáá¯ááᯠáááºááŸááºááá¯ááºááŒá®áž ááááºááá¯áá¶á á¬ážááá¯ááºáá±á¬áºáááºáž áááºážááŒá±á¬ááºáááºá á±á¬ááœááºážáá«áááºá ááá¯á¡áá»áááºá¡ááá á¡ááá®áá±ážááŸááºážááẠáááºááá·áºá¡áá¬á០á¡áá¯á¶ážááááºááá¯ááºáá±á¬ááŒá±á¬áá·áº á¡áá¯á¶ážáá»ááŒááºážá¡ááŒá±á¬ááºáž áá±á¬ááºááŸááŒá±á¬ááŒáááºááŒá áºáá±á¬áºáááºáž ááá¯á¡áá« áá¯ááºáá±ážááẠá¡áá»áááºáá»áá±á¬ááºáá¬ááŒá®ááŒá áºáááºá
á¡ááá®áá±ážááŸááºáž ááœá¶á·ááŒáá¯ážááá¯ážáááºáá±áž
áá»áœááºá¯ááºááá¯á·ááẠáá±áá¬áááºáá¶áááŸááááºá áááºážááá¯ááááºážáááºážááŒá®áž áá áºáá±á·áá áºááŒááẠá¡á á®áááºáá¶á á¬áá áºáá¯áááºáá±á¬ááºáááá·áº ááá±á¬áá»ááºáá áºáá¯ááᯠáá¯á¶áá±á¬áºááŒáá·áºááẠá ááºážá á¬ážááŒáá·áºáá«á
áá»áœááºá¯ááºááá¯á·ááẠáá¯á¶ááŒááºážáá
áºáá¯ááᯠá
áááºáá±ážááœá²ááŒá®áž áááºážááœáẠá¡á
áááºá¡ááá¯ááºážáá¯á¶ážáá¯- ááááºáá±ážá ááá¯ááŸá±á¬ááºááŸá¯ááŸáá·áº á¡áá»áááºááá¬ážááœá²áá«á áá»áœááºá¯ááºááá¯á·ááẠáááá¯áá¬ááá¬ááᯠáááºáááºáá¯ááºáá±á¬ááºáá±áá«áááºá áá»áœááºá¯ááºááá¯á·ááẠvshard ááᯠááá¯ááŸá±á¬ááºááŸá¯á¡ááŒá
Ạá¡áá¯á¶ážááŒá¯áá±á¬ááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·ááẠá¡á
á®á¡á
ááºááœáẠvshard-router ááŸáá·áº vshard-storage ááᯠáá±á«ááºážááá·áºáá«áááºá ááááºáá±áž ááá¯á·ááá¯áẠá¡áá»áááºááá¬ážááœá²áá°ááẠááá¯ááŸá±á¬ááºáááºážááᯠááá¯ááºááá¯ááºáááºáá±á¬ááºáááºááá¯ááºáá«á áááºážááẠrouter á¡ááœááºááŒá
áºáááºá áááºážááẠáááºáá®ážáá¬ážááá·áºá¡áá¬ááŒá
áºáááºá
á¡á
áááºá¡ááá¯ááºážáá»á¬ážááẠá
ááá¹áááá¯á¶áá±á«ááºáá±áá±á¬ááŒá±á¬áá·áº ááá±á¬áá»ááºááœáẠáááºáá±á¬ááºááá·áºá¡áá¬ááᯠá¡ááá¡áá» ááá¯ááºá
á¬ážáááŒá¯áá±ážáá«á áááºážááᯠá
á
áºááŸááºáá±á¬ Tarantool ááœáẠáááºááá¯á·áááºáá¯á¶ááŒááááºááᯠáá»áœááºá¯ááºááá¯á·ááŒáá·áºáááºááá¯áá±ážááẠ- áá»áœááºá¯ááºááá¯á·áá¡á
áááºá¡ááá¯ááºážáá»á¬ážááᯠáá¯ááºáááºážá
ááºá¡ááá¯áẠá¡á¯ááºá
á¯ááœá²á·ááá¯ááºááŒáá«á
áá¯á·á
áá®ážááŒá¬ážááŒá
áºáááºáá»á¬ážááœáẠvshard-router ááŸáá·áº gateway ááá¯áá¬ážááŸááááºá¡áá»ááºá¡áááºážáááºááŸááááºá áááºážááẠrouter ááá¬áááºááŸáááŒá®ážáá¬ážááŒá
áºáá«á ááœááºáááºááᯠáá±á¬ááºáá
áºááŒáááºááŒááºáááºá¡áá¯á¶ážááŒá¯ááẠá¡áááºááŒá±á¬áá·áºááá¯á¡ááºááááºážá áááºážááá¯á·ááẠáá°áá®áá±á¬áá¯ááºáááºážá
ááºá¡ááœááºáž áá¯ááºáá±á¬ááºááááºááŒá
áºáááºá ááá¯ááá¯áááºááŸá¬á gateway ááŸáá·áº vshard.router.cfg ááŸá
áºáá¯áá¯á¶ážááᯠáá¯ááºáááºážá
ááºáá
áºáá¯áááºážááœáẠá
áááºáá¯ááºáá±á¬ááºááŒá®áž áááºážááá¯á·á¡á¬áž á
ááºááœááºáž á¡ááŒááºá¡ááŸááºá¡áá»áá¯ážáááºáá±á¬ááºá
á±áá«áááºá
áá®ááá¯ááºážá¡ááá·áºááœááºá á¡á áááºá¡ááá¯ááºážáá¯á¶ážáá¯ááŒáá·áºá¡áá¯ááºáá¯ááºáááºá¡áááºááŒá±áá±á¬áºáááºážá áá»áœááºá¯ááºááẠdeveloper áá áºáŠážá¡áá±ááŒáá·áºá áá¯ááºáá±ážáá±á ááºááœáẠTarnatool áá¥ááá¬áá¯á¶ážáá¯ááá¯á áááºáááºáá ááºážá á¬ážáá»ááºáá«á áá»áœááºá¯ááºááẠá á áºáá±ážááŸá¯áá»á¬ážááᯠáá¯ááºáá±á¬ááºááŒá®áž áá»áœááºá¯ááºááẠááááºáááᯠááŸááºáááºá áœá¬ áá±ážáá¬ážáá¬ážááŒá±á¬ááºáž á á áºáá±ážááẠááá¯á¡ááºáá«áááºá áá«ááŸááá¯áẠáá»áœááºáá±á¬á·áºáá²á· áá¯ááºáá±á¬áºááá¯ááºáááºááœá±ááᯠá¡ááºá¹áá«áááºáá áºáá¯ááᯠááá¯ááºááŒáá»ááºáá¬áááºáž ááŒá áºááá¯ááºáá«áááºá áá±á¬áºáá®áá¯á¶ážá á±á¬ááºááᯠááŒáá·áºáá»ááºááá¯á· áá¬ááŒá±á¬áá·áºá¡áááºá¡áá²ááŒá¯á¶áááá²á á€áááºááŸá¬ á¡áááºážááá¹ááá»á¬ážá ááá±á¬ááá¬ážááᯠááœá±ážááœá¬ážáá¬ááŒááºážááŒá áºáááºá á¡áááºážááá¹ááá áºáá¯ááẠCartridge á០á á®áá¶ááá·áºááœá²ááá·áº áá¯á¶ááŸáẠlush module áá áºáá¯ááŒá áºáááºá á€á¥ááá¬ááœáẠgatewayá routerá storageá scheduler áá±ážáá¯ááŸááááºá á¡ááŒá¬ážááá±á¬áá»ááºáá áºáá¯ááœáẠáá±á¬ááºáááºááŸáááá¯ááºáááºá á¡áááºážááá¹áá¡á¬ážáá¯á¶ážááᯠáá¯ááºáááºážá ááºáá áºáá¯áááºážááœáẠáá¯ááºáá±á¬ááºááá¯ááºááŒá®ážá áááºážááẠáá¯á¶áá±á¬ááºáááºááŒá áºáááºá
á¡ááá·áºáááºááŸááºááŒááºáž ááá¯á·ááá¯áẠáá¯ááºáá¯ááºááŒááºážááá¯á· ááŒáá·áºáá»ááºááŒááºážááŸáá·áºáááºáááºáá¬áá»áŸáẠáá»áœááºá¯ááºááá¯á·ááẠáá¬á·ááºáá²á
áœááºážáááºáá»á¬ážáá±á«áºáá°áááºá Tarantool áá¯ááºáááºážá
ááºáá
áºáá¯á
á®ááᯠáááºážáááá¯ááºááá¯ááºá¡áááºážááá¹áá¡á
á¯á¶ááᯠáááºááŸááºáá±ážáá«áááºá
Topology á á®áá¶ááá·áºááœá²ááŸá¯
áááºááá·áº á¡áááºážááá¹ááá»á¬áž áá¯ááºáá±á¬ááºáá±áááºááŸáá·áº áááºáááºáá±á¬ á¡áá»ááºá¡áááºáá»á¬ážááᯠáá áºáá±áá¬áá¬ááœáẠááááºážáááºážáá¬ážááááºá ဠâáá áºáá±áá¬â ááẠá¡áááºááœááºáá±á¬áºááŒáá²á·ááŒá®ážáá±á¬ ááŒáá·áºáá±áá¬ážáá±á¬ááœá²á·á ááºážáá¯á¶ááŒá áºáááºá áááºážááŸáá·áºáááºáááºáá±á¬ á¡áá±ážááŒá®ážáá¯á¶ážá¡áá»ááºááŸá¬ cluster topology ááŒá áºáááºá á€ááœáẠTarantool áá¯ááºáááºážá áẠ3 áá¯á áá¯á¶áá°ááœá¬ážá¡ááœá²á· 5 áᯠááŸááá«áááºá
áá»áœááºá¯ááºááá¯á·ááẠáá±áá¬ááᯠááá¯á¶ážááŸá¯á¶ážá
á±ááá¯áá±á¬ááŒá±á¬áá·áº áá¯ááºáá±á¬ááºáá±ááá·áº áá¯ááºáááºážá
ááºáá»á¬ážá¡ááŒá±á¬ááºáž á¡áá»ááºá¡áááºáá»á¬ážááᯠááá¯áá
áá¯áẠáá±á¬ááºááœááºáá±ážáá«áááºá Cartridge ááẠtwo-phase commit ááᯠá¡áá¯á¶ážááŒá¯á configuration ááᯠááŒá±áá¬áá¶áááºá áá»áœááºá¯ááºááá¯á·ááẠááœá²á·á
ááºážááŸá¯áá¯á¶á
á¶ááᯠá¡ááºááááºáá¯ááºááá¯áááºááŸáá·áºáá
áºááŒáá¯ááºáááºá áááºážááẠáá¬áááá»á¬ážá¡á¬ážáá¯á¶ážááá¯áááŸáááá¯ááºááŒá®áž ááœá²á·á
ááºážááŸá¯á¡áá
áºááᯠáááºáá¶áááºá¡áááºááá·áºááŒá
áºááŒá±á¬ááºáž áŠážá
áœá¬á
á
áºáá±ážáááºá áááºážááŒá®ážáá±á¬ááºá áá¯áááá¡ááá·áºááœáẠconfig ááá¯á¡áá¯á¶ážááŒá¯áááºá ááá¯á·ááŒá±á¬áá·áº áááá¹áá°áá
áºáá¯ááẠáá±áá¹áááááá¯ááºáá±á¬á·áá±á¬áºáááºáž ááá±á¬ááºážáá±á¬á¡áá¬ááŒá
áºááá¬áá«á ááœá²á·á
ááºážááŸá¯áá¯á¶á
á¶ááᯠááá¯ážááá¯ážááŸááºážááŸááºáž á¡áá¯á¶ážáá»áááºááá¯ááºáá² á¡ááŸá¬ážá¡ááœááºážáá
áºáá¯ááᯠááŒáá¯áááºááŒááºááá«áááá·áºáááºá
topology á¡ááá¯ááºážááœááºáááºážá ááœá¬ážááŸá¯á¡á¯ááºá á¯áá áºáá¯á á®á áá±á«ááºážáá±á¬ááºá¡ááŒá Ạá¡áá±ážááŒá®ážáá±á¬ ááá·áºáááºáá±á¬ááºáá áºáá¯ááᯠááœáŸááºááŒáá¬ážáááºá á¡áá»á¬ážá¡á¬ážááŒáá·áº áááºážááẠááŸááºáááºážáááºáá¬ážáá±á¬ áááá¹áá°ááŒá áºáááºá ááŒáœááºážáá»ááºáá»á¬ážááŸáááá¯ááºáá±á¬áºáááºáž áá»ááºáááºá¡áá»á¬ážá á¯ááŸá¬ áááºáááºáá¬ááŒá áºáááºá áá áºáá«áá áºáá¶ááœáẠáá²ááá·áºáá±á¬ developer áá»á¬ážááẠáááááá¹ááá»á¬ážááᯠáááŒá±á¬ááºááŒáá² áá»ááºážááŒáá¯ááºáá»á¬ážá áœá¬ááᯠáá¯á¶áá°áá°ážáá»ááẠá¡áá»ááºá¡áááºáá»á¬ážááᯠáá±ážáá¬ážááá¯ááºáá±á¬áºáááºážá áááºááá¯á·áááºááŒá áºá á± ááŸá áºááŒáááºááá¯ááºáá±á¬ááºááá·áºáá±á¬ á¡áá»áá¯á·áá±á¬áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááŸááá«áááºá áá®á¡ááœáẠáá±á«ááºážáá±á¬ááºáá áºáá±á¬ááºáá²á· ááá¹ááá¬ááŸááááºá
á¡áááºážááá¹ááá»á¬ážááá
ááá¯ááá¯á·áá±á¬ áááá¯áá¬áááºáá¬áá áºáá¯ááœáẠá ááá¹ááá¡áááºážááá¹ááá áºáᯠáááºááŸááááºá¡ááœááºáá°áá±á¬ááºááẠáááºážááá¯á·á¡á¬áž áá áºáááºážáááºážááŒáá·áº á á®áá¶ááá·áºááœá²ááááºááŒá áºáááºá áá¯á¶ááŸááºá¡á¬ážááŒáá·áºá Tarantool áá¯ááºáááºážá ááºááᯠááŒááºáááºá áááºááŒááºážáááŸááá² ááááºážáá»á¯ááºááŸá¯ ááŒá áºáá±á«áºáá«áááºá á¡áááºážááá¹ááá»á¬ážááᯠá á®áá¶ááá·áºááœá²ááẠáá±á«áºááá¯ááŸá¯ 4 áá¯ááŸááááºá Cartridge ááá¯ááºááá¯ááºááááºážáááŒáá·áºáá±áá¬ážáá±á¬ááœá²á·á ááºážáá¯á¶ááœááºáá±ážáá¬ážááá·áºá¡áá¬áá±á«áº áá°áááºá áááºážááá¯á·ááá¯áá±á«áºááá¯áááºááŒá áºááŒá®ážá ááá¯á·ááŒá±á¬áá·áº configuration ááá¯áááºááŸááºáá¬ážáá±á¬á¡áááºážááá¹ááá»á¬ážááá¯á·á¡áá¯á¶ážááŒá¯áááºá
function init()
function validate_config()
function apply_config()
function stop()
á¡áááºážááá¹ááá
áºáá¯á
á®ááœáẠfunction áá
áºáá¯á
á®ááŸááááºá init
. á¡áááºážááá¹áááá¯ááœáá·áºááá·áºá¡áá« ááá¯á·ááá¯áẠTarantool ááᯠááŒááºáááºá
áááºááá·áºá¡áá«ááœáẠáá
áºááŒáááºáá±á«áºáááºá á¥ááá¬á¡á¬ážááŒáá·áº box.space.create ááᯠá¡á
ááŒá¯ááẠá¡áááºááŒá±áááºá ááá¯á·ááá¯áẠá¡áá»áááºáá¬ááá
áºáá¯á¡ááœááºáž á¡áá¯ááºáá¯ááºáá±á¬ááºááá·áº áá±á¬ááºáá¶ááá¯ááºáá¬á¡áá»áá¯á·ááᯠá¡áá»áááºááá¬ážááœá²ááŒááºážááŒáá·áº á
áááºááá¯ááºáááºá
áá¯ááºáá±á¬ááºáá»ááºáá
áºáᯠinit
ááá¯á¶áá±á¬ááºááá¯ááºáá«á Cartridge ááẠtopology ááá¯ááááºážáááºážáááºá¡áá¯á¶ážááŒá¯áá±á¬ááŒáá·áºáá±áá¬ážáá±á¬ááœá²á·á
ááºážáá¯á¶áá¡ááœáá·áºáá±á¬ááºážááá¯ááá°áááºáá¬áááºáá»á¬ážááá¯ááœáá·áºááŒá¯áááºá áá°áá®áá±á¬ááœá²á·á
ááºážáá¯á¶ááœáẠááá¹áá¡áá
áºáá
áºáá¯ááᯠáá»áœááºá¯ááºááá¯á·ááŒá±áá¬ááá¯ááºááŒá®áž áááºážááœáẠáá¯ááºáááºážááœá²á·á
ááºážáá¯á¶áá¡ááá¯ááºážá¡á
ááᯠááááºážáááºážááá¯ááºáááºá áá»áœááºá¯ááºáá¥ááá¬ááœááºá áááºážááẠá¡á
á®á¡á
ááºááœá²áá°á¡áááºážááá¹áá¡ááœáẠáá±áá¬á¡á
á®á¡á
áẠááá¯á·ááá¯áẠá¡áá»áááºááá¬ážáááºáááºáá»á¬áž ááŒá
áºááá¯ááºáááºá
á¡á
á¯á¡áá±ážáá±á«áºááá¯ááŸá¯áá»á¬áž validate_config
О apply_config
ááŒáá·áºáá±áá¬ážáá±á¬ ááœá²á·á
ááºážááŸá¯áá¯á¶á
á¶ááẠááŒá±á¬ááºážáá²ááá·áºá¡áá«ááá¯ááºážá á¡ááá·áºááŸá
áºááá·áº ááœááºááá·áºáá
áºáá¯ááŒáá·áº ááœá²á·á
ááºážááŸá¯áá
áºáá¯ááᯠá¡áá¯á¶ážáá»áá±á¬á¡áá«á ááá¹ááá
áºáá¯á
á®ááẠá€ááœá²á·á
ááºážáá¯á¶á¡áá
áºááᯠáááºáá¶ááẠá¡áááºááá·áºááŒá
áºáááŒá
áºááᯠá
á
áºáá±ážááŒá®áž ááá¯á¡ááºáá«á á¡áá¯á¶ážááŒá¯áá°áᶠá¡ááŸá¬ážá¡ááœááºážáá
áºáᯠááááºážááá¯á·áá«áááºá á¡á¬ážáá¯á¶ážá configuration ááá¯áá¯á¶ááŸááºááŒá
áºááŒá±á¬ááºážááá±á¬áá°áá±á¬á¡áá«, ááá¯á·áá±á¬áẠapply_config
.
á¡áááºážááá¹áááœááºáááºáž áááºážáááºážáá
áºáá¯ááŸááááºá stop
á¡áááºážááá¹ááááœááºááŸáááŸá¯ááᯠááŸááºážáááºážááẠááá¯á¡ááºáá«áááºá á€áá¬áá¬ááœáẠá¡áá»áááºááá¬ážááœá²ááẠáááá¯á¡ááºáá±á¬á·áᯠáá»áœááºá¯ááºááá¯á·ááŒá±á¬áá«áá áááºážááẠáááºážááœáẠá
áááºáá²á·áá±á¬ ááá¯ááºáá¬áá»á¬ážááᯠáááºááá·áºááœá¬ážááá¯ááºáááºá init
.
á¡áááºážááá¹ááá»á¬ážááẠá¡áá»ááºážáá»ááºáž á¡ááŒááºá¡ááŸáẠá¡áá»áá¯ážááŒá¯ááá¯ááºáááºá áá»áœááºá¯ááºááá¯á·ááẠLua ááœáẠáá¯ááºáá±á¬ááºáá»ááºáá±á«áºááá¯ááŸá¯áá»á¬ážááᯠáá±ážáá¬ážáá¬ááœáẠá¡áá¯á¶ážááŒá¯áá±á·ááŸááá±á¬áºáááºáž áá±ážáá¬ážáá±á¬áá¯ááºáááºážá ááºááœáẠáá»áœááºá¯ááºááá¯á·ááá¯á¡ááºáá±á¬ á¡áááºážááá¹áá០áá«áááºááŒááºážáááŸááá±á¬ááŒá±á¬áá·áº ááŒá áºááá¯ááºáá«áááºá ááœááºáááºáá±á«áºááŸá áá±á«áºááá¯ááŸá¯áá»á¬ážááᯠááœááºáá°áá»á±á¬ááœá±á·á á±áááºá áá»áœááºá¯ááºááá¯á·ááẠTarantool ááœáẠáááºáá±á¬ááºáá¬ážáá±á¬ Standard netbox ááᯠá¡ááŒá±áá¶á áááºáá±á¬ááºáá¬ážááá·áº rpc (á¡áá±ážá០áá±á«áºááá¯ááŸá¯) á¡áááºáá±á¬áºáá»á°ážááᯠá¡áá¯á¶ážááŒá¯áá«áááºá á¥ááá¬á¡á¬ážááŒáá·áºá áááºá gateway ááẠáá áºáá±á·áá¬á á±á¬áá·áºááá¯ááºážáááá·áºá¡á á¬áž á¡áá¯ááºáá»áááºááá¬ážááᯠáá»ááºáá»ááºážáá¯ááºáá±á¬ááºááẠá¡á á®á¡á ááºááŸá°ážááᯠááá¯ááºááá¯ááºáá±á¬ááºážááá¯ááá¯áá«á áááºážááẠá¡áá¯á¶ážáááºááá¯ááºáááºá
áá±á¬ááºáááºá¡áá±ážááŒá®ážáá±á¬á¡áá»ááºááŸá¬ á¡ááŸá¬ážáá¶ááá¯ááºáááºááŸáá
á±áááºááŒá
áºáááºá Cartridge ááẠáá»ááºážáá¬áá±ážááᯠá
á±á¬áá·áºááŒáá·áºááẠSWIM áááá¯ááá¯áá±á¬ááᯠá¡áá¯á¶ážááŒá¯áááºá
á€áááá¯ááá¯áá±á¬ááᯠá¡ááŒá±áá¶á Cartridge ááẠá¡ááá¯á¡áá»á±á¬áẠáá»áá¯á·ááœááºážááŸá¯ áá¯ááºáá±á¬ááºááŒááºážááᯠá
á®á
ááºáá±ážáá«áááºá áá¯ááºáááºážá
ááºáá
áºáá¯á
á®ááẠáááºážááááºáááºážáá»ááºááᯠá
á±á¬áá·áºááŒáá·áºá
á
áºáá±ážááŒá®áž áá±á«ááºážáá±á¬ááºáá¯ááºááááºáá¯á¶á·ááŒááºááŸá¯áááºááá·áºááœá¬ážáá«á áá¯á¶á
á¶áá°ááẠáááºážáá¡áááºážááá¹áááᯠáá¬áááºáá°ááá¯ááºááŒá®áž Cartridge ááẠáá¯ááºáá±á¬ááºáá±ááá·áº á¡áááºážááá¹ááá»á¬ážááᯠáá»á±á¬áºáá®á
áœá¬ á
á®á
ááºáááºááŸááºáá±ážáááºá
áááŒá¬ááá¡ááŒááºááŒááºá¡ááŸááºááŸááºááŒá±á¬ááºážááŒááºážááẠáá¯á¶áá°ááœá¬ážá
ááºá¡ááœááºáž áá±áá¬ááœá²ááœá²ááŸá¯áá»á¬ážááᯠááŒá
áºáá±á«áºá
á±ááá¯ááºáá±á¬ááŒá±á¬áá·áº á€áá±áá¬ááœáẠááááá¬ážáááºááá¯áááºá áá¯ááºáá«áááºá áááºááẠá¡ááá¯á¡áá»á±á¬ááºáá»ááºááœááºááŸá¯ááᯠááŒá¯á¶áááᯠáááœáá·áºááá·áºáá«á ááŒá
áºáá»ááºáá±ááá·áºá¡áá¬ááᯠáá»áœááºá¯ááºááá¯á· ááŸááºážááŸááºážáááºážáááºáž áá¬ážáááºáá¬ážááááºááŒá
áºááŒá®áž áá±á«ááºážáá±á¬ááºááᯠááŒááºáááºááá°ááŒá®áž áááá°ááᯠáá°á·áá¶ááŒááºáá±ážááŒá®ážáá±á¬áẠáá¯á¶áá°ááœá¬ážááŸá¯ ááœá²ááœá¬ážáááºááá¯ááºááŒá±á¬ááºáž áá±áá»á¬á
á±ááááºá
á€á¡áá¬á¡á¬ážáá¯á¶ážááŸá á¡áááºážááá¹ááá»á¬ážááẠááá¯ááºáááá¯áááºáá±á¬ááºááŸá¯áá»á¬ážááŸáá·áº áááºáá°áááºáᯠáá¶á á¬ážáááá¯ááºáááºá áá áºáááºážá¡á¬ážááŒáá·áºá áááºážááá¯á·ááẠTarantool áá¯ááºáááºážá ááºáá»á¬ážá¡ááœááºážááŸá module áá»á¬ážá¡ááŒá áºáá¬ááŒá áºáááºá áá«áá±ááá·áº á¡ááŒá±áᶠááœá²ááŒá¬ážááŸá¯ááœá±áááºáž ááŸááá«áááºá ááááŠážá áœá¬á ááá±á¬áá»ááºá¡áááºážááá¹áá¡á¬ážáá¯á¶ážááẠáá°áá®áá±á¬áá¯ááºá¡ááŒá±áá¶ááœáẠáá±ááá¯ááºááááºááŒá áºáááºá ááŸáá·áº Tarantool áá¯ááºáááºážá ááºá¡á¬ážáá¯á¶ážááᯠáá°áá®áá±á¬áá¯ááºá¡ááŒá±áá¶á០á áááºáá¯ááºáá±á¬ááºááá·áºáááºá ááá¯á·ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·ááẠá¡áá»áááºááá¬ážááᯠá áááºáááºááŒáá¯ážá á¬ážáá±á¬á¡áá«ááœááºáá²á·ááá¯á· á¡á¶á·ááŒá áá¬áá»á¬ážáááŸáá á±áááºá ááá¯á·áá±á¬áº áááºážááẠááá¯ážááá¯ážááŸááºážááŸááºážáááŸááá«á ááá¯á·á¡ááŒááºá áááºááẠáá¯ááºáá¬ážááŸááºážáá»á¬ážááœáẠááœá²ááŒá¬ážááŸá¯áá»á¬ážááᯠááœáá·áºáááŒá¯ááá·áºáá«á ááá¯ááá¯á·áá±á¬ á¡ááŒá±á¡áá±ááœáẠá áá áºá á¡ááŒá¯á¡áá°ááẠááŒáá¯áááºááá·áºááŸááºážáááºááŸáá·áº á¡ááŸá¬ážááŸá¬ááẠá¡ááœááºáááºáá²áá±á¬ááŒá±á¬áá·áº ááŒá áºáááºá
Docker ááŸáá·áºááá°áá² áá»áœááºá¯ááºááá¯á·ááẠ"image" ááᯠá¡ááŒá¬ážá ááºáá áºáá¯ááá¯á· áá±á«áºááœá¬ážááŒá®áž áááºážááᯠááá¯áá±áá¬ááœáẠáááºáááºáá¯á¶áá»áŸááŒáá·áº ááááá¯ááºáá«á áá»áœááºá¯ááºááá¯á·áá¡áááºážááá¹ááá»á¬ážááẠDocker ááœááºááááºáá¬áá»á¬ážáá²á·ááá¯á· áá®ážááŒá¬ážáááŸááá«á ááá¯á·á¡ááŒááºá á¥ááá¬áá áºáá¯ááœáẠáááºáá°áááºáá»áŸ á¡áááºážááá¹áááŸá áºáá¯ááᯠáá»áœááºá¯ááºááá¯á· áá¯ááºáá±á¬ááºááááá«á á¡áááºážááá¹ááá áºáá¯ááŸááááºááŒá áºá á± áááŸááááºááŒá áºá á± áá áºáááºážá¡á¬ážááŒáá·áº áááºážááẠsingleton ááŒá áºáááºá ááááá¡áá»ááºááŸá¬á áá°ážáá°ááŸá¯á¡á¯ááºá á¯áá áºáá¯áá¯á¶ážááœáẠá¡áááºážááá¹ááá»á¬ážááẠá¡áá°áá°áááºááŒá áºááááºá ááá¯ááºáá«á á¡áááá¹áá«ááºáá²á·ááœá¬ážáááá·áºááẠ- áá±áá¬ááẠá¡áá°áá°áááºááŒá áºáá±á¬áºáááºáž ááœá²á·á ááºážááŸá¯áá¯á¶á á¶á ááá°áá«á
ááŒáá·áºáá»ááºáá±ážáááááá¬áá»á¬áž
Cartridge ááẠá¡ááºááºáá®áá±ážááŸááºážáá»á¬áž ááŒáá·áºáá»ááºáá¬ááœáẠáá°áá®áá±ážáá¯á¶ááᯠááŒááááºáᯠáááááŒá¯áá²á·áááºá á¡ááŒá¬ážáá°áá»á¬ážá¡ááœáẠááááá¯ááá¯ááœááºáá°á á±áááºá áá°áá±á¬ááºáááºáá±á·áá»áº RPM áááºáá±á·áá»áºáá»á¬áž-
$ cartridge pack rpm myapp -- ÑпакÑÐµÑ ÐŽÐ»Ñ ÐœÐ°Ñ ./myapp-0.1.0-1.rpm
$ sudo yum install ./myapp-0.1.0-1.rpm
ááá·áºááœááºážáá¬ážáá±á¬ áááºáá±á·áá»áºááœáẠáááºááá¯á¡ááºááá·áºá¡áá¬á¡á¬ážáá¯á¶ážáá®ážáá«áž áá«áááºáááº- á¡ááºááºáá®áá±ážááŸááºážááŸáá·áº ááá·áºááœááºážáá¬ážááá·áº ááŸá®ááá¯ááŸá¯ááŸá áºáá¯á áá¯á¶ážá Tarantool ááẠRPM áááºáá±á·áá»áºáááŸá®ááá¯ááŸá¯áá áºáá¯á¡áá±ááŒáá·áº áá¬áá¬áá±á«áºááœááºáááºážáá±á¬ááºááŸááá¬áááºááŒá áºááŒá®áž áá»áœááºá¯ááºááá¯á·ááááºáá±á¬ááºááŸá¯ááẠá áááºáááºá¡áááºááá·áºááŒá áºáá±áá«ááŒá®á áááºážááᯠsystemd ááŒáá·áºáá¯ááºáá±á¬ááºáá±á¬áºáááºáž áŠážá áœá¬áááºá¡áááºážáááºááœá²á·á ááºážáá¯á¶ááá¯áá±ážáááºááá¯á¡ááºáááºá á¡áááºážáá¯á¶ážá áá¯ááºáááºážá ááºáá áºáá¯á á®á URI ááᯠáááºááŸááºáá«á á¥ááᬠáá¯á¶ážáá¯áá²á· áá¯á¶áá±á¬ááºáááºá
$ 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
á€áá±áá¬ááœáẠá áááºáááºá á¬ážá áá¬áá±á¬ááºážáá±á¬ áá°ážááŒá¬ážáá»ááºáá áºáá¯ááŸááááºá binary protocol port ááá¯áá¬áááºááŸááºááá·áºá¡á á¬ážá hostname á¡áá«á¡ááẠprocess á public address áá áºáá¯áá¯á¶ážááᯠáááºááŸááºáá±ážáá«áááºá Cluster node áá»á¬ážááẠáá áºáá¯ááŸáá·áºáá áºáᯠáááºááá¯á·áá»áááºáááºááááºááᯠááááŸáááá¯ááºááẠáááºážááẠááá¯á¡ááºáá«áááºá 0.0.0.0 ááᯠadvertise_uri ááááºá á¬á¡ááŒá Ạá¡áá¯á¶ážááŒá¯ááŒááºážááẠááá±á¬ááºážááŒá±á¬ááºážá áááºážááẠsocket bind ááá¯ááºáá² ááŒááºá IP ááááºá á¬ááŒá áºááá·áºáááºá áááºážáááŸááá»áŸáẠáááºááá·áºá¡áá¬á០á¡áá¯ááºáááŒá áºáá«á ááá¯á·ááŒá±á¬áá·áº Cartridge ááẠááá·áºá¡á¬áž ááŸá¬ážááœááºážáá±á¬ advertise_uri ááŒáá·áº node áá áºáá¯ááᯠááœáá·áºááœáá·áºááŒá¯áááºááá¯ááºáá«á
ááá¯ááœá²á·á ááºážááŸá¯á¡áááºááá·áºááŒá áºááŒá®á áááºáááºáá¯ááºáááºážá ááºáá»á¬ážááá¯á áááºááá¯ááºáááºá áá¯á¶ááŸáẠsystemd áá°áá áºáá áºáá¯ááẠáá¯ááºáááºážá ááºáá áºáá¯áááºááá¯áá áááºáááºááœáá·áºáááŒá¯áá±á¬ááŒá±á¬áá·áºá Cartridge áá±á«áºááŸá applications áá»á¬ážáá¯áá±á«áºááœááºááá·áºááœááºážáá¬ážáááºá á€áá²á·ááá¯á·áá¯ááºáá±á¬ááºáá±á¬ instantiated áá°áá áºáá»á¬áž-
$ sudo systemctl start myapp@router
$ sudo systemctl start myapp@storage_A
$ sudo systemctl start myapp@storage_B
ááœá²á·á ááºážááŸá¯áá¯á¶á á¶ááœááºá Cartridge ááẠáááºá¡ááºáá¬áá±á·á áº- 8080 ááᯠáááºáá±á¬ááºááŸá¯áá±ážááá·áº HTTP áá±á«ááºááᯠáá»áœááºá¯ááºááá¯á·áááºááŸááºáá¬ážáááºá áááºážááá¯ááœá¬ážá ááŒáá·áºááŒáá«á áá¯á·-
áá¯ááºáááºážá
ááºáá»á¬áž áá¯ááºáá±á¬ááºáá±áá±á¬áºáááºáž áááºážááá¯á·ááᯠááááºááŸááºááá±ážááŒá±á¬ááºáž áá»áœááºá¯ááºááá¯á·ááŒááºááá«áááºá áááºážáá±á¬áá·áºááẠáááºáá°ááŸáá·áº áá¯á¶áá°áá°ážááá·áºáááºááᯠáááááá±ážáá² áááºážááá¯ááºááá¯áẠáá¯á¶ážááŒááºáá»ááºááá»ááá¯ááºáá±ážáá±á¬ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·á áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠá
á±á¬áá·áºááá¯ááºážáá±áá«áááºá ááá¯á·áá±á¬áº áá»áœááºá¯ááºááá¯á·ááœáẠááœá±ážáá»ááºá
áá¬áá»á¬ážá
áœá¬áááŸááá«- á¡á
á¯á¡ááœá²á·á¡áá
áºáá
áºáá¯áááááẠááá node áááœá²á·á
ááºážáá¯á¶ááŒáá·áº á
áááºáááºá ááá¯á·áá±á¬áẠáá»áœááºá¯ááºááá¯á·ááẠá¡ááŒá¬ážáá°áá»á¬ážááᯠá¡á
á¯á¡áá±ážááá¯á· áá±á«ááºážááá·áºáááºááŒá
áºááŒá®áž áááºážááá¯á·ááᯠá¡áááºážááá¹ááá»á¬áž áááºááŸááºáá±ážáááºááŒá
áºááŒá®áž á€á¡áá»áááºááœáẠááŒáá·áºáá»ááºááŸá¯ááᯠá¡á±á¬ááºááŒááºá
áœá¬ ááŒá®ážááŒá±á¬ááºáááºáᯠáá°áááá¯ááºáá«áááºá
á¡áá¯ááºáááºááá¹ááááºááŒá¬ááŒáá·áºááŒá®ážáá±á¬áẠááá¯ááºááŸá áºáááºáᬠáá áºááœááºáá±á¬ááºááŒá®áž á¡áá¬ážáá°ááá¯ááºááŒáá¡á±á¬ááºá áá»áŸá±á¬ááºááœáŸá¬ááá¯áá¯á¶ážááá¯ááºáááºá
ááááºáá»á¬ážááá¯
ááááºááœá±á áá¬ááœá±áá²á á ááºážáá¯á¶ážááŒáá·áºáá«á á¡áá¯á¶ážááŒá¯áá«á á¡ááŒá¶ááŒá¯áá»ááºáá±ážáá«á Github ááœáẠáááºááŸááºáá»á¬ážáááºáá®ážáá«á
ááá¯ážáá¬áž
[2]source: www.habr.com