á€áá±á¬ááºážáá«ážááœáẠáá»áœááºá¯ááºááá¯á·ááẠáááºáá²á·ááá¯á· ááœá¶á·ááŒáá¯ážááá¯ážáááºáá¬áááºááᯠááœá±ážááœá±ážáá«áááºá
á¡ááŒááºá¡ááŸááºáá¯á¶á·ááŒááºááŸá¯á áá Ạ(ááá¯áá±á¬ááºááá¯ááºážááœáẠSV á¡ááŒá áºáááºááœáŸááºážáááº) ááẠá¡á¬ááá¶áá±ážááá¯á·ááŸá¯ááŸáá·áºá¡áá° ááŒáá·áºáá±áá¬ážáá±á¬á á¡ááŸá¬ážá¡ááœááºážáá¶ááá¯ááºáá±á¬ á á¬ááá¯áá±ážááá¯á·ááŸá¯á áá áºáá áºáá¯ááŒá áºáááºá SV ááẠááŒáá·áºáá¬ážáá±á¬ á¡ááœááºá¡á á¬ážááŒá®ážáá¬ážáá±á¬ áááºáá±á¬ááºááŸá¯áá áºáá¯á¡ááŒá Ạáá®ááá¯ááºážáá¯ááºáá¬ážááŒá®áž á¡áœááºááá¯ááºážáááºáá±á¬ááºááŸá¯áá áºáᯠ(1C á០áá¶á·ááá¯ážáá±ážáááº) ááŸáá·áº ááá·áºááá¯ááºááá¯ááºáá¬áᬠá¡áá±á¬ááºá¡áŠáá»á¬ážááœáẠá¡áá¯á¶ážáá»ááá¯ááºááá·áº á¡á á¯ááá¯ááºá¡ááŒá¯á¶ááá¯ááºáá¯ááºáá¯ááºáá¬ážáá±á¬ áá¯ááºáá¯ááºáá áºáá¯á¡ááŒá ẠááŸá áºáá»áá¯ážáá¯á¶ážáááŸáááá¯ááºáááºá
SV ááẠááŒáá·áºáá±ááá¯ááŸá±á¬ááºááŸá¯ááᯠá¡áá¯á¶ážááŒá¯áááºá
ááŒá¿áá¬ááá¯áá¯á¶áá±á¬áºááŒááºáž
Interaction System ááᯠáá¬ááŒá±á¬áá·áºáááºáá®ážáá²á·áá¬áá²ááá¯áᬠááŸááºážááŸááºážáááºážáááºážáááá¡á±á¬áẠ1C ááŸá¬ áá¯ááºáááºážáá¯á¶ážá¡ááºááºáá®áá±ážááŸááºážáá»á¬áž ááœá¶á·ááŒáá¯ážááá¯ážáááºáá¬áá¯á¶á¡ááŒá±á¬ááºáž á¡áááºážáááºááŒá±á¬ááŒáá«áááºá
á á áá»ááºážááŸá¬á áá«ááá¯á·áá¬áá¯ááºáááºááá¯áᬠááááá±ážáá²á·áá°ááœá±á¡ááœáẠ1C:Enterprise áááºážááá¬ááááºáá±á¬ááºážááᯠáááºáá®ážáá±áá«áááºá ááááºáá±á¬ááºážááœáẠáá¯ááºáááºážáá¯á¶áž á¡ááºááºáá®áá±ážááŸááºáž ááœá¶á·ááŒáá¯ážááá¯ážáááºáá±áž áááááá¬áá áºáá¯á¡ááŒáẠáá¯ááºáááºážá¡ááºááºáá®áá±ážááŸááºážáá»á¬ážááᯠááŒááºáá»á±á¬áºááŒá®áž ááááºáá±á¬ááºážáááºáááºážáá»ááºááœáẠáá¯ááºáá±á¬ááºááá¯ááºá á±ááá·áº runtime áááºáž áá«áááºáááºá
Client-Server ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááá¯áºááºáá¶
1C:Enterprise ááœáẠáááºáá®ážáá¬ážáá±á¬ áá¯ááºáááºážá¡ááºááºáá»á¬ážááẠá¡ááá·áºáá¯á¶ážááá·áºááŒáá·áº áááºáááºáááºá
á¡ááá®áá±ážááŸááºážáá¯ááºááœááºá áá¯ááºáá¯á¶ážáá¯ááºáááºážáá»á¬ážááŸáá·áº áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá áá±á«ááºážá
á®ážáá»á¬ážááẠáá¯ááºááᯠáááºááá·áºáá±áá¬ááœáẠáá¯ááºáá±á¬ááºáááºááᯠá¡ááá¡áááºáž áá±á¬áºááŒáááẠ- &AtClient / &AtServer ááœáŸááºááŒá¬ážáá»ááºáá»á¬áž (&AtClient / &AtServer áá¬áá¬á
áá¬ážá á¡ááºá¹áááááºáá¬ážááŸááºážááœááº) ááᯠá¡áá¯á¶ážááŒá¯áá¬ážáááºá 1C developer áá»á¬ážááẠááœáŸááºááŒá¬ážáá»ááºáá»á¬áž á¡ááŸááºááááºááŒá
áºááŒá±á¬ááºáž ááŒá±á¬ááŒááºážááŒáá·áº ááᯠáá»áœááºá¯ááºááᯠááŒááºáá«áááºá
áááºááẠclient code á០server code ááá¯áá±á«áºááá¯ááá¯ááºáá±á¬áºáááºáž server code á០client code ááá¯áá±á«áºááá¯ááááá«á á€áááºááŸá¬ á¡ááŒá±á¬ááºážá¡áá»áá¯ážáá»áá¯ážááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·ááŒá¯áá¯ááºáá²á·áá±á¬ á¡ááŒá±áá¶ááá·áºáááºáá»ááºááŒá áºáááºá á¡áá°ážáááŒáá·áºá á¡áááºááŒá±á¬áá·áºááá¯áá±á¬áº áá¬áá¬áá¯ááºááẠáááºážááᯠáááºááá·áºáá±áá¬á០áá±á«áºáááºááŒá áºá á± - client á០ááá¯á·ááá¯áẠáá¬áá¬á០áá°áá®áá±á¬áááºážáááºážááŒáá·áº áá±ážáá¬ážááá±á¬ááŒá±á¬áá·áº ááŒá áºáááºá á¡ááŒá¬ážáá¬áá¬áá¯ááºá០áá¬áá¬áá¯ááºááᯠáá±á«áºááá·áºááá á¹á ááœááºá ááá¯ááá¯á·áá±á¬ client áááŸááá«á á¡áááºááŒá±á¬áá·áºááá¯áá±á¬áº áá¬áá¬áá¯ááºááᯠáá¯ááºáá±á¬ááºáá±á ááºá¡ááœááºážá áááºážááᯠáá±á«áºáá±á¬ client ááẠá¡ááá®áá±ážááŸááºážááᯠááááºááá¯ááºá ááœááºááœá¬ážááá¯ááºááŒá®ážá áá¬áá¬ááœáẠáá±á«áºááá¯ááẠáááºáá°áá»áŸ ááŸááá±á¬á·áááºááá¯ááºáá±á
ááá¯ááºááŸáááºááŒááºážááᯠááá¯ááºááœááºááá·áº áá¯ááº- client á០áá¬áá¬áá¯ááºáá¯á¶ážáá¯ááºáááºážááᯠáá±á«áºááá¯ááŒááºážááẠá¡áá¯ááºááŒá
áºáááá·áºáááºá áá¬áá¬á០áá±á¬ááºáááºáá¯ááºáá¯á¶ážáá¯ááºáááºážááᯠáá±á«áºááá¯áááºááá¯ááºáá«á
ááá¯ááá¯áááºááŸá¬ áá»áœááºá¯ááºááá¯á·ááẠáá¬áá¬á០áá±á¬ááºáááºá¡ááá®áá±ážááŸááºážááá¯á· áááºáá±á·áá»áºá¡áá»áá¯á· áá±ážááá¯á·ááá¯áá«á á¥ááá¬á¡á¬ážááŒáá·áºá "ááŒá¬ááŸááºáá±á¬" á¡á á®áááºáá¶á á¬á áá»áá¯ážáááºááŒá®ážááœá¬ážáᬠá¡á á®áááºáá¶á á¬ááᯠááŒáá·áºááŸá¯ááá¯ááºáááºá áá»áœááºá¯ááºááá¯á·ááœáẠááá¯ááá¯á·áá±á¬áááºážáááºážáááŸááá«á áááºááẠááŸáá·áºááœááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááááºá á¥ááá¬á áá±á¬ááºáááºáá¯ááºá០áá¬áá¬á¡á¬áž á¡áá«á¡á¬ážáá»á±á¬áºá áœá¬ á á áºáááºážáá±á¬ááºáá°ááááºá ááá¯á·áá±á¬áº á€áá»ááºážáááºááŸá¯ááẠá áá áºá¡á¬áž áááá¯á¡ááºáá±á¬áá±á«áºááá¯ááŸá¯áá»á¬ážááŒáá·áº áááºáá±á¬ááºá á±ááŒá®áž áá±áá¯áá»á¡á¬ážááŒáá·áº á¡ááœááºááŒá±ááŒá áºáá¯á¶ááá±á«áºáá±á
á¥ááᬠáááºáá®áá¯ááºáž áááºáá¬áá²á·á¡áá« ááá¯á¡ááºáá»ááºáá
áºáá¯ááŸááááºá
ááá¯ááºááá¯ááºáá¯ááºáá¯ááºáááºá
á á¬ááá¯áá±ážááá¯á·ááŒááºáž ááá¹ááá¬ážááᯠáááºáá®ážáá«á ááŒááºááŒááºáááºáááºá áá¯á¶ááŒááºá áááºáá»ááá±á¬á á¡á¬ááá¶áá»ááºááŸááá±á¬áá±ážááá¯á·ááŸá¯ááŸáá·áºá¡áá°á áááºáá±á·áá»áºáá»á¬ážááᯠááá¯ááºáá»á±á¬áá®ááœá±ááŸá¬ááœá±ááá¯ááºááŸá¯ááŸáá·áºá¡áá°á ááá¹ááá¬ážá¡áá±á«áº á¡ááŒá±áá¶á 1C á¡ááºááºáá®áá±ážááŸááºážá¡ááœááºáž áá¯ááºáá±á¬ááºáá±ááá·áº messenger (áááºáá±á·áá»áºáá»á¬ážá áá®áá®ááá¯áá±á«áºááá¯ááŸá¯áá»á¬áž) ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáá«á
á áá áºá¡á¬áž á¡áá»á¬ážááá¯áẠá¡ááá¯ááºážá¡áá¬ááŒáá·áº áá¯á¶áá±á¬áºáá«á ááá¯ážáá¬áá±á¬áááºá¡á¬áž node á¡áá±á¡ááœááºááá¯ážááŒááºážááŒáá·áº áá¬ááááá«áááºá
á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯
áá»áœááºá¯ááºááá¯á·ááẠSV ááá¬áá¬á¡á áááºá¡ááá¯ááºážááᯠ1C:Enterprise ááááºáá±á¬ááºážááá¯á· ááá¯ááºááá¯ááºááá±á«ááºážá ááºážááẠáá¯á¶ážááŒááºáá²á·áááºá ááá¯á·áá±á¬áº áááºážááᯠáá®ážááŒá¬ážáá¯ááºáá¯ááºáá áºáá¯á¡ááŒá Ạá¡áá±á¬ááºá¡áááºáá±á¬áºáááºá¡ááœáẠAPI ááᯠ1C á¡ááá®áá±ážááŸááºážááŒá±ááŸááºážáá»ááºááá¯ááºááŸáá±á«áºááá¯ááá¯ááºáá«áááºá á¡ááŒá±á¬ááºážá¡áá»áá¯ážáá»áá¯ážááŒá±á¬áá·áº áá®ááá¯áá¯ááºáá±á¬ááºáá²á·áá¬áá«á á¡áááááá±á¬á· ááá°áá®áá²á· 1C á¡ááá®áá±ážááŸááºážááœá±ááŒá¬áž (á¥ááá¬á áá¯ááºááœááºááŸá¯á á®áá¶ááá·áºááœá²ááŸá¯áá²á· á á¬áááºážááá¯ááºááŒá¬áž) ááŒá¬ážááŸá¬ áááºáá±á·áá»áºááœá±ááᯠáááŸááºááá¯ááºá á±áá»ááºáá²á·áá¬áá«áá²á ááá°áá®áá±á¬ 1C á¡ááá®áá±ážááŸááºážáá»á¬ážááẠ1C: Enterprise ááááºáá±á¬ááºážá ááá°áá®áá±á¬áá¬áá¬áá»á¬ážáá±á«áºááœáẠáááºááŸáááŒá±á¬ááºážá á áááºááá¯á·ááœáẠááá°áá®áá±á¬áá¬ážááŸááºážáá»á¬ážááœáẠáá¯ááºáá±á¬ááºááá¯ááºáááºá ááá¯ááá¯á·áá±á¬á¡ááŒá±á¡áá±áá»á¬ážááœáẠ1C áááºáááºááŸá¯áá»á¬ážá "áá±ážááœááº" ááŸááá±á¬ áá®ážááŒá¬ážáá¯ááºáá¯ááºáá áºáá¯á¡ááŒá ẠSV ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážááẠá¡áá±á¬ááºážáá¯á¶ážááŒá±ááŸááºážáá»ááºááŒá áºáááºá
ááá¯á·ááŒá±á¬áá·áº SV ááᯠáá®ážááŒá¬ážáá¯ááºáá¯ááºáá
áºáá¯á¡ááŒá
ẠááŒá¯áá¯ááºááẠáá¯á¶ážááŒááºáá²á·áááºá áá¯áá¹ááá®áááºáá»á¬ážááẠáá»áœááºá¯ááºááá¯á·á cloud (wss://1cdialog.com) ááœáẠáá»áœááºá¯ááºááá¯á·áááºáááºáá¬ážááá·áº CB áá¬áá¬ááᯠá¡áá¯á¶ážááŒá¯ááẠá¡ááŒá¶ááŒá¯ááá¯áá«áááºá áá±á¬ááºáááºááŒá®ážáá»á¬ážááẠáááºážááá¯á·á á
ááºáá¯á¶áá»á¬ážááœáẠáááºážááá¯á·á ááá¯ááºááá¯áẠCB áá¬áá¬ááᯠáááºáááºááẠá¡ááŒá¶ááŒá¯ááá¯ááºááẠá áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·á cloud SaaS áá¯ááºáá¯ááºááœáẠá¡áá¬ážáá°áá»ááºážáááºááŸá¯ááᯠá¡áá¯á¶ážááŒá¯áá²á·áááºá
ááŒáŸá±á¬áá»ááŸá¬
áááºááŸáá·áºá¡ááŸá¬ážáá¶ááá¯ááºáááºá¡á¬áž ááŒáá·áºáá±áááºá áá»áœááºá¯ááºááá¯á·ááẠJava á¡ááá®áá±ážááŸááºážáá áºáá¯á០ááá¯ááºáá² á¡áá»á¬ážá¡ááŒá¬ážááᯠáááºážááá¯á·ááŸá±á·ááœáẠload balancer áá áºáá¯ááŒáá·áº á¡áá¯á¶ážááŒá¯áá«áááºá áááºáá±á·áá»áºáá áºá á±á¬ááºááᯠnode á០node ááá¯á· ááœáŸá²ááŒá±á¬ááºážááẠááá¯á¡ááºáá«áá Hazelcast ááœáẠáá¯ááºáá±/á á¬áááºážááœááºážááŸá¯ááᯠá¡áá¯á¶ážááŒá¯áá«á
client ááŸáá·áº server á¡ááŒá¬áž áááºááœááºááŸá¯ááẠwebsocket ááŸáááá·áºááŒá áºáááºá áááºážááẠá¡áá»áááºááŸáá·áºáá áºááŒá±ážáá® á áá áºáá»á¬ážá¡ááœáẠáá±á¬ááºážááœááºááá·áºáá»á±á¬áºáááºá
ááŒáá·áºáá±áá¬ážáá±á¬ áááºááŸáº
Redisá Hazelcast ááŸáá·áº Ehcache ááá¯á·ááŒá¬ážááœáẠáá»áœááºá¯ááºááá¯á· ááœá±ážáá»ááºáá²á·áááºá 2015 áá«á Redis ááẠá¡á
á¯á¡áá±ážá¡áá
áºáá
áºáᯠ(á¡áá
áºá¡ááœááºááŒá±á¬ááºá
áá¬áá±á¬ááºážáááº) ááœáẠááá·áºáááºáá»ááºáá»á¬ážáá»á¬ážá
áœá¬ááŸááá±á¬ Sentinel ááŸááááºá Ehcache ááẠá¡á
á¯á¡áá±ážáá
áºáá¯ááá¯á· áááºááá¯á·á
á¯áá±ážááááºááᯠááááá« (á€áá¯ááºáá±á¬ááºáá»ááºááẠáá±á¬ááºááá¯ááºážááœááºáá±á«áºáá¬áááº)á Hazelcast 3.4 ááŒáá·áº á
ááºážáááºááẠáá¯á¶ážááŒááºáá²á·áááºá
Hazelcast ááᯠáá±áá¹áá¬áá²á á¡á
á¯á¡áá±ážáá
áºáá¯á¡ááŒá
Ạá
á¯á
ááºážáá¬ážáááºá áá
áºáá¯áááºážáá±á¬ node áá¯ááºááœááºá áááºážááẠá¡ááœááºá¡áá¯á¶ážáááºááŒá®áž áááºááŸáºáá
áºáá¯á¡ááŒá
áºáᬠá¡áá¯á¶ážááŒá¯ááá¯ááºááẠ- áááºážááẠáá±áá¬ááᯠdisk ááá¯á· áááºááá¯á·á
áœáá·áºáá
áºááááºááᯠááááá«á á¡áááºá áááºááẠáá
áºáá¯áááºážáá±á¬ node áá¯á¶ážááŸá¯á¶ážáá«á áááºááẠáá±áá¬áá¯á¶ážááŸá¯á¶ážáááºááŒá
áºáááºá áá»áœááºá¯ááºááá¯á·ááẠá¡áá±ážááŒá®ážáá±á¬áá±áá¬ááᯠáááá¹áá°áá°ážáá¬ážááá·áºááŒá¬ážááœáẠHazelcasts á¡áá»á¬ážá¡ááŒá¬ážááᯠá¡áá¯á¶ážááŒá¯áá¬ážáááºá áá»áœááºá¯ááºááá¯á·ááẠáááºááŸáºááᯠá¡áááºáá°ážááá¬ážáá« - áá»áœááºá¯ááºááá¯á· áááºážááᯠá
áááºááááºá
á¬ážáá«á
áá»áœááºá¯ááºááá¯á·á¡ááœááºá Hazelcast áááº-
- á¡áá¯á¶ážááŒá¯áá° sessions áá»á¬ážáááá¯ááŸá±á¬ááºááŸá¯á á¡áá»áááºááá¯ááºáž session áá áºáá¯á¡ááœáẠáá±áá¬áá±á·á áºááá¯á·ááœá¬ážááẠá¡áá»áááºááŒá¬ááŒáá·áºáá±á¬ááŒá±á¬áá·áº sessions á¡á¬ážáá¯á¶ážááᯠHazelcast ááœáẠááá·áºááœááºážáá¬ážáá«áááºá
- áááºááŸáºá áááºá¡áá¯á¶ážááŒá¯áá°áááá¯ááá¯ááºááá¯ááŸá¬áá±áá«áá áááºááŸáºááá¯á á áºáá±ážáá«á áááºáá±á·ááºá»á¡áá áºááᯠáá±ážáá²á·ááẠ- áááºážááᯠáááºááŸáºááœáẠááá·áºáá«á
- á¡ááá®áá±ážááŸááºážááŒá áºáááºáá»á¬ážááŒá¬áž áááºááœááºááŸá¯ááá¯ááºáᬠá¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážá node ááẠááŒá áºáááºáá áºáá¯ááᯠáá¯ááºáá±ážááŒá®áž Hazelcast áá±á«ááºážá ááºááœáẠáá±áá¬áá»áá±ážáááºá á€á¡ááŒá±á¬ááºážá¡áá¬á¡ááœáẠá á¬áááºážááœááºážáá¬ážáá±á¬ á¡ááŒá¬ážáá±á¬ á¡ááá®áá±ážááŸááºáž áá¯á¶ááŸááºáá»á¬ážááẠááŒá áºáááºááᯠáááºáá¶ááŒá®áž áá¯ááºáá±á¬ááºáá«áááºá
- á¡á á¯á¡ááœá²á·áá±á¬á·áááºá á¥ááá¬á¡á¬ážááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááẠáá°ážááŒá¬ážáá±á¬áá±á¬á·ááᯠá¡áá¯á¶ážááŒá¯á ááœá±ážááœá±ážááŸá¯áá áºáá¯ááᯠáááºáá®ážááẠ(1C áá±áá¬áá±á·á áºá¡ááœááºáž áá áºááá¯ááºáááºážááœá±ážááœá±ážááŸá¯)á
conversationKeyChecker.check("ÐÐÐÐÐÐÐÐÐÐÐÐ");
doInClusterLock("ÐÐÐÐÐÐÐÐÐÐÐÐ", () -> {
conversationKeyChecker.check("ÐÐÐÐÐÐÐÐÐÐÐÐ");
createChannel("ÐÐÐÐÐÐÐÐÐÐÐÐ");
});
áá»ááºáááºáááŸáááŒá±á¬ááºáž á á áºáá±ážáá²á·áááºá áá±á¬á·ááá¯áá°áᬠáááºáá¶á á áºáá±ážááŒá®áž áááºáá®ážáá²á·áááºá áá±á¬á·áááºááŒá®ážááá·áºáá±á¬áẠáá±á¬á·ááá¯áá á áºáá±ážáá«áá á¡ááŒá¬ážá á¬ááŒá±á¬ááºážáá»á¬ážááá¯áááºáž ááá¯á¡áá»áááºááœáẠá á áºáá±ážááŒá®áž áá°áá®áá±á¬ááœá±ážááœá±ážááŸá¯ááᯠáááºáá®ážááẠááŒáá¯ážá á¬ážáááºááŒá áºááẠ- ááá¯á·áá±á¬áº áááºážááẠááŸáááŸáá·áºááŒá®ážáá¬ážááŒá áºáááºá synchronized ááá¯á·ááá¯áẠáá¯á¶ááŸáẠjava Lock ááá¯á¡áá¯á¶ážááŒá¯á áá±á¬á·ááºáá»ááááá«á áá±áá¬áá±á·á ááŸáááá·áº - áááºážáááºááŸá±ážááœá±ážááŒá®ážáá±áá¬áá±á·á áºá¡ááœááºááá¬ážá áá¬ááŒá áºáááº; Hazelcast ááŸáááá·áº - áááºááá¯á¡ááºáá±á¬á¡áá¬ááŒá áºáááºá
DBMS ááá¯ááœá±ážáá»ááºááŒááºážá
áá»áœááºá¯ááºááá¯á·ááœáẠPostgreSQL ááŸáá·áº á¡áá¯ááºáá¯ááºááŒá®áž ဠDBMS á developer áá»á¬ážááŸáá·áº áá°ážáá±á«ááºážáá±á¬ááºááœááºááŒááºáž áá»ááºááŒáá·áºááŒá®áž á¡á±á¬ááºááŒááºáá±á¬á¡ááœá±á·á¡ááŒá¯á¶ááŸááááºá
PostgreSQL á¡á
á¯á¡áá±ážááŒáá·áº áááœááºáá°áá« - ááŸááá«áááºá
áááºá
ááºáá±áá¬áá±á·á
áºááᯠá¡ááá¯ááºážá¡áá¬áá
áºáá¯ááá¯áá»áŸáẠááá¯ááá¯áááºá
áá»áœááºá¯ááºááá¯á·á sharding áááááá¬ážááŸááºážááẠááá°áá®áá±á¬á¡áá»áá¯ážá¡á á¬ážááŒáá·áº ááá°áá®áá±á¬áá¬áá¬áá»á¬ážáá áºáá»áŸá±á¬áẠáá»áœááºá¯ááºááá¯á·áá¡ááá®áá±ážááŸááºážááá¬ážáá áºáá¯á á®ááᯠááŒáá·áºáá±ááá¯ááºáááºáᯠáá°ááá«áááºá áá¬áᬠA ááœáẠáááºáá±á·áá»áºáá»á¬ážá áœá¬ ááŸáááẠ- áá»á±ážáá°ážááŒá¯á á€ááá¬ážá á¡á áááºá¡ááá¯ááºážááᯠáá¬áᬠB ááá¯á· ááœáŸá±á·ááá¯ááºááŒáá«á áá¯á·á á€áá¯á¶ážááŒááºáá»ááºááẠá¡áá»áááºááááºáá® ááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬áẠááŒá¯áá¯ááºááŒááºážá¡ááœáẠááá¯ážááŸááºážá áœá¬ ááŒáœá±ážááŒá±á¬áºáá±áá±á¬ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·ááẠááááááá¯ááºááᯠááŸá¬ážáááºážáá°á¡áá»á¬ážá¡ááŒá¬ážáᶠááá·áºáááºááẠáá¯á¶ážááŒááºááá¯ááºáá«áááºá
á¥ááá¬á¡á¬ážááŒáá·áº áááºááá¯ááºááœáẠá¡áááºááŸá¬ážáá±á«ááºážáá»á¬ážá
áœá¬á¡ááŒá±á¬ááºáž áááºáááºááá¯ááºáááºá
SV ááœáẠáá»áŸá±á¬ááºááœáŸá¬ááŸáá·áº á á¬áááºážááœááºážáá°á ááá±á¬ááá¬ážáá»á¬ážááŸááááºá á¡ááá®áá±ážááŸááºážáá áºáá¯ááẠáááºážáá¡áá¯á¶ážááŒá¯áá°áá»á¬ážááŸáá·áº áá¯ááºáááºážáá±áá¬áá»á¬ážááŒáá·áº ERP ááá¯á·ááá¯áẠAccounting áá²á·ááá¯á·áá±á¬ áá¯ááºáááºážá¡ááá®áá±ážááŸááºážáá áºáá¯á áá®ážááŒá¬ážááá·áºááœááºážááŸá¯áá áºáá¯ááŒá áºáááºá á á¬áááºážááœááºážáá°ááẠá¡ááá®áá±ážááŸááºážááᯠSV áá¬áá¬ááœáẠááŸááºáá¯á¶áááºáá¬ážáá±á¬ á¡ááœá²á·á¡á ááºáž ááá¯á·ááá¯áẠáá°áá¯áá¹ááá¯ááºáá áºáŠážáá»ááºážááŒá áºáááºá á á¬áááºážááœááºážáá°áá áºáŠážááœáẠááŸááºáá¯á¶áááºáá¬ážáá±á¬ á¡ááá®áá±ážááŸááºážáá»á¬ážá áœá¬ ááŸáááá¯ááºááŒá®áž á¡ááá¯áá« á¡ááá®áá±ážááŸááºážáá»á¬ážááẠá¡áá»ááºážáá»ááºáž á á¬ááá¯áá±ážááá¯á·ááá¯ááºáá«áááºá á á¬áááºážááœááºážáá°ááẠáá»áœááºá¯ááºááá¯á·áá áá áºááœáẠá¡áááºááŸá¬ážááŒá áºáá¬áááºá á á¬áááºážááœááºážáá°á¡áá»á¬ážá¡ááŒá¬ážáá¶á០áááºáá±á·áá»áºáá»á¬ážááᯠáá¯ááºááá¯ááºážááá¯ááºáá¬áá±áá¬áá±á·á áºáá áºáá¯ááœáẠáá¬ážááŸáááá¯ááºáá«áááºá á á¬áááºážááœááºážáá°áá áºáŠážááẠá¡ááœá¬ážá¡áá¬áá»á¬ážá áœá¬ááᯠá áááºáá¯ááºáá¯ááºáá¬áááºááᯠáá»áœááºá¯ááºááá¯á·ááœá±á·ááŒááºáá«áá áááºážááᯠáá®ážááŒá¬ážáá¯ááºááá¯ááºážááá¯ááºáá¬áá±áá¬áá±á·á Ạ(ááá¯á·ááá¯áẠáá®ážááŒá¬ážáá±áá¬áá±á·á áºáá¬áá¬áá áºáá¯) ááá¯á· ááœáŸá±á·áá¬ážáá«áááºá
á á¬áááºážááœááºážáá° áá±áá¬áá±á·á áºá¡á¬ážáá¯á¶ážá áááºáá±áá¬á¡ááŒá±á¬ááºáž á¡áá»ááºá¡áááºááŸáá·áºá¡áá° áááºážááŒá±á¬ááºážááá¬ážáá áºáá¯ááᯠááááºážáááºážáá¬ážááá·áº áááºááá±áá¬áá±á·á áºáá áºáá¯ááŸááááºá
áááºááá±áá¬áá±á·á
áºááᯠáá
áºááá¯á·ááŒááºážááŸáá¬ááœááºáááºá áá»áœááºá¯ááºááá¯á·ááẠáááºážááŒá±á¬ááºážááŒááá¬áž (ááŸáá·áº á¡ááŒá¬ážáááŒá¬ááááá¯á¡ááºáá±á¬áá±áá¬) ááᯠáááºááŸáºáá
áºáá¯ááœáẠááááºážáááºážáá¬ážáááºá
á
á¬áááºážááœááºážáá°ááá±áá¬áá±á·á
áºá
áááºááŸá±ážááœá±ážáá«áá áááºážááá¯á¡ááœááºážááá¯ááºážá¡ááá¯ááºážáá»á¬ážá¡ááŒá
áºáá»áœááºá¯ááºááá¯á·ááŒááºáá«áááºá á¡ááŒá¬ážááá±á¬áá»ááºáá»á¬ážááœáẠáá»áœááºá¯ááºááá¯á·á¡áá¯á¶ážááŒá¯áááºá
áá¯á¶ážá áœá²áá° áááºáá±á·áá»áºáá»á¬áž áá¯á¶ážááŸá¯á¶ážááŒááºážááẠááá±á¬ááºážáá±á¬ááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·á áá±áá¬áá±á·á áºáá»á¬ážááᯠáá¯á¶áá°áá»á¬ážááŒáá·áº ááááºážááááºážáá¬ážáá«áááºá synchronous ááŸáá·áº asynchronous áá¯á¶á á¶áá°áá»á¬áž áá±á«ááºážá ááºááŒááºážááẠáááºááá±áá¬áá±á·á Ạáá¯á¶ážááŸá¯á¶ážááœá¬ážáá±á¬á¡áá«ááœáẠááá·áºááá¯ááºááẠá¡á¬ááá¶ááá¯ááºá á±áá«áááºá áááºááá±áá¬áá±á·á áºááŸáá·áº áááºážá synchronous áá¯á¶áá°áá áºááŒáá¯ááºáááºáááºáž áá»ááºááœááºááŸáᬠáááºáá±á·áá»áº áá¯á¶ážááŸá¯á¶ážááŸá¯ ááŒá áºáá±á«áºáá«áááºá
synchronous áá¯á¶áá°ááẠáá»á±á¬ááºáá¯á¶ážááœá¬ážáá«áá ááŒáá¯ááºáá°áá°ážááá¯ááºáá±á¬ áá¯á¶á
á¶áá°ááẠsynchronous ááŒá
áºááœá¬ážáááºá
áááºááá±áá¬áá±á·á
Ạáá»á±á¬ááºáá¯á¶ážááœá¬ážáá«áá synchronous áá¯á¶áá°ááẠáááºááá±áá¬áá±á·á
áºááŒá
áºáá¬ááŒá®áž ááŒáá¯ááºáá°áá°ážáá°ážáá±á¬áá¯á¶á
á¶áá°ááẠsynchronous áá¯á¶á
á¶áá°ááŒá
áºáá¬áááºá
ááŸá¬ááœá±ááŸá¯á¡ááœáẠElasticsearch
á¡ááŒá¬ážá¡áá¬áá»á¬ážáá²á០SV ááẠmessenger áá
áºáá¯áááºážááŒá
áºáá±á¬ááŒá±á¬áá·áºá ááááá»áá±á¬ááá¯ááºááá¯ááºááŸá¯áá»á¬ážááá¯á¡áá¯á¶ážááŒá¯á morphology ááá¯ááá·áºááœááºážá
ááºážá
á¬ážáᬠáá»ááºááŒááºáá±á¬á á¡áááºááŒá±ááŒá®áž ááá¯ááºáá»á±á¬áá®ááœá±ááŸááá±á¬ááŸá¬ááœá±ááŸá¯áá
áºáá¯ááá¯á¡ááºáá«áááºá á
á¬ááŒáá·áºááá¯ááºááᯠá¡ááŒá±áá¶á áááºáá®ážáá¬ážáá±á¬ á¡ááá²á·ááŸá¬ááœá±áá±ážá¡ááºáá»áẠElasticsearch ááᯠá¡áá¯á¶ážáááŒá¯ááẠáá»áœááºá¯ááºááá¯á· áá¯á¶ážááŒááºáá²á·áááºá
github ááŸá¬ ááœá±á·áááºá
ááá¯á·á¡ááŒáẠâá á¬áá¬ážâ áá°áá±á¬ á áá¬ážáá¯á¶ážá á¡ááŒá áºááá¯áááºáž ááááºážááááºážáá¬ážáááºááŒá áºáááºá á€áááºážáááºážááẠááá·áºá¡á¬áž á áá¬ážáá¯á¶ážá á¡á á á¡áááºá á¡áá¯á¶ážááœáẠááŸá¬ááœá±ááá¯ááºá á±áá«áááºá
áá¯ááºáá¯á¶ááŒá®áž
áá±á¬ááºážáá«ážá¡á
á០áá¯á¶ááá¯á¶ááᯠáááºáá«ááá²áá² ááŸááºážááŒáá±á¬áºáááºážá
- á¡ááºáá¬áááºáá±á«áºááœáẠááááœá±á·áá±áá±á¬ Balancer áá»áœááºá¯ááºááá¯á·ááœáẠnginx ááŸááááºá áááºážáááºáááºááá·áºá¡áá¬ááŒá áºááá¯ááºáááºá
- Java á¡ááá®áá±ážááŸááºáž ááŒá áºáááºáá»á¬ážááẠHazelcast ááŸáááá·áº á¡áá»ááºážáá»ááºáž áááºááœááºáááºá
- web socket ááŸáá·áºá¡áá¯ááºáá¯ááºáááºáá»áœááºá¯ááºááá¯á·á¡áá¯á¶ážááŒá¯áááºá
Netty . - Java á¡ááá®áá±ážááŸááºážááᯠJava 8 ááŒáá·áº áá±ážáá¬ážáá¬ážááŒá®áž á¡á
á¯á¡áá±ážáá»á¬áž áá«áááºáááºá
OSGi . á¡á á®á¡á á¥áºáá»á¬ážááœáẠJava 10 ááá¯á· ááŒá±á¬ááºážááœáŸá±á·ááŒááºážááŸáá·áº áá±á¬áºáá»á°ážáá»á¬ážááá¯á· áá°ážááŒá±á¬ááºážááŒááºážááá¯á· áá«áááºáááºá
ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááŸáá·áºá ááºážáááºááŸá¯
SV ááá¯áá®ááœááºááŒááºážááŸáá·áºá ááºážáááºááŒááºážáá¯ááºáááºážá ááºááœááºáá»áœááºá¯ááºááá¯á·á¡áá¯á¶ážááŒá¯ááá·áºáá¯ááºáá¯ááºáá»á¬ážáá áááºáááºá á¬ážááœááºá¡ááºá¹áá«áááºáá»á¬ážá áœá¬ááá¯ááœá±á·ááŒááºáá²á·ááááºá
Load testing ááŸáá·áº memory áá±á«ááºááŒá¬ážááŒááºážá
SV áá¯ááºáá±ááŸá¯áá áºáá¯á á®á áá¯ááºáá±ááŸá¯ááẠáááºá ááºážáááºááŒááºáž áá«áááºáááºá á¡á±á¬ááºááŒááºáá±á¬á¡áá«-
- á ááºážáááºááŸá¯ááŸá¬ áááºá¡áá±á¬áºááŒá¬ á¡áá¯ááºáá¯ááºáá²á·ááŒá®áž áááºáá±á¬ááºááŸá¯ áá»áá¯á·ááœááºážáá»áẠáááŸááá²á·áá«á
- á¡ááááá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá¡ááœáẠáá¯á¶á·ááŒááºááŸá¯á¡áá»áááºááẠá¡áááºááŒá±ááá·áºá¡ááá·áºááẠááá»á±á¬áºááœááºáá«á
- ááááºáá¬ážááŸááºážááŸáá·áº ááŸáá¯ááºážááŸááºáá«á á áœááºážáá±á¬ááºááẠáá»áááºážááŸá¯ááẠ10% ááẠáááá¯áá«á
áá»áœááºá¯ááºááá¯á·ááẠá ááºážáááºáá±áá¬áá±á·á áºááᯠáá±áá¬ááŒáá·áº ááŒáá·áºááœááºážááẠ- ááá¯ááá¯á·áá¯ááºáá±á¬ááºáááºá áá»áœááºá¯ááºááá¯á·ááẠáá¯ááºáá¯ááºáá±ážáá¬áá¬á០á¡áááºááŒáœáá¯á¶áž á á¬áááºážááœááºážáá°á¡ááŒá±á¬ááºáž á¡áá»ááºá¡áááºááᯠááá°ááŒá®áž áááºážááá¶áá«ááºáá»á¬ážááᯠ5 ááŒáá·áº ááŒáŸá±á¬ááºáᬠ(áááºáá±á·áá»áºáá»á¬ážá ááœá±ážááœá±ážááŸá¯áá»á¬ážá á¡áá¯á¶ážááŒá¯áá°áá»á¬áž) ááŸáá·áº áááºážááᯠá ááºážáááºáá«á
áá»áœááºá¯ááºááá¯á·ááẠáá¯á¶á á¶áá¯á¶ážáá»áá¯ážááŒáá·áº á¡ááŒááºá¡ááŸááºáá¯á¶á·ááŒááºááŸá¯á áá áºá áááºá ááºážáááºááŸá¯ááᯠáá¯ááºáá±á¬ááºáááº-
- á áááºááá á®ážááŸá¯á ááºážáááºááŸá¯
- áá»áááºáááºááŸá¯áá»á¬ážáá¬
- á á¬áááºážááœááºážáá°ááŸááºáá¯á¶áááº
á áááºááá á®ážááŸá¯á ááºážáááºááŸá¯á¡ááœááºážá áá»áœááºá¯ááºááá¯á·ááẠá á¬ááœá²áá±á«ááºáž áá¬áá±á«ááºážáá»á¬ážá áœá¬ááᯠááœáŸáá·áºáááºáá²á·ááŒá®áž áááºážááá¯á·ááẠáááºááá·áºááŒááºážáááŸááá² á áá áºá¡á¬áž áááºáá±ážáááº- áááºáá±á·áá»áºáá»á¬ážáá±ážáá¬ážááŒááºážá ááœá±ážááœá±ážááŸá¯áá»á¬áž ááŒá¯áá¯ááºááŒááºážá áááºáá±á·áá»áºáá»á¬ážá á¬áááºážááᯠáááºáá¶ááá°ááŒááºážá áá»áœááºá¯ááºááá¯á·ááẠáá¬áááºá¡áá¯á¶ážááŒá¯áá°áá»á¬ážá áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠá¡áá¯áá°ááŒá®áž (áá»áœááºá¯ááºá ááááºááá±ážáá±á¬ áááºáá±á·áá»áºáá»á¬ážá á¬áááºážááᯠááá°áá«á áá áºá á¯á¶áá áºáŠážáᶠá á¬áá±ážáá«) ááŸáá·áº áá±á¬á·ááºáá²ááŒá±ááŸááºážáá»ááºáá»á¬áž (ááœá²ááŒá¬ážááŒá¬ážáá¬ážáá±á¬ ááœá²á·á ááºážááŸá¯áá¯á¶á á¶áá áºáá¯á áááºáá±á·ááºá»áá áºáá¯ááᯠáá±ážááá¯á·áá«á ááááá±ážáá»ááºáá áºáᯠáá¯ááºáá±á¬ááºáá«)á
á¥ááá¬á¡á¬ážááŒáá·áºá á€áááºááŸá¬ á áááºááá á®ážááŸá¯á á áºáá±ážááŸá¯á á¡á áááºá¡ááá¯ááºážááŒá áºáááº-
- á¡áá¯á¶ážááŒá¯áá° á¡áá±á¬áá·áºáááºáá«á
- ááááºááá±ážáá±á¬ ááœá±ážááœá±ážáá»ááºáá»á¬ážááᯠáá±á¬ááºážááá¯áá«áááºá
- 50% ááẠáááºáá±á·áá»áºáá»á¬ážááᯠáááºááá¯ááºááœááºááŸááááºá
- 50% ááẠá á¬ááá¯áá±ážááá¯á·ááá¯ááºááœááºááŸááááºá
- áá±á¬ááºá¡áá¯á¶ážááŒá¯áá°-
- ááœá±ážááœá±ážááŸá¯á¡áá áºáááºáá®ážááẠ20% á¡ááœáá·áºá¡áááºážááŸááááºá
- áááºážá ááœá±ážááœá±ážááŸá¯áá»á¬ážááᯠáá»áááºážááœá±ážáá»ááºáááºá
- á¡áá²ááá¯áááºááœá¬ážáááºá
- áááºáá±á·áá»áºáá»á¬ážá á¡áá¯á¶ážááŒá¯áá°áááá¯ááá¯ááºáá»á¬ážááᯠáá±á¬ááºážááá¯áááºá
- á€ááœá±ážááœá±ážááŸá¯á០áá»áááºážá¡áá¯á¶ážááŒá¯áá°áá»á¬ážáᶠááááºáá°áá¬ážáá±á¬ á á¬áá«ážá á±á¬ááºááᯠáááºáá®ážáá«á
- ááœá±ážááœá±ážááŸá¯ááᯠáá»á±á¬ááá¯ááºážáá«á
- á¡ááŒááẠ20 ááŒááºáá¯ááºáá«á
- á¡áá±á¬áá·áºááœááºáá«á áá¬ááºááœáŸááºážáá¡á ááá¯á· ááŒááºááœá¬ážáá«á
- chatbot ááẠá
áá
áºáá²ááá¯á· áááºáá±á¬ááºááẠ(á¡ááá®áá±ážááŸááºážáá¯ááºá០á
á¬ááá¯áá±ážááá¯á·ááŒááºážááᯠá¡áá¯áá°áááº)
- áá±áá¬áááŸááºááŸá¯ (á¡áá°ážááœá±ážááœá±ážááŸá¯) á¡ááœáẠáá»ááºáááºá¡áá áºáá áºáᯠáááºáá®ážááẠ50% á¡ááœáá·áºá¡áááºážááŸááááºá
- ááŸáááŒá®ážáá¬ážáá»ááºáááºáá»á¬ážáᶠáááºáá±á·áá»áºáá áºá á±á¬áẠáá±ážááẠ50% ááŒá áºááá¯ááºáááºá
"áá»áááºáááºááŸá¯áá»á¬ážáá¬" ááẠá¡ááŒá±á¬ááºážááŒáá»ááºáá áºáá¯ááŒá±á¬áá·áº áá±á«áºáá¬áááºá á¡ááŒá±á¡áá±áá áºáá¯ááŸááááº- á¡áá¯á¶ážááŒá¯áá°áá»á¬ážááẠá áá áºá¡á¬áž áá»áááºáááºáá¬ážáá±á¬áºáááºáž ááá«áááºáá±ážáá«á á¡áá¯á¶ážááŒá¯áá°ááá¯ááºážááẠáá¶ááẠ09:00 áá¬áá®ááœáẠááœááºáá»á°áá¬ááá¯ááœáá·áºááŒá®áž áá¬áá¬ááá¯á·áá»áááºáááºáᬠá¡áá¶ááááºáá±áá«áááºá áá®áá±á¬ááºááœá±á á¡áá¹ááá¬ááºáá»á¬ážáááºá áá°ááá¯á·áá²ááŸá¬ á¡áá»á¬ážááŒá®ážááŸáááẠ- áá°ááá¯á·ááŸá¬ áá áºáá¯áááºážáá±á¬ áááºáá±á·ááºá»ááœá±á PING/PONG ááŒá áºáá±ááá·áº áá¬áá¬áá²á· áá»áááºáááºááŸá¯ááᯠááááºážáá¬ážááŒááẠ(áá°ááá¯á· áááºáááááºážááá¯ááºáá±á¬á·áá°áž - áááºáá±á·ááºá»á¡áá áºááŸáááẠáá¬ááŒá áºááá²)á á¡ááá¯áá«á ááºážáááºááŸá¯ááẠáá¬áá®áááºá¡ááœááºáž á¡áá¯á¶ážááŒá¯áá°á¡áá»á¬ážá¡ááŒá¬ážááẠá áá áºááá¯á·áááºáá±á¬ááºáááºááŒáá¯ážá á¬ážááá·áºá¡ááŒá±á¡áá±ááᯠááŒááºáááºáá¯ááºáá¯ááºáááºá áááºážááẠááá¡á¬ážá ááºážáááºááŸá¯áá áºáá¯ááŸáá·áº áááºáá°áá±á¬áºáááºáž áááºážá á¡á¬áá¯á¶á á°ážá áá¯ááºááŸá¯ááẠá€áááááá·áºááœááºážááŸá¯á¡áá±á«áº áááá»á áœá¬ á¡á¬áá¯á¶á áá¯ááºááẠ- ááá¯á·ááŒá±á¬áá·áº (áá°áá áºáŠážááẠá áá áºá¡áá¯á¶ážáááŒá¯áá±á¬á·áá² áá»ááºááœá¬ážááẠ- ááá¯ááá¯ážáá±á¬á¡áá¬ááᯠááœá±ážáá±á¬ááẠáááºáá²áááº)á
á
á¬áááºážááœááºážáá° ááŸááºáá¯á¶áááºááŒááºáž script ááᯠááááá¯á¶áž á
áááºááŒááºážá០á
áááºáááºá áá»áœááºá¯ááºááá¯á·ááẠá
áááºááá
á®ážááŸá¯á
ááºážáááºááŸá¯áá
áºáá¯ááᯠááŒá¯áá¯ááºáá²á·ááŒá®áž á
á¬áá±ážá
á¬áá°á
ááºááœáẠá
áá
áºááẠááŸá±ážááœá±ážááŒááºážáááŸáááŒá±á¬ááºáž áá±áá»á¬áá«áááºá áá«áá±ááá·áº áá¯á¶ážá
áœá²áá°ááœá± áá±á¬ááºáá¬ááŒá®áž á¡áá»áááºáá¯ááºáá¬ááŒá±á¬áá·áº ááŸááºáá¯á¶áááºááŸá¯ áá»ááºááœááºáá²á·áá«áááºá á
á¬áááºážááœááºážáá²á·á¡áá«ááŸá¬ áá¯á¶ážáááºá
áá»áœááºá¯ááºááá¯á·ááẠload generator á¡ááŒá
áºá¡áá¯á¶ážááŒá¯áááºá
á¡á²áá®ááŸá¬áá² á áááºááá¯á· áá¯á¶ážááŒááºáá²á·áá«áááºá
ááŒááºážáááºáá±á¬á ááºážáááºááŸá¯á áááºááŒá®ážáá±á¬ááºáá»ááºáá»ááºážáá®ážáá«ážááœáẠJMeter áááºááŸááºáá¬ááºáá±á«ááºááŒá¬ážáá¬áááºááá¯áá»áœááºá¯ááºááá¯á·ááœá±á·ááŸááá²á·áááºá
plugin ááẠáá®ážááŒá¬ážááŒá®ážááŒá®ážáá¬ážáá¬ážáá¬ááºáááºážáá
áºáá¯ááŒá
áºááŒá®áž ááŒáẠ176 ááœáá·áºáá«ááŸááá±á¬á áááºážááœáẠgithub ááœáẠforks 132 áá¯ááŸááááºá á
á¬áá±ážááá¬ááá¯ááºááá¯ááºá 2015 ááááºážá áááááááºáááŸááá²á·áá«áá°áž (2015 ááŸá¬ áá°áá²á·áááºá á¡á²áá®á·áá±á¬á· áá¶ááááœá±ááá±á«áºáá²á·áá°áž) memory leaks áá²á·áááºáááºáá²á· github ááŒá¿áá¬áá±á«ááºážáá»á¬ážá
áœá¬á unclosed pull request 7 áá¯á
áááºááẠá€ááááºá¡ááºááᯠá¡áá¯á¶ážááŒá¯á load testing ááŒá¯áá¯ááºááẠáá¯á¶ážááŒááºáá«áá á¡á±á¬ááºáá« ááœá±ážááœá±ážáá»ááºáá»á¬ážááᯠá¡á¬áá¯á¶á
áá¯ááºáá«á
- Multi-threaded áááºáááºážáá»ááºááœááºá áá¯á¶ááŸáẠLinkedList ááᯠá¡áá¯á¶ážááŒá¯áá²á·ááŒá®áž ááááºááŸá¬ ááŒá
áºáááºá
NPE runtime ááœááºá áááºážááᯠConcurrentLinkedDeque ááá¯á· ááŒá±á¬ááºážááŒááºážááŒáá·áº ááá¯á·ááá¯áẠáá áºááŒáá¯ááºáááºáááºáž áá¯ááºááœááºáá»á¬ážááŒáá·áº ááŒá±ááŸááºážááá¯ááºáááºá áá»áœááºá¯ááºááá¯á·ááẠááááááá¯ááºááá¯ááºá¡ááœáẠááááá¯á¶ážááœá±ážáá»ááºááŸá¯ááᯠááœá±ážáá»ááºáá²á·ááẠ(https://github.com/maciejzaleski/JMeter-WebSocketSampler/issues/43 ). - Memory ááá¯á
ááá·áºááŸá¯ á áá»áááºáááºááŸá¯ ááŒá¯ááºááá¯ááºáá±á¬á¡áá« áá»áááºáááºááŸá¯ á¡áá»ááºá¡áááºááᯠáá»ááºáááºááá¯ááºáá« (
https://github.com/maciejzaleski/JMeter-WebSocketSampler/issues/44 ). - áá¯ááºááœáŸáá·áºááŸá¯áá¯ááºááœáẠ(ááá°áá¬áá¡áá¯á¶ážááœáẠwebsocket ááᯠááááºááá¬ážáá±á¬áºáááºáž á¡á
á®á¡á
ááºááœáẠáá±á¬ááºááá¯ááºážááœááºá¡áá¯á¶ážááŒá¯áááº)á áá¯á¶á·ááŒááºááŸá¯áá¯á¶á
á¶áá»á¬áž á¡áá¯ááºááá¯ááºáá« (
https://github.com/maciejzaleski/JMeter-WebSocketSampler/issues/19 ).
áá«á github áá²á áá áºáá¯áá«á áá»áœááºá¯ááºááá¯á· áá¬áá¯ááºáá²á·ááá²-
- áá°ááŒá®
Elyran Kogan áááºážááœá² (@elyrank) â áááºážááẠááŒá¿áá¬áá»á¬ážááᯠ1 ááŸáá·áº 3 ááᯠááŒá±ááŸááºážáá±ážáááºá - ááŒááᬠá
- á.á.áá á០á.á.áá á¡áá ááááºáá¶áá¶áá¬ážááᯠá¡ááºááááºáá¯ááºáá¬ážáááºá
- ThreadLocal ááœáẠSimpleDateFormat áá¯ááºááá¯ážáá¬ážáááºá SimpleDateFormat ááẠruntime ááœáẠNPE ááá¯á·ááŒá áºá á±áá±á¬ thread-safe ááá¯ááºáá«á
- á¡ááŒá¬áž áááºááá¯áá®ááá¯á ááá·áºááŸá¯ááᯠááŒá¯ááŒááºáá²á·ááẠ(áá»áááºáááºááŸá¯ááᯠááŒá¯ááºááá¯ááºáá±á¬á¡áá« ááŸá¬ážááœááºážá áœá¬ ááááºáá²á·áááº)
á á®ážáááºážáá±áá²á
ááŸááºáá¬ááºá áá áºáááºááŸá¬ááá¯ááºáá±ááá·áº ááŸá áºááá¯ááºážá¡ááœááºážááŸá¬áá² áá¯ááºáá¯á¶ážááœá¬ážáááºá á¡áá»áááºááá»ááºáá±á¬á·áá°ážá áá«ááŒá±á¬áá·áº ááá¯ááºážáááºážáááºážáááºááá¯á· áá¯á¶ážááŒááºáá²á·áá±ááá·áº á¡á±ážáá»áá·áºáá±ážáá±á¬ááºá¡ááœááºáá«á á¡áááºážáá¯á¶áž áá áºáááºáá±á¬ááºáá±á¬á· áá¯á¶áá±á¬ááºáá«ááŒá®á
ááŸá áºáááºááŒá¬ááœá¬ážááŒá®...
ááᯠHazelcast ááẠááŸááºáá¬ááºáá¯ááºááœá¬ážáá«ááŒá®á á ááºážáááºááŸá¯ áááºá¡áááºážáááºááŒá¬ááŒá®ážáá±á¬áẠHazelcast ááẠááŸááºáá¬ááºáá»áá¯á·áá²á·ááŸá¯ááŸáá·áºáááºáááºá á áááºááá¯ááºááŒá¬ážáá²á·ááŒá®áž á¡áá»áááºá¡áááºážáááºááŒá¬ááŒá®ážáá±á¬áẠá¡á á¯á¡áá±ážááŒáá¯áá»áᬠnodes áá»á¬áž áá áºáá¯ááŒá®ážáá áºáá¯áá±áá¯á¶ážááœá¬ážáááºááᯠááŸááºáááºážáá»á¬ážáááŒááá²á·áááºá áá»áœááºá¯ááºááá¯á·ááẠJVisualVM ááᯠhazelcast ááá¯á·áá»áááºáááºááŒá®áž "áááºáá¬áá±á¬ááŒááº" ááá¯ááœá±á·áá²á·ááẠ- áááºážááᯠGC áá¯áá±á«áºáááºá ááá¯á·áá±á¬áºááŸááºáá¬ááºááá¯áááŸááºážáááºážááá¯ááºáá«á
ááŒá±áá¯á¶ / multiMap (map.destroy()) ááá¯áá»ááºááá¯ááºáá±á¬á¡áá« hazelcast 3.4 ááœáẠmemory ááẠáá¯á¶ážáá¯á¶ážáá»á¬ážáá»á¬áž ááœááºááŒá±á¬ááºáááºááá¯ááºááŒá±á¬ááºáž ááœá±á·ááŸáááá«áááºá
á¡ááá¯áá« bug ááá¯ááᯠ3.5 ááœáẠfixed ááŒá áºáá«áááº, áá«áá±ááá·áºá¡á²áá®áá¯ááºážáááŒá¿áá¬ááŒá áºáá²á·áááºá áá»áœááºá¯ááºááá¯á·ááẠááá¯ááºážááá áºá¡áááºáá»á¬ážááŒáá·áº MultiMaps á¡áá áºáá»á¬ážááᯠáááºáá®ážáá²á·ááŒá®áž áá»áœááºá¯ááºááá¯á·á áá¯áá¹áááá±áá¡á áááºážááá¯á·ááᯠáá»ááºááá¯ááºáá«áááºá áá¯ááºááẠá€áá²á·ááá¯á· ááŒá áºáááº-
public void join(Authentication auth, String sub) {
MultiMap<UUID, Authentication> sessions = instance.getMultiMap(sub);
sessions.put(auth.getUserId(), auth);
}
public void leave(Authentication auth, String sub) {
MultiMap<UUID, Authentication> sessions = instance.getMultiMap(sub);
sessions.remove(auth.getUserId(), auth);
if (sessions.size() == 0) {
sessions.destroy();
}
}
áá±á«áºáááº-
service.join(auth1, "ÐÐÐЫÐ_СÐÐÐЩÐÐÐЯ_Ð_ÐÐСУÐÐÐÐÐÐ_UUID1");
service.join(auth2, "ÐÐÐЫÐ_СÐÐÐЩÐÐÐЯ_Ð_ÐÐСУÐÐÐÐÐÐ_UUID1");
á á¬áááºážááœááºážááŸá¯áá áºáá¯á á®á¡ááœáẠMultiMap ááᯠáááºáá®ážáá¬ážááŒá®áž áááá¯á¡ááºááá·áºá¡áá« áá»ááºáá áºááá¯ááºáááºá Map ááᯠá áááºáááºááá¯á· áá¯á¶ážááŒááºáá²á·áá«áááºá áá±á¬á·ááẠá á¬áááºážááœááºážááŸá¯áá¡áááºááŒá áºáááºááŒá áºááŒá®áž áááºááá¯ážáá»á¬ážááẠsession identifiers ááŒá áºáááá·áºááẠ(ááá¯á·áá±á¬áẠááá¯á¡ááºáá«á á¡áá¯á¶ážááŒá¯áá° identifiers áá»á¬ážááᯠáááºááá°ááá¯ááºáááº)á
public void join(Authentication auth, String sub) {
addValueToMap(sub, auth.getSessionId());
}
public void leave(Authentication auth, String sub) {
removeValueFromMap(sub, auth.getSessionId());
}
ááá¬ážááœá±á ááá¯ážáááºáá¬áááºá
load testing áá²á· áááºáááºááŒá®áž áááŒá¬ážáá¬ááœá± áá±á·áá¬áá²á·ááá²á
- JSR223 ááᯠgroovy ááŒáá·áºáá±ážááŒá®áž compilation cache ááá¯ááá·áºááœááºážáááºááá¯á¡ááºááẠ- áááºážáááºááá¯ááá¯ááŒááºáááºáááºá
link ááᯠ. - Jmeter-Plugins ááááºáá»á¬ážááẠá
á¶áááºááŸááºáá»ááºáá»á¬ážááẠáá¬ážáááºáááœááºáá°áááºá
link ááᯠ.
Hazelcast ááŸáá·áºáá»áœááºá¯ááºááá¯á·áá¡ááœá±á·á¡ááŒá¯á¶á¡ááŒá±á¬ááºáž
Hazelcast ááẠáá»áœááºá¯ááºááá¯á·á¡ááœáẠáá¯ááºáá¯ááºá¡áá áºááŒá áºáááºá áá»áœááºá¯ááºááá¯á· áááºážááᯠáá¬ážááŸááºáž 3.4.1 á០á áááºáá¯ááºáá±á¬ááºáá²á·ááŒá®áž ááá¯á¡áá« áá»áœááºá¯ááºááá¯á·á áá¯ááºáá¯ááºáá±ážáá¬áá¬ááẠáá¬ážááŸááºáž 3.9.2 ááᯠá¡áá¯á¶ážááŒá¯áá±áá«ááẠ(áá±ážáá¬ážáá±áá»áááºá Hazelcast á áá±á¬ááºáá¯á¶ážáá¬ážááŸááºážááŸá¬ 3.10) ááŒá áºáááºá
ID áá»áá¯ážáááº
áá»áœááºá¯ááºááá¯á·ááẠááááºážááŒáá·áºá¡ááŸááºá¡áá¬ážáá»á¬ážááŒáá·áº á áááºáá²á·áááºá áá á¹á ááºážá¡áá áºáá áºáá¯á¡ááœáẠáá±á¬ááºááẠLong ááᯠááá¯á¡ááºáááºáᯠá áááºáá°ážááŒáá·áºááŒáá«á áá¯á·á áá±áá¬áá±á·á áºááŸá á¡ááœá²ááá¯ááºááẠáááá·áºáá»á±á¬áºáá«á ááá¬ážáá»á¬ážááᯠááœá²ááŒááºážááŒááºážááœáẠáá«áááºáá«ááẠ- DB1 ááœáẠáááºáá±á·ááºá» ID=1 ááŸáá·áº DB1 ááœáẠáááºáá±á·ááºá» ID=2 ááŸááááºá áááºááẠဠID ááᯠElasticsearch ááœááºáááºážáá±á¬ááºážá Hazelcast ááœáẠááá·áºááááá«á áá«áá±ááá·áº á¡ááá¯ážáá¯á¶ážááá±á¬á· áá±áá¬áá±á·á áºááŸá áºáá¯ááá± áá±áá¬ááœá±ááᯠáá áºáá¯áá²ááᯠáá±á«ááºážá ááºáá»ááºáááºááá¯ááẠ(á¥ááá¬á áá±áá¬áá±á·á áºáá áºáá¯á áá®á á¬áááºážááœááºážáá°ááœá±á¡ááœáẠáá¯á¶áá±á¬ááºáááºááá¯á· áá¯á¶ážááŒááºááŒááºáž)á áááºááẠHazelcast ááá¯á· AtomicLongs á¡áá»á¬ážá¡ááŒá¬ážááᯠáá±á«ááºážááá·áºááá¯ááºááŒá®áž áá±á¬ááºáá¬ááᯠááá¯áá±áá¬ááœáẠáá¬ážááŸáááá¯ááºáááºá ááá¯á·áá±á¬áẠID á¡áá áºáá áºáá¯áááŸáááŒááºážáá áœááºážáá±á¬ááºáááºááẠááá¯ážááŒáá·áºáá¬ááŒá®áž Hazelcast ááá¯á· áá±á¬ááºážááá¯ááŸá¯áá áºáá¯á¡ááœáẠá¡áá»áááºááᯠááá°ááá¯ááºáá«á ááá¯á·áá±á¬áº Hazelcast ááœáẠFlakeIdGenerator ááẠááá¯á á¡áá±á¬ááºážáá¯á¶ážá¡áá¬áá áºáá¯ááŸááááºá áá±á¬ááºáááºáá áºáŠážá á®ááᯠáááºááœááºááá·áºá¡áá«á á¥ááá¬á ááááá áºáᯠ- 1 á០10á áá¯ááááá áºáᯠ- 000 á០10 á áááºááá¯á·ááᯠID á¡ááá¯ááºážá¡ááŒá¬ážáá áºáᯠáá±ážáá¬ážáá«áááºá ááᯠáá±á¬ááºáááºááẠáááºážááá¯áá¯ááºáá±ážááá·áº á¡ááá¯ááºážá¡ááŒá¬ážáááŒá®ážááá»ááºáž áááºážááá¯ááºááá¯áẠááœá²ááŒá¬ážáááºááŸááºááŸá¯á¡áá áºáá»á¬ážááᯠáá¯ááºáá±ážááá¯ááºáááºá áááºážááẠáá»ááºááŒááºá áœá¬ á¡áá¯ááºáá¯ááºáá±á¬áºáááºáž áááºááẠá¡ááá®áá±ážááŸááºáž (ááŸáá·áº Hazelcast áááá¯ááºážááá·áº) ááᯠááŒááºáááºá áááºááá·áºá¡áá« á¡á á®á¡á ááºá¡áá áºáá áºáᯠá áááºááẠ- ááá¯á·ááŒá±á¬áá·áº áá»á±á¬áºááœá¬ážááŒááºáž á áááºááá¯á·ááŒá áºáááºá ááá¯á·á¡ááŒááºá áá±á¬á·ááºáá²á¡ááºáá»ááºáá®áá¬áá»á¬ážááẠID áá»á¬ážááẠááááºážááŒáá·áº á¡áááºááŒá±á¬áá·áºááŒá áºáááºááᯠá¡ááŸááºááááºáá¬ážááááºáá±á¬áºáááºáž ááœá²ááœá²áá±áá«áááºá áá»áœááºá¯ááºááá¯á·ááẠá¡áá¬á¡á¬ážáá¯á¶ážááᯠáá»áááºáááŒá®áž UUIDs ááá¯á· ááŒá±á¬ááºážáá²á·áááºá
á áá¬ážáá ááºá Twitter áá²á·ááá¯á·ááŒá áºáá»ááºáá°áá»á¬ážá¡ááœááºá á€áá²á·ááá¯á·áá±á¬ Snowcast á á¬ááŒáá·áºááá¯ááºááŸááá«ááẠ- áááºážááẠHazelcast áááááºááœáẠSnowflake ááá¯á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ááŒá áºáááºá á€áá±áá¬ááœáẠááŒáá·áºááŸá¯ááá¯ááºáááº-
áá«áá±ááá·áº áá«ááá¯á·á á¡á²áá«ááᯠáá¬ážááááºáá±á¬á·áá°ážá
TransactionalMap.replace
áá±á¬ááºáááºá¡á¶á·ááŒá áá¬- TransactionalMap.replace á¡áá¯ááºááá¯ááºáá«á áá«á á ááºážáááºááŸá¯áá áºáá¯áá«á
@Test
public void replaceInMap_putsAndGetsInsideTransaction() {
hazelcastInstance.executeTransaction(context -> {
HazelcastTransactionContextHolder.setContext(context);
try {
context.getMap("map").put("key", "oldValue");
context.getMap("map").replace("key", "oldValue", "newValue");
String value = (String) context.getMap("map").get("key");
assertEquals("newValue", value);
return null;
} finally {
HazelcastTransactionContextHolder.clearContext();
}
});
}
Expected : newValue
Actual : oldValue
getForUpdate ááá¯á¡áá¯á¶ážááŒá¯á áá»áœááºá¯ááºáááá¯ááºááá¯ááºá¡á á¬ážááá¯ážááŸá¯ááᯠáá±ážáá¬ážáá²á·ááááº-
protected <K,V> boolean replaceInMap(String mapName, K key, V oldValue, V newValue) {
TransactionalTaskContext context = HazelcastTransactionContextHolder.getContext();
if (context != null) {
log.trace("[CACHE] Replacing value in a transactional map");
TransactionalMap<K, V> map = context.getMap(mapName);
V value = map.getForUpdate(key);
if (oldValue.equals(value)) {
map.put(key, newValue);
return true;
}
return false;
}
log.trace("[CACHE] Replacing value in a not transactional map");
IMap<K, V> map = hazelcastInstance.getMap(mapName);
return map.replace(key, oldValue, newValue);
}
áá¯á¶ááŸááºáá±áá¬ááœá²á·á ááºážáá¯á¶áá»á¬ážáá¬áá áááºážááá¯á·á ááœá±áá±ážááœá±áá°áá¬ážááŸááºážáá»á¬ážááá¯áááºáž á ááºážáááºáá«á IMap ááẠá¡áá¯ááºáá¯ááºáá±á¬áºáááºáž TransactionalMap áááŸááá±á¬á·áá«á
á¡áá»áááºáááá¯ááºážáá² JAR á¡áá áºáá áºáá¯ááá·áºáá«á
áŠážá áœá¬á áá»áœááºá¯ááºááá¯á·ááẠHazelcast ááŸá áá»áœááºá¯ááºááá¯á·áá¡áááºážáá»á¬ážá á¡áá¬ááá¹áá¯áá»á¬ážááᯠááŸááºáááºážáááºááẠáá¯á¶ážááŒááºáá²á·áááºá á¥ááá¬á¡á¬ážááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááœáẠApplication class áá áºáá¯ááŸááááºá áááºážááᯠsave ááŒá®ážáááºááá¯áá«áááºá ááááºážáááºážáááº-
IMap<UUID, Application> map = hazelcastInstance.getMap("application");
map.set(id, application);
áá»áá±á¬áºááá¯á·áááºáá«:
IMap<UUID, Application> map = hazelcastInstance.getMap("application");
return map.get(id);
á¡áá¬á¡á¬ážáá¯á¶ážá á¡áá¯ááºáá¯ááºáá±áááºá ááá¯á·áá±á¬áẠááŸá¬ááœá±ááẠHazelcast ááœáẠá¡ááœáŸááºážáá áºáá¯áááºáá±á¬ááºááẠáá¯á¶ážááŒááºáá²á·áááº-
map.addIndex("subscriberId", false);
á¡áá áºáá áºáá¯áá±ážáá¬ážáá±á¬á¡áá«á áááºážááá¯á·ááẠClassNotFoundException ááá¯á áááºáááºáá¶áá²á·áááºá Hazelcast ááẠá¡ááœáŸááºážáá²ááá¯á· ááá·áºááẠááŒáá¯ážá á¬ážáá±á¬áºáááºáž áá»áœááºá¯ááºááá¯á·áá¡áááºážá¡ááŒá±á¬ááºáž áá¬ááŸááááá²á·áá² á€á¡áááºážááŸáá·áºá¡áá° JAR áá áºáá¯ááᯠáá±ážáá±á¬ááºááá¯áá«áááºá áá«áá²áá¯ááºááá¯ááºá á¡á¬ážáá¯á¶ážá¡áááºááŒá±ááœá¬ážáá±ááá·áº ááŒá¿áá¬á¡áá áºáá áºáá¯áá±á«áºáá¬áááº- á¡á á¯á¡áá±ážááᯠáá¯á¶ážáááááºáá² JAR ááᯠáááºááᯠupdate áá¯ááºááá²á Node-by-node á¡ááºááááºáá¯ááºáá±á áẠHazelcast ááẠJAR á¡áá áºááᯠááá±á¬ááºáá°áá«á á€á¡áá»áááºááœáẠáá»áœááºá¯ááºááá¯á·ááẠá¡ááœáŸááºážáááŸá¬ááœá±áá² á¡áááºááŸááºáá±ááá¯ááºááá¯ááºááŒá±á¬ááºáž áá¯á¶ážááŒááºáá²á·áááºá áá±á¬ááºáá¯á¶ážá¡áá±áá²á· ááẠHazelcast ááᯠáá±á¬á·áááºááá¯ážá ááá¯ážááá¯ááºáá áºáá¯á¡áá±áá²á· áá¯á¶ážáááºááá¯ááẠá¡áá¬á¡á¬ážáá¯á¶ážá á¡áá¯ááºááŒá áºááŸá¬áá¬ážá ááááºááá¯ááºáá°ážá á€áá±áá¬ááœáẠIMap ááŸáá·áº TransactionalMap á á¡ááŒá¯á¡áá°ááẠááœá²ááŒá¬ážáá«áááºá IMap á ááá¯áá áá¯ááºáá²á· áá±áá¬ááŸá¬ TransactionalMap á á¡ááŸá¬ážá¡ááœááºážáá áºáá¯ááᯠáá»ááá¯ááºáááºá
IMap ááá¹áᯠá ááá áá±ážáááºá á¡á²áá«ááœá±ááᯠáááºáááºá á¡á¬ážáá¯á¶ážá áá»áŸá±á¬áºááá·áºáááºá
@Test
void get5000() {
IMap<UUID, Application> map = hazelcastInstance.getMap("application");
UUID subscriberId = UUID.randomUUID();
for (int i = 0; i < 5000; i++) {
UUID id = UUID.randomUUID();
String title = RandomStringUtils.random(5);
Application application = new Application(id, title, subscriberId);
map.set(id, application);
Application retrieved = map.get(id);
assertEquals(id, retrieved.getId());
}
}
áá«áá±ááá·áº ááœá±áá±ážááœá±áá°ááŸá¬ á¡áá¯ááºááá¯ááºáá«áá°ážá ClassNotFoundException ááá¯áááŸááá«áááº
@Test
void get_transaction() {
IMap<UUID, Application> map = hazelcastInstance.getMap("application_t");
UUID subscriberId = UUID.randomUUID();
UUID id = UUID.randomUUID();
Application application = new Application(id, "qwer", subscriberId);
map.set(id, application);
Application retrievedOutside = map.get(id);
assertEquals(id, retrievedOutside.getId());
hazelcastInstance.executeTransaction(context -> {
HazelcastTransactionContextHolder.setContext(context);
try {
TransactionalMap<UUID, Application> transactionalMap = context.getMap("application_t");
Application retrievedInside = transactionalMap.get(id);
assertEquals(id, retrievedInside.getId());
return null;
} finally {
HazelcastTransactionContextHolder.clearContext();
}
});
}
3.8 ááœááºá User Class Deployment ááá¹ááá¬ážáá±á«áºáá¬áááºá master node áá áºáá¯ááᯠáááºááŸááºááŒá®áž JAR ááá¯ááºááᯠá¡ááºááááºáá¯ááºááá¯ááºáá«áááºá
ááᯠáá»áœááºá¯ááºááá¯á·ááá»ááºážáááºáá¯á¶ááᯠáá¯á¶ážáááŒá±á¬ááºážáá²ááá¯ááºáá«ááŒá®- áá»áœááºá¯ááºááá¯á·ááẠáááºážááᯠJSON á¡ááŒá Ạá á®á á¥áºááŒá®áž Hazelcast ááœáẠááááºážáááºážáá¬ážáá«áááºá Hazelcast ááẠáá»áœááºá¯ááºááá¯á·áá¡áááºážáá»á¬ážáááœá²á·á ááºážáá¯á¶ááá¯áááááºáááá¯á¡ááºáá²á áá»áœááºá¯ááºááá¯á·ááẠá¡áá»áááºáááá¯ááºážáá² á¡ááºááááºáá¯ááºááá¯ááºáá«áááºá ááá¯ááááºážá¡áá¬ááá¹áá¯áá»á¬ážáá¬ážááŸááºážááᯠá¡ááá®áá±ážááŸááºážá០ááááºážáá»á¯ááºáá¬ážáááºá á¡ááá®áá±ážááŸááºážá ááá°áá®áá±á¬áá¬ážááŸááºážáá»á¬ážááᯠáá áºáá»áááºáááºážááœáẠáá¯ááºáá±á¬ááºááá¯ááºááŒá®ážá á¡ááá®áá±ážááŸááºážá¡áá áºááẠá¡ááœááºá¡áá áºáá»á¬ážááŒáá·áº á¡áá¬ááá¹áá¯áá»á¬ážááᯠáá±ážáá¬ážááá·áºá¡áá« á¡ááŒá±á¡áá±áá áºáᯠááŒá áºááá¯ááºáá±á¬áºáááºáž á¡áá±á¬ááºážááẠá¡ááá¯áá«áááºáááºáá»á¬ážááᯠááááá±ážáá«á áá áºáá»áááºáááºážááŸá¬áááºá á¡ááá®áá±ážááŸááºážá¡áá áºááẠá¡ááœááºá¡áá áºááá«áá±á¬ á¡ááá®áá±ážááŸááºážáá±á¬ááºážá០áá±ážáá¬ážáá¬ážáá±á¬ á¡áá¬ááá¹áá¯áá»á¬ážááᯠáááºáááºá áá»áœááºá¯ááºááá¯á·ááẠá¡ááá®áá±ážááŸááºážá¡ááœááºáž ááá¯áá²á·ááá¯á·áá±á¬á¡ááŒá±á¡áá±áá»á¬ážááᯠááá¯ááºááœááºááŒá±ááŸááºážáá±á¬áºáááºáž ááá¯ážááŸááºážá á±áááºá¡ááœáẠááœááºáááºáá»á¬ážááᯠááŒá±á¬ááºážáá²ááŒááºáž ááá¯á·ááá¯áẠáá»ááºááŒááºážáááŒá¯áá² áááºáááºá¡áá áºáá»á¬ážááᯠáá±á«ááºážááá·áºááŒááºážááŒáá·áº á¡áááºážáá»á¬ážááá¯áᬠáá»á²á·ááœááºáá«áááºá
ááŒáá·áºáá¬ážáá±á¬ á áœááºážáá±á¬ááºáááºááᯠáá»áœááºá¯ááºááá¯á· áááºááá¯á·áá±áá»á¬á á±áááºáááºážá
Hazelcast ááá¯á· ááá®ážá áẠáá±ážáᯠ- áá±á¬ááºážáááºá áá±áá¬áá±á·á áºááá¯á· ááŸá áºáᯠ- ááá±á¬ááºáž
áá±áá¬á¡ááœáẠcache ááá¯á·ááœá¬ážááŒááºážááẠáá±áá¬áá±á·á áºááá¯á·ááœá¬ážááŒááºážááẠá¡ááŒá²áááºážááá¯áá±á¬ááºážáá±á¬áºáááºáž á¡áá¯á¶ážáááŒá¯áá±á¬ááŸááºáááºážáá»á¬ážááᯠáááºáááááºážáááºážáá»ááºáá«á ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááá±á¬ááºáá¯á¶ážá¡ááá·áºá¡áá áááºááá·áºá¡áá¬á¡á¬áž áááºááŸáºáá¯ááºááááºááᯠáá»áœááºá¯ááºááá¯á· áá¯á¶ážááŒááºáá¬ážáá²á·áááºá áá¯ááºáá±á¬ááºáá»ááºá¡áá áºááᯠáá¯ááºáá¶áá«ááºáááºáá±á¬á¡áá«á áá»áœááºá¯ááºááá¯á·ááẠPostgreSQL (log_min_duration_statement ááœáẠ0 á០20) ááá¯á· ááŸááºáá¬ážááŸá¯ááá¯ááœáá·áºááŒá®áž Load Testing ááᯠáááá ẠXNUMX ááŒá¬áá¯ááºáá±á¬ááºáááºá á á¯áá±á¬ááºážáá¬ážáá±á¬ááŸááºáááºážáá»á¬ážá pgFouine ááŸáá·áº pgBadger áá²á·ááá¯á·áá±á¬ á¡áá¯á¶ážáááºááŸá¯áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááŒááºážááŒáá·áº ááœá²ááŒááºážá áááºááŒá¬ááŸá¯á¡á á®áááºáá¶á á¬áá»á¬ážááᯠáááºáá±á¬ááºááá¯ááºáá«áááºá á¡á á®áááºáá¶á á¬áá»á¬ážááœáẠáá»áœááºá¯ááºááá¯á·ááẠááŸá±ážááœá±ážááŒá®áž áááŒá¬áá áá±ážááŒááºážááŸá¯áá»á¬ážááᯠá¡áááá¡á¬ážááŒáá·áº ááŸá¬ááœá±áá«áááºá ááŸá±ážááœá±ážáá±á¬ á á¯á¶á ááºážáá±ážááŒááºážááŸá¯áá»á¬ážá¡ááœááºá áá»áœááºá¯ááºááá¯á·ááẠá¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯á¡á á®á¡á áẠ(ááŸááºážáááºážáá»ááº) ááᯠáááºáá±á¬ááºááŒá®áž ááá¯ááá¯á·áá±á¬áá±ážááœááºážááᯠá¡ááŸáááºááŒáŸáá·áºááá¯ááºáááºááá¯áááºááᯠá¡áá²ááŒááºáá«áááºá áá°áá®áá±á¬ááá·áºááœááºážááŸá¯áá±áá¬á¡ááœáẠáááŒá¬áááá±á¬ááºážááá¯ááŸá¯áá»á¬ážááẠáááºááŸáºááœáẠáá±á¬ááºážá áœá¬ááá¯ááºáááºáá«áááºá áá»áœááºá¯ááºááá¯á·ááẠáá±ážááœááºážáá»á¬ážááᯠâááŒá¬ážáá»ááºáá»ááºâ ááŒá áºá¡á±á¬ááºá
á¡áá¯á¶ážááŒá¯ááŒááºáž
SV ááẠá¡áœááºááá¯ááºážáááºáá±á¬ááºááŸá¯á¡ááŒá Ạ2017 ááœá±áŠážáá±á«ááºááœáẠá áááºáááºáááºáá²á·ááŒá®áž áá®ážááŒá¬ážáá¯ááºáá¯ááºáá áºáá¯á¡áá±ááŒáá·áº SV ááᯠ2017 áá¯ááŸá Ạááá¯áááºáá¬áááœáẠáá¯ááºááŒááºáá²á·ááẠ(ááá¯á¡áá»áááºá beta áá¬ážááŸááºážá¡ááŒá±á¡áá±)á
áááºáááºááŸá¯ áá
áºááŸá
áºáá»á±á¬áºá¡ááœááºáž CB á¡áœááºááá¯ááºážáááºáá±á¬ááºááŸá¯á áááºáááºááŸá¯ááœáẠááŒá®ážáá±ážáá±á¬ááŒá¿áá¬áá»á¬áž áááŸááá²á·áá«á áá»áœááºá¯ááºááá¯á·ááẠá¡áœááºááá¯ááºážáááºáá±á¬ááºááŸá¯ááŸáá
áºááá·áº á
á±á¬áá·áºááŒáá·áºáá±áá«áááºá
SV áá¬áá¬ááŒáá·áºááŒá°ážááŸá¯ááᯠáá°áááºážáááºáá±á·áá»áºáá»á¬ážáá¯á¶á
á¶ááŒáá·áº áá±á¬ááºáá¶á·áá±ážáááº- RPM, DEB, MSIá ááá¯á·á¡ááŒáẠWindows á¡ááœáẠáá»áœááºá¯ááºááá¯á·ááẠáá¬áá¬á Hazelcast ááŸáá·áº Elasticsearch ááᯠá
ááºáá
áºáá¯áááºážááœáẠááá·áºááœááºážááá·áº áá
áºáá¯áááºážáá±á¬ EXE áá¯á¶á
á¶ááŒáá·áº áááºáááºááŸá¯áá
áºáá¯á¡á¬áž áá±ážáá«áááºá áááºáááºááŸá¯á á€áá¬ážááŸááºážááᯠ"ááá¯ááºááŒ" áá¬ážááŸááºážá¡ááŒá
ẠáááŠážááœáẠáá»áœááºá¯ááºááá¯á· áááºááœáŸááºážáá²á·áá±á¬áºáááºáž ááá¯á¡áá«ááœáẠáááºážááẠáá±áááºážá¡á
á¬ážáá¯á¶áž ááŒáá·áºáá»ááºááœá±ážáá»ááºááŸá¯ááŒá
áºááŒá±á¬ááºáž áááá¬áááºááŸá¬ážáá¬áá«áááºá
source: www.habr.com