ááá¯á·ááá¯áẠZooKeeperá etcd ááŸáá·áº Consul KV á¡ááœáẠclient C++ á á¬ááŒáá·áºááá¯ááºááᯠáá»áœááºá¯ááºááá¯á· áááºááá¯á·áá±ážáá¬ážáá²á·áááº
ááŒáá·áºáá±ááá·áºá
áá
áºáá»á¬ážá ááá¹áá¬ááœááºá áá¯á¶ááŸááºáá¯ááºáá±á¬ááºá
áá¬áá»á¬ážá
áœá¬ááŸááááº- á¡á
á¯á¡áá±ážáááœá²á·á
ááºážáá¯á¶á¡ááŒá±á¬ááºáž á¡áá»ááºá¡áááºáá»á¬ážááᯠááááºážáááºážááŒááºážá nodes áá»á¬ážáááœá²á·á
ááºážáá¯á¶ááᯠá
á®áá¶ááá·áºááœá²ááŒááºážá ááŸá¬ážááœááºážáá±áá±á¬ node áá»á¬ážááᯠááŸá¬ááœá±ááŒááºážá áá±á«ááºážáá±á¬ááºáá
áºáŠážááᯠááœá±ážáá»ááºááŒááºáž
á¡ááŸá
áºáá¬áá¡á¬ážááŒáá·áºá á€á
áá
áºáá»á¬ážá¡á¬ážáá¯á¶ážááẠá¡ááŸá¬áž-áá¶ááá¯ááºáááºááŸááá±á¬á linearizable key-value á
ááá¯ážááá¯ááºáá»á¬ážááŒá
áºáááºá áááºážááá¯á·á áá±áá¬áá±á¬áºáááºáá»á¬ážááẠáááá¬áááºááŸá¬ážáá±á¬ ááœá²ááŒá¬ážááŸá¯áá»á¬ážááŸááá±á¬áºáááºáž áá±á¬ááºááá¯ááºážááœáẠáá»áœááºá¯ááºááá¯á· ááœá±ážááœá±ážááá·áºá¡áá¬áá»á¬ážááẠáá°áá®áá±á¬ áááºááœá±á·áá»áá±á¬ ááŒá¿áá¬áá»á¬ážááᯠááŒá±ááŸááºážááá¯ááºááŒáááºá áááºááŸá¬ážáááºááŸá¬á ááŸáááŸáá¯ááºážáá±ážáááºáá±á¬ááºááŸá¯ááá¯á¡áá¯á¶ážááŒá¯ááá·áº á¡ááá®áá±ážááŸááºážáá
áºáá¯á
á®ááẠáááºážááá¯á·áá²ááŸáá
áºáá¯ááŸáá·áº áá»áááºáááºáá¬ážáá±á¬ááŒá±á¬áá·áº ááá°áá®áá±á¬á¡ááá®áá±ážááŸááºážáá»á¬ážá¡ááœáẠáá°áá®áá±á¬ááŒá¿áá¬áá»á¬ážááá¯ááŒá±ááŸááºážáá±ážááá·áº áá±áá¬á
ááºáá¬áá
áºáá¯ááŸá á
áá
áºáá»á¬ážá
áœá¬ááᯠáá¶á·ááá¯ážáá±ážááẠááá¯á¡ááºáá¬ááá¯ááºáááºá
á€ááŒá¿áá¬ááᯠááŒá±ááŸááºážááẠá
áááºáá°ážááẠááŒá
ááŒá±ážáá» á¡ááá¯ááºáááºáá¶á¡á±áá»ááºá
á®áá
áºáá¯á០áá±á«áºáá±á«ááºáá¬áá²á·ááŒá®áž áááºážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááẠáá»á±á¬ááºážáá¬ážá¡ááœá²á·áááºáá
áºá
á¯á áá»áœááºá¯ááºááá¯á·á¡ááœáẠá¡áá»á¯á¶ážáááºáá«áááºá
ZooKeeperá etcd ááŸáá·áº Consul KV ááá¯á·ááŸáá·áº ááœá²áááºáá¯ááºáá±á¬ááºáááºá¡ááœáẠáá¯á¶á¡ááºáá¬áá±á·á
áºááᯠáá¶á·ááá¯ážáá±ážááá·áº á
á¬ááŒáá·áºááá¯ááºáá
áºáá¯ááᯠáááºáá®ážááá¯ááºáá²á·áááºá á
á¬ááŒáá·áºááá¯ááºááᯠC++ ááŒáá·áº áá±ážáá¬ážáá¬ážáá±á¬áºáááºáž áááºážááᯠá¡ááŒá¬ážáá¬áá¬á
áá¬ážáá»á¬ážááá¯á· ááá¯á·ááẠá¡á
á®á¡á
ááºááŸááá«áááºá
áá±áá¬áá±á¬áºáááºáá»á¬áž
ááá°áá®áá±á¬ á áá áºáá¯á¶ážáá»áá¯ážá¡ááœáẠáá¯á¶á¡ááºáá¬áá±á·á áºááᯠáááºáá±á¬ááºáááºá áááºážááá¯á·ááœáẠáá°áá®ááá·áºá¡áá¬áá»á¬ážááŸáá·áº ááœá²ááŒá¬ážáá¯á¶ááá¯á·ááᯠáá¬ážáááºááẠááá¯á¡ááºáááºá á¡ááŒá±ááŸá¬ááŒáá·áºáá¡á±á¬ááºá
ZooKeeper
áá±á¬á·áá»á¬ážááᯠáá
áºáááºááœáẠá
á¯á
ááºážáá¬ážááŒá®áž nodes áá¯áá±á«áºáááºá ááá¯á·ááŒá±á¬áá·áºá node áá
áºáá¯á¡ááœááºáááºážáááá±ážáá»á¬ážá
á¬áááºážááá¯áááºáááá¯ááºáááºá znode áááºáá®ážááŒááºáž (create) ááŸáá·áº value (setData) ááᯠááŒá±á¬ááºážáá²ááŒááºážá áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠááœá²ááŒá¬ážáá¬ážáá«áááº- ááŸáááŒá®ážáá¬ážáá±á¬á·áá»á¬ážááá¯áᬠáááºááŒá®áž ááŒá±á¬ááºážáá²ááá¯ááºáá«áááºá áá¬áá®áá»á¬ážááẠnode áá
áºáá¯ááááºááŸáááŸá¯ááá¯á
á
áºáá±ážááŒááºážá áááºááá¯ážáá
áºáá¯áááºááŒááºážááŸáá·áºááá±ážáá»á¬ážááá°ááŒááºážááá¯ááºáá±á¬ááºááŸá¯áá»á¬ážááœááºááœá²ááá¯ááºáááºá Watch ááẠáá¬áá¬áá±á«áºááŸá áááºááá¯ááºáá¬áá±áá¬áá¬ážááŸááºážááŒá±á¬ááºážáá²ááœá¬ážáá±á¬á¡áá«ááœáẠáá
áºááŒáááºáááºážáá¯ááºáá±á¬ááºááá·áº á¡á
áá»áá¯ážáá
áºáá¯ááŒá
áºáááºá áá»ááºááœááºááŸá¯áá»á¬ážááᯠááŸá¬ááœá±ááẠáá±á«áºáááºáá¯á¶ááŸááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áááºá áááºážááá¯á·ááᯠáááºáá®ážáá±á¬ client á session ááŸáá·áº áá»áááºáááºáá¬ážáááºá áááá¯ááºážááá·áºáá
áºáŠážááẠá
ááºááŸááºáá
áºáá¯á¡á¬áž ááááºááá¯ááºáá±á¬á¡áá« ááá¯á·ááá¯áẠáááºážááááºááŸáááŸá¯ááᯠZooKeeper á¡ááŒá±á¬ááºážááŒá¬ážááŒááºážááᯠáááºááá¯ááºáá±á¬á¡áá«á á¡ááá¯áá« node áá»á¬ážááᯠá¡ááá¯á¡áá»á±á¬áẠáá»ááºááœá¬ážáááºááŒá
áºáááºá ááá¯ážááŸááºážáá±á¬ ááœá±áá±ážááœá±áá°áá»á¬ážááᯠáá¶á·ááá¯ážáá±ážááẠ- áááºážááá¯á·á¡áááºá០á¡áááºážáá¯á¶ážáá
áºáá¯á¡ááœáẠáááŒá
áºááá¯ááºáá«á á¡á¬ážáá¯á¶ážá¡á±á¬ááºááŒááºááẠááá¯á·ááá¯áẠáá»ááŸá¯á¶ážááá·áº áá¯ááºáá±á¬ááºáá»ááºá¡á
á¯á¶á
á áááºááá¯á·
á€á
áá
áºá developer áá»á¬ážááẠZooKeeper á០áááºááŸá¬ážá
áœá¬ ááŸá¯á¶á·áá±á¬áºáá¶áá²á·ááá±á¬ááŒá±á¬áá·áº á¡áá¬á¡á¬ážáá¯á¶ážááᯠááœá²ááŒá¬ážá
áœá¬ áá¯ááºáá±á¬ááºáá²á·áááºá áá±á¬á·áá»á¬ážá á¡áááºáááºážá¡ááá·áºáááŸááá±á¬áºáááºáž áááºážááá¯á·ááẠá¡áááá¬ááºá¡á á
á®á
á¥áºáá¬ážááá·áº áááºááŸááºáá¯á¶á
á¶ááŒá
áºáááºá áááºááẠáááºááŸááºáá¬ážáá±á¬ á¡ááá¯ááºážá¡ááŒá¬ážáá
áºáá¯ááŸá áá±á¬á·á¡á¬ážáá¯á¶ážááᯠááá° ááá¯á·ááá¯áẠáá»ááºááá¯ááºáááºá á€ááœá²á·á
ááºážáá¯á¶ááẠáá°ážáááºážáááºáá¯áááºááá±á¬áºáááºáž á¡ááŸááºááááºá¡á¬ážááŒáá·áº áááºážááẠá¡ááœááºáááºááŸá¬ážááŒá®áž á¡áááºá¡á±á¬ááºá¡ááŒááºááᯠáááºážááŸáá
áºááá·áº á¡ááœááºááá° á¡áá¯áá°ááá¯ááºáááºá
etcd ááœáẠá
á¶ááŸáá¯ááºážááŸá¥áºááŒá®áž áááºááŸááºáá¯ááºáá±á¬ááºááŸá¯ ááá«ááŸááá±á¬áºáááºáž áááºážááœáẠááá¯ááá¯áá±á¬ááºážááœááºáá±á¬ á¡áá¬áá
áºáá¯ááŸááááº- ááœá±áá±ážááœá±áá°áá»á¬ážá áá¯ááºáá«áááºá áááºážááá¯á·ááẠá
áá
áºáá¯á¶ážáá¯á
áá¯á¶ážááœáẠáááºááŸááá±á¬áºáááºážá etcd á¡áá±á¬ááºážá¡áááºáá»á¬ážááẠá¡áá°ážáá±á¬ááºážááœááºáá«áááºá áááºážááá¯á·ááœáẠá
á
áºáá±ážáááºá á¡á±á¬ááºááŒááºááŸá¯á áá»ááŸá¯á¶ážááŸá¯ áá¯á¶ážáá¯áá«áááºáááºá áááááá±á¬ááºááœáẠá¡ááŒá±á¡áá±áá»á¬áž á¡á
á¯á¶áá«ááŸááááºá áá¯áááááŸáá·áº áááá - áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá ááœá±áá±ážááœá±áá°ááᯠá¡áá¯ááŒá°á
áá
áºááŒáá·áº áá¯ááºáá±á¬ááºáá«áááºá á¡ááŒá±á¡áá±á¡á¬ážáá¯á¶ážááŸááºáá«áá á¡á±á¬ááºááŒááºááŸá¯ááá±á¬ááºááá¯áá¯ááºáá±á¬ááºáááºá ááá¯á·ááá¯ááºáá«á áá»ááŸá¯á¶ážááŸá¯ááááºááá¯á·ááŒááºážááá¯áá¯ááºáá±á¬ááºáááºá API 3.3 ááœááºá á¡á±á¬ááºááŒááºááŸá¯ááŸáá·áº áá»ááŸá¯á¶ážááŸá¯ááááºááá¯á·ááŒááºážáá»á¬ážááœáẠá¡ááá¯ááºá¡ááŒá¯á¶ááŒá¯áá¬ážáá±á¬ ááœá±áá±ážááœá±áá°áá»á¬áž áá«áááºááá¯ááºáááºá ááá¯ááá¯áááºááŸá¬á áááá¬ážá¡ááá¯ááºáá»á¬áž áá®ážáá«ážá¡ááá·áºá á¡ááŒá±á¡áá±á¡ááá¯áẠáááºáá±á¬ááºááŸá¯áá»á¬ážááᯠá¡ááºáááºááŒáá·áº áá¯ááºáá±á¬ááºááẠááŒá
áºááá¯ááºáááºá á
á
áºáá±ážááŸá¯áá»á¬ážááŸáá·áº áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá០áááºááá·áºá¡áá¬áá»á¬áž ááŸááááºááᯠáááºááá¯ááá¯áá±á·áá¬ááá¯ááºáá«áááºá
áá¬áá®áá»á¬ážááẠá¡áááºážáááºááá¯ááá¯ááŸá¯ááºááœá±ážááŒá®áž ááŒááºáááºá¡áá¯á¶ážááŒá¯ááá¯ááºáá±á¬áºáááºáž á€áá±áá¬ááœááºáááºážááŸááá«áááºá ááá¯ááá¯áááºááŸá¬á áá±á¬á·á¡ááœá¬á¡áá±ážáá áºáá¯ááœáẠáá¬áá®ááᯠááá·áºááœááºážááŒá®ážáá±á¬ááºá áááºááẠááááá¯á¶ážáá¬áá®ááᯠááááºáá»ááºááá»ááºáž á€á¡ááœá¬á¡áá±ážááŸá á¡ááºááááºá¡á¬ážáá¯á¶ážááᯠáááºáá¶áááŸááááºááŒá áºáááºá etcd ááœáẠZooKeeper client sessions á analogue áá»á¬ážááẠá¡ááŸá¬ážáá»á¬ážááŒá áºáááºá
áá±á¬ááºá á áºááẠK.V.
á€áá±áá¬ááœáẠáááºážáá»ááºáá±á¬ á¡áááºá¡á±á¬ááºááœá²á·á ááºážáá¯á¶áááºážáááŸááá±á¬áºáááºáž áá±á¬ááºá á áºáááºááẠáááºážááœááºááŸááá±ááá·áºá¡ááœááºá¡ááŒááºááᯠáááºáá®ážááá¯ááºáááº- áááºááŸááºáá¬ážáá±á¬ááŸá±á·áááºááŒáá·áº áá±á¬á·á¡á¬ážáá¯á¶ážááᯠááá°ááá¯ááºááŒá®ážá ááá¯ááá¯áááºááŸá¬ áá±á¬á·á "subtree" ááŒáá·áº á¡áá¯ááºáá¯ááºááá¯ááºáááºá ááá¯ááá¯á·áá±á¬áá±ážááœááºážáá»á¬ážááᯠrecursive áá¯áá±á«áºáááºá ááá¯á·á¡ááŒááºá áá±á¬ááºá á áºáááºááẠáá»ááºáá»ááºáž âááá±ážáá»á¬ážâ áááŸáááŒááºážááŸáá·áº áááºááá¯ááºááá·áº ááŸá±á·áááºáá±á¬ááºááœáẠáááºááŸááºáá¬ážáá±á¬ á¡áá¹ááá¬ááá«áá±á¬ áá±á¬á·áá»á¬ážááá¯áᬠááœá±ážáá»ááºááá¯ááºáááºá ááá¯á·áá±á¬áº áááºážááẠá¡áááºá¡á±á¬ááºááœá²á·á ááºážáá¯á¶á áá¯á¶áááºážááá¹áá¬ááºááŒá áºááŒá±á¬ááºáž á¡ááá¡áá» ááŸááºáá¬ážáá¬ážááá·áºáá«áááº- áááºážáááááááŸááá«á áá±á¬á·áá áºáá¯áááºáá®ážááẠááá¯á·ááá¯áẠááá±ážáá»á¬ážáá«ááŸááá±á¬áá±á¬á·ááᯠáá»ááºáá áºááá¯ááºááŒá®ážá ááá±ážáá»á¬ážááᯠá áá áºááœáẠáááºáááºááááºážáááºážáá¬ážáááºááŒá áºááŒá®ážá
áá¬áá®áá»á¬ážá¡á
á¬áž áá±á¬ááºá
á
áºáááºááẠHTTP áá±á¬ááºážááá¯áá»ááºáá»á¬ážááᯠááááºááá¯á·áá¬ážáááºá á¡ááŸá
áºáá¬áá¡á¬ážááŒáá·áºá áááºážááá¯á·ááẠáá±áá¬áááºááŸá¯ááŒááºážáááºážáááºážááá¯á· áá¬áá¬ááºáá±á«áºááá¯ááŸá¯áá»á¬ážááŒá
áºááŒá®ážá áááºážááá¯á·ááẠá¡ááŒá¬ážááá·áºáááºáá»ááºáá»á¬ážááŸáá·áºá¡áá° áá±áá¬ááá±á¬ááºáá¯á¶ážáááá¬ážáá±á¬áá¬ážááŸááºážááᯠááœáŸááºááŒáá¬ážáááºá áá¬áá¬áá±á«áºááŸá áááºááá¯ááºáá¬áá±áá¬á áááºááŸááá¬ážááŸááºážááẠáááºááŸááºáá¬ážááá·áºáá
áºáá¯ááẠááŒá®ážáá«áá ááá¯á·ááá¯áẠáááºááá¯ážááŒá±á¬ááºážáá²ááœá¬ážáá±á¬á¡áá«ááœáẠáá¯á¶á·ááŒááºáá»áẠáá»ááºáá»ááºážááŒááºááááá·áºáááºá áá±á¬á·áá»á¬ážááŸáá·áº á¡áá»áááºáááœá±áž ááœá²áá¯á¶ážááá¯ááºáá±á¬ á
ááºááŸááºáá»á¬ážáááºáž ááŸááá«áááºá á
ááºááŸááºáá»á¬ážááá¯áá»ááºááŒááºážááẠáááºá
ááºáá±á¬á·áá»á¬ážááá¯áá»ááºááŒááºážááá¯á· áŠážáááºá
á±ááá·áº etcd ááŸáá·áº ZooKeeper ááŸáá·áºááá°áá²á áááºážááá¯á·ááŸáá·áº ááá¯ážááá¯ážááŸááºážááŸááºážáá»áááºáááºáá¬ážáá±á¬ session ááŸáá¯ááºáá
áºáá¯ááŸááááºááᯠáááááŒá¯ááá·áºáá«áááºá áááŸáááá¯ááºáá«áááºá
á¡á¬ážáá¯á¶ážááᯠáá±á«ááºážááá·áºááá¯ááºáá«á
ZooKeeper ááœáẠá¡ááá¯ááºáá¬áá¯á¶áž áá±áá¬áá±á¬áºááẠááŸááááºá etcd ááœááºáááŸáááá¯ááºááá·áº áá±á¬áºááŒááŸá¯á¡ááœá¬á¡áá±ážáá±ážááœááºážáá»á¬ážááᯠZooKeeper ááá¯á·ááá¯áẠConsul ááŸá áºáá¯áá¯á¶ážááœáẠáááááá±á¬ááºáá±á¬áẠá¡áá¯áá°ááááá¯ááºáá«á áááºáá±á¬ááºááŸá¯á¡á¬ážáá¯á¶ážá០á¡áá±á¬ááºážáá¯á¶ážáá»á¬ážááᯠáá±á«ááºážá ááºááá·áºááœááºážááẠááŒáá¯ážá á¬ážáááºážá áá»áœááºá¯ááºááá¯á·ááẠá¡á±á¬ááºáá«áááá¬áááºááŸá¬ážáá±á¬ááŒáœááºážáá»ááºáá»á¬ážááŒáá·áº ZooKeeper á¡ááºáá¬áá±á·á áºááŸáá·áº áá°áá®áá¯áá®ážáá«ážááŸááá±á¬ á¡ááºáá¬áá±á·á áºáá áºáá¯ááŒáá·áº á¡áá¯á¶ážáááºáá²á·áá«áááºá
sequenceá container ááŸáá·áº TTL node áá»á¬áž ááá±á¬ááºáá¶áá«á- ACL áá»á¬ážááᯠááá¶á·ááá¯ážáá«á
- set method ááẠáááºážááœááºáááŸááá»áŸáẠáá±á¬á·áá áºáá¯áááºáá®ážááẠ(ZK setData ááœáẠá€ááá á¹á ááœáẠerror áá áºáá¯ááŒááºáá±ážáááº)
- set ááŸáá·áº cas áááºážáááºážáá»á¬ážááᯠááœá²ááŒá¬ážáá¬ážáá«ááẠ(ZK ááœáẠáááºážááá¯á·ááẠá¡ááŒá±áá¶á¡á¬ážááŒáá·áº áá°áá®áá±á¬á¡áá¬ááŒá áºáááº)
- erase method ááẠnode áá áºáá¯á¡á¬áž áááºážá subtree ááŸáá·áºá¡áá° áá»ááºááẠ(ZK delete ááœáẠnode ááœáẠááá±ážáá»á¬ážáá«áá»áŸáẠerror áá áºáá¯ááŒááºáá±ážáááº)
- áá±á¬á·áá
áºáá¯á
á®á¡ááœáẠáá¬ážááŸááºážáá
áºáá¯áá¬ááŸáááẠ- áááºááá¯ážáá¬ážááŸááºáž (ZK ááœááº
áá°ááá¯á·áá¯á¶ážáá±á¬ááºááŸáááẠ)
sequential node áá»á¬ážááᯠááŒááºážáááºááŒááºážááẠetcd ááŸáá·áº Consul ááá¯á·á¡ááœáẠbuilt-in áá¶á·ááá¯ážááŸá¯ áááŸáááŒááºážááŒá±á¬áá·áºááŒá áºááŒá®áž áááºážááá¯á·ááᯠáááŸááá¬áá±á¬ library interface áááááºááœáẠá¡áá¯á¶ážááŒá¯áá°á០áááºážááá¯á·ááᯠá¡ááœááºááá° á¡áá±á¬ááºá¡áááºáá±á¬áºááá¯ááºáááºá
vertex ááá¯áá»ááºááá·áºá¡áá« ZooKeeper ááŸáá·áºáááºáá°áá±á¬á¡áá°á¡áá»áá·áºááá¯á¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážááẠetcd ááŸáá·áº Consul ááœááºáá±á¬á·áá áºáá¯á á®á¡ááœááºáá®ážááŒá¬ážááá±ážáá±á¬ááºáá¬áá áºáá¯ááá¯ááááºážááááºážáá¬ážáááºááá¯á¡ááºáááºá áááºáá¬á¡áá»ááºá¡áááºááᯠááááºážáááºážááŒááºážá០ááŸá±á¬ááºááŸá¬ážááẠáá»áœááºá¯ááºááá¯á·ááŒáá¯ážá á¬ážáá±á¬ááŒá±á¬áá·áºá á¡ááœá²áá áºáá¯áá¯á¶ážááᯠáá»ááºááẠáá¯á¶ážááŒááºáá²á·áááºá
ááááá¬ááºá¡á¬ážááŒáá·áº á¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážá
ááá°áá®áá±á¬á áá áºáá»á¬ážááœáẠá á¬ááŒáá·áºááá¯ááºáá»ááºááŸá¬ááŒááºááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážá á¡áá»áá¯á·áá±á¬ááá¹ááá»á¬ážááᯠá¡áá®ážáááºáá±á·áá¬ááŒáá·áºááŒáá«á áá¯á·á
á¡áááºá¡á±á¬áẠá áááºááŒáá·áº
etcd ááœáẠá¡áááºá¡á±á¬áẠááŒááºááœááºážááᯠááááºážááááºážááŒááºážááẠá
áááºáááºá
á¬ážá
áᬠá¡áá±á¬ááºážáá¯á¶áž á¡áá¯ááºáá»á¬ážáá²á០áá
áºáᯠááŒá
áºáá¬áá²á·áááºá Range queries ááẠáááºááŸááºáá¬ážáá±á¬ prefix ááŒáá·áº áá±á¬á·áá»á¬ážá
á¬áááºážááᯠááœááºáá°á
áœá¬ ááŒááºáááºááá°á
á±áááºá á¥ááá¬á¡á¬ážááŒáá·áºá áááºááá¯á¡ááºááá»áŸá¡áá¬á¡á¬ážáá¯á¶ážááŸáá·áºá
áááºáááºá "/foo"
á¡ááœá¬á¡áá±ážáá
áºáá¯áá±á¬ááºážáá«áááºá ["/foo", "/fop")
. ááá¯á·áá±á¬áº áááºážááẠáá±á¬á·ááá
áºáááºáá¡ááœá²áá
áºáá¯áá¯á¶ážááᯠááŒááºáá±ážáááá·áºáááºá áááºážááẠá¡áááºááœá²ááŒá®ážáááºááá¯áá»áŸáẠáááºáá¶ááá¯ááºáááºááá¯ááºáá±á ááááá±á¬á· áá»áœááºáá±á¬áºááá¯á·á á¡ááá áá¬áá¬ááŒááºáá²á· ááá¹ááá¬ážáá
áºáá¯ááᯠáá¯á¶ážááá¯á· á
á®á
ááºáá¬ážáááºá
"/foo" -> "u01/foo"
"/foo/bar" -> "u02/foo/bar"
ááŒá®ážááẠáá±á¬á·áá±ážááœá± á¡á¬ážáá¯á¶ážááᯠáá»ááºáá»ááºáž áá°ááá¯ááºáá«á "/foo"
á¡ááá¯ááºážá¡ááŒá¬ážááᯠáá±á¬ááºážááá¯ááŒááºážááŒáá·áº ááŒá
áºááá¯ááºáááºá ["u02/foo/", "u02/foo0")
. áá¯ááºáááºá ASCII ááŸá¬ "0"
áá±á¬ááºááŸáááºáááºá "/"
.
ááá¯á·áá±á¬áºá€ááá
á¹á
ááœáẠvertex ááá¯áááºááŸá¬ážáááºáááºááá¯á·á¡áá±á¬ááºá¡áááºáá±á¬áºáááºáááºážá á¡áá»áá¯ážá¡á
á¬ážá á¡ááá¯ááºážá¡ááŒá¬ážá¡á¬ážáá¯á¶ážááᯠáá»ááºááẠááá¯á¡ááºááŒá±á¬ááºáž ááœááºáá±á«áºáá¬áá«áááºá ["uXX/foo/", "uXX/foo0")
01 á០FF á០XX á¡ááœááºá ááŒá®ážáá±á¬á· áá»áœááºáá±á¬áºááá¯á· á¡áá²ááᯠááŒá±ážááœá¬ážáááºá
ááááºá¡áá±ááŒáá·áºá áá±á¬á·áá»ááºááŒááºážááŸáá·áº ááá±ážá á¬áááºážááá°ááŒááºáž ááŸá áºáá¯á áá¯á¶ážááᯠáááááá±á¬ááºáá±á¬ááºá¡áá±á¬ááºá¡áááºáá±á¬áºááá¯ááºá á±ááá·áº ááá¯ážááŸááºážáá±á¬áá±á¬á·ááŒá±á¬ááºážáá²ááŒááºážá áá áºáá áºáá¯ááᯠáá®ááœááºáá²á·áááºá áá±á¬ááºáá¯á¶áž ááá¯áááºáááá¯ááºáá® á¡áá°ážáá¬ááºáá±á¬ááºáá áºáᯠááá·áºááẠáá¯á¶áá±á¬ááºáá«áááºá á¥ááá¬á¡á¬ážááŒááºá·:
"/very" -> "/u00very"
"/very/long" -> "/very/u00long"
"/very/long/path" -> "/very/long/u00path"
ááá¯á·áá±á¬áẠáá±á¬á·ááᯠáá»ááºááá¯ááºáááºá "/very"
áá»ááºááŸá¯á¡ááŒá
áºááá¯á·ááŒá±á¬ááºážáá²ááœá¬ážáááºá "/u00very"
ááŸáá·áº á¡ááá¯ááºážá¡ááŒá¬áž ["/very/", "/very0")
ááŸáá·áº ááá±ážáá»á¬ážá¡á¬ážáá¯á¶áž ááá°ááŒááºáž - á¡ááá¯ááºážá¡ááŒá¬ážá០áá±á¬á·áá»á¬ážáá±á¬ááºážáá¶ááŒááºážá ["/very/u00", "/very/u01")
.
ZooKeeper ááŸá áá±á¬á·ááᯠáááºááŸá¬ážááŒááºážá
áá»áœááºáá±á¬áºááŒá±á¬áá²á·áááá¯áá² ZooKeeper ááŸá¬ Node áá±ážááœá±ááŸáááẠáá»ááºááá¯á·áááá«áá°ážá áá»áœááºá¯ááºááá¯á·ááẠáá áºáááºááœá²ááŸáá·áºá¡áá° áá±á¬á·ááᯠáá»ááºááá¯áá«áááºá áá»áœááºáá±á¬áºáá¬áá¯ááºáááºá·ááá²? áá«ááᯠá¡áá±á¬ááºážááŒááºá áááºáá²á· áá¯ááºáááºá ááááŠážá áœá¬á áá»áœááºá¯ááºááá¯á·ááẠáá®ážááŒá¬ážáá±ážááœááºážáá áºáá¯ááŒáá·áº vertex áá áºáá¯á á®á ááá±ážáá»á¬ážááᯠááá°ááŒá®áž áá áºáááºááœá²ááᯠáááºáá«ááá²áá² ááŸááºááŒáá·áºáááºá ááá¯á·áá±á¬áẠáá»áœááºá¯ááºááá¯á·ááẠááŸááºáááºáá±á¬á¡á á®á¡á á¥áºááŒáá·áº subtree á node á¡á¬ážáá¯á¶ážááá¯áá»ááºáááºááŒáá¯ážá á¬ážáá±á¬ ááœá±áá±ážááœá±áá°áá áºáá¯áááºáá±á¬ááºáá«áááºá áá¯ááºáá«áááºáá áá áºáááºááœá²áá áºáá¯ááá¯áááºááŒá®áž áá»ááºááá¯ááºáá²á·á¡áá« á¡ááŒá±á¬ááºážá¡áá²ááœá± ááŒá áºáá±á«áºáá¬ááá¯ááºáá«áááºá á€ááá á¹á ááœááºá ááœá±áá±ážááœá±áá°áá»ááºááœááºáááá·áºáááºá ááá¯á·á¡ááŒááºá áááºááŸá¯ááŒááºážáá¯ááºáááºážá ááºá¡ááœááºáž áá áºáááºááœá²ááẠááŒá±á¬ááºážáá²ááá¯ááºáááºá á¥ááá¬á ဠnode ááᯠáá»ááºááŒá®ážááŒá áºáá«á áá±á¬áẠnode á áá¬ážááá®ážáá»á¬ážá¡ááœáẠáá±á¬ááºážááá¯ááŸá¯áá áºáá¯ááẠá¡ááŸá¬ážá¡ááœááºážáá áºáᯠááŒááºááŒá áºááœá¬ážááá¯ááºáááºá ááá á¹á ááŸá áºáá¯á áá¯á¶ážááœááºá áá»áœááºá¯ááºááá¯á·ááẠáá¯ááºáááºážá ááºáá áºáá¯áá¯á¶ážááᯠáá áºáááºááŒááºáá¯ááºáá«áááºá
á€áááºážáááºážááẠááá±ážáá»á¬ážááŸááá»áŸáẠáá±á¬á·ááá¯áá»ááºááŒááºážááẠá¡ááœááºáááá±á¬ááºááŸá¯áááŸáááá·áºá¡ááŒááºá á¡ááá®áá±ážááŸááºážááẠáá áºáááºááœá²áá»á¬ážááŸáá·áº áááºáááºáá¯ááºáá±á¬ááºáá«áá áá»ááºááŒááºážááŸáá·áº áá±á¬á·áá»á¬ážáááºáá®ážááŒááºážááá¯á·ááᯠáá¯ááºáá±á¬ááºáá«á ááá¯ááááºáááá±á¬ááºáááºá ááá¯á·áá±á¬áºá áááºážááẠáá»áœááºá¯ááºááá¯á·á¡á¬áž etcd ááŸáá·áº Consul ááœáẠá¡ááŒá¬ážáááºážáááºážáá»á¬áž á¡áá±á¬ááºá¡áááºáá±á¬áºáá¬ááœáẠááŸá¯ááºááœá±ážááŸá¯ááᯠááŸá±á¬ááºááŸá¬ážááá¯ááºá á±áá²á·áááºá
ZooKeeper ááœááºáááºááŸááºáá¬ážáááºá
ZooKeeper ááœáẠáá áºáááºááœá²á·á ááºážáá¯á¶ (áááºáá®ážá áá»ááºáá áºá getChildren) ááŸáá·áº áá¯ááºáá±á¬ááºááá·áº áá®ážááŒá¬ážáááºážáááºážáá»á¬áž ááŸáááŒá®áž node áá»á¬áž (setDataá getData) ááœáẠáá±áá¬ááŸáá·áº á¡áá¯ááºáá¯ááºáá±á¬ áá®ážááŒá¬ážáááºážáááºážáá»á¬áž ááŸááá«áááºá ááá¯á·á¡ááŒááºá áááºážáááºážá¡á¬ážáá¯á¶ážááœáẠáááºážáá»ááºáá±á¬ ááŒáá¯áááºáááºááŸááºáá»ááºáá»á¬áž ááŸááááº- node ááœáẠááŸááá±áá«á áááºáá®ážáá«á á¡ááŸá¬ážáá áºáᯠááŒááºááŒá áºááœá¬ážáá«áááºá áááŸááá±ážáá«á áááºáá®ážááŒááºážá áá»ááºááŒááºáž ááá¯á·ááá¯áẠáááºááŸááºáá±áá¬á áá±á¬á·áá áºáá¯ááŸááá±ááŒááºážááᯠáá ááºážá á¬ážáá² áá±á«áºááá¯ááºáá±á¬ áááºááŸááºáááºážáááºážáá áºáᯠááá¯á¡ááºáá«áááºá
ááœá±ážáá»ááºá áá¬áá áºáá¯ááŸá¬ áá»ááºááŒááºážáá²á·ááá¯á· á¡áá±á¬ááºážááŒááºáá»ááºážáááºáááºážááᯠáá°ááŒááºážááŒá áºáááºá Node ááŸááááŸá á á áºáá±ážáá«á ááŸááá»áŸáẠsetData ááá¯áá±á«áºááá¯áá«á ááá¯ááºáá«á áááºáá®ážáá«á áá±á¬ááºáá¯á¶ážáááºážáááºážááŸá¬ error áá áºáá¯ááŒááºáá±á«áºáá¬áá«áá áááºážááᯠáá áºáááºááŒááºáá¯ááºáá«á ááááá¯á¶ážáááááŒá¯áááá·áºá¡áá»ááºááŸá¬ ááŒá áºáááºááŸá¯á ááºážáááºááŸá¯ááẠá¡áááá¹áá¬ááºáááŸááá±á áááºáá»ááºáá»ááºážáááºáá®ážááŸá¯ááá¯áá±á«áºááá¯ááá¯ááºáááºá á¡á±á¬ááºááŒááºá áœá¬ ááŒá®ážááŒá±á¬ááºááŒááºážááŸá¬ node áááŸáá áááºážááᯠáááºáá®ážáá¬ážááŒá±á¬ááºáž ááá¯ááá¯áááºá ááá¯ááºáá«á create ááẠsetData ááá¯áá±á«áºááẠááá¯á¡ááºááŒá®áž ááá·áºáá»á±á¬áºáá±á¬ error ááᯠááŒááºáá±ážáá«áááºá áá¯ááºáá«áááºá áá±á«áºááá¯ááŸá¯áá»á¬ážááŒá¬ážááœááºá á¡ááŒáá¯ááºáá±á«áºááá¯ááŸá¯áá áºáá¯á០vertex ááᯠáá»ááºáá áºááá¯ááºááŒá®áž setData áááºáááºáž error áá áºáá¯ááŒááºáááºáá¬áááºááŒá áºáááºá á€ááá á¹á ááœááºá áááºááẠáááºážááᯠáááºáááŒá¯áá¯ááºááá¯ááºáá±á¬áºáááºáž áááºážááẠááá¯ááºáááºáá«ááá¬ážá
á¡áááºá áááºážáááºážááŸá áºáá¯áá¯á¶ážááẠá¡ááŸá¬ážáá áºáá¯ááŒááºááŒá áºááœá¬ážáá«áá á¡ááŒáá¯ááºá¡ááá¯áẠáá»ááºááá¯ááºááŒááºážááŒá áºáááºááᯠáá»áœááºá¯ááºááá¯á·áá±áá»á¬áááá«áááºá áá±á«áºááá¯ááŸá¯áááºááŸááºááŒá®ážáá±á¬áẠá€áá»ááºáá áºááŸá¯ ááŒá áºááœá¬ážáá²á·ááŒá±á¬ááºáž á áááºáá°ážááŒáá·áºááŒáá«á áá¯á·á á¡á²áá®á¡áá«ááŸá¬ áá»áœááºáá±á¬áºááá¯á· ááŒáá¯ážá á¬ážáá±áá²á· á¡áááá¹áá«ááºá áá»ááºááŒá®ážáá¬ážáá«á ááá¯ááá¯áááºááŸá¬ á¡ááŸááºááŸá¬ áááºááá·áºá¡áá¬áá»áŸ ááá±ážáá¬ážáá»áŸááºááẠááᯠset ááᯠá¡á±á¬ááºááŒááºá áœá¬ áá¯ááºáá±á¬ááºáá²á·áááºáᯠáá»áœááºá¯ááºááá¯á· áá°áááá¯ááºáááºá
áááºážááá¬ááá¯ááºáá¬á¡áá±ážá áááºá¡áá»ááºáá»á¬áž
á€ááá¹áááœáẠáá»áœááºá¯ááºááá¯á·ááẠááŒáá·áºáá±ááŸá¯á
áá
áºáá»á¬ážá០áá±áá¹áá¡áá¬ážáá°ááŒá®áž áá¯ááºáá±ážáááºážá¡ááŒá±á¬ááºáž ááœá±ážááœá±ážáá«áááºá
áá±á¬ááºáááºá á¡áááááá¯á¡ááºáá»ááºáá»á¬ážáá²á០áá
áºáá¯ááẠááŒááºáá»á±á¬áºááááºáá±á¬ááºážááŒá
áºáááº- á¡áááºážáá¯á¶áž áááºáá±á¬ááºááŸá¯áá»á¬ážáá²á០áá
áºáá¯ááᯠLinuxá MacOS ááŸáá·áº Windows ááá¯á·ááœáẠáá¶á·ááá¯ážáá±ážááá«áááºá á¡á
ááá¯ááºážááœááºá áá»áœááºá¯ááºááá¯á·ááẠLinux á¡ááœááºáᬠáá®ááœááºáá²á·ááŒá®áž áá±á¬ááºááá¯ááºážááœáẠá¡ááŒá¬ážáá±á¬ á
áá
áºáá»á¬ážááᯠá
áááºá
ááºážáááºáá²á·áááºá áááºážá ááŒá¿áá¬áá»á¬ážá
áœá¬ááᯠááŒá
áºáá±á«áºá
á±ááŒá®áž áááºáá²á·ááá¯á· áá»ááºážáááºááááºááᯠá¡áá»áááºá¡áá±á¬áºááŒá¬ ááŸááºážááŸááºážáááºážáááºáž áááááá±ážáá±á ááááºá¡áá±ááŒáá·áºá Consul KV ááá¯áᬠWindows ááœáẠáá¶á·ááá¯ážáá¬ážáá±á¬áºáááºáž ááá¯á¡áá« ááŸáááŸáá¯ááºážáá±ážáááºáá±á¬ááºááŸá¯áá¯á¶ážáá¯áá¯á¶ážááᯠLinux ááŸáá·áº MacOS ááœáẠáá¶á·ááá¯ážáá¬ážáá«áááºá
á¡á
ááááºážá áá»áœááºá¯ááºááá¯á·ááẠáááºáá±á¬ááºááŸá¯áá»á¬ážááá°ááẠá¡áááºááá·áºáá¯ááºáá¬ážááá·áº á
á¬ááŒáá·áºááá¯ááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááẠááŒáá¯ážá
á¬ážáá²á·áááºá ZooKeeper ááá
á¹á
ááœááºá ááœá±ážáá»ááºááŸá¯ áá»áááºážáá²á·áááºá
ZooKeeper C++ á
á¬ááŒáá·áºááá¯ááºá á¡áá»ááºááá±á¬áá±á¬ááºááá·áº á¡ááºáá¬áá±á·á
áºá¡á¬áž ááŸá¯á¶á·áá±á¬áºááŸá¯ááŒáá·áº áá»áœááºá¯ááºááá¯á·ááẠá¡ááŒáá¯ááºá¡ááá¯ááºáá¯ááºáá±á¬ááºááẠáá¯á¶ážááŒááºáá²á·áááºá ZooKeeper C++ ááẠáááºážá¡ááœáẠá¡áá¬áááº/áááá¡ááŒá±áá¶áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áááºá STL ááœááºá áá¶ááá±á¬ááºážá
áœá¬ááŒáá·áºá áááºážááá¯á·ááᯠá¡ááœááºáá»áá¯ážááœá¶á
áœá¬ á¡áá±á¬ááºá¡áááºáá±á¬áºáá«áááºá á¥ááᬠááá¯ááºáá°ážá
áá»áœááºáá±á¬áºááá¯á·áá²á· á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯á áá®ááá¯áá«áá²á áá±á«áºááá¯áá±á¬á¡áá«ááœááºá áá±á¬ááºáááºááááá áºáá¯/á¡áá¬áááºá¡ááœá²áá áºáá¯ááᯠáááºáá®ážáá¬ážáááºá á¡áá¬áááºá¡áá áºááᯠááŒááºáááºáá±á¬ááºááŸááá¬ááŒá®áž ááŒá®ážááœá¬ážááá·áºá¡áá¬ááᯠáááºááá¯ááºáá¬áá¯ááºáá±á¬ááºáá»ááºááŸáá·áº áááºážá á®ááœáẠáááºáá±á¬ááºážááááá áºáá¯ááŸáá·áºá¡áá° ááá·áºááœááºážáá¬ážáááºá áá±áá°ážáááºá០á á¬ááœá²áá áºáá¯ááẠáááºážá á®á០á¡áá¬áááºáá»á¬ážá áœá¬ááᯠááœá±ážáá»ááºááŒá®áž wait_for ááᯠá¡áá¯á¶ážááŒá¯á á á áºáááºážáá±á¬ááºáá°áááºá ááááºáá áºáá¯ááá¬áá±á¬á¡áá«á áááºááá¯ááºááá·áºáá¯ááºáá±á¬ááºáá»ááºááᯠáá±á«áºááŒá®áž áááºážáááŒááºáááºááá¯ážááᯠáááááá¯á· ááœáŸá²ááŒá±á¬ááºážáá±ážáááºá
etcd ááŸáá·áº Consul ááá¯á· queries áá»á¬ážáá¯ááºáá±á¬ááºááẠáá°áá®áá±á¬ thread pool ááá¯á¡áá¯á¶ážááŒá¯áá²á·áááºá ááá¯ááá¯áááºááŸá¬ á¡áááºážáᶠá
á¬ááŒáá·áºááá¯ááºáá»á¬ážááᯠááá°áá®áá±á¬ á¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážá
áœá¬ááŒáá·áº áááºáá±á¬ááºááŒáá·áºááŸá¯ááá¯ááºáááºááŒá
áºáááºá ppconsul ááẠáá»ááºáá»áŸááºááá¯á¶ááŒá¯á¶áá±á¬ááŒá±á¬áá·áº áá¯ááºážáá±á«áºááá¯ááŸá¯áá»á¬ážááᯠáá±á¬á·ááºááŒáá·áºáá¬ááœááºáá¬ážáááºá
á
á¬ááœá²áá»á¬ážá
áœá¬á០grpc ááŸáá·áºá¡áá¯ááºáá¯ááºááá¯ááºáá±á¬áºáááºáž ááááºáááºááŸá¯áá»á¬ážááŸááá«áááºá etcd áá¬áá®áá»á¬ážááœáẠgrpc áááºážááŒá±á¬ááºážáá»á¬ážááŸáááá·áºá¡áá±á¬ááºá¡áááºáá±á¬áºáááºá áááºážááá¯á·ááẠá¡áá»áá¯ážá¡á
á¬ážáá
áºáá¯á áááºáá±á·áá»áºáá»á¬ážá¡ááœáẠááŸá
áºáááºáááºážááŒá±á¬ááºážáá»á¬ážááŒá
áºáááºá áá
áºáá»á
áºááá¯ááºááẠáá¬áá®á¡á¬ážáá¯á¶ážá¡ááœáẠá
á¬ááœá²áá
áºáá¯ááŸáá·áº á¡áááºáááºáá±á·áá»áºáá»á¬ážááᯠáá¯ááºáá±á¬ááºáá±ážááá·áº á
á¬ááœá²áá
áºáᯠáááºáá®ážáá±ážáááºá ááá¯á·ááŒá±á¬áá·áº grpc ááẠáá»ááºážááŒáá¯ááºáá±ážááŒááºážááᯠáá¬ážááŒá
áºáá¬ážáááºá ááá¯ááá¯áááºááŸá¬ áá¬áá®áá
áºáá¯á¶ážááᯠá¡á
ááŒá¯ááŒááºáž ááá¯á·ááá¯áẠáá»ááºááá·áºá¡áá«á áá±á¬ááºáá
áºáá¯áááá¯á·áá® ááááºáá±á¬ááºážááá¯áá»ááºááẠáá±ážááá¯á·ááŒááºážááŒá®ážáá¯á¶ážáááºá¡áá á
á±á¬áá·áºááá«áááºá áááºáá°ááŒá¯ááŒááºážá¡ááœáẠáá»áœááºá¯ááºááá¯á·á¡áá¯á¶ážááŒá¯áááºá
ááááº
ááá¯ááºááá¯ááºááŒáá·áºáá«-
áá»áœááºá¯ááºááá¯á·áá¡ááœá²á·-
source: www.habr.com