ááá á ZooKeeperᣠetcd áĽá Consul KV á°áá á C++ áááĽá¨áŞ áĽáá´áľ áĽáá°áťááá˘
á á°á¨ááá áľáááśá˝ ááá ááľáĽ áĽá á¨á°áááą á°ááŁáŤáľ á á-áľá áááľá°á áľáĽáĽá áá¨á áá¨áá¸áľ ᣠá¨á áááá˝á áá
á ááľá°áłá°á ᣠá¨á°áłáłáą á áááá˝á ááá¨áľ ᣠá᪠ááá¨áĽ
á áá á¨áąáŁ áĽááá
áá áĽáááśá˝ áľá
á°áľ-áłáá˝áŁ áááአá¨áá˝á á¨ááá áá áá¨ááťáá˝ áá¸áᢠááá áĽááłá á¨áĽááą á¨áá¨á áá´áá˝ ááá
ááŠááśá˝ á˘ááŤá¸áá, á áá áá á¨ááááŤááŁá¸á, á°ááłáłá á°ááŁáŤá á˝ááŽá˝á áááłá. á ááá˝ ááá¨áľ áĽáá°ááťáá, á¨ááľá°áŁá á á áááááąá á¨áá áá áĽáŤááłááą áá°áá áŞáŤ á¨á áá°áá áá á¨á°ááŤá áá, áá
á áá°ááŤáŠ áá°áá áŞáŤáá˝ á°ááłáłá á˝ááŽá˝á ááááłáľ á á ááľ á¨ááἠááá¨á ááľáĽ á ááŤáł áľáááśá˝á áá°áá ááŤáľááá áá˝áá.
áá
áá á˝áá ááááłáľ ááłáĄ á¨ááá¨á á á ááľáľáŤá፠á¨á ááŤáŞ á¤ááᲠááᣠáĽá áĽá áľááá˝ á¨á°ááŞáá˝ áĄáľá áááá˝áá áá°áᣠáá
á áĽá áááá ááá˘
á¨ZooKeeperᣠetcd áĽá Consul KV áá á áĽáŽ áááľáŤáľ á¨á፠á áááá˝ á¨ááŤááἠá¤á°-áá˝áááľ ááá á á˝áááᢠá¤á° ááá
ááą á¨á°ááá á C++ ááᣠáá áá° ááá˝ ááááá˝ áááľá¨áľ áĽá
áľ á áá˘
á¨ááἠáá´áá˝
ááśáľáľ á¨á°ááŤáŠ áľáááśá˝ á ááľ á¨á፠á áááá˝ ááááááľ, áá á¨ááŤááłáľáá¸á áĽá áĽáá´áľ áĽáá°áááŤáŠ áá¨áłáľ á ááĽááľ. áĽáľá˛ áĽáááá°áá˘
á¨á áŤááľ á áŁá
ááááš á áá ááľáĽ á°á°áŤá
á°á ááśá˝ ááŁáá. á áá
áá á¨áľ, áá ááľ ááľááá ááááľ á¨ááášá áááá ááááľ áá˝áá. znode á¨ááá á (áá á) áĽá áĽá´áľá (setData) á¨ááá¨á áľáŤáá˝ á°ááŤáá°ááᥠááŁá áááá˝ áĽáť ááá ᥠáĽá áááᥠáá˝ááᢠá°ááśá˝ á¨ááľááá áááá áááŠá, áĽá´áľá á¨ááá ἠáĽá ááá˝á á¨ááááľ áľáŤáá˝ áá ááŤáŤá áá˝áá. á°ááľ á á áááአáá áŤáá á°ááá
ááἠáľáŞáľ á˛áá¨á á¨áááŁá á á¨á ááľ áá ááľá
á´ ááᢠá¨á¤ááá ááśá˝ ááľááśá˝á áááá¨áľ áĽá
á áá áááá. áĽááą á¨áá á¨á á¨á°áá áá ááá áá áá á¨á°áłá°áŠ áá¸á. á ááľ á°áá á á ááľ ááá áá á˛áá ááá áááŠá á ZooKeeper ááłáá
á˛áŤáá áĽááá
á áááá˝ á áŤáľ á°á áá°á¨ááᢠááá ááĽááśá˝ áá°ááá - á˘áŤááľ áá ááą áá
á¨áááťá á¨áá ááá á¨ááłáŤáá¸á ááá á¨ááłáŠ á¨ááááá˝ áľáĽáľáĽá˘
ááá°
á¨áá
áĽáááľ ááá˘áá˝ á ZooKeeper á ááá˝ á°ááłáľá°á áá á, áĽá áľááá
áááá ááá á á°áᨠááááľ á á°á¨á. á¨áááá˝ á°áá¨áľ á¨ááᣠáá áĽááą á áááłá áááł á¨áłáá áľáĽáľáĽ ááá°ááłáᢠá¨á ááľ á¨á°áá°á ááá ááĽá¨áľ á¨áá áááá áááá˝ ááááľ ááá áá°á¨á áá˝ááᢠáá
ááá
á áĽáááł áááľá áá˝áá, áá á áĽáááą á áŁá ááá áá, áĽá á°áá¨áłá áĽááł á áĽáą ááľáĽ á ááá ááŽáá
áá˝áá.
etcd á°á¨ááá á¨á á á á¨áá˝á˝á-áĽá-áááá á á áŤá á¨áááᣠááá áá á¨á°áťá ááá á ááᥠááĽááśá˝á˘ áĽááἠáá, á áśáľáąá áľáááśá˝ ááľáĽ á á, ááá áá ááá°d ááĽááśá˝ á á°áá áĽáŠ áá¸á. áĽááą áśáľáľ áĽááŽá˝á áŤáá áá¸á-áźá ᣠáľáŹáľ ᣠááľááľá˘ á¨ááááŞáŤá áĽááł á¨áááłáá˝ áľáĽáľáĽ, ááá°áá áĽá áśáľá°á - áŚááŹá˝áá˝ ááá. ááĽááą á¨áá¨áááá á á áśáá ááᢠááá áááłáá˝ áĽáááľ á¨áá, á¨áľáŹáľ áĽááłá áá¨áááá, á áá áá፠á¨áĽáá˝áľ áĽááłá á°áá˝áá. á á¤áá á 3.3 ááľáĽ á¨áľáŹáľ áĽá á¨ááľááľ áĽááłáá˝ á¨áá ááĽááśá˝á ááá áá˝ááᢠáá
á áááľ ááťáá á áááá° á¨áá á°á¨á áááłá áááŁáłáá˝á á á áśáá ááá¸á ááťáá. á¨á¨áľáá áźáŽá˝ áĽá áľáŤáá˝ áĽááłá á¨á áá ááá
áá˝ááá˘
á°ááśá˝ áĽáá á á áᣠááá áĽááłá áľáá˝ á¨á°ááłá°áĄ áĽá áĽáá°áá áĽá á áá á¨ááá á˘áááᢠáááľá á°ááľá á ááá ááá áá á¨áŤá á áá á°ááąá áĽáľáŞá°áá áľá¨áľ áááá ááááá˝ á áá ááá ááá áá áĽáá á¨ááááŞáŤá áĽáť á áá°ááᢠá etcd ááľáĽáŁ á¨ZooKeeper á°áá á ááá áááá˝ á ááá á¨áá áá áá¸áá˘
áááľá áŹ.áŞ.
á á°á¨ááŞá áĽáá ááá áĽáĽá á°áá¨áłá ááá á á¨áá, ááá áá áááľá áááŠá áááĽá áá˝áá-áááá áááá˝ á á°á áá°á á áľá á áĽáŤ ááááľ áĽá áá°á¨á áá˝áá, áááľá á¨ááá "áááľ áá" áá ááľáŤáľ. áĽáá°ááá áŤá áĽáŤááá˝ á°á°ááá á°áĽáá áá áŤá. á á°á¨ááŞá áááľá á¨á áľá-á áĽáŤá á áá á¨á°ááá¸áá ááá á¨ááá¸áá áááá˝ áĽáť ááá¨áĽ áá˝áá, áá á áá˛áŤáá "ááá˝á" á¨ááááľ áá ááááłá. ááá áá áá á áľááá á¨á°áá¨áľ ááá á áá˝áł áááá ááľáłááľ á áá áá-ááá á¨áá ááá ááá á ááá ááá˝ áŤáá ááá áá°á¨á á áŁá ááťáá ᣠáááš á áľáááą ááľáĽ áá¨áá¸áłá¸áá áááĽáá á˘
á¨áĽá
á°ááśá˝ ááá
áááľá á¨á¤á˝á˛á˛á áĽáŤááá˝á á ááˇáᢠá áá á¨áą, áĽááá
áá° ááἠá¨ááá ἠáá´ á¨á°áááą áĽáŞáá˝ áá¸á, ááá
á á¨ááá˝ áááŞáŤáá˝ áá, á¨áá¨á¨áťá á¨áłáá á¨ááἠáľáŞáľ áá ááá. á á áááአáá áŤáá á°ááá
ááἠá¨á áá áľáŞáľ á¨á°á áá°á á áá á¨áá, áááš áá˛áŤáá ááááłá, á áá áá፠- ááá á˛áá¨á. á ááááá áá á ááá áá ááŁá á á¨áá˝á ááá áááá˝á á áᢠáĽáá° etcd áĽá ZooKeeper á á°áᨠááአááá-áááá˝á áá°á¨á á°áŤáŤáĽ áááá˝á áá° áá°á¨á á áááŤá áľ áá ááá-ááá á ááá á¨áĽááą áá áŤáá°áááá áľ áááł áĽááłá áἠááŁá á¨áááŁá áá. ááááá˘
áááá á á ááľ áá á ááŁáá
ZooKeeper á áŁá áĽáĽá á¨ááἠáá´á á ááᢠá etcd ááľáĽ á¨ááááľ ááá ááá áá ááá˝ á ZooKeeperá áá á áááľá ááľáĽ áá¤áłá á áá ááááľ ááŽá¨á á áá˝ááᢠá¨ááá á áááááśá˝ áááĄá áááŤá°áľ áĽá¨áá¨áá ᨠZooKeeper á áááá˝ áá á¨áááŁá á á áááá˝ á¨áá¨á°ááľ ááá ááŠááśá˝ áá á¨áá°ááá˘
á á°á á°á¨á°á, ááŤáŁ áĽá á˛á˛á¤á ááśá˝ á áá°ááá- á¤á˛á¤áá˝ á áá°áááá˘
- á¨á°ááá á¨á áá´ á¨áá ááá áááĽáŤá (á ZK setData á áá ááłá áá áľá á°áľ ááááłá)
- áľáĽáľáĽ áĽá á¨áŤáľ áá´áá˝ á°ááŤáá°áá (á ZK ááľáĽ áĽááą á áá á¨áą á ááľ ááááľ áá¸á)
- á¨áá°áá°áľ áá´á á ááľá ááľ á¨áááľ áá áá áá°ááá (á ZK ááľáĽ á°áá ááľááá ááááľ ááá˝ áŤááľ áľá á°áľ ááááłá)
- ááĽáŤááłááą ááá á ááľ áľáŞáľ áĽáť á á - á¨áĽá´áľ áľáŞáľ (á ZK
á¨áĽááą áŚáľáą á á )
á¨á°á¨áłáłá á áááá˝ ááľá á¨á°á°á¨áá ááá°d áĽá áááľá ááĽááą á áĽáŽ á¨á°á°áŤ áľáá áľáááá¸á áĽá á á°áá á¨á á¨á¤á°-áá˝áááľ á áááá˝ áá á á°á ááá á ááá áá°áá አáľááá˝á ááá˘
á¨áá´áá á áá°ááá áľ áá áĽáá° ZooKeeper á áááľ áŁá áŞá áá°áá á á etcd áĽá Consul ááľáĽ ááĽáŤááłááą ááá á¨á°áᨠá¨áá ááŁáŞ ááŤáá áá áááᢠá¨ááł áá¨áá áááá¨áá¸áľ áľááá¨áá, áááá á¨áááľ áá ááá°á¨á á°ááľáá.
á¨á á°ááŁá á áĽáá á áááŽá˝
á¨áááĽá¨áŞáá á áááá˝ á á°ááŤáŠ áľáááśá˝ ááľáĽ á¨áá°áá á á ááłááľ áá˝áłáá˝á á áááá áĽáááá¨áľá˘
á°áá¨áľ á ááá°
á etcd ááľáĽ á°áá¨áłá áĽááłá áá á á
á áŁá á áľá°áłá˝ á¨áá á°ááŁáŤáľ ááľáĽ á ááą áá á°áááˇáᢠá¨ááá áá ááá˝ á á°áá°á á
áľá á
áĽáŤ á¨áááá˝á áááá á°ááľáŽ ááááŁáľ ááá áŤá°ááááᢠáááłá, á¨áááá¨á áááá ááá á¨ááá "/foo"
ááá áĽá¨á á¨á ááᢠ["/foo", "/fop")
. ááá áá áá
áááá á¨áááá áááľ ááá ááááłá, áá
á áááľ áá áľáá
á¨áá á°ááŁáááľ áááá¨á áá˝áá. ááááŞáŤ áá ááá á¨áľááá áá´á ááá áá á á
á°áááŁ
"/foo" -> "u01/foo"
"/foo/bar" -> "u02/foo/bar"
á¨á፠áááá á¨á
áἠááá˝ ááá áŤáá "/foo"
ááá á áá á¨á
ááťáá ["u02/foo/", "u02/foo0")
. á áᣠá ASCII ááľáĽ "0"
áá˛áŤáá áááá "/"
.
ááá áá á áá
ááłá áá á¨áŹáá´áá ááľáááľ áĽáá´áľ áĽáá°áá°áá á? áááá á¨á áááąá áááá˝ áá°á¨á áĽáá°ááŤáľááá áá á°áááˇá ["uXX/foo/", "uXX/foo0")
á XX ᨠ01 áĽáľá¨ á¤áá¤á. áĽá á¨á፠áŽá á ááŁáá˘
á áá¤áąá, ááá á¨ááá á á¨áŤ áľáááľ á°ááá°á, áá á áááąáá ááá áá°á¨á áĽá á¨ááá˝ áááá ááááľá áá¤áłá á áá ááááľ ááá°áá á á áľá˝áá. á¨áá¨á¨áťá ááááľ á ááľ áአááá áá¨á á á áá. áááłá:
"/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 ááľáĽ á¨áá ááá á áá á¨áá°áŠ (áá á ᣠá°áá ᣠáá á) áĽá á ááľááá ááááľ (setData ᣠgetData) ááľáĽ á¨ááἠáá á¨áá°áŠ á¨á°áአáá´áá˝ á á ᢠá á°á¨ááŞá ᣠááá áá´áá˝ áĽáĽá á áľá-áááłáá˝ á áá¸á ᣠáá á ááľááá ááááą ááľááá áŤáá áľá á°áľá ááááłáᢠá°áá á¨áŁ á°áá ááá áłáł á ááá áś - á¨ááᢠáľá ááá ááá áłáŤáľáĄ áá ፠á¨áá˝á á¨á°ááá ᨠáá´ áĽááááááá˘
á ááą á ááŤá áĽáá° áá°á¨á áĽáŠá á áááŤá¨áľá ááá°áľ ááᢠááľááá ááááľ áŤá áŤá¨áááĄá˘ áŤáᣠáá° setData áá°ááᣠáŤááá ááá áŠá˘ á¨áá¨á¨áťá áá´ áľá á°áľ á¨á°ááá°, áĽáá°áá ááľáááľ. ááłáá á¨áááŁá á¨ááááŞáŤá ááá á¨áááá áá°á áľááá á¨áá˝ áá. áá˛áŤáá ááá á áá°áá áá˝ááᢠá á°áłáŤ áááł áá ááá ááľááá ááááľ á ááá á¨á áĽá á°áá ᨠáááľ ááᢠá áá áá፠ááá á á°áá˘áá áľá á°áľ ááááłá, á¨á፠á áá áá° setData áá°áá áŤáľáááááłá. á áĽááἠá áĽáŞáá˝ ááŤá¨á á ááľ áŤá á á°ááłáłáŞ áĽáŞ áá°á¨á áá˝ááᣠáĽá setData áľá á°áľáá ááááłáᢠá áá áááł, áĽáá°áá ááŤá°áááľ áá˝áá, áá áá áŤáá áá?
áááąá áá´áá˝ áľá á°áľ á¨á°áááą, á¨ááŤá á°ááŤáŤáŞ áľá¨á áĽáá°á°á¨á°á° á áĽááá áááľ áĽááááá. áá áľá¨á á¨á°á¨áááá á¨á°á ፠á áá áĽáá°áá áĽááľáĽá˘ á¨á፠ááááľá¨áľ áĽá¨áá¨áá áŤááá ááááá áľááá ááľááá á°á°áááᢠáá áááľ ááá áĽááłá á áĽáááą ááá ááá áŁááťáá, áľáĽáľáĽ á á°áłáŤ áááł áĽáá°á°áá¸á ááááľ áĽáá˝ááá.
á°á¨á᪠á´áááŤá ááááŽá˝
á áá
ááá ááľáĽ á¨á°á¨ááá áľáááśá˝ áĽá¨ááľ ááľá°á áľá áŽáľ ááľá¨á áĽáááááŤáá.
á¨á°áá áá áá áá ááľáááśá˝ á ááą áááľááá áá áᥠá˘áŤááľ á ááą á áááááśá˝ á ááááľáŁ áááŚá¤áľ áĽá áááśááľ áá°áá á ááŁá¸áᢠááááŞáŤ áá áááááľ áĽáť áá á¨á áŤááᣠáĽá á áá á ááá˝ áľáááśá˝ áá ááá¨á ááááᢠáá
áĽá á˝ááŽá˝á á áľá¨áľáá, áá
á áá°áá°á áá áĽáá´áľ áá
á¨áĽ áĽááłáá áľ áá á áá ááá˝ á ááá á¨á. á áá
ááááŤáľ áŚáľáąá á¨ááľá°áŁá á á áááááśá˝ á áá á ááááľ áĽá áááŚá¤áľ áá°áááᣠá áááśááľ áá áááľá áŹáŞ áĽáť áá°áááá˘
áá á¨ááááŞáŤáᣠá áááááľ áááááľ ááá á¨áá á¤á° ááťáááľá ááá áá ááá¨ááᢠá ZooKeeper ááłá ááᣠáááŤá ááľáá
á ZooKeeper C++ áááĽá¨áŞ á á°ááłáłáŠ á áááá˝ á áááłáłáľáŁ áŤáá°ááłá°á á áááá˝á á°ááŁáŤá áááľá¨á áá°ááᢠZooKeeper C++ ááá
á¨áá°ááľ/á¨á°áľá á
áľá áááłáá˝á áá áááᢠá STL, á ááŤáłáá áááł, á áŁá á áá á áá°áá áŤá. áááłá, á áá°áá
á¨áĽá áŤá á á°ááŁá á áĽáá°áá áá°áŤáᢠá˛á áŤáŁ á°á¨á᪠á¨á°áľá/á¨áá°ááľ áĽááľ ááá áŤáᢠá á˛áą á¨áá°ááľ á°áááˇá, áĽá áŤááá á¨á°ááá á°ááŁá áá áĽá á áá¨áá ááľáĽ á°á¨á᪠áá ááĽáˇá. á¨ááá áááłá ááľáĽ áŤáá áá á¨áá¨áá ááľáĽ áĽá á¨áá°ááľ áĽáŁáá˝á ááááŁá áĽá wait_forá á áá áá ááááŁá¸ááᢠáá¤áą á˛áá, á°ááłá á°ááŁáŠ áá áŤá áĽá á¨ááááť áĽá´áą áá° á°áľáá áá°áááá.
á etcd áĽá ááááľá áĽáŤááá˝á áááľáá¸á á°ááłáłá á¨áá áááł á°á á
áá áá áᢠáá
áááľ á¨áłá˝ áŤááľ á¤á°-ááťáááľ á á ááŤáł á¨á°ááŤáŠ ááŽá˝ ááá áá˝áá. ppconsul á°á
áááą á¨á°á á á áá á áá°ááᣠáľááá
áá° áĽáą á¨áá°á¨á áĽáŞáá˝ á áááááŤáá˝ áá á ááá˘
á¨á ááŤáł ááŽá˝ á grpc ááľáŤáľ áá˝áá, áá áĽáá
á áááŽá˝ á á. á etcd á°ááśá˝ á grpc áĽá¨áśá˝ áá°áá áŤáᢠáĽááá
á¨á ááľ á¨á°áá°á á áááľ áááááśá˝ á¨áááľ á á
áŁáŤá áťááá˝ áá¸áᢠá¤á° ááá
ááą áááá á°ááśá˝ á ááľ áá á áá áááĽáŤá áĽá áᢠáááááśá˝á á¨ááŤáľáŹáľ áá á áá áááĽáŤáᢠáľááá
grpc á áĽá¨áľ ááááá
áľáአá˝ááá˝á áá¨ááááᢠáá
áááľ á°ááľá á˛áŤáľááአááá á˛á°áá ááŁáŠá á¨áááá á ááľ á¨áá°áá áĽáŤá áááŠá áĽáľáŞáŤá áá
á
áľá¨áľ áá á á
á ááĽááľá˘ ááááłá°á áĽáá ááááá˘
áá¤áą
ááŤáľá áááá¨áąáĄ-
á¨á áĄáľá:
ááá: hab.com