เบ™เบฑเบเบฎเบฝเบ™เบซเป‰เบฒเบ„เบปเบ™ เปเบฅเบฐเบชเบฒเบกเบฎเป‰เบฒเบ™เบ‚เบฒเบเบเบฐเปเบˆเบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเปเบˆเบเบขเบฒเบ

เบซเบผเบทเบงเบดเบ—เบตเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ‚เบฝเบ™เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” C ++ เบฅเบนเบเบ„เป‰เบฒเบชเปเบฒเบฅเบฑเบš ZooKeeper, etcd เปเบฅเบฐ Consul KV

เปƒเบ™เป‚เบฅเบเบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบเบฒเบ™เปเบˆเบเบขเบฒเบ, เบกเบตเบงเบฝเบเบ‡เบฒเบ™เบ—เบปเปˆเบงเป„เบ›เบˆเปเบฒเบ™เบงเบ™เบซเบ™เบถเปˆเบ‡: เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ‚เบญเบ‡เบเบธเปˆเบก, เบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ‚เบญเบ‡ nodes, เบเบงเบ”เบžเบปเบšเบ‚เปเป‰เบšเบปเบเบžเปˆเบญเบ‡, เบเบฒเบ™เป€เบฅเบทเบญเบเบœเบนเป‰เบ™เปเบฒ. เปเบฅเบฐเบญเบทเปˆเบ™เป†. เป€เบžเบทเปˆเบญเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰, เบฅเบฐเบšเบปเบšเบเบฒเบ™เปเบˆเบเบขเบฒเบเบžเบดเป€เบชเบ”เป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™ - coordination services . เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบกเบตเบ„เบงเบฒเบกเบชเบปเบ™เปƒเบˆเปƒเบ™เบชเบฒเบกเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ: ZooKeeper, etcd เปเบฅเบฐ Consul. เบญเบญเบเบˆเบฒเบเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ—เบตเปˆเบญเบธเบ”เบปเบกเบชเบปเบกเบšเบนเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบเบปเบ‡เบชเบธเบ™, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบชเบธเบกเปƒเบชเปˆ Consul KV.

เบ™เบฑเบเบฎเบฝเบ™เบซเป‰เบฒเบ„เบปเบ™ เปเบฅเบฐเบชเบฒเบกเบฎเป‰เบฒเบ™เบ‚เบฒเบเบเบฐเปเบˆเบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเปเบˆเบเบขเบฒเบ

เป‚เบ”เบเป€เบ™เบทเป‰เบญเปเบ—เป‰เปเบฅเป‰เบง, เบฅเบฐเบšเบปเบšเบ—เบฑเบ‡เบซเบกเบปเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบกเบตเบ„เบงเบฒเบกเบ—เบปเบ™เบ—เบฒเบ™เบ•เปเปˆเบ„เบงเบฒเบกเบœเบดเบ”, เบฎเป‰เบฒเบ™เบ„เป‰เบฒเบ—เบตเปˆเบกเบตเบ„เปˆเบฒเบ—เบตเปˆเบกเบตเป€เบชเบฑเป‰เบ™เบŠเบทเปˆ. เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบฎเบนเบšเปเบšเบšเบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเบกเบตเบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™, เป€เบŠเบดเปˆเบ‡เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ›เบถเบเบชเบฒเบซเบฒเบฅเบทเบ•เปเปˆเบกเบฒ, เบžเบงเบเป€เบ‚เบปเบฒเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ”เบฝเบงเบเบฑเบ™. เปเบ™เปˆเบ™เบญเบ™, เปเบ•เปˆเบฅเบฐเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ—เบตเปˆเปƒเบŠเป‰เบšเปเบฅเบดเบเบฒเบ™เบ›เบฐเบชเบฒเบ™เบ‡เบฒเบ™เปเบกเปˆเบ™เบ•เบดเบ”เบเบฑเบšเบซเบ™เบถเปˆเบ‡เปƒเบ™เบ™เบฑเป‰เบ™, เป€เบŠเบดเปˆเบ‡เบญเบฒเบ”เบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบซเบผเบฒเบเบฅเบฐเบšเบปเบšเปƒเบ™เบชเบนเบ™เบ‚เปเป‰เบกเบนเบ™เบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ”เบฝเบงเบเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™.

เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบžเบทเปˆเบญเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบกเบฒเบˆเบฒเบเบญเบปเบ‡เบเบฒเบ™เบ—เบตเปˆเบ›เบถเบเบชเบฒเบ‚เบญเบ‡เบญเบปเบ”เบชเบฐเบ•เบฒเบฅเบต, เปเบฅเบฐเบกเบฑเบ™เบ•เบปเบเบขเบนเปˆเบเบฑเบšเบžเบงเบเป€เบฎเบปเบฒ, เบ—เบตเบกเบ‡เบฒเบ™เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบ‚เบญเบ‡เบ™เบฑเบเบฎเบฝเบ™, เป€เบžเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”เบกเบฑเบ™, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบ‚เป‰เบญเบเบˆเบฐเป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบš.

เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบˆเบฑเบ”เบเบฒเบ™เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบตเปˆเบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบ—เบปเปˆเบงเป„เบ›เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš ZooKeeper, etcd เปเบฅเบฐ Consul KV. เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เปเบกเปˆเบ™เบ‚เบฝเบ™เปƒเบ™ C ++, เปเบ•เปˆเบกเบตเปเบœเบ™เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบชเบปเปˆเบ‡เบกเบฑเบ™เป„เบ›เบซเบฒเบžเบฒเบชเบฒเบญเบทเปˆเบ™.

เบ•เบปเบงเปเบšเบšเบ‚เปเป‰เบกเบนเบ™

เป€เบžเบทเปˆเบญเบžเบฑเบ”เบ—เบฐเบ™เบฒเบญเบดเบ™เป€เบ•เบตเป€เบŸเบ”เบ—เบปเปˆเบงเป„เบ›เบชเปเบฒเบฅเบฑเบšเบชเบฒเบกเบฅเบฐเบšเบปเบšเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบ‚เบปเป‰เบฒเปƒเบˆเบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเบกเบฑเบ™เบกเบตเบขเบนเปˆเบ—เบปเปˆเบงเป„เบ›เปเบฅเบฐเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เปเบ™เบงเปƒเบ”. เปƒเบซเป‰เบ„เบดเบ”เบญเบญเบ.

ZooKeeper

เบ™เบฑเบเบฎเบฝเบ™เบซเป‰เบฒเบ„เบปเบ™ เปเบฅเบฐเบชเบฒเบกเบฎเป‰เบฒเบ™เบ‚เบฒเบเบเบฐเปเบˆเบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเปเบˆเบเบขเบฒเบ

เบเบฐเปเบˆเบ–เบทเบเบˆเบฑเบ”เป€เบ›เบฑเบ™เบ•เบปเป‰เบ™เป„เบกเป‰เปเบฅเบฐเป€เบญเบตเป‰เบ™เบงเปˆเบฒ nodes. เป€เบžเบฒเบฐเบชเบฐเบ™เบฑเป‰เบ™, เบชเปเบฒเบฅเบฑเบš node เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เป€เบ”เบฑเบเบ™เป‰เบญเบเบ‚เบญเบ‡เบ•เบปเบ™. เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡ znode (เบชเป‰เบฒเบ‡) เปเบฅเบฐเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบกเบนเบ™เบ„เปˆเบฒ (setData) เบ–เบทเบเปเบเบเบญเบญเบ: เบกเบตเบžเบฝเบ‡เปเบ•เปˆเบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบกเบตเบขเบนเปˆเป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เปเบฅเบฐเบ›เปˆเบฝเบ™เปเบ›เบ‡เป„เบ”เป‰. เป‚เบกเบ‡เบชเบฒเบกเบฒเบ”เบ•เบดเบ”เบขเบนเปˆเปƒเบ™เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบเบฒเบ™เบกเบตเบขเบนเปˆเบ‚เบญเบ‡ node, เบเบฒเบ™เบญเปˆเบฒเบ™เบกเบนเบ™เบ„เปˆเบฒ, เปเบฅเบฐเป„เบ”เป‰เบฎเบฑเบšเป€เบ”เบฑเบเบ™เป‰เบญเบ. Watch เปเบกเปˆเบ™เบเบฒเบ™เบเบฐเบ•เบธเป‰เบ™เบ„เบฑเป‰เบ‡เบ”เบฝเบงเบ—เบตเปˆเป„เบŸเป„เบซเบกเป‰เป€เบกเบทเปˆเบญเบชเบฐเบšเบฑเบšเบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบขเบนเปˆเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡. nodes ephemeral เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบเบงเบ”เบžเบปเบšเบ„เบงเบฒเบกเบฅเบปเป‰เบกเป€เบซเบฅเบง. เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ–เบทเบเบœเบนเบเบกเบฑเบ”เบเบฑเบšเบเบญเบ‡เบ›เบฐเบŠเบธเบกเบ‚เบญเบ‡เบฅเบนเบเบ„เป‰เบฒเบ—เบตเปˆเบชเป‰เบฒเบ‡เปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ. เป€เบกเบทเปˆเบญเบฅเบนเบเบ„เป‰เบฒเบ›เบดเบ”เป€เบŠเบ”เบŠเบฑเบ™ เบซเบผเบทเบขเบธเบ”เบเบฒเบ™เปเบˆเป‰เบ‡เบšเบญเบ ZooKeeper เป€เบ–เบดเบ‡เบเบฒเบ™เบกเบตเบขเบนเปˆเบ‚เบญเบ‡เบกเบฑเบ™, เป‚เบ™เบ”เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบˆเบฐเบ–เบทเบเบฅเบถเบšเป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”. เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเปเบšเบšเบ‡เปˆเบฒเบเบ”เบฒเบเปเบกเปˆเบ™เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ - เบŠเบธเบ”เบ‚เบญเบ‡เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบ—เบตเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”เบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”เบซเบผเบทเบฅเบปเป‰เบกเป€เบซเบฅเบงเบ–เป‰เบฒเบงเปˆเบฒเบ™เบตเป‰เป€เบ›เบฑเบ™เป„เบ›เบšเปเปˆเป„เบ”เป‰เบชเปเบฒเบฅเบฑเบšเบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ.

เปเบฅเบฐเบญเบทเปˆเบ™

เบ™เบฑเบเบฎเบฝเบ™เบซเป‰เบฒเบ„เบปเบ™ เปเบฅเบฐเบชเบฒเบกเบฎเป‰เบฒเบ™เบ‚เบฒเบเบเบฐเปเบˆเบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเปเบˆเบเบขเบฒเบ

เบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเบฅเบฐเบšเบปเบšเบ™เบตเป‰เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ”เบปเบ™เปƒเบˆเบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™เป‚เบ”เบ ZooKeeper, เปเบฅเบฐเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบˆเบดเปˆเบ‡เป€เบฎเบฑเบ”เบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เบšเปเปˆเบกเบตเบฅเปเบฒเบ”เบฑเบšเบŠเบฑเป‰เบ™เบ‚เบญเบ‡เบเบฐเปเบˆ, เปเบ•เปˆเบžเบงเบเบกเบฑเบ™เบ›เบฐเบเบญเบšเป€เบ›เบฑเบ™เบŠเบธเบ”เบ„เปเบฒเบชเบฑเปˆเบ‡ lexicographically. เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบซเบผเบทโ€‹เบฅเบถเบšโ€‹เบเบฐโ€‹เปเบˆโ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹เบ—เบตเปˆโ€‹เป€เบ›เบฑเบ™โ€‹เบ‚เบญเบ‡โ€‹เบฅเบฐโ€‹เบ”เบฑเบšโ€‹เปƒเบ”โ€‹เบซเบ™เบถเปˆเบ‡โ€‹. เป‚เบ„เบ‡เบ›เบฐเบเบญเบšเบเบฒเบ™เบ™เบตเป‰เบญเบฒเบ”เบˆเบฐเป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเปเบ›เบ, เปเบ•เปˆเบ•เบปเบงเบˆเบดเบ‡เปเบฅเป‰เบงเบกเบฑเบ™เปเบกเปˆเบ™เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบซเบผเบฒเบ, เปเบฅเบฐเบเบฒเบ™เป€เบšเบดเปˆเบ‡เบฅเปเบฒเบ”เบฑเบšเบŠเบฑเป‰เบ™เบชเบฒเบกเบฒเบ”เบ–เบทเบเบˆเปเบฒเบฅเบญเบ‡เป„เบ”เป‰เบ‡เปˆเบฒเบเป‚เบ”เบเบœเปˆเบฒเบ™เบกเบฑเบ™.

etcd เบšเปเปˆเบกเบตเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเปเบฅเบฐเบเปเบฒเบ™เบปเบ”เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™, เปเบ•เปˆเบงเปˆเบฒเบกเบฑเบ™เบกเบตเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเบ”เบตเบเบงเปˆเบฒ: เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒ. เปเบ™เปˆเบ™เบญเบ™, เบžเบงเบเบกเบฑเบ™เบกเบตเบขเบนเปˆเปƒเบ™เบ—เบฑเบ‡เบชเบฒเบกเบฅเบฐเบšเบปเบš, เปเบ•เปˆเบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒ etcd เปเบกเปˆเบ™เบ”เบตเป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ. เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบชเบฒเบกเบ•เบฑเบ™: เบเบงเบ”เบชเบญเบš, เบ„เบงเบฒเบกเบชเปเบฒเป€เบฅเบฑเบ”, เบ„เบงเบฒเบกเบฅเบปเป‰เบกเป€เบซเบผเบง. เบ•เบฑเบ™เบ—เปเบฒเบญเบดเบ”เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบŠเบธเบ”เบ‚เบญเบ‡เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚, เบ—เบตเบชเบญเบ‡เปเบฅเบฐเบ—เบตเบชเบฒเบก - เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™. เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบ”เป‰เบงเบเบ›เบฐเบฅเปเบฒเบกเบฐเบ™เบน. เบ–เป‰เบฒเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบ—เบฑเบ‡เบซเบกเบปเบ”เป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบˆเบดเบ‡, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบ•เบฑเบ™เบ„เบงเบฒเบกเบชเปเบฒเป€เบฅเบฑเบ”เบˆเบฐเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”, เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ•เบฑเบ™เบ„เบงเบฒเบกเบฅเบปเป‰เบกเป€เบซเบผเบงเบˆเบฐเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”. เปƒเบ™ API 3.3, เบšเบฅเบฑเบญเบเบ„เบงเบฒเบกเบชเบณเป€เบฅเบฑเบ” เปเบฅเบฐ เบ„เบงเบฒเบกเบฅเบปเป‰เบกเป€เบซเบฅเบงเบชเบฒเบกเบฒเบ”เบกเบตเบ—เบธเบฅเบฐเบเบณเบ—เบตเปˆเบŠเป‰เบญเบ™เบเบฑเบ™เป„เบ”เป‰. เบ™เบฑเป‰เบ™โ€‹เปเบกเปˆเบ™, เบกเบฑเบ™โ€‹เป€เบ›เบฑเบ™โ€‹เป„เบ›โ€‹เป„เบ”เป‰โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบเบฒเบ™โ€‹เบชเป‰เบฒเบ‡โ€‹เป€เบ‡เบทเปˆเบญเบ™โ€‹เป„เบ‚โ€‹เบ›เบฐโ€‹เบฅเปเบฒโ€‹เบกเบฐโ€‹เบ™เบนโ€‹เบ‚เบญเบ‡โ€‹เบฅเบฐโ€‹เบ”เบฑเบšโ€‹เบเบฒเบ™โ€‹เบฎเบฑเบ‡โ€‹เป€เบเบทเบญเบšโ€‹เป‚เบ”เบโ€‹เบ•เบปเบ™โ€‹เป€เบญเบ‡. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบฎเบฝเบ™เบฎเบนเป‰เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเบเบฒเบ™เบเบงเบ”เบชเบญเบšเปเบฅเบฐเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบกเบตเบขเบนเปˆ เป€เบญเบเบฐเบชเบฒเบ™.

เป‚เบกเบ‡เบเปเปˆเบกเบตเบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰เบ„เบทเบเบฑเบ™, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบžเบงเบเบกเบฑเบ™เบˆเบฐเบชเบฑเบšเบชเบปเบ™เบเบงเปˆเบฒเป€เบฅเบฑเบเบ™เป‰เบญเบเปเบฅเบฐเบชเบฒเบกเบฒเบ” เบ™เบณ เปƒเบŠเป‰เบ„เบทเบ™เป„เบ”เป‰. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เป‚เบกเบ‡เบขเบนเปˆเปƒเบ™เบ‚เบญเบšเป€เบ‚เบ”เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™, เบ—เปˆเบฒเบ™เบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เบ‚เบญเบšเป€เบ‚เบ”เบ™เบตเป‰เบˆเบปเบ™เบเบงเปˆเบฒเบ—เปˆเบฒเบ™เบˆเบฐเบเบปเบเป€เบฅเบตเบเป‚เบกเบ‡, เปเบฅเบฐเบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเป€เบ›เบฑเบ™เบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”. เปƒเบ™ etcd, เบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเบ‚เบญเบ‡เบเบญเบ‡เบ›เบฐเบŠเบธเบกเบฅเบนเบเบ„เป‰เบฒ ZooKeeper เปเบกเปˆเบ™เบเบฒเบ™เป€เบŠเบปเปˆเบฒ.

เบเบปเบ‡เบชเบธเบ™ K.V.

เบšเปเปˆเบกเบตเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบฅเปเบฒเบ”เบฑเบšเบŠเบฑเป‰เบ™เบ—เบตเปˆเป€เบ„เบฑเปˆเบ‡เบ„เบฑเบ”เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰, เปเบ•เปˆเบเบปเบ‡เบชเบธเบ™เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เบฎเบนเบšเบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเบกเบฑเบ™เบกเบตเบขเบนเปˆ: เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเปเบฅเบฐเบฅเบถเบšเบ„เบตเบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบกเบตเบ„เปเบฒเบ™เปเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš "เบ•เบปเป‰เบ™เป„เบกเป‰เบเปˆเบญเบ" เบ‚เบญเบ‡เบเบฐเปเบˆ. เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเป€เบญเบตเป‰เบ™เบงเปˆเบฒ recursive. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, Consul เบชเบฒเบกเบฒเบ”เป€เบฅเบทเบญเบเบžเบฝเบ‡เปเบ•เปˆเบเบฐเปเบˆเบ—เบตเปˆเบšเปเปˆเบกเบตเบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบ—เบตเปˆเบฅเบฐเบšเบธเป„เบงเป‰เบซเบผเบฑเบ‡เบˆเบฒเบเบ„เปเบฒเบ™เปเบฒเบซเบ™เป‰เบฒ, เป€เบŠเบดเปˆเบ‡เบชเบญเบ”เบ„เปˆเบญเบ‡เบเบฑเบšเบเบฒเบ™เป„เบ”เป‰เบฎเบฑเบš "เป€เบ”เบฑเบเบ™เป‰เบญเบ" เบ—เบฑเบ™เบ—เบต. เปเบ•เปˆเบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเป€เบ›เบฑเบ™เบเบฒเบ™เบฅเบฐเบ™เบถเบเป€เบ–เบดเบ‡เบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ‚เบญเบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบฅเปเบฒเบ”เบฑเบšเบŠเบฑเป‰เบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™: เบกเบฑเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เบ–เป‰เบฒเบžเปเปˆเปเบกเปˆเบ‚เบญเบ‡เบกเบฑเบ™เบšเปเปˆเบกเบตเบซเบผเบทเบฅเบถเบšเบเบฐเปเบˆเบ—เบตเปˆเบกเบตเบฅเบนเบ, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเป€เบ”เบฑเบเบ™เป‰เบญเบเบˆเบฐเบชเบทเบšเบ•เปเปˆเบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™เบฅเบฐเบšเบปเบš.

เบ™เบฑเบเบฎเบฝเบ™เบซเป‰เบฒเบ„เบปเบ™ เปเบฅเบฐเบชเบฒเบกเบฎเป‰เบฒเบ™เบ‚เบฒเบเบเบฐเปเบˆเบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเปเบˆเบเบขเบฒเบ
เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เป‚เบกเบ‡, Consul เป„เบ”เป‰เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป HTTP. เป‚เบ”เบเป€เบ™เบทเป‰เบญเปเบ—เป‰เปเบฅเป‰เบง, เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เป‚เบ—เบ—เปเบฒเบกเบฐเบ”เบฒเป„เบ›เบซเบฒเบงเบดเบ—เบตเบเบฒเบ™เบญเปˆเบฒเบ™เบ‚เปเป‰เบกเบนเบ™, เป€เบŠเบดเปˆเบ‡, เบžเป‰เบญเบกเบเบฑเบšเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบญเบทเปˆเบ™เป†, เบชเบฐเบšเบฑเบšเบชเบธเบ”เบ—เป‰เบฒเบเบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เปเบกเปˆเบ™เบŠเบตเป‰เปƒเบซเป‰เป€เบซเบฑเบ™. เบ–เป‰เบฒเบชเบฐเบšเบฑเบšเบ›เบฐเบˆเบธเบšเบฑเบ™เบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™เบขเบนเปˆเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเปเบกเปˆเบ™เปƒเบซเบเปˆเบเบงเปˆเบฒเบ—เบตเปˆเบฅเบฐเบšเบธเป„เบงเป‰, เบ„เปเบฒเบ•เบญเบšเบˆเบฐเบ–เบทเบเบชเบปเปˆเบ‡เบ„เบทเบ™เบ—เบฑเบ™เบ—เบต, เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™ - เป€เบกเบทเปˆเบญเบ„เปˆเบฒเบ›เปˆเบฝเบ™เปเบ›เบ‡. เบ™เบญเบเบ™เบฑเป‰เบ™เบเบฑเบ‡เบกเบตเป€เบŠเบ”เบŠเบฑเบ™เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ•เบดเบ”เปƒเบชเปˆเบเบฐเปเบˆเป„เบ”เป‰เบ—เบธเบเป€เบงเบฅเบฒ. เบกเบฑเบ™เป€เบ›เบฑเบ™เบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบšเปเปˆเป€เบซเบกเบทเบญเบ™เบเบฑเบš etcd เปเบฅเบฐ ZooKeeper, เบšเปˆเบญเบ™เบ—เบตเปˆเบเบฒเบ™เบฅเบถเบš sessions เบ™เปเบฒเป„เบ›เบชเบนเปˆเบเบฒเบ™เบฅเบถเบšเบเบฐเปเบˆเบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡, เบกเบตเบฎเบนเบšเปเบšเบšเบ—เบตเปˆ session เปเบกเปˆเบ™เบžเบฝเบ‡เปเบ•เปˆ unlinked เบˆเบฒเบเบžเบงเบเป€เบ‚เบปเบฒ. เบกเบตเปƒเบซเป‰ เบ—เบธเบฅเบฐเบเปเบฒ, เบšเปเปˆเบกเบตเบชเบฒเบ‚เบฒ, เปเบ•เปˆเบกเบตเบเบฒเบ™เบเบงเบ”เบชเบญเบšเบ—เบธเบเบ›เบฐเป€เบžเบ”.

เป€เบญเบปเบฒเบกเบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบฎเปˆเบงเบกเบเบฑเบ™

ZooKeeper เบกเบตเบฎเบนเบšเปเบšเบšเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเป€เบ‚เบฑเป‰เบกเบ‡เบงเบ”เบ—เบตเปˆเบชเบธเบ”. เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบฅเบฐเบ”เบฑเบšเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ—เบตเปˆเบกเบตเบขเบนเปˆเปƒเบ™ etcd เบšเปเปˆเบชเบฒเบกเบฒเบ”เบ–เบทเบเบˆเบณเบฅเบญเบ‡เบขเปˆเบฒเบ‡เบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเปƒเบ™ ZooKeeper เบซเบผเบท Consul. เบเบฒเบ™เบžเบฐเบเบฒเบเบฒเบกเบฅเบงเบกเป€เบญเบปเบฒเบชเบดเปˆเบ‡เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เบˆเบฒเบเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ—เบฑเบ‡เปเบปเบ”, เบžเบงเบเป€เบฎเบปเบฒเบˆเบปเบšเบฅเบปเบ‡เบ”เป‰เบงเบเบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบ—เบตเปˆเป€เบเบทเบญเบšเบ—เบฝเบšเป€เบ—เบปเปˆเบฒเบเบฑเบšเบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš ZooKeeper เป‚เบ”เบเบกเบตเบ‚เปเป‰เบเบปเบเป€เบงเบฑเป‰เบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

  • เบฅเปเบฒเบ”เบฑเบš, container เปเบฅเบฐ TTL nodes เบšเปเปˆโ€‹เบชเบฐโ€‹เบซเบ™เบฑเบšโ€‹เบชเบฐโ€‹เบซเบ™เบธเบ™
  • เบšเปเปˆเบฎเบญเบ‡เบฎเบฑเบš ACLs
  • เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰เบˆเบฐเบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เบ–เป‰เบฒเบกเบฑเบ™เบšเปเปˆเบกเบต (เปƒเบ™ ZK setData เบชเบปเปˆเบ‡เบ„เบทเบ™เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰)
  • เบเปเบฒเบ™เบปเบ”เปเบฅเบฐ cas เบงเบดเบ—เบตเบเบฒเบ™เปเบกเปˆเบ™เปเบเบเบญเบญเบ (เปƒเบ™ ZK เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบˆเปเบฒเป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบ”เบฝเบงเบเบฑเบ™)
  • เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹เบฅเบปเบšโ€‹เบฅเบถเบšโ€‹เบเบฒเบ™โ€‹เบฅเบปเบš node เบ„เบฝเบ‡โ€‹เบ„เบนเปˆโ€‹เบเบฑเบš subtree เบ‚เบญเบ‡โ€‹เบ•เบปเบ™ (เปƒเบ™ ZK delete เบˆเบฐโ€‹เบเบฑเบšโ€‹เบ„เบทเบ™โ€‹เบกเบฒโ€‹เบ„เบงเบฒเบกโ€‹เบœเบดเบ”โ€‹เบžเบฒเบ”โ€‹เบ–เป‰เบฒ node เบกเบตโ€‹เบฅเบนเบโ€‹)
  • เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบ„เบตเบกเบตเบžเบฝเบ‡เปเบ•เปˆเบซเบ™เบถเปˆเบ‡เบชเบฐเบšเบฑเบš - เบชเบฐเบšเบฑเบšเบกเบนเบ™เบ„เปˆเบฒ (เปƒเบ™ ZK เบกเบตเบชเบฒเบกเบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ)

เบเบฒเบ™เบ›เบฐเบ•เบดเป€เบชเบ”เบ‚เบญเบ‡ nodes เบฅเปเบฒเบ”เบฑเบšเปเบกเปˆเบ™เป€เบ™เบทเปˆเบญเบ‡เบกเบฒเบˆเบฒเบเบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒ etcd เปเบฅเบฐ Consul เบšเปเปˆเบกเบตเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เปƒเบ™เบ•เบปเบงเบชเปเบฒเบฅเบฑเบšเบžเบงเบเป€เบ‚เบปเบฒ, เปเบฅเบฐเบžเบงเบเป€เบ‚เบปเบฒเบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰เบ‡เปˆเบฒเบเป‚เบ”เบเบœเบนเป‰เปƒเบŠเป‰เบขเบนเปˆเป€เบ—เบดเบ‡เบชเบธเบ”เบ‚เบญเบ‡เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš.

เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบžเบถเบ”เบ•เบดเบเปเบฒเบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบš ZooKeeper เป€เบกเบทเปˆเบญเบฅเบถเบšเบˆเบธเบ”เบชเบนเบ‡เบชเบธเบ”เบˆเบฐเบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบกเบตเบเบฒเบ™เบฎเบฑเบเบชเบฒเบ•เบปเบงเบ™เบฑเบšเบฅเบนเบเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบเบฐเปเบˆเปƒเบ™ etcd เปเบฅเบฐ Consul. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบžเบงเบเป€เบฎเบปเบฒเบžเบฐเบเบฒเบเบฒเบกเบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™ meta, เบกเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ—เบตเปˆเบˆเบฐเบฅเบถเบšเบ•เบปเป‰เบ™เป„เบกเป‰เบเปˆเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”.

subtleties เบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”

เบ‚เปเปƒเบซเป‰เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบขเปˆเบฒเบ‡เบฅเบฐเบญเบฝเบ”เบเปˆเบฝเบงเบเบฑเบšเบšเบฒเบ‡เบ”เป‰เบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เปƒเบ™เบฅเบฐเบšเบปเบšเบ•เปˆเบฒเบ‡เป†.

เบฅเปเบฒเบ”เบฑเบšเบŠเบฑเป‰เบ™เปƒเบ™เปเบฅเบฐเบญเบทเปˆเบ™เป†

เบเบฒเบ™เบฎเบฑเบเบชเบฒเบ—เบฑเบ”เบชเบฐเบ™เบฐเปเบšเบšเบฅเปเบฒเบ”เบฑเบšเบŠเบฑเป‰เบ™เปƒเบ™ etcd เป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบซเบ™เบถเปˆเบ‡เปƒเบ™เบงเบฝเบเบ‡เบฒเบ™เบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบซเบผเบฒเบเบ—เบตเปˆเบชเบธเบ”. Range queries เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบ‡เปˆเบฒเบเบ—เบตเปˆเบˆเบฐเบ”เบถเบ‡เบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบกเบตเบ„เปเบฒเบ™เปเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบ "/foo", เบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เบฎเป‰เบญเบ‡เบ‚เปเปƒเบซเป‰เบกเบตเบ‚เบญเบšเป€เบ‚เบ” ["/foo", "/fop"). เปเบ•เปˆเบ™เบตเป‰เบˆเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™เบ•เบปเป‰เบ™เป„เบกเป‰เบเปˆเบญเบเบ—เบฑเบ‡เปเบปเบ”เบ‚เบญเบ‡เบเบฐเปเบˆ, เป€เบŠเบดเปˆเบ‡เบญเบฒเบ”เบˆเบฐเบšเปเปˆเบเบญเบกเบฎเบฑเบšเป„เบ”เป‰เบ–เป‰เบฒเบ•เบปเป‰เบ™เป„เบกเป‰เบเปˆเบญเบเปƒเบซเบเปˆ. เปƒเบ™เบ•เบญเบ™เบ—เปเบฒเบญเบดเบ”เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบงเบฒเบ‡เปเบœเบ™เบ—เบตเปˆเบˆเบฐเบ™เปเบฒเปƒเบŠเป‰เบเบปเบ™เป„เบเบเบฒเบ™เปเบ›เบžเบฒเบชเบฒเบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™, เบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™ zetcd. เบกเบฑเบ™เบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เป€เบžเบตเปˆเบกเบซเบ™เบถเปˆเบ‡ byte เปƒเบ™เบ•เบญเบ™เบ•เบปเป‰เบ™เบ‚เบญเบ‡เบ„เบต, เป€เบ—เบปเปˆเบฒเบเบฑเบšเบ„เบงเบฒเบกเป€เบฅเบดเบเบ‚เบญเบ‡ node เปƒเบ™เบ•เบปเป‰เบ™เป„เบกเป‰. เปƒเบซเป‰เบ‚เป‰เบญเบเบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡เปƒเบซเป‰เป€เบˆเบปเป‰เบฒ.

"/foo" -> "u01/foo"
"/foo/bar" -> "u02/foo/bar"

เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เป€เบ”เบฑเบเบ™เป‰เบญเบเบ—เบฑเบ™เบ—เบตเบ—เบฑเบ™เปƒเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™ "/foo" เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เป‚เบ”เบเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ‚เบญเบšเป€เบ‚เบ” ["u02/foo/", "u02/foo0"). เปเบกเปˆเบ™เปเบฅเป‰เบง, เปƒเบ™ ASCII "0" เบขเบทเบ™เบขเบนเปˆเบ—เบฑเบ™เบ—เบต "/".

เปเบ•เปˆเบงเบดเบ—เบตเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เป‚เบเบเบเป‰เบฒเบเบ‚เบญเบ‡ vertex เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰? เบกเบฑเบ™ turns เปƒเบซเป‰โ€‹เป€เบซเบฑเบ™โ€‹เบงเปˆเบฒโ€‹เบ—เปˆเบฒเบ™โ€‹เบˆเปเบฒโ€‹เป€เบ›เบฑเบ™โ€‹เบ•เป‰เบญเบ‡โ€‹เบฅเบปเบšโ€‹เป„เบฅโ€‹เบเบฐโ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹เบ‚เบญเบ‡โ€‹เบ›เบฐโ€‹เป€เบžเบ”โ€‹ ["uXX/foo/", "uXX/foo0") เบชเปเบฒเบฅเบฑเบš XX เบˆเบฒเบ 01 เบซเบฒ FF. เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เปเบฅเปˆเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ เบˆเปเบฒเบเบฑเบ”เบˆเปเบฒเบ™เบงเบ™เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™ เบžเบฒเบเปƒเบ™เบซเบ™เบถเปˆเบ‡เบ—เบธเบฅเบฐเบเปเบฒ.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบฅเบฐเบšเบปเบšเบเบฒเบ™เปเบ›เบ‡เบฅเบฐเบซเบฑเบ”เปเบšเบšเบ‡เปˆเบฒเบเบ”เบฒเบเป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ”เบดเบ”, เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบขเปˆเบฒเบ‡เบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ—เบฑเบ‡เบเบฒเบ™เบฅเบถเบšเบฅเบฐเบซเบฑเบ”เปเบฅเบฐเบเบฒเบ™เป„เบ”เป‰เบฎเบฑเบšเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เป€เบ”เบฑเบเบ™เป‰เบญเบ. เบกเบฑเบ™เบžเบฝเบ‡เบžเปเบ—เบตเปˆเบˆเบฐเป€เบžเบตเปˆเบกเบฅเบฑเบเบชเบฐเบ™เบฐเบžเบดเป€เบชเบ”เบเปˆเบญเบ™ token เบชเบธเบ”เบ—เป‰เบฒเบ. เบเบปเบโ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡:

"/very" -> "/u00very"
"/very/long" -> "/very/u00long"
"/very/long/path" -> "/very/long/u00path"

เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบเบฒเบ™เบฅเบถเบšเบ„เบต "/very" เบเบฒเบเป€เบ›เบฑเบ™เบเบฒเบ™เบฅเบถเบš "/u00very" เปเบฅเบฐเบ‚เบญเบšเป€เบ‚เบ” ["/very/", "/very0"), เปเบฅเบฐเป„เบ”เป‰เบฎเบฑเบšเป€เบ”เบฑเบเบ™เป‰เบญเบเบ—เบฑเบ‡เบซเบกเบปเบ” - เปƒเบ™เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบชเปเบฒเบฅเบฑเบšเบ„เบตเบˆเบฒเบเบ‚เบญเบšเป€เบ‚เบ” ["/very/u00", "/very/u01").

เบเบฒเบ™เบ–เบญเบ”เบเบฐเปเบˆเปƒเบ™ ZooKeeper

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบเปˆเบฒเบงเบกเบฒเปเบฅเป‰เบง, เปƒเบ™ ZooKeeper เบ—เปˆเบฒเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบฅเบถเบš node เป„เบ”เป‰เบ–เป‰เบฒเบกเบฑเบ™เบกเบตเป€เบ”เบฑเบเบ™เป‰เบญเบ. เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบฅเบถเบšเบ„เบตเบžเป‰เบญเบกเบเบฑเบšเบ•เบปเป‰เบ™เป„เบกเป‰เบเปˆเบญเบ. เบ‚เป‰เบญเบโ€‹เบ„เบงเบ™โ€‹เป€เบฎเบฑเบ”โ€‹เปเบ™เบงโ€‹เปƒเบ”? เบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เปเบ™เบงเบ™เบตเป‰เบ”เป‰เบงเบเปเบ‡เปˆเบ”เบต. เบ—เปเบฒเบญเบดเบ”, เบžเบงเบเป€เบฎเบปเบฒเบ‚เป‰เบฒเบกเบ•เบปเป‰เบ™เป„เบกเป‰เบเปˆเบญเบเบ„เบทเบ™เปƒเบซเบกเปˆ, เป„เบ”เป‰เบฎเบฑเบšเป€เบ”เบฑเบเบ™เป‰เบญเบเบ‚เบญเบ‡เปเบ•เปˆเบฅเบฐเบˆเบธเบ”เบ—เบตเปˆเบกเบตเบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เบ—เบธเบฅเบฐเบเปเบฒเบ—เบตเปˆเบžเบฐเบเบฒเบเบฒเบกเบฅเบถเบš nodes เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡ subtree เปƒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡. เปเบ™เปˆเบ™เบญเบ™, เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบชเบฒเบกเบฒเบ”เป€เบเบตเบ”เบ‚เบทเป‰เบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบญเปˆเบฒเบ™เบ•เบปเป‰เบ™เป„เบกเป‰เบเปˆเบญเบเปเบฅเบฐเบเบฒเบ™เบฅเบถเบšเบกเบฑเบ™. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบˆเบฐเบฅเบปเป‰เบกเป€เบซเบฅเบง. เบเบดเปˆเบ‡เป„เบ›เบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เบ•เบปเป‰เบ™เป„เบกเป‰เบเปˆเบญเบเบญเบฒเบ”เบˆเบฐเบ›เปˆเบฝเบ™เปเบ›เบ‡เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบญเปˆเบฒเบ™. เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบชเปเบฒเบฅเบฑเบšเป€เบ”เบฑเบเบ™เป‰เบญเบเบ‚เบญเบ‡ node เบ•เปเปˆเป„เบ›เบญเบฒเบ”เบˆเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒ, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, node เป„เบ”เป‰เบ–เบทเบเบฅเบถเบšเป„เบ›เปเบฅเป‰เบง. เปƒเบ™เบ—เบฑเบ‡เบชเบญเบ‡เบเปเบฅเบฐเบ™เบต, เบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เบŠเป‰เปเบฒเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡.

เบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบฅเบถเบšเบฅเบฐเบซเบฑเบ”เบšเปเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ–เป‰เบฒเบกเบฑเบ™เบกเบตเบฅเบนเบ, เปเบฅเบฐเบเบดเปˆเบ‡เป„เบ›เบเบงเปˆเบฒเบ™เบฑเป‰เบ™เบ–เป‰เบฒเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบเบฑเบ‡เบชเบทเบšเบ•เปเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบ•เบปเป‰เบ™เป„เบกเป‰เบเปˆเบญเบ, เบเบฒเบ™เบฅเบถเบšเปเบฅเบฐเบเบฒเบ™เบชเป‰เบฒเบ‡เบเบฐเปเบˆ. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบ™เบตเป‰เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเป€เบžเบทเปˆเบญเบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เบชเบฑเบšเบชเบปเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบงเบดเบ—เบตเบเบฒเบ™เบญเบทเปˆเบ™เป†เปƒเบ™ etcd เปเบฅเบฐ Consul.

เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™ ZooKeeper

เปƒเบ™ ZooKeeper เบกเบตเบงเบดเบ—เบตเบเบฒเบ™เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ•เบปเป‰เบ™เป„เบกเป‰ (เบชเป‰เบฒเบ‡, เบฅเบถเบš, getChildren) เปเบฅเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เปƒเบ™ nodes (setData, getData). เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™, เบฅเบถเบšเบซเบผเบท setData - เบ–เป‰เบฒเบกเบฑเบ™เบšเปเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบง. เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เป‚เบ—เบซเบฒเป„เบ”เป‰เป‚เบ”เบเบšเปเปˆเบ•เป‰เบญเบ‡เบ„เบดเบ”เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบกเบตเบเบธเบ™เปเบˆ.

เบ—เบฒเบ‡โ€‹เป€เบฅเบทเบญเบโ€‹เบซเบ™เบถเปˆเบ‡โ€‹เปเบกเปˆเบ™โ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹เปƒเบ™โ€‹เปเบ‡เปˆโ€‹เบ”เบตโ€‹, เป€เบŠเบฑเปˆเบ™โ€‹เบ”เบฝเบงโ€‹เบเบฑเบšโ€‹เบเบฒเบ™โ€‹เบฅเบปเบšโ€‹. เบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบกเบต node. เบ–เป‰เบฒเบกเบต, เป‚เบ—เบซเบฒ setData, เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบชเป‰เบฒเบ‡. เบ–เป‰เบฒเบงเบดเบ—เบตเบชเบธเบ”เบ—เป‰เบฒเบเบชเบปเปˆเบ‡เบ„เบทเบ™เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”, เปƒเบซเป‰เป€เบฎเบฑเบ”เบŠเป‰เปเบฒเบญเบตเบเบ„เบฑเป‰เบ‡. เบชเบดเปˆเบ‡เบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบ„เบงเบ™เบชเบฑเบ‡เป€เบเบ”เปเบกเปˆเบ™เบงเปˆเบฒเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบงเปเบกเปˆเบ™เบšเปเปˆเบกเบตเบˆเบธเบ”เบซเบกเบฒเบ. เบ—เปˆเบฒเบ™เบ—เบฑเบ™เบ—เบตเบชเบฒเบกเบฒเบ”เป‚เบ—เบซเบฒเบชเป‰เบฒเบ‡. เบเบฒเบ™เบชเปเบฒเป€เบฅเบฑเบ”เบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”เบˆเบฐเบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒ node เบšเปเปˆเบกเบตเปเบฅเบฐเบกเบฑเบ™เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™. เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบเบฒเบ™เบชเป‰เบฒเบ‡เบˆเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบก, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป‚เบ—เบซเบฒ setData. เปเบ™เปˆเบ™เบญเบ™, เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เป‚เบ—, vertex เบชเบฒเบกเบฒเบ”เบ–เบทเบเบฅเบถเบšเป‚เบ”เบเบเบฒเบ™เป‚เบ—เบ—เบตเปˆเปเบ‚เปˆเบ‡เบ‚เบฑเบ™, เปเบฅเบฐ setData เบเบฑเบ‡เบˆเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบกเบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡, เปเบ•เปˆเบกเบฑเบ™เบ„เบธเป‰เบกเบ„เปˆเบฒเบšเป?

เบ–เป‰เบฒเบ—เบฑเบ‡เบชเบญเบ‡เบงเบดเบ—เบตเบเบฒเบ™เบชเบปเปˆเบ‡เบ„เบทเบ™เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”, เบžเบงเบเป€เบฎเบปเบฒเบฎเบนเป‰เปเบ™เปˆเบ™เบญเบ™เบงเปˆเบฒเบเบฒเบ™เบฅเบถเบšเบเบฒเบ™เปเบ‚เปˆเบ‡เบ‚เบฑเบ™เป„เบ”เป‰เป€เบเบตเบ”เบ‚เบถเป‰เบ™. เบฅเบญเบ‡เบ™เบถเบเบžเบฒเบšเป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบเบฒเบ™เบฅเบถเบšเบ™เบตเป‰เป€เบเบตเบ”เบ‚เบถเป‰เบ™เบซเบผเบฑเบ‡เบˆเบฒเบเบ•เบฑเป‰เบ‡เบเบฒเบ™เป‚เบ—. เปเบฅเป‰เบงโ€‹เบ„เบงเบฒเบกโ€‹เปเบฒเบโ€‹เบญเบฑเบ™โ€‹เปƒเบ”โ€‹เบเปโ€‹เบ•เบฒเบกโ€‹เบ—เบตเปˆโ€‹เป€เบฎเบปเบฒโ€‹เบžเบฐเบเบฒเบเบฒเบกโ€‹เบชเป‰เบฒเบ‡โ€‹เบเปโ€‹เบ–เบทเบโ€‹เบฅเบถเบšโ€‹เป„เบ›โ€‹เปเบฅเป‰เบง. เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบŠเบธเบ”เบ™เบฑเป‰เบ™เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบขเปˆเบฒเบ‡เบชเปเบฒเป€เบฅเบฑเบ”เบœเบปเบ™, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡เบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบ–เบทเบเบ‚เบฝเบ™.

เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบ”เป‰เบฒเบ™เบงเบดเบŠเบฒเบเบฒเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบก

เปƒเบ™เบžเบฒเบเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบžเบฑเบเบœเปˆเบญเบ™เบˆเบฒเบเบฅเบฐเบšเบปเบšเปเบˆเบเบขเบฒเบเปเบฅเบฐเป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”.
เบซเบ™เบถเปˆเบ‡เปƒเบ™เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ•เบปเป‰เบ™เบ•เปเบ‚เบญเบ‡เบฅเบนเบเบ„เป‰เบฒเปเบกเปˆเบ™เบ‚เป‰เบฒเบกเป€เบงเบ—เบต: เบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เปƒเบ™ Linux, MacOS เปเบฅเบฐ Windows. เปƒเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบžเบฑเบ”เบ—เบฐเบ™เบฒเบžเบฝเบ‡เปเบ•เปˆเบชเปเบฒเบฅเบฑเบš Linux, เปเบฅเบฐเป€เบฅเบตเปˆเบกเบ—เบปเบ”เบชเบญเบšเปƒเบ™เบฅเบฐเบšเบปเบšเบญเบทเปˆเบ™เป†เบ•เปเปˆเบกเบฒ. เบ™เบตเป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ”เบšเบฑเบ™เบซเบฒเบซเบผเบฒเบเบขเปˆเบฒเบ‡, เป€เบŠเบดเปˆเบ‡เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบเปเปˆเบšเปเปˆเบˆเบฐเปเบˆเป‰เบ‡เบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบซเบฒ. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ›เบฐเบชเบฒเบ™เบ‡เบฒเบ™เบ—เบฑเบ‡เบชเบฒเบกเปเบกเปˆเบ™เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เปƒเบ™ Linux เปเบฅเบฐ MacOS, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบžเบฝเบ‡เปเบ•เปˆ Consul KV เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เปƒเบ™ Windows.

เบ•เบฑเป‰เบ‡เปเบ•เปˆเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบžเบฐเบเบฒเบเบฒเบกเปƒเบŠเป‰เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบตเปˆเบเบฝเบกเบžเป‰เบญเบกเป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡ ZooKeeper, เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบซเบผเบธเบ”เบฅเบปเบ‡ ZooKeeper C++, เป€เบŠเบดเปˆเบ‡เปƒเบ™เบ—เบตเปˆเบชเบธเบ”เบเปเปˆเบฅเบปเป‰เบกเป€เบซเบฅเบงเปƒเบ™เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบขเบนเปˆเปƒเบ™ Windows. เบ™เบตเป‰, เปเบ™เบงเปƒเบ”เบเปเปˆเบ•เบฒเบก, เบšเปเปˆเปเบ›เบเปƒเบˆ: เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เป„เบ”เป‰เบ–เบทเบเบ•เบฑเป‰เบ‡เป€เบ›เบฑเบ™ linux เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™. เบชเปเบฒเบฅเบฑเบš Consul เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ”เบฝเบงเปเบกเปˆเบ™ ppconsul. เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เป€เบžเบตเปˆเบกเปƒเบชเปˆเบกเบฑเบ™ เบเบญเบ‡เบ›เบฐเบŠเบธเบก ะธ เบ—เบธเบฅเบฐเบเปเบฒ. เบชเปเบฒเบฅเบฑเบš etcd, เบšเปเปˆเบžเบปเบšเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เป€เบ•เบฑเบกเบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เป‚เบ›เป‚เบ•เบ„เบญเบ™เบชเบฐเบšเบฑเบšเบซเบฅเป‰เบฒเบชเบธเบ”, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบžเบฝเบ‡เปเบ•เปˆ เบฅเบนเบเบ„เป‰เบฒ grpc เบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™.

เป„เบ”เป‰เบฎเบฑเบšเปเบฎเบ‡เบšเบฑเบ™เบ”เบฒเบ™เปƒเบˆเบˆเบฒเบเบญเบดเบ™เป€เบ•เบตเป€เบŸเบ”เบšเปเปˆเบŠเบดเป‰เบ‡เบ‚เบญเบ‡เบซเป‰เบญเบ‡เบชเบฐเปเบธเบ” ZooKeeper C++, เบžเบงเบเป€เบฎเบปเบฒเบˆเบถเปˆเบ‡เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเปเบšเบšเบšเปเปˆเบŠเบดเป‰เบ‡เป‚เบ„เบ™เบ™เบณ. ZooKeeper C ++ เปƒเบŠเป‰เบญเบฐเบ™เบฒเบ„เบปเบ” / เบ„เปเบฒเบชเบฑเบ™เบเบฒ primitives เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เบตเป‰. เปƒเบ™ STL, เปเบ•เปˆเบซเบ™เป‰เบฒเป€เบชเบเบ”เบฒเบ, เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบซเบผเบฒเบเป€เบฅเบฑเบเบ™เป‰เบญเบ. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบšเปเปˆ เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบ™เบฑเป‰เบ™โ€‹เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹, เป€เบŠเบดเปˆเบ‡เปƒเบŠเป‰เบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบตเปˆเบœเปˆเบฒเบ™เป„เบ›เบเบฑเบšเบœเบปเบ™เบ‚เบญเบ‡เบญเบฐเบ™เบฒเบ„เบปเบ”เป€เบกเบทเปˆเบญเบกเบฑเบ™เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป„เบ”เป‰. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบงเบดเบ—เบตเบเบฒเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบˆเปเบฒเป€เบ›เบฑเบ™เป€เบžเบทเปˆเบญเบ›เปˆเบฝเบ™เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ. เป€เบžเบทเปˆเบญเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบชเบฐเบ™เบธเบเป€เบเบตเบเบฐเบ—เบนเป‰เปเบšเบšเบ‡เปˆเบฒเบเป†เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เป€เบžเบฒเบฐเบงเปˆเบฒเบ•เบฒเบกเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ‚เบญเบ‡เบฅเบนเบเบ„เป‰เบฒ, เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบžเบฒเบเบชเปˆเบงเบ™เบ—เบตเบชเบฒเบกเบ—เบตเปˆเบฎเบธเบ™เปเบฎเบ‡เป€เบŠเบฑเปˆเบ™ Boost.

เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เบงเบฝเบเปเบšเบšเบ™เบตเป‰. เป€เบกเบทเปˆเบญเบ–เบทเบเป€เบญเบตเป‰เบ™, เบชเบฑเบ™เบเบฒเป€เบžเบตเปˆเบกเป€เบ•เบตเบก / เบ„เบนเปˆเปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”เปเบกเปˆเบ™เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™. เบญเบฐเบ™เบฒเบ„เบปเบ”เปƒเบซเบกเปˆเบˆเบฐเบ–เบทเบเบชเบปเปˆเบ‡เบ„เบทเบ™, เปเบฅเบฐเบœเบนเป‰เบ—เบตเปˆเบœเปˆเบฒเบ™เป„เบ›เป„เบ”เป‰เบ–เบทเบเบˆเบฑเบ”เปƒเบชเปˆเบžเป‰เบญเบกเบเบฑเบšเบซเบ™เป‰เบฒเบ—เบตเปˆเบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™เปเบฅเบฐเบ„เปเบฒเบชเบฑเบ™เบเบฒเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเปƒเบ™เปเบ–เบง. เบเบฐเบ—เบนเป‰เบˆเบฒเบเบชเบฐเบ™เบธเบเป€เบเบตเป€เบฅเบทเบญเบเบญเบฐเบ™เบฒเบ„เบปเบ”เบซเบผเบฒเบเป†เบญเบฑเบ™เบˆเบฒเบเบ„เบดเบงเปเบฅเบฐเบชเปเบฒเบซเบผเบงเบ”เบžเบงเบเบกเบฑเบ™เป‚เบ”เบเปƒเบŠเป‰ wait_for. เป€เบกเบทเปˆเบญเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป„เบ”เป‰, เบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™เบ–เบทเบเป€เบญเบตเป‰เบ™เปเบฅเบฐเบกเบนเบ™เบ„เปˆเบฒเบเบฑเบšเบ„เบทเบ™เบ‚เบญเบ‡เบกเบฑเบ™เบ–เบทเบเบชเบปเปˆเบ‡เบเบฑเบšเบ„เปเบฒเบชเบฑเบ™เบเบฒ.

เบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰เบชเบฐเบ™เบธเบเป€เบเบตเบเบฐเบ—เบนเป‰เบ”เบฝเบงเบเบฑเบ™เป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบเบฑเบš etcd เปเบฅเบฐ Consul. เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบžเบทเป‰เบ™เบ–เบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป„เบ”เป‰เป‚เบ”เบเบซเบปเบงเบ‚เปเป‰เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบซเบผเบฒเบ. ppconsul เบšเปเปˆเปเบกเปˆเบ™เบเบฐเบ—เบนเป‰เบ—เบตเปˆเบ›เบญเบ”เป„เบž, เบชเบฐเบ™เบฑเป‰เบ™เบเบฒเบ™เป‚เบ—เบซเบฒเบกเบฑเบ™เบˆเบฐเบ–เบทเบเบ›เป‰เบญเบ‡เบเบฑเบ™เป‚เบ”เบเบเบฒเบ™เบฅเบฑเบญเบ.
เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš grpc เบˆเบฒเบเบซเบผเบฒเบเบซเบปเบงเบ‚เปเป‰, เปเบ•เปˆเบกเบต subtleties. เปƒเบ™เป‚เบกเบ‡ etcd เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบœเปˆเบฒเบ™เบชเบฒเบ grpc. เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบŠเปˆเบญเบ‡เบ—เบฒเบ‡เบชเบญเบ‡เบ—เบดเบ”เบ—เบฒเบ‡เบชเปเบฒเบฅเบฑเบšเบ‚เปเป‰เบ„เบงเบฒเบกเบ‚เบญเบ‡เบšเบฒเบ‡เบ›เบฐเป€เบžเบ”. เบซเป‰เบญเบ‡เบชเบฐเปเบธเบ”เบชเป‰เบฒเบ‡เบเบฐเบ—เบนเป‰เบ”เบฝเบงเบชเบณเบฅเบฑเบšเป‚เบกเบ‡เบ—เบฑเบ‡เปเบปเบ” เปเบฅเบฐเบเบฐเบ—เบนเป‰เบ”เบฝเบงเบ—เบตเปˆเบ›เบฐเบกเบงเบ™เบœเบปเบ™เบ‚เปเป‰เบ„เบงเบฒเบกเบ‚เบฒเป€เบ‚เบปเป‰เบฒ. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™ grpc เบซเป‰เบฒเบกเบเบฒเบ™เบ‚เบฝเบ™เบ‚เบฐเบซเบ™เบฒเบ™เป€เบžเบทเปˆเบญเบ–เปˆเบฒเบเบ—เบญเบ”. เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเป€เบกเบทเปˆเบญเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบซเบผเบทเบฅเบถเบšเป‚เบกเบ‡, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบฅเปเบ–เป‰เบฒเบˆเบปเบ™เบเปˆเบงเบฒเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒเป„เบ”เป‰เบชเปเบฒเป€เบฅเบฑเบ”เบเบฒเบ™เบชเบปเปˆเบ‡เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบชเบปเปˆเบ‡เบ•เปเปˆเป„เบ›. เบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™ synchronization เบ•เบปเบงเปเบ›เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚.

เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš

เป€เบšเบดเปˆเบ‡เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบ—เปˆเบฒเบ™เป€เบญเบ‡: liboffkv.

เบ—เบตเบกโ€‹เบ‡เบฒเบ™โ€‹เบ‚เบญเบ‡โ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒ: Raed Romanov, Ivan Glushenkov, Dmitry Kamaldinov, Victor Krapivensky, Vitaly Ivanin.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™