เบ•เบญเบเบ•เบฐเบซเบฅเบฑเบš Tarantool: sharding a Lua backend เป€เบ›เบฑเบ™เบชเบฒเบกเบชเบฒเบ

เบ•เบญเบเบ•เบฐเบซเบฅเบฑเบš Tarantool: sharding a Lua backend เป€เบ›เบฑเบ™เบชเบฒเบกเบชเบฒเบ

เบขเบนเปˆเบ—เบตเปˆ Mail.ru Group เบžเบงเบเป€เบฎเบปเบฒเบกเบต Tarantool - เบ™เบตเป‰เปเบกเปˆเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เปƒเบ™ Lua, เป€เบŠเบดเปˆเบ‡เบเบฑเบ‡เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบชเบญเบ‡เป€เบ—เบปเปˆเบฒเป€เบ›เบฑเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ (เบซเบผเบทเปƒเบ™เบ—เบฒเบ‡เบเบฑเบšเบเบฑเบ™?). เบกเบฑเบ™เป„เบงเปเบฅเบฐเป€เบขเบฑเบ™, เปเบ•เปˆเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบซเบ™เบถเปˆเบ‡เปเบกเปˆเบ™เบเบฑเบ‡เบšเปเปˆเบˆเปเบฒเบเบฑเบ”. เบเบฒเบ™โ€‹เบ›เบฑเบšโ€‹เบ‚เบฐโ€‹เปœเบฒเบ”โ€‹เปƒเบ™โ€‹เปเบ™เบงโ€‹เบ•เบฑเป‰เบ‡โ€‹เบเบฑเบ‡โ€‹เบšเปเปˆโ€‹เปเบกเปˆเบ™โ€‹เบขเบฒโ€‹เบšเป‰เบฒ, เบ”เบฑเปˆเบ‡โ€‹เบ™เบฑเป‰เบ™ Tarantool เบกเบตโ€‹เป€เบ„เบทเปˆเบญเบ‡โ€‹เบกเบทโ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ›เบฑเบšโ€‹เบ‚เบฐโ€‹เบซเบ™เบฒเบ”โ€‹เปเบ™เบงโ€‹เบ™เบญเบ™ - the vshard module [1]. เบกเบฑเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ” shard เบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบ—เบปเปˆเบงเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบซเบผเบฒเบ, เปเบ•เปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡ tinker เบเบฑเบšเบกเบฑเบ™เบ•เบฑเป‰เบ‡เบกเบฑเบ™เบ‚เบถเป‰เบ™เปเบฅเบฐเบ•เบดเบ”เบ•เบฒเบกเป€เบซเบ”เบœเบปเบ™เบ—เบธเบฅเบฐเบเบดเบ”.

เบ‚เปˆเบฒเบงเบ”เบต: เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบเบฑเบšเบเปเบฒเบšเบฒเบ‡เบเบฒเบ™เบชเบฑเบเบขเบฒเปƒเบซเบเปˆ (เบ•เบปเบงเบขเปˆเบฒเบ‡ [2], [3]) เปเบฅเบฐเบชเป‰เบฒเบ‡เป‚เบ„เบ‡เบฎเปˆเบฒเบ‡เบเบฒเบ™เบญเบทเปˆเบ™เบ—เบตเปˆเบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบเบฒเบ™เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ™เบตเป‰เบ‡เปˆเบฒเบเบ”เบฒเบเบซเบผเบฒเบ.

เบ–เบฑเบ‡เป€เบเบฑเบšเบกเป‰เบฝเบ™ เป€เบ›เบฑเบ™เบเบญเบšเปƒเบซเบกเปˆเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบฅเบฐเบšเบปเบšเบเบฒเบ™เปเบˆเบเบขเบฒเบเบ—เบตเปˆเบŠเบฑเบšเบŠเป‰เบญเบ™. เบกเบฑเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบธเบกเปƒเบชเปˆเบเบฒเบ™เบ‚เบฝเบ™เป€เบซเบ”เบœเบปเบ™เบ—เบฒเบ‡เบ—เบธเบฅเบฐเบเบดเบ”เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบžเบทเป‰เบ™เบ–เบฒเบ™เป‚เบ„เบ‡เบฅเปˆเบฒเบ‡. เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เบเบฒเบ™เบ•เบฑเบ”เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเบšเบญเบเบ—เปˆเบฒเบ™เบงเปˆเบฒเบเบญเบšเบ™เบตเป‰เป€เบฎเบฑเบ”เบงเบฝเบเปเบ™เบงเปƒเบ”เปเบฅเบฐเบงเบดเบ—เบตเบเบฒเบ™เบ‚เบฝเบ™เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เปเบˆเบเบขเบฒเบเป‚เบ”เบเปƒเบŠเป‰เบกเบฑเบ™.

เบšเบฑเบ™เบซเบฒเปเบกเปˆเบ™เบซเบเบฑเบ‡เปเบ—เป‰?

เบžเบงเบเป€เบฎเบปเบฒเบกเบต tarantula, เบžเบงเบเป€เบฎเบปเบฒเบกเบต vshard - เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบซเบเบฑเบ‡เบ•เบทเปˆเบกเบญเบตเบ?

เบ›เบฐเบเบฒเบ™เบ—เปเบฒเบญเบดเบ”, เบกเบฑเบ™เป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เบ‚เบญเบ‡เบ„เบงเบฒเบกเบชเบฐเบ”เบงเบ. เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ vshard เบ–เบทเบเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบœเปˆเบฒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ Lua. เบชเปเบฒเบฅเบฑเบšเบฅเบฐเบšเบปเบšเบเบฒเบ™เปเบˆเบเบขเบฒเบเบ‚เบญเบ‡เบซเบผเบฒเบเบ‚เบฐเบšเบงเบ™เบเบฒเบ™ Tarantool เป€เบฎเบฑเบ”เบงเบฝเบเบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡, เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ•เป‰เบญเบ‡เบ„เบทเบเบฑเบ™เบขเบนเปˆเบ—เบปเปˆเบงเบ—เบธเบเปเบซเปˆเบ‡. เบšเปเปˆเบกเบตเปƒเบœเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ—เบธเบเบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡ scripts, Ansible, เปเบฅเบฐเบฅเบฐเบšเบปเบšเบเบฒเบ™เปƒเบŠเป‰เบ‡เบฒเบ™เปเบกเปˆเบ™เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰.

Cartridge เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡เบ„เบธเป‰เบกเบ„เบญเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ vshard, เบกเบฑเบ™เป€เบฎเบฑเบ”เบกเบฑเบ™เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบ‚เบญเบ‡เบกเบฑเบ™ เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปเบˆเบเบขเบฒเบเบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡. เบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบˆเปเบฒเป€เบ›เบฑเบ™เป€เบ›เบฑเบ™เป„เบŸเบฅเปŒ YAML เบ‡เปˆเบฒเบเบ”เบฒเบ, เบชเปเบฒเป€เบ™เบปเบฒเบ—เบตเปˆเบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™เปเบ•เปˆเบฅเบฐเบ•เบปเบงเบขเปˆเบฒเบ‡ Tarantool. เบ„เบงเบฒเบกเบ‡เปˆเบฒเบเบ”เบฒเบเปเบกเปˆเบ™เบงเปˆเบฒเบเบญเบšเบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡เบ•เบดเบ”เบ•เบฒเบกเบเบงเบ”เบเบฒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ‚เบญเบ‡เบกเบฑเบ™เปเบฅเบฐเบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบงเปˆเบฒเบกเบฑเบ™เบ„เบทเบเบฑเบ™เบขเบนเปˆเบ—เบปเปˆเบงเบ—เบธเบเปเบซเปˆเบ‡.

เบญเบฑเบ™เบ—เบตเบชเบญเบ‡, เบกเบฑเบ™เป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เบ‚เบญเบ‡เบ„เบงเบฒเบกเบชเบฐเบ”เบงเบเบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡. เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ vshard เบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ‚เบญเบ‡เป€เบซเบ”เบœเบปเบ™เบ—เบฒเบ‡เบ—เบธเบฅเบฐเบเบดเบ”เปเบฅเบฐเบžเบฝเบ‡เปเบ•เปˆ distracts programmer เบˆเบฒเบเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบฅเบฒเบง. เป€เบกเบทเปˆเบญเบžเบงเบเป€เบฎเบปเบฒเบชเบปเบ™เบ—เบฐเบ™เบฒเบเปˆเบฝเบงเบเบฑเบšเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™, เบžเบงเบเป€เบฎเบปเบฒเบชเปˆเบงเบ™เบซเบผเบฒเบเบกเบฑเบเบˆเบฐเป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบญเบปเบ‡เบ›เบฐเบเบญเบšเบชเปˆเบงเบ™เบšเบธเบเบ„เบปเบ™เปเบฅเบฐเบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบ‚เบญเบ‡เบžเบงเบเบกเบฑเบ™. เบกเบฑเบ™เป„เบงเป€เบเบตเบ™เป„เบ›เบ—เบตเปˆเบˆเบฐเบ„เบดเบ”เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบงเบเบธเปˆเบกเป„เบ›เบซเบฒ 3 เบชเบนเบ™เบ‚เปเป‰เบกเบนเบ™.

เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เป„เบ”เป‰โ€‹เปเบเป‰โ€‹เป„เบ‚โ€‹เบšเบฑเบ™โ€‹เบซเบฒโ€‹เป€เบซเบผเบปเปˆเบฒโ€‹เบ™เบตเป‰โ€‹เบซเบผเบฒเบโ€‹เบ„เบฑเป‰เบ‡โ€‹เปเบฅเบฐโ€‹เปƒเบ™โ€‹เบšเบฒเบ‡โ€‹เบˆเบธเบ”โ€‹เบ—เบตเปˆโ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เป„เบ”เป‰โ€‹เบˆเบฑเบ”โ€‹เบเบฒเบ™โ€‹เป€เบžเบทเปˆเบญโ€‹เบžเบฑเบ”โ€‹เบ—เบฐโ€‹เบ™เบฒโ€‹เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบ‡เปˆเบฒเบโ€‹เบ”เบฒเบโ€‹เป€เบฎเบฑเบ”โ€‹เบงเบฝเบโ€‹เบฎเปˆเบงเบกโ€‹เบเบฑเบšโ€‹เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹เบ•เบฐโ€‹เบซเบผเบญเบ”โ€‹เบŠเบตโ€‹เบงเบดเบ”โ€‹เบ‚เบญเบ‡โ€‹เบ•เบปเบ™โ€‹: เบเบฒเบ™โ€‹เบชเป‰เบฒเบ‡โ€‹, เบเบฒเบ™โ€‹เบžเบฑเบ”โ€‹เบ—เบฐโ€‹เบ™เบฒโ€‹, เบเบฒเบ™โ€‹เบ—เบปเบ”โ€‹เบชเบญเบšโ€‹, CI / CDโ€‹, เบเบฒเบ™โ€‹เบšเปเบฒโ€‹เบฅเบธเบ‡โ€‹เบฎเบฑเบโ€‹เบชเบฒโ€‹.

Cartridge เปเบ™เบฐเบ™เปเบฒเปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ‚เบญเบ‡เบšเบปเบ”เบšเบฒเบ”เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบ‚เบฐเบšเบงเบ™เบเบฒเบ™ Tarantool. เบšเบปเบ”เบšเบฒเบ”เปเบกเปˆเบ™เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ—เบตเปˆเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบชเบธเบกเปƒเบชเปˆเบเบฒเบ™เบ‚เบฝเบ™เบฅเบฐเบซเบฑเบ”. เบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบกเบตเบขเบนเปˆเปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบขเบนเปˆเปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡ Tarantool เบซเบ™เบถเปˆเบ‡, เปเบฅเบฐเบ™เบตเป‰เบˆเบฐเบžเบฝเบ‡เบžเปเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš.

เบ„เบธเบ™โ€‹เบ™เบฐโ€‹เบชเบปเบกโ€‹เบšเบฑเบ”โ€‹เบ—เบตเปˆโ€‹เบชเปเบฒโ€‹เบ„เบฑเบ™โ€‹เบ‚เบญเบ‡ Tarantool Cartridgeโ€‹:

  • orchestration เบเบธเปˆเบกเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”;
  • เบ‚เบฐเบซเบเบฒเบเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเป‚เบ”เบเปƒเบŠเป‰เบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ”เปƒเบซเบกเปˆ;
  • เปเบกเปˆเปเบšเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเปเบฅเบฐเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰;
  • เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เปƒเบ™ sharding เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”;
  • เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบเบฑเบšเบเบญเบšเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš 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/

เบ™เบตเป‰เปเบกเปˆเบ™เบšเปˆเบญเบ™เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™ git เบ—เบตเปˆเบกเบต "เบชเบฐเบšเบฒเบเบ”เบต, เป‚เบฅเบ!" เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ. เปƒเบซเป‰เบžเบฐเบเบฒเบเบฒเบกเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบฑเบ™เบ—เบต, เป‚เบ”เบเป„เบ”เป‰เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเปƒเบ™เป€เบกเบทเปˆเบญเบเปˆเบญเบ™ (เบฅเบงเบกเบ—เบฑเบ‡เบเบญเบšเบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡):

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

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบซเบ™เบถเปˆเบ‡ node เปเบฅเปˆเบ™เบชเปเบฒเบฅเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ sharded เปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”. เบ„เบปเบ™เบ—เบตเปˆเบขเบฒเบเบฎเบนเป‰เบขเบฒเบเบฎเบนเป‰เบขเบฒเบเป€เบซเบฑเบ™เบชเบฒเบกเบฒเบ”เป€เบ›เบตเบ”เบชเปˆเบงเบ™เบ•เบดเบ”เบ•เปเปˆเบ‚เบญเบ‡เป€เบงเบฑเบšเป„เบ”เป‰เบ—เบฑเบ™เบ—เบต, เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบธเปˆเบกเบ‚เบญเบ‡เป‚เบซเบ™เบ”เบ”เบฝเบงเบเบฑเบšเป€เบกเบปเบฒเบชเปŒ เปเบฅเบฐเป€เบžเบตเบ”เป€เบžเบตเบ™เบเบฑเบšเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš, เปเบ•เปˆเบกเบฑเบ™เป„เบงเป€เบเบตเบ™เป„เบ›เบ—เบตเปˆเบˆเบฐเบ›เบดเบ•เบดเบเบดเบ™เบ”เบต. เบกเบฒเบฎเบญเบ”เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบซเบเบฑเบ‡เป„เบ”เป‰เบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”, เบชเบฐเบ™เบฑเป‰เบ™เบ‚เป‰เบญเบเบˆเบฐเบšเบญเบเบ—เปˆเบฒเบ™เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เบžเบฒเบเบซเบฅเบฑเบ‡, เปเบ•เปˆเบ•เบญเบ™เบ™เบตเป‰เป€เบ–เบดเบ‡เป€เบงเบฅเบฒเบ‚เบฝเบ™เบฅเบฐเบซเบฑเบ”.

เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™

เบžเบฝเบ‡เปเบ•เปˆเบˆเบดเบ™เบ•เบฐเบ™เบฒเบเบฒเบ™, เบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เบญเบญเบเปเบšเบšเป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบกเบนเบ™, เบšเบฑเบ™เบ—เบถเบเบกเบฑเบ™เปเบฅเบฐเบชเป‰เบฒเบ‡เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบซเบ™เบถเปˆเบ‡เบ„เบฑเป‰เบ‡เบ•เปเปˆเบกเบทเป‰.

เบ•เบญเบเบ•เบฐเบซเบฅเบฑเบš Tarantool: sharding a Lua backend เป€เบ›เบฑเบ™เบชเบฒเบกเบชเบฒเบ

เบžเบงเบเป€เบฎเบปเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปเบ•เป‰เบกเปเบœเบ™เบงเบฒเบ”เปเบฅเบฐเบงเบฒเบ‡เบชเบฒเบกเบญเบปเบ‡เบ›เบฐเบเบญเบšเปƒเบชเปˆเบกเบฑเบ™: เบ›เบฐเบ•เบน, เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเปเบฅเบฐเบ•เบฒเบ•เบฐเบฅเบฒเบ‡. เบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เบงเบฝเบเบเปˆเบฝเบงเบเบฑเบšเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบ•เบทเปˆเบกเบญเบตเบ. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰ vshard เป€เบ›เบฑเบ™เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒ, เบžเบงเบเป€เบฎเบปเบฒเป€เบžเบตเปˆเบก vshard-router เปเบฅเบฐ vshard-storage เบเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™. เบ—เบฑเบ‡ gateway เบซเบผเบทเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒเบˆเบฐเบšเปเปˆเป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบšเปˆเบญเบ™เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เป‚เบ”เบเบเบปเบ‡; เบ™เบฑเป‰เบ™เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆ router เปเบกเปˆเบ™เบชเปเบฒเบฅเบฑเบš, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบกเบฑเบ™เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™.

เบ•เบญเบเบ•เบฐเบซเบฅเบฑเบš Tarantool: sharding a Lua backend เป€เบ›เบฑเบ™เบชเบฒเบกเบชเบฒเบ

เปเบœเบ™เบงเบฒเบ”เบ™เบตเป‰เบเบฑเบ‡เบšเปเปˆเบชเบฐเปเบ”เบ‡เป€เบ–เบดเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบชเป‰เบฒเบ‡เบขเบนเปˆเปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เป€เบžเบฒเบฐเบงเปˆเบฒเบญเบปเบ‡เบ›เบฐเบเบญเบšเบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐเบšเปเปˆเบกเบตเบ•เบปเบงเบ•เบปเบ™. เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบ•เป‰เบญเบ‡เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบญเบฑเบ™เบ™เบตเป‰เบˆเบฐเบ–เบทเบเบ„เบฒเบ”เบ„เบฐเป€เบ™เปƒเบชเปˆ Tarantool เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡เปเบ™เบงเปƒเบ” - เปƒเบซเป‰เบˆเบฑเบ”เบเบธเปˆเบกเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป‚เบ”เบเบ‚เบฐเบšเบงเบ™เบเบฒเบ™.

เบ•เบญเบเบ•เบฐเบซเบฅเบฑเบš Tarantool: sharding a Lua backend เป€เบ›เบฑเบ™เบชเบฒเบกเบชเบฒเบ

เบกเบตเบˆเบธเบ”เป€เบฅเบฑเบเบ™เป‰เบญเบเปƒเบ™เบเบฒเบ™เบฎเบฑเบเบชเบฒ vshard-router เปเบฅเบฐ gateway เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ. เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ—เปˆเบญเบ‡เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบ„เบงเบฒเบกเบฎเบฑเบšเบœเบดเบ”เบŠเบญเบšเบ‚เบญเบ‡ router เปเบฅเป‰เบง? เบžเบงเบเป€เบ‚เบปเบฒเบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบžเบฒเบเปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ”เบฝเบงเบเบฑเบ™. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบ—เบฑเบ‡ gateway เปเบฅเบฐ vshard.router.cfg เปเบกเปˆเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ”เบฝเบง, เปเบฅเบฐเปƒเบซเป‰เบžเบงเบเป€เบ‚เบปเบฒเบžเบปเบงเบžเบฑเบ™เบเบฑเบšเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™.

เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบญเบญเบเปเบšเบš, เบกเบฑเบ™เบชเบฐเบ”เบงเบเปƒเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบชเบฒเบกเบญเบปเบ‡เบ›เบฐเบเบญเบš, เปเบ•เปˆเบ‚เป‰เบญเบ, เปƒเบ™เบ–เบฒเบ™เบฐเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒ, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบ‚เบฝเบ™เบฅเบฐเบซเบฑเบ”, เบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบ„เบดเบ”เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบงเบชเบฒเบกเบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡ Tarnatool. เบ‚เป‰เบญเบเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเปเบฅเบฐเบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบ‚เป‰เบญเบเบ‚เบฝเบ™ gateway เบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡. เบซเบผเบทเบšเบฒเบ‡เบ—เบตเบ‚เป‰เบญเบเบขเบฒเบเบชเบฐเปเบ”เบ‡เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เปƒเบซเป‰เบเบฑเบšเป€เบžเบทเปˆเบญเบ™เบฎเปˆเบงเบกเบ‡เบฒเบ™เบ‚เบญเบ‡เบ‚เป‰เบญเบ. เป€เบ›เบฑเบ™โ€‹เบซเบเบฑเบ‡โ€‹เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบ„เบงเบ™โ€‹เป„เบ›โ€‹เป‚เบ”เบโ€‹เบœเปˆเบฒเบ™โ€‹เบเบฒเบ™ hassle เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบชเบฒเบกโ€‹เบชเปเบฒโ€‹เป€เบ™เบปเบฒโ€‹? เบ™เบตเป‰เปเบกเปˆเบ™เบงเบดเบ—เบตเบเบฒเบ™เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ‚เบญเบ‡เบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ”เป„เบ”เป‰เป€เบเบตเบ”เบกเบฒ. เบšเบปเบ”เบšเบฒเบ”เปเบกเปˆเบ™เป‚เบกเบ”เบนเบ™ lush เบ›เบปเบเบเบฐเบ•เบดเบ—เบตเปˆเบงเบปเบ‡เบˆเบญเบ™เบŠเบตเบงเบดเบ”เบ–เบทเบเบ„เบธเป‰เบกเบ„เบญเบ‡เป‚เบ”เบ Cartridge. เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ™เบตเป‰เบกเบตเบชเบตเปˆเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ - gateway, router, storage, scheduler. เบญเบฒเบ”เบˆเบฐเบกเบตเบซเบผเบฒเบเปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบญเบทเปˆเบ™. เบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป„เบ”เป‰เปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ”เบฝเบง, เปเบฅเบฐเบ™เบตเป‰เบˆเบฐเบžเบฝเบ‡เบžเป.

เบ•เบญเบเบ•เบฐเบซเบฅเบฑเบš Tarantool: sharding a Lua backend เป€เบ›เบฑเบ™เบชเบฒเบกเบชเบฒเบ

เปเบฅเบฐเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบกเบฑเบ™เบกเบฒเบเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบซเบผเบทเบเบฒเบ™เบœเบฐเบฅเบดเบ”, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบเปเบฒเบ™เบปเบ”เบ‚เบฐเบšเบงเบ™เบเบฒเบ™ Tarantool เปเบ•เปˆเบฅเบฐเบŠเบธเบ”เบ‚เบญเบ‡เบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ”เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡เบ‚เบถเป‰เบ™เบเบฑเบšเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ‚เบญเบ‡เบฎเบฒเบ”เปเบง:

เบ•เบญเบเบ•เบฐเบซเบฅเบฑเบš Tarantool: sharding a Lua backend เป€เบ›เบฑเบ™เบชเบฒเบกเบชเบฒเบ

เบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™ Topology

เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบเปˆเบฝเบงโ€‹เบเบฑเบšโ€‹เบšเปˆเบญเบ™โ€‹เบ—เบตเปˆโ€‹เบžเบฒโ€‹เบฅเบฐโ€‹เบšเบปเบ”โ€‹เบšเบฒเบ”โ€‹เบเปเบฒโ€‹เบฅเบฑเบ‡โ€‹เบ”เปเบฒโ€‹เป€เบ™เบตเบ™โ€‹เบเบฒเบ™โ€‹เบ•เป‰เบญเบ‡โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เป€เบเบฑเบšโ€‹เบฎเบฑเบโ€‹เบชเบฒโ€‹เป„เบงเป‰โ€‹เบšเบฒเบ‡โ€‹เบšเปˆเบญเบ™โ€‹. เปเบฅเบฐ "เบšเบฒเบ‡เบšเปˆเบญเบ™" เบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เบตเปˆเปเบˆเบเบขเบฒเบ, เป€เบŠเบดเปˆเบ‡เบ‚เป‰เบญเบเป„เบ”เป‰เบเปˆเบฒเบงเบกเบฒเปเบฅเป‰เบงเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡. เบชเบดเปˆเบ‡เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบชเบธเบ”เบเปˆเบฝเบงเบเบฑเบšเบกเบฑเบ™เปเบกเปˆเบ™ topology เบ‚เบญเบ‡เบเบธเปˆเบก. เบ™เบตเป‰เปเบกเปˆเบ™ 3 เบเบธเปˆเบก replication เบ‚เบญเบ‡ 5 เบ‚เบฐเบšเบงเบ™เบเบฒเบ™ Tarantool:

เบ•เบญเบเบ•เบฐเบซเบฅเบฑเบš Tarantool: sharding a Lua backend เป€เบ›เบฑเบ™เบชเบฒเบกเบชเบฒเบ

เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบชเบนเบ™เป€เบชเบเบ‚เปเป‰เบกเบนเบ™, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เปเบฅเปˆเบ™เบ”เป‰เบงเบเบ„เบงเบฒเบกเบฅเบฐเบกเบฑเบ”เบฅเบฐเบงเบฑเบ‡. Cartridge เบ•เบดเบ”เบ•เบฒเบกเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเบชเบญเบ‡เป„เบฅเบเบฐ. เป€เบกเบทเปˆเบญเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ, เบกเบฑเบ™เบ—เปเบฒเบญเบดเบ”เบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”เบกเบตเบขเบนเปˆเปเบฅเบฐเบžเป‰เบญเบกเบ—เบตเปˆเบˆเบฐเบเบญเบกเบฎเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปƒเบซเบกเปˆ. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบตเป‰, เป„เบฅเบเบฐเบ—เบตเบชเบญเบ‡เปƒเบŠเป‰ config. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบเบฒเบ™เบชเปเบฒเป€เบ™เบปเบฒเบซเบ™เบถเปˆเบ‡เบˆเบฐเบเบฒเบเป€เบ›เบฑเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป„เบ”เป‰เบŠเบปเปˆเบงเบ„เบฒเบง, เบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบ—เบตเปˆเบšเปเปˆเบ”เบตเบˆเบฐเป€เบเบตเบ”เบ‚เบถเป‰เบ™. เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹เบˆเบฐโ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบขเปˆเบฒเบ‡โ€‹เบ‡เปˆเบฒเบโ€‹เบ”เบฒเบโ€‹เปเบฅเบฐโ€‹เบ—เปˆเบฒเบ™โ€‹เบˆเบฐโ€‹เป€เบซเบฑเบ™โ€‹เบ„เบงเบฒเบกโ€‹เบœเบดเบ”โ€‹เบžเบฒเบ”โ€‹เบฅเปˆเบงเบ‡โ€‹เบซเบ™เป‰เบฒโ€‹.

เบ™เบญเบเบˆเบฒเบเบ™เบตเป‰เปƒเบ™เบžเบฒเบ topology, เป€เบŠเบฑเปˆเบ™: เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เป€เบ›เบฑเบ™เบœเบนเป‰เบ™เปเบฒเบ‚เบญเบ‡เปเบ•เปˆเบฅเบฐเบเบธเปˆเบก replication เปเบกเปˆเบ™เบŠเบตเป‰เปƒเบซเป‰เป€เบซเบฑเบ™. เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเบ™เบตเป‰เปเบกเปˆเบ™เบชเปเบฒเป€เบ™เบปเบฒเบ—เบตเปˆเบเปเบฒเบฅเบฑเบ‡เบ–เบทเบเบšเบฑเบ™เบ—เบถเบเป„เบงเป‰. เบชเปˆเบงเบ™เบ—เบตเปˆเป€เบซเบผเบทเบญเบชเปˆเบงเบ™เบซเบผเบฒเบเปเบกเปˆเบ™เบญเปˆเบฒเบ™เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบญเบฒเบ”เบˆเบฐเบกเบตเบ‚เปเป‰เบเบปเบเป€เบงเบฑเป‰เบ™. เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ—เบตเปˆเบเป‰เบฒเบซเบฒเบ™เบšเปเปˆเบขเป‰เบฒเบ™เบ„เบงเบฒเบกเบ‚เบฑเบ”เปเบเป‰เบ‡เปเบฅเบฐเบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เบ‚เปเป‰เบกเบนเบ™เปƒเบชเปˆเบซเบผเบฒเบเป† replicas เปƒเบ™เบ‚เบฐเบซเบ™เบฒเบ™, เปเบ•เปˆเบกเบตเบšเบฒเบ‡เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบ—เบตเปˆ, เบšเปเปˆเบงเปˆเบฒเบˆเบฐเป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”, เบšเปเปˆเบ„เบงเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบชเบญเบ‡เบ„เบฑเป‰เบ‡. เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เบตเป‰เบกเบตเบญเบฒเบเบฒเบ™เบ‚เบญเบ‡เบœเบนเป‰เบ™เปเบฒ.

เบ•เบญเบเบ•เบฐเบซเบฅเบฑเบš Tarantool: sharding a Lua backend เป€เบ›เบฑเบ™เบชเบฒเบกเบชเบฒเบ

เบŠเบตเบงเบดเบ”เบ‚เบญเบ‡เบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ”

เบชเปเบฒเบฅเบฑเบšเบšเบปเบ”เบšเบฒเบ”เบ—เบตเปˆเบšเปเปˆเบกเบตเบ•เบปเบงเบ•เบปเบ™เบ—เบตเปˆเบˆเบฐเบกเบตเบขเบนเปˆเปƒเบ™เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบ”เบฑเปˆเบ‡เบเปˆเบฒเบง, เบเบญเบšเบ•เป‰เบญเบ‡เบ„เบธเป‰เบกเบ„เบญเบ‡เบžเบงเบเบกเบฑเบ™เบšเบฒเบ‡เบขเปˆเบฒเบ‡. เบ•เบฒเบกเบ—เปเบฒเบกเบฐเบŠเบฒเบ”, เบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเป€เบเบตเบ”เบ‚เบถเป‰เบ™เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™ restarting เบ‚เบฐเบšเบงเบ™เบเบฒเบ™ Tarantool. เบกเบต 4 callback เป€เบžเบทเปˆเบญเบˆเบฑเบ”เบเบฒเบ™เบšเบปเบ”เบšเบฒเบ”. Cartridge เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡เบˆเบฐเป‚เบ—เบซเบฒเบžเบงเบเป€เบ‚เบปเบฒเป‚เบ”เบเบญเบตเบ‡เบ•เบฒเบกเบชเบดเปˆเบ‡เบ—เบตเปˆเบ‚เบฝเบ™เป„เบงเป‰เปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เบตเปˆเปเบˆเบเบขเบฒเบเบ‚เบญเบ‡เบกเบฑเบ™, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฑเบšเบšเบปเบ”เบšเบฒเบ”เบชเบฐเป€เบžเบฒเบฐ.

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

เปเบ•เปˆเบฅเบฐเบšเบปเบ”เบšเบฒเบ”เบกเบตเบซเบ™เป‰เบฒเบ—เบตเปˆ init. เบกเบฑเบ™เบ–เบทเบเป€เบญเบตเป‰เบ™เบงเปˆเบฒเบ„เบฑเป‰เบ‡เบ”เบฝเบงเป€เบกเบทเปˆเบญเบšเบปเบ”เบšเบฒเบ”เบ–เบทเบเป€เบ›เบตเบ”เปƒเบŠเป‰เบ‡เบฒเบ™เบซเบผเบทเป€เบกเบทเปˆเบญ Tarantool เบ–เบทเบเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปƒเบซเบกเปˆ. เบกเบฑเบ™เบชเบฐเบ”เบงเบเบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™, เบ•เบปเบงเบขเปˆเบฒเบ‡, เป€เบžเบทเปˆเบญเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ box.space.create, เบซเบผเบทเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒเบชเบฒเบกเบฒเบ”เป€เบ›เบตเบ”เบ•เบปเบงเป€เบชเบฑเป‰เบ™เป„เบเบžเบทเป‰เบ™เบซเบฅเบฑเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเปƒเบ™เบŠเปˆเบงเบ‡เป€เบงเบฅเบฒเบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™.

เบซเบ™เบถเปˆเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆ init เบญเบฒเบ”เบˆเบฐเบšเปเปˆเบžเบฝเบ‡เบžเป. Cartridge เบญเบฐโ€‹เบ™เบธโ€‹เบเบฒเบ”โ€‹เปƒเบซเป‰โ€‹เบžเบฒโ€‹เบฅเบฐโ€‹เบšเบปเบ”โ€‹เบšเบฒเบ”โ€‹เป€เบžเบทเปˆเบญโ€‹เปƒเบŠเป‰โ€‹เบ›เบฐโ€‹เป‚เบซเบเบ”โ€‹เบˆเบฒเบโ€‹เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹เปเบˆเบโ€‹เบขเบฒเบโ€‹เบกเบฑเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เป€เบžเบทเปˆเบญโ€‹เป€เบเบฑเบš topology เป„เบ”เป‰โ€‹. เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบ›เบฐเบเบฒเบ”เบžเบฒเบเบชเปˆเบงเบ™เปƒเบซเบกเปˆเปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ”เบฝเบงเบเบฑเบ™เปเบฅเบฐเป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบŠเบดเป‰เบ™เบชเปˆเบงเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เบธเบฅเบฐเบเบดเบ”เบขเบนเปˆเปƒเบ™เบกเบฑเบ™. เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบ‚เป‰เบญเบ, เบ™เบตเป‰เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™เบฎเบนเบšเปเบšเบšเบ‚เปเป‰เบกเบนเบ™เบซเบผเบทเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบชเปเบฒเบฅเบฑเบšเบšเบปเบ”เบšเบฒเบ”เบ‚เบญเบ‡เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒ.

เบเบฒเบ™เป‚เบ—เบเบธเปˆเบก validate_config ะธ apply_config เบ—เบธเบเป†เบ„เบฑเป‰เบ‡เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เบตเปˆเปเบˆเบเบขเบฒเบ. เป€เบกเบทเปˆเบญเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ–เบทเบเบ™เปเบฒเป„เบ›เปƒเบŠเป‰เป‚เบ”เบเบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเบชเบญเบ‡เป„เบฅเบเบฐ, เบเบธเปˆเบกเบˆเบฐเบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเปเบ•เปˆเบฅเบฐเบšเบปเบ”เบšเบฒเบ”เปเบกเปˆเบ™เบžเป‰เบญเบกเบ—เบตเปˆเบˆเบฐเบเบญเบกเบฎเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปƒเบซเบกเปˆเบ™เบตเป‰เปเบฅเบฐ, เบ–เป‰เบฒเบˆเปเบฒเป€เบ›เบฑเบ™, เบฅเบฒเบเบ‡เบฒเบ™เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ•เปเปˆเบœเบนเป‰เปƒเบŠเป‰. เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ—เบธเบเบ„เบปเบ™เบ•เบปเบเบฅเบปเบ‡เป€เบซเบฑเบ™เบ”เบตเบงเปˆเบฒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปเบกเปˆเบ™เบ›เบปเบเบเบฐเบ•เบด, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ apply_config.

เบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ”เบเบฑเบ‡เบกเบตเบงเบดเบ—เบตเบเบฒเบ™ stop, เป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบˆเปเบฒเป€เบ›เบฑเบ™เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบ„เบงเบฒเบกเบชเบฐเบญเบฒเบ”เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบ‚เบญเบ‡เบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ”. เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเป€เบงเบปเป‰เบฒเบงเปˆเบฒเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ™เบตเป‰, เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบขเบธเบ”เป€เบชเบฑเป‰เบ™เปƒเบเป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™เบ—เบตเปˆเบกเบฑเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบ init.

เบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ”เบชเบฒเบกเบฒเบ”เบžเบปเบงเบžเบฑเบ™เบเบฑเบšเบเบฑเบ™เปเบฅเบฐเบเบฑเบ™. เบžเบงเบเป€เบฎเบปเบฒเป€เบ„เบตเบเปƒเบŠเป‰เปƒเบ™เบเบฒเบ™เบ‚เบฝเบ™เบŸเบฑเบ‡เบŠเบฑเบ™เป‚เบ—เปƒเบ™ Lua, เปเบ•เปˆเบกเบฑเบ™เบญเบฒเบ”เบˆเบฐเป€เบเบตเบ”เบ‚เบทเป‰เบ™เบงเปˆเบฒเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เบšเปเปˆเบกเบตเบšเบปเบ”เบšเบฒเบ”เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™. เป€เบžเบทเปˆเบญเบญเปเบฒเบ™เบงเบเบ„เบงเบฒเบกเบชเบฐเบ”เบงเบเปƒเบ™เบเบฒเบ™เป‚เบ—เบœเปˆเบฒเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบ, เบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰เป‚เบกเบ”เบนเบ™เบŠเปˆเบงเบ rpc (เป„เบฅเบเบฐเป„เบเบเบฒเบ™เป‚เบ—), เป€เบŠเบดเปˆเบ‡เบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เบšเบปเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡ netbox เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปƒเบ™ Tarantool. เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒ, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, gateway เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เป‚เบ”เบเบเบปเบ‡เบ‚เปเปƒเบซเป‰เบœเบนเป‰เบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒเป€เบฎเบฑเบ”เบงเบฝเบเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเบฅเปเบ–เป‰เบฒเบกเบทเป‰.

เบˆเบธเบ”เบชเปเบฒเบ„เบฑเบ™เบญเบตเบเบญเบฑเบ™เบซเบ™เบถเปˆเบ‡เปเบกเปˆเบ™เบเบฒเบ™เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบ„เบงเบฒเบกเบ—เบปเบ™เบ—เบฒเบ™เบ•เปเปˆเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”. เป„เบชเป‰เบ•เบญเบ‡เปƒเบŠเป‰เป‚เบ›เบฃเป‚เบ•เบ„เป SWIM เป€เบžเบทเปˆเบญเบ•เบดเบ”เบ•เบฒเบกเบชเบธเบ‚เบฐเบžเบฒเบš [4]. เปƒเบ™เบชเบฑเป‰เบ™, เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เปเบฅเบเบ›เปˆเบฝเบ™ "เบ‚เปˆเบฒเบงเบฅเบท" เบเบฑเบšเบเบฑเบ™เปเบฅเบฐเบเบฑเบ™เบเปˆเบฝเบงเบเบฑเบš UDP - เปเบ•เปˆเบฅเบฐเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบšเบญเบเป€เบžเบทเปˆเบญเบ™เบšเป‰เบฒเบ™เบ‚เบญเบ‡เบ•เบปเบ™เบ‚เปˆเบฒเบงเบซเบฅเป‰เบฒเบชเบธเบ”, เปเบฅเบฐเบžเบงเบเป€เบ‚เบปเบฒเบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡. เบ–เป‰เบฒเบ—เบฑเบ™เบ—เบตเบ—เบฑเบ™เปƒเบ”เบ„เปเบฒเบ•เบญเบšเบšเปเปˆเป„เบ”เป‰เบกเบฒ, Tarantool เป€เบฅเบตเปˆเบกเบชเบปเบ‡เปƒเบชเบงเปˆเบฒเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบœเบดเบ”เบžเบฒเบ”, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบกเบฑเบ™ recites เบ„เบงเบฒเบกเบ•เบฒเบเปเบฅเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ—เบตเปˆเบˆเบฐเบšเบญเบเบ—เบธเบเบ„เบปเบ™เบเปˆเบฝเบงเบเบฑเบšเบ‚เปˆเบฒเบงเบ™เบตเป‰.

เบ•เบญเบเบ•เบฐเบซเบฅเบฑเบš Tarantool: sharding a Lua backend เป€เบ›เบฑเบ™เบชเบฒเบกเบชเบฒเบ

เบญเบตเบ‡เบ•เบฒเบกเป‚เบ›เป‚เบ•เบ„เบญเบ™เบ™เบตเป‰, Cartridge เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบเบฒเบ™เบ›เบฐเบกเบงเบ™เบœเบปเบ™เบ„เบงเบฒเบกเบฅเบปเป‰เบกเป€เบซเบผเบงเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”. เปเบ•เปˆเบฅเบฐเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ‚เบญเบ‡เบกเบฑเบ™, เปเบฅเบฐเบ–เป‰เบฒเบœเบนเป‰เบ™เปเบฒเบขเบธเบ”เป€เบŠเบปเบฒเบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบขเปˆเบฒเบ‡เบเบฐเบ—เบฑเบ™เบซเบฑเบ™, เบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เบซเบ™เป‰เบฒเบ—เบตเปˆเบ‚เบญเบ‡เบ•เบปเบ™, เปเบฅเบฐ Cartridge เบˆเบฐเบเปเบฒเบ™เบปเบ”เบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ”เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบ•เบฒเบกเบ„เบงเบฒเบกเป€เบซเบกเบฒเบฐเบชเบปเบก.

เบ•เบญเบเบ•เบฐเบซเบฅเบฑเบš Tarantool: sharding a Lua backend เป€เบ›เบฑเบ™เบชเบฒเบกเบชเบฒเบ

เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบฅเบฐเบกเบฑเบ”เบฅเบฐเบงเบฑเบ‡เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰, เป€เบžเบฒเบฐเบงเปˆเบฒเบเบฒเบ™เบ›เปˆเบฝเบ™เป„เบ›เป€เบฅเบทเป‰เบญเบเป†เบชเบฒเบกเบฒเบ”เบ™เปเบฒเป„เบ›เบชเบนเปˆเบ‚เปเป‰เบ‚เบฑเบ”เปเบเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡. เปเบ™เปˆเบ™เบญเบ™, เบ—เปˆเบฒเบ™เบšเปเปˆเบ„เบงเบ™เป€เบ›เบตเบ”เปƒเบŠเป‰เบ‡เบฒเบ™เบเบฒเบ™เบฅเบปเป‰เบกเป€เบซเบฅเบงเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เปเบšเบšเบชเบธเปˆเบก. เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เป€เบ‚เบปเป‰เบฒเปƒเบˆเบขเปˆเบฒเบ‡เบˆเบฐเปเบˆเป‰เบ‡เบเปˆเบฝเบงเบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบถเป‰เบ™เปเบฅเบฐเปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เบˆเบฐเบšเปเปˆเปเบ•เบเบซเบฑเบเบซเบผเบฑเบ‡เบˆเบฒเบเบœเบนเป‰เบ™เปเบฒเบ–เบทเบเบŸเบทเป‰เบ™เบŸเบนเปเบฅเบฐเบกเบปเบ‡เบเบธเบ”เบ–เบทเบเบชเบปเปˆเบ‡เบ„เบทเบ™เปƒเบซเป‰เบฅเบฒเบง.

เบˆเบฒเบเบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰, เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบ„เบงเบฒเบกเบฎเบนเป‰เบชเบถเบเบงเปˆเบฒเบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ”เปเบกเปˆเบ™เบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบš microservices. เปƒเบ™เบ„เบงเบฒเบกเบฎเบนเป‰เบชเบถเบ, เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเปเบกเปˆเบ™เบžเบฝเบ‡เปเบ•เปˆเบงเปˆเบฒ, เบžเบฝเบ‡เปเบ•เปˆเป€เบ›เบฑเบ™เป‚เบกเบ”เบนเบ™เบžเบฒเบเปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™ Tarantool. เปเบ•เปˆเบเบฑเบ‡เบกเบตเบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบ™เบถเปˆเบ‡. เบเปˆเบญเบ™เบญเบทเปˆเบ™ เปเบปเบ”, เบ—เบธเบเป†เบšเบปเบ”เบšเบฒเบ”เบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบ•เป‰เบญเบ‡เบขเบนเปˆเปƒเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™เบฅเบฐเบซเบฑเบ”เบ”เบฝเบงเบเบฑเบ™. เปเบฅเบฐเบ‚เบฐเบšเบงเบ™เบเบฒเบ™ Tarantool เบ—เบฑเบ‡เบซเบกเบปเบ”เบ„เบงเบ™เบˆเบฐเบ–เบทเบเป€เบ›เบตเบ”เบ•เบปเบงเบˆเบฒเบเบ–เบฒเบ™เบฅเบฐเบซเบฑเบ”เบ”เบฝเบงเบเบฑเบ™, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบšเปเปˆเบกเบตเบ„เบงเบฒเบกเปเบ›เบเปƒเบˆเบ„เบทเบเบฑเบšเป€เบงเบฅเบฒเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบžเบฐเบเบฒเบเบฒเบกเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒ, เปเบ•เปˆเบกเบฑเบ™เบšเปเปˆเบกเบตเบขเบนเปˆ. เบ™เบญเบเบˆเบฒเบเบ™เบตเป‰, เบ—เปˆเบฒเบ™เบšเปเปˆเบ„เบงเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบกเบตเบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เปƒเบ™เบชเบฐเบšเบฑเบšเบฅเบฐเบซเบฑเบ”, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบžเบถเบ”เบ•เบดเบเปเบฒเบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเปƒเบ™เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเปเบกเปˆเบ™เบกเบตเบ„เบงเบฒเบกเบซเบเบธเป‰เบ‡เบเบฒเบเบซเบผเบฒเบเบ—เบตเปˆเบˆเบฐเบ„เบฒเบ”เบ„เบฐเป€เบ™เปเบฅเบฐ debug.

เบšเปเปˆเป€เบซเบกเบทเบญเบ™เบเบฑเบš Docker, เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”เบžเบฝเบ‡เปเบ•เปˆเบกเบตเบšเบปเบ”เบšเบฒเบ” "เบฎเบนเบšเบžเบฒเบš", เป€เบญเบปเบฒเบกเบฑเบ™เป„เบ›เปƒเบชเปˆเป€เบ„เบทเปˆเบญเบ‡เบญเบทเปˆเบ™เปเบฅเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™. เบšเบปเบ”เบšเบฒเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบขเบนเปˆเป‚เบ”เบ”เบ”เปˆเบฝเบงเบ„เบทเบเบฑเบš Docker containers. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบชเบญเบ‡เบšเบปเบ”เบšเบฒเบ”เบ”เบฝเบงเบเบฑเบ™เบขเบนเปˆเปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ”เบฝเบง. เบšเบปเบ”เบšเบฒเบ”เบกเบตเบขเบนเปˆ เบซเบผเบทเบšเปเปˆเบกเบต; เปƒเบ™เบ„เบงเบฒเบกเปเบฒเบ, เบกเบฑเบ™เป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เบ”เบฝเบง. เปเบฅเบฐเบญเบฑเบ™เบ—เบตเบชเบฒเบก, เบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ”เบ•เป‰เบญเบ‡เบ„เบทเบเบฑเบ™เบžเบฒเบเปƒเบ™เบเบธเปˆเบก replication เบ—เบฑเบ‡เบซเบกเบปเบ”, เป€เบžเบฒเบฐเบงเปˆเบฒเบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบกเบฑเบ™เบˆเบฐเป‚เบ‡เปˆ - เบ‚เปเป‰เบกเบนเบ™เปเบกเปˆเบ™เบ„เบทเบเบฑเบ™, เปเบ•เปˆเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปเบกเปˆเบ™เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™.

เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ™เบณเปƒเบŠเป‰

เบ‚เป‰เบญเบเบชเบฑเบ™เบเบฒเบงเปˆเบฒเบˆเบฐเบชเบฐเปเบ”เบ‡เบงเบดเบ—เบตเบเบฒเบ™ 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

เบกเบต nuance เบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰. เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเบฅเบฐเบšเบธเบžเบฝเบ‡เปเบ•เปˆเบžเบญเบ” binary protocol, เบžเบงเบเป€เบฎเบปเบฒเบฅเบฐเบšเบธเบ—เบตเปˆเบขเบนเปˆเบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐเบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบฅเบงเบกเบ—เบฑเบ‡เบŠเบทเปˆเป€เบˆเบปเป‰เบฒเบžเบฒเบš. เบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบˆเปเบฒเป€เบ›เบฑเบ™เป€เบžเบทเปˆเบญเปƒเบซเป‰ nodes cluster เบฎเบนเป‰เบงเบดเบ—เบตเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป€เบŠเบดเปˆเบ‡เบเบฑเบ™เปเบฅเบฐเบเบฑเบ™. เบกเบฑเบ™เป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบ„เบดเบ”เบ—เบตเปˆเบšเปเปˆเบ”เบตเบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰ 0.0.0.0 เป€เบ›เบฑเบ™เบ—เบตเปˆเบขเบนเปˆ advertise_uri; เบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเป€เบ›เบฑเบ™เบ—เบตเปˆเบขเบนเปˆ IP เบžเบฒเบเบ™เบญเบ, เบšเปเปˆเปเบกเปˆเบ™เบเบฒเบ™เบœเบนเบเบกเบฑเบ”เป€เบ•เบปเป‰เบฒเบชเบฝเบš. เบ–เป‰เบฒเบšเปเปˆเบกเบตเบกเบฑเบ™, เบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบ, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™ Cartridge เบžเบฝเบ‡เปเบ•เปˆเบˆเบฐเบšเปเปˆเบ›เปˆเบญเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบง node เบเบฑเบš advertise_uri เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡.

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปเบกเปˆเบ™เบเบฝเบกเบžเป‰เบญเบก, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ•เปˆเบฒเบ‡เป†. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบซเบ™เปˆเบงเบเบ‡เบฒเบ™เบฅเบฐเบšเบปเบšเบ›เบปเบเบเบฐเบ•เบดเบšเปเปˆเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบกเบตเบซเบผเบฒเบเบเบงเปˆเบฒเบซเบ™เบถเปˆเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเปƒเบ™ Cartridge เป„เบ”เป‰เบ–เบทเบเบ•เบดเบ”เบ•เบฑเป‰เบ‡เป‚เบ”เบเบญเบฑเบ™เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ. เบซเบ™เปˆเบงเบเบ‡เบฒเบ™เบ—เบฑเบ™เบ—เบตเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเปเบšเบšเบ™เบตเป‰:

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

เปƒเบ™โ€‹เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒ, เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เป„เบ”เป‰โ€‹เบฅเบฐโ€‹เบšเบธโ€‹เบžเบญเบ” HTTP เบ—เบตเปˆ Cartridge เบฎเบฑเบšโ€‹เปƒเบŠเป‰โ€‹เปƒเบ™โ€‹เบเบฒเบ™โ€‹เป‚เบ•เป‰โ€‹เบ•เบญเบšโ€‹เป€เบงเบฑเบšโ€‹เป„เบŠโ€‹เบ•โ€‹เปŒ - 8080. เปƒเบซเป‰โ€‹เป„เบ›โ€‹เป€เบšเบดเปˆเบ‡โ€‹เบกเบฑเบ™โ€‹เปเบฅเบฐโ€‹เป€เบšเบดเปˆเบ‡โ€‹:

เบ•เบญเบเบ•เบฐเบซเบฅเบฑเบš Tarantool: sharding a Lua backend เป€เบ›เบฑเบ™เบชเบฒเบกเบชเบฒเบ

เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เป€เบซเบฑเบ™โ€‹เบงเปˆเบฒโ€‹เป€เบ–เบดเบ‡โ€‹เปเบกเปˆเบ™โ€‹เบงเปˆเบฒโ€‹เบ‚เบฐโ€‹เบšเบงเบ™โ€‹เบเบฒเบ™โ€‹เบเปเบฒโ€‹เบฅเบฑเบ‡โ€‹เปเบฅเปˆเบ™โ€‹, เบžเบงเบโ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบเบฑเบ‡โ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบเปเบฒโ€‹เบ™เบปเบ”โ€‹เบ„เปˆเบฒโ€‹. เป„เบชเป‰เบ•เบญเบ‡เบเบฑเบ‡เบšเปเปˆเบฎเบนเป‰เบงเปˆเบฒเปƒเบœเบ„เบงเบ™ replicate เบเบฑเบšเปƒเบœเปเบฅเบฐเบšเปเปˆเบชเบฒเบกเบฒเบ”เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡, เบชเบฐเบ™เบฑเป‰เบ™เบกเบฑเบ™เบฅเปเบ–เป‰เบฒเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ. เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบกเบตเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบซเบผเบฒเบ: เบŠเบตเบงเบดเบ”เบ‚เบญเบ‡เบเบธเปˆเบกเปƒเบซเบกเปˆเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ‚เบญเบ‡ node เบ—เปเบฒเบญเบดเบ”. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบžเบตเปˆเบกเบ„เบปเบ™เบญเบทเปˆเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบเบธเปˆเบก, เบเปเบฒเบ™เบปเบ”เบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ”เปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ, เปเบฅเบฐเปƒเบ™เบˆเบธเบ”เบ™เบตเป‰, เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบชเปเบฒเป€เบฅเบฑเบ”.

เปƒเบซเป‰เบ–เบญเบเบˆเบญเบเป€เบ„เบทเปˆเบญเบ‡เบ”เบทเปˆเบกเบ—เบตเปˆเบ—เปˆเบฒเบ™เบกเบฑเบ เปเบฅเบฐเบœเปˆเบญเบ™เบ„เบฒเบเบซเบผเบฑเบ‡เบˆเบฒเบเบญเบฒเบ—เบดเบ”เป€เบฎเบฑเบ”เบงเบฝเบเบ—เบตเปˆเบเบฒเบงเบ™เบฒเบ™. เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เป„เบ”เป‰.

เบ•เบญเบเบ•เบฐเบซเบฅเบฑเบš Tarantool: sharding a Lua backend เป€เบ›เบฑเบ™เบชเบฒเบกเบชเบฒเบ

เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš

เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเปเบกเปˆเบ™เบซเบเบฑเบ‡? เบฅเบญเบ‡เปƒเบŠเป‰เบกเบฑเบ™, เบญเบญเบเบ„เปเบฒเบ„เบดเบ”เป€เบซเบฑเบ™, เบชเป‰เบฒเบ‡เบ›เบตเป‰เปƒเบ™ Github.

เป€เบญเบเบฐเบชเบฒเบ™

[1] Tarantool ยป 2.2 ยป Reference ยป Rocks reference ยป Module vshard

[2] เบžเบงเบเป€เบฎเบปเบฒเบ›เบฐเบ•เบดเบšเบฑเบ”เบซเบผเบฑเบเบ‚เบญเบ‡เบ—เบธเบฅเบฐเบเบดเบ”เบเบฒเบ™เบฅเบปเบ‡เบ—เบถเบ™เบ‚เบญเบ‡ Alfa-Bank เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆ Tarantool

[3] เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบเบฒเบ™เป€เบญเบตเป‰เบ™เป€เบเบฑเบšเป€เบ‡เบดเบ™เบฎเบธเปˆเบ™เปƒเบซเบกเปˆ: เบเบฒเบ™เบซเบฑเบ™เบ›เปˆเบฝเบ™เบเบฑเบšเบเบฒเบ™เบซเบฑเบ™เบ›เปˆเบฝเบ™เป„เบ›เบชเบนเปˆ Tarantool

[4] SWIM - เป‚เบ›เบฃเป‚เบ•เบ„เปเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบเบธเปˆเบก

[5] GitHub - tarantool/cartridge-cli

[6] GitHub - tarantool/cartridge

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™