๋ค๋ฆ์ด ์๋๋ผ ๋ช๊ฐ์ง ์ง๋ฌธ์ด ์์ด์ ๊ธ์ ์จ ๋ด ๋๋ค.
์ง๋ฌธ๋ค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1. Arcus๋ fail over๊ฐ ์๋์ผ๋ก ๋๋ค๊ณ ๋์ด ์์ต๋๋ค.
Arcus๋ Consistent Hashing์ ํ๊ณ ์๋ ๊ฒ์ผ๋ก ์๊ณ ์์ต๋๋ค.
๋ง์ฝ Arcus 3๋๋ฅผ ์ด์ํ๋ค๋ฉด 1๋๊ฐ ์ฃฝ์ผ๋ฉด 2๋๊ฐ ์์ค๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ธํ๊ณ ์ ์์ ์ผ๋ก ์ด์์ด ๋๋๊ฑด๊ฐ์?
๊ทธ๋ฆฌ๊ณ ํ๋๊ฐ ๋ค์ ์ด์๋๋ฉด ์๋์ผ๋ก ์ด์์ ๋ค์ด๊ฐ ์ ์๋๊ฑด์ง๋ ๊ถ๊ธํฉ๋๋ค.
2. Admin์ ํตํด์ Runtime์ ์๋ฒ๋ฅผ ์ถ๊ฐ/์ญ์ ๊ฐ ๋๋ ๊ฒ์ผ๋ก ์๊ณ ์๋๋ฐ
์ผ๋ถ ์์ค์ด ์์ ์ ์๋ค ๋ผ๊ณ ๋คํ๋จผํธ์์ ๋ดค์ต๋๋ค. ์ ๊ทธ๋ฐ์ง ์ค๋ช
์ข ๋ถํ๋๋ฆฝ๋๋ค.
(๊ณผ์ ์ ๋ํด์ ์ค๋ช
ํด์ฃผ์๋ฉด ๊ฐ์ฌ๋๋ฆฌ๊ฒ ์ต๋๋ค.)
3. B+ Tree๋ฅผ ์ ์ธํ๊ณ X-Memcached์์ ์ฐจ์ด์ ์ ๋ฌด์์ด ์์๊น์?
ํ์ฌ ์ ํฌ๋ x-memcached๋ฅผ ์ฌ์ฉํ๊ณ ์๊ณ fail-over๋ ์๋๋๋ผ๋ ํ๋๊ฐ ์ฃฝ์ผ๋ฉด ์ปค๋ฅ์
๋ฆฌ์คํธ์์ ๋นผ๋ฒ๋ฆฌ๊ณ ๋๋จธ์ง๊ฐ ์ ์์ ์ผ๋ก ๋ค์ ๋์ํฉ๋๋ค. ๋ค๋ง Collection ํ์
์ ๋ฝ์ ๊ฑธ์ง ์๋ ์ด์ ๋ฌธ์ ๊ฐ ์๊ธด ํ์ง๋ง์... ๊ทธ๊ฒ ๋ง๊ณ ์ด๋ค ์ฐจ์ด์ ์ด ์๋์ง ๊ถ๊ธํฉ๋๋ค.
์ฐ์ replication by application์ ์๋ฏธ๊ฐ ๋ฌด์์ธ์ง ๊ถ๊ธํฉ๋๋ค. ์์ฉ ํ๋ก๊ทธ๋จ์์ ์ธ์งํ๋ฉด ๋ฐ๋ก arcus๋ก ์บ์ฑํ๋ค๊ณ ํ์ จ๋๋ฐ ์ค์ ๊ทธ๋ ๊ฒ arcus ์์ฒด ํ๋ก๊ทธ๋จ์ด ๋ฐ๋ก ๋์์ ํ์ง ์์ ๊ฒ์ผ๋ก ๋ณด์ด๋๋ฐ arcus๋ฅผ ์ฌ์ฉํ๋ ์ดํ๋ฆฌ์ผ์ด์ ์์ ์ค์ ๊ทธ๋ ๊ฒ ์ง์ผ ํ๋ค๋ ๋ง์์ด์ ๊ฐ์?
๋๋จธ์ง ๋ต๋ณ๋ค์ ๋ํด์๋ ์ดํด๋ฅผ ํ์์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์๋ ค์ฃผ์ ๊ทธ ์ฃผ์์ ํด๋ผ์ด์ธํธ๋ฅผ ๋งํ๋๊ฒ ๋ง์ต๋๋ค.
Collection ์ ๊ฒฝ์ฐ๋ ์ ํฌ ๊ฐ์ ๊ฒฝ์ฐ๋ Collection์ xmemcached์์ get ํ๋ ์๊ฐ ์ด๋ฏธ ๋ก์ปฌ ๋ฐ์ดํฐ๊ฐ ๋๊ธฐ ๋๋ฌธ์ ๋ค์ set ํ ๋๋ ๋ถ์ฐ๋ฝ์ ๊ฑธ์ง ์๋ ์ด์ ์ค์ ๋๊ฐ์ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ด ๊นจ์ด์ง๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฐ ์๋ฏธ์์ arcus๋ ํด๋น ๊ธฐ๋ฅ์ ๋ถ์ฐ๋ฝ ๋น์ทํ๊ฒ ๊ตฌํํ๊ฒ ์๋๊ฐ ์ถ๋ค์...
2014๋ 6์ 15์ผ ์ผ์์ผ ์คํ 8์ 50๋ถ 32์ด UTC+9, jhpark816 ๋์ ๋ง:
> ์๋
ํ์ธ์..
> ๋จผ์ ๊ด์ฌ๊ฐ์ ธ ์ฃผ์
์ ๊ฐ์ฌ๋๋ฆฌ๊ณ , ๋ต๋ณ๋๋ฆฌ๋๋ก ํ๊ฒ ์ต๋๋ค.
>
>
> - 3๋ ์ด์ ์ค 1๋๊ฐ ์ฃฝ์ผ๋ฉด, ์ฃฝ์ cache node๊ฐ ๊ฐ์ง๋ data๋ lossํ๋๋ผ๋ Arcus๋ ๋๋จธ์ง 2๋๋ก ์ด์์ ๊ณ์ํฉ๋๋ค.
> ย Arcus๋ DB์ ๊ฐ์ back-end storage์ ์๋จ์์ hot-data๋ฅผ "replication by application ๋ฐฉ์"์ผ๋ก cachingํฉ๋๋ค.
> ย ๋ค์ ๋งํด, loss๋ data์ ๋ํด ์์ฉ์ cache miss๋ก ์ธ์งํ๋ ์ฆ์, ๋ค์ DB์์ ๊ทธ data๋ฅผ ์กฐํํ์ฌ Arcus์ cachingํ๊ธฐ ๋๋ฌธ์,
> ย ๊ทธ ์ดํ๋ถํฐ ์์ฉ์ Arcus cache cloud์์ ๊ทธ data๋ฅผ ์กฐํํ ์ ์๊ฒ ๋ฉ๋๋ค.
>
>
>
> - Cache node failure๋ zookeeper์ ์ํด detection๋๊ณ , ๋ณ๊ฒฝ๋ alive cache node list๋ Arcus clients์๊ฒ ์ ๋ฌ๋๋ฉฐ,
> ย Arcus clients๋ ๋ณ๊ฒฝ๋ cache node list๋ฅผ ๊ธฐ๋ฐ์ผ๋ก consistent hashingํ๊ฒ ๋ฉ๋๋ค.
>
>
> - ์ฃฝ์ cache node๋ฅผ ๋ค์ ๊ตฌ๋์ํค๋ฉด, ๊ทธ cache node๋ ์์ ์ ์ ๋ณด๋ฅผ zookeeper์ ephemeral node๋ก ๋ฑ๋กํ๊ฒ ๋๋ฉฐ,
> ย ๊ทธ ์ฆ์ ๊ทธ cache node๊ฐ ์ถ๊ฐ๋ cache node list๋ zookeeper์ ์ํด Arcus clients์ ์ ๋ฌ๋ฉ๋๋ค.
>
> ย ์ฆ, ๋ค์ 3๋์ cache node๋ก ๊ตฌ์ฑ๋์ด ์ด์๋ฉ๋๋ค.
>
>
> - ์์ ๊ฐ์ด Arcus์ ์๋ก์ด cache node๋ฅผ ์ถ๊ฐํ๊ฒ ๋๋ฉด,
> ย ์ฆ, 2๊ฐ cache node์์ 3๊ฐ cache node๋ก ํ์ฅ๋๋ ๊ฒฝ์ฐ์๋ data loss๊ฐ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค.
> ย ์ด๋ cache node ์ถ๊ฐ๋ก ์ธํด, consistent hashing์ ์ํ key-to-node mapping์ด ๋ณ๊ฒฝ๋๊ธฐ ๋๋ฌธ์
๋๋ค.
> ย ์๋ฅผ ๋ค์ด, K1, K2, ..., K10์ 10๊ฐ key๊ฐ ์กด์ฌํ๊ณ , N1, N2์ 2๊ฐ cache node๊ฐ ์กด์ฌํ๊ณ ,
>
> ย ํ์๋ฒ์งธ key๋ค์ N1์ผ๋ก mapping๋๊ณ , ์ง์๋ฒ์งธ key๋ค์ N2๋ก mapping๋์ด ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
> ย ์ด ์ํ์์ ์๋ก์ด N3๊ฐ ์ถ๊ฐ๋๋ฉด, consistent hashing์ ์ํด 10๊ฐ key๋ค์ค 1/3 ์ ๋๊ฐ N3์ผ๋ก re-mapping๋ฉ๋๋ค.
> ย ์๋ก์ด N3์ empty ์ํ๋ก ๊ตฌ๋๋๋ฏ๋ก, ๊ทธ ์์ ์ N3์ผ๋ก re-mapping๋ key๋ค์ ๋ํ ์ ๊ทผ์
>
> ย cache miss๋ฅผ ์ ๋ฐ์ํค๊ฒ ๋ฉ๋๋ค. ๊ฒฐ๊ตญ data loss์ ๋ง์ฐฌ๊ฐ์ง ์ํ๊ฐ ๋๋ ๊ฒ์
๋๋ค.
> ย N3์ผ๋ก re-mapping๋ key๋ค์ N1 ๋๋ N2์ ์กด์ฌํ๊ฒ ์ง๋ง, ๋ ์ด์ ์กด์ฌํ์ง ์๊ฒ ๋๋ ๊ฒ์ด๋ฉฐ,
>
> ย expiration ๋๋ eviction์ผ๋ก ๋์ค์ ์ ๊ฑฐ๋๊ฒ ๋ฉ๋๋ค.
> ย ย
>
> - ๋ง์ง๋ง ์ง๋ฌธ์ ๊ธฐ์กด memcached ์์ ์ฐจ์ด ๊ธฐ๋ฅ์ ์ง๋ฌธํ์ ๊ฒ์ธ์ง์ ??
> ย ๊ธฐ์กด memcached์์ ์ฐจ์ด์ ์ http://naver.github.io/arcus/ ์ ๊ฐ๋จํ ๊ธฐ์ ํ์๋ ๋ฐ์. ๋ํ์ ์ธ ์ฐจ์ด๋ ์๋์ ๊ฐ์ต๋๋ค.
>
>
> ZooKeeper ๊ธฐ๋ฐ์ cache cloud ๊ด๋ฆฌCollection ์๋ฃ๊ตฌ์กฐ (List, Set, B+tree) ์ง์B+tree์ ๋ค์ํ ๊ธฐ๋ฅ๋ค๋ค์ํ ํฌ๊ธฐ์ B+tree key (bkey)Element flag ๋ฐ filteringBkey ๊ธฐ๋ฐ์ range scan์ฌ๋ฌ B+tree๋ค์ ๋ํ sort-merge-get (smget)B+tree position ๊ธฐ๋ฐ์ range scan
> Item attibute ์กฐํ ๋ฐ ์ค์ ๊ธฐ๋ฅSticky item(not evicted & oot expired) ์ง์Collection ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ํ small memory allocator