์ด๋ฒ ์๋ฆฌ์ฆ์์๋ In Search of an Understandable Consensus Algorithm
(Extended Version) ๋ฅผ ์ฝ๊ณ ์ ๋ฆฌํฉ๋๋ค. ์ด๋ฒ ๊ธ์์๋ ๋ค์ ๋ถ๋ถ์ ๋ค๋ฃน๋๋ค:
- ๋ฆฌ๋ ๋ ธ๋์ ์ญํ 2๊ฐ์ง: ํด๋ผ์ด์ธํธ ์์ฒญ ์ฒ๋ฆฌ, ๋ก๊ทธ ๋ณต์
- ๋ก๊ทธ ๋ณต์ : ๋ฆฌ๋ ๋ ธ๋๋ ๋ก๊ทธ ๋ณต์ ๋ฅผ ์์ํ๊ณ , ํ๋ก์ ๋ ธ๋๋ ACK๋ฅผ ๋ณด๋ธ๋ค. ๋ก๊ทธ๋ ๋ณต์ , ์ปค๋ฐ, ์ ์ฉ๋๋ค.
์ง๋ ๊ธ์์๋ raft ์๊ณ ๋ฆฌ์ฆ์์ ๋ฆฌ๋ ์ ์ถ์ ํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์๋ค. ์ด๋ฒ์๋ ๋์ฒด ๋ฆฌ๋๊ฐ ๋ฌด์จ ์ผ์ ์ด๋ป๊ฒ ํด์ผ ํ๊ธธ๋ ๊ทธ๋ ๊ฒ ์ด์ฌํ ๋ฝ์๋์ง ์ดํด๋ณด์.
Raft ์์คํ ์์ ๋ฆฌ๋ ๋ ธ๋๋ ํฌ๊ฒ 2๊ฐ์ง ์ญํ ์ ํ๋ค.
โํด๋ผ์ด์ธํธ์ ์์ฒญ ์ฒ๋ฆฌโ์์์ ํด๋ผ์ด์ธํธ๊ฐ ๋ญ์ง ํท๊ฐ๋ฆด ์ ์๋ค. ์ฌ๊ธฐ์ ๋งํ๋ ํด๋ผ์ด์ธํธ๋ raft ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋์ํ๋ ๋ถ์ฐ ์์คํ ์ ํด๋ผ์ด์ธํธ๋ฅผ ๋งํ๋ค. ์๋ฅผ ๋ค์ด ๋ชฝ๊ณ DB์์ raft ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉ ์ค์ด๋ผ๋ฉด ์ด ๋ ํด๋ผ์ด์ธํธ๋ ๋ชฝ๊ณ DB๋ก ์์ฒญ์ ๋ณด๋ด๋ ํด๋ผ์ด์ธํธ๊ฐ ๋๊ณ , โํด๋ผ์ด์ธํธ์ ์์ฒญโ์ ์๋ก์ด ๋ฐ์ดํฐ ์์ฑ, ์์ ๋ฑ ์ฐ๋ฆฌ๊ฐ ํ๋ ์ผ๋ฐ์ ์ธ CRUD ์ฐ์ฐ์ด ๋๋ค.
๋ฆฌ๋ ๋ ธ๋๊ฐ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ค๋ ๊ฑด, ๋ค๋ฅธ ํ๋ก์ ๋ ธ๋๋ ๊ทธ ์์ฒญ์ ์ฒ๋ฆฌํ์ง ์์์ ์๋ฏธํ๊ธฐ๋ ํ๋ค. ์ฆ, raft ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ ์ํ ๊ธฐ๊ณ(state machine)์ ์ํ์ ๋ณ๊ฒฝ์ด ์๊ฒจ์ผ ํ๋ค๋ฉด ๊ทธ ๋ณ๊ฒฝ ์์ฒญ์ ๋ฐ์๋ค์ด๋ ์๋ํฌ์ธํธ๋ ํญ์ ๋ฆฌ๋ ๋ ธ๋๊ฐ ๋๋ค. ๋ ธ๋ ํ๋๋ง ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋ค๋ ๋๋ฌด ๋นํจ์จ์ ์ด์ง ์์๊น? ๋ผ๊ณ ์ง๋ฌธํ ์๋ ์๊ฒ ๋ค. ๊ทธ๋์ ์ฝ๊ธฐ ์ฐ์ฐ์ ํ๋ก์ ๋ ธ๋์๊ฒ๋ ๋ณด๋ด๊ฑฐ๋ lease ๋ชจ๋, quorum reads ๋ฅผ ์ฐ๋ ๋ฑ raft ๋ฅผ ๋ณํํ ์ฌ๋ฌ๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ์ด ์ฐ์ธ๋ค. ์ค์ ๋ก ๋ชฝ๊ณ DB์์๋ ๋ ํ๋ฆฌ์นด ์ ์ ๋ํด raft ์๊ณ ๋ฆฌ์ฆ ๋ณํ ๋ฒ์ ์ ์ฌ์ฉํ๋ค.
Raft ์๊ณ ๋ฆฌ์ฆ์ ์ด๋ค๋ ๊ฑด ๋ฆฌ๋-ํ๋ก์ ๋ ธ๋๊ฐ ์กด์ฌํ๊ณ ๊ทธ ๋ ธ๋๋ค์ด ์๋ก ๊ฐ์ ๋ฐ์ดํฐ ์ํ๋ฅผ ์ ์งํด์ผํจ์ ์๋ฏธํ๋ค. ๊ทธ๊ฒ์ด.. ํฉ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ชฉ์ ์ด๋๊น..! ์ด ๋ชฉ์ ์ ๋ฌ์ฑํ๊ธฐ ์ํด ๋ฆฌ๋ ๋ ธ๋๋ ์ด๋ฐ ์ผ์ ํ๊ฒ ๋๋ค.
์์ ๋ดค๋ฏ์ด ๋ฆฌ๋ ๋ ธ๋๋ง ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ์๋ค์ด๊ธฐ ๋๋ฌธ์ ํ๋ก์ ๋ ธ๋๋ ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ์ ๋ณด๋๋ค๋ ์ฌ์ค์ ์ ์ ์๋ค. ๋์ ๋ฆฌ๋ ๋ ธ๋๊ฐ ๋จผ์ ํ๋ก์ ๋ ธ๋์๊ฒ ๋ก๊ทธ ๋ณต์ ์์ฒญ์ ๋ณด๋ธ๋ค. ํ๋ก์ ๋ ธ๋๋ ๊ทธ ์์ฒญ์ ๋ฐ์ผ๋ฉด ๊ทธ์ ์์ผ ๋ก๊ทธ ๋ณต์ ์ ์ฐธ์ฌํ๊ฒ ๋๋ค.
๋ก๊ทธ ๋ณต์ ์์ฒญ์๋ ํ๋ก์ ๋
ธ๋์ ๋ฐ์ํด์ผ ํ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์๋ค. 0๋ฒ key์ ๋ํ ๊ฐ์ 10์ผ๋ก ์
๋ฐ์ดํธ
์ ๊ฐ์ ์์ด๋ค. ํ๋ก์ ๋
ธ๋๋ ์ด ์์ฒญ์ ๋ฐ์์ ์์ ์ ๋ก๊ทธ์ ์ถ๊ฐํ ๋ค์ ์ด ์ฌ์ค์ ๋ฆฌ๋์๊ฒ ๋ค์ ์๋ฆฐ๋ค. ACK๋ฅผ ๋ณด๋ด๋ ๊ฒ์ด๋ค. ๋ฆฌ๋๋ ์ด๋ค ํ๋ก์๊ฐ ACK๋ฅผ ๋ณด๋๋์ง, ์ฆ ๋๊ฐ ๋ก๊ทธ ๋ณต์ ์ ์ฑ๊ณตํ๋์ง๋ฅผ ์ง์ผ๋ณธ๋ค.
๊ณผ๋ฐ์ ์ด์์ด ๋ก๊ทธ ๋ณต์ ์ ์ฑ๊ณตํ๋ค๋ ACK๋ฅผ ๋ณด๋๋ค๋ฉด ๊ทธ ๋ก๊ทธ ์ํธ๋ฆฌ๋ ๋ฆฌ๋ ๋ ธ๋์๊ฒ ์ ์ฉํด๋ ๋๋ ์ํธ๋ฆฌ๊ฐ ๋๋ค. ๋ฆฌ๋ ๋ ธ๋์ ์ํ ๊ธฐ๊ณ(state machine)์ 0๋ฒ key ๊ฐ์ ๋ฐ๊พธ๋ ์์ ์ ๋ฐ๋ก ์ด ๋๊ฐ ๋๋ค. ๋ง์ฝ ๊ณผ๋ฐ์ ์ด์์ ACK๋ฅผ ํ๋ณดํ์ง ๋ชปํ๋ค๋ฉด ๋ฆฌ๋๋ ๊ณ์ํด์ ๋ก๊ทธ ๋ณต์ ์์ฒญ์ ๋ณด๋ธ๋ค. (๋ก๊ทธ ๋ณต์ ์์ฒญ ์ฌ์๋)
์ฌ๊ธฐ๊น์ง ์ฝ์ด๋ณด์๋ค๋ฉด ๋
ธ๋ ๊ฐ ํต์ ์๋๊ฐ ์๋นํ ๋นจ๋ผ์ผํ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ค ๊ฒ์ด๋ค. Raft ์์๋ RPC ๋ฅผ ์ฌ์ฉํด ๊ฐ ๋
ธ๋ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ค. ๋ฆฌ๋๊ฐ ํ๋ก์ ๋
ธ๋์๊ฒ ๋ณด๋ด๋ RPC ๋ ๋ณ๋ ฌ๋ก ์ ์ก๋๋ค. Raft ์๊ณ ๋ฆฌ์ฆ ์์์ ๋ณด๋ด๋ ์ฌ๋ฌ๊ฐ์ง RPC๋ฅผ ๋ชฉ์ ์ ๋ฐ๋ผ ์ด๋ฆ ๋ถ์๋๋ฐ, ๋ก๊ทธ ๋ณต์ ์์ฒญ์ AppendEntries RPC
๋ฅผ ํตํด ์ ๋ฌ๋๋ค. ๋ก๊ทธ ๋ณต์ ์์ฒญ์ธ๋ฐ ์ ๋ญ๊ฐ ์ถ๊ฐํ๋ค๋ ์๋ฏธ์ Append
๋ฅผ ์ผ์๊น?
์์ ๋ก๊ทธ ๋ณต์ ๊ณผ์ ์ ๋ค์ ์ดํด๋ณด์.
๋ก๊ทธ ๋ณต์ ์์ฒญ์๋ ํ๋ก์ ๋ ธ๋์ ๋ฐ์ํด์ผ ํ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์๋ค.
0๋ฒ key์ ๋ํ ๊ฐ์ 10์ผ๋ก ์ ๋ฐ์ดํธ
์ ๊ฐ์ ์์ด๋ค. ํ๋ก์ ๋ ธ๋๋ ์ด ์์ฒญ์ ๋ฐ์์ ์์ ์ ๋ก๊ทธ์ ์ถ๊ฐํ ๋ค์ โฆ
ํ๋ก์ ๋ ธ๋ํํ ๋ค์ด๊ฐ ๊ฑด ๊ฐ์ โ๋ณ๊ฒฝโํ๋ผ๋ ์์ฒญ์ธ๋ฐ, ํ๋ก์๋ ์ด๊ฑธ โ์์ ์ ๋ก๊ทธ์ ์ถ๊ฐโ ํ๋ค๊ณ ํ๋ค. ๊ทธ๋ ๋ค๋ฉด ์ ๋ฐ์ดํธ๋ ํ์ง ์๋๊ฑธ๊น?
์ ๋ต์ โ์๋๋คโ. ์ ๋ฐ์ดํธ๋ ์ผ์ด๋๋ค. ๊ทธ ๋์์ด ๋ค๋ฅผ ๋ฟ์ด๋ค.
Raft ์ ์ฐธ์ฌํ๋ ๋ฆฌ๋, ํ๋ก์ ๋ ธ๋์๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์๊ฒผ๋ค๋ ์ฌ์ค์ด ์์ด๊ธฐ๋ง ํ๋ค. ์ ๋ฐ์ดํธ๋ โRaft ๋ฅผ ์ฌ์ฉํด์ ๊ด๋ฆฌ๋๊ณ ์๋ ์ํ ๊ธฐ๊ณ(state machine)โ์ ์ผ์ด๋๋ค. ์ฆ, 0๋ฒ key์ ๊ทธ ๊ฐ์ ์ํ ๊ธฐ๊ณ์ ์ ์ฅ๋๋ค. ๋ฆฌ๋, ํ๋ก์ ๋ ธ๋๋ ๊ทธ ์ํ ๊ธฐ๊ณ์ ์ผ์ด๋ ๋ณํ์ ๋ํ ๊ธฐ๋ก์ ๋จ๊ธฐ๋ ์ญํ ์ ํ๋ ๊ฒ์ด๋ค. ๋น์ ํ์๋ฉด ์ํ ๊ธฐ๊ณ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค, ๋ฆฌ๋์ ํ๋ก์ ๋ ธ๋๋ ๋ฉ์ธ์งํ์ฒ๋ผ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฌ๋ค๊ณ ์๊ฐํด๋ณผ ์ ์๋ค.
๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๋ฉด ์ด๋ ๊ฒ ๋๋ค. ๋ฆฌ๋์ ํ๋ก์๊ฐ ์ ์ฅํ๋ ๋ก๊ทธ์๋ ๊ฐ ํค๋ณ๋ก ์ผ์ด๋ ๊ฐ์ ๋ณํ๊ฐ ๊ทธ๋๋ก ์ ์ฅ๋๊ณ , ๊ฐ์ ๋ณ๊ฒฝ์ state machine ์ ๋ฐ์๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ 0๋ฒ key ์ ๋ํ ๊ฐ์ ์์ฒญํ๋ค๋ฉด state machine ์ ๊ฒ์ ์ฝ์ด์ ๋๋ ค์ฃผ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆผ์์ ๋ง์ง๋ง์ผ๋ก ๊ณผ๋ฐ์ ์ด์์ ๋
ธ๋์ ๋ก๊ทธ๊ฐ ๋ณต์ ๋ ์ฌ์ค์ key: 0, value: 10
์ด๊ธฐ ๋๋ฌธ์ ๋ฆฌ๋ ๋
ธ๋๋ ์์ ์ state machine ์ ๊ทธ ์ฌ์ค์ ๋ฐ์ํ ์ํ์ด๋ค. ์ด ๋ โ๊ณผ๋ฐ์โ๋ฅผ ํ๋จํ ๋๋ ๋ฆฌ๋ ์๊ธฐ์์ ๋ ํฌํจ๋๊ธฐ ๋๋ฌธ์ ๋
ธ๋ 2๊ฐ์ ๋ณต์ ๋ ๋ก๊ทธ๋ ๊ณผ๋ฐ์ ์ด์์ด ๋ณต์ ํ ๋ก๊ทธ๋ผ๊ณ ๋ณธ๋ค.
๊ณผ๋ฐ์ ์ด์์ด ๋ณต์ ์ ์ฑ๊ณตํ ๋ก๊ทธ ์ํธ๋ฆฌ๋ฅผ โcommit
๋์๋คโ๊ณ ํํํ๋ค. ๋ฆฌ๋๋ ๊ฐ์ฅ ์ต๊ทผ์ ์ปค๋ฐ๋ ๋ก๊ทธ ์ํฐ๋ฆฌ์ ์ธ๋ฑ์ค๋ฅผ ๊ฐ๊ณ ์์ผ๋ฉด์ ํ๋ก์์๊ฒ AppendEntries RPC ๋ฅผ ๋ณด๋ผ ๋๋ง๋ค ๊ฐ์ด ๋ณด๋ธ๋ค.
์ด ๋ ์ฃผ์ํ ์ ์ ์ปค๋ฐ๋ ๋ก๊ทธ์ ์ ์ฉํ ๋ก๊ทธ๊ฐ ๋ค๋ฅด๋ค๋ ์ฌ์ค์ด๋ค.
ํ๋ก์๋ ๋ฆฌ๋์ AppendEntries RPC ์ ๋ค์ด์จ โ๋ง์ง๋ง์ผ๋ก ์ปค๋ฐ๋ ์ํธ๋ฆฌ ์ธ๋ฑ์คโ๋ฅผ ๋ณธ ๋ค์์์ผ ๊ทธ ์ํธ๋ฆฌ๋ฅผ ์๊ธฐ ์์ ์๊ฒ ์ ์ฉํ๋ค. ์ฆ, ํ๋ก์๊ฐ ACK ๋ฅผ ๋ณด๋ด๊ธฐ ์ ๊น์ง๋ ์์ ์ state machine ์๋ ์์ง ๊ทธ ์ํธ๋ฆฌ๊ฐ ์ ์ฉ๋์ง ์์ ์ํ์ธ ๊ฒ์ด๋ค. ๋ก๊ทธ ์ํธ๋ฆฌ ํ๋์ ๋ํ ์ฒ๋ฆฌ๋ ์๋ ์์๋ก ์งํ๋๋ค.