ááŒá±ááŒá¬áá»ááº
áá¯ááºáá±á¬áºááá¯ááºáááºáá»á¬áž á ááœá±áá¬áá®áááºááœáẠáááºážá
á®ááŒááºážá
áá
áºáá»á¬ážá áá®ááá¯ááºážááá¯ááºáᬠáá±á¬ááºážáá«ážááœá²áá»á¬ážááᯠáá¯ááºáá±ááẠá
á®á
ááºáá¬ážáá«áááº- "The VTrade Experiment" - áá¯ááºááœááºááŸá¯á
áá
áºáá»á¬ážá¡ááœáẠáá°áá±á¬ááºáá
áºáá¯áá±ážááẠááŒáá¯ážáááºážááŸá¯á á
á®ážáá®ážááẠáá²ááŸááºááŸá¯á áá±áá¶ááŸáá·áº á
ááá¯ážááá¯ááºáááºáá±á¬ááºááŒááºážááá¯ááºáᬠáá®á¡áá¯áá®ááŸáá·áº áááºááœá±á·ááᯠáááºážá
á
áºáááºááŒá
áºáááºá áá±á¬ááºážáá«ážáá²á·á¡áá¯á¶ážááŸá¬ áááºá
áááºáááºá
á¬ážáá¯á¶ážá¡ááŒá±á¬ááºážá¡áá¬ááœá±ááᯠáá²áá±ážááá¯á· ááááºáá±á«áºáá«áááºá
á€áááºááŸá¬ Erlang/Elixir ááŸá ááŒáá·áºáá±áá¬ážáá±á¬ áá¬ááºááŒá¯á¡ááºááºáá®áá±ážááŸááºážáá»á¬ážá¡ááŒá±á¬ááºáž á
á®ážáá®ážá áá±á¬ááºáá¯á¶ážáá±á¬ááºážáá«ážááŒá
áºáááºá IN
ááá±á·áá»áœááºá¯ááºááá¯á·áááºáá¯ááºá¡ááŒá±áá¶ááŸáá·áºááá±á¬áá»ááºáá»á¬ážááá±áá¯áá»á¡á¬ážááŒáá·áºááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááá¯ááºáá¬ááá á¹á áááºáá»á¬ážááá¯áááºááŒáá«áááºá
áááºáá±á¬ááºááŸá¯á¡ááœá²á·á¡á ááºáž
áááºááœá±á·ááááœááºá áááºáá±á¬ááºááŸá¯áá áºáá¯áááºáá®ážáá±á¬á¡áá«á áááºááẠááááºážáá»á¯ááºáááááá¬áá áºáá¯ááœáẠá¡ááŒááºá¡ááŸááºáá¯á¶á·ááŒááºááŸá¯áá¯á¶á á¶áá»á¬ážá áœá¬ááᯠáááŒá¬áá áá±á«ááºážá ááºááááºááŒá áºáá«áááºá á¥ááá¬á¡á¬ážááŒáá·áºá ááá±á¬áá»ááºá¡áá¯á¶ážááŒá¯áá°áááá¯ááá¯ááºáá»á¬ážááᯠá á®áá¶ááá·áºááœá²ááŒááºážááŒá¿áá¬ááᯠááŒá±ááŸááºážáá±ážááá·áº áá¯á¶ážá áœá²áá°áááºáá±á¬ááºááŸá¯ááẠreq-resp áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááᯠáá¯á¶á·ááŒááºááŒá®áž pub-sub ááŸáá áºááá·áº áááá¯ááá¯ááºááœááºážáá¶ááŸá¯áá»á¬ážááᯠááááºážááá¯á·ááááºááŒá áºáááºá á€ááá á¹á ááẠá¡ááœááºááá¯ážááŸááºážáá«áááº- á á¬ááá¯áá±ážááá¯á·ááŒááºážáá±á¬ááºááœááºááœáẠáááºáá±á¬ááºááŸá¯áá¯áá¹ááááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒá®áž á¡ááºááááºáá»á¬ážááᯠáá¯ááºáá±ááá·áº ááááºážáá»á¯ááºáááááá¬áá áºáá¯ááŸááááºá
á¡ááŸá¬ážá¡ááœááºážáá¶ááá¯ááºáá±á¬ ááŒáá·áºáá±ááŸá¯áááºáá±á¬ááºááŸá¯ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááẠááá¯á¡ááºááá·áºá¡áá« á¡ááŒá±á¡áá±ááŸá¬ ááá¯ááá¯ááŸá¯ááºááœá±ážáá¬áááºá á¡áá¯á¶ážááŒá¯áá°áá»á¬ážá¡ááœáẠááá¯á¡ááºáá»ááºáá»á¬áž ááŒá±á¬ááºážáá²ááœá¬ážááŒá±á¬ááºáž á áááºáá°ážááŒáá·áºááŒáá«á áá¯á·á
- ááᯠáááºáá±á¬ááºááŸá¯ááẠá¡á á¯á¡ááœá²á· 5 áá¯ááœáẠáá±á¬ááºážááá¯ááŸá¯áá»á¬ážááᯠáá¯ááºáá±á¬ááºááá·áºáááºá
- áá±á¬ááºáá¶áá¯ááºáá±á¬ááºááŒááºážáá¯ááºáááºážáá»á¬ážááᯠáá¯ááºáá±á¬ááºááá¯ááºááŒááºážá
- áááá¯ááá¯ááºá¡ááºááááºáá»á¬ážá¡ááœáẠá á¬áááºážááœááºážááŸá¯á á¬áááºážáá»á¬ážááᯠááá¯ááºážááá áºááŒáá·áº á á®áá¶ááá·áºááœá²ááá¯ááºáááºá
ááŸááºáá»áẠáááááºáááºáž ááááºážáááºážááŒááºážááŸáá·áº áá±áá¬áá¯á¶áá°ááŒááºážááá¯ááºáᬠááŒá¿áá¬ááᯠáá»áœááºá¯ááºááá¯á· áá ááºážá á¬ážáá«á á€ááŒá¿áá¬áá»á¬ážááᯠá¡á á±á¬ááá¯ááºážááœáẠááŒá±ááŸááºážááŒá®ážááŒá®áᯠáá°áááŒáá«á áá¯á·á á áá áºááœáẠáá¯á¶ááŒááºá áááºáá»áááŒá®áž á¡ááœááºáááºááá¯ááºáá±á¬ ááá¯ááŸá±á¬ááºááŸá¯á¡ááœáŸá¬áá áºáá¯ááŸáááŒá®ážá ááá¯ááºááœááºááŒá±ááŸááºážáá°áá»á¬ážááẠáááºážááŸáá·áº á¡ááŒááºá¡ááŸááºáá¯á¶á·ááŒááºááẠááá¹ááá¬ážáá»á¬ážááŸááááºá
áá¯á¶ážá áœá²áá°áá»á¬ážá áááºáá±á¬ááºááŸá¯á ááá¬ážáááºáá±á¬áºááŒáá»ááºááẠááá¯ááá¯ááŸá¯ááºááœá±ážáá¬áááºá áááá¯ááááºáá¬áá áºáŠážáá¡ááŒááºá¡á áááºáá±á·áá»áºá¡áá¯á¶ážááŒá¯ááŒááºážááŒá±á¬áá·áº ááŒá±á¬ááºážáá²ááŸá¯á¡áááºážáááºáá¬ááŸááááºá áááááá¯á¡ááºáá»ááºááᯠááŒáá·áºáááºážáááºá áá»áœááºá¯ááºááá¯á·ááẠreq-resp áá²ááŸááºááŸá¯ááœáá¯áá·áºááœáẠáá»áááºááœááºáá»áŸá¬áá»áááºááŸáááẠááá¯á¡ááºáá«áááºá
áá±á¬ááºáá¶á¡áá¯ááºáá»á¬ážááᯠáá¯ááºáá±á¬ááºááẠááá¯á¡ááºáá»ááºááẠáááŒá¬áá ááŒá áºáá±á«áºáááºá á¡áá¯á¶ážááŒá¯áá°áá»á¬ážááœááºá áááºážááẠá¡áá¯á¶ážááŒá¯áá°á á¬ááœááºá á¬áááºážáá»á¬ážááᯠá á áºáá±ážááŒááºážá áá±á«ááºážáá¯ááºáá¯ááºáá¬ážáá±á¬ áá¬ááºáá®áá®áá®áá¬ááᯠáá¯ááºáá±á¬ááºááŒááºáž ááá¯á·ááá¯áẠáá±áá¬ááᯠááá¯ááŸááºáá®áá®áá¬ááŸáá·áº áááºáá°ááŒá¯ááŒááºáž ááŒá áºááá¯ááºáááºá ááœááºáááºáá»á¬áž á€áá¯ááºáááºážáá±á¬ááºáá¬áá»á¬ážááᯠá¡á á¯á¡áá±ážá¡ááœááºáž áá áºáááºážáááºážááŒáá·áº ááŒáá·áºáá±áááºááŸáá·áº áá¯ááºáá±á¬ááºááŸá¯á ááá¯ážáááºááŸá¯ááᯠá á±á¬áá·áºááŒáá·áºá á áºáá±ážááẠááá¯á¡ááºáá«áááºá ááá¯á·ááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·ááœáẠááŒá±ááŸááºážáá»ááºááœá±ážáá»ááºá áᬠááŸá áºáá¯ááŸááááº- ááááºáá±á¬ááºážáá«ážá០á¡áá¯ááºááŒáá·áºáá»á®áá±ážáá¯á¶á á¶ááᯠá¡áá¯á¶ážááŒá¯áá« ááá¯á·ááá¯áẠá¡áááºáááŒá±áá«áá áá»áœááºá¯ááºááá¯á·ááá¯á¡ááºááá·áºá¡ááá¯ááºáž áááá¯áááºáá¬áá±á«ááºážáá°ážáááºááᯠá á®áá¶ááá·áºááœá²ááá·áº á áááºááŒáá¯ááºá¡áá¯ááºáá»áááºááá¬ážááᯠáá±ážáá¬ážáá«á
á¡ááŸáẠ3 ááẠpub-sub template ááá¯ážáá»á²á·ááŸá¯ ááá¯á¡ááºáááºá á¡áá±á¬ááºá¡áááºáá±á¬áºáááºá¡ááœááºá pub-sub exchange point áá áºáá¯áááºáá®ážááŒá®ážáá±á¬ááºá áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·ááááºáá±á¬ááºááŸá¯á¡ááœááºážááœáẠá€á¡ááŸááºá ááááºážáá»á¯ááºáááááá¬ááᯠáááºáá±á¬ááºážááœáá·áºááẠááá¯á¡ááºáá«áááºá ááá¯á·ááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·ááẠá á¬áááºážááœááºážááŸá¯áá»á¬ážááᯠáá¯ááºáá±á¬ááºááŒááºážááŸáá·áº á á¬ááá¯áá±ážááá¯á·ááŒááºážá¡ááœáŸá¬á០á á¬áááºážááœááºážááŒááºážá០áááºááá¯ááºážááŒááºážá¡ááœáẠáá¯áá¹áááá±áááᯠáá¯á¶ážá áœá²áá°áá»á¬ážá á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯á¡ááŒá áºááá¯á· ááœáŸá±á·áá±ááá²á·ááá¯á·ááŒá áºáááºá
ááááºá¡áá±ááŒáá·áº ááŒá¿áá¬áááŒáá¯ááœá²ááŸá¯ááẠááá¯á¡ááºáá»ááºáá»á¬ážááŒáá·áºáá®á
á±áááºá¡ááœáẠááá°áá®áá±á¬ node áá»á¬ážááœáẠáááºáá±á¬ááºááŸá¯á ááŒá
áºááẠá
áá¯ááᯠááœáá·áºááŒá®áž á
á¬áááºážááœááºážááŸá¯á¡ááœáẠáá¬áááºááŸáááá·áº pub-sub controller áá
áºáᯠáááºáá¶áááºáá®ážááẠááá¯á¡ááºááŒá±á¬ááºáž ááŒááá²á·áááºá
ááá¯ááºááœááºáá° 5 áŠážááᯠáá¯ááºáá±á¬ááºááẠáááºááẠáááºáá±á¬ááºááŸá¯áá¯ááºááᯠááŒá±á¬ááºážáá²ááẠáááá¯á¡ááºáá«á áá
áºáá¯áááºážáá±á¬ áá±á¬ááºáááºáá¯ááºáá±á¬ááºáá»ááºááŸá¬ ááœá±áá²ááœáá¯áá·áºááœáẠáááºáá»ááºáá®á¡á±á¬áẠá
ááºážáá»á¥áºážá
ááºážáá»á¥áºážáá»á¬ážáááºááŸááºááŒááºážá
ááŸá¯ááºááœá±ážááŸá¯áá
áºáá¯áááºáž ááŸááááº- pub-sub controller ááŸáá·áº custom task scheduler ááẠáááá¹áá°áá
áºáá¯áááºážááœáẠá¡áá¯ááºáá¯ááºááá«áááºá ááááºá á¡ááŒá±áá¶á¡áá»ááºá¡áá±ááŒáá·áº á
á¬ááá¯áá±ážááá¯á·ááŒááºážáááºáá±á¬ááºááŸá¯ááẠáá±á«ááºážáá±á¬ááºáá
áºáŠážááᯠááœá±ážáá»ááºáááºá¡ááœáẠááá¹ááá¬ážáá
áºáᯠáá¶á·ááá¯ážáá±ážááááºááŒá
áºáááºá
áá±á«ááºážáá±á¬ááºááœá±ážáá»ááºááŸá¯
ááŒáá·áºáá±ááá·áºá áá áºáá»á¬ážááœááºá áá±á«ááºážáá±á¬ááºááœá±ážáá±á¬ááºááœá²ááẠáááºáá¯ááºáááºááá¯ážá¡áá»áá¯á·á ááŒáá·áºáá±ááŸá¯áá¯ááºáá±á¬ááºááŒááºážááᯠá¡áá»áááºááá¬ážááœá²ááẠáá¬áááºááŸáááá·áº áá¯ááºáááºážá ááºáá áºáá¯áááºážááᯠááá·áºá¡ááºááŒááºážááá¯ááºáᬠáá¯ááºáá¯á¶ážáá¯ááºáááºážááŒá áºáááºá
áááá¯áá»á¯ááºááá¯ááºááŸá¯ áááŒá¯ááá¯ááºáá±á¬ á
áá
áºáá»á¬ážááœááºá paxos ááá¯á·ááá¯áẠraft áá²á·ááá¯á·áá±á¬ áá
áºááá¹áá¬áá¯á¶ážááŸáá·áº á¡áá»á¬ážááá¹áááᯠá¡ááŒá±áá¶ááá·áº á¡ááºáááá¯áá®áááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áááºá
á
á¬ááá¯áá±ážááá¯á·ááŒááºážááẠááœá²á
á¬ážááŸáá·áº á¡áááá¡áá»ááºááŒá
áºáá±á¬ááŒá±á¬áá·áºá áááºáá±á¬ááºááŸá¯ááááºážáá»á¯ááºáá°áá»á¬áž - ááá¯ááºá
á¬ážááŸááºáá±á¬ááºážáá±á«ááºážáá±á¬ááºáá»á¬ážá¡á¬ážáá¯á¶ážá¡ááŒá±á¬ááºáž áááá«áááºá á
á¬ááá¯áá±ážááá¯á·ááŒááºážááẠáá²áá±ážááŒááºážáááŸááá² áá±á«ááºážáá±á¬ááºáá
áºáŠážááᯠááá·áºá¡ááºááá¯ááºáááºá
ááœá±áá²ááœáá¯áá·áºááá¯á· á
áááºááŒá®áž áá»áááºáááºááŒá®ážáá±á¬ááºá áááºáá±á¬ááºááŸá¯á¡á¬ážáá¯á¶ážááẠá
áá
áºáááºáá±á·áá»áºááᯠáááŸááááºá #'$leader'{exchange = ?EXCHANGE, pid = LeaderPid, servers = Servers}
. ááŸáááẠLeaderPid
ááŸáá·áºááá¯ááºááá¯áẠpid
áááºááŸá áá¯ááºáááºážá
ááºááŸá¬ áŠážáá±á¬ááºáá°á¡ááŒá
Ạááá·áºá¡ááºáá¬áá±á«á·áá±á¬áºá Servers
node áá»á¬ážá¡á¬ážáá¯á¶ážááŸáá·áº áááºážááá¯á·á parameters áá»á¬ážáá«áááºáááºá
á¡áá
áºáá
áºáá¯áá±á«áºáá¬ááŒá®áž á¡áá¯ááºáá¯ááºáá±áá±á¬ á¡á
á¯á¡áá±ážáá
áºáᯠáá»áááºáááºááŸá¯ááŒááºáá±á¬ááºááœá¬ážáá»áááºááœáẠáááºáá±á¬ááºááŸá¯ááááºážáá»á¯ááºáá°á¡á¬ážáá¯á¶áž áááºáá¶áááŸááááºááŒá
áºáááºá #'$slave_up'{exchange = ?EXCHANGE, pid = SlavePid, options = SlaveOpts}
О #'$slave_down'{exchange = ?EXCHANGE, pid = SlavePid, options = SlaveOpts}
á¡áá®ážáá®ážá
á€áááºážá¡á¬ážááŒáá·áº á¡á áááºá¡ááá¯ááºážá¡á¬ážáá¯á¶ážááẠááŒá±á¬ááºážáá²ááŸá¯á¡á¬ážáá¯á¶ážááᯠááááŸáááŒááŒá®áž á¡á á¯á¡ááœá²á·ááẠáááºááŸááºáá¬ážáá±á¬á¡áá»áááºá áá±á«ááºážáá±á¬ááºáá áºáŠážááŸáááẠá¡á¬ááá¶áá«áááºá
ááŒá¬ážáá¶
ááŸá¯ááºááœá±ážáá±á¬ ááŒáá·áºáá±ááŸá¯ áá¯ááºáááºážá
ááºáá»á¬ážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáááºá ááŸáááŒá®ážáá¬áž áááá¯áá¬áá
áºáá¯á¡á¬áž ááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬áẠáá¯ááºáá±á¬ááºááẠááŒá¿áá¬áá»á¬ážááœáẠááŒá¬ážáá¶áá
á¹á
ááºážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááẠá¡áááºááŒá±áááºá
áááºáá±á¬ááºááŸá¯áá¯ááºááᯠááŒá±á¬ááºážáá²ááŒá®áž á¥ááá¬á¡á¬ážááŒáá·áºá á¡ááá¯áá¯ááºáá±á¬ááºááŒááºážá áááºážááŒá±á¬ááºážáááºááŸááºááŒááºáž ááá¯á·ááá¯áẠááŸááºáááºážááŸááºááŒááºážááá¯ááºáᬠááŒá¿áá¬áá»á¬ážááᯠááŒá±ááŸááºážááŒááºážáááŒá¯áááºá á¡ááá¯á¡áá¯ááºá¡á¬ážáá¯á¶ážááᯠáá¯ááºáá±á¬ááºáá±ážááá·áº áááºáá±á¬ááºááŸá¯áááá¯ááºáá® ááá±á¬ááºá
á®ááá¯ááºááœááºáá°á¡á¬áž áááºááœáá·áºááá¯ááºáááºá
pub-sub optimization á ááá¹ááááºááá°áá¬áá
áºáá¯ááẠá
á»á±ážááœááºá¡ááœááºáž á
á»á±ážááŸá¯ááºážááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážááŸáá·áº áááºáá±á¬ááºáááºáá»á¬ážá¡ááœáẠwebsocket API ááᯠáá¶á·ááá¯ážáá±ážááá·áº á¡ááºááááºááŒá
áºáááºáá»á¬ážáá²á·ááá¯á·áá±á¬ á¡ááºááááºááŒá
áºáááºáá»á¬ážááᯠáá¯ááºáá±ážááá·áº áá¯ááºáááºážá¡áá¬áá¶ááŒáá·áº ááŒáá·áºáá±áá¬ážáá±á¬ á¡ááá®áá±ážááŸááºážáá
áºáá¯ááŒá
áºáááºá
ááááºááá¯ááºáá¯á¶ážááŒááºáá«á áá±á¬ááºáááºáááºáá±á¬ááºááŸá¯ááẠá¡á±á¬ááºáá«á¡ááá¯ááºážááŒá
áºáááº-
- client ááẠplatform ááŸáá·áºáá»áááºáááºááŸá¯áá»á¬ážááŒá¯áá¯ááºáááºá á¡ááœá¬ážá¡áá¬ááᯠáááºá á²ááá·áº áá¬áá¬á áá áºáááºááœááºá á€áá»áááºáááºááŸá¯ááᯠáááºáá±á¬ááºááŸá¯áá±ážáááºá¡ááœáẠáá¯ááºáááºážá ááºáá áºáᯠá áááºáááºá
- áááºáá±á¬ááºááŸá¯áá¯ááºáááºážá ááºá á¡ááŒá±á¡áá±ááœááºá á¡ááºááááºáá»á¬ážá¡ááœáẠááœáá·áºááŒá¯áá»ááºááŸáá·áº á á¬áááºážááœááºážááŸá¯ ááŒá áºáá±á«áºáá¬áá«áááºá áá¯ááºáááºážá ááºááẠá¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážá¡ááœáẠá á¬áááºážááœááºážáááºážáááºážááᯠáá±á«áºáááºá
- kernel ááœááºááŒá áºáááºáá áºáá¯áá¯ááºáá¯ááºááŒá®ážáááºááŸáá·áºáááºážáááºáá»áááºáááºááŸá¯áá»á¬ážááá¯áááºáá±á¬ááºááŸá¯áá±ážááá·áºáá¯ááºáááºážá ááºáá»á¬ážááá¯á·áá±ážááá¯á·áááºá
áá»áœááºá¯ááºááá¯á·ááœáẠ"ááááºáž" áá±á«ááºážá
ááºá¡ááœáẠá
á¬áááºážááœááºážáá° 50000 ááŸááááºáᯠá
áááºáá°ážááŒáá·áºááŒáá«á
áá¯á·á á
á¬áááºážááœááºážáá°áá»á¬ážááᯠáá¬áᬠá
áá¯ááœáẠá¡áá®á¡áá»áŸ ááŒáá·áºáá±áá¬ážáááºá ááááºá¡áá±ááŒáá·áºá ááœá±áá²ááœáá¯áá·áºááá¯á·áá±á¬ááºááŸááá¬áá±á¬ á¡ááºááááºáá
áºáá¯á
á®ááá¯ááºážááẠá¡ááŒááẠá
á,áááá áá¬áá¬áá
áºáá¯á
á®ááœáẠá¡ááŒááẠáá,áááá áááºážáá±á«áºááŸá á
á¬áááºážááœááºážáá°á¡áá±á¡ááœááºá¡á á¡ááŒááẠá
á,ááá ááᯠáááºáá°ááœá¬ážáááºááŒá
áºáááºá á¡ááœááºáááá±á¬ááºáá±á¬á¡á
á®á¡á
á¥áºááá¯ááºáá±?
á¡ááŒá±á¡áá±ááá¯ážáááºá
á±áááºá áá²ááŸááºááœáá¯áá·áºááŸáá·áº á¡áááºáá°áá±á¬ ááá±á¬ááºá
á®ááᯠááááºáááºáá±ážááá¯ááºááŒáá«á
áá¯á·á ááá¹áá¬áá¯á¶ážááá¯ááºáá¬á¡ááẠááŸááºáá¯á¶áááºá¡áá¬ááŸáááẠá¡áá®ážá
ááºáá¯á¶áž áá¯ááºáááºážá
ááºááᯠá¡áááºááŒáá·áº ááŒááºáá±ážááá¯ááºááááºá áááºážááẠá¡áá±ážááŒá®ážáá«áááºá
á€ááá±á¬ááºá
á®ááᯠáááºáá¯á¶ážá¡ááœáŸá¬áá¬áá¬áá»á¬ážáá±á«áºááœáẠá
áááºááá¯ááºááŒáá«á
áá¯á·á websocket api áááºáá±á¬ááºááŸá¯áá±ážááá·áº áá»áœááºá¯ááºááá¯á·ááá¯ááºáááºážá
ááºáá»á¬ážá¡á¬ážáá¯á¶ážááẠáááºážááᯠá
á¬áááºážááœááºážáááºááŒá
áºááŒá®ážá kernel ááŸá áá°áááºážá¡áááºááá¯ááºááœá²ááœá²áá²ááŸááºááŸááºááá¯á· ááá¯ááºáá«á Proxy ááẠáá°ážááŒá¬ážáá±á¬á
á¬áááºážááœááºážááŸá¯áá
áºáá¯ááœááºáᬠá¡áááá
á¬áááºážááœááºážááŒá®áž áááºážáá
á¬áááºážááœááºážáá°á¡á¬ážáá¯á¶ážáᶠá¡áááºáááºáá±á·áá»áºááᯠáááºáá°ááœá¬ážáááºá
ááááºá¡áá±ááŒáá·áº 5 á¡á
á¬áž kernel ááŸáá·áº access server áá»á¬ážááŒá¬ážááœáẠáááºáá±á·áá»áº á
á
á±á¬áẠáá±ážááá¯á·áááºááŒá
áºáááºá
áááºážááŒááŒááºážááŸáá·áº áááºáá»ááºáá®ááŒááºážá
Req-Resp
áááºááŸá á á¬ááá¯áá±ážááá¯á·ááŸá¯ á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ááœáẠáá±á¬ááºážááá¯ááŸá¯ ááŒáá·áºááŒá°ážáá±áž áá»á°áᬠá áᯠááŸááááº-
default
. áá±á¬ááºážááá¯áá»ááºááᯠááááºážáá»á¯ááºáá°á¡á¬ážáá¯á¶ážáᶠáá±ážááá¯á·áááºáround-robin
. áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááᯠááááºážáá»á¯ááºáá°áá»á¬ážááŒá¬ážááœáẠá á¬áááºážáá±á¬ááºáá°ááŒá®áž á ááºááá¯ááºážáá¯á¶á ᶠááŒáá·áºáá±áá«áááºáconsensus
. áááºáá±á¬ááºááŸá¯áá±ážáá±á¬ ááááºážáá»á¯ááºáááááá¬áá»á¬ážááᯠáá±á«ááºážáá±á¬ááºáá»á¬ážááŸáá·áº áá»áœááºáá»á¬ážá¡ááŒá Ạááá¯ááºážááŒá¬ážáá¬ážáááºá áá±á¬ááºážááá¯áá»ááºáá»á¬ážááᯠáá±á«ááºážáá±á¬ááºáá¶ááá¯á·áᬠáá±ážááá¯á·áááºáconsensus & round-robin
. á¡ááœá²á·ááœáẠáá±á«ááºážáá±á¬ááºáá áºáŠážááŸááá±á¬áºáááºáž áá±á¬ááºážááá¯áá»ááºáá»á¬ážááᯠá¡ááœá²á·áááºá¡á¬ážáá¯á¶ážááŒá¬ážááœáẠááŒáá·áºáá±áá¬ážáááºásticky
. hash áá¯ááºáá±á¬ááºáá»ááºááᯠááœááºáá»ááºááŒá®áž áá®ážááŒá¬ážááá¯ááºááœááºáá°áᶠáá¬áááºáá±ážá¡ááºáááºá á€áááºááŸááºáá«áá±á¬ áá±á¬ááºáááºááœá² áá±á¬ááºážááá¯áá»ááºáá»á¬ážááẠáá°áá®áá±á¬ ááá¯ááºááœááºáá°áᶠáá±á¬ááºááœá¬ážáá«áááºásticky-fun
. áá²ááŸááºááœáá¯áá·áºááᯠá áááºáá±á¬á¡áá«á hash ááœááºáá»ááºááŸá¯ áá¯ááºáá±á¬ááºáá»ááºááᯠááŒá¯áá¯ááºáá«ásticky
áááºáá»ááºáá®ááŒááºážáfun
. sticky-fun ááŸáá·áºáááºáá°áááºá áááºáá áºáŠážáááºážáᬠáááºážááᯠáááºááá·áºáááºážááœáŸááºááŒááºážá ááŒááºážáááºááŒááºáž ááá¯á·ááá¯áẠááŒáá¯áááºáá¯ááºáá±á¬ááºááá¯ááºáá«áááºá
áá²ááŸááºááœáá¯áá·áºááᯠá áááºáá±á¬á¡áá« ááŒáá·áºááŒá°ážááŸá¯áá»á°áá¬ááᯠáááºááŸááºáááºá
áááºáá»ááºáá®ááŒááºážá¡ááŒááºá á á¬ááá¯áá±ážááá¯á·ááŒááºážááẠááá·áºá¡á¬áž á¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážááᯠáááºáá¯ááºááá¯ááºáááºá á áá áºááŸá áááºá¡áá»áá¯ážá¡á á¬ážáá»á¬ážááᯠááŒáá·áºááŒáá«á áá¯á·á
- áá»áááºáááºááŸá¯ tag á¡ááŒá áºá¡áá»ááºáá»á¬áž áááºááá·áºáá»áááºáááºááŸá¯á០ááá·áºá¡á¬áž áá¬ážáááºááá¯ááºá á±áá«áááºá controller áá¯ááºáááºážá ááºááẠáá°áá®áá±á¬ exchange point ááá¯á· áá»áááºáááºáá±á¬á¡áá«ááœááºá ááá°áá®áá±á¬ routing keys áá»á¬ážááŒáá·áº á¡áá¯á¶ážááŒá¯áá«áááºá
- áááºáá±á¬ááºááŸá¯áá±ážáá¬ážáááºá áááºáá±á¬ááºááŸá¯áá áºáá¯á¡ááœáẠá¡á¯ááºá á¯áá»á¬ážá¡ááŒá Ạááá¯ááºááœááºáá°áá»á¬ážááᯠáá±á«ááºážá ááºá á±ááŒá®áž áááºážááŒá±á¬ááºážáááºááŸááºááŒááºážááŸáá·áº áááºáá»ááºáá®ááŒááºážá áœááºážáááºáá»á¬ážááᯠáá»á²á·ááœááºááœáá·áºááŒá¯áááºá req-resp áá¯á¶á á¶á¡ááœááºá routing ááẠlinear ááŒá áºáááºá áá»áœááºá¯ááºááá¯á·ááẠááœá±áá²ááœáá¯áá·áºááá¯á· áá±á¬ááºážááá¯áá»ááºáá áºáᯠáá±ážááá¯á·ááŒá®ážáá±á¬áẠáááºážááᯠáááºáá±á¬ááºááŸá¯ááá¯á· áá±ážááá¯á·áá«áááºá ááá¯á·áá±á¬áº áá»áœááºá¯ááºááá¯á·ááẠááá¯ááºááœááºáá°áá»á¬ážááᯠáá»áá¯ážááŒá±á¬ááºážáá®áá»á±á¬áºáá±á¬ á¡á¯ááºá á¯áá»á¬ážá¡ááŒá Ạááœá²áá¯ááºááẠááá¯á¡ááºáá«áá ááœá²ááŒááºážááŒááºážááᯠtags áá»á¬ážááŒáá·áº áá¯ááºáá±á¬ááºáá«áááºá áááºááᯠáááºááŸááºáá±á¬á¡áá«á áá±á¬ááºážááá¯áá»ááºááᯠááááºážáá»á¯ááºáá°á¡á¯ááºá á¯áá áºáá¯áᶠáá±ážááá¯á·áááºááŒá áºáááºá
- áááºáá±á¬ááºážááá¯áá«á á¡ááŒá±áá»á¬ážá¡ááŒá¬áž ááœá²ááŒá¬ážááá¯ááºá á±áá«áááºá áá»áœááºá¯ááºááá¯á·áá áá áºááẠáá áºááŒáá¯ááºáááºáááºážááŒá áºáá±á¬ááŒá±á¬áá·áºá áááºáá±á¬ááºááŸá¯áá¯á¶á·ááŒááºááŸá¯áá»á¬ážááᯠáá¯ááºáá±á¬ááºáááºá¡ááœáẠáá±á¬ááºážááá¯áá»ááºáá áºáá¯áá±ážááá¯á·ááá·áºá¡áá« RequestTag áá áºáá¯ááᯠáááºááŸááºááá¯ááºáááºááá¯á¡ááºáá«áááºá áááºážá០áá»áœááºá¯ááºááá¯á·áᶠáá±á¬ááºážááá¯áá¬ááá·áº á¡ááŒá±ááᯠáá»áœááºá¯ááºááá¯á· áá¬ážáááºááá¯ááºáááºááŒá áºáááºá
á¡áááºááá¯ááºááœá²
á¡áááºááá¯ááºááœá²áá»á¬ážá¡ááœáẠá¡áá¬á¡á¬ážáá¯á¶ážááẠá¡áááºážáááºááá¯ážááŸááºážáá«áááºá áááºááá·áºáááºáá±á·áá»áºáá»á¬ážááᯠááœáŸáá·áºáááºáá¬ážáááºááᯠáá»áœááºá¯ááºááá¯á·ááœáẠáááŸááºááŸá¯áá áºáá¯ááŸááááºá ááœá±áá²ááœáá¯áá·áºááẠáááºážááá¯á·ááá¯á¡ááºáá±á¬ áááºážááŒáá±á¬á·áá»á¬ážááᯠá á¬áááºážááœááºážáá¬ážáá±á¬ á á¬áááºážááœááºážáá°áá»á¬ážááŒá¬ážááœáẠáááºáá±á·áá»áºáá»á¬áž ááŒáá·áºáá±áá±ážááẠ(á€á¡áá¬ááẠá¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážááŸáá·áº áááºáá°áááºáᯠáá»áœááºá¯ááºááá¯á·ááŒá±á¬ááá¯ááºáááº)á
á¡ááá¯ááºážá¡áá¬ááŸáá·áº á¡ááŸá¬ážáá¶ááá¯ááºááŸá¯
á áá áºáá áºáá¯áá¯á¶ážá áá»á²á·ááœááºááá¯ááºááŸá¯ááẠá áá áºá á¡ááœáŸá¬áá»á¬ážááŸáá·áº á¡á áááºá¡ááá¯ááºážáá»á¬ážá á¡ááá¯ááºážá¡áá¬á¡áá±á«áºááœáẠáá°áááºáááº-
- á€áááºáá±á¬ááºááŸá¯á¡ááœáẠááá¯ááºááœááºáá±ážáá°áá»á¬ážááŸáá·áºá¡áá° á¡á á¯á¡áá±ážááá¯á· á¡ááᯠnode áá»á¬ážáá±á«ááºážááá·áºááŒááºážááŒáá·áº áááºáá±á¬ááºááŸá¯áá»á¬ážááᯠá¡ááá¯ááºážá¡áá¬áá áºáá¯á¡áá áá»á²á·ááœááºáá«áááºá á¡á ááºážáááºáááºááŸá¯á¡ááœááºážá á¡áá±á¬ááºážáá¯á¶ážáá»áááºááœááºáá»áŸá¬ááŸáááŸá¯áá°áá«áááᯠáááºááœá±ážáá»ááºááá¯ááºáá«áááºá
- áá®ážááŒá¬áž á¡á á¯á¡áá±ážáá áºáá¯á¡ááœááºážááŸá á á¬ááá¯áá±ážááá¯á·ááŒááºážáááºáá±á¬ááºááŸá¯ááᯠáá®ážááŒá¬ážáá¯ááºáá±á¬ááºáá±áá±á¬ á¡á á¯á¡áá±ážáá»á¬ážáᶠááœáŸá±á·ááŒááºážááŒáá·áºáá±á¬áºáááºážáá±á¬ááºážá ááá¯á·ááá¯áẠá¡á á¯á¡áá±ážá á¡áá°ážáááºáá±á¬ááºáá¬ážáá±á¬ á§áááá¬áá»á¬ážááá¯á· ááá±á¬ááºá á®áá¯ááºáááºážá ááºáá»á¬ážááᯠáá±á«ááºážááá·áºááŒááºážááŒáá·áºáá±á¬áºáááºážáá±á¬ááºáž áá±áá¯áá»á¡á¬ážááŒáá·áº á¡ááá¯ááºážá¡áá¬ááᯠááá¯ááºážáá¬áááºá
- á¡ááºá¹áá«áááºáá áºáá¯á¡áá±ááŒáá·áº á áá áºáá áºáá¯áá¯á¶ážá áá»á²á·ááœááºááá¯ááºááŸá¯ááẠáááá¯áá¬áááºáá¬á ááŒá±á¬ááºážááœááºááŒááºááœááºááŸáá·áº á¡á á¯áá áºáá¯áá»ááºážá á®ááᯠáá¯á¶áá¯áá¹áááá á¹á ááºážáá áºáá¯á¡ááŒá Ạáá±á«ááºážá ááºááá¯ááºááŸá¯á¡áá±á«áº áá°áááºáá«áááºá
ááá±á¬áá»ááºáá áºáá¯áá¡á±á¬ááºááŒááºááŸá¯ááẠáá»á²á·ááœááºááŸá¯áááá¯ážááŸááºážááŸá¯ááŸáá·áº á¡ááŸáááºá¡áá¯ááºáá±á«áºááœáẠáá°áááºáááºá áááºážááááºááŸááá¬ážááŸááºážááœáẠá á¬ááá¯áá±ážááá¯á·ááŒááºážááẠá¡ááá®áá±ážááŸááºážááŸáá·áºá¡áá° ááŒá®ážááœá¬ážáá¬áááºá á áẠ50-60 á¡á á¯á¡áá±ážáááŸááá»áŸááºáá±á¬ááºá០á¡ááœá²á·áá»á¯ááºááᯠá¡áááºážááŒá±ááá¯ááºáá«áááºá áá¶ááá±á¬ááºážá áœá¬áá²á á¡ááœá²á·áá»á¯ááºá áá±á«ááºážá ááºááẠá€áá±á¬ááºážáá«ážá áááºáááºááẠáá»á±á¬áºááœááºáá±áá«áááºá
áá°áá¬áž
áááºáá»áááºááœááºáá»áŸá¬ááᯠááá¯ááºážááŒá¬ážá áááºááŒá¬áá±á¬á¡áá«ááœááºá áá»áœááºá¯ááºááá¯á·ááẠáááºáá±á¬ááºááŸá¯ááááºážáá»á¯ááºáááááá¬áá»á¬áž áááºáá±ááŒááºážá¡ááŒá±á¬ááºáž ááœá±ážááœá±ážáá¬ážááŒá®ážááŒá áºáááºá ááá¯á·áá±á¬áº á á¬ááá¯áá±ážááá¯á·ááŒááºážááá¯áááºáž áá®ážááá·áºáá¬ážááá«áááºá node ááá¯á·ááá¯áẠá ááºáá»ááºáá»ááŸá¯ááŒá áºá ááºááœááºá á á¬ááá¯áá±ážááá¯á·ááŸá¯ááẠá¡ááá¯á¡áá»á±á¬ááºááŒááºáááºáá±á¬ááºážááœááºáá¬ááŒá®áž ááŒá áºááá¯ááºááá»áŸá¡ááá¯áá¯á¶ážá¡áá»áááºá¡ááœááºážááœááºááŒá áºáááºá
áá»áœááºá¯ááºáááá±á¬áá»ááºáá»á¬ážááœáẠááŒá¯ááºáá»áá«á load áááºáá¬ááá·áºáá±á¬ááºááẠnode ááá¯áá¯á¶ážáá«áááºá Erlang ááœáẠOTP á¡ááá®áá±ážááŸááºážáá»á¬ážá¡ááœáẠá
á¶ááŒáá·áºáá±áá¯áẠá¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯áá
áºáá¯ááŸááááºá Distributed mode ááẠááááºááœááºááŸááá²á·áá°ážáá±á¬ á¡ááŒá¬áž node áá
áºáá¯áá±á«áºááœáẠáá¡á±á¬ááºááŒááºáá±á¬ á¡ááá®áá±ážááŸááºážááᯠááœáá·áºááŒááºážááŒáá·áº áá»áá¯á·ááœááºážááŸá¯ááŸááá«á ááŒááºáááºááá°ááŒááºážááᯠáá¯ááºáá±á¬ááºáá«áááºá áá¯ááºáááºážá
ááºááẠááœáá·áºáááºážááŒááºáá¬ááŸá¯ááŸáááŒá®áž áá»ááºááœááºááŒá®ážáá±á¬ááºá á¡ááá®áá±ážááŸááºážááẠáá»ááºááœááºááá·áºáá±áá¬ááá¯á· á¡ááá¯á¡áá»á±á¬ááºááœá±á·áá»á¬ážáááºá á€áá¯ááºáá±á¬ááºáá»ááºá¡ááŒá±á¬ááºáž ááá¯ááá¯áááºááŸá¯ááá¯ááºáá«áááºá
ááœááºááá¯ááºáá±áž
rabbitmq á á
áœááºážáá±á¬ááºáááºááŸáá·áº áá»áœááºá¯ááºááá¯á·á á
áááºááŒáá¯ááºá
á¬ááá¯áá±ážááá¯á·ááŒááºážááá¯á·ááᯠá¡áááºážáá¯á¶áž á¡ááŒááºážáá»ááºáž ááŸáá¯ááºážááŸááºááŒáá·áºááŒáá«á
áá¯á·á
ááœá±á·áá²á·áááº
á
á¬ááá¯áẠá.áá.á.á.á.á.á ááœááºá áá°áááºážá
á¬ááœááºá
á¬áááºážááẠRPC CAST áááááºááá¯ááŒááááº-
áá»áœááºá¯ááºááá¯á·ááẠOS kernel ááá¯á·ááá¯áẠerlang VM á¡ááœáẠáá±á¬ááºáááºáááºáááºáá»á¬ážááᯠááŒá¯áá¯ááºáááºááá¯ááºáá«á á ááºážáááºááŸá¯á¡ááŒá±á¡áá±áá»á¬áž
- erl ááœá±ážáá»ááºááŸá¯- +A1 +sbtuá
- erlang node áá áºáá¯á¡ááœááºáž á ááºážáááºááŸá¯ááᯠááá¯ááá¯ááºážáá¬ážááŸááºážááŸá i7 á¡áá±á¬ááºážááŸáá·áº áááºááºáá±á¬á·áá±á«áºááœáẠáá¯ááºáá±á¬ááºáááºá
- Cluster á ááºážáááºááŸá¯áá»á¬ážááᯠ10G ááœááºáááºááŸááá±á¬ áá¬áá¬áá»á¬ážááœáẠááŒá¯áá¯ááºáááºá
- áá¯ááºááẠdocker containers ááœááºá¡áá¯ááºáá¯ááºáááºá NAT áá¯ááºááœáẠááœááºáááºá
á ááºážáááºáá¯ááº-
req_resp_bench(_) ->
W = perftest:comprehensive(10000,
fun() ->
messaging:request(?EXCHANGE, default, ping, self()),
receive
#'$msg'{message = pong} -> ok
after 5000 ->
throw(timeout)
end
end
),
true = lists:any(fun(E) -> E >= 30000 end, W),
ok.
áá¬ááºáááºáž 1- á¡ááá¯áá«á ááºážáááºááŸá¯ááᯠi7 ááá¯ááá¯ááºážáá¬ážááŸááºážá¡áá±á¬ááºážááŸáá·áºáááºááºáá±á¬á·áá±á«áºááœááºáá¯ááºáá±á¬ááºáááºá á ááºážáááºááŸá¯á á á¬ááá¯áá±ážááá¯á·ááŸá¯ááŸáá·áº áááºáá±á¬ááºááŸá¯ááᯠDocker ááœááºááááºáá¬áá áºáá¯ááŸá node áá áºáá¯ááœáẠáá¯ááºáá±á¬ááºáááº-
Sequential 10000 cycles in ~0 seconds (26987 cycles/s)
Sequential 20000 cycles in ~1 seconds (26915 cycles/s)
Sequential 100000 cycles in ~4 seconds (26957 cycles/s)
Parallel 2 100000 cycles in ~2 seconds (44240 cycles/s)
Parallel 4 100000 cycles in ~2 seconds (53459 cycles/s)
Parallel 10 100000 cycles in ~2 seconds (52283 cycles/s)
Parallel 100 100000 cycles in ~3 seconds (49317 cycles/s)
áá¬ááºáááºáž á- docker (NAT) á¡á±á¬ááºááŸá ááá°áá®áá±á¬ á ááºáá»á¬ážááœáẠáá¯ááºáá±á¬ááºáá±áá±á¬ node 3 áá¯á
Sequential 10000 cycles in ~1 seconds (8684 cycles/s)
Sequential 20000 cycles in ~2 seconds (8424 cycles/s)
Sequential 100000 cycles in ~12 seconds (8655 cycles/s)
Parallel 2 100000 cycles in ~7 seconds (15160 cycles/s)
Parallel 4 100000 cycles in ~5 seconds (19133 cycles/s)
Parallel 10 100000 cycles in ~4 seconds (24399 cycles/s)
Parallel 100 100000 cycles in ~3 seconds (34517 cycles/s)
á¡ááŒá±á¡áá±ááá¯ááºážááœáẠCPU á¡áá¯á¶ážáá»ááŸá¯ááẠ250% áááºáááá¯áá²á·áá«á
ááááºáá»á¬ážááá¯
á€á ááºáááºážááẠá áááºá¡ááŸá±á¬ááºá¡ááŸááºááŒá áºáá¯á¶ááá±á«áºáá«á áá»áœááºá¯ááºáá¡ááœá±á·á¡ááŒá¯á¶ááẠááŒáá·áºáá±áá¬ážáá±á¬á áá áºáá»á¬ážá០áá¯áá±áá®áá»á¬ážááŸáá·áº áááºážááá¯á·áá á®ážááœá¬ážáá±ážá áá áºáá»á¬ážá¡ááœáẠááŒáá·áºáá±áá¬ážáá±á¬áááá¯áá¬áá»á¬ážááá¯áááºáá±á¬ááºááŒá®áž Erlang/Elixir ááᯠá áááºáááºáá á¬ážááŒáá·áºááŸá¯áá±ááá·áº áá¯áá±áá®ááŸá áºáŠážá áá¯á¶ážá¡ááœáẠá¡ááŸááºááááºá¡áá»áá¯ážááŸááááá·áºáááºáᯠáá»áŸá±á¬áºááá·áºáá«áááºá áá«âáá±ááá·áºâ áááºâááá¯ážááŸááá¬ážááá¯á· áá¶ááááŸáâáá±á¬á·...
áá¬ááºáá¯á¶
á
á¬áááºážááœááºážá¡áá¯á¶ážááŒá¯áá°áá»á¬ážáᬠá
á
áºáááºážááœáẠáá«áááºááá¯ááºáá«áááºá
VTrade á ááºážáááºááŸá¯á á®ážáá®ážá áá áºá áááºáá áºááá¯ááºážá¡áá±ááŒáá·áº áááºááá·áºá¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážááᯠá¡áá±ážá áááºáá±á¬áºááŒááá·áºááááºážá
-
áá®á¡áá¯áá®- á á»á±ážááœááºáá»á¬ážá á¡ááŸá¬á á¬áá»á¬ážááŸáá·áº áááºážááá¯á·áá¡áá»áááº- DAYá GTDá GTCá IOCá FOKá MOOá MOCá LOOá LOC
-
á¡áááá·áºá á¬á¡á¯ááºá áá®á¡áá¯áá® ááŸáá·áº á¡áá±á·á¡áá»áá·áºáá»á¬ážááᯠá¡á¯ááºá á¯ááœá²á·á á á¬á¡á¯ááºáá áºá¡á¯ááºááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážá
-
á¡áá±á¬ááºážá¡áááºááᯠááŒááºáá±á¬ááºááŒááºáž- áááºááŸááºáá»á¬ážá áá¬ážáá»á¬ážá áá¯á¶ážááŒááºáá»ááºáá»á¬ážá áá±á¬áºáááºááá¯ááááºážááá²á
-
Backoffice á á®áá¶ááááºážááŸáá·áºááœá¶á·ááŒáá¯ážáá±ážá áááºáááºážá á±á¬áá·áºááŒáá·áºááŒááºážááŸáá·áº á¡ááŒá áºá¡áá»ááºá á¯á¶á ááºážá á áºáá±ážááŒááºážá
-
API áá¬á¡ááºáá¬áá±á·á áºááœá± ááá¯á¡ááºááá² ááá¯áá¬ááᯠá¡ááŒá±ááŸá¬ááŒáá·áºáá¡á±á¬ááº
-
á¡áá»ááºá¡áááºááá¯ááŸá±á¬ááºááŸá¯- áá¯ááºááœááºááŸá¯á áá áºáá»á¬ážááœáẠPostgreSQLá Timescaleá Tarantool
-
áá¯ááºááœááºááŸá¯á áá áºáá»á¬ážááœáẠáá¯á¶á·ááŒááºááŸá¯
-
áááŒá¬ážá comment ááŸá¬áá±ážáá«á·áááº
á¡áá¯á¶ážááŒá¯áá° ááá áŠáž áá²áá±ážáá²á·áááºá á¡áá¯á¶ážááŒá¯áá° 6 áŠáž ááŒá¬ážáá±áá²á·áá«áááºá
source: www.habr.com