ááœááºáá²á·áá²á·áá«ážááŸá áºáá±á¬ááºá áá»áœááºáá±á¬áº Tarantool áá²á· á¡áá¯ááºáá¯ááºááá¯á· ááŒáá¯ážá á¬ážáá²á·áá±ááá·áº áá»áœááºáá±á¬á·áºá¡ááœáẠá¡áá¯ááºáááŒá áºáá²á·áá«áá°ážá áá«áá±ááá·áº áááŒá¬áá±ážáá®á áá»áœááºáá±á¬áº Hadoop á¡ááŒá±á¬ááºážáá²á· MapReduce á¡áá¯ááºáá¯ááºáá¯á¶á¡ááŒá±á¬ááºáž ááŒá±á¬áá²á·áá²á· webinar áá áºáᯠáá»ááºážááá²á·áá«áááºá á¡á²áá®ááŸá¬ áá°ááá¯á·á áá»áœááºáá±á¬á·áºááᯠáá±ážááœááºážáá áºáá¯áá±ážááẠ"áá®áá¯ááºáááºážá¡ááœáẠTarantool ááᯠáá¬ááŒá±á¬áá·áºááá¯á¶ážáá¬áá²á"
áááá»ááºá áááºááŒá±á¬áá·áº ááŒááºááœá¬ážáᬠáá±á¬ááºáá¯á¶ážáá¬ážááŸááºážááᯠá ááºážáááºááŒáá·áºááẠáá¯á¶ážááŒááºáá²á·áááºá á€áá áºááŒáááºááœáẠááá±á¬áá»ááºááᯠá¡ááœááºááŸá áºáááºáá«áááºá ááᯠáá»áœááºá¯ááºááẠTarantool ááœáẠááá¯ážááŸááºážáá±á¬ á¡ááá®áá±ážááŸááºážáá áºáá¯ááᯠáááºááá¯á·áá±ážááááºááᯠáááºááŒáááºááŒá áºááŒá®áž áááºážááᯠáááºááŒá®áž áááºážáá áœááºážáá±á¬ááºáááºááᯠá á áºáá±ážáᬠá¡áá¬á¡á¬ážáá¯á¶ážááẠáááºáá»áŸááœááºáá°ááŒá®áž á¡á±ážááŒáááºááᯠáááºááœá±á·ááŒááºááááºááŒá áºáááºá
Tarantool ááá¯áá¬áá¬áá²
Tarantool ááẠá¡ááœááºááŒááºáááºáá±á¬ áá±áá¬áá±á·á áºáá áºáá¯á¡ááŒá Ạáá°á·ááá¯ááºáá° áá±áá¬áá°áá¬ážáááºá ááá¯áá»ááºáá²á·áá±áá¬ááᯠá¡á²áá®áá±áá¬ááŸá¬ áá¬ážááá¯ááºáá«áááºá ááá¯á·á¡ááŒááºá áááºážááá¯á·ááᯠáá¯á¶áá°ááœá¬ážáá«á áááºááẠ- ááá¯ááá¯áááºááŸá¬á áá¬áá¬áá»á¬ážá áœá¬ááœáẠáá±áá¬á¡áá»á¬ážá¡ááŒá¬ážááᯠááœá²ááŒááºážááŒá®áž áááºážááá¯á·áá¶á០ááááºáá»á¬ážááᯠáá±á«ááºážá ááºáá« - á¡ááŸá¬ážá¡ááœááºážáá¶ááá¯ááºáá±á¬ áá¬á áá¬-áá¬á áá¬áá»áááºáááºááŸá¯áá»á¬ážááᯠááŒá¯áá¯ááºáá«á
áá¯áááá¡áá±áá²á·á áá«á application server áá áºáá¯áá«á áááºážáá±á«áºááœáẠááá·áºá¡ááá®áá±ážááŸááºážáá»á¬ážááᯠáááºáá±ážáá¬ážááá¯ááºááŒá®ážá áá±áá¬ááŸáá·áºáá¯ááºáá±á¬ááºááá¯ááºáááºá á¥ááá¬á¡á¬ážááŒáá·áºá á¡áá»áá¯á·áá±á¬á ááºážáá»ááºážáá»á¬ážááŸáá·áºá¡áá® áá±á¬ááºáá¶ááŸááºáááºážáá±á¬ááºážáá»á¬ážááᯠáá»ááºáá áºááá¯ááºáááºá áá±áá¬ááŸáá·áºá¡áá¯ááºáá¯ááºááá·áº Tarantula ááœáẠHttp áá¬áá¬ááᯠááá¯ááºááá¯ááºáá±ážáá¬ážááá¯ááºáááº- áááºážá á¡áá±á¡ááœááºááᯠááŒááá«á ááá¯áá±áá¬ááœáẠáá±áá¬á¡áá áºááᯠáá±ážáá¬ážááŒá®áž á¡á¬ážáá¯á¶ážááᯠááááºáᶠáá»áŸá±á¬á·áá»áá«á
ááá¯ááºáž 300 áááºážá á®áá±áá²á· áá±á¬ááºá»á¬ážáá±ážááœá±á ááŸá¯ááºááœáá±ááŒá®áž á¡ááŒá±ážá¡ááœáŸá¬ážáá¯ááºáá¯á¶á¡ááŒá±á¬ááºáž áá±á¬ááºážáá«ážáá áºáá¯ááºááᯠáááºááá¯ááºááá«áááºá á€áá±áá¬ááœáẠáááºááẠá¡ááœááºááŒá®ážáá¬ážáá±á¬ á¡ááá®áá±ážááŸááºážáá áºáá¯ááᯠááŸáá·áºáááºáá±ážáá¬ážááá¯ááºááŒá®ážá áááºážááẠPostgreS áá²á·ááá¯á· ááá¯ááŸá±á¬ááºááŸá¯ááŒá áºáááºááá¯ááºáá«á
á€áá±á¬ááºážáá«ážááœáẠá€áá¬áá¬áá²á·ááá¯á· ááá¯ážááŸááºážáá±á¬ á¡áá¬áá áºáá¯ááᯠáá±á¬áºááŒááẠááŒáá¯ážá á¬ážáá«áááºá
ustanovka
á ááºážáááºááŸá¯á¡ááœááºá áá»áœááºá¯ááºááẠ20 GB áá¬á·ááºáááá¯ááºá Ubuntu 18.04 á á¶á¡áá¯áá¯á¶ážá ááºááᯠá áááºáá²á·áááºá virtual CPU 2 áá¯ááŸáá·áº memory 4gigsá
áá»áœááºá¯ááºááá¯á·ááẠTarantool ááá¯ááá·áºááœááºážááẠ- bash script ááᯠrun ááá¯á·ááá¯áẠrepository áá
áºáá¯ááá·áºáᬠapt get install Tarantool ááá¯áá¯ááºáá«á áá¬ááºááœáŸááºážááá¯á· ááá·áºáẠ- (áá±á¬ááºááŒá±á¬ááºáž -L
tarantoolctl - Tarantula ááŒá
áºáááºáá»á¬ážááᯠá
á®áá¶ááá·áºááœá²ááẠá¡ááá á¡áááá·áºáá±ážáá»ááºá
/etc/tarantool - á€ááœááºááœá²á·á
ááºážáá¯á¶áá
áºáá¯áá¯á¶ážá
var/log/tarantool - áá®ááŸá¬ ááŸááºáááºážááœá±ááŸááááºá
var/lib/tarantool â áá±áá¬ááẠá€áá±áá¬ááœáẠáááºááŸáááŒá®áž áááºážááᯠá¥ááá¬áá»á¬ážá¡ááŒá
Ạááá¯ááºážááŒá¬ážáá¬ážáááºá
instance-áááŸáááá¯ááºááŒá®áž instance-enable ááá¯ááºááœá²áá»á¬áž ááŸááááº- áááºážááœáẠá áááºááá·áºá¡áá¬áá»á¬áž áá«áááºáááº- lua áá¯ááºáá«áá±á¬ instance configuration file áá áºáá¯á áááºážááœáẠáááºááá·áº ports áá»á¬ážááᯠáá¬ážáá±á¬ááºáááºá áááºážááœáẠáááºááá·áº memory áááŸáááá¯ááºáááºááᯠáá±á¬áºááŒáááºá Vinyl engine áááºáááºáá»á¬ážá startup ááœáẠrun áá±á¬ code áá¬áá¬áá»á¬ážá áá»áŸáá±ááŒááºážá áááºážá á®ááŒááºážá á¡áá¯á¶ážáááŒá¯áá±á¬á·áá±á¬áá±áá¬ááᯠáá»ááºááŒááºážá áááºááŒáá·áºá
áá¬áááá»á¬ážááẠPostgreS ááœááºáá²á·ááá¯á·á¡áá¯ááºáá¯ááºáááºá á¥ááá¬á¡á¬ážááŒáá·áºá áááºááẠááá°áá®áá±á¬ port áá»á¬ážáá±á«áºááœáẠáá»áááºááœá²áá¬ážáá±á¬ database á áá±á¬áºáá®áá»á¬ážá áœá¬ááᯠrun áá»ááºáááºá ááœá²ááŒá¬ážáá±á¬ port áá»á¬ážáá±á«áºááœáẠáá»áááºááœá²áá¬ážááá·áº áá¬áá¬áá áºáá¯áá±á«áºááœáẠáá±áá¬áá±á·á áºá¥ááá¬áá»á¬ážá áœá¬ááᯠá áááºáá¯ááºáá±á¬ááºááŒá±á¬ááºáž ááœá±á·ááŸáááááºá áááºážááá¯á·ááœáẠáá¯á¶ážáááŒá¬ážáá¬ážáá±á¬ áááºáááºáá»á¬áž ááŸáááá¯ááºááẠ- á¥ááá¬áá áºáá¯ááẠáá¯áá¹áááá±ááá áºáá¯á áá¯ááááá áºáᯠ- á¡ááŒá¬ážáá áºáá¯ááᯠáá¯ááºáá±á¬ááºáááºá
á¥ááᬠá á®áá¶ááá·áºááœá²ááŸá¯
ááá·áºá¡á¬áž Tarantula ááŒá áºáááºáá»á¬ážááᯠá á®áá¶ááá·áºááœá²ááẠááœáá·áºááŒá¯ááá·áº tarantoolctl á¡áááá·áºááŸááááºá á¥ááá¬á¡á¬ážááŒáá·áºá tarantoolctl check example ááẠconfiguration file ááá¯á á áºáá±ážááŒá®áž syntax error áá»á¬ážáááŸááá«á ááá¯ááºááẠok áááºáá¯ááá¯áááºá
á¥ááᬠ- tarantoolctl á¡ááŒá±á¡áá± ááá°áá¬ááᯠááŒáá·áºááá¯ááºáááºá ááá¯áááºážá¡ááá¯ááºážááẠáááºááẠá áááºáááºá áááºááá·áºáááºá ááŒááºáááºá áááºááá¯ááºáááºá
instance á¡áá¯ááºáá¯ááºáááºááŸáá·áºá áááºááẠáááºážááᯠáááºážáááºážááŸá áºáá»áá¯ážááŒáá·áº áá»áááºáááºááá¯ááºáááºá
1. á á®áá¶ááá·áºááœá²áá±ážááá¯ááº
áá¯á¶ááŸááºá¡á¬ážááŒáá·áºá Tarantool ááẠsocket áá áºáá¯ááá¯ááœáá·áºááŒá®áž Tarantool ááᯠááááºážáá»á¯ááºáááºá¡ááœáẠáá¯á¶ááŸáẠASCII á á¬áá¬ážááᯠááá¯áá±áá¬ááœáẠááá¯á·áá«áááºá ááœááºááá¯ážááºááŸáá·áº áá»áááºáááºááŸá¯ááẠá á®áá¶ááá·áºááœá²áá°á¡áá¯á¶ážááŒá¯áá°á¡á±á¬ááºááœáẠá¡ááŒá²ááŒá áºáá±á«áºáááºá á¡áá±á¬ááºá¡áá¬ážá áá á áºááŒááºáž áááŸááá±á¬ááŒá±á¬áá·áº Tarantula ááᯠá á®áá¶ááá·áºááœá²ááẠááœááºááá¯ážááºáá±á«ááºááᯠááŒááºáááá¯á· ááŒá±á¬ááºážáá²ááẠáááá¯á¡ááºáá«á
á€áááºážáááºážááᯠá¡áá¯á¶ážááŒá¯á áá»áááºáááºáááºá áááºááẠTarantoolctl áá¬ááá¡áááºááᯠááá¯ááºááá·áºááẠááá¯á¡ááºáááºá á¡ááá¯áá«á¡áááá·áºááẠááœááºááá¯ážááºááá¯ááœáá·áºááŒá®áž á á®áá¶ááá·áºááœá²áá°á¡áá¯á¶ážááŒá¯áá°á¡ááŒá Ạáá»áááºáááºáááºááŒá áºáááºá ááœááºááá¯ážááºá¡áá±á«ááºááᯠá¡ááŒááºáááºááá¯á· áááºáá±á¬á·á០ááá¯ááºáá«ááŸáá·áº - áááºážááᯠáá°áá áºáá±á«ááºáá±á«ááºá¡ááŒá Ạáá¬ážáá²á·ááŒááºážá ááá¯áá±á¬ááºážáá«áááºá ááá¯á·áá±á¬áẠsocket ááá¯á· á á¬áá±ážááœáá·áºááŸááá°áá»á¬ážáᬠTarantula ááá¯á· áá»áááºáááºááá¯ááºáááºááŒá áºáááºá
á€áááºážáááºážááẠá¡á¯ááºáá»á¯ááºáá±ážááá¯ááºáá¬á¡áá¬áá»á¬ážá¡ááœáẠááá¯á¡ááºáá«áááºá áá±áá¬ááŸáá·áºá¡áá¯ááºáá¯ááºáááºá áá¯ááááááºážáááºáž - binary protocol ááá¯áá¯á¶ážáá«á
2. áá®ážááŒá¬áž port áá áºáá¯ááá¯á·áá»áááºáááºááẠbinary protocol ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážá
ááœá²á·á ááºážááŸá¯ááœáẠááŒááºááááºááœááºáá±ážá¡ááœáẠááá¯á·ááºáá áºáá¯ááœáá·áºáá±ážááá·áº áá¬ážáá±á¬ááºááẠááœáŸááºááŒá¬ážáá»ááºáá áºáá¯áá«ááŸááááºá ဠport ááᯠbinary protocol ááŒáá·áºá¡áá¯á¶ážááŒá¯ááŒá®áž á á áºááŸááºááŒá±á¬ááºážá¡áá±á¬ááºá¡áá¬ážááŒááŒááºážááᯠáááºážááœááºááœáá·áºáá¬ážáááºá
á€áá»áááºáááºááŸá¯á¡ááœááºá tarantoolctl ááᯠááááºáááºážáá¶áá«ááºááá¯á· áá»áááºáááºá¡áá¯á¶ážááŒá¯áááºá áááºážááá¯á¡áá¯á¶ážááŒá¯ááŒááºážááŒáá·áº áááºááẠá¡áá±ážááááºážáá¬áá¬áá»á¬ážááá¯á· áá»áááºáááºááá¯ááºááŒá®áž á¡áá±á¬ááºá¡áá¬ážá áá á áºááŒááºážááᯠá¡áá¯á¶ážááŒá¯áᬠá¡áá»áá¯ážáá»áá¯ážáá±á¬ áááºáá±á¬ááºááœáá·áºáá»á¬ážááᯠáá±ážááá¯ááºáá«áááºá
Data Recording ááŸáá·áº Box Module
Tarantool ááẠáá±áá¬áá±á·á áºááŸáá·áº á¡ááºááá®áá±ážááŸááºážáá¬áᬠááŸá áºáá¯áá¯á¶ážááŒá áºáá±á¬ááŒá±á¬áá·áºá áááºážááœáẠmodule á¡áá»áá¯ážáá»áá¯ážááŸááááºá áá»áœááºá¯ááºááá¯á·ááẠbox module ááá¯á áááºáááºá á¬ážáá«ááẠ- áááºážááẠdata ááŸáá·áºá¡áá¯ááºáá¯ááºáááºá áá áºáá¯áá¯ááᯠbox ááœááºáá±ážáá±á¬á¡áá«á Tarantool ááẠdata áá»á¬ážááᯠdisk ááá¯á·áá±ážáááºá áááºážááᯠmemory ááœááºááááºážáááºážáááºá ááá¯á·ááá¯ááºáááºážááŸáá·áºá¡ááŒá¬ážáá áºáá¯áá¯ááŒá¯áá¯ááºáááºá
á¡áá¶ááœááºážááŒááºáž
á¥ááá¬á¡á¬ážááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááẠbox module ááá¯á·ááœá¬ážááŒá®áž box.once function ááá¯áá±á«áºáá«á áááºážááẠáá¬áá¬ááᯠá áááºáá±á¬á¡áá«ááœáẠáá»áœááºá¯ááºááá¯á·ááá¯ááºááᯠ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
áááºážáá±á¬ááºá áá»áœááºá¯ááºááá¯á·ááẠáá±áá¬ááŸá¬ááœá±ááá¯ááºááá·áº áááºáá¡ááœáŸááºážááᯠáááºáá®ážáá«áááºá áá¯á¶ááŸááºá¡á¬ážááŒáá·áºá áááºááẠáááºááá·áºááá·áºáááºáá»ááºáá»á¬ážááᯠááááºááŸááºáá¬ážáá«áá ááŸááºáááºážáá áºáá¯á á®ááŸá ááááá¯á¶ážá¡ááœááºááᯠáá°áá¡ááœáŸááºážááááºážá¡ááœáẠá¡áá¯á¶ážááŒá¯áááºááŒá áºáááºá
ááá¯á·áá±á¬áẠáá»áœááºá¯ááºááá¯á·ááẠbinary protocol ááŸáá áºááá·áº áá»áááºáááºáá±ážáá±á¬ á§áá·áºáááºá¡áá¯á¶ážááŒá¯áá°ááᯠáá±á¬ááºáá¶á·ááŒá±ážáá áºáá¯áá±ážáá«áááºá áá»áœááºá¯ááºááá¯á·ááẠáá¬áááá áºáá¯áá¯á¶ážááœáẠá á¬áááºááŒááºážá áá±ážáá¬ážááŒááºážááŸáá·áº áá¯ááºáá±á¬ááºááŒááºážááᯠááœáá·áºááŒá¯áá«áááºá
ááá¬ážááá¯ážáá» áá±áá¬áá±á·á áºáá»á¬ážááŸáá·áº ááŸáá¯ááºážááŸááºáá«á á€áá±áá¬á á¡áá¬á¡á¬ážáá¯á¶ážááẠá¡ááœááºááá¯ážááŸááºážáá«áááºá áá»áœááºá¯ááºááá¯á·ááœáẠáá±áá¬ááœááºááŸáááẠ- áá»áœááºá¯ááºááá¯á·ááá±áá¬ááᯠááá¯ážááŸááºážá áœá¬ ááááºážáááºážáá¬ážááá·áºáá±áá¬áá áºáᯠááŸááºáááºážáá áºáá¯á á®ááᯠtuple áá¯áá±á«áºáááºá áááºážááᯠMessagePack ááœááºáá¯ááºááá¯ážáá¬ážáááºá á€áááºááŸá¬ á¡ááœááºááá¯ááºáá±á¬ áá±á¬áºáááºááŒá áºááẠ- áááºážááẠááœáá á¯á¶ááŒá áºááŒá®áž áá±áá¬ááœááºáááºážáá«ážááẠ- 18 bytes ááŸáá·áº 27 ááŒá áºáááºá
áá°áá²á·ááœá²áá¯ááºááᬠáá±á¬áºáá±á¬áºá¡áááºááŒá±áááºá á
á¬ááŒá±á¬ááºážááá¯ááºážááá¯ááá¯á áá±áá¬ááŸááºáááºážááá¯ááºážááœáẠáá¯á¶ážáááœá²ááŒá¬ážáá±á¬ áá±á¬áºáá¶áá»á¬áž ááŸáááá¯ááºáá«áááºá
Box.space command ááᯠá¡áá¯á¶ážááŒá¯á space á¡á¬ážáá¯á¶ážááᯠááŒáá·áºááŸá¯ááá¯ááºáá«áááºá áá®ážááŒá¬ážá¥ááá¬áá áºáá¯ááᯠááœá±ážááẠbox.space á¥ááá¬ááá¯áá±ážááŒá®áž áááºážááŸáá·áºáááºáááºááá·áº á¡áá»ááºá¡áááºá¡ááŒáá·áºá¡á á¯á¶ááᯠááá°áá«á
Tarantool ááœáẠáááºáááºáá¬ážáá±á¬ á¡ááºáá»áẠááŸá áºáá¯- Memory ááŸáá·áº Vinyl ááŸááááºá Memory ááẠdata á¡á¬ážáá¯á¶ážááᯠmemory ááœááºááááºážáááºážáááºá ááá¯á·ááŒá±á¬áá·áºá á¡áá¬á¡á¬ážáá¯á¶ážááẠááá¯ážááá¯ážááŸááºážááŸááºážááŸáá·áº áá»ááºááŒááºá áœá¬ á¡áá¯ááºáá¯ááºáááºá áá±áá¬ááᯠáá áºááºáá²ááá¯á· á áœáá·áºáá áºááá¯ááºááŒá®áž ááŸá±á·ááœáẠáá±ážááŸááºáá¬ážáá±á¬ ááŸááºáááºážááá¹ááá¬ážáááºáž ááŸááá±áá±á¬ááŒá±á¬áá·áº áá¬áᬠáá»ááºááœá¬ážáá«á áá»áœááºá¯ááºááá¯á· áá¬á០áá¯á¶ážááŸá¯á¶ážáááºááá¯ááºáá«á
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>
index:
áááºááá·áºáá±áá¬á¡ááœááºáááᯠáááºáá¡ááœáŸááºážáá áºáá¯ááᯠáááºáá®ážááááºááŒá áºáá±á¬ááŒá±á¬áá·áº áááºážáááŸááá»áŸáẠáááºááá·áºá¡áá¬á០á¡áá¯ááºáááŒá áºáá«á áááºááá·áºáá±áá¬áá±á·á áºááœááºáááᯠáá»áœááºá¯ááºááá¯á·ááẠááááá¯á¶ážá¡ááœáẠ- ááŸááºáááºáž ID ááᯠáááºáá®ážáááºá
á¡á áááºá¡ááá¯ááºážáá»á¬áž:
á€áá±áá¬ááœáẠáá»áœááºá¯ááºááá¯á·áá¡ááœáŸááºážááááºážááœáẠá¡áááºá¡áá¬áá«áááºáááºááᯠáá»áœááºá¯ááºááá¯á·ááœáŸááºááŒáá«áááºá áááºážááœáẠá¡á áááºá¡ááá¯ááºážáá áºáá¯áá«áááºááẠ- áá»áœááºá¯ááºááá¯á·á¡áá¯á¶ážááŒá¯ááá·áº áááá¡ááœááºááẠáááºááŸááºáááá¯ážáá¬ážáá±á¬ á¡áá»áá¯ážá¡á á¬ážááŒá áºááẠ- á¡ááŒá¯ááá±á¬áá±á¬ááºáá±á¬ ááááºážááŒáá·áºááŒá áºáááºá áá»áœááºáá±á¬áºááŸááºááááá±á¬ááºáá±á¬á· á¡áá»á¬ážáá¯á¶áž á¡áá±á¡ááœááºá 18 quintillion áá«á á¡á²áá« á¡áá»á¬ážááŒá®ážáá²á
ááá¯á·áá±á¬áẠInsert command ááᯠá¡áá¯á¶ážááŒá¯á á¡áá»ááºá¡áááºáá»á¬ážááᯠááá·áºááœááºážááá¯ááºáááºá
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 áá±á¬áºáááºááŒáá·áº áááºááŸááºáá¬ážáá«áááºá
áá±áá¬á¡ááœááº
ááá¯á·áá±á¬áẠselect command ááá¯á¡áá¯á¶ážááŒá¯á data áá»á¬ážááá¯ááŒáááá¯ááºáááºá
Box.example.select {1} áá±á¬á·ááŒáá·áº ááá¯áá»ááºáá±á¬ entry ááᯠááŒááá«áááºá áá±á¬á·ááᯠááŸááá·áºááá¯ááºáá»áŸáẠáá»áœááºá¯ááºááá¯á·ááœááºááŸááá±á¬ ááŸááºáááºážá¡á¬ážáá¯á¶ážááᯠááœá±á·ááá«áááºá áááºážááá¯á·á¡á¬ážáá¯á¶ážááẠáá±á¬áºáá¶á¡áá±á¡ááœááºááœáẠááœá²ááŒá¬ážáá±á¬áºáááºáž á€áá±áá¬ááœááºáá°á¡áá áá±á¬áºáá¶áá»á¬ážá á¡áá°á¡ááááŸááá« - á¡ááœááºáá¶áá«ááºáá»á¬ážááŸááá«áááºá
áá±áá¬ááá¬á áá¯á¶ážáááŸáááá¯ááºáá«áááºá á¥ááá¬á¡á¬ážááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááẠáááºážááá¯á·ááᯠáá¯áááá¡ááœááºááŒáá·áº ááŸá¬ááœá±ááẠááá¯á¡ááºáááºá áá«ááá¯áá¯ááºááá¯á·á á¡áááºáááºážá¡ááœáŸááºážá¡áá áºáá áºáá¯ááᯠáááºáá®ážáááºá
box.space.example:create_index( âsecondaryâ, { type = âTREEâ, unique = false, parts = {{field = 2, type =âstringâ} }})
áá»áœááºá¯ááºááá¯á·ááẠCreate_index command ááá¯á¡áá¯á¶ážááŒá¯áááºá
á¡á²áá«ááᯠSecondary ááá¯á· áá±á«áºáá¡á±á¬ááºá
áááºážááŒá®ážáá±á¬ááºááẠparameters áá»á¬ážááá¯áááºááŸááºáááºááá¯á¡ááºáááºá á¡ááœáŸááºážá¡áá»áá¯ážá¡á á¬ážááŸá¬ TREE ááŒá áºáááºá áá°ážááŒá¬ážáááºááá¯ááºáá«á ááá¯á·ááŒá±á¬áá·áº Unique=false áá¯ááá¯ááºááá·áºáá«á
ááá¯á·áá±á¬áẠáá»áœááºá¯ááºááá¯á·áá¡ááœáŸááºážááááºážááœáẠáááºááá·áºá¡ááá¯ááºážáá»á¬ážáá«áááºáááºááᯠáá»áœááºá¯ááºááá¯á·ááœáŸááºááŒáááºá Field ááẠáá»áœááºá¯ááºááá¯á· á¡ááœáŸááºážááᯠáá»ááºááŸá±á¬ááºáá¬ážááá·áº á¡ááœááºáá¶áá«ááºááŒá áºááŒá®áž string á¡áá»áá¯ážá¡á á¬ážááᯠáááºááŸááºáá«á áá«ááŒá±á¬áá·áº áááºáá®ážáá²á·áá¬áá«á
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']
...
á á±á¬áá·áºááááºážáá¬ážááŒááºáž
á¡áááºá áá»áœááºá¯ááºááá¯á·ááẠáá¬ááááᯠááŒááºáááºá áááºááŒá®áž áá±áá¬ááᯠáááºáá¶áá±á«áºááá¯ááẠááŒáá¯ážá á¬ážáá«áá áááºážááẠáááŸááá±á¬á·áááºááᯠááœá±á·ááááá·áºááẠ- á¡áá¬á¡á¬ážáá¯á¶ážááẠááá¬ááŒá áºáá±áá«áááºá Tarantool ááẠá á áºáá±ážáá±ážááááºáá»á¬áž ááŒá¯áá¯ááºááŒá®áž áá±áá¬ááᯠáá áºááºááœáẠááááºážáááºážáá¬ážáá±á¬ááŒá±á¬áá·áº ááŒá áºáááŒááºážááŒá áºáá±á¬áºáááºážá áá»áœááºá¯ááºááá¯á·ááẠáá±á¬ááºáá áºááŒááẠááááºážáááºážááá·áºá¡áá»áááºá¡áá á¡áá¯ááºááá¯ááºáá±á¬á·áá²á á¥ááá¬á¡á¬ážááŒáá·áº ááœááºáá²á·áá±á¬ ááŸá áºáá¬áá®á¡ááœááºážá áá±á¬ááºáá¯á¶ážá á áºáá±ážáá±ážááááºá០ááŒááºáááºááá°ááá±á¬ááŒá±á¬áá·áº áá¯ááºáá±á¬ááºáá»ááºá¡á¬ážáá¯á¶ážááᯠáá¯á¶ážááŸá¯á¶ážááááºááŒá áºáá«áááºá
20 GB ááᯠáá áºááºáá±á«áºááá¯á· á¡áááºáááŒáẠá áœáá·áºáá áºááŒááºážááẠáá±á¬ááºážáá±á¬á¡ááŒá¶ááá¯ááºáá±á¬ááŒá±á¬áá·áº á áá¹ááá·áºááá¯ááºážááᯠááááºážáááºážáááºááŸá¬áááºáž á¡áá¯ááºáááŒá áºáá«á
á€áááºááœááºáá»ááºá¡ááœááºá ááŸá±á·áá±ážááŸááºáááºážá ááá±á¬ááá¬ážááᯠáá®ááœááºááŒá®áž á¡áá±á¬ááºá¡áááºáá±á¬áºáá²á·áááºá áááºážáá¡áá°á¡áá®ááŒáá·áºá áá±áá¬ááŒá±á¬ááºážáá²ááŸá¯ááá¯ááºážá¡ááœááºá ááá·áºááœááºážááŸá¯ááᯠáá±ážáááºáá±á¬ ááŸááºáááºážááá¯ááºáá áºáá¯ááœáẠáááºáá®ážáá¬ážáááºá
á á áºáá±ážáá±ážááááºá¡áá áááºááœáá·áºáá áºáá¯á á®ááᯠáááºážááá¯á·ááœáẠááááºážáááºážáá¬ážáááºá á€ááá¯ááºáá»á¬ážá¡ááœáẠáá»áœááºá¯ááºááá¯á·ááẠá¡ááœááºá¡á á¬ážááᯠáááºááŸááºááẠ- á¥ááá¬á 64 MBá ááŒáá·áºááœá¬ážáá±á¬á¡áá«ááœáẠá¡áá¶ááœááºážááŒááºážááẠáá¯áááááá¯ááºááá¯á· áá±á¬ááºááœá¬ážáá«áááºá ááŒááºáááºá áááºááŒá®ážáá±á¬ááºá Tarantool ááẠáá±á¬ááºáá¯á¶ážá á áºáá±ážáá±ážááááºá០ááŒááºáááºááá°ááŒá®áž áááºááá·áºááœá¬ážáááºá¡áá áá±á¬ááºááá¯ááºážááœáẠááœá±áá±ážááœá±áá°áá»á¬ážá¡á¬ážáá¯á¶ážááᯠááŒááºáááºáá¯ááºáá±á¬ááºáááºá
áááºážáá²á·ááá¯á· ááŸááºáááºážáááºááŒááºážá¡á¬áž áá¯ááºáá±á¬ááºáááºá áááºááẠbox.cfg áááºáááºáá»á¬áž (á¥ááá¬.lua ááá¯ááºááœááº) ááœá±ážá
áá¬ááᯠáááºááŸááºááẠááá¯á¡ááºáááºá
wal_mode = âwriteâ;
áá±áá¬á¡áá¯á¶ážááŒá¯ááŸá¯
ááá¯áá»áœááºá¯ááºááá¯á·áá±ážáá¬ážáá²á·ááá·áºá¡áá¬ááŸáá·áºá¡áá°á áááºáááºáá±áá¬ááááºážáááºážááẠTarantula ááá¯á¡áá¯á¶ážááŒá¯ááá¯ááºááŒá®ážáááºážáááºáá±áá¬áá±á·á áºáá áºáá¯á¡áá±ááŒáá·áºá¡ááœááºáá»ááºááŒááºá áœá¬á¡áá¯ááºáá¯ááºáááá·áºáááºá ááá¯áá±á¬á· ááááºáá¯áá·áºáá±á«áºááŸá á¡áá¯ááºá á®á áááºááŒááºážááẠáááºá¡á¬ážáá¯á¶ážááŸáá·áº áá¯ááºááá¯ááºáá±á¬á¡áá¬ááŒá áºáááºá
áá»áœááºá¯ááºááá¯á·ááẠá¡ááºááá®áá±ážááŸááºážáá áºáá¯áá±ážáá±áá«áááºá
á¥ááá¬á¡á¬ážááŒáá·áºá 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
ááá¯á·áá±á¬áẠáá»áœááºá¯ááºááá¯á·ááẠáá¯á¶ážá áœá²áá°áá¶áá±ážááá¯á·ááá·áº áá»áœááºá¯ááºááá¯á·á Tarantula áá¬áᬠJSON ááŸáá·áº http router ááŸáá·áº http áá¬áá¬ááᯠáá»áááºáááºáááºá
local http_router = require('http.router')
local http_server = require('http.server')
local json = require('json')
áááºážááŒá®ážáá±á¬ááºá áá»áœááºá¯ááºááá¯á·ááẠáá±á¬ááºážááá¯áá»ááºáá»á¬ážááŸáá·áº á¡ááŸá¬ážáá»á¬ážá¡á¬ážáá¯á¶ážááᯠááŸááºáááºážáááºááá·áº http server interfaces á¡á¬ážáá¯á¶ážááœáẠport 8080 ááœáẠá áááºáá«áááºá
local httpd = http_server.new('0.0.0.0', 8080, {
log_requests = true,
log_errors = true
})
ááá¯á·áá±á¬ááºá áá»áœááºá¯ááºááá¯á·ááẠáááºážááŒá±á¬ááºážááá¯ááŒá±ááŒá¬áááºá ááá¯á·ááŒá±á¬áá·áº GET áááºážáááºážááŒáá·áº áá±á¬ááºážááá¯áá»ááºáá áºáᯠport 8080 /count ááœááºáá±á¬ááºááŸááá«áá ááá¯ááºážáá áºáá¯á០function ááá¯áá±á«áºáááºá áááºážááẠáá»áœááºá¯ááºááá¯á·áááºááŸááºáá¬ážáá±á¬ á¡ááŒá±á¡áá±ááᯠ- 200á 404á 403 ááá¯á· ááŒááºáá±ážáááºá
router:route({method = 'GET', path = '/count'}, function()
return {status = 200, body = json.encode({count = get_count()})}
end)
áá»áœááºá¯ááºááá¯á·ááẠááá¯ááºáááºááœáẠjson.encode ááá¯ááŒááºáá±ážáááºá áááºážááœáẠáá»áœááºá¯ááºááá¯á·ááá±áá¬áá±á·á áºááŸá ááŸááºáááºážá¡áá±á¡ááœááºááᯠáá±á«áºááŒá®áž ááŒáááá·áº count ááŸáá·áº 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() áá»áœááºá¯ááºááá¯á·ááẠfunction ááá¯áá±á«áºááá¯ááŒá®áž ááá¯áááºáá áºáá¯áá¯ááºáá±ážáááºá
á¡áááºáž local token = randomString(32) á
á¬áá¯á¶áž 32 áá¯á¶ážáá«ááá·áº áá»áááºážá
á¬áááºážáá
áºáá¯ááŒá
áºáááºá
áááºážáááºáá¬á
á®ááẠlocal last = box.space.example:len() áá«ááá¯á·áááºáá±á¬ááºáá¯á¶ážááŒááºá
ááºááá¯áá¯ááºááŸá¯ááºá
ááá¯ááºážáá²ááŸá¬ box.space.example:insert{ last + 1á token } áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·á áá±áá¬áá±á·á
áºáá²ááá¯á· áá±áá¬áá»á¬ážááᯠáá±ážááá¯ááºááŒááºážááŒá
áºáááºá ááá¯ááá¯áááºááŸá¬ áá»áœááºá¯ááºááá¯á·ááẠID ááᯠ1 ááŒáá·áº ááá¯ážáá±ážáá¯á¶áá¬ááŒá
áºáááºá Tarantula ááœááºá€á¡ááœáẠsequence áá»á¬ážááŸááááºá
á¡á²áá®ááŸá¬ ááá¯áááºááᯠáá±ážáááºá
ááá¯á·ááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·ááẠapplication ááá¯ááá¯ááºáá áºááá¯ááºááœááºáá±ážáá¬ážáá²á·áááºá áááºááẠááá¯áá±áá¬ááœáẠáá±áá¬ááᯠááá¯ááºááá¯áẠááá¯ááºááœááºááá¯ááºááŒá®ážá áá±á¬ááºá Ạmodule ááẠááá·áºá¡ááœáẠáá áºáááºáá±á¬ á¡áá¯ááºá¡á¬ážáá¯á¶ážááᯠáá¯ááºáá±á¬ááºáá±ážáááá·áºáááºá
áááºážááẠhttp ááá¯áá¬ážáá±á¬ááºááŒá®áž data ááŸáá·áºá¡áá¯ááºáá¯ááºáááºá á¡áá¬á¡á¬ážáá¯á¶ážááẠapplication ááŸáá·áº data ááŸá áºáá¯áá¯á¶ážááœááºá¥ááá¬áá áºáá¯áááºážááœááºááŒá áºáááºá ááá¯á·ááŒá±á¬áá·áºá á¡áá¬á¡á¬ážáá¯á¶ážáááºá¡áá±á¬áºáá±ážááŒááºáááºá
á áááºáááºá¡ááœáẠáá»áœááºá¯ááºááá¯á·ááẠhttp module ááᯠáááºáááºáá«-
áá«ááá¯áááºááá¯áá¯ááºááá²á 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 ááẠáá»áœááºá¯ááºááá¯á·á¡á¬áž status 200 áá±ážáááºá
/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 áá®áá®á áá¹ááá·áºá¡ááœááºáž áá¯ááºáá±á¬ááºáá²á·áááºá ááá¯á·ááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·ááœáẠ3500 cores ááŸáá·áº memory 2 gigabyte ááŸááá±á¬ á ááºáááºáá±ážááœáẠáá áºá áá¹ááá·áºáá»áŸáẠáá±á¬ááºážááá¯ááŸá¯ 4 ááá·áºááŸááááºá
50000 ááá¯áááºááá¯áááºáž áááºááœá±ážáá»ááºááá¯ááºááŒá®áž áááºážááááºááá¯ážááᯠááŒáá·áºááŸá¯ááá¯ááºáááºá
http ááá¯áá¬áá ááá·áºáá±áá¬ááᯠá á®áá¶áá±á¬ááºááœááºáá±ážááá·áº áá±á¬ááºáá¶áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááá¯áááºáž áááºá¡áá¯á¶ážááŒá¯ááá¯ááºáá«áááºá ááá¯á·á¡ááŒáẠá¡áá»áá¯ážáá»áá¯ážáá±á¬ ááœááºážá¡á¬ážáá»á¬áž ááŸááá«áááºá á¥ááá¬á¡á¬ážááŒáá·áºá áááºááẠá¡ááºááááºáá»á¬ážááœáẠáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠáá±á«áºááá¯ááá¯ááºááŒá®áž áá áºáá¯áá¯ááᯠá á áºáá±ážáá« - ááŸááºáááºáá±á¬ áááááá¹ááá»á¬ážá
áá±áá¬áá±á·á áºáá¬áá¬ááá¯ááºááá¯ááºá script applications ááœá±ááᯠááá¯ááºááá¯ááºáá±ážááá¯ááºááŒá®áž áááºá¡áá¬áá០ááá·áºáááºááá¬ážáá² ááẠmodule ááœá±ááá¯áááᯠáá»áááºáááºááŒá®áž logic áá áºáá¯áá¯ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááá¯ááºáá«áááºá
á¡ááá®áá±ážááŸááºážáá¬áá¬ááẠááŒááºááá¬áá¬áá»á¬ážááᯠáááºáá±á¬ááºááŒáá·áºááŸá¯ááá¯ááºáááºá áá±áá¬ááᯠááá°ááŒá®áž áááºážááá±áá¬áá±á·á áºááá¯á· ááá·áºááá¯ááºáááºá á€áá±áá¬áá±á·á áºá០áá±áá¬ááᯠá¡ááŒá¬ážáá±á¬ á¡ááá®áá±ážááŸááºážáá»á¬ážá០á¡áá¯á¶ážááŒá¯áá«áááºá
Tarantula ááẠáááºážááᯠááá¯ááºááá¯ááºáá¯ááºáá±á¬ááºáááºááŒá áºááŒá®áž áá®ážááŒá¬áž application áá áºáá¯áá±ážááẠáááá¯á¡ááºáá«á
áááá¯á¶ážáá»á¯ááº
áá«á á¡áá¯ááºááŒá®ážáá áºáá¯áá²á· áááááá¯ááºážáá²áá±á áá¯ááááá áºáá¯ááᯠMail.ru Group ááá±á¬á·ááºááœáẠáááŒá¬áá® áá¯ááºáá±áá±á¬á·ááẠááŒá áºááŒá®áž áááºážááŸáá·áº ááá·áºááºáá áºáá¯ááᯠáá»áœááºá¯ááºááá¯á· áá±áá»á¬áá±á«áẠááá·áºáá±ážáá«áááºá
áá»áœááºá¯ááºááá¯á·ááẠá€á¡áá¬áá»á¬ážááᯠá¡áœááºááá¯ááºážááœáẠáááºáá±á¬ááºááŒá®áž á¡áá»áááºááŸáá·áºáááŒá±ážáá® áá±ážááœááºážáá»á¬ážáá±ážááá·áº ááœá²áá»á¬ážááᯠáááºáá±á¬ááºááẠá
áááºáááºá
á¬ážáá«á áááºáá±á¬ááºááŒáá·áºááŸá¯áá«á
Cloud ááá¯á· ááœáŸá±á·ááẠááá¯á¡ááºáá«á ááá¯á·ááá¯áẠáááºá á¡ááŒá±áᶠá¡áá±á¬ááºá¡á¡á¯á¶ááŸáá·áº áááºáááºááá·áº áá±ážááœááºážáá»á¬áž ááŸááá«áá
PS áá»áœááºá¯ááºááá¯á·ááœáẠáá
áºááá»áŸáẠá¡ááá²á·á
á¬áááºážá
á
Ạá áá¯ááŸááááºá áááºáááá±á¬áá»ááºááẠáááºážááá¯á·áá²ááŸáá
áºáá¯ááŒá
áºáá±á¬ááºážááŒá
áºááá¯ááºáááºá
source: www.habr.com