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

เบซเป‰เบฒเบ›เบตเบเปˆเบญเบ™เบ‚เป‰เบญเบเบžเบฐเบเบฒเบเบฒเบกเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš Tarantool, เปเบ•เปˆเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบกเบฑเบ™เบšเปเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบชเปเบฒเบฅเบฑเบšเบ‚เป‰เบญเบ. เปเบ•เปˆเบšเปเปˆเบ”เบปเบ™เบกเบฒเบ™เบตเป‰เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบˆเบฑเบ”เบเบฒเบ™ webinar เบšเปˆเบญเบ™เบ—เบตเปˆเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบš Hadoop, เบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™ MapReduce เป€เบฎเบฑเบ”เบงเบฝเบ. เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™เบ‚เป‰เบญเบเบ–เบทเบเบ–เบฒเบกเบ„เปเบฒเบ–เบฒเบก - "เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบšเปเปˆเปƒเบŠเป‰ Tarantool เบชเปเบฒเบฅเบฑเบšเบงเบฝเบเบ‡เบฒเบ™เบ™เบตเป‰?".

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

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

Tarantool เปเบกเปˆเบ™เบซเบเบฑเบ‡

Tarantool เบงเบฒเบ‡เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡เป€เบ›เบฑเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเป„เบงเบ—เบตเปˆเบชเบธเบ”. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เปƒเบชเปˆเบ‚เปเป‰เบกเบนเบ™เปƒเบ”เป†เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบขเบนเปˆเปƒเบ™เบ™เบฑเป‰เบ™. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, replicate เปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ, shard - เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เปเบšเปˆเบ‡เบ›เบฑเบ™เบ‚เปเป‰เบกเบนเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบผเบงเบ‡เบซเบผเบฒเบเปƒเบ™เบ—เบปเปˆเบงเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบˆเปเบฒเบ™เบงเบ™เบซเบ™เบถเปˆเบ‡เปเบฅเบฐเบชเบปเบกเบ—เบปเบšเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบˆเบฒเบเบžเบงเบเป€เบ‚เบปเบฒ - make fault-tolerant master-master links .

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

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบญเปˆเบฒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™ guys เป€เบฎเบฑเบ”เปเบ–เบงเบ‚เปเป‰เบ„เบงเบฒเบก 300 เปเบ–เบง, เป€เบŠเบดเปˆเบ‡เบžเบฝเบ‡เปเบ•เปˆเป‰เปเบฒเบ•เบฒเปเบฅเบฐ thrashes - เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบกเบตเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เปเบฒเปˆเบชเบธเบ”เบ—เบตเปˆ 20 เบ‚เปเป‰เบ„เบงเบฒเบกเบ•เปเปˆเบงเบดเบ™เบฒเบ—เบต. เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบซเบฑเบ™เบซเบ™เป‰เบฒเปเบฅเบฐเบ‚เบฝเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบซเบผเบฒเบ, เปเบฅเบฐเบชเบดเปˆเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบˆเบฐเบšเปเปˆเบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰, เบ„เบทเบเบฑเบš PostgreS.

เบ›เบฐเบกเบฒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ”เบฑเปˆเบ‡เบเปˆเบฒเบง, เบžเบฝเบ‡เปเบ•เปˆเบ‡เปˆเบฒเบเบ”เบฒเบ, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเบžเบฐเบเบฒเบเบฒเบกเบญเบฐเบ—เบดเบšเบฒเบเปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰.

เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ

เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบชเบฒเบกเป€เบ„เบทเปˆเบญเบ‡ virtual เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ - เบฎเบฒเบ”เบ”เบดเบ” 20 gigabyte, Ubuntu 18.04. 2 CPU virtual เปเบฅเบฐ 4 gigabyte เบ‚เบญเบ‡เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ.

เบžเบงเบเป€เบฎเบปเบฒเบ•เบดเบ”เบ•เบฑเป‰เบ‡ Tarantool - เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ bash script เบซเบผเบทเป€เบžเบตเปˆเบก repository เปเบฅเบฐเป€เบฎเบฑเบ” apt เป„เบ”เป‰เบ•เบดเบ”เบ•เบฑเป‰เบ‡ Tarantool. เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเบชเบฐเบ„เบดเบš - (curl -L https://tarantool.io/installer.sh | VER=2.4 sudo -E bash). เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบ„เปเบฒเบชเบฑเปˆเบ‡เป€เบŠเบฑเปˆเบ™:

tarantoolctl เปเบกเปˆเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ•เบปเป‰เบ™เบ•เปเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡ Tarantula.
/etc/tarantool - เบ™เบตเป‰โ€‹เปเบกเปˆเบ™โ€‹เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹เปเบกเปˆเบ™โ€‹.
var/log/tarantool - เบ™เบตเป‰เปเบกเปˆเบ™เบšเบฑเบ™เบ—เบถเบ.
var/lib/tarantool - เบ™เบตเป‰เปเบกเปˆเบ™เบ‚เปเป‰เบกเบนเบ™เป€เบฃเบฑเบ”, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบžเบงเบเบกเบฑเบ™เบ–เบทเบเปเบšเปˆเบ‡เบญเบญเบเป€เบ›เบฑเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡.

เบกเบต instance-available เปเบฅเบฐ instance-enable folders - เบกเบฑเบ™เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบชเบดเปˆเบ‡เบ—เบตเปˆเบˆเบฐเป€เบ›เบตเบ”เบ•เบปเบง - เป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบกเบตเบฅเบฐเบซเบฑเบ” lua, เป€เบŠเบดเปˆเบ‡เบญเบฐเบ—เบดเบšเบฒเบเบงเปˆเบฒเบžเบญเบ”เปƒเบ”เบ—เบตเปˆเบกเบฑเบ™เบŸเบฑเบ‡, เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเปƒเบ”เบ—เบตเปˆเบกเบตเบขเบนเปˆเบเบฑเบšเบกเบฑเบ™, เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบ Vinyl, เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเปƒเบ™เบ•เบญเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™. เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ, sharding, เบ„เบดเบง, เบเบฒเบ™เบฅเบถเบšเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบฅเป‰เบฒเบชเบฐเป„เบซเบก, เปเบฅเบฐเบญเบทเปˆเบ™เป†.

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

เบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡

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

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เบชเบฐเบ–เบฒเบ™เบฐเบ‚เบญเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡ - tarantoolctl status example . เปƒเบ™เบ—เบฒเบ‡เบ”เบฝเบงเบเบฑเบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบขเบธเบ”, restart.

เป€เบกเบทเปˆเบญเบ•เบปเบงเบขเปˆเบฒเบ‡เปƒเบ” เปœเบถเปˆเบ‡ เบเบณ เบฅเบฑเบ‡เปเบฅเปˆเบ™, เบกเบตเบชเบญเบ‡เบงเบดเบ—เบตเบ—เบตเปˆเบˆเบฐเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเบกเบฑเบ™.

1. เบ„เบญเบ™เป‚เบŠเบ™เบšเปเบฅเบดเบซเบฒเบ™

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

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

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

2. เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เป‚เบ›เป‚เบ•เบ„เบญเบ™เบ–เบฒเบ™เบชเบญเบ‡เป€เบžเบทเปˆเบญเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเบžเบญเบ”เบชเบฐเป€เบžเบฒเบฐ

เบกเบตเบ„เปเบฒเบชเบฑเปˆเบ‡เบŸเบฑเบ‡เบขเบนเปˆเปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ, เป€เบŠเบดเปˆเบ‡เป€เบ›เบตเบ”เบžเบญเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบทเปˆเบชเบฒเบ™เบžเบฒเบเบ™เบญเบ. เบžเบญเบ”เบ™เบตเป‰เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบเบฑเบšเป‚เบ›เป‚เบ•เบ„เบญเบ™ binary เปเบฅเบฐเบเบฒเบ™เบžเบดเบชเบนเบ”เบขเบทเบ™เบขเบฑเบ™เป„เบ”เป‰เบ–เบทเบเป€เบ›เบตเบ”เปƒเบŠเป‰เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™.

เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ™เบตเป‰, tarantoolctl เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเบซเบกเบฒเบเป€เบฅเบเบžเบญเบ”เปเบกเปˆเบ™เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰. เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบกเบฑเบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบซเปˆเบฒเบ‡เป„เบเบชเบญเบเบซเบผเบตเบ, เบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบ„เบงเบฒเบกเบ–เบทเบเบ•เป‰เบญเบ‡เปเบฅเบฐเปƒเบซเป‰เบชเบดเบ”เบ—เบดเปƒเบ™เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบ•เปˆเบฒเบ‡เป†.

เบšเบฑเบ™เบ—เบถเบเบ‚เปเป‰เบกเบนเบ™ เปเบฅเบฐเป‚เบกเบ”เบนเบ™เบเปˆเบญเบ‡

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

เบšเบฑเบ™เบ—เบถเบ

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

local function bootstrap()
    local space = box.schema.create_space('example')
    space:create_index('primary')
    box.schema.user.grant('guest', 'read,write,execute', 'universe')

    -- Keep things safe by default
    --  box.schema.user.create('example', { password = 'secret' })
    --  box.schema.user.grant('example', 'replication')
    --  box.schema.user.grant('example', 'read,write,execute', 'space', 'example')
end

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

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

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

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

เบกเบฑเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบชเบฐเบ”เบงเบเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบฅเบฒเบง. เป€เบเบทเบญเบšเบ—เบธเบเป†เป€เบชเบฑเป‰เบ™, เบ—เบธเบเป†เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™เบชเบฒเบกเบฒเบ”เบกเบตเบ–เบฑเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบซเบกเบปเบ”.

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

เบกเบตเป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบชเบญเบ‡เบŠเบฐเบ™เบดเบ”เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปƒเบ™ Tarantool: Memory เปเบฅเบฐ Vinyl. เปœเปˆเบงเบเบ„เบงเบฒเบกเบˆเบณเป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ—เบฑเบ‡เปเบปเบ”เป„เบงเป‰เปƒเบ™เปœเปˆเบงเบเบ„เบงเบฒเบกเบˆเบณ. เป€เบžเบฒเบฐเบชเบฐเบ™เบฑเป‰เบ™, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เป€เบฎเบฑเบ”เบงเบฝเบเบ‡เปˆเบฒเบเบ”เบฒเบเปเบฅเบฐเป„เบง. เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบ–เบทเบโ€‹เบ–เบดเป‰เบกโ€‹เปƒเบชเปˆโ€‹เปเบœเปˆเบ™, เปเบฅเบฐโ€‹เบเบฑเบ‡โ€‹เบกเบตโ€‹เบเบปเบ™โ€‹เป„เบโ€‹เบเบฒเบ™โ€‹เบšเบฑเบ™โ€‹เบ—เบถเบโ€‹เบเบฒเบ™โ€‹เบ‚เบฝเบ™โ€‹เบฅเปˆเบงเบ‡โ€‹เบซเบ™เป‰เบฒโ€‹, เบ”เบฑเปˆเบ‡โ€‹เบ™เบฑเป‰เบ™โ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบˆเบฐโ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบชเบนเบ™โ€‹เป€เบชเบโ€‹เบซเบเบฑเบ‡โ€‹เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เป€เบŠเบตเบšโ€‹เป€เบงเบตโ€‹เบ‚เบฑเบ”โ€‹เปเบเปˆเบ‡โ€‹.

Vinyl เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™เปƒเบ™เปเบœเปˆเบ™เปƒเบ™เบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบ„เบธเป‰เบ™เป€เบ„เบตเบ - เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบซเบผเบฒเบเบเปˆเบงเบฒเบžเบงเบเป€เบฎเบปเบฒเบกเบตเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒ, เปเบฅเบฐ Tarantula เบˆเบฐเบญเปˆเบฒเบ™เบกเบฑเบ™เบˆเบฒเบเปเบœเปˆเบ™.

เบ•เบญเบ™เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเปƒเบŠเป‰ Memory.

unix/:/var/run/tarantool/example.control> box.space.example
---
- engine: memtx
  before_replace: 'function: 0x41eb02c8'
  on_replace: 'function: 0x41eb0568'
  ck_constraint: []
  field_count: 0
  temporary: false
  index:
    0: &0
      unique: true
      parts:
      - type: unsigned
        is_nullable: false
        fieldno: 1
      id: 0
      space_id: 512
      type: TREE
      name: primary
    primary: *0
  is_local: false
  enabled: true
  name: example
  id: 512
...

unix/:/var/run/tarantool/example.control>

เบ”เบฑเบ”เบชเบฐเบ™เบต:

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

เบžเบฒเบเบชเปˆเบงเบ™:

เบ™เบตเป‰เปเบกเปˆเบ™เบšเปˆเบญเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบ™เบปเบ”เบชเบดเปˆเบ‡เบ—เบตเปˆเบ”เบฑเบ”เบชเบฐเบ™เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบ›เบฐเบเบญเบšเบ”เป‰เบงเบ. เบกเบฑเบ™เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡ - เบžเบฒเบเบชเบฐเบซเบ™เบฒเบกเบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ™เปเบฒเปƒเบŠเป‰, เบžเบดเบก unsigned - เป€เบ›เบฑเบ™เบˆเปเบฒเบ™เบงเบ™เบšเบงเบ. เป€เบ—เบปเปˆเบฒเบ—เบตเปˆเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบทเปˆเป„เบ”เป‰เบˆเบฒเบเป€เบญเบเบฐเบชเบฒเบ™, เบˆเปเบฒเบ™เบงเบ™เบชเบนเบ‡เบชเบธเบ”เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™ 18 quintillion. เบซเบผเบฒเบเบซเบ™เป‰เบฒเบซเบงเบฒเบ”เบชเบฝเบง.

เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เปƒเบชเปˆเบ‚เปเป‰เบกเบนเบ™เป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡ insert.

unix/:/var/run/tarantool/example.control> box.space.example:insert{1, 'test1', 'test2'}
---
- [1, 'test1', 'test2']
...

unix/:/var/run/tarantool/example.control> box.space.example:insert{2, 'test2', 'test3', 'test4'}
---
- [2, 'test2', 'test3', 'test4']
...

unix/:/var/run/tarantool/example.control> box.space.example:insert{3, 'test3'}
---
- [3, 'test3']
...

unix/:/var/run/tarantool/example.control> box.space.example:insert{4, 'test4'}
---
- [4, 'test4']
...

unix/:/var/run/tarantool/example.control>

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

เบ‚เปเป‰เบกเบนเบ™เบœเบปเบ™เบœเบฐเบฅเบดเบ”

เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบชเบฐเปเบ”เบ‡เบ‚เปเป‰เบกเบนเบ™เบ”เป‰เบงเบเบ„เปเบฒเบชเบฑเปˆเบ‡เป€เบฅเบทเบญเบ.

Box.example.select เบ”เป‰เบงเบเบ›เบธเปˆเบก {1} เบˆเบฐเบชเบฐเปเบ”เบ‡เบฅเบฒเบเบเบฒเบ™เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™. เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบเบปเบเป€เบฅเบตเบเบ„เบต, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบซเบฑเบ™เบšเบฑเบ™เบ—เบถเบเบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบกเบต. เบžเบงเบเป€เบ‚เบปเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เปƒเบ™เบˆเปเบฒเบ™เบงเบ™เบ„เปเบฅเปเบฒ, เปเบ•เปˆเปƒเบ™เบ—เบตเปˆเบ™เบตเป‰, เปƒเบ™เบซเบผเบฑเบเบเบฒเบ™, เบšเปเปˆเบกเบตเปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ‚เบญเบ‡เบ„เปเบฅเปเบฒ - เบกเบตเบ•เบปเบงเป€เบฅเบเบžเบฒเบเบชเบฐเบซเบ™เบฒเบก.

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


box.space.example:create_index( โ€˜secondaryโ€™, { type = โ€˜TREEโ€™, unique = false, parts = {{field = 2, type =โ€™stringโ€™} }}) 

เบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡ Create_index.
เบžเบงเบเป€เบฎเบปเบฒเป€เบญเบตเป‰เบ™เบงเปˆเบฒเบกเบฑเบ™เบชเบญเบ‡.

เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบเปเบฒเบ™เบปเบ”เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต. เบ›เบฐเป€เบžเบ”เบ”เบฑเบ”เบŠเบฐเบ™เบตเปเบกเปˆเบ™ TREE. เบกเบฑเบ™เบญเบฒเบ”เบˆเบฐเบšเปเปˆเป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบ, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเปƒเบชเปˆ Unique = false.

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

unix/:/var/run/tarantool/example.control> box.space.example:create_index('secondary', { type = 'TREE', unique = false, parts = {{field = 2, type = 'string'}}})
---
- unique: false
  parts:
  - type: string
    is_nullable: false
    fieldno: 2
  id: 1
  space_id: 512
  type: TREE
  name: secondary
...

unix/:/var/run/tarantool/example.control>

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป‚เบ—เบซเบฒเบกเบฑเบ™:

unix/:/var/run/tarantool/example.control> box.space.example.index.secondary:select('test1')
---
- - [1, 'test1', 'test2']
...

เบเบฒเบ™เบ›เบปเบเบ›เบฑเบเบฎเบฑเบเบชเบฒ

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

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

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

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

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

เป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเบ”เบฑเปˆเบ‡เบเปˆเบฒเบง, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบฅเบฐเบšเบธเบ—เบฒเบ‡เป€เบฅเบทเบญเบเปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ box.cfg (เปƒเบ™เป„เบŸเบฅเปŒ example.lua):

wal_mode = โ€œwriteโ€;

เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹

เบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบ‚เบฝเบ™เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰ Tarantula เป€เบžเบทเปˆเบญเป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เปเบฅเบฐเบกเบฑเบ™เบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเป„เบงเบซเบผเบฒเบเป€เบ›เบฑเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™. เปเบฅเบฐเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™ cherry เบชเบธเบ” cake เป„เบ”เป‰ - เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เปเบ™เบงเปƒเบ”เบเบฑเบšเบกเบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”.

เบเบฒเบ™เบ‚เบฝเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ

เบ•เบปเบงเบขเปˆเบฒเบ‡, เปƒเบซเป‰เบ‚เบฝเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบชเปเบฒเบฅเบฑเบš Tarantula

เป€เบšเบดเปˆเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบžเบฒเบเปƒเบ•เป‰ spoiler เป„เบ”เป‰

box.cfg {
    listen = '0.0.0.0:3301';
    io_collect_interval = nil;
    readahead = 16320;
    memtx_memory = 128 * 1024 * 1024; -- 128Mb
    memtx_min_tuple_size = 16;
    memtx_max_tuple_size = 128 * 1024 * 1024; -- 128Mb
    vinyl_memory = 128 * 1024 * 1024; -- 128Mb
    vinyl_cache = 128 * 1024 * 1024; -- 128Mb
    vinyl_max_tuple_size = 128 * 1024 * 1024; -- 128Mb
    vinyl_write_threads = 2;
    wal_mode = "write";
    wal_max_size = 256 * 1024 * 1024;
    checkpoint_interval = 60 * 60; -- one hour
    checkpoint_count = 6;
    force_recovery = true;
    log_level = 5;
    log_nonblock = false;
    too_long_threshold = 0.5;
    read_only   = false
}

local function bootstrap()
    local space = box.schema.create_space('example')
    space:create_index('primary')

    box.schema.user.create('example', { password = 'secret' })
    box.schema.user.grant('example', 'read,write,execute', 'space', 'example')

    box.schema.user.create('repl', { password = 'replication' })
    box.schema.user.grant('repl', 'replication')
end

-- for first run create a space and add set up grants
box.once('replica', bootstrap)

-- enabling console access
console = require('console')
console.listen('127.0.0.1:3302')

-- http config
local charset = {}  do -- [0-9a-zA-Z]
    for c = 48, 57  do table.insert(charset, string.char(c)) end
    for c = 65, 90  do table.insert(charset, string.char(c)) end
    for c = 97, 122 do table.insert(charset, string.char(c)) end
end

local function randomString(length)
    if not length or length <= 0 then return '' end
    math.randomseed(os.clock()^5)
    return randomString(length - 1) .. charset[math.random(1, #charset)]
end

local http_router = require('http.router')
local http_server = require('http.server')
local json = require('json')

local httpd = http_server.new('0.0.0.0', 8080, {
    log_requests = true,
    log_errors = true
})

local router = http_router.new()

local function get_count()
 local cnt = box.space.example:len()
 return cnt
end

router:route({method = 'GET', path = '/count'}, function()
    return {status = 200, body = json.encode({count = get_count()})}
end)

router:route({method = 'GET', path = '/token'}, function()
    local token = randomString(32)
    local last = box.space.example:len()
    box.space.example:insert{ last + 1, token }
    return {status = 200, body = json.encode({token = token})}
end)

prometheus = require('prometheus')

fiber = require('fiber')
tokens_count = prometheus.gauge("tarantool_tokens_count",
                              "API Tokens Count")

function monitor_tokens_count()
  while true do
    tokens_count:set(get_count())
    fiber.sleep(5)
  end
end
fiber.create(monitor_tokens_count)

router:route( { method = 'GET', path = '/metrics' }, prometheus.collect_http)

httpd:set_router(router)
httpd:start()

เบžเบงเบเป€เบฎเบปเบฒเบ›เบฐเบเบฒเบ”เบšเบฒเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เปƒเบ™ lua เป€เบŠเบดเปˆเบ‡เบเปเบฒเบ™เบปเบ”เบชเบฑเบ™เบเบฒเบฅเบฑเบ. เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ™เบตเป‰เปเบกเปˆเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบชเบฐเบ•เบฃเบดเบ‡เปเบšเบšเบชเบธเปˆเบก.

local charset = {}  do -- [0-9a-zA-Z]
    for c = 48, 57  do table.insert(charset, string.char(c)) end
    for c = 65, 90  do table.insert(charset, string.char(c)) end
    for c = 97, 122 do table.insert(charset, string.char(c)) end
end

เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบ›เบฐเบเบฒเบ”เบŸเบฑเบ‡เบŠเบฑเบ™ - randomString เปเบฅเบฐเปƒเบซเป‰เบกเบนเบ™เบ„เปˆเบฒเบ‚เบญเบ‡เบ„เบงเบฒเบกเบเบฒเบงเปƒเบ™เบงเบปเบ‡เป€เบฅเบฑเบš.

local function randomString(length)
    if not length or length <= 0 then return '' end
    math.randomseed(os.clock()^5)
    return randomString(length - 1) .. charset[math.random(1, #charset)]
end

เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ router http เปเบฅเบฐ http server เบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‚เบญเบ‡ Tarantula เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, JSON, เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเปƒเบซเป‰เบเบฑเบšเบฅเบนเบเบ„เป‰เบฒ.

local http_router = require('http.router')
local http_server = require('http.server')
local json = require('json')

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

local httpd = http_server.new('0.0.0.0', 8080, {
    log_requests = true,
    log_errors = true
})

เบ•เปเปˆเป„เบ›, เบžเบงเบเป€เบฎเบปเบฒเบ›เบฐเบเบฒเบ”เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡, เบงเปˆเบฒเบ–เป‰เบฒเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ”เป‰เบงเบเบงเบดเบ—เบตเบเบฒเบ™ GET เบกเบฒเบฎเบญเบ”เบžเบญเบ” 8080 / เบ™เบฑเบš, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเป‚เบ—เบซเบฒเบŸเบฑเบ‡เบŠเบฑเบ™เบˆเบฒเบเบซเบ™เบถเปˆเบ‡เปเบ–เบง. เบกเบฑเบ™เบชเบปเปˆเบ‡เบ„เบทเบ™เบชเบฐเบ–เบฒเบ™เบฐ - 200, 404, 403 เบซเบผเบทเปƒเบ”เบเปเปˆเบ•เบฒเบกเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบ™เบปเบ”.

router:route({method = 'GET', path = '/count'}, function()
    return {status = 200, body = json.encode({count = get_count()})}
end)

เปƒเบ™เบฎเปˆเบฒเบ‡เบเบฒเบ, เบžเบงเบเป€เบฎเบปเบฒเบชเบปเปˆเบ‡เบ„เบทเบ™ json.encode, เบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ™เบฑเบšเปเบฅเบฐ getcount เปƒเบ™เบกเบฑเบ™, เป€เบŠเบดเปˆเบ‡เป€เบญเบตเป‰เบ™เบงเปˆเบฒเปเบฅเบฐเบชเบฐเปเบ”เบ‡เบˆเปเบฒเบ™เบงเบ™เบšเบฑเบ™เบ—เบถเบเปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ.

เบงเบดเบ—เบตเบ—เบตเบชเบญเบ‡

router:route({method = 'GET', path = '/token'}, function() 
    local token = randomString(32) 
    local last = box.space.example:len() 
    box.space.example:insert{ last + 1, token } 
    return {status = 200, body = json.encode({token = token})}
end)

เบšเปˆเบญเบ™เบ—เบตเปˆเบขเบนเปˆเปƒเบ™เป€เบชเบฑเป‰เบ™ router:route({method = 'GET', path = '/token'}, function() เบžเบงเบเป€เบฎเบปเบฒเป‚เบ—เบซเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆเปเบฅเบฐเบชเป‰เบฒเบ‡ token.

เบชเบฒเบ local token = randomString(32) เป€เบ›เบฑเบ™เบชเบฐเบ•เบฃเบดเบ‡เปเบšเบšเบชเบธเปˆเบกเบ‚เบญเบ‡ 32 เบ•เบปเบงเบญเบฑเบเบชเบญเบ™.
เปƒเบ™เปเบ–เบง local last = box.space. เบ•เบปเบงเบขเปˆเบฒเบ‡:len() เบžเบงเบเป€เบฎเบปเบฒเบ”เบถเบ‡เบญเบญเบเบญเบปเบ‡เบ›เบฐเบเบญเบšเบชเบธเบ”เบ—เป‰เบฒเบ.
เปเบฅเบฐเปƒเบ™เบชเบฒเบ box.space.example:insert{ last + 1, token } เบžเบงเบเป€เบฎเบปเบฒเบ‚เบฝเบ™เบ‚เปเป‰เบกเบนเบ™เปƒเบชเปˆเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบžเบงเบเป€เบฎเบปเบฒเบžเบฝเบ‡เปเบ•เปˆเป€เบžเบตเปˆเบก ID เป‚เบ”เบ 1. เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰, เป‚เบ”เบเบงเบดเบ—เบตเบ—เบฒเบ‡เบเบฒเบ™, เบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเปƒเบ™เบงเบดเบ—เบตเบเบฒเบ™ clumsy เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง. Tarantula เบกเบตเบฅเปเบฒเบ”เบฑเบšเบชเปเบฒเบฅเบฑเบšเบเปเบฅเบฐเบ™เบตเบ™เบตเป‰.

เบžเบงเบเป€เบฎเบปเบฒเบ‚เบฝเบ™ token เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™.

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

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

เป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™, เบžเบงเบเป€เบฎเบปเบฒเบ•เบดเบ”เบ•เบฑเป‰เบ‡เป‚เบกเบ”เบนเบ™ http:

เบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เปเบ™เบงเปƒเบ”เบกเบฑเบ™, เป€เบšเบดเปˆเบ‡เบžเบฒเบเปƒเบ•เป‰ spoiler เป„เบ”เป‰

root@test2:/# tarantoolctl rocks install http
Installing http://rocks.tarantool.org/http-scm-1.src.rock
Missing dependencies for http scm-1:
   checks >= 3.0.1 (not installed)

http scm-1 depends on checks >= 3.0.1 (not installed)
Installing http://rocks.tarantool.org/checks-3.0.1-1.rockspec

Cloning into 'checks'...
remote: Enumerating objects: 28, done.
remote: Counting objects: 100% (28/28), done.
remote: Compressing objects: 100% (19/19), done.
remote: Total 28 (delta 1), reused 16 (delta 1), pack-reused 0
Receiving objects: 100% (28/28), 12.69 KiB | 12.69 MiB/s, done.
Resolving deltas: 100% (1/1), done.
Note: checking out '580388773ef11085015b5a06fe52d61acf16b201'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

No existing manifest. Attempting to rebuild...
checks 3.0.1-1 is now installed in /.rocks (license: BSD)

-- The C compiler identification is GNU 7.5.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Found TARANTOOL: /usr/include (found version "2.4.2-80-g18f2bc82d")
-- Tarantool LUADIR is /.rocks/share/tarantool/rocks/http/scm-1/lua
-- Tarantool LIBDIR is /.rocks/share/tarantool/rocks/http/scm-1/lib
-- Configuring done
-- Generating done
CMake Warning:
  Manually-specified variables were not used by the project:

    version


-- Build files have been written to: /tmp/luarocks_http-scm-1-V4P9SM/http/build.luarocks
Scanning dependencies of target httpd
[ 50%] Building C object http/CMakeFiles/httpd.dir/lib.c.o
In file included from /tmp/luarocks_http-scm-1-V4P9SM/http/http/lib.c:32:0:
/tmp/luarocks_http-scm-1-V4P9SM/http/http/lib.c: In function โ€˜tpl_termโ€™:
/usr/include/tarantool/lauxlib.h:144:15: warning: this statement may fall through [-Wimplicit-fallthrough=]
    (*(B)->p++ = (char)(c)))
    ~~~~~~~~~~~^~~~~~~~~~~~
/tmp/luarocks_http-scm-1-V4P9SM/http/http/lib.c:62:7: note: in expansion of macro โ€˜luaL_addcharโ€™
       luaL_addchar(b, '\');
       ^~~~~~~~~~~~
/tmp/luarocks_http-scm-1-V4P9SM/http/http/lib.c:63:6: note: here
      default:
      ^~~~~~~
In file included from /tmp/luarocks_http-scm-1-V4P9SM/http/http/lib.c:39:0:
/tmp/luarocks_http-scm-1-V4P9SM/http/http/tpleval.h: In function โ€˜tpe_parseโ€™:
/tmp/luarocks_http-scm-1-V4P9SM/http/http/tpleval.h:147:9: warning: this statement may fall through [-Wimplicit-fallthrough=]
    type = TPE_TEXT;
    ~~~~~^~~~~~~~~~
/tmp/luarocks_http-scm-1-V4P9SM/http/http/tpleval.h:149:3: note: here
   case TPE_LINECODE:
   ^~~~
In file included from /tmp/luarocks_http-scm-1-V4P9SM/http/http/lib.c:40:0:
/tmp/luarocks_http-scm-1-V4P9SM/http/http/httpfast.h: In function โ€˜httpfast_parseโ€™:
/tmp/luarocks_http-scm-1-V4P9SM/http/http/httpfast.h:372:22: warning: this statement may fall through [-Wimplicit-fallthrough=]
                 code = 0;
                 ~~~~~^~~
/tmp/luarocks_http-scm-1-V4P9SM/http/http/httpfast.h:374:13: note: here
             case status:
             ^~~~
/tmp/luarocks_http-scm-1-V4P9SM/http/http/httpfast.h:393:23: warning: this statement may fall through [-Wimplicit-fallthrough=]
                 state = message;
                 ~~~~~~^~~~~~~~~
/tmp/luarocks_http-scm-1-V4P9SM/http/http/httpfast.h:395:13: note: here
             case message:
             ^~~~
[100%] Linking C shared library lib.so
[100%] Built target httpd
[100%] Built target httpd
Install the project...
-- Install configuration: "Debug"
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/VERSION.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lib/http/lib.so
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/server/init.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/server/tsgi_adapter.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/nginx_server/init.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/router/init.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/router/fs.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/router/matching.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/router/middleware.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/router/request.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/router/response.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/tsgi.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/utils.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/mime_types.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/codes.lua
http scm-1 is now installed in /.rocks (license: BSD)

root@test2:/#

เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบ•เป‰เบญเบ‡เบเบฒเบ™ prometheus เป€เบžเบทเปˆเบญเปเบฅเปˆเบ™:

root@test2:/# tarantoolctl rocks install prometheus
Installing http://rocks.tarantool.org/prometheus-scm-1.rockspec

Cloning into 'prometheus'...
remote: Enumerating objects: 19, done.
remote: Counting objects: 100% (19/19), done.
remote: Compressing objects: 100% (19/19), done.
remote: Total 19 (delta 2), reused 5 (delta 0), pack-reused 0
Receiving objects: 100% (19/19), 10.73 KiB | 10.73 MiB/s, done.
Resolving deltas: 100% (2/2), done.
prometheus scm-1 is now installed in /.rocks (license: BSD)

root@test2:/#

เบžเบงเบเป€เบฎเบปเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปเบฅเบฐเบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป‚เบกเบ”เบนเบ™

root@test2:/# curl -D - -s http://127.0.0.1:8080/token
HTTP/1.1 200 Ok
Content-length: 44
Server: Tarantool http (tarantool v2.4.2-80-g18f2bc82d)
Connection: keep-alive

{"token":"e2tPq9l5Z3QZrewRf6uuoJUl3lJgSLOI"}

root@test2:/# curl -D - -s http://127.0.0.1:8080/token
HTTP/1.1 200 Ok
Content-length: 44
Server: Tarantool http (tarantool v2.4.2-80-g18f2bc82d)
Connection: keep-alive

{"token":"fR5aCA84gj9eZI3gJcV0LEDl9XZAG2Iu"}

root@test2:/# curl -D - -s http://127.0.0.1:8080/count
HTTP/1.1 200 Ok
Content-length: 11
Server: Tarantool http (tarantool v2.4.2-80-g18f2bc82d)
Connection: keep-alive

{"count":2}root@test2:/#

/count เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบชเบฐเบ–เบฒเบ™เบฐเบžเบฒเบš 200.
/token เบญเบญเบ token เปเบฅเบฐเบ‚เบฝเบ™ token เบ™เบตเป‰เปƒเบชเปˆเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™.

เบ„เบงเบฒเบกเป„เบงเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš

เปƒเบซเป‰เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบชเปเบฒเบฅเบฑเบš 50 เบ„เปเบฒเบ–เบฒเบก. เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบเบฒเบ™เปเบ‚เปˆเบ‡เบ‚เบฑเบ™เบˆเบฐเป€เบ›เบฑเบ™ 000.

root@test2:/# ab -c 500 -n 50000 http://127.0.0.1:8080/token
This is ApacheBench, Version 2.3 <$Revision: 1807734 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient)
Completed 5000 requests
Completed 10000 requests
Completed 15000 requests
Completed 20000 requests
Completed 25000 requests
Completed 30000 requests
Completed 35000 requests
Completed 40000 requests
Completed 45000 requests
Completed 50000 requests
Finished 50000 requests


Server Software:        Tarantool
Server Hostname:        127.0.0.1
Server Port:            8080

Document Path:          /token
Document Length:        44 bytes

Concurrency Level:      500
Time taken for tests:   14.578 seconds
Complete requests:      50000
Failed requests:        0
Total transferred:      7950000 bytes
HTML transferred:       2200000 bytes
Requests per second:    3429.87 [#/sec] (mean)
Time per request:       145.778 [ms] (mean)
Time per request:       0.292 [ms] (mean, across all concurrent requests)
Transfer rate:          532.57 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   10 103.2      0    3048
Processing:    12   69 685.1     15   13538
Waiting:       12   69 685.1     15   13538
Total:         12   78 768.2     15   14573

Percentage of the requests served within a certain time (ms)
  50%     15
  66%     15
  75%     16
  80%     16
  90%     16
  95%     16
  98%     21
  99%     42
 100%  14573 (longest request)
root@test2:/#

เป‚เบ—เป€เบ„เบฑเบ™เปเบกเปˆเบ™เบญเบญเบ. เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เบšเบฑเบ™เบ—เบถเบเบ‚เปเป‰เบกเบนเบ™เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡. 99% เบ‚เบญเบ‡เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเปเบกเปˆเบ™เบชเปเบฒเป€เบฅเบฑเบ”เปƒเบ™ 42 milliseconds. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบ›เบฐเบกเบฒเบ™ 3500 เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ•เปเปˆเบงเบดเบ™เบฒเบ—เบตเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบ, เบšเปˆเบญเบ™เบ—เบตเปˆเบกเบต 2 cores เปเบฅเบฐ 4 gigabyte เบ‚เบญเบ‡เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ.

เบ—เปˆเบฒเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เป€เบฅเบทเบญเบเบšเบฒเบ‡ 50000 token เปเบฅเบฐเป€เบšเบดเปˆเบ‡เบกเบนเบ™เบ„เปˆเบฒเบ‚เบญเบ‡เบกเบฑเบ™.

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

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

เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบžเบฒเบเบ™เบญเบ, เป€เบเบฑเบšเบเปเบฒเบ‚เปเป‰เบกเบนเบ™เปเบฅเบฐเป€เบžเบตเปˆเบกเบกเบฑเบ™เปƒเบชเปˆเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบกเบฑเบ™. เบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ™เบตเป‰เบˆเบฐเบ–เบทเบเปƒเบŠเป‰เป‚เบ”เบเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบญเบทเปˆเบ™.

เบ™เบตเป‰เบˆเบฐเป€เบฎเบฑเบ”เป„เบ”เป‰เป‚เบ”เบ Tarantula เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡, เปเบฅเบฐเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ‚เบฝเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ.

เปƒเบ™เบเบฒเบ™เบชเบฐเบซเบฅเบธเบš

เบ™เบตเป‰เปเบกเปˆเบ™เบžเบฝเบ‡เปเบ•เปˆเบชเปˆเบงเบ™เบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เบงเบฝเบเปƒเบซเบเปˆ. เบญเบฑเบ™เบ—เบตเบชเบญเบ‡เบˆเบฐเบ–เบทเบเบˆเบฑเบ”เบžเบตเบกเบกเบฒเปƒเบ™เป„เบงเป†เบ™เบตเป‰เปƒเบ™ blog เบ‚เบญเบ‡ Mail.ru Group, เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบžเบตเปˆเบกเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเบกเบฑเบ™เปƒเบ™เป€เบญเบเบฐเบชเบฒเบ™เบ™เบตเป‰เปเบ™เปˆเบ™เบญเบ™.

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

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

PS เบžเบงเบเป€เบฎเบปเบฒเบกเบต 2 เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบŸเบฃเบตเบ•เปเปˆเป€เบ”เบทเบญเบ™, เบšเบฒเบ‡เบ—เบตเป‚เบ„เบ‡เบเบฒเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบˆเบฐเป€เบ›เบฑเบ™เบซเบ™เบถเปˆเบ‡เปƒเบ™เบ™เบฑเป‰เบ™.

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

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