ááœááºáá²á·áá±á¬ áááºá¡áááºážáááºá ááŒá
áºááœá¬ážáá²á·áááºá
á€áááºááŸá¬ áááºážááá¯á·áá á¬áá¬ážáá±ážáá¬ážáá°áá¶á០Kontur áááºáááºáá»ááºááŸá á¡áá¯ááºáá»á¬ážááᯠááœá²ááŒááºážá áááºááŒá¬ááá·áº ááá¯á·á áºáá áºáá¯ááŒá áºáááºá ááá¯ááºááá¬áá±á«áºááŸá¬ áááºáá°ááŸááá² - áá«á áááºážáá²á· áŠážááŸá±á¬ááºááᯠááœá²ááá·áºááá¯ááºáá²á· á¡ááœáá·áºá¡áá±ážááá¯ááºáá²á· áá¬áá¬áá²á·á¡ááœá±á·á¡ááŒá¯á¶ááᯠááááááá¯á· á¡ááŒá±á¬ááºážááŒáá»ááºáá«áá²á ááŒá®ážáá¬ážáááº-ááŸááºáá»ááºá
áááºážááá¯á·á áá¯á¶ážááŒááºáá»ááºááᯠáá»áá±ážááẠá á¬ááœááºá á¬áááºážááᯠáááá¯ááºáá»á¬ážá¡ááŒá Ạáá»ááºáá²á·ááŒááá·áº áá«áááºáá°áá»á¬ážááẠááŸááá²á·áá«áááºá áá±á¬ááºááŒá±á¬ááºáá¬ááá¯ááºáá«áá°áž - á áá á áºááá¯á·á¡ááœáẠáá®á á¬ááœááºááᯠááœáŸá²áá±ážáá²á·áááºá
á á¯á á¯áá±á«ááºáž áá¯ááºáááºážáá¯á¶ážáá»áá¯áž ááŸááááº-
- Load Balancing á¡ááœáẠá¡áá±ážáá»á¬ážááŒáá·áº áá¯á¶áá°áá»á¬ážááᯠááœá±ážáá»ááºááŒááºážá¡ááŒá±á¬ááºáž
- áááºááá¯áá®áá±áá¬áá±á·á áºáá áºáá¯ááŸáá·áº áááºáááºáá±á¬ query ááááºáá»á¬ážááᯠá á®áááºá¡ááŒá±á¬ááºáž
- ring topology ááŒáá·áº ááŒáá·áºáá±ááá·áºá áá áºááœáẠááŒááºáááºááœáŸá²ááŒá±á¬ááºážááŸá¯
Task 1. ClusterClient
ááŒáá·áºáá±ááŸá¯á áá áºá N á¡áá±ážáá»áááºáááºáá°áá¯á¶á á¶áá»á¬ážá០K ááááá±á¬ááºáá±á¬ááœá±ážáá»ááºááŸá¯á¡ááœáẠá¡ááºáááá¯áá®áááºáá áºáá¯ááᯠá¡ááá¯ááŒá¯ááẠááá¯á¡ááºáááº-
ááá·áºá¡ááœá²á·ááẠN node áá»á¬áž á¡ááŒá±á¬ááºá¡ááŒá¬áž ááŒáá·áºáá±áá¬ážáá±á¬ á¡á á¯á¡áá±ážáá áºáá¯á¡ááœáẠáááá¯ááºážááá·áºáá áºáá»á áºááá¯ááºáá áºáá¯ááᯠáá®ááœááºááẠáá¬áááºáá±ážáá¬ážáááºá á á¬ááŒáá·áºááá¯ááºááẠnode áá»á¬ážááŸáá·áºáááºá ááºáá±ááá·áº á¡áá»áá¯ážáá»áá¯ážáá±á¬ metadata áá»á¬ážááᯠááŒá±áá¬áá¶ááŒá®áž (á¥ááá¬á áááºážááá¯á·á latenciesá 4xx/5xx áá¯á¶á·ááŒááºááŸá¯ááŸá¯ááºážáá»á¬áž á áááºááŒáá·áº) ááᯠááŸááºáá¬ážáá¬ážááŒá®áž floating point weights W1..WN ááᯠáááºážááá¯á·á¡á¬áž áááºááŸááºáá±ážáááºááŒá áºáááºá áá áºááŒáá¯ááºáááºáž á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯áá»á°áá¬ááᯠáá¶á·ááá¯ážáááºá¡ááœááºá á á¬ááŒáá·áºááá¯ááºááẠK á N node áá»á¬ážááᯠáá»áááºážááœá±ážáá»ááºááá¯ááºááá·áºáááºá ááœá±ážáá»ááºáá¶áááá¯ááºááá·áºá¡ááœáá·áºá¡áá±ážááẠnode áá¡áá±ážáá»áááºááŸáá·áºá¡áá»áá¯ážáá»ááá·áºáááºá
node áá»á¬ážááᯠáááá±á¬ááºá áœá¬ááœá±ážáá»ááºááẠalgorithm áá áºáá¯ááᯠá¡ááá¯ááŒá¯áá«á ááŒá®ážáá¬ážáá±á¬ O á¡ááŸááºá¡áá¬ážááᯠá¡áá¯á¶ážááŒá¯á áááºážá ááœááºáá»ááºááŸá¯ááá¯ááºáᬠááŸá¯ááºááœá±ážááŸá¯ááᯠááá·áºááŸááºážáá«á
áá¬ááŒá±á¬áá·áº á¡á¬ážáá¯á¶áž á¡ááºá¹áááááºááᯠááŒá áºáá±áá¬áá²á
á¡áááºááŒá±á¬áá·áºááá¯áá±á¬áº á€áá¯á¶á á¶ááŒáá·áº áá®áá¬áá¶áááºáá±á¬ááºáá°áá»á¬ážááẠáááºážááá¯á·ááŸáá·áºá¡áá° ááá¯ááºááœá²áááºáá²á·ááŒááŒá®áž á¡ááºá¹áááááºááẠááá¯ááºááá¬á ááá¬ážáááºáá¬áá¬á áá¬ážááŒá áºáá±á¬ááŒá±á¬áá·áº ááŒá áºáááºá á¡áá¯ááºáá»á¬ážááᯠá€áá²á·ááá¯á·ááŒáá·áºááááº-
á á¬ááœááºáá²á· áá²áá¶ááá¯áá°á ááœá±ážáá«á spoiler ááá¯áá»ááºáá»ááºážááœáá·áºááá¯á· á¡áá»ááºá ááá¯ááá¯ááºáá«áá²á·ð
á¡ááŒá±ááŸá¬ (áá®áá®ááá¯) áá±á·áá¬ááŒááºáž
5:53 ááœáẠá áááºá 4 áááá áºáá¬
ááŒá®ážáá±á¬á· áá®áá¯á¶áá«ááá¬ážáá«ááŸááá²á· áá±á¬ááºá»á¬ážáá±ážááœá±á áá°ááá¯á·áá²á·á¡ááŒá±ááᯠáááºááá¯áááºáá®ážáá²á·ááŒááá²á
á¡ááŒá± (á á¬áá¬áž) áá±á·áá¬ááŒááºáž
á¡á±á¬ááºáá«ááŒá±ááŸááºážáá»ááºááẠáá»ááºááŸá¬ááŒááºáá±á«áºááœáẠáááºááŸááááº- áá¯á¶áá°á¡á¬ážáá¯á¶ážáá¡áá±ážáá»áááºáá»á¬ážááᯠáá±á«ááºážá ááºážáá«á 0 á០á¡áá±ážáá»áááºá¡á¬ážáá¯á¶ážááá±á«ááºážáááºá¡áá áá»áááºážáá¶áá«ááºáá áºáá¯áá¯ááºáá±ážáá«á ááá¯á·áá±á¬áẠáá¯á¶áá°á¡áá±ážáá»ááẠ0 á០(i-1)th ááŸááá±á¬ i-replica ááá¯ááœá±ážáá»ááºáá«á áá»áááºážáá¶áá«ááºáááºáááºážááŒá®áž 0 á០i-th á០áá¯á¶áá°á¡áá±ážáá»á¬ážá áá±á«ááºážáááºááẠáááºážááẠááá¯áá»á¬ážáááºá ááá¯á·ááŒá±á¬áá·áº áá¯á¶áá°áá áºáá¯ááᯠááœá±ážááẠááŒá áºááá¯ááºááŒá®áž áá±á¬ááºáá áºáá¯ááᯠááœá±ážáááºá ááœá±ážáá»ááºáá¬ážáá±á¬ áá¯á¶á á¶áá°ááᯠáá ááºážá á¬ážáá² áá¯ááºáá¯á¶ážáá¯ááºáááºážáá áºáá¯áá¯á¶ážááᯠáááºáá¯ááºááẠááá¯á¡ááºáááºá ááá¯áá²á·ááá¯á·áá±á¬ á¡ááºáááá¯áá®áááºááŒáá·áºá áá¯á¶áá°áá áºáá¯ááᯠááœá±ážáá»ááºáá¬ááœáẠááŸá¯ááºááœá±ážááŸá¯ááẠO(N)á K áá¯á¶áá°áá»á¬ážááᯠááœá±ážáá»ááºáá¬ááœáẠááŸá¯ááºááœá±ážááŸá¯ááẠO(N K) ~ O(N2) ááŒá áºáááºá
Quadratic ááŸá¯ááºááœá±ážááŸá¯ááẠááá¯ážááœá¬ážáá±á¬áºáááºáž ááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬áẠááŒá¯áá¯ááºááá¯ááºáááºá áá®ááá¯áá¯ááºááá¯á· áá»áœááºáá±á¬áºááá¯á· áááºáá±á¬ááºáááºá
linear-log ááŸá¯ááºááœá±ážááŸá¯ááẠá¡áá°ážáááŒáá·áº K ááŒá®ážáá»á¬ážá¡ááœáẠquadratic complexity ááẠááá¯áá±á¬ááºážáá«áááºá
áá«á áá® algorithm áá«á
Task 2. ááŒááºážáá»á¬áž
áááºááá¯áá®á¡ááœááºáž á á¬ááœááºá á¬áááºážáá»á¬ážááᯠáááá»á áœá¬ á¡ááœáŸááºážááá¯ááºáá±á¬ á¡ááœááºáá áºáá¯ááŒáá·áº áááá±á¬ááºá áœá¬ á á®ááœá²áááºá¡ááœáẠá¡ááºáááá¯áá®áááºáá áºáá¯ááᯠá¡ááá¯ááŒá¯ááẠááá¯á¡ááºáááº-
ááá·áºá¡ááœá²á·ááẠááœá²á áááºáá¬ážáá±á¬ ááŸááºáá¬ááºá¡ááœááºáž á á¬ááœááºá á¬áááºážáá±áá¬áá±á·á áºááᯠáááºáá®ážááẠáá¬áááºáá±ážáá¬ážáááºá áá±áá°áá»á¡áá¯ááºáááºááẠá¡ááœááºá¡á á¬áž M á¡á á¯á¡áá±ážá០ááááºáááᯠ(á¡ááœáŸááºážááá¯ááºáá±á¬) ááááºážá¡ááœááºááŒáá·áº á á®áá¬ážáá±á¬ ááááºáááºáž N á á¬ááœááºá á¬áááºážáá»á¬ážááᯠááœá±ážáááºááŒá áºááẠ(áá¯á¶ááŸááºá¡á¬ážááŒáá·áº N < 100 << M)á ááááºáááºáž S á á¬ááœááºá á¬áááºážáá»á¬áž (S ~ N) ááᯠáá»á±á¬áºááœá¬ážááŒá®ážáá±á¬áẠááááºáááºáž N ááᯠááœá±ážááẠá¡áááºážáááºáááºážááá·áº á¡áá¯ááºáá¬áááºááŒá áºáááºá
ááá¯ááá¯á·áá±á¬áá±ážááœááºážáá»á¬ážááᯠáááá±á¬ááºá áœá¬áá¯ááºáá±á¬ááºááẠalgorithm áá áºáá¯ááᯠá¡ááá¯ááŒá¯áá«á áá»ááºážáá»áŸááá á¹á áááºááŸáá·áº á¡ááá¯ážáá¯á¶ážá¡ááŒá±á¡áá±áá»á¬ážááœáẠO notation ááŒá®ážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á áááºážáááœááºáá»ááºááŸá¯ááá¯ááºáᬠááŸá¯ááºááœá±ážááŸá¯ááᯠááá·áºááŸááºážáá«á
á¡ááŒá±ááŸá¬ (áá®áá®ááá¯) áá±á·áá¬ááŒááºáž
34:50 ááœáẠá áááºá 6 áááá áºáá¬
á¡ááŒá± (á á¬áá¬áž) áá±á·áá¬ááŒááºáž
áá»ááºááŸá¬ááŒááºááŒá±ááŸááºážáá»ááº- á
á¬ááœááºá
á¬áááºážáá»á¬ážá¡á¬ážáá¯á¶ážááᯠá
á®áá« (á¥ááᬠááŸáá·áº
M á
á¬ááœááºá
á¬áááºážáá»á¬ážá¡á¬ážáá¯á¶ážááᯠá
á®ááœá²ááŒá®ážáá±á¬áẠáááºážááá¯á·áá²á០á¡áááºážáááºááá¯áᬠáá°ááŒááºážááẠáááá±á¬ááºááŸá¯áááŸááááºááŸá¬ áááºááŸá¬ážáá«áááºá á
á¬ááœááºá
á¬áááºážáá»á¬ážá¡á¬ážáá¯á¶ážááᯠá
á®áááºááá¯ááºá
á±áááºá¡ááœáẠalgorithm áá
áºáá¯ááẠááá·áºáá»á±á¬áºáá«áááºá
ááá¯á·áá±á¬áº áááºááẠáááºážááᯠááá¯ááááá±á¬ááºá
áœá¬ áá¯ááºáá±á¬ááºááá¯ááºááẠ- algorithm ááá¯áá¯á¶ážáá«á
ááá¯á·áá±á¬áºá áááºááœá±á·ááœáẠá á¬ááœááºá á¬áááºážá¡áá»á¬ážá á¯ááᯠáááºážáá¡ááŒá áºááŒááºá ááºááŸáá·áº ááŸáá¯ááºážááŸááºááŒá®ážáá±á¬áẠá¡ááŸáá¯ááºáá¯á¶á¡á¬áž ááŒááºáááºáááºáá±á¬ááºááŒááºážáááŒá¯áá² ááœáŸáá·áºáá áºááá¯ááºáá±á¬ááŒá±á¬áá·áº heap streaming ááẠááá¯ááá¯áááá±á¬ááºáá«áááºá á€áá²á·ááá¯á· á á®ááŒááºážá¡á¬áž Kontur ááœáẠáá®ááœááºááŒá®áž á¡áá¯á¶ážááŒá¯ááá·áº Zebra in-memory document database ááœáẠá¡áá±á¬ááºá¡áááºáá±á¬áºáá«áááºá
áá¯ááºáá±á¬ááºá áᬠáá ááŒááºááẠáá²ááŸááºááŸá¯áá»á¬áž
á¡ááŒá±á¬ááºážá¡ááœáŸá±á·á¡ááŒá±á¡áá±áá»á¬ážá¡ááœáẠá¡áááá±á¬ááºáá¯á¶áž algorithm ááᯠá¡ááá¯ááŒá¯ááẠááá¯á¡ááºáá«áááºá
ááá·áºá¡ááœá²á·ááẠN node áá»á¬ážá ááŒáá·áºáá±ááŸá¯á¡á á¯á¡áá±ážá¡ááœáẠáááºá á®ááŒááºááẠáá²ááŸááºáá±ážááá¹ááá¬ážááᯠáá±á¬áºáá±á¬ááºááẠáá¬áááºáá±ážáá¬ážáááºá i-th node á á¡ááŒá±á¡áá±á¡á¬áž (i+1)-th node ááá¯á· ááœáŸá²ááŒá±á¬ááºážááá·áºáááºá N-th node áá¡ááŒá±á¡áá±ááᯠááá node ááá¯á· ááœáŸá²ááŒá±á¬ááºážááá·áºáááºá node ááŸá áºáá¯ááẠáááºážááá¯á·áááŒááºáááºáá»á¬ážááᯠatomically áááŸááºáá±á¬á¡áá«ááœáẠáá áºáá¯áááºážáá±á¬ áá¯ááºáá±á¬ááºááŸá¯ááŸá¬ state swap ááŒá áºáááºá state swap ááẠM áá®áá®á áá¹ááá·áº ááŒá¬ááŒá±á¬ááºáž ááááŸáááá«áááºá Node ááá¯ááºážááẠáááºááŸááºáá¬ážáá±á¬ á¡ááá¯ááºá¡ááá·áºááœáẠstate swap áá áºáá¯áááºážááœáẠáá«áááºááá¯ááºáááºá
á¡á á¯á¡áá±ážáá áºáá¯ááŸá node áá»á¬ážá¡á¬ážáá¯á¶ážááᯠááœáŸá²ááŒá±á¬ááºážááẠá¡áá»áááºáááºáá»áŸááŒá¬ááááºážá
á¡ááŒá± (á á¬áá¬áž) áá±á·áá¬ááŒááºáž
áá»ááºááŸá¬ááŒááºááŒá±ááŸááºážáá»ááº- áááááŸáá·áºáá¯áááááŒááºá ááºáá»á¬ážáááŒááºáááºáá»á¬ážááá¯áááŸááºáá«á ááá¯á·áá±á¬ááºáááááŸáá·áºááááá ááá¯á·áá±á¬ááºáááááŸáá·áºá áá¯áá¹áááŸáá·áºá¡ááŒá¬ážá¡áá¬áá»á¬ážááá¯áááŸááºáá«á áá²ááŸááºááŸá¯áá áºáá¯á á®ááŒá®ážáá±á¬ááºá ááŒááºá ááºáá áºáá¯áá¡ááŒá±á¡áá±ááẠááá¯áá»ááºáá±á¬á¡áá±á¡áá¬ážááœááºááŸááááá·áºáááºá O(N) ááŒá±á¬ááºážáá²ááŸá¯áá»á¬áž ááŒá¯áá¯ááºááŒá®áž O(N M) á¡áá»áááºááᯠáá¯á¶ážá áœá²ááá«áááºá
áá áºááŒá±ážáá®á¡áá»áááºááẠááŸááºáá±á¬ááŒá±á¬áá·áº áááºááẠááŒááºá ááºáá»á¬ážá ááŒááºáááºáá»á¬ážááᯠá¡ááœá²áá»á¬ážááŒáá·áº áááŸááºááá¯ááºáááº- áááááŸáá·áº áá¯áááá ááááááŸáá·áº á áá¯áá¹áá á áááºááŒáá·áºá ááŒááºáááºáá áºáá¯áá»ááºážáááŸááºááŒá®ážáá±á¬ááºá áá¯áááá¡á áááºá¡ááá¯ááºážááá¯ááºážááẠááŸááºáááºáá±á¬á¡áá±á¡áá¬ážááœáẠááŸááá±áááºááŒá áºáááºá O(lg N) á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááᯠááŒá¯áá¯ááºááŒá®áž O(M lg N) á¡áá»áááºááᯠáá¯á¶ážá áœá²ááá«áááºá
ááá¯á·áá±á¬áºá á¡ááŒá±á¬ááºážá¡ááœáŸá±á·ááᯠlinear ááœááºááá¯ááºáá²á á¡áááºáááŒááºá¡áá»áááºá¡ááœááºáž ááá¯ááá¯áááá±á¬ááºá¡á±á¬ááºááŒá¯áá¯ááºááá¯ááºáááºá áá«ááá¯áá¯ááºááá¯á·á áááá¡ááá·áºááŸá¬á áááááŒááºá ááºáá²á·á¡ááŒá±á¡áá±ááᯠáá±á¬ááºáá¯á¶ážáá áºáá¯á áá¯ááááá áºáá¯áá²á· áá±á¬ááºáá¯á¶ážáá áºáá¯á á áááºááŒáá·áº áááŸááºááá¯á·ááá¯á¡ááºáá«áááºá áá±á¬ááºáá¯á¶ážááŒááºá ááºá á¡ááŒá±á¡áá±ááẠááŸááºáááºáá±á¬á¡áá±á¡áá¬ážááœáẠááŸááá±áááºááŒá áºáááºá ááᯠáá»áœááºá¯ááºááá¯á·ááẠáá¯áááááŒááºá ááºá á¡ááŒá±á¡áá±ááᯠáá±á¬ááºáá¯á¶ážáá áºáá¯á áááááá áºáá¯ááŸáá·áº áá±á¬ááºáá¯á¶ážáá áºáá¯ááŸáá·áº á¡ááŒá¬ážá¡áá¬ááŸáá·áº áá²ááŸááºááẠááá¯á¡ááºáá«áááºá á€á¡ááŸáá·áºá¡ááŒá±á¬ááºážááŒá®ážáá±á¬ááºá ááŒááºá ááºá¡á¬ážáá¯á¶ážáááŒááºáááºáá»á¬ážááẠááŸááºáááºáá±á¬á¡áá±á¡áá¬ážááœááºááŸááááá·áºáááºá á á¯á á¯áá±á«ááºáž O(2M) ~ O(1) ááŒá±á¬ááºážáá²ááŸá¯áá»á¬áž ááŸááá«áááºá
ááá¯ááá¯á·áá±á¬á¡ááŒá±ááẠáááºáááºááŸá¯áá áºáá¯ááẠaxial symmetries ááŸá áºáá¯á áá±á«ááºážá ááºááŸá¯áá áºáá¯ááŒá áºááŒá±á¬ááºáž ááŸááºáááá±áá±ážáá±á¬ áááºá¹áá»á¬ááá¬ááŸááºáá áºáŠážá¡á¬áž á¡á¶á·ááŒáááºááá¯ááºáá«á á áá¬ážáá ááºá áááºážááᯠáá áºáá¯á¶ážáá»ááºážááá¯ááºáá² K < N áá¬áá°ážáá»á¬ážááŒáá·áº ááŒá±á¬ááºážáá²ááŸá¯á¡ááœáẠá¡áá±ážá¡ááœá²áᯠáá±áá¯áá»á¡á¬ážááŒáá·áº á¡áááá¹áá¬ááºááœáá·áºááá¯áá¬ážáááºá (á¡ááá¡áá»áá¯ááºáááºážááᯠcomment ááŸá¬áá±ážáá±ážáá«á)
ááá±á áááœá±ááᯠááŒáá¯ááºáá¬ážá á¡ááŒá¬ážááŒá±ááŸááºážáááºážáá»á¬ážááᯠáááºáááá«ááá¬ážá ááŸááºáá»ááºáá»á¬ážááœááºáá»áŸáá±áá«á
á€áááºááŸá¬ á¡áá¯á¶ážááœáẠá¡áá¯á¶ážáááºáá±á¬ááá·áºááºá¡áá»áá¯á·ááŒá áºáááºá
- á¡ááŒá±á¬ááºážááá¯ááá¯áá±á·áá¬áá«á
á¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶ ááœá¶á·ááŒáá¯ážááá¯ážáááºáá±áž á¡ááœááºá¡ááŒáẠ- á¡ááœááºážááá¯ááºážááŸááºáááºážáá»á¬ážááá¯ááŒáá·áºáá«á
á¡á á®áááºáá¶á á¬áá»á¬ážááŸáá·áºá¡áá°áááºáááºážááŒá±á¬áºááŒá¬ ááŒáá·áºáá±ááŸá¯á áá áºáá»á¬ážá¡ááŒá±á¬ááºáž - áá®áá®ááᯠáááºáááºážá
á¬áá»á¬ážááᯠááŒáá·áºááŸá¯áá«á
áá¬áááºáá°áá»á¬ážá¡ááœáẠáá¯á¶ááŸááºááá¯ááºáá±á¬ algorithms » - áá»áœááºáá±á¬áºááá¯á·áá²á·á
á¬áááºážááœááºážáá«á
Telegram ááœáẠáá»ááºáááº
source: www.habr.com