ื—ืžื™ืฉื” ืกื˜ื•ื“ื ื˜ื™ื ื•ืฉืœื•ืฉ ื—ื ื•ื™ื•ืช ืžืคืชื—-ืขืจืš ืžื‘ื•ื–ืจื•ืช

ืื• ืื™ืš ื›ืชื‘ื ื• ืกืคืจื™ื™ืช ืœืงื•ื— C++ ืขื‘ื•ืจ ZooKeeper, etcd ื•-Consul KV

ื‘ืขื•ืœื ื”ืžืขืจื›ื•ืช ื”ืžื‘ื•ื–ืจื•ืช ืงื™ื™ืžื•ืช ืžืกืคืจ ืžืฉื™ืžื•ืช ืื•ืคื™ื™ื ื™ื•ืช: ืื—ืกื•ืŸ ืžื™ื“ืข ืขืœ ื”ืจื›ื‘ ื”ืืฉื›ื•ืœ, ื ื™ื”ื•ืœ ืชืฆื•ืจืช ืฆืžืชื™ื, ืื™ืชื•ืจ ืฆืžืชื™ื ืคื’ื•ืžื™ื, ื‘ื—ื™ืจืช ืžื•ื‘ื™ืœ. ื•ืื—ืจื™ื. ื›ื“ื™ ืœืคืชื•ืจ ื‘ืขื™ื•ืช ืืœื•, ื ื•ืฆืจื• ืžืขืจื›ื•ืช ืžื‘ื•ื–ืจื•ืช ืžื™ื•ื—ื“ื•ืช - ืฉื™ืจื•ืชื™ ืชื™ืื•ื. ื›ืขืช ื ืชืขื ื™ื™ืŸ ื‘ืฉืœื•ืฉื” ืžื”ื: ZooKeeper, ื•ื›ื•' ื•ืงื•ื ืกื•ืœ. ืžืชื•ืš ื›ืœ ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื”ืขืฉื™ืจื” ืฉืœ ืงื•ื ืกื•ืœ, ื ืชืžืงื“ ื‘ืงื•ื ืกื•ืœ KV.

ื—ืžื™ืฉื” ืกื˜ื•ื“ื ื˜ื™ื ื•ืฉืœื•ืฉ ื—ื ื•ื™ื•ืช ืžืคืชื—-ืขืจืš ืžื‘ื•ื–ืจื•ืช

ื‘ืžื”ื•ืช, ื›ืœ ื”ืžืขืจื›ื•ืช ื”ืœืœื• ื”ืŸ ืžืื’ืจื™ ืžืคืชื—-ืขืจืš ืกื•ื‘ืœื ื™ ืชืงืœื•ืช, ื”ื ื™ืชื ื™ื ืœืœื™ื ืืจื™ื–ืฆื™ื”. ืœืžืจื•ืช ืฉืœืžื•ื“ืœื™ื ื”ื ืชื•ื ื™ื ืฉืœื”ื ื™ืฉ ื”ื‘ื“ืœื™ื ืžืฉืžืขื•ืชื™ื™ื, ืขืœื™ื”ื ื ื“ื•ืŸ ื‘ื”ืžืฉืš, ื”ื ืคื•ืชืจื™ื ืืช ืื•ืชืŸ ื‘ืขื™ื•ืช ืžืขืฉื™ื•ืช. ื‘ืจื•ืจ ืฉื›ืœ ืืคืœื™ืงืฆื™ื” ืฉืžืฉืชืžืฉืช ื‘ืฉื™ืจื•ืช ื”ืชื™ืื•ื ืงืฉื•ืจื” ืœืื—ืช ืžื”ืŸ, ืžื” ืฉืขืฉื•ื™ ืœื”ื•ื‘ื™ืœ ืœืฆื•ืจืš ืœืชืžื•ืš ื‘ืžืกืคืจ ืžืขืจื›ื•ืช ื‘ื“ื˜ื” ืกื ื˜ืจ ืื—ื“ ื”ืคื•ืชืจื•ืช ืืช ืื•ืชืŸ ื‘ืขื™ื•ืช ืขื‘ื•ืจ ืืคืœื™ืงืฆื™ื•ืช ืฉื•ื ื•ืช.

ื”ืจืขื™ื•ืŸ ืœืคืชื•ืจ ืืช ื”ื‘ืขื™ื” ื”ื–ื• ืžืงื•ืจื• ื‘ืกื•ื›ื ื•ืช ื™ื™ืขื•ืฅ ืื•ืกื˜ืจืœื™ืช, ื•ื–ื” ื ืคืœ ืขืœื™ื ื•, ืฆื•ื•ืช ืงื˜ืŸ ืฉืœ ืกื˜ื•ื“ื ื˜ื™ื, ืœื™ื™ืฉื ืื•ืชื”, ื•ืขืœื™ื• ืื ื™ ื”ื•ืœืš ืœื“ื‘ืจ.

ื”ืฆืœื—ื ื• ืœื™ืฆื•ืจ ืกืคืจื™ื™ื” ื”ืžืกืคืงืช ืžืžืฉืง ืžืฉื•ืชืฃ ืœืขื‘ื•ื“ื” ืขื ZooKeeper, etcd ื•-Consul KV. ื”ืกืคืจื™ื™ื” ื›ืชื•ื‘ื” ื‘-C++, ืื‘ืœ ื™ืฉ ืชื•ื›ื ื™ื•ืช ืœื”ืขื‘ื™ืจ ืื•ืชื” ืœืฉืคื•ืช ืื—ืจื•ืช.

ืžื•ื“ืœื™ื ืฉืœ ื ืชื•ื ื™ื

ื›ื“ื™ ืœืคืชื— ืžืžืฉืง ืžืฉื•ืชืฃ ืœืฉืœื•ืฉ ืžืขืจื›ื•ืช ืฉื•ื ื•ืช, ืขืœื™ืš ืœื”ื‘ื™ืŸ ืžื” ื”ืžืฉื•ืชืฃ ืœื”ืŸ ื•ื›ื™ืฆื“ ื”ืŸ ืฉื•ื ื•ืช. ื‘ื•ื ื ื‘ื™ืŸ ืืช ื–ื”.

ZooKeeper

ื—ืžื™ืฉื” ืกื˜ื•ื“ื ื˜ื™ื ื•ืฉืœื•ืฉ ื—ื ื•ื™ื•ืช ืžืคืชื—-ืขืจืš ืžื‘ื•ื–ืจื•ืช

ื”ืžืคืชื—ื•ืช ืžืื•ืจื’ื ื™ื ื‘ืขืฅ ื•ื ืงืจืื™ื ืฆืžืชื™ื. ื‘ื”ืชืื, ืขื‘ื•ืจ ืฆื•ืžืช ืืชื” ื™ื›ื•ืœ ืœืงื‘ืœ ืจืฉื™ืžื” ืฉืœ ื”ื™ืœื“ื™ื ืฉืœื•. ื”ืคืขื•ืœื•ืช ืฉืœ ื™ืฆื™ืจืช znode (create) ื•ืฉื™ื ื•ื™ ืขืจืš (setData) ืžื•ืคืจื“ื•ืช: ื ื™ืชืŸ ืœืงืจื•ื ื•ืœืฉื ื•ืช ืจืง ืžืคืชื—ื•ืช ืงื™ื™ืžื™ื. ื ื™ืชืŸ ืœืฆืจืฃ ืฉืขื•ื ื™ื ืœืคืขื•ืœื•ืช ื‘ื“ื™ืงืช ืงื™ื•ืžื• ืฉืœ ืฆื•ืžืช, ืงืจื™ืืช ืขืจืš ื•ืงื‘ืœืช ื™ืœื“ื™ื. Watch ื”ื•ื ื˜ืจื™ื’ืจ ื—ื“ ืคืขืžื™ ื”ืžื•ืคืขืœ ื›ืืฉืจ ื”ื’ืจืกื” ืฉืœ ื”ื ืชื•ื ื™ื ื”ืชื•ืืžื™ื ื‘ืฉืจืช ืžืฉืชื ื”. ืฆืžืชื™ื ืืจืขื™ื™ื ืžืฉืžืฉื™ื ืœืื™ืชื•ืจ ื›ืฉืœื™ื. ื”ื ืงืฉื•ืจื™ื ืœืกืฉืŸ ืฉืœ ื”ืœืงื•ื— ืฉื™ืฆืจ ืื•ืชื. ื›ืืฉืจ ืœืงื•ื— ืกื•ื’ืจ ื”ืคืขืœื” ืื• ืžืคืกื™ืง ืœื”ื•ื“ื™ืข โ€‹โ€‹ืœ-ZooKeeper ืขืœ ืงื™ื•ืžื•, ื”ืฆืžืชื™ื ื”ืœืœื• ื ืžื—ืงื™ื ื‘ืื•ืคืŸ ืื•ื˜ื•ืžื˜ื™. ืขืกืงืื•ืช ืคืฉื•ื˜ื•ืช ื ืชืžื›ื•ืช - ืงื‘ื•ืฆื” ืฉืœ ืคืขื•ืœื•ืช ืฉื›ื•ืœืŸ ืžืฆืœื™ื—ื•ืช ืื• ื ื›ืฉืœื•ืช ืื ื–ื” ืœื ืืคืฉืจื™ ืขื‘ื•ืจ ืœืคื—ื•ืช ืื—ืช ืžื”ืŸ.

ื•ื›ื• '

ื—ืžื™ืฉื” ืกื˜ื•ื“ื ื˜ื™ื ื•ืฉืœื•ืฉ ื—ื ื•ื™ื•ืช ืžืคืชื—-ืขืจืš ืžื‘ื•ื–ืจื•ืช

ืžืคืชื—ื™ ื”ืžืขืจื›ืช ื”ื–ื• ืงื™ื‘ืœื• ื”ืฉืจืื” ื‘ืจื•ืจื” ืž-ZooKeeper, ื•ืœื›ืŸ ืขืฉื• ื”ื›ืœ ืื—ืจืช. ืื™ืŸ ื”ื™ืจืจื›ื™ื” ืฉืœ ืžืคืชื—ื•ืช, ืื‘ืœ ื”ื ื™ื•ืฆืจื™ื ืงื‘ื•ืฆื” ืžืกื•ื“ืจืช ืžื‘ื—ื™ื ื” ืœืงืกื™ืงื•ื’ืจืคื™ืช. ืืชื” ื™ื›ื•ืœ ืœืงื‘ืœ ืื• ืœืžื—ื•ืง ืืช ื›ืœ ื”ืžืคืชื—ื•ืช ื”ืฉื™ื™ื›ื™ื ืœื˜ื•ื•ื— ืžืกื•ื™ื. ื”ืžื‘ื ื” ื”ื–ื” ืื•ืœื™ ื ืจืื” ืžื•ื–ืจ, ืื‘ืœ ื”ื•ื ืœืžืขืฉื” ืืงืกืคืจืกื™ื‘ื™ ืžืื•ื“, ื•ื ื™ืชืŸ ืœื—ืงื•ืช ื“ืจื›ื• ื‘ืงืœื•ืช ื”ืฉืงืคื” ื”ื™ืจืจื›ื™ืช.

ืœ-etcd ืื™ืŸ ืคืขื•ืœืช ื”ืฉื•ื•ืื”-ื•ืงื‘ืข ืกื˜ื ื“ืจื˜ื™ืช, ืื‘ืœ ื™ืฉ ืœื” ืžืฉื”ื• ื˜ื•ื‘ ื™ื•ืชืจ: ืขืกืงืื•ืช. ื›ืžื•ื‘ืŸ ืฉื”ื ืงื™ื™ืžื™ื ื‘ื›ืœ ืฉืœื•ืฉ ื”ืžืขืจื›ื•ืช, ืื‘ืœ ืขืกืงืื•ืช ื•ื›ื•' ื˜ื•ื‘ื•ืช ื‘ืžื™ื•ื—ื“. ื”ื ืžื•ืจื›ื‘ื™ื ืžืฉืœื•ืฉื” ื‘ืœื•ืงื™ื: ื‘ื“ื™ืงื”, ื”ืฆืœื—ื”, ื›ื™ืฉืœื•ืŸ. ื”ื‘ืœื•ืง ื”ืจืืฉื•ืŸ ืžื›ื™ืœ ืงื‘ื•ืฆื” ืฉืœ ืชื ืื™ื, ื”ืฉื ื™ ื•ื”ืฉืœื™ืฉื™ - ืคืขื•ืœื•ืช. ื”ืขืกืงื” ืžื‘ื•ืฆืขืช ื‘ืฆื•ืจื” ืื˜ื•ืžื™ืช. ืื ื›ืœ ื”ืชื ืื™ื ืžืชืงื™ื™ืžื™ื, ืื–ื™ ื‘ืœื•ืง ื”ื”ืฆืœื—ื” ืžื‘ื•ืฆืข, ืื—ืจืช ื‘ืœื•ืง ื”ื›ืฉืœ ืžื‘ื•ืฆืข. ื‘-API 3.3, ื‘ืœื•ืงื™ื ืฉืœ ื”ืฆืœื—ื” ื•ื›ื™ืฉืœื•ืŸ ื™ื›ื•ืœื™ื ืœื”ื›ื™ืœ ื˜ืจื ื–ืงืฆื™ื•ืช ืžืงื•ื ื ื•ืช. ื›ืœื•ืžืจ, ื ื™ืชืŸ ืœื‘ืฆืข ื‘ืฆื•ืจื” ืื˜ื•ืžื™ืช ืžื‘ื ื™ื ืžื•ืชื ื™ื ื‘ืจืžืช ืงื™ื ื•ืŸ ื›ืžืขื˜ ืฉืจื™ืจื•ืชื™ืช. ืืชื” ื™ื›ื•ืœ ืœืœืžื•ื“ ืขื•ื“ ืขืœ ืžื” ื‘ื“ื™ืงื•ืช ื•ืคืขื•ืœื•ืช ืงื™ื™ืžื™ื ืชื™ืขื•ื“.

ืฉืขื•ื ื™ื ืงื™ื™ืžื™ื ื’ื ื›ืืŸ, ืœืžืจื•ืช ืฉื”ื ืงืฆืช ื™ื•ืชืจ ืžืกื•ื‘ื›ื™ื ื•ื ื™ืชื ื™ื ืœืฉื™ืžื•ืฉ ื—ื•ื–ืจ. ื›ืœื•ืžืจ, ืœืื—ืจ ื”ืชืงื ืช ืฉืขื•ืŸ ืขืœ ื˜ื•ื•ื— ืžืคืชื—ื•ืช ืชืงื‘ืœื• ืืช ื›ืœ ื”ืขื“ื›ื•ื ื™ื ื‘ื˜ื•ื•ื— ื”ื–ื” ืขื“ ืฉืชื‘ื˜ืœื• ืืช ื”ืฉืขื•ืŸ, ื•ืœื ืจืง ืืช ื”ืจืืฉื•ืŸ. ื‘-etcd, ื”ืื ืœื•ื’ื™ ืฉืœ ื”ืคืขืœื•ืช ืฉืœ ืœืงื•ื— ZooKeeper ื”ืŸ ื—ื•ื–ื™ ืฉื›ื™ืจื•ืช.

ืงื•ื ืกื•ืœ K.V.

ืื™ืŸ ื›ืืŸ ื’ื ืžื‘ื ื” ื”ื™ืจืจื›ื™ ืงืคื“ื ื™, ืื‘ืœ ืงื•ื ืกื•ืœ ื™ื›ื•ืœ ืœื™ืฆื•ืจ ืืช ื”ืžืจืื” ืฉื”ื•ื ืงื™ื™ื: ืืชื” ื™ื›ื•ืœ ืœืงื‘ืœ ื•ืœืžื—ื•ืง ืืช ื›ืœ ื”ืžืคืชื—ื•ืช ืขื ื”ืงื™ื“ื•ืžืช ืฉืฆื•ื™ื ื”, ื›ืœื•ืžืจ ืœืขื‘ื•ื“ ืขื "ืชืช ื”ืขืฅ" ืฉืœ ื”ืžืคืชื—. ืฉืื™ืœืชื•ืช ื›ืืœื” ื ืงืจืื•ืช ืจืงื•ืจืกื™ื‘ื™ื•ืช. ื‘ื ื•ืกืฃ, ืงื•ื ืกื•ืœ ื™ื›ื•ืœ ืœื‘ื—ื•ืจ ืจืง ืžืคืชื—ื•ืช ืฉืื™ื ื ืžื›ื™ืœื™ื ืืช ื”ืชื• ืฉืฆื•ื™ืŸ ืœืื—ืจ ื”ืงื™ื“ื•ืžืช, ื”ืžืชืื™ื ืœื”ืฉื’ืช "ื™ืœื“ื™ื" ืžื™ื™ื“ื™ืช. ืื‘ืœ ื›ื“ืื™ ืœื–ื›ื•ืจ ืฉื–ื” ื‘ื“ื™ื•ืง ื”ืžืจืื” ืฉืœ ืžื‘ื ื” ื”ื™ืจืจื›ื™: ื‘ื”ื—ืœื˜ ืืคืฉืจ ืœื™ืฆื•ืจ ืžืคืชื— ืื ื”ื”ื•ืจื” ืฉืœื• ืœื ืงื™ื™ื ืื• ืœืžื—ื•ืง ืžืคืชื— ืฉื™ืฉ ืœื• ื™ืœื“ื™ื, ื‘ืขื•ื“ ื”ื™ืœื“ื™ื ื™ืžืฉื™ื›ื• ืœื”ื™ื•ืช ืžืื•ื—ืกื ื™ื ื‘ืžืขืจื›ืช.

ื—ืžื™ืฉื” ืกื˜ื•ื“ื ื˜ื™ื ื•ืฉืœื•ืฉ ื—ื ื•ื™ื•ืช ืžืคืชื—-ืขืจืš ืžื‘ื•ื–ืจื•ืช
ื‘ืžืงื•ื ืฉืขื•ื ื™ื, ืœืงื•ื ืกื•ืœ ื™ืฉ ื‘ืงืฉื•ืช HTTP ื—ืกื™ืžื•ืช. ื‘ืขืฆื, ืžื“ื•ื‘ืจ ื‘ืงืจื™ืื•ืช ืจื’ื™ืœื•ืช ืœืฉื™ื˜ืช ืงืจื™ืืช ื”ื ืชื•ื ื™ื, ืฉืœื’ื‘ื™ื”ืŸ, ื™ื—ื“ ืขื ืคืจืžื˜ืจื™ื ื ื•ืกืคื™ื, ืžืฆื•ื™ื ืช ื”ื’ืจืกื” ื”ื™ื“ื•ืขื” ื”ืื—ืจื•ื ื” ืฉืœ ื”ื ืชื•ื ื™ื. ืื ื”ื’ืจืกื” ื”ื ื•ื›ื—ื™ืช ืฉืœ ื”ื ืชื•ื ื™ื ื”ืžืชืื™ืžื™ื ื‘ืฉืจืช ื’ื“ื•ืœื” ืžื”ื’ืจืกื” ืฉืฆื•ื™ื ื”, ื”ืชื’ื•ื‘ื” ืžื•ื—ื–ืจืช ืžื™ื“, ืื—ืจืช - ื›ืืฉืจ ื”ืขืจืš ืžืฉืชื ื”. ื™ืฉื ื ื’ื ื”ืคืขืœื•ืช ืฉื ื™ืชืŸ ืœืฆืจืฃ ืœืžืคืชื—ื•ืช ื‘ื›ืœ ืขืช. ืจืื•ื™ ืœืฆื™ื™ืŸ ืฉื‘ื ื™ื’ื•ื“ ืœ-etcd ื•-ZooKeeper, ื›ืืฉืจ ืžื—ื™ืงืช ื”ืคืขืœื•ืช ืžื•ื‘ื™ืœื” ืœืžื—ื™ืงืช ื”ืžืคืชื—ื•ืช ื”ืžืฉื•ื™ื›ื™ื, ื™ืฉื ื• ืžืฆื‘ ืฉื‘ื• ื”ืกืฉืŸ ืคืฉื•ื˜ ืžื ื•ืชืง ืžื”ื. ื–ืžื™ืŸ ืขืกืงืื•ืช, ื‘ืœื™ ืกื ื™ืคื™ื, ืื‘ืœ ืขื ื›ืœ ืžื™ื ื™ ืฆ'ืงื™ื.

ืžื—ื‘ืจื™ื ืืช ื”ื›ืœ ื‘ื™ื—ื“

ืœ-ZooKeeper ื™ืฉ ืืช ืžื•ื“ืœ ื”ื ืชื•ื ื™ื ื”ืžื—ืžื™ืจ ื‘ื™ื•ืชืจ. ืœื ื ื™ืชืŸ ืœื—ืงื•ืช ื‘ื™ืขื™ืœื•ืช ืืช ืฉืื™ืœืชื•ืช ื˜ื•ื•ื— ื”ื‘ื™ื˜ื•ื™ ื”ื–ืžื™ื ื•ืช ื‘-etcd ื‘-ZooKeeper ืื• ื‘-Consul. ื‘ื ื™ืกื™ื•ืŸ ืœืฉืœื‘ ืืช ื”ื˜ื•ื‘ ื‘ื™ื•ืชืจ ืžื›ืœ ื”ืฉื™ืจื•ืชื™ื, ื”ื’ืขื ื• ืœืžืžืฉืง ื›ืžืขื˜ ืฉื•ื•ื” ืขืจืš ืœืžืžืฉืง ZooKeeper ืขื ื”ื—ืจื™ื’ื™ื ื”ืžืฉืžืขื•ืชื™ื™ื ื”ื‘ืื™ื:

  • ืฆืžืชื™ ืจืฆืฃ, ืžื™ื›ืœ ื•-TTL ืื™ื ื• ื ืชืžืš
  • ืจืฉื™ืžื•ืช ACL ืื™ื ืŸ ื ืชืžื›ื•ืช
  • ืฉื™ื˜ืช ื”ืกื˜ ื™ื•ืฆืจืช ืžืคืชื— ืื ื”ื•ื ืœื ืงื™ื™ื (ื‘-ZK setData ืžื—ื–ื™ืจื” ืฉื’ื™ืื” ื‘ืžืงืจื” ื–ื”)
  • ืฉื™ื˜ื•ืช set ื•-cas ืžื•ืคืจื“ื•ืช (ื‘-ZK ื”ืŸ ื‘ืขืฆื ืื•ืชื• ื“ื‘ืจ)
  • ืฉื™ื˜ืช ื”ืžื—ื™ืงื” ืžื•ื—ืงืช ืฆื•ืžืช ื™ื—ื“ ืขื ืชืช ื”ืขืฅ ืฉืœื• (ื‘-ZK ืžื—ื™ืงื” ืžื—ื–ื™ืจื” ืฉื’ื™ืื” ืื โ€‹โ€‹ืœืฆื•ืžืช ื™ืฉ ื™ืœื“ื™ื)
  • ืœื›ืœ ืžืคืชื— ื™ืฉ ืจืง ื’ืจืกื” ืื—ืช - ื’ืจืกืช ื”ืขืจืš (ื‘-ZK ื™ืฉ ืฉืœื•ืฉื” ืžื”ื)

ื”ื“ื—ื™ื™ื” ืฉืœ ืฆืžืชื™ื ืขื•ืงื‘ื™ื ื ื•ื‘ืขืช ืžื”ืขื•ื‘ื“ื” ืฉืœ-etcd ื•-Consul ืื™ืŸ ืชืžื™ื›ื” ืžื•ื‘ื ื™ืช ืขื‘ื•ืจื, ื•ื ื™ืชืŸ ืœื™ื™ืฉื ืื•ืชื ื‘ืงืœื•ืช ืขืœ ื™ื“ื™ ื”ืžืฉืชืžืฉ ืขืœ ื’ื‘ื™ ืžืžืฉืง ื”ืกืคืจื™ื™ื” ื”ืžืชืงื‘ืœ.

ื™ื™ืฉื•ื ื”ืชื ื”ื’ื•ืช ื“ื•ืžื” ืœ-ZooKeeper ื‘ืขืช ืžื—ื™ืงืช ืงื•ื“ืงื•ื“ ื™ื“ืจื•ืฉ ืฉืžื™ืจื” ืขืœ ืžื•ื ื” ื™ืœื“ ื ืคืจื“ ืขื‘ื•ืจ ื›ืœ ืžืคืชื— ื‘-etcd ื•ื‘-Consul. ืžื›ื™ื•ื•ืŸ ืฉื ื™ืกื™ื ื• ืœื”ื™ืžื ืข ืžืื™ื—ืกื•ืŸ ืžื˜ื ืžื™ื“ืข, ื”ื•ื—ืœื˜ ืœืžื—ื•ืง ืืช ื›ืœ ื”ืžืฉื ื”.

ื“ืงื•ื™ื•ืช ืฉืœ ื™ื™ืฉื•ื

ื‘ื•ืื• ื ืกืชื›ืœ ืžืงืจื•ื‘ ืขืœ ื›ืžื” ื”ื™ื‘ื˜ื™ื ืฉืœ ื”ื˜ืžืขืช ืžืžืฉืง ื”ืกืคืจื™ื™ื” ื‘ืžืขืจื›ื•ืช ืฉื•ื ื•ืช.

ื”ื™ืจืจื›ื™ื” ื‘ ื•ื›ื•'

ืฉืžื™ืจื” ืขืœ ื”ืฉืงืคื” ื”ื™ืจืจื›ื™ืช ื‘-etcd ื”ืชื‘ืจืจื” ื›ืื—ืช ื”ืžืฉื™ืžื•ืช ื”ืžืขื ื™ื™ื ื•ืช ื‘ื™ื•ืชืจ. ืฉืื™ืœืชื•ืช ื˜ื•ื•ื— ืžืงืœื•ืช ืขืœ ืื—ื–ื•ืจ ืจืฉื™ืžื” ืฉืœ ืžืคืชื—ื•ืช ืขื ืงื™ื“ื•ืžืช ืžื•ื’ื“ืจืช. ืœื“ื•ื’ืžื”, ืื ืืชื” ืฆืจื™ืš ื›ืœ ืžื” ืฉืžืชื—ื™ืœ ืขื "/foo", ืืชื” ืžื‘ืงืฉ ื˜ื•ื•ื— ["/foo", "/fop"). ืื‘ืœ ื–ื” ื™ื—ื–ื™ืจ ืืช ื›ืœ ื”ืžืฉื ื” ืฉืœ ื”ืžืคืชื—, ืžื” ืฉืื•ืœื™ ืœื ื™ื”ื™ื” ืžืงื•ื‘ืœ ืื ืชืช ื”ืขืฅ ื’ื“ื•ืœ. ื‘ื”ืชื—ืœื” ืชื›ื ื ื• ืœื”ืฉืชืžืฉ ื‘ืžื ื’ื ื•ืŸ ืชืจื’ื•ื ืžืจื›ื–ื™, ืžื™ื•ืฉื ื‘-zetcd. ื–ื” ื›ื•ืœืœ ื”ื•ืกืคืช ื‘ื™ื™ื˜ ืื—ื“ ื‘ืชื—ื™ืœืช ื”ืžืคืชื—, ืฉื•ื•ื” ืœืขื•ืžืง ื”ืฆื•ืžืช ื‘ืขืฅ. ืชืŸ ืœื™ ืœืชืช ืœืš ื“ื•ื’ืžื”.

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

ืื– ืงื‘ืœ ืืช ื›ืœ ื”ื™ืœื“ื™ื ื”ืžื™ื™ื“ื™ื™ื ืฉืœ ื”ืžืคืชื— "/foo" ืืคืฉืจื™ ืขืœ ื™ื“ื™ ื‘ืงืฉืช ื˜ื•ื•ื— ["u02/foo/", "u02/foo0"). ื›ืŸ, ื‘-ASCII "0" ืขื•ืžื“ ืžื™ื“ ืื—ืจื™ "/".

ืื‘ืœ ืื™ืš ืœื™ื™ืฉื ืืช ื”ืกืจืช ืงื•ื“ืงื•ื“ ื‘ืžืงืจื” ื–ื”? ืžืกืชื‘ืจ ืฉืฆืจื™ืš ืœืžื—ื•ืง ืืช ื›ืœ ื”ื˜ื•ื•ื—ื™ื ืžื”ืกื•ื’ ["uXX/foo/", "uXX/foo0") ืขื‘ื•ืจ XX ืž-01 ืขื“ FF. ื•ืื– ื ืชืงืœื ื• ื”ื’ื‘ืœืช ืžืกืคืจ ื”ืคืขื•ืœื” ื‘ืชื•ืš ืขืกืงื” ืื—ืช.

ื›ืชื•ืฆืื” ืžื›ืš ื”ื•ืžืฆืื” ืžืขืจื›ืช ื”ืžืจืช ืžืคืชื— ืคืฉื•ื˜ื”, ืฉืืคืฉืจื” ืœื™ื™ืฉื ื‘ื™ืขื™ืœื•ืช ื’ื ืžื—ื™ืงืช ืžืคืชื— ื•ื’ื ืงื‘ืœืช ืจืฉื™ืžืช ื™ืœื“ื™ื. ืžืกืคื™ืง ืœื”ื•ืกื™ืฃ ืชื• ืžื™ื•ื—ื“ ืœืคื ื™ ื”ืืกื™ืžื•ืŸ ื”ืื—ืจื•ืŸ. ืœื“ื•ื’ืžื”:

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

ื•ืื– ืœืžื—ื•ืง ืืช ื”ืžืคืชื— "/very" ื”ื•ืคืš ืœืžื—ื™ืงื” "/u00very" ื•ื˜ื•ื•ื— ["/very/", "/very0"), ื•ืงื‘ืœืช ื›ืœ ื”ื™ืœื“ื™ื - ื‘ื‘ืงืฉื” ืœืžืคืชื—ื•ืช ืžื”ืžื˜ื•ื•ื— ["/very/u00", "/very/u01").

ื”ืกืจืช ืžืคืชื— ื‘-ZooKeeper

ื›ืคื™ ืฉื›ื‘ืจ ืฆื™ื™ื ืชื™, ื‘-ZooKeeper ืœื ื ื™ืชืŸ ืœืžื—ื•ืง ืฆื•ืžืช ืื ื™ืฉ ืœื• ื™ืœื“ื™ื. ืื ื• ืจื•ืฆื™ื ืœืžื—ื•ืง ืืช ื”ืžืคืชื— ื™ื—ื“ ืขื ืขืฅ ื”ืžืฉื ื”. ืžื” ืขืœื™ ืœืขืฉื•ืช? ืื ื—ื ื• ืขื•ืฉื™ื ืืช ื–ื” ื‘ืื•ืคื˜ื™ืžื™ื•ืช. ืจืืฉื™ืช, ืื ื• ื—ื•ืฆื™ื ื‘ืื•ืคืŸ ืจืงื•ืจืกื™ื‘ื™ ืืช ืชืช-ื”ืขืฅ, ื•ืžืฉื™ื’ื™ื ืืช ื”ื™ืœื“ื™ื ืฉืœ ื›ืœ ืงื•ื“ืงื•ื“ ื‘ืืžืฆืขื•ืช ืฉืื™ืœืชื” ื ืคืจื“ืช. ืœืื—ืจ ืžื›ืŸ ืื ื• ื‘ื•ื ื™ื ื˜ืจื ื–ืงืฆื™ื” ืฉืžื ืกื” ืœืžื—ื•ืง ืืช ื›ืœ ื”ืฆืžืชื™ื ืฉืœ ืชืช-ื”ืขืฅ ื‘ืกื“ืจ ื”ื ื›ื•ืŸ. ื›ืžื•ื‘ืŸ, ืฉื™ื ื•ื™ื™ื ื™ื›ื•ืœื™ื ืœื”ืชืจื—ืฉ ื‘ื™ืŸ ืงืจื™ืืช ืชืช-ืขืฅ ืœื‘ื™ืŸ ืžื—ื™ืงืชื•. ื‘ืžืงืจื” ื–ื”, ื”ืขืกืงื” ืชื™ื›ืฉืœ. ื™ืชืจ ืขืœ ื›ืŸ, ืชืช ื”ืขืฅ ืขืฉื•ื™ ืœื”ืฉืชื ื•ืช ื‘ืžื”ืœืš ืชื”ืœื™ืš ื”ืงืจื™ืื”. ื‘ืงืฉื” ืœื™ืœื“ื™ื ืฉืœ ื”ืฆื•ืžืช ื”ื‘ื ืขืฉื•ื™ื” ืœื”ื—ื–ื™ืจ ืฉื’ื™ืื” ืื, ืœืžืฉืœ, ืฆื•ืžืช ื–ื” ื›ื‘ืจ ื ืžื—ืง. ื‘ืฉื ื™ ื”ืžืงืจื™ื, ืื ื• ื—ื•ื–ืจื™ื ืขืœ ื›ืœ ื”ืชื”ืœื™ืš ืฉื•ื‘.

ื’ื™ืฉื” ื–ื• ื”ื•ืคื›ืช ืžื—ื™ืงืช ืžืคืชื— ืœืžืื•ื“ ืœื ื™ืขื™ืœื” ืื ื™ืฉ ืœื• ื™ืœื“ื™ื, ื•ืขื•ื“ ื™ื•ืชืจ ืื ื”ืืคืœื™ืงืฆื™ื” ืžืžืฉื™ื›ื” ืœืขื‘ื•ื“ ืขื ืชืช-ืขืฅ, ืžื—ื™ืงื” ื•ื™ืฆื™ืจืช ืžืคืชื—ื•ืช. ืขื ื–ืืช, ื–ื” ืืคืฉืจ ืœื ื• ืœื”ื™ืžื ืข ืžืกื™ื‘ื•ืš ืฉืœ ื™ื™ืฉื•ื ืฉื™ื˜ื•ืช ืื—ืจื•ืช ื‘-etcd ื•ื‘ืงื•ื ืกื•ืœ.

ืžืชืจื—ืฉ ื‘-ZooKeeper

ื‘-ZooKeeper ื™ืฉื ืŸ ืฉื™ื˜ื•ืช ื ืคืจื“ื•ืช ืฉืขื•ื‘ื“ื•ืช ืขื ืžื‘ื ื” ื”ืขืฅ (create, delete, getChildren) ื•ืขื•ื‘ื“ื•ืช ืขื ื ืชื•ื ื™ื ื‘ืฆืžืชื™ื (setData, getData) ื™ืชืจื” ืžื›ืš, ืœื›ืœ ื”ืฉื™ื˜ื•ืช ื™ืฉ ืชื ืื™ื ืžื•ืงื“ืžื™ื ืงืคื“ื ื™ื™ื: create ืชื—ื–ื™ืจ ืฉื’ื™ืื” ืื โ€‹โ€‹ื”ืฆื•ืžืช ื›ื‘ืจ ื ื•ืฆืจ, ืžื—ืง ืื• setData - ืื ื”ื•ื ืขื“ื™ื™ืŸ ืœื ืงื™ื™ื. ื”ื™ื™ื ื• ืฆืจื™ื›ื™ื ืฉื™ื˜ื” ืžื•ื’ื“ืจืช ืฉืืคืฉืจ ืœืงืจื•ื ืœื” ื‘ืœื™ ืœื—ืฉื•ื‘ ืขืœ ื ื•ื›ื—ื•ืช ืฉืœ ืžืคืชื—.

ืืคืฉืจื•ืช ืื—ืช ื”ื™ื ืœื ืงื•ื˜ ื‘ื’ื™ืฉื” ืื•ืคื˜ื™ืžื™ืช, ื›ืžื• ื‘ืžื—ื™ืงื”. ื‘ื“ื•ืง ืื ืงื™ื™ื ืฆื•ืžืช. ืื ืงื™ื™ื, ื”ืชืงืฉืจ ืœ-setData, ืื—ืจืช ืฆื•ืจ. ืื ื”ืฉื™ื˜ื” ื”ืื—ืจื•ื ื” ื”ื—ื–ื™ืจื” ืฉื’ื™ืื”, ื—ื–ื•ืจ ืขืœื™ื” ืฉื•ื‘. ื”ื“ื‘ืจ ื”ืจืืฉื•ืŸ ืฉื™ืฉ ืœืฆื™ื™ืŸ ื”ื•ื ืฉืžื‘ื—ืŸ ื”ืงื™ื•ื ื”ื•ื ื—ืกืจ ื˜ืขื. ืืชื” ื™ื›ื•ืœ ืžื™ื“ ืœื”ืชืงืฉืจ ืœื™ืฆื•ืจ. ื”ืฉืœืžื” ืžื•ืฆืœื—ืช ืชื’ืจื•ื ืœื›ืš ืฉื”ืฆื•ืžืช ืœื ื”ื™ื” ืงื™ื™ื ื•ื”ื•ื ื ื•ืฆืจ. ืื—ืจืช, create ืชื—ื–ื™ืจ ืืช ื”ืฉื’ื™ืื” ื”ืžืชืื™ืžื”, ื•ืœืื—ืจ ืžื›ืŸ ืขืœื™ืš ืœื”ืชืงืฉืจ ืœ-setData. ื›ืžื•ื‘ืŸ ืฉื‘ื™ืŸ ืงืจื™ืื”, ืงื•ื“ืงื•ื“ ื™ื›ื•ืœ ืœื”ื™ืžื—ืง ืขืœ ื™ื“ื™ ืงืจื™ืื” ืžืชื—ืจื”, ื•ื’ื setData ื™ื—ื–ื™ืจ ืฉื’ื™ืื”. ื‘ืžืงืจื” ื–ื”, ืืชื” ื™ื›ื•ืœ ืœืขืฉื•ืช ื”ื›ืœ ืฉื•ื‘, ืื‘ืœ ื”ืื ื–ื” ืฉื•ื•ื” ืืช ื–ื”?

ืื ืฉืชื™ ื”ืฉื™ื˜ื•ืช ืžื—ื–ื™ืจื•ืช ืฉื’ื™ืื”, ืื– ืื ื—ื ื• ื™ื•ื“ืขื™ื ื‘ื•ื•ื“ืื•ืช ืฉื”ืชืจื—ืฉื” ืžื—ื™ืงื” ืžืชื—ืจื”. ื”ื‘ื” ื ื“ืžื™ื™ืŸ ืฉื”ืžื—ื™ืงื” ื”ื–ื• ื”ืชืจื—ืฉื” ืœืื—ืจ ื”ืงืจื™ืื” ืœื”ื’ื“ื™ืจ. ืื– ื›ืœ ื”ืžืฉืžืขื•ืช ืฉืื ื• ืžื ืกื™ื ืœื‘ืกืก ื›ื‘ืจ ื ืžื—ืงื”. ื–ื” ืื•ืžืจ ืฉืื ื—ื ื• ื™ื›ื•ืœื™ื ืœื”ื ื™ื— ืฉื”ืกื˜ ื‘ื•ืฆืข ื‘ื”ืฆืœื—ื”, ื’ื ืื ืœื ื ื›ืชื‘ ื›ืœื•ื.

ืคืจื˜ื™ื ื˜ื›ื ื™ื™ื ื ื•ืกืคื™ื

ื‘ื—ืœืง ื–ื” ื ื™ืงื— ื”ืคืกืงื” ืžืžืขืจื›ื•ืช ืžื‘ื•ื–ืจื•ืช ื•ื ื“ื‘ืจ ืขืœ ืงื™ื“ื•ื“.
ืื—ืช ื”ื“ืจื™ืฉื•ืช ื”ืขื™ืงืจื™ื•ืช ืฉืœ ื”ืœืงื•ื— ื”ื™ื™ืชื” ื—ื•ืฆื” ืคืœื˜ืคื•ืจืžื•ืช: ืœืคื—ื•ืช ืื—ื“ ืžื”ืฉื™ืจื•ืชื™ื ื—ื™ื™ื‘ ืœื”ื™ื•ืช ื ืชืžืš ื‘-Linux, MacOS ื•-Windows. ื‘ืชื—ื™ืœื”, ืคื™ืชื—ื ื• ืจืง ืขื‘ื•ืจ ืœื™ื ื•ืงืก, ื•ื”ืชื—ืœื ื• ืœื‘ื“ื•ืง ื‘ืžืขืจื›ื•ืช ืื—ืจื•ืช ืžืื•ื—ืจ ื™ื•ืชืจ. ื–ื” ื’ืจื ืœื”ืจื‘ื” ื‘ืขื™ื•ืช, ืฉื‘ืžืฉืš ื–ืžืŸ ืžื” ื”ื™ื” ืœื’ืžืจื™ ืœื ื‘ืจื•ืจ ืื™ืš ืœื’ืฉืช. ื›ืชื•ืฆืื” ืžื›ืš, ื›ืœ ืฉืœื•ืฉืช ืฉื™ืจื•ืชื™ ื”ืชื™ืื•ื ื ืชืžื›ื™ื ื›ืขืช ื‘-Linux ื•ื‘-MacOS, ื‘ืขื•ื“ ืฉืจืง Consul KV ื ืชืžืš ื‘-Windows.

ื›ื‘ืจ ืžื”ื”ืชื—ืœื” ื ื™ืกื™ื ื• ืœื”ืฉืชืžืฉ ื‘ืกืคืจื™ื•ืช ืžื•ื›ื ื•ืช ื›ื“ื™ ืœื’ืฉืช ืœืฉื™ืจื•ืชื™ื. ื‘ืžืงืจื” ืฉืœ ZooKeeper, ื”ื‘ื—ื™ืจื” ื ืคืœื” ืขืœ ZooKeeper C++, ืฉื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ ืœื ื”ืฆืœื™ื— ืœื”ื“ืจ ื‘-Windows. ืขื ื–ืืช, ื–ื” ืœื ืžืคืชื™ืข: ื”ืกืคืจื™ื™ื” ืžืžื•ืงืžืช ื›ืœื™ื ื•ืงืก ื‘ืœื‘ื“. ืขื‘ื•ืจ ืงื•ื ืกื•ืœ ื”ืืคืฉืจื•ืช ื”ื™ื—ื™ื“ื” ื”ื™ื™ืชื” ppconsul. ื”ื™ื” ืฆืจื™ืš ืœื”ื•ืกื™ืฃ ืœื• ืชืžื™ื›ื” ื”ืคืขืœื•ืช ะธ ืขืกืงืื•ืช. ืขื‘ื•ืจ etcd, ืกืคืจื™ื™ื” ืžืœืื” ื”ืชื•ืžื›ืช ื‘ื’ืจืกื” ื”ืขื“ื›ื ื™ืช ื‘ื™ื•ืชืจ ืฉืœ ื”ืคืจื•ื˜ื•ืงื•ืœ ืœื ื ืžืฆืื”, ืื– ืื ื—ื ื• ืคืฉื•ื˜ ืœืงื•ื— grpc ืฉื ื•ืฆืจ.

ื‘ื”ืฉืจืืช ื”ืžืžืฉืง ื”ืืกื™ื ื›ืจื•ื ื™ ืฉืœ ืกืคืจื™ื™ืช ZooKeeper C++, ื”ื—ืœื˜ื ื• ืœื™ื™ืฉื ื’ื ืžืžืฉืง ืืกื™ื ื›ืจื•ื ื™. ZooKeeper C++ ืžืฉืชืžืฉ ื‘ืคืจื™ืžื™ื˜ื™ื‘ื™ื ืขืชื™ื“ื™ื™ื/ื”ื‘ื˜ื—ื•ืช ืœืฉื ื›ืš. ื‘-STL, ืœืžืจื‘ื” ื”ืฆืขืจ, ื”ื ืžื™ื•ืฉืžื™ื ื‘ืฆื•ืจื” ืžืื•ื“ ืฆื ื•ืขื”. ืœืžืฉืœ, ืœื ื•ืื– ืฉื™ื˜ื”, ื”ืžื—ื™ืœ ืืช ื”ืคื•ื ืงืฆื™ื” ืฉืขื‘ืจื” ืขืœ ื”ืชื•ืฆืื” ืฉืœ ื”ืขืชื™ื“ ื›ืืฉืจ ื”ื™ื ืชื”ื™ื” ื–ืžื™ื ื”. ื‘ืžืงืจื” ืฉืœื ื•, ืฉื™ื˜ื” ื›ื–ื• ื ื—ื•ืฆื” ื›ื“ื™ ืœื”ืžื™ืจ ืืช ื”ืชื•ืฆืื” ืœืคื•ืจืžื˜ ืฉืœ ื”ืกืคืจื™ื™ื” ืฉืœื ื•. ื›ื“ื™ ืœืขืงื•ืฃ ืืช ื”ื‘ืขื™ื” ื”ื–ื•, ื”ื™ื™ื ื• ืฆืจื™ื›ื™ื ืœื™ื™ืฉื ืžืื’ืจ ืฉืจืฉื•ืจื™ื ืคืฉื•ื˜ ืžืฉืœื ื•, ืฉื›ืŸ ืœื‘ืงืฉืช ื”ืœืงื•ื— ืœื ื™ื›ื•ืœื ื• ืœื”ืฉืชืžืฉ ื‘ืกืคืจื™ื•ืช ืฆื“ ืฉืœื™ืฉื™ ื›ื‘ื“ื•ืช ื›ืžื• Boost.

ื”ื™ื™ืฉื•ื ืฉืœื ื• ืื– ืขื•ื‘ื“ ื›ื›ื”. ื›ืฉื ืงืจื, ื ื•ืฆืจ ื–ื•ื’ ื”ื‘ื˜ื—ื”/ืขืชื™ื“ ื ื•ืกืฃ. ื”ืขืชื™ื“ ื”ื—ื“ืฉ ืžื•ื—ื–ืจ, ื•ื”ืขืชื™ื“ ืฉืขื‘ืจ ืžื•ืฆื‘ ื™ื—ื“ ืขื ื”ืคื•ื ืงืฆื™ื” ื”ืžืชืื™ืžื” ื•ื”ื‘ื˜ื—ื” ื ื•ืกืคืช ื‘ืชื•ืจ. ืฉืจืฉื•ืจ ืžื”ืžืื’ืจ ื‘ื•ื—ืจ ืžืกืคืจ ืขืชื™ื“ื™ื ืžื”ืชื•ืจ ื•ืžืกืงืจ ืื•ืชื ื‘ืืžืฆืขื•ืช wait_for. ื›ืืฉืจ ืชื•ืฆืื” ื–ืžื™ื ื”, ื”ืคื•ื ืงืฆื™ื” ื”ืžืชืื™ืžื” ื ืงืจืืช ื•ืขืจืš ื”ื”ื—ื–ืจ ืฉืœื” ืžื•ืขื‘ืจ ืœื”ื‘ื˜ื—ื”.

ื”ืฉืชืžืฉื ื• ื‘ืื•ืชื• ืžืื’ืจ ืฉืจืฉื•ืจื™ื ื›ื“ื™ ืœื‘ืฆืข ืฉืื™ืœืชื•ืช ืœ-etcd ื•ืœConsul. ืžืฉืžืขื•ืช ื”ื“ื‘ืจ ื”ื™ื ืฉื ื™ืชืŸ ืœื’ืฉืช ืœืกืคืจื™ื•ืช ื”ื‘ืกื™ืกื™ื•ืช ื‘ืืžืฆืขื•ืช ืฉืจืฉื•ืจื™ื ืฉื•ื ื™ื. ppconsul ืื™ื ื• ื‘ื˜ื•ื— ื‘ืฉืจืฉื•ืจ, ื•ืœื›ืŸ ืฉื™ื—ื•ืช ืืœื™ื• ืžื•ื’ื ื•ืช ื‘ืžื ืขื•ืœื™ื.
ืืชื” ื™ื›ื•ืœ ืœืขื‘ื•ื“ ืขื grpc ืžืžืกืคืจ ืฉืจืฉื•ืจื™ื, ืื‘ืœ ื™ืฉ ื“ืงื•ื™ื•ืช. ื‘-etcd ืฉืขื•ื ื™ื ืžื™ื•ืฉืžื™ื ื‘ืืžืฆืขื•ืช ื–ืจืžื™ grpc. ืืœื• ื”ื ืขืจื•ืฆื™ื ื“ื•-ื›ื™ื•ื•ื ื™ื™ื ืœื”ื•ื“ืขื•ืช ืžืกื•ื’ ืžืกื•ื™ื. ื”ืกืคืจื™ื™ื” ื™ื•ืฆืจืช ืฉืจืฉื•ืจ ื™ื—ื™ื“ ืขื‘ื•ืจ ื›ืœ ื”ืฉืขื•ื ื™ื ื•ืฉืจืฉื•ืจ ื‘ื•ื“ื“ ื”ืžืขื‘ื“ ื”ื•ื“ืขื•ืช ื ื›ื ืกื•ืช. ืื– grpc ืื•ืกืจ ืขืœ ื›ืชื™ื‘ื” ืžืงื‘ื™ืœื” ืœืกื˜ืจื™ืžื™ื ื’. ืžืฉืžืขื•ืช ื”ื“ื‘ืจ ื”ื™ื ืฉื‘ืขืช ืืชื—ื•ืœ ืื• ืžื—ื™ืงื” ืฉืœ ืฉืขื•ืŸ, ืขืœื™ืš ืœื”ืžืชื™ืŸ ืขื“ ืœืกื™ื•ื ื”ืฉืœื™ื—ื” ืฉืœ ื”ื‘ืงืฉื” ื”ืงื•ื“ืžืช ืœืคื ื™ ืฉืœื™ื—ืช ื”ื‘ืงืฉื” ื”ื‘ืื”. ืื ื• ืžืฉืชืžืฉื™ื ืœืกื ื›ืจื•ืŸ ืžืฉืชื ื™ื ืžื•ืชื ื™ื.

ืกืš ื”ื›ืœ

ืชืจืื” ื‘ืขืฆืžืš: liboffkv.

ื”ืฆื•ื•ืช ืฉืœื ื•: ืจืืื“ ืจื•ืžื ื•ื‘, ืื™ื•ื•ืŸ ื’ืœื•ืฉื ืงื•ื‘, ื“ืžื™ื˜ืจื™ ืงืžืืœื“ื™ื ื•ื‘, ื•ื™ืงื˜ื•ืจ ืงืจืืคื™ื‘ื ืกืงื™, ื•ื™ื˜ืœื™ ืื™ื•ื•ื ื™ืŸ.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”