๋๋ ZooKeeper, etcd ๋ฐ Consul KV์ฉ ํด๋ผ์ด์ธํธ C++ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ฑํ ๋ฐฉ๋ฒ
๋ถ์ฐ ์์คํ
์ ์ธ๊ณ์๋ ํด๋ฌ์คํฐ ๊ตฌ์ฑ์ ๋ํ ์ ๋ณด ์ ์ฅ, ๋
ธ๋ ๊ตฌ์ฑ ๊ด๋ฆฌ, ๊ฒฐํจ์ด ์๋ ๋
ธ๋ ๊ฐ์ง, ๋ฆฌ๋ ์ ํ ๋ฑ ์ฌ๋ฌ ๊ฐ์ง ์ผ๋ฐ์ ์ธ ์์
์ด ์์ต๋๋ค.
๋ณธ์ง์ ์ผ๋ก ์ด๋ฌํ ๋ชจ๋ ์์คํ
์ ๋ด๊ฒฐํจ์ฑ์ด ์๊ณ ์ ํํ ๊ฐ๋ฅํ ํค-๊ฐ ์ ์ฅ์์
๋๋ค. ๋์ค์ ๋
ผ์ํ ๋ฐ์ดํฐ ๋ชจ๋ธ์๋ ์๋นํ ์ฐจ์ด๊ฐ ์์ง๋ง ๋์ผํ ์ค์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค. ๋ถ๋ช
ํ ์กฐ์ ์๋น์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฐ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ทธ ์ค ํ๋์ ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉฐ, ์ด๋ ์๋ก ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์
์ ๋์ผํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ํ๋์ ๋ฐ์ดํฐ ์ผํฐ์์ ์ฌ๋ฌ ์์คํ
์ ์ง์ํด์ผ ํ ํ์์ฑ์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ ์์ด๋์ด๋ ํธ์ฃผ์ ํ ์ปจ์คํ
์์ด์ ์์์ ์์๋์๊ณ , ์ด๋ฅผ ๊ตฌํํ๋ ๊ฒ์ ์๊ท๋ชจ ํ์๋ค๋ก ๊ตฌ์ฑ๋ ์ฐ๋ฆฌ ํ์ ๋ชซ์ด ๋์์ต๋๋ค. ์ด์ ๋ํด ์ ๊ฐ ์ด์ผ๊ธฐํ๊ฒ ์ต๋๋ค.
์ฐ๋ฆฌ๋ ZooKeeper, etcd ๋ฐ Consul KV ์์
์ ์ํ ๊ณตํต ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋ค์์ต๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ C++๋ก ์์ฑ๋์์ง๋ง ๋ค๋ฅธ ์ธ์ด๋ก ์ด์ํ ๊ณํ์ด ์์ต๋๋ค.
๋ฐ์ดํฐ ๋ชจ๋ธ
์ธ ๊ฐ์ง ์๋ก ๋ค๋ฅธ ์์คํ ์ ๋ํ ๊ณตํต ์ธํฐํ์ด์ค๋ฅผ ๊ฐ๋ฐํ๋ ค๋ฉด ์ด๋ค ์์คํ ์ ๊ณตํต์ ๊ณผ ์ฐจ์ด์ ์ ์ดํดํด์ผ ํฉ๋๋ค. ๊ทธ๊ฒ์ ์์ ๋ด ์๋ค.
์ฃผ ํคํผ
ํค๋ ํธ๋ฆฌ๋ก ๊ตฌ์ฑ๋๋ฉฐ ๋
ธ๋๋ผ๊ณ ํฉ๋๋ค. ๋ฐ๋ผ์ ๋
ธ๋์ ๋ํด ํด๋น ํ์ ํญ๋ชฉ ๋ชฉ๋ก์ ์ป์ ์ ์์ต๋๋ค. znode ์์ฑ(create) ๋ฐ ๊ฐ ๋ณ๊ฒฝ(setData) ์์
์ ๋ถ๋ฆฌ๋์ด ์์ต๋๋ค. ๊ธฐ์กด ํค๋ง ์ฝ๊ณ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ๋
ธ๋์ ์กด์ฌ๋ฅผ ํ์ธํ๊ณ , ๊ฐ์ ์ฝ๊ณ , ์์์ ๊ฐ์ ธ์ค๋ ์์
์ Watch๋ฅผ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. Watch๋ ์๋ฒ์ ํด๋น ๋ฐ์ดํฐ ๋ฒ์ ์ด ๋ณ๊ฒฝ๋ ๋ ์คํ๋๋ ์ผํ์ฑ ํธ๋ฆฌ๊ฑฐ์
๋๋ค. ์์ ๋
ธ๋๋ ์ค๋ฅ๋ฅผ ๊ฐ์งํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ฅผ ์์ฑํ ํด๋ผ์ด์ธํธ์ ์ธ์
์ ์ฐ๊ฒฐ๋์ด ์์ต๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ ์ธ์
์ ๋ซ๊ฑฐ๋ ZooKeeper์ ์ธ์
์กด์ฌ ์๋ฆผ์ ์ค์งํ๋ฉด ํด๋น ๋
ธ๋๊ฐ ์๋์ผ๋ก ์ญ์ ๋ฉ๋๋ค. ๊ฐ๋จํ ํธ๋์ญ์
์ด ์ง์๋ฉ๋๋ค. ์ฆ, ์ต์ํ ํ๋๋ผ๋ ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๋ชจ๋ ์ฑ๊ณตํ๊ฑฐ๋ ์คํจํ๋ ์ผ๋ จ์ ์์
์
๋๋ค.
๋ฑ
์ด ์์คํ
์ ๊ฐ๋ฐ์๋ ๋ถ๋ช
ํ ZooKeeper์์ ์๊ฐ์ ์ป์์ผ๋ฏ๋ก ๋ชจ๋ ๊ฒ์ ๋ค๋ฅด๊ฒ ์ํํ์ต๋๋ค. ํค์ ๊ณ์ธต ๊ตฌ์กฐ๋ ์์ง๋ง ์ฌ์ ์์ผ๋ก ์ ๋ ฌ๋ ์ธํธ๋ฅผ ํ์ฑํฉ๋๋ค. ํน์ ๋ฒ์์ ์ํ๋ ๋ชจ๋ ํค๋ฅผ ๊ฐ์ ธ์ค๊ฑฐ๋ ์ญ์ ํ ์ ์์ต๋๋ค. ์ด ๊ตฌ์กฐ๋ ์ด์ํ๊ฒ ๋ณด์ผ ์๋ ์์ง๋ง ์ค์ ๋ก๋ ๋งค์ฐ ํํ๋ ฅ์ด ๋ฐ์ด๋๋ฉฐ ์ด๋ฅผ ํตํด ๊ณ์ธต์ ๋ทฐ๋ฅผ ์ฝ๊ฒ ๋ชจ๋ฐฉํ ์ ์์ต๋๋ค.
etcd์๋ ํ์ค ๋น๊ต ๋ฐ โโ์ค์ ์์
์ด ์์ง๋ง ๋ ๋์ ๊ธฐ๋ฅ์ธ ํธ๋์ญ์
์ด ์์ต๋๋ค. ๋ฌผ๋ก ์ธ ์์คํ
๋ชจ๋์ ์กด์ฌํ์ง๋ง etcd ํธ๋์ญ์
์ด ํนํ ์ข์ต๋๋ค. ํ์ธ, ์ฑ๊ณต, ์คํจ์ ์ธ ๊ฐ์ง ๋ธ๋ก์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์ฒซ ๋ฒ์งธ ๋ธ๋ก์๋ ์ผ๋ จ์ ์กฐ๊ฑด, ๋ ๋ฒ์งธ ๋ฐ ์ธ ๋ฒ์งธ ์์
์ด ํฌํจ๋์ด ์์ต๋๋ค. ํธ๋์ญ์
์ ์์์ ์ผ๋ก ์คํ๋ฉ๋๋ค. ๋ชจ๋ ์กฐ๊ฑด์ด true์ด๋ฉด ์ฑ๊ณต ๋ธ๋ก์ด ์คํ๋๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด ์คํจ ๋ธ๋ก์ด ์คํ๋ฉ๋๋ค. API 3.3์์๋ ์ฑ๊ณต ๋ฐ ์คํจ ๋ธ๋ก์ ์ค์ฒฉ๋ ํธ๋์ญ์
์ด ํฌํจ๋ ์ ์์ต๋๋ค. ์ฆ, ๊ฑฐ์ ์์์ ์ค์ฒฉ ์์ค์ ์กฐ๊ฑด๋ถ ๊ตฌ์ฑ์ ์์์ ์ผ๋ก ์คํํ ์ ์์ต๋๋ค. ์ด๋ค ๊ฒ์ฌ์ โโ์์
์ด ์๋์ง ์์ธํ ์์๋ณผ ์ ์์ต๋๋ค.
์๊ณ๋ ์ฌ๊ธฐ์ ์กด์ฌํ์ง๋ง ์กฐ๊ธ ๋ ๋ณต์กํ๊ณ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค. ์ฆ, ํน์ ํค ๋ฒ์์ ์๊ณ๋ฅผ ์ค์นํ ํ ์๊ณ๋ฅผ ์ทจ์ํ ๋๊น์ง ์ฒซ ๋ฒ์งธ ์ ๋ฐ์ดํธ๋ฟ๋ง ์๋๋ผ ์ด ๋ฒ์์ ๋ชจ๋ ์ ๋ฐ์ดํธ๋ฅผ ๋ฐ๊ฒ ๋ฉ๋๋ค. etcd์์ ZooKeeper ํด๋ผ์ด์ธํธ ์ธ์ ๊ณผ ์ ์ฌํ ๊ฒ์ ์๋์ ๋๋ค.
K.V. ์์ฌ
์ฌ๊ธฐ์๋ ์๊ฒฉํ ๊ณ์ธต ๊ตฌ์กฐ๋ ์์ง๋ง Consul์ ์กด์ฌํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. ์ฆ, ์ง์ ๋ ์ ๋์ฌ๊ฐ ์๋ ๋ชจ๋ ํค๋ฅผ ๊ฐ์ ธ์ค๊ณ ์ญ์ ํ ์ ์์ต๋๋ค. ์ฆ, ํค์ "ํ์ ํธ๋ฆฌ"๋ก ์์ ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ฟผ๋ฆฌ๋ฅผ ์ฌ๊ท ์ฟผ๋ฆฌ๋ผ๊ณ ํฉ๋๋ค. ๋ํ Consul์ ์ ๋์ฌ ๋ค์ ์ง์ ๋ ๋ฌธ์๋ฅผ ํฌํจํ์ง ์๋ ํค๋ง ์ ํํ ์ ์์ผ๋ฉฐ ์ด๋ ์ง๊ณ "์์"์ ์ป๋ ๊ฒ์ ํด๋นํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ด ๋ฐ๋ก ๊ณ์ธต ๊ตฌ์กฐ์ ๋ชจ์ต์ด๋ผ๋ ์ ์ ๊ธฐ์ตํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ๋ถ๋ชจ๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ ํค๋ฅผ ์์ฑํ๊ฑฐ๋ ์์์ด ์๋ ํค๋ฅผ ์ญ์ ํ ์ ์์ง๋ง ์์์ ์์คํ ์ ๊ณ์ ์ ์ฅ๋ฉ๋๋ค.
์๊ณ ๋์ Consul์ HTTP ์์ฒญ์ ์ฐจ๋จํ์ต๋๋ค. ๋ณธ์ง์ ์ผ๋ก ์ด๋ ๋ฐ์ดํฐ ์ฝ๊ธฐ ๋ฐฉ๋ฒ์ ๋ํ ์ผ๋ฐ์ ์ธ ํธ์ถ์ด๋ฉฐ, ๋ค๋ฅธ ๋งค๊ฐ๋ณ์์ ํจ๊ป ๋ง์ง๋ง์ผ๋ก ์๋ ค์ง ๋ฐ์ดํฐ ๋ฒ์ ์ด ํ์๋ฉ๋๋ค. ์๋ฒ์ ์๋ ํด๋น ๋ฐ์ดํฐ์ ํ์ฌ ๋ฒ์ ์ด ์ง์ ๋ ๋ฒ์ ๋ณด๋ค ํฌ๋ฉด ์๋ต์ด ์ฆ์ ๋ฐํ๋๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋ ์๋ต์ด ๋ฐํ๋ฉ๋๋ค. ์ธ์ ๋ ์ง ํค์ ์ฐ๊ฒฐํ ์ ์๋ ์ธ์
๋ ์์ต๋๋ค. ์ธ์
์ ์ญ์ ํ๋ฉด ๊ด๋ จ ํค๋ ์ญ์ ๋๋ etcd ๋ฐ ZooKeeper์ ๋ฌ๋ฆฌ ์ธ์
์ด ๋จ์ํ ์ฐ๊ฒฐ ํด์ ๋๋ ๋ชจ๋๊ฐ ์๋ค๋ ์ ์ ์ฃผ๋ชฉํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ์ฌ์ฉ ๊ฐ๋ฅ
ํจ๊ป ๋ชจ์์
ZooKeeper๋ ๊ฐ์ฅ ์๊ฒฉํ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. etcd์์ ์ฌ์ฉํ ์ ์๋ ํํ ๋ฒ์ ์ฟผ๋ฆฌ๋ ZooKeeper ๋๋ Consul์์ ํจ๊ณผ์ ์ผ๋ก ์๋ฎฌ๋ ์ด์ ๋ ์ ์์ต๋๋ค. ๋ชจ๋ ์๋น์ค์์ ์ต์ ์ ๋คํ๋ ค๊ณ ๋ ธ๋ ฅํ ๊ฒฐ๊ณผ ๋ค์๊ณผ ๊ฐ์ ์ค์ํ ์์ธ๋ฅผ ์ ์ธํ๊ณ ZooKeeper ์ธํฐํ์ด์ค์ ๊ฑฐ์ ๋์ผํ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ๊ฒ ๋์์ต๋๋ค.
์ํ์ค, ์ปจํ ์ด๋ ๋ฐ TTL ๋ ธ๋ ์ง์๋์ง ์์- ACL์ ์ง์๋์ง ์์ต๋๋ค.
- set ๋ฉ์๋๋ ํค๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ ํค๋ฅผ ์์ฑํฉ๋๋ค(ZK์์๋ setData๊ฐ ์ด ๊ฒฝ์ฐ ์ค๋ฅ๋ฅผ ๋ฐํํจ).
- set ๋ฐ cas ๋ฉ์๋๋ ๋ถ๋ฆฌ๋์ด ์์ต๋๋ค(ZK์์๋ ๋ณธ์ง์ ์ผ๋ก ๋์ผํฉ๋๋ค).
- ์ญ์ ๋ฉ์๋๋ ํ์ ํธ๋ฆฌ์ ํจ๊ป ๋ ธ๋๋ฅผ ์ญ์ ํฉ๋๋ค(ZK์์ ์ญ์ ๋ ๋ ธ๋์ ์์์ด ์๋ ๊ฒฝ์ฐ ์ค๋ฅ๋ฅผ ๋ฐํํฉ๋๋ค).
- ๊ฐ ํค์๋ ํ๋์ ๋ฒ์ , ์ฆ ๊ฐ ๋ฒ์ (ZK)๋ง ์์ต๋๋ค.
๊ทธ๋ค ์ค XNUMX ๋ช ์ด์๋ค )
์์ฐจ ๋ ธ๋๋ฅผ ๊ฑฐ๋ถํ๋ ์ด์ ๋ etcd์ Consul์ด ์ด๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ์ง ์๊ณ ๊ฒฐ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ธํฐํ์ด์ค ์์ ์ฌ์ฉ์๊ฐ ์ฝ๊ฒ ๊ตฌํํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ ์ ์ ์ญ์ ํ ๋ ZooKeeper์ ์ ์ฌํ ๋์์ ๊ตฌํํ๋ ค๋ฉด etcd ๋ฐ Consul์ ๊ฐ ํค์ ๋ํด ๋ณ๋์ ํ์ ์นด์ดํฐ๋ฅผ ์ ์งํด์ผ ํฉ๋๋ค. ๋ฉํ ์ ๋ณด ์ ์ฅ์ ํผํ๋ ค๊ณ ํ๊ธฐ ๋๋ฌธ์ ์ ์ฒด ํ์ ํธ๋ฆฌ๋ฅผ ์ญ์ ํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
๊ตฌํ์ ๋ฏธ๋ฌํจ
๋ค์ํ ์์คํ ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๋ช ๊ฐ์ง ์ธก๋ฉด์ ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
etcd์ ๊ณ์ธต ๊ตฌ์กฐ
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๋ถํฐ FF๊น์ง์
๋๋ค. ๊ทธ๋ฌ๋ค๊ฐ ์ฐ๋ฆฌ๋ ์ฐ์ฐํ ๋ง๋ฌ์ด์
๊ทธ ๊ฒฐ๊ณผ ๊ฐ๋จํ ํค ๋ณํ ์์คํ ์ด ๊ฐ๋ฐ๋์ด ํค ์ญ์ ์ ํ์ ๋ชฉ๋ก ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ๋ชจ๋ ํจ๊ณผ์ ์ผ๋ก ๊ตฌํํ ์ ์์์ต๋๋ค. ๋ง์ง๋ง ํ ํฐ ์์ ํน์ ๋ฌธ์๋ฅผ ์ถ๊ฐํ๋ฉด ์ถฉ๋ถํฉ๋๋ค. ์๋ฅผ ๋ค์ด:
"/very" -> "/u00very"
"/very/long" -> "/very/u00long"
"/very/long/path" -> "/very/long/u00path"
๊ทธ๋ฐ ๋ค์ ํค๋ฅผ ์ญ์ ํฉ๋๋ค. "/very"
์ญ์ ๋ก ๋ฐ๋๋ค "/u00very"
๋ฐ ๋ฒ์ ["/very/", "/very0")
, ๋ชจ๋ ํ์ ํญ๋ชฉ ๊ฐ์ ธ์ค๊ธฐ - ๋ฒ์์์ ํค ์์ฒญ ์ ["/very/u00", "/very/u01")
.
ZooKeeper์์ ํค ์ ๊ฑฐ
์ด๋ฏธ ์ธ๊ธํ๋ฏ์ด ZooKeeper์์๋ ํ์ ๋ ธ๋๊ฐ ์๋ ๋ ธ๋๋ฅผ ์ญ์ ํ ์ ์์ต๋๋ค. ํ์ ํธ๋ฆฌ์ ํจ๊ป ํค๋ฅผ ์ญ์ ํ๊ณ ์ถ์ต๋๋ค. ์ด๋ป๊ฒ ํด์ผ ํ๋์? ์ฐ๋ฆฌ๋ ๋๊ด์ ์ธ ํ๋๋ก ์ด๋ฅผ ์ํํฉ๋๋ค. ๋จผ์ , ํ์ ํธ๋ฆฌ๋ฅผ ์ฌ๊ท์ ์ผ๋ก ํ์ํ์ฌ ๋ณ๋์ ์ฟผ๋ฆฌ๋ฅผ ํตํด ๊ฐ ์ ์ ์ ํ์ ํญ๋ชฉ์ ์ป์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ฌ๋ฐ๋ฅธ ์์๋ก ํ์ ํธ๋ฆฌ์ ๋ชจ๋ ๋ ธ๋๋ฅผ ์ญ์ ํ๋ ค๊ณ ์๋ํ๋ ํธ๋์ญ์ ์ ๊ตฌ์ถํฉ๋๋ค. ๋ฌผ๋ก ํ์ ํธ๋ฆฌ๋ฅผ ์ฝ๋ ๊ฒ๊ณผ ์ญ์ ํ๋ ์ฌ์ด์ ๋ณ๊ฒฝ์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ํธ๋์ญ์ ์ด ์คํจํฉ๋๋ค. ๋ํ ์ฝ๊ธฐ ํ๋ก์ธ์ค ์ค์ ํ์ ํธ๋ฆฌ๊ฐ ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ด ๋ ธ๋๊ฐ ์ด๋ฏธ ์ญ์ ๋ ๊ฒฝ์ฐ ๋ค์ ๋ ธ๋์ ํ์ ๋ ธ๋์ ๋ํ ์์ฒญ์ ์ค๋ฅ๋ฅผ ๋ฐํํ ์ ์์ต๋๋ค. ๋ ๊ฒฝ์ฐ ๋ชจ๋ ์ ์ฒด ํ๋ก์ธ์ค๋ฅผ ๋ค์ ๋ฐ๋ณตํฉ๋๋ค.
์ด ์ ๊ทผ ๋ฐฉ์์ ํ์ ํญ๋ชฉ์ด ์๋ ๊ฒฝ์ฐ ํค ์ญ์ ๋ฅผ ๋งค์ฐ ๋นํจ์จ์ ์ผ๋ก ๋ง๋ค๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์ด ํ์ ํธ๋ฆฌ๋ฅผ ๊ณ์ ์ฌ์ฉํ์ฌ ํค๋ฅผ ์ญ์ ํ๊ณ ์์ฑํ๋ ๊ฒฝ์ฐ์๋ ๋์ฑ ๊ทธ๋ ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฅผ ํตํด etcd ๋ฐ Consul์์ ๋ค๋ฅธ ๋ฉ์๋ ๊ตฌํ์ด ๋ณต์กํด์ง๋ ๊ฒ์ ํผํ ์ ์์์ต๋๋ค.
ZooKeeper์ ์ค์
ZooKeeper์๋ ํธ๋ฆฌ ๊ตฌ์กฐ(create, delete, getChildren)์ ๋ ธ๋์ ๋ฐ์ดํฐ(setData, getData)๋ก ์์ ํ๋ ๋ณ๋์ ๋ฉ์๋๊ฐ ์์ต๋๋ค. ๋ํ ๋ชจ๋ ๋ฉ์๋์๋ ์๊ฒฉํ ์ ์ ์กฐ๊ฑด์ด ์์ต๋๋ค. ๋ ธ๋๊ฐ ์ด๋ฏธ ์์ผ๋ฉด ์ค๋ฅ๋ฅผ ๋ฐํํฉ๋๋ค. ์์ฑ, ์ญ์ ๋๋ setData โ ์์ง ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ. ํค์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ์๊ฐํ์ง ์๊ณ ํธ์ถํ ์ ์๋ set ๋ฉ์๋๊ฐ ํ์ํ์ต๋๋ค.
ํ ๊ฐ์ง ์ต์ ์ ์ญ์ ์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋๊ด์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ์ทจํ๋ ๊ฒ์ ๋๋ค. ๋ ธ๋๊ฐ ์กด์ฌํ๋์ง ํ์ธํ์ธ์. ์กด์ฌํ๋ ๊ฒฝ์ฐ setData๋ฅผ ํธ์ถํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด ์์ฑํฉ๋๋ค. ๋ง์ง๋ง ๋ฉ์๋์์ ์ค๋ฅ๊ฐ ๋ฐํ๋๋ฉด ๋ค์ ๋ฐ๋ณตํ์ธ์. ๊ฐ์ฅ ๋จผ์ ์ฃผ๋ชฉํด์ผ ํ ์ ์ ์กด์ฌ ํ ์คํธ๊ฐ ๋ฌด์๋ฏธํ๋ค๋ ๊ฒ์ ๋๋ค. ์ฆ์ create๋ฅผ ํธ์ถํ ์ ์์ต๋๋ค. ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋๋ฉด ๋ ธ๋๊ฐ ์กด์ฌํ์ง ์๊ณ ์์ฑ๋์์์ ์๋ฏธํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด create๊ฐ ์ ์ ํ ์ค๋ฅ๋ฅผ ๋ฐํํ ํ setData๋ฅผ ํธ์ถํด์ผ ํฉ๋๋ค. ๋ฌผ๋ก ํธ์ถ ์ฌ์ด์ ๊ฒฝ์ ํธ์ถ์ ์ํด ์ ์ ์ด ์ญ์ ๋ ์ ์์ผ๋ฉฐ setData๋ ์ค๋ฅ๋ฅผ ๋ฐํํฉ๋๋ค. ์ด ๊ฒฝ์ฐ ๋ค์ ๋ชจ๋ ์์ ์ ์ํํ ์ ์์ง๋ง ๊ทธ๋งํ ๊ฐ์น๊ฐ ์์ต๋๊น?
๋ ๋ฉ์๋ ๋ชจ๋ ์ค๋ฅ๋ฅผ ๋ฐํํ๋ฉด ๊ฒฝ์ ์ญ์ ๊ฐ ๋ฐ์ํ์์ ํ์คํ ์ ์ ์์ต๋๋ค. ์ด ์ญ์ ๊ฐ set์ ํธ์ถํ ํ์ ๋ฐ์ํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ฐ๋ฆฌ๊ฐ ํ๋ฆฝํ๋ ค๋ ์๋ฏธ๋ ์ด๋ฏธ ์ง์์ก์ต๋๋ค. ์ด๋ ์ค์ ๋ก ์๋ฌด๊ฒ๋ ์์ฑ๋์ง ์์๋๋ผ๋ set์ด ์ฑ๊ณต์ ์ผ๋ก ์คํ๋์๋ค๊ณ ๊ฐ์ ํ ์ ์์์ ์๋ฏธํฉ๋๋ค.
๋ ๋ง์ ๊ธฐ์ ์ ์ธ ์ธ๋ถ์ฌํญ
์ด๋ฒ ์น์
์์๋ ๋ถ์ฐ ์์คํ
์์ ๋ฒ์ด๋ ์ฝ๋ฉ์ ๋ํด ์ด์ผ๊ธฐํ๊ฒ ์ต๋๋ค.
๊ณ ๊ฐ์ ์ฃผ์ ์๊ตฌ ์ฌํญ ์ค ํ๋๋ ํฌ๋ก์ค ํ๋ซํผ์ด์์ต๋๋ค. ์ฆ, ์๋น์ค ์ค ํ๋ ์ด์์ด Linux, MacOS ๋ฐ Windows์์ ์ง์๋์ด์ผ ํฉ๋๋ค. ์ฒ์์๋ Linux์ฉ์ผ๋ก๋ง ๊ฐ๋ฐํ๊ณ ๋์ค์ ๋ค๋ฅธ ์์คํ
์์๋ ํ
์คํธ๋ฅผ ์์ํ์ต๋๋ค. ์ด๋ก ์ธํด ๋ง์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ผ๋ฉฐ ํ๋์ ์ ๊ทผ ๋ฐฉ๋ฒ์ด ์์ ํ ๋ถ๋ถ๋ช
ํ์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ด์ ์ธ ๊ฐ์ง ์กฐ์ ์๋น์ค๊ฐ ๋ชจ๋ Linux ๋ฐ MacOS์์ ์ง์๋๋ ๋ฐ๋ฉด Consul KV๋ง Windows์์ ์ง์๋ฉ๋๋ค.
์ฐ๋ฆฌ๋ ์ฒ์๋ถํฐ ๊ธฐ์ฑ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์๋น์ค์ ์ ๊ทผํ๋ ค๊ณ ๋
ธ๋ ฅํ์ต๋๋ค. ZooKeeper์ ๊ฒฝ์ฐ ์ ํ์ด ๋จ์ด์ก์ต๋๋ค.
ZooKeeper C++ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋น๋๊ธฐ ์ธํฐํ์ด์ค์์ ์๊ฐ์ ๋ฐ์ ๋น๋๊ธฐ ์ธํฐํ์ด์ค๋ ๊ตฌํํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ZooKeeper C++์์๋ ์ด๋ฅผ ์ํด future/promise ํ๋ฆฌ๋ฏธํฐ๋ธ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ถํํ๋ STL์์๋ ๋งค์ฐ ์ ์ ํ๊ฒ ๊ตฌํ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์๋์ค
์ฐ๋ฆฌ์ ๊ตฌํ์ ๋ค์๊ณผ ๊ฐ์ด ์๋ํฉ๋๋ค. ํธ์ถ๋๋ฉด ์ถ๊ฐ ์ฝ์/๋ฏธ๋ ์์ด ์์ฑ๋ฉ๋๋ค. ์๋ก์ด future๊ฐ ๋ฐํ๋๊ณ , ์ ๋ฌ๋ future๋ ํด๋น ํจ์ ๋ฐ ์ถ๊ฐ Promise์ ํจ๊ป ๋๊ธฐ์ด์ ๋ฐฐ์น๋ฉ๋๋ค. ํ์ ์ค๋ ๋๋ ๋๊ธฐ์ด์์ ์ฌ๋ฌ ๋ฏธ๋๋ฅผ ์ ํํ๊ณ wait_for๋ฅผ ์ฌ์ฉํ์ฌ ํด๋งํฉ๋๋ค. ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ฉด ํด๋น ํจ์๊ฐ ํธ์ถ๋๊ณ ํด๋น ํจ์์ ๋ฐํ ๊ฐ์ด Promise์ ์ ๋ฌ๋ฉ๋๋ค.
๋์ผํ ์ค๋ ๋ ํ์ ์ฌ์ฉํ์ฌ etcd ๋ฐ Consul์ ๋ํ ์ฟผ๋ฆฌ๋ฅผ ์คํํ์ต๋๋ค. ์ด๋ ๊ธฐ๋ณธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ฌ๋ฌ ๋ค๋ฅธ ์ค๋ ๋์์ ์ก์ธ์ค๋ ์ ์์์ ์๋ฏธํฉ๋๋ค. ppconsul์ ์ค๋ ๋๋ก๋ถํฐ ์์ ํ์ง ์์ผ๋ฏ๋ก ์ด์ ๋ํ ํธ์ถ์ ์ ๊ธ์ผ๋ก ๋ณดํธ๋ฉ๋๋ค.
์ฌ๋ฌ ์ค๋ ๋์์ grpc๋ก ์์
ํ ์ ์์ง๋ง ๋ฏธ๋ฌํ ๋ถ๋ถ์ด ์์ต๋๋ค. etcd์์ watch๋ grpc ์คํธ๋ฆผ์ ํตํด ๊ตฌํ๋ฉ๋๋ค. ์ด๋ ํน์ ์ ํ์ ๋ฉ์์ง์ ๋ํ ์๋ฐฉํฅ ์ฑ๋์
๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ชจ๋ ๊ฐ์์ ๋ํ ๋จ์ผ ์ค๋ ๋์ ์์ ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ๋ ๋จ์ผ ์ค๋ ๋๋ฅผ ์์ฑํฉ๋๋ค. ๋ฐ๋ผ์ grpc๋ ์คํธ๋ฆฌ๋ฐ์ ๋ํ ๋ณ๋ ฌ ์ฐ๊ธฐ๋ฅผ ๊ธ์งํฉ๋๋ค. ์ด๋ ์๊ณ๋ฅผ ์ด๊ธฐํํ๊ฑฐ๋ ์ญ์ ํ ๋ ๋ค์ ์์ฒญ์ ๋ณด๋ด๊ธฐ ์ ์ ์ด์ ์์ฒญ์ ์ ์ก์ด ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํจ์ ์๋ฏธํฉ๋๋ค. ๋๊ธฐํ์ ์ฌ์ฉํ๋ค
ํฉ๊ณ
์์ ์ ๋ํ ์ฐธ์กฐ :
์ฐ๋ฆฌ ํ:
์ถ์ฒ : habr.com