Raft ๋ถ์ฐ ํฉ์ ์๊ณ ๋ฆฌ์ฆ, ํต์ฌ ์์น, ์ด์ ๋จ๊ณ, ์ค์ง์ ์ธ ๊ตฌํ ๊ณ ๋ ค ์ฌํญ ๋ฐ ๊ธ๋ก๋ฒ ํ์ฅ ๊ฐ๋ฅํ ์์คํ ๊ตฌ์ถ์ ์ํ ์ค์ ์ ์ฉ ์ฌ๋ก๋ฅผ ํ๊ตฌํฉ๋๋ค.
๋ถ์ฐ ํฉ์ ๋ง์คํฐํ๊ธฐ: ๊ธ๋ก๋ฒ ์์คํ ์ ์ํ Raft ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ ์ฌ์ธต ๋ถ์
์ ์ ๋ ์ํธ ์ฐ๊ฒฐ๋๋ ์ธ์์์ ๋ถ์ฐ ์์คํ ์ ์ ์ ์๊ฑฐ๋ ํ๋ซํผ, ๊ธ์ต ๊ธฐ๊ด์์ ํด๋ผ์ฐ๋ ์ปดํจํ ์ธํ๋ผ ๋ฐ ์ค์๊ฐ ํต์ ๋๊ตฌ์ ์ด๋ฅด๊ธฐ๊น์ง ๊ฑฐ์ ๋ชจ๋ ๋์งํธ ์๋น์ค์ ๋ฐฑ๋ณธ์ ๋๋ค. ์ด๋ฌํ ์์คํ ์ ์ํฌ๋ก๋์ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๋จธ์ ์ ๋ถ์ฐํจ์ผ๋ก์จ ํ์ํ ํ์ฅ์ฑ, ๊ฐ์ฉ์ฑ ๋ฐ ๋ณต์๋ ฅ์ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ๊ฐ๋ ฅํจ์๋ ์๋นํ ๊ณผ์ ๊ฐ ๋ฐ๋ฆ ๋๋ค. ๋ฐ๋ก ๋คํธ์ํฌ ์ง์ฐ, ๋ ธ๋ ์ฅ์ ๋ฐ ๋์ ์์ ๋ฐ์ ์์๋ ๋ชจ๋ ๊ตฌ์ฑ ์์๊ฐ ์์คํ ์ํ์ ๋์ํ๋๋ก ๋ณด์ฅํ๋ ๊ฒ์ ๋๋ค. ์ด ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ ๊ฐ ๋ฐ๋ก ๋ถ์ฐ ํฉ์์ ๋๋ค.
๋น๋๊ธฐ์ ์ด๊ณ ์ฅ์ ๊ฐ ๋ฐ์ํ๊ธฐ ์ฌ์ด ๋ถ์ฐ ํ๊ฒฝ์์ ํฉ์๋ฅผ ๋ฌ์ฑํ๋ ๊ฒ์ ์ ๋ช ๋๊ฒ ๋ณต์กํฉ๋๋ค. ์์ญ ๋ ๋์ Paxos๋ ์ด ๊ณผ์ ๋ฅผ ํด๊ฒฐํ๋ ์ง๋ฐฐ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ด์์ผ๋ฉฐ, ์ด๋ก ์ ๊ฑด์ ์ฑ์ผ๋ก ์กด๊ฒฝ๋ฐ์์ง๋ง ์ข ์ข ๋ณต์ก์ฑ๊ณผ ๊ตฌํ์ ์ด๋ ค์์ผ๋ก ๋นํ๋ฐ์์ต๋๋ค. ๊ทธ๋ฌ๋ค Raft ์๊ณ ๋ฆฌ์ฆ์ด ๋ฑ์ฅํ์ต๋๋ค. Raft๋ ์ดํด ๊ฐ๋ฅ์ฑ์ ์ฃผ๋ ๋ชฉํ๋ก ์ค๊ณ๋์์ต๋๋ค. Raft๋ ๋ด๊ฒฐํจ์ฑ ๋ฐ ์ฑ๋ฅ ์ธก๋ฉด์์ Paxos์ ๋๋ฑํ์ง๋ง, ๊ฐ๋ฐ์๊ฐ ํจ์ฌ ๋ ์ฝ๊ฒ ์ดํดํ๊ณ ๊ธฐ๋ฐ์ ๊ตฌ์ถํ ์ ์๋ ๋ฐฉ์์ผ๋ก ๊ตฌ์ฑ๋์์ต๋๋ค.
์ด ์ข ํฉ ๊ฐ์ด๋์์๋ Raft ์๊ณ ๋ฆฌ์ฆ์ ๊น์ด ํ๊ณ ๋ค์ด ๊ธฐ๋ณธ ์์น, ์ด์ ๋ฉ์ปค๋์ฆ, ์ค์ง์ ์ธ ๊ตฌํ ๊ณ ๋ ค ์ฌํญ ๋ฐ ๊ฐ๋ ฅํ๊ณ ์ ์ญ์ ์ผ๋ก ๋ถ์ฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ์์ด ์ค์ํ ์ญํ ์ ํ๊ตฌํฉ๋๋ค. ์๋ จ๋ ์ํคํ ํธ, ๋ถ์ฐ ์์คํ ์์ง๋์ด ๋๋ ๊ณ ๊ฐ์ฉ์ฑ ์๋น์ค๋ฅผ ๊ตฌ์ถํ๋ ค๋ ๊ฐ๋ฐ์๋ผ๋ฉด Raft๋ฅผ ์ดํดํ๋ ๊ฒ์ด ํ๋ ์ปดํจํ ์ ๋ณต์ก์ฑ์ ๋ง์คํฐํ๊ธฐ ์ํ ํ์์ ์ธ ๋จ๊ณ์ ๋๋ค.
ํ๋ ์ํคํ ์ฒ์์ ๋ถ์ฐ ํฉ์์ ํ์์ ์ธ ํ์์ฑ
์ด๋น ์๋ฐฑ๋ง ๊ฑด์ ๊ฑฐ๋๋ฅผ ์ฒ๋ฆฌํ๋ ๊ธ๋ก๋ฒ ์ ์ ์๊ฑฐ๋ ํ๋ซํผ์ ์์ํด ๋ณด์ธ์. ๊ณ ๊ฐ ๋ฐ์ดํฐ, ์ฌ๊ณ ์์ค, ์ฃผ๋ฌธ ์ํ ๋ฑ ๋ชจ๋ ๊ฒ์ด ๋๋ฅ์ ๊ฑธ์ณ ์๋ ์๋ง์ ๋ฐ์ดํฐ ์ผํฐ์ ๊ฑธ์ณ ์ผ๊ด์ฑ์ ์ ์งํด์ผ ํฉ๋๋ค. ์ํ ์์คํ ์ ์์ฅ(์ฌ๋ฌ ์๋ฒ์ ๋ถ์ฐ๋จ)์ ๊ณ์ข ์์ก์ ๋ํ ์ ์์ ๋ถ์ผ์น์กฐ์ฐจ ๊ฐ์ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์๋๋ฆฌ์ค๋ ๋ถ์ฐ ํฉ์์ ์ค์์ฑ์ ๊ฐ์กฐํฉ๋๋ค.
๋ถ์ฐ ์์คํ ์ ๊ณ ์ ํ ๊ณผ์
๋ถ์ฐ ์์คํ ์ ๋ณธ์ง์ ์ผ๋ก ๋ชจ๋๋ฆฌ์ ์ ํ๋ฆฌ์ผ์ด์ ์๋ ์๋ ์๋ง์ ๊ณผ์ ๋ฅผ ์ผ๊ธฐํฉ๋๋ค. ์ด๋ฌํ ๊ณผ์ ๋ฅผ ์ดํดํ๋ ๊ฒ์ Raft์ ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฐ์ํจ๊ณผ ํ์์ฑ์ ์ดํดํ๋ ๋ฐ ์ค์ํฉ๋๋ค.
- ๋ถ๋ถ ์ฅ์ : ๋จ์ผ ์๋ฒ๋ ์๋ํ๊ฑฐ๋ ์์ ํ ์คํจํ๋ ๊ฒ๊ณผ ๋ฌ๋ฆฌ, ๋ถ์ฐ ์์คํ ์์๋ ์ผ๋ถ ๋ ธ๋๊ฐ ์คํจํ๊ณ ๋ค๋ฅธ ๋ ธ๋๋ ๊ณ์ ์๋ํ ์ ์์ต๋๋ค. ์๋ฒ๊ฐ ์ถฉ๋ํ๊ฑฐ๋, ๋คํธ์ํฌ ์ฐ๊ฒฐ์ด ๋์ด์ง๊ฑฐ๋, ๋์คํฌ๊ฐ ์์๋ ์ ์์ผ๋ฉฐ, ์ด ๋ชจ๋ ๊ฒ์ด ๋๋จธ์ง ํด๋ฌ์คํฐ๋ ๊ณ์ ์๋ํ๋ ๋์ ๋ฐ์ํ ์ ์์ต๋๋ค. ์์คํ ์ ์ด๋ฌํ ๋ถ๋ถ ์ฅ์ ์๋ ๋ถ๊ตฌํ๊ณ ์ฌ๋ฐ๋ฅด๊ฒ ๊ณ์ ์๋ํด์ผ ํฉ๋๋ค.
- ๋คํธ์ํฌ ๋ถํ : ๋ ธ๋๋ฅผ ์ฐ๊ฒฐํ๋ ๋คํธ์ํฌ๊ฐ ํญ์ ์์ ์ ์ธ ๊ฒ์ ์๋๋๋ค. ๋คํธ์ํฌ ๋ถํ ์ ๋ ธ๋ ํ์ ์งํฉ ๊ฐ์ ํต์ ์ด ๋์ด์ง ๋ ๋ฐ์ํ๋ฉฐ, ๋ ธ๋๊ฐ ๊ณ์ ์คํ ์ค์ด๋๋ผ๋ ํน์ ๋ ธ๋๊ฐ ์คํจํ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ฒ ํฉ๋๋ค. ์์คํ ์ ๋ค๋ฅธ ๋ถ๋ถ์ด ์ค๋๋๊ฑฐ๋ ์ผ๊ด์ฑ ์๋ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ ๋ฆฝ์ ์ผ๋ก ์๋ํ๋ ์ด๋ฌํ '๋ถํ ๋๋' ์๋๋ฆฌ์ค๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ด ํต์ฌ ํฉ์ ๋ฌธ์ ์ ๋๋ค.
- ๋น๋๊ธฐ ํต์ : ๋ ธ๋ ๊ฐ ๋ฉ์์ง๊ฐ ์ง์ฐ๋๊ฑฐ๋, ์ฌ์ ๋ ฌ๋๊ฑฐ๋, ์์ ํ ์์ค๋ ์ ์์ต๋๋ค. ๊ธ๋ก๋ฒ ์๊ณ๋ ๋ฉ์์ง ์ ๋ฌ ์๊ฐ์ ๋ํ ๋ณด์ฅ์ด ์์ผ๋ฏ๋ก ์ด๋ฒคํธ์ ์ผ๊ด๋ ์์๋ ํ์ ์ ์ธ ์์คํ ์ํ๋ฅผ ์ค์ ํ๊ธฐ ์ด๋ ต์ต๋๋ค.
- ๋์์ฑ: ์ฌ๋ฌ ๋ ธ๋๊ฐ ๋์์ ๋์ผํ ๋ฐ์ดํฐ ์กฐ๊ฐ์ ์ ๋ฐ์ดํธํ๊ฑฐ๋ ์์ ์ ์์ํ๋ ค๊ณ ์๋ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์์ ์ ์กฐ์ ํ๋ ๋ฉ์ปค๋์ฆ ์์ด๋ ์ถฉ๋๊ณผ ๋ถ์ผ์น๊ฐ ๋ถ๊ฐํผํฉ๋๋ค.
- ์์ธก ๋ถ๊ฐ๋ฅํ ์ง์ฐ ์๊ฐ: ํนํ ์ ์ญ์ ์ผ๋ก ๋ถ์ฐ๋ ๋ฐฐํฌ์์๋ ๋คํธ์ํฌ ์ง์ฐ ์๊ฐ์ด ํฌ๊ฒ ๋ค๋ฅผ ์ ์์ต๋๋ค. ํ ์ง์ญ์์ ๋น ๋ฅธ ์์ ์ด ๋ค๋ฅธ ์ง์ญ์์๋ ๋๋ฆด ์ ์์ผ๋ฉฐ, ์ด๋ ์์ฌ ๊ฒฐ์ ํ๋ก์ธ์ค์ ์กฐ์ ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
์ ํฉ์๊ฐ ์ ๋ขฐ์ฑ์ ์ด์์ธ๊ฐ
ํฉ์ ์๊ณ ๋ฆฌ์ฆ์ ์ด๋ฌํ ๊ณผ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๊ธฐ๋ณธ์ ์ธ ๋น๋ฉ ๋ธ๋ก์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ ๋ขฐํ ์ ์๋ ๊ตฌ์ฑ ์์ ๋ชจ์์ด ๋จ์ผํ๊ณ ๋งค์ฐ ์ ๋ขฐํ ์ ์์ผ๋ฉฐ ์ผ๊ด๋ ์ฅ์น๋ก ์งํฉ์ ์ผ๋ก ์๋ํ ์ ์์ต๋๋ค. ํนํ ํฉ์๋ ๋ค์์ ๋ฌ์ฑํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- ์ํ ๋จธ์ ๋ณต์ (SMR): ๋ง์ ๋ด๊ฒฐํจ์ฑ ๋ถ์ฐ ์์คํ ์ ํต์ฌ ์์ด๋์ด์ ๋๋ค. ๋ชจ๋ ๋ ธ๋๊ฐ ์์ ์์์ ๋์ํ๊ณ ๊ฐ ๋ ธ๋๊ฐ ๋์ผํ ์ด๊ธฐ ์ํ์์ ์์ํ์ฌ ํด๋น ์์ ์ ๋์ผํ ์์๋ก ์คํํ๋ฉด ๋ชจ๋ ๋ ธ๋๊ฐ ๋์ผํ ์ต์ข ์ํ์ ๋๋ฌํฉ๋๋ค. ํฉ์๋ ์ด๋ฌํ ์ ์ญ ์์ ์์์ ๋์ํ๋ ๋ฉ์ปค๋์ฆ์ ๋๋ค.
- ๊ณ ๊ฐ์ฉ์ฑ: ์์์ ๋ ธ๋๊ฐ ์คํจํ๋๋ผ๋ ์์คํ ์ด ๊ณ์ ์๋ํ๋๋ก ํ์ฉํจ์ผ๋ก์จ ํฉ์๋ ์๋น์ค๊ฐ ์ ๊ทผ ๊ฐ๋ฅํ๊ณ ๊ธฐ๋ฅํ๋๋ก ๋ณด์ฅํ์ฌ ๋ค์ดํ์์ ์ต์ํํฉ๋๋ค.
- ๋ฐ์ดํฐ ์ผ๊ด์ฑ: ๋ฐ์ดํฐ์ ๋ชจ๋ ๋ณต์ ๋ณธ์ด ๋๊ธฐํ๋๋๋ก ๋ณด์ฅํ์ฌ ์ถฉ๋ํ๋ ์ ๋ฐ์ดํธ๋ฅผ ๋ฐฉ์งํ๊ณ ํด๋ผ์ด์ธํธ๊ฐ ํญ์ ์ต์ ์ด๊ณ ์ ํํ ์ ๋ณด๋ฅผ ์ฝ๋๋ก ํฉ๋๋ค.
- ๋ด๊ฒฐํจ์ฑ: ์์คํ ์ ํน์ ์์ ์์ ๋ ธ๋ ์ฅ์ (์ผ๋ฐ์ ์ผ๋ก ์ถฉ๋ ์ฅ์ )๋ฅผ ํ์ฉํ๊ณ ์ฌ๋์ ๊ฐ์ ์์ด๋ ๊ณ์ ์งํํ ์ ์์ต๋๋ค.
Raft ์๊ฐ: ํฉ์์ ๋ํ ์ดํด ๊ฐ๋ฅํ ์ ๊ทผ ๋ฐฉ์
Raft๋ ํ๊ณ์์ ๋ช ํํ ๋ชฉํ๋ฅผ ๊ฐ์ง๊ณ ๋ฑ์ฅํ์ต๋๋ค. ๋ถ์ฐ ํฉ์๋ฅผ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๋๋ก ํ๋ ๊ฒ์ ๋๋ค. ์ ์์ธ Diego Ongaro์ John Ousterhout๋ Raft๋ฅผ ์ดํด ๊ฐ๋ฅ์ฑ์ ์ค์ ์ ๋๊ณ ๋ช ์์ ์ผ๋ก ์ค๊ณํ์ผ๋ฉฐ, ํฉ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ ๋์ ์ฑํ๊ณผ ์ฌ๋ฐ๋ฅธ ๊ตฌํ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ์ต๋๋ค.
Raft์ ํต์ฌ ์ค๊ณ ์ฒ ํ: ์ดํด ๊ฐ๋ฅ์ฑ ์ฐ์
Raft๋ ํฉ์์ ๋ณต์กํ ๋ฌธ์ ๋ฅผ ๋น๊ต์ ๋ ๋ฆฝ์ ์ธ ์ฌ๋ฌ ํ์ ๋ฌธ์ ๋ก ๋ถํดํ๋ฉฐ, ๊ฐ ํ์ ๋ฌธ์ ๋ ๊ณ ์ ํ ๊ท์น๊ณผ ๋์ ์ธํธ๋ฅผ ๊ฐ์ง๋๋ค. ์ด ๋ชจ๋์ฑ์ ์ดํด๋ฅผ ํฌ๊ฒ ๋์ต๋๋ค. ์ฃผ์ ์ค๊ณ ์์น์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ฆฌ๋ ์ค์ฌ ์ ๊ทผ ๋ฐฉ์: ๋ชจ๋ ๋ ธ๋๊ฐ ์์ฌ ๊ฒฐ์ ์ ๋๋ฑํ๊ฒ ์ฐธ์ฌํ๋ ๋ค๋ฅธ ํฉ์ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋ฌ๋ฆฌ, Raft๋ ๋จ์ผ ๋ฆฌ๋๋ฅผ ์ง์ ํฉ๋๋ค. ๋ฆฌ๋๋ ๋ณต์ ๋ ๋ก๊ทธ๋ฅผ ๊ด๋ฆฌํ๊ณ ๋ชจ๋ ํด๋ผ์ด์ธํธ ์์ฒญ์ ์กฐ์ ํ๋ ์ฑ ์์ด ์์ต๋๋ค. ์ด๋ ๋ก๊ทธ ๊ด๋ฆฌ๋ฅผ ๋จ์ํํ๊ณ ๋ ธ๋ ๊ฐ์ ์ํธ ์์ฉ ๋ณต์ก์ฑ์ ์ค์ ๋๋ค.
- ๊ฐ๋ ฅํ ๋ฆฌ๋: ๋ฆฌ๋๋ ์๋ก์ด ๋ก๊ทธ ํญ๋ชฉ์ ์ ์ํ๊ณ ์ปค๋ฐ ์์ ์ ๊ฒฐ์ ํ๋ ๊ถ๊ทน์ ์ธ ๊ถ์์์ ๋๋ค. ํ๋ก์๋ ์๋์ผ๋ก ๋ฆฌ๋์ ๋ก๊ทธ๋ฅผ ๋ณต์ ํ๊ณ ๋ฆฌ๋์ ์์ฒญ์ ์๋ตํฉ๋๋ค.
- ๊ฒฐ์ ๋ก ์ ์ ์ถ: Raft๋ ๋ฌด์์ ์ ์ถ ํ์์์์ ์ฌ์ฉํ์ฌ ์ฃผ์ด์ง ์ ์ถ ๊ธฐ๊ฐ์ ์ผ๋ฐ์ ์ผ๋ก ํ๋์ ํ๋ณด๋ง ๋ฆฌ๋๋ก ๋ถ์ํ๋๋ก ํฉ๋๋ค.
- ๋ก๊ทธ ์ผ๊ด์ฑ: Raft๋ ๋ณต์ ๋ ๋ก๊ทธ์ ๋ํ ๊ฐ๋ ฅํ ์ผ๊ด์ฑ ์์ฑ์ ๊ฐ์ ํ์ฌ ์ปค๋ฐ๋ ํญ๋ชฉ์ด ๋กค๋ฐฑ๋์ง ์์ผ๋ฉฐ ๋ชจ๋ ์ปค๋ฐ๋ ํญ๋ชฉ์ด ๊ฒฐ๊ตญ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ๋ ธ๋์ ๋ํ๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
Paxos์์ ๊ฐ๋ตํ ๋น๊ต
Raft ์ด์ ์๋ Paxos๊ฐ ๋ถ์ฐ ํฉ์์ ์ฌ์ค์ ํ์ค์ด์์ต๋๋ค. ๊ฐ๋ ฅํ์ง๋ง Paxos๋ ์ดํดํ๊ณ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌํํ๊ธฐ๊ฐ ๋งค์ฐ ์ด๋ ต์ต๋๋ค. ์ญํ (์ ์์, ์๋ฝ์, ํ์ต์)์ ๋ถ๋ฆฌํ๊ณ ๋์์ ์ฌ๋ฌ ๋ฆฌ๋๊ฐ ์กด์ฌํ ์ ์๋๋ก ํ๋(๋จ, ํ๋์ ๋ฆฌ๋๋ง ๊ฐ์ ์ปค๋ฐํ ์ ์์) ์ค๊ณ๋ ๋ณต์กํ ์ํธ ์์ฉ๊ณผ ์ฃ์ง ์ผ์ด์ค๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค.
๋์กฐ์ ์ผ๋ก Raft๋ ์ํ ๊ณต๊ฐ์ ๋จ์ํํฉ๋๋ค. ๋ฆฌ๋๊ฐ ๋ชจ๋ ๋ก๊ทธ ๋ณ๊ฒฝ์ ์ฑ ์์ด ์๋ ๊ฐ๋ ฅํ ๋ฆฌ๋ ๋ชจ๋ธ์ ๊ฐ์ ํฉ๋๋ค. ์ญํ ์ ๋ช ํํ๊ฒ ์ ์(๋ฆฌ๋, ํ๋ก์, ํ๋ณด)ํ๊ณ ๊ทธ ์ฌ์ด์ ์ ํ์ ์ ์ํฉ๋๋ค. ์ด ๊ตฌ์กฐ๋ Raft์ ๋์์ ๋ ์ง๊ด์ ์ด๊ณ ์ถ๋ก ํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค์ด ๊ตฌํ ๋ฒ๊ทธ๋ฅผ ์ค์ด๊ณ ๊ฐ๋ฐ ์ฃผ๊ธฐ๋ฅผ ๋จ์ถํฉ๋๋ค. ์ฒ์์ Paxos๋ก ์ด๋ ค์์ ๊ฒช์๋ ๋ง์ ์ค์ ์์คํ ์ด Raft๋ฅผ ์ฑํํจ์ผ๋ก์จ ์ฑ๊ณต์ ๊ฑฐ๋์์ต๋๋ค.
Raft์ ์ธ ๊ฐ์ง ๊ธฐ๋ณธ ์ญํ
์ธ์ ๋ ์ง Raft ํด๋ฌ์คํฐ์ ๊ฐ ์๋ฒ๋ ๋ฆฌ๋, ํ๋ก์ ๋๋ ํ๋ณด์ ์ธ ๊ฐ์ง ์ํ ์ค ํ๋์ ์์ต๋๋ค. ์ด๋ฌํ ์ญํ ์ ๋ฐฐํ์ ์ด๊ณ ๋์ ์ด๋ฉฐ, ์๋ฒ๋ ํน์ ๊ท์น๊ณผ ์ด๋ฒคํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ํํฉ๋๋ค.
1. ํ๋ก์
- ์๋์ ์ญํ : ํ๋ก์๋ Raft์์ ๊ฐ์ฅ ์๋์ ์ธ ์ํ์ ๋๋ค. ๋ฆฌ๋ ๋ฐ ํ๋ณด๋ก๋ถํฐ์ ์์ฒญ์ ๋จ์ํ ์๋ตํฉ๋๋ค.
-
ํํธ๋นํธ ์์ : ํ๋ก์๋ ์ ๊ธฐ์ ์ผ๋ก ๋ฆฌ๋๋ก๋ถํฐ ํํธ๋นํธ(๋น AppendEntries RPC)๋ฅผ ์์ ํ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค. ํ๋ก์๊ฐ ํน์
election timeout๊ธฐ๊ฐ ๋ด์ ํํธ๋นํธ ๋๋ AppendEntries RPC๋ฅผ ์์ ํ์ง ๋ชปํ๋ฉด ๋ฆฌ๋๊ฐ ์คํจํ๋ค๊ณ ๊ฐ์ ํ๊ณ ํ๋ณด ์ํ๋ก ์ ํํฉ๋๋ค. - ํฌํ: ์ ๊ฑฐ ๊ธฐ๊ฐ ๋์ ํ๋ก์๋ ๊ธฐ๊ฐ๋น ์ต๋ ํ ๋ช ์ ํ๋ณด์๊ฒ ํฌํํฉ๋๋ค.
- ๋ก๊ทธ ๋ณต์ : ํ๋ก์๋ ๋ฆฌ๋์ ์ง์์ ๋ฐ๋ผ ๋ก์ปฌ ๋ก๊ทธ์ ๋ก๊ทธ ํญ๋ชฉ์ ์ถ๊ฐํฉ๋๋ค.
2. ํ๋ณด
- ์ ๊ฑฐ ์์: ํ๋ก์๊ฐ ํ์์์(๋ฆฌ๋๋ก๋ถํฐ ์์์ ๋ฃ์ง ๋ชปํจ)๋๋ฉด ์๋ก์ด ์ ๊ฑฐ๋ฅผ ์์ํ๊ธฐ ์ํด ํ๋ณด ์ํ๋ก ์ ํํฉ๋๋ค.
-
์์ฒด ํฌํ: ํ๋ณด๋
current term์ ์ฆ๊ฐ์ํค๊ณ , ์์ ์๊ฒ ํฌํํ๋ฉฐ, ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋ค๋ฅธ ์๋ฒ์RequestVoteRPC๋ฅผ ๋ณด๋ ๋๋ค. - ์ ๊ฑฐ ์น๋ฆฌ: ํ๋ณด๊ฐ ๋์ผํ ๊ธฐ๊ฐ์ ํด๋ฌ์คํฐ ์๋ฒ ๊ณผ๋ฐ์๋ก๋ถํฐ ํฌํ๋ฅผ ๋ฐ์ผ๋ฉด ๋ฆฌ๋ ์ํ๋ก ์ ํํฉ๋๋ค.
- ๋จ๊ณ์ ์ถ์: ํ๋ณด๊ฐ ๋ ๋์ ๊ธฐ๊ฐ์ ๊ฐ์ง ๋ค๋ฅธ ์๋ฒ๋ฅผ ๋ฐ๊ฒฌํ๊ฑฐ๋ ํฉ๋ฒ์ ์ธ ๋ฆฌ๋๋ก๋ถํฐ AppendEntries RPC๋ฅผ ๋ฐ์ผ๋ฉด ํ๋ก์ ์ํ๋ก ๋๋์๊ฐ๋๋ค.
3. ๋ฆฌ๋
- ์ ์ผํ ๊ถ์: ์ฃผ์ด์ง ๊ธฐ๊ฐ์ Raft ํด๋ฌ์คํฐ์๋ ํ ๋ฒ์ ๋จ ํ๋์ ๋ฆฌ๋๋ง ์์ต๋๋ค. ๋ฆฌ๋๋ ๋ชจ๋ ํด๋ผ์ด์ธํธ ์ํธ ์์ฉ, ๋ก๊ทธ ๋ณต์ ๋ฐ ์ผ๊ด์ฑ ๋ณด์ฅ์ ์ฑ ์์ด ์์ต๋๋ค.
-
ํํธ๋นํธ ์ ์ก: ๋ฆฌ๋๋ ๋ฆฌ๋์ญ์ ์ ์งํ๊ณ ์๋ก์ด ์ ๊ฑฐ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฃผ๊ธฐ์ ์ผ๋ก ๋ชจ๋ ํ๋ก์์๊ฒ
AppendEntriesRPC(ํํธ๋นํธ)๋ฅผ ๋ณด๋ ๋๋ค. - ๋ก๊ทธ ๊ด๋ฆฌ: ๋ฆฌ๋๋ ํด๋ผ์ด์ธํธ ์์ฒญ์ ์๋ฝํ๊ณ , ๋ก์ปฌ ๋ก๊ทธ์ ์๋ก์ด ๋ก๊ทธ ํญ๋ชฉ์ ์ถ๊ฐํ ๋ค์, ์ด๋ฌํ ํญ๋ชฉ์ ๋ชจ๋ ํ๋ก์์๊ฒ ๋ณต์ ํฉ๋๋ค.
- ์ปค๋ฐ: ๋ฆฌ๋๋ ํญ๋ชฉ์ด ๊ณผ๋ฐ์ ์๋ฒ์ ์์ ํ๊ฒ ๋ณต์ ๋์ด ์ํ ๋จธ์ ์ ์ปค๋ฐ๋ ์ ์๋ค๊ณ ๊ฒฐ์ ํฉ๋๋ค.
-
๋จ๊ณ์ ์ถ์: ๋ฆฌ๋๊ฐ ๋ ๋์
term์ ๊ฐ์ง ์๋ฒ๋ฅผ ๋ฐ๊ฒฌํ๋ฉด ์ฆ์ ๋จ๊ณ์ ์ถ์ํ๊ณ ํ๋ก์๋ก ๋๋์๊ฐ๋๋ค. ์ด๋ ์์คํ ์ด ํญ์ ๊ฐ์ฅ ๋์ ์๋ ค์ง ๊ธฐ๊ฐ์ผ๋ก ์งํ๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
Raft์ ์ด์ ๋จ๊ณ: ์์ธํ ์ํฌ์ค๋ฃจ
Raft๋ ๋ฆฌ๋ ์ ์ถ๊ณผ ๋ก๊ทธ ๋ณต์ ์ ์ง์์ ์ธ ์ฃผ๊ธฐ๋ฅผ ํตํด ์ด์๋ฉ๋๋ค. ์ด ๋ ๊ฐ์ง ์ฃผ์ ๋ฉ์ปค๋์ฆ๊ณผ ์ค์ํ ์์ ์์ฑ์ด ํด๋ฌ์คํฐ๊ฐ ์ผ๊ด์ฑ๊ณผ ๋ด๊ฒฐํจ์ฑ์ ์ ์งํ๋๋ก ๋ณด์ฅํฉ๋๋ค.
1. ๋ฆฌ๋ ์ ์ถ
๋ฆฌ๋ ์ ์ถ ํ๋ก์ธ์ค๋ Raft ์ด์์ ๊ธฐ์ด์ด๋ฉฐ, ํด๋ฌ์คํฐ์ ํญ์ ์์ ์ ์กฐ์ ํ ๋จ์ผ ๊ถ์ ์๋ ๋ ธ๋๊ฐ ์๋๋ก ๋ณด์ฅํฉ๋๋ค.
-
์ ๊ฑฐ ํ์์์: ๊ฐ ํ๋ก์๋ ๋ฌด์์
election timeout(์ผ๋ฐ์ ์ผ๋ก 150-300ms)์ ์ ์งํฉ๋๋ค. ํ๋ก์๊ฐ ํ์ฌ ๋ฆฌ๋๋ก๋ถํฐ ์ด ํ์์์ ๊ธฐ๊ฐ ๋ด์ ํต์ (ํํธ๋นํธ ๋๋ AppendEntries RPC)์ ์์ ํ์ง ๋ชปํ๋ฉด ๋ฆฌ๋๊ฐ ์คํจํ๊ฑฐ๋ ๋คํธ์ํฌ ๋ถํ ์ด ๋ฐ์ํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. -
ํ๋ณด๋ก ์ ํ: ํ์์์ ์ ํ๋ก์๋
Candidate์ํ๋ก ์ ํํฉ๋๋ค.current term์ ์ฆ๊ฐ์ํค๊ณ , ์์ ์๊ฒ ํฌํํ๋ฉฐ, ์ ๊ฑฐ ํ์ด๋จธ๋ฅผ ์ฌ์ค์ ํฉ๋๋ค. -
RequestVote RPC: ํ๋ณด๋ ํด๋ฌ์คํฐ์ ๋ค๋ฅธ ๋ชจ๋ ์๋ฒ์
RequestVoteRPC๋ฅผ ๋ณด๋ ๋๋ค. ์ด RPC์๋ ํ๋ณด์current term,candidateId๋ฐlast log index๋ฐlast log term์ ๋ํ ์ ๋ณด๊ฐ ํฌํจ๋ฉ๋๋ค(์์ ์ ์ํด ์ ์ด๊ฒ์ด ์ค์ํ์ง๋ ๋์ค์ ์ค๋ช ). -
ํฌํ ๊ท์น: ์๋ฒ๋ ๋ค์ ์กฐ๊ฑด ์ค ํ๋๋ผ๋ ์ถฉ์กฑํ๋ฉด ํ๋ณด์๊ฒ ํฌํ๋ฅผ ๋ถ์ฌํฉ๋๋ค.
-
ํด๋น
current term์ด ํ๋ณด์ ๊ธฐ๊ฐ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ต๋๋ค. - ํ์ฌ ๊ธฐ๊ฐ์ ๋ค๋ฅธ ํ๋ณด์๊ฒ ์์ง ํฌํํ์ง ์์์ต๋๋ค.
-
ํ๋ณด์ ๋ก๊ทธ๊ฐ ์์ฒด ๋ก๊ทธ๋งํผ ์ต์ ์
๋๋ค. ์ด๋
last log term์ ๋จผ์ ๋น๊ตํ ๋ค์, ๊ธฐ๊ฐ์ด ๊ฐ์ผ๋ฉดlast log index๋ฅผ ๋น๊ตํ์ฌ ๊ฒฐ์ ๋ฉ๋๋ค. ํ๋ณด๋ ์ ๊ถ์์ ๋ก๊ทธ๊ฐ ํฌํจํ๋ ๋ชจ๋ ์ปค๋ฐ๋ ํญ๋ชฉ์ ํฌํจํ๋ ๊ฒฝ์ฐ '์ต์ '์ ๋๋ค. ์ด๋ ์ ๊ฑฐ ์ ํ์ด๋ผ๊ณ ํ๋ฉฐ ์์ ์ ์ํด ์ค์ํฉ๋๋ค.
-
ํด๋น
-
์ ๊ฑฐ ์น๋ฆฌ: ํ๋ณด๊ฐ ๋์ผํ ๊ธฐ๊ฐ์ ํด๋ฌ์คํฐ ์๋ฒ ๊ณผ๋ฐ์๋ก๋ถํฐ ํฌํ๋ฅผ ๋ฐ์ผ๋ฉด ์๋ก์ด ๋ฆฌ๋๊ฐ ๋ฉ๋๋ค. ์ ์ถ๋๋ฉด ์๋ก์ด ๋ฆฌ๋๋ ์ฆ์ ๋ค๋ฅธ ๋ชจ๋ ์๋ฒ์
AppendEntriesRPC(ํํธ๋นํธ)๋ฅผ ๋ณด๋ด ๋ฆฌ๋์ญ์ ํ๋ฆฝํ๊ณ ์๋ก์ด ์ ๊ฑฐ๋ฅผ ๋ฐฉ์งํฉ๋๋ค. - ๋ถํ ํฌํ ๋ฐ ์ฌ์๋: ์ฌ๋ฌ ํ๋ณด๊ฐ ๋์์ ๋ฐ์ํ์ฌ ์ด๋ ํ๋ณด๋ ๊ณผ๋ฐ์๋ฅผ ์ป์ง ๋ชปํ๋ ๋ถํ ํฌํ๋ก ์ด์ด์ง ์ ์์ต๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ฐ ํ๋ณด๋ ๋ฌด์์ ์ ์ถ ํ์์์์ ๊ฐ์ง๋๋ค. ํ๋ณด์ ํ์์์์ด ์ ๊ฑฐ์์ ์น๋ฆฌํ๊ฑฐ๋ ์๋ก์ด ๋ฆฌ๋๋ก๋ถํฐ ์์์ ๋ฃ์ง ๋ชปํ๊ณ ๋ง๋ฃ๋๋ฉด, ๊ธฐ๊ฐ์ ์ฆ๊ฐ์ํค๊ณ ์๋ก์ด ์ ๊ฑฐ๋ฅผ ์์ํฉ๋๋ค. ๋ฌด์์ํ๋ ๋ถํ ํฌํ๊ฐ ๋๋ฌผ๊ณ ์ ์ํ๊ฒ ํด๊ฒฐ๋๋๋ก ํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
-
๋ ๋์ ๊ธฐ๊ฐ ๋ฐ๊ฒฌ: ํ๋ณด(๋๋ ๋ชจ๋ ์๋ฒ)๊ฐ ์์ ์
current term๋ณด๋ค ๋์term์ ๊ฐ์ง RPC๋ฅผ ์์ ํ๋ฉด ์ฆ์current term์ ๋ ๋์ ๊ฐ์ผ๋ก ์ ๋ฐ์ดํธํ๊ณfollower์ํ๋ก ๋๋์๊ฐ๋๋ค. ์ด๋ ์ค๋๋ ์ ๋ณด๋ฅผ ๊ฐ์ง ์๋ฒ๊ฐ ๋ฆฌ๋๊ฐ ๋๋ ค๊ณ ์๋ํ๊ฑฐ๋ ํฉ๋ฒ์ ์ธ ๋ฆฌ๋๋ฅผ ๋ฐฉํดํ์ง ์๋๋ก ๋ณด์ฅํฉ๋๋ค.
2. ๋ก๊ทธ ๋ณต์
๋ฆฌ๋๊ฐ ์ ์ถ๋๋ฉด ์ฃผ์ ์ฑ ์์ ๋ณต์ ๋ ๋ก๊ทธ๋ฅผ ๊ด๋ฆฌํ๊ณ ํด๋ฌ์คํฐ ์ ๋ฐ์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๋ ๊ฒ์ ๋๋ค. ์ฌ๊ธฐ์๋ ํด๋ผ์ด์ธํธ ๋ช ๋ น ์๋ฝ, ๋ก๊ทธ์ ์ถ๊ฐ, ํ๋ก์์๊ฒ ๋ณต์ ๊ฐ ํฌํจ๋ฉ๋๋ค.
- ํด๋ผ์ด์ธํธ ์์ฒญ: ๋ชจ๋ ํด๋ผ์ด์ธํธ ์์ฒญ(์ํ ๋จธ์ ์์ ์คํ๋ ๋ช ๋ น)์ ๋ฆฌ๋์๊ฒ ์ ๋ฌ๋ฉ๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ ํ๋ก์์๊ฒ ์ฐ๋ฝํ๋ฉด ํ๋ก์๋ ๋ฆฌ๋์๊ฒ ์์ฒญ์ ์ ๋ฌํฉ๋๋ค.
-
๋ฆฌ๋ ๋ก๊ทธ์ ์ถ๊ฐ: ๋ฆฌ๋๊ฐ ํด๋ผ์ด์ธํธ ๋ช
๋ น์ ๋ฐ์ผ๋ฉด ๋ช
๋ น์ ๋ก์ปฌ ๋ก๊ทธ์ ์
log entry๋ก ์ถ๊ฐํฉ๋๋ค. ๊ฐ ๋ก๊ทธ ํญ๋ชฉ์๋ ์์ฒด ๋ช ๋ น, ์์ ๋term๋ฐlog index๊ฐ ํฌํจ๋ฉ๋๋ค. -
AppendEntries RPC: ๋ฆฌ๋๋ ๋ชจ๋ ํ๋ก์์๊ฒ
AppendEntriesRPC๋ฅผ ๋ณด๋ด ์ ๋ก๊ทธ ํญ๋ชฉ(๋๋ ํญ๋ชฉ ๋ฐฐ์น)์ ๋ก๊ทธ์ ์ถ๊ฐํ๋๋ก ์์ฒญํฉ๋๋ค. ์ด๋ฌํ RPC์๋ ๋ค์์ด ํฌํจ๋ฉ๋๋ค.-
term: ๋ฆฌ๋์ ํ์ฌ ๊ธฐ๊ฐ. -
leaderId: ๋ฆฌ๋์ ID(ํ๋ก์๊ฐ ํด๋ผ์ด์ธํธ๋ฅผ ๋ฆฌ๋๋ ์ ํ๊ธฐ ์ํจ). -
prevLogIndex: ์ ํญ๋ชฉ ๋ฐ๋ก ์์ ๋ก๊ทธ ํญ๋ชฉ์ ์ธ๋ฑ์ค. -
prevLogTerm:prevLogIndexํญ๋ชฉ์ ๊ธฐ๊ฐ. ์ด ๋ ๊ฐ์ง(prevLogIndex,prevLogTerm)๋ ๋ก๊ทธ ์ผ์น ์์ฑ์ ์ค์ํฉ๋๋ค. -
entries[]: ์ ์ฅํ ๋ก๊ทธ ํญ๋ชฉ(ํํธ๋นํธ์ ๊ฒฝ์ฐ ๋น์ด ์์). -
leaderCommit: ๋ฆฌ๋์commitIndex(์ปค๋ฐ๋ ๊ฒ์ผ๋ก ์๋ ค์ง ๊ฐ์ฅ ๋์ ๋ก๊ทธ ํญ๋ชฉ์ ์ธ๋ฑ์ค).
-
-
์ผ๊ด์ฑ ๊ฒ์ฌ (๋ก๊ทธ ์ผ์น ์์ฑ): ํ๋ก์๊ฐ
AppendEntriesRPC๋ฅผ ์์ ํ๋ฉด ์ผ๊ด์ฑ ๊ฒ์ฌ๋ฅผ ์ํํฉ๋๋ค.prevLogIndex์prevLogTerm๊ณผ ์ผ์นํ๋ ๊ธฐ๊ฐ์ ๊ฐ์ง ํญ๋ชฉ์ด ์๋์ง ์์ ์ ๋ก๊ทธ์์ ํ์ธํฉ๋๋ค. ์ด ๊ฒ์ฌ๊ฐ ์คํจํ๋ฉด ํ๋ก์๋AppendEntriesRPC๋ฅผ ๊ฑฐ๋ถํ๊ณ ๋ก๊ทธ๊ฐ ์ผ๊ด๋์ง ์์์ ๋ฆฌ๋์๊ฒ ์๋ฆฝ๋๋ค. -
๋ถ์ผ์น ํด๊ฒฐ: ํ๋ก์๊ฐ
AppendEntriesRPC๋ฅผ ๊ฑฐ๋ถํ๋ฉด ๋ฆฌ๋๋ ํด๋น ํ๋ก์์nextIndex๋ฅผ ๊ฐ์์ํค๊ณAppendEntriesRPC๋ฅผ ๋ค์ ์๋ํฉ๋๋ค.nextIndex๋ ๋ฆฌ๋๊ฐ ํน์ ํ๋ก์์๊ฒ ๋ณด๋ผ ๋ค์ ๋ก๊ทธ ํญ๋ชฉ์ ์ธ๋ฑ์ค์ ๋๋ค. ์ด ํ๋ก์ธ์ค๋nextIndex๊ฐ ๋ฆฌ๋์ ํ๋ก์์ ๋ก๊ทธ๊ฐ ์ผ์นํ๋ ์ง์ ์ ๋๋ฌํ ๋๊น์ง ๊ณ์๋ฉ๋๋ค. ์ผ์น๊ฐ ๋ฐ๊ฒฌ๋๋ฉด ํ๋ก์๋ ํ์ ๋ก๊ทธ ํญ๋ชฉ์ ์๋ฝํ๊ณ ๊ฒฐ๊ตญ ๋ก๊ทธ๋ฅผ ๋ฆฌ๋์ ์ผ์น์ํฌ ์ ์์ต๋๋ค. -
ํญ๋ชฉ ์ปค๋ฐ: ํญ๋ชฉ์ ๋ฆฌ๋๊ฐ ๊ณผ๋ฐ์ ์๋ฒ(์์ ํฌํจ)์ ์ฑ๊ณต์ ์ผ๋ก ๋ณต์ ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋ ๋ ์ปค๋ฐ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. ์ปค๋ฐ๋๋ฉด ์ํ ๋จธ์ ์ ์ ์ฉ๋ ์ ์์ต๋๋ค. ๋ฆฌ๋๋
commitIndex๋ฅผ ์ ๋ฐ์ดํธํ๊ณ ์ด๋ฅผ ํ์AppendEntriesRPC์ ํฌํจํ์ฌ ์ปค๋ฐ๋ ํญ๋ชฉ์ ๋ํ ํ๋ก์์๊ฒ ์๋ฆฝ๋๋ค. ํ๋ก์๋ ๋ฆฌ๋์leaderCommit์ ๊ธฐ๋ฐ์ผ๋กcommitIndex๋ฅผ ์ ๋ฐ์ดํธํ๊ณ ํด๋น ์ธ๋ฑ์ค๊น์ง์ ํญ๋ชฉ์ ์ํ ๋จธ์ ์ ์ ์ฉํฉ๋๋ค. - ๋ฆฌ๋ ์์ ์ฑ ์์ฑ: Raft๋ ํน์ ๊ธฐ๊ฐ์ ์ปค๋ฐ๋ ๋ก๊ทธ ํญ๋ชฉ์ ๋ชจ๋ ํ์ ๋ฆฌ๋์๋ ํด๋น ํญ๋ชฉ์ด ํฌํจ๋ ๊ฒ์์ ๋ณด์ฅํฉ๋๋ค. ์ด ์์ฑ์ ์ปค๋ฐ๋ ๋ฐ์ดํฐ ์์ค์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ค์ํ๋ฉฐ, ์ฃผ๋ก ์ ๊ฑฐ ์ ํ์ ์ํด ๋ณด์ฅ๋ฉ๋๋ค. ์ด๋ ๋ฆฌ๋๊ฐ ์ปค๋ฐ๋ ํญ๋ชฉ์ ๋ฎ์ด์ฐ๊ฑฐ๋ ๋์น ์ ์๋ ๋ฆฌ๋๊ฐ ์ ์ถ๋๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
3. ์์ ์์ฑ ๋ฐ ๋ณด์ฆ
Raft์ ๊ฒฌ๊ณ ์ฑ์ ๋ถ์ผ์น์ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ๋ฐฉ์งํ๋ ๋ช ๊ฐ์ง ์ ์คํ๊ฒ ์ค๊ณ๋ ์์ ์์ฑ์์ ๋น๋กฏ๋ฉ๋๋ค.
- ์ ๊ฑฐ ์์ : ์ฃผ์ด์ง ๊ธฐ๊ฐ์ ์ต๋ ํ๋์ ๋ฆฌ๋๋ง ์ ์ถ๋ ์ ์์ต๋๋ค. ์ด๋ ํ๋ก์๊ฐ ๊ธฐ๊ฐ๋น ์ต๋ ํ ํ๋ง ๋ถ์ฌํ๊ณ ํ๋ณด๊ฐ ๊ณผ๋ฐ์ ํฌํ๋ฅผ ๋ฐ์์ผ ํ๋ ํฌํ ๋ฉ์ปค๋์ฆ์ ์ํด ๊ฐ์ ๋ฉ๋๋ค.
- ๋ฆฌ๋ ์์ ์ฑ: ๋ก๊ทธ ํญ๋ชฉ์ด ์ฃผ์ด์ง ๊ธฐ๊ฐ์ ์ปค๋ฐ๋ ๊ฒฝ์ฐ, ํด๋น ํญ๋ชฉ์ ๋ชจ๋ ํ์ ๋ฆฌ๋์ ๋ก๊ทธ์ ์กด์ฌํฉ๋๋ค. ์ด๋ ์ปค๋ฐ๋ ๋ฐ์ดํฐ ์์ค์ ๋ฐฉ์งํ๋ ๋ฐ ์ค์ํ๋ฉฐ, ์ฃผ๋ก ๋ฆฌ๋ ์์ ์ฑ ์์ฑ์ ์ํด ๋ณด์ฅ๋ฉ๋๋ค.
- ๋ก๊ทธ ์ผ์น ์์ฑ: ๋ ๋ก๊ทธ๊ฐ ๋์ผํ ์ธ๋ฑ์ค์ ๊ธฐ๊ฐ์ ๊ฐ์ง ํญ๋ชฉ์ ํฌํจํ๋ ๊ฒฝ์ฐ, ๋ ๋ก๊ทธ๋ ์ด์ ๋ชจ๋ ํญ๋ชฉ์์ ๋์ผํฉ๋๋ค. ์ด๋ ๋ก๊ทธ ์ผ๊ด์ฑ ๊ฒ์ฌ๋ฅผ ๋จ์ํํ๊ณ ๋ฆฌ๋๊ฐ ํ๋ก์์ ๋ก๊ทธ๋ฅผ ํจ์จ์ ์ผ๋ก ์ต์ ์ํ๋ก ๊ฐ์ ธ์ฌ ์ ์๋๋ก ํฉ๋๋ค.
- ์ปค๋ฐ ์์ : ํญ๋ชฉ์ด ์ปค๋ฐ๋๋ฉด ๊ฒฐ์ฝ ๋กค๋ฐฑ๋๊ฑฐ๋ ๋ฎ์ด์ฐ์ด์ง ์์ต๋๋ค. ์ด๋ ๋ฆฌ๋ ์์ ์ฑ ๋ฐ ๋ก๊ทธ ์ผ์น ์์ฑ์ ์ง์ ์ ์ธ ๊ฒฐ๊ณผ์ ๋๋ค. ํญ๋ชฉ์ด ์ปค๋ฐ๋๋ฉด ์๊ตฌ์ ์ผ๋ก ์ ์ฅ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
Raft์ ์ฃผ์ ๊ฐ๋ ๋ฐ ๋ฉ์ปค๋์ฆ
์ญํ ๊ณผ ์ด์ ๋จ๊ณ๋ฅผ ๋์ด Raft๋ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ณ ์ ํ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ๋ช ๊ฐ์ง ํต์ฌ ๊ฐ๋ ์ ์์กดํฉ๋๋ค.
1. ๊ธฐ๊ฐ (Terms)
Raft์ term์ ์ง์์ ์ผ๋ก ์ฆ๊ฐํ๋ ์ ์์
๋๋ค. ์ด๋ ํด๋ฌ์คํฐ์ ๋
ผ๋ฆฌ์ ์๊ณ ์ญํ ์ ํฉ๋๋ค. ๊ฐ ๊ธฐ๊ฐ์ ์ ๊ฑฐ๋ก ์์๋๋ฉฐ, ์ ๊ฑฐ๊ฐ ์ฑ๊ณตํ๋ฉด ํด๋น ๊ธฐ๊ฐ ๋์ ๋จ์ผ ๋ฆฌ๋๊ฐ ์ ์ถ๋ฉ๋๋ค. ๊ธฐ๊ฐ์ ์ค๋๋ ์ ๋ณด๋ฅผ ์๋ณํ๊ณ ์๋ฒ๊ฐ ํญ์ ์ต์ ์ ๋ณด์ ์ฐ์ ํ๋๋ก ํ๋ ๋ฐ ์ค์ํฉ๋๋ค.
-
์๋ฒ๋ ๋ชจ๋ RPC์์
current term์ ๊ตํํฉ๋๋ค. -
์๋ฒ๊ฐ ๋ค๋ฅธ ์๋ฒ๋ณด๋ค ๋ ๋์
term์ ๋ฐ๊ฒฌํ๋ฉด ์์ ์current term์ ์ ๋ฐ์ดํธํ๊ณfollower์ํ๋ก ๋๋์๊ฐ๋๋ค. -
ํ๋ณด ๋๋ ๋ฆฌ๋๊ฐ ์์ ์
term์ด ์ค๋๋์์์ ๋ฐ๊ฒฌํ๋ฉด(๋ค๋ฅธ ์๋ฒ์term๋ณด๋ค ๋ฎ์) ์ฆ์ ๋จ๊ณ์ ์ถ์ํฉ๋๋ค.
2. ๋ก๊ทธ ํญ๋ชฉ (Log Entries)
log๋ Raft์ ํต์ฌ ๊ตฌ์ฑ ์์์
๋๋ค. ์ด๋ ์ํ ๋จธ์ ์์ ์คํ๋ ๋ช
๋ น์ ๋ํ๋ด๋ ํญ๋ชฉ์ ์ ๋ ฌ๋ ์์์
๋๋ค. ๊ฐ log entry์๋ ๋ค์์ด ํฌํจ๋ฉ๋๋ค.
- ๋ช ๋ น: ์ํํ ์ค์ ์์ (์: "x=5 ์ค์ ", "์ฌ์ฉ์ ์์ฑ").
- Term: ํญ๋ชฉ์ด ๋ฆฌ๋์์ ์์ฑ๋ ๊ธฐ๊ฐ.
- Index: ๋ก๊ทธ์์์ ์์น. ๋ก๊ทธ ํญ๋ชฉ์ ์ธ๋ฑ์ค์ ์ํด ์๊ฒฉํ๊ฒ ์ ๋ ฌ๋ฉ๋๋ค.
๋ก๊ทธ๋ ์ง์์ ์ด์ด์ ์ถฉ๋ ์ค ๋ฐ์ดํฐ ์์ค์ ๋ฐฉ์งํ๊ธฐ ์ํด ํด๋ผ์ด์ธํธ์ ์๋ตํ๊ธฐ ์ ์ ํญ๋ชฉ์ด ์์ ์ ์ธ ์ ์ฅ์์ ๊ธฐ๋ก๋ฉ๋๋ค.
3. ์ํ ๋จธ์ (State Machine)
Raft ํด๋ฌ์คํฐ์ ๋ชจ๋ ์๋ฒ๋ state machine์ ์ ์งํฉ๋๋ค. ์ด๋ ์ปค๋ฐ๋ ๋ก๊ทธ ํญ๋ชฉ์ ์ฒ๋ฆฌํ๋ ์ ํ๋ฆฌ์ผ์ด์
๋ณ ๊ตฌ์ฑ ์์์
๋๋ค. ์ผ๊ด์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ์ํ ๋จธ์ ์ ๊ฒฐ์ ๋ก ์ ์ด์ด์ผ ํฉ๋๋ค(๋์ผํ ์ด๊ธฐ ์ํ์ ๋ช
๋ น ์ํ์ค๊ฐ ์ฃผ์ด์ง๋ฉด ํญ์ ๋์ผํ ์ถ๋ ฅ๊ณผ ์ต์ข
์ํ๋ฅผ ์์ฑํจ). ๋ํ ๋ฉฑ๋ฑ์ฑ์ด ์์ด์ผ ํฉ๋๋ค(๋์ผํ ๋ช
๋ น์ ์ฌ๋ฌ ๋ฒ ์ ์ฉํ๋ ๊ฒ์ ํ ๋ฒ ์ ์ฉํ๋ ๊ฒ๊ณผ ๋์ผํ ํจ๊ณผ๋ฅผ ๊ฐ์ง. ์ด๋ ์ฌ์๋๋ฅผ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ฐ ๋์์ด ๋์ง๋ง, Raft์ ๋ก๊ทธ ์ปค๋ฐ์ ๋จ์ผ ์ ์ฉ์ ํฌ๊ฒ ๋ณด์ฅํจ).
4. ์ปค๋ฐ ์ธ๋ฑ์ค (Commit Index)
commitIndex๋ ์ปค๋ฐ๋ ๊ฒ์ผ๋ก ์๋ ค์ง ๊ฐ์ฅ ๋์ ๋ก๊ทธ ํญ๋ชฉ ์ธ๋ฑ์ค์
๋๋ค. ์ด๋ ๊ณผ๋ฐ์ ์๋ฒ์ ์์ ํ๊ฒ ๋ณต์ ๋์ด ์ํ ๋จธ์ ์ ์ ์ฉ๋ ์ ์์์ ์๋ฏธํฉ๋๋ค. ๋ฆฌ๋๋ commitIndex๋ฅผ ๊ฒฐ์ ํ๊ณ ํ๋ก์๋ ๋ฆฌ๋์ AppendEntries RPC๋ฅผ ๊ธฐ๋ฐ์ผ๋ก commitIndex๋ฅผ ์
๋ฐ์ดํธํฉ๋๋ค. commitIndex๊น์ง์ ๋ชจ๋ ํญ๋ชฉ์ ์๊ตฌ์ ์ผ๋ก ๊ฐ์ฃผ๋๋ฉฐ ๋กค๋ฐฑ๋ ์ ์์ต๋๋ค.
5. ์ค๋ ์ท (Snapshots)
์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ณต์ ๋ ๋ก๊ทธ๊ฐ ๋งค์ฐ ์ปค์ ธ ์๋นํ ๋์คํฌ ๊ณต๊ฐ์ ์ฐจ์งํ๊ณ ๋ก๊ทธ ๋ณต์ ๋ฐ ๋ณต๊ตฌ๋ฅผ ๋๋ฆฌ๊ฒ ํ ์ ์์ต๋๋ค. Raft๋ snapshots๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ํด๊ฒฐํฉ๋๋ค. ์ค๋
์ท์ ํน์ ์์ ์ ์ํ ๋จธ์ ์ํ๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ํํํ ๊ฒ์
๋๋ค. ์ ์ฒด ๋ก๊ทธ๋ฅผ ์ ์งํ๋ ๋์ ์๋ฒ๋ ์ฃผ๊ธฐ์ ์ผ๋ก ์ํ๋ฅผ '์ค๋
์ท'ํ๊ณ , ์ค๋
์ท ์ง์ ๊น์ง์ ๋ชจ๋ ๋ก๊ทธ ํญ๋ชฉ์ ์ญ์ ํ ๋ค์, ์ค๋
์ท์ ์ ํ๋ก์ ๋๋ ์ง์ฐ๋ ํ๋ก์์๊ฒ ๋ณต์ ํ ์ ์์ต๋๋ค. ์ด ํ๋ก์ธ์ค๋ ํจ์จ์ฑ์ ํฌ๊ฒ ํฅ์์ํต๋๋ค.
- ๋ก๊ทธ ์์ถ: ์ง์์ ์ธ ๋ก๊ทธ ๋ฐ์ดํฐ ์์ ์ค์ ๋๋ค.
- ๋ ๋น ๋ฅธ ๋ณต๊ตฌ: ์๋กญ๊ฑฐ๋ ์ถฉ๋ํ ์๋ฒ๋ ์ฒ์๋ถํฐ ์ ์ฒด ๋ก๊ทธ๋ฅผ ๋ค์ ์ฌ์ํ๋ ๋์ ์ค๋ ์ท์ ๋ฐ์ ์ ์์ต๋๋ค.
-
InstallSnapshot RPC: Raft๋ ์ค๋
์ท์ ๋ฆฌ๋์์ ํ๋ก์๋ก ์ ์กํ๊ธฐ ์ํ
InstallSnapshotRPC๋ฅผ ์ ์ํฉ๋๋ค.
ํจ๊ณผ์ ์ด์ง๋ง ์ค๋ ์ท์ ๋์ ์ค๋ ์ท ์์ฑ, ๋ก๊ทธ ์ ๋จ ๋ฐ ์ ์ก ๊ด๋ฆฌ์์ ๊ตฌํ์ ๋ณต์ก์ฑ์ ๋ํฉ๋๋ค.
Raft ๊ตฌํ: ๊ธ๋ก๋ฒ ๋ฐฐํฌ๋ฅผ ์ํ ์ค์ง์ ์ธ ๊ณ ๋ ค ์ฌํญ
Raft์ ์ฐ์ํ ์ค๊ณ๋ฅผ ๊ฐ๋ ฅํ๊ณ ํ๋ก๋์ ์ค๋น๊ฐ ๋ ์์คํ ์ผ๋ก ๋ณํํ๋ ๊ฒ, ํนํ ์ ์ญ ๋์ ๋ฐ ๋ค์ํ ์ธํ๋ผ๋ฅผ ์ํด์๋ ๋ช ๊ฐ์ง ์ค์ง์ ์ธ ์์ง๋์ด๋ง ๊ณผ์ ๋ฅผ ํด๊ฒฐํด์ผ ํฉ๋๋ค.
1. ๊ธ๋ก๋ฒ ๋งฅ๋ฝ์์์ ๋คํธ์ํฌ ์ง์ฐ ๋ฐ ๋ถํ
์ ์ญ์ ์ผ๋ก ๋ถ์ฐ๋ ์์คํ ์ ๊ฒฝ์ฐ ๋คํธ์ํฌ ์ง์ฐ์ด ์ค์ํ ์์์ ๋๋ค. Raft ํด๋ฌ์คํฐ๋ ์ผ๋ฐ์ ์ผ๋ก ๋ก๊ทธ ํญ๋ชฉ์ ์ปค๋ฐํ๊ธฐ ์ ์ ํญ๋ชฉ์ ๋์ํ ๊ณผ๋ฐ์์ ๋ ธ๋๋ฅผ ํ์๋ก ํฉ๋๋ค. ๋๋ฅ์ ๊ฑธ์ณ ๋ถํฌ๋ ํด๋ฌ์คํฐ์์๋ ๋ ธ๋ ๊ฐ ์ง์ฐ ์๊ฐ์ด ์๋ฐฑ ๋ฐ๋ฆฌ์ด๊ฐ ๋ ์ ์์ต๋๋ค. ์ด๋ ๋ค์ ์ฌํญ์ ์ง์ ์ ์ธ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
- ์ปค๋ฐ ์ง์ฐ ์๊ฐ: ํด๋ผ์ด์ธํธ ์์ฒญ์ด ์ปค๋ฐ๋๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๊ณผ๋ฐ์ ๋ณต์ ๋ณธ์ ๋ํ ๊ฐ์ฅ ๋๋ฆฐ ๋คํธ์ํฌ ๋งํฌ๋ก ์ธํด ๋ณ๋ชฉ ํ์์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ์ฝ๊ธฐ ์ ์ฉ ํ๋ก์(ํญ์ ์ค๋๋ ์ฝ๊ธฐ์ ๋ํ ๋ฆฌ๋ ์ํธ ์์ฉ์ด ํ์ํ์ง ์์) ๋๋ ์ง๋ฆฌ์ ์ผ๋ก ์ธ์๋ ์ฟผ๋ผ ๊ตฌ์ฑ(์: 5๋ ธ๋ ํด๋ฌ์คํฐ์ 3๋ ธ๋, ๋ค๋ฅธ ์ง์ญ์ 2๋ ธ๋. ์ฌ๊ธฐ์ ๊ณผ๋ฐ์๋ ๋จ์ผ ๋น ๋ฅธ ์ง์ญ ๋ด์ ์์ ์ ์์)๊ณผ ๊ฐ์ ์ ๋ต์ด ์ด๋ฅผ ์ํํ ์ ์์ต๋๋ค.
-
๋ฆฌ๋ ์ ์ถ ์๋: ๋์ ์ง์ฐ ์๊ฐ์
RequestVoteRPC๋ฅผ ์ง์ฐ์์ผ ๋ ๋น๋ฒํ ๋ถํ ํฌํ ๋๋ ๋ ๊ธด ์ ์ถ ์๊ฐ์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค. ์ ์ถ ํ์์์์ ์ผ๋ฐ์ ์ธ ๋ ธ๊ฐ ์ง์ฐ ์๊ฐ๋ณด๋ค ํจ์ฌ ๋ ํฌ๊ฒ ์กฐ์ ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. - ๋คํธ์ํฌ ๋ถํ ์ฒ๋ฆฌ: ์ค์ ๋คํธ์ํฌ๋ ๋ถํ ์ ์ทจ์ฝํฉ๋๋ค. Raft๋ ๊ณผ๋ฐ์ ์๋ฒ๊ฐ ํฌํจ๋ ๋ถํ ๋ง ๋ฆฌ๋๋ฅผ ์ ์ถํ๊ณ ์งํํ ์ ์๋๋ก ํจ์ผ๋ก์จ ๋ถํ ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํฉ๋๋ค. ์์ ๋ถํ ์ ์ ํญ๋ชฉ์ ์ปค๋ฐํ ์ ์์ด ๋ถํ ๋๋ ์๋๋ฆฌ์ค๋ฅผ ๋ฐฉ์งํฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ธ๋ก๋ฒ ๋ฐฐํฌ์์์ ์ฅ๊ธฐ๊ฐ ๋ถํ ์ ํน์ ์ง์ญ์์ ๊ฐ์ฉ์ฑ ๋ถ์กฑ์ ์ด๋ํ ์ ์์ผ๋ฉฐ, ์ฟผ๋ผ ๋ฐฐ์น์ ๋ํ ์ ์คํ ์ํคํ ์ฒ ๊ฒฐ์ ์ด ํ์ํฉ๋๋ค.
2. ์๊ตฌ ์ ์ฅ์ ๋ฐ ๋ด๊ตฌ์ฑ
Raft์ ์ ํ์ฑ์ ๋ก๊ทธ ๋ฐ ์ํ์ ์๊ตฌ์ฑ์ ํฌ๊ฒ ์์กดํฉ๋๋ค. ์๋ฒ๊ฐ RPC์ ์๋ตํ๊ฑฐ๋ ์ํ ๋จธ์ ์ ํญ๋ชฉ์ ์ ์ฉํ๊ธฐ ์ ์ ๊ด๋ จ ๋ฐ์ดํฐ(๋ก๊ทธ ํญ๋ชฉ, current term, votedFor)๊ฐ ์์ ์ ์ธ ์ ์ฅ์์ ๊ธฐ๋ก๋๊ณ fsync'd(๋์คํฌ์ ํ๋ฌ์๋จ)๋์๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ์ด๋ ์ถฉ๋ ์ ๋ฐ์ดํฐ ์์ค์ ๋ฐฉ์งํฉ๋๋ค. ๊ณ ๋ ค ์ฌํญ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ฑ๋ฅ: ๋น๋ฒํ ๋์คํฌ ์ฐ๊ธฐ๋ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ด ๋ ์ ์์ต๋๋ค. ์ฐ๊ธฐ ์ผ๊ด ์ฒ๋ฆฌ ๋ฐ ๊ณ ์ฑ๋ฅ SSD ์ฌ์ฉ์ด ์ผ๋ฐ์ ์ธ ์ต์ ํ์ ๋๋ค.
- ์ ๋ขฐ์ฑ: ๊ฐ๋ ฅํ๊ณ ๋ด๊ตฌ์ฑ์ด ๋ฐ์ด๋ ์ ์ฅ์ ์๋ฃจ์ (๋ก์ปฌ ๋์คํฌ, ๋คํธ์ํฌ ์ฐ๊ฒฐ ์ ์ฅ์, ํด๋ผ์ฐ๋ ๋ธ๋ก ์ ์ฅ์)์ ์ ํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
- WAL (Write-Ahead Log): ์ข ์ข Raft ๊ตฌํ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฌํ๊ฒ WAL์ ์ฌ์ฉํ์ฌ ๋ด๊ตฌ์ฑ์ ํ๋ณดํ์ฌ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฉ๋๊ธฐ ์ ์ ๋์คํฌ์ ๊ธฐ๋ก๋๋๋ก ํฉ๋๋ค.
3. ํด๋ผ์ด์ธํธ ์ํธ ์์ฉ ๋ฐ ์ผ๊ด์ฑ ๋ชจ๋ธ
ํด๋ผ์ด์ธํธ๋ ๋ฆฌ๋์๊ฒ ์์ฒญ์ ๋ณด๋ด Raft ํด๋ฌ์คํฐ์ ์ํธ ์์ฉํฉ๋๋ค. ํด๋ผ์ด์ธํธ ์์ฒญ ์ฒ๋ฆฌ๋ ๋ค์์ ํฌํจํฉ๋๋ค.
- ๋ฆฌ๋ ๊ฒ์: ํด๋ผ์ด์ธํธ๋ ํ์ฌ ๋ฆฌ๋๋ฅผ ์ฐพ๊ธฐ ์ํ ๋ฉ์ปค๋์ฆ์ด ํ์ํฉ๋๋ค. ์ด๋ ์๋น์ค ๊ฒ์ ๋ฉ์ปค๋์ฆ, ๊ณ ์ ๋ ๋ฆฌ๋๋ ์ ์๋ํฌ์ธํธ ๋๋ ์๋ฒ๋ฅผ ์๋ํ์ฌ ์๋ตํ๋ ์๋ฒ๋ฅผ ์ฐพ์ ๋๊น์ง ์ํํ ์ ์์ต๋๋ค.
- ์์ฒญ ์ฌ์๋: ๋ฆฌ๋๊ฐ ๋ณ๊ฒฝ๋๊ฑฐ๋ ๋คํธ์ํฌ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ํด๋ผ์ด์ธํธ๋ ์์ฒญ์ ์ฌ์๋ํ ์ค๋น๊ฐ ๋์ด ์์ด์ผ ํฉ๋๋ค.
-
์ฝ๊ธฐ ์ผ๊ด์ฑ: Raft๋ ์ฃผ๋ก ์ฐ๊ธฐ์ ๋ํ ๊ฐ๋ ฅํ ์ผ๊ด์ฑ์ ๋ณด์ฅํฉ๋๋ค. ์ฝ๊ธฐ์ ๊ฒฝ์ฐ ์ฌ๋ฌ ๋ชจ๋ธ์ด ๊ฐ๋ฅํฉ๋๋ค.
- ๊ฐ๋ ฅํ๊ฒ ์ผ๊ด๋ ์ฝ๊ธฐ: ํด๋ผ์ด์ธํธ๋ ๋ฆฌ๋์๊ฒ ์ฝ๊ธฐ๋ฅผ ์ ๊ณตํ๊ธฐ ์ ์ ํ๋ก์ ๊ณผ๋ฐ์์๊ฒ ํํธ๋นํธ๋ฅผ ๋ณด๋ด ์ํ๊ฐ ์ต์ ์ธ์ง ํ์ธํ ์ ์์ต๋๋ค. ์ด๋ ์ ์ ๋๋ฅผ ๋ณด์ฅํ์ง๋ง ์ง์ฐ ์๊ฐ์ ์ถ๊ฐํฉ๋๋ค.
- ๋ฆฌ๋ ์๋ ์ฝ๊ธฐ: ๋ฆฌ๋๋ ์งง์ ๊ธฐ๊ฐ ๋์ ๊ณผ๋ฐ์ ๋ ธ๋๋ก๋ถํฐ '์๋'๋ฅผ ํ๋ํ ์ ์์ผ๋ฉฐ, ์ด ๊ธฐ๊ฐ ๋์์๋ ๋ ์ด์์ ํฉ์ ์์ด ์ฝ๊ธฐ๋ฅผ ์ ๊ณตํ ์ ์์์ ์๊ณ ์์ต๋๋ค. ์ด๋ ๋ ๋น ๋ฅด์ง๋ง ์๊ฐ ์ ํ์ด ์์ต๋๋ค.
- ์ค๋๋ ์ฝ๊ธฐ(ํ๋ก์๋ก๋ถํฐ): ํ๋ก์์์ ์ง์ ์ฝ๋ ๊ฒ์ ์ง์ฐ ์๊ฐ์ ์ค์ผ ์ ์์ง๋ง, ํ๋ก์์ ๋ก๊ทธ๊ฐ ๋ฆฌ๋๋ณด๋ค ๋ค๋จ์ด์ง๋ ๊ฒฝ์ฐ ์ค๋๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ํ์ด ์์ต๋๋ค. ์ด๋ ์ต์ข ์ผ๊ด์ฑ์ด ์ฝ๊ธฐ์ ์ถฉ๋ถํ ์ ํ๋ฆฌ์ผ์ด์ ์๋ ํ์ฉ๋ฉ๋๋ค.
4. ๊ตฌ์ฑ ๋ณ๊ฒฝ (ํด๋ฌ์คํฐ ๋ฉค๋ฒ์ญ)
Raft ํด๋ฌ์คํฐ์ ๋ฉค๋ฒ์ญ ๋ณ๊ฒฝ(์๋ฒ ์ถ๊ฐ ๋๋ ์ ๊ฑฐ)์ ์ผ๊ด์ฑ ๋๋ ๋ถํ ๋๋ ์๋๋ฆฌ์ค๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ํฉ์๋ฅผ ํตํด ์ํ๋์ด์ผ ํ๋ ๋ณต์กํ ์์ ์ ๋๋ค. Raft๋ Joint Consensus๋ผ๋ ๊ธฐ์ ์ ์ ์ํฉ๋๋ค.
- ๋ ๊ฐ์ง ๊ตฌ์ฑ: ๊ตฌ์ฑ ๋ณ๊ฒฝ ์ค์๋ ์์คํ ์ด ์์๋ก ๋ ๊ฐ์ ๊ฒน์น๋ ๊ตฌ์ฑ(๊ธฐ์กด ๊ตฌ์ฑ C_old ๋ฐ ์ ๊ตฌ์ฑ C_new)์ผ๋ก ์๋ํฉ๋๋ค.
- Joint Consensus ์ํ (C_old, C_new): ๋ฆฌ๋๋ ๊ณต๋ ๊ตฌ์ฑ์ ๋ํ๋ด๋ ํน์ ๋ก๊ทธ ํญ๋ชฉ์ ์ ์ํฉ๋๋ค. ์ด ํญ๋ชฉ์ด ์ปค๋ฐ๋๋ฉด(C_old ๋ฐ C_new ๋ชจ๋์์ ๊ณผ๋ฐ์ ๋์ ํ์), ์์คํ ์ ์ ํ ์ํ์ ์์ต๋๋ค. ์ด์ ์์ฌ ๊ฒฐ์ ์ ๋ ๊ตฌ์ฑ ๋ชจ๋์ ๊ณผ๋ฐ์๋ฅผ ์๊ตฌํฉ๋๋ค. ์ด๋ ์ ํ ์ค์ ์ด์ ๊ตฌ์ฑ ๋๋ ์ ๊ตฌ์ฑ์ด ๋จ๋ ์ผ๋ก ์์ฌ ๊ฒฐ์ ์ ๋ด๋ฆด ์ ์์ด ๋ถ์ผ์น๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
- C_new๋ก ์ ํ: ๊ณต๋ ๊ตฌ์ฑ ๋ก๊ทธ ํญ๋ชฉ์ด ์ปค๋ฐ๋๋ฉด ๋ฆฌ๋๋ ์ ๊ตฌ์ฑ(C_new)๋ง ๋ํ๋ด๋ ๋ค๋ฅธ ๋ก๊ทธ ํญ๋ชฉ์ ์ ์ํฉ๋๋ค. ์ด ๋ ๋ฒ์งธ ํญ๋ชฉ์ด ์ปค๋ฐ๋๋ฉด ์ด์ ๊ตฌ์ฑ์ ์ญ์ ๋๊ณ ์์คํ ์ C_new์ ๋ฐ๋ผ ์๋ํฉ๋๋ค.
- ์์ ์ฑ: ์ด 2๋จ๊ณ ์ปค๋ฐ๊ณผ ์ ์ฌํ ํ๋ก์ธ์ค๋ ์ด๋ ์์ ์์๋ ๋ ๊ฐ์ ์ถฉ๋ํ๋ ๋ฆฌ๋(C_old ํ์ ๋ฆฌ๋, C_new ํ์ ๋ฆฌ๋)๊ฐ ์ ์ถ๋ ์ ์์ผ๋ฉฐ, ๋ณ๊ฒฝ ์ค์ ์์คํ ์ด ๊ณ์ ์๋ํจ์ ๋ณด์ฅํฉ๋๋ค.
๊ตฌ์ฑ ๋ณ๊ฒฝ์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌํํ๋ ๊ฒ์ ์ ํ ์ํ ์ค ์๋ง์ ์ฃ์ง ์ผ์ด์ค์ ์ฅ์ ์๋๋ฆฌ์ค๋ก ์ธํด Raft ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ์์ ๊ฐ์ฅ ์ด๋ ค์ด ๋ถ๋ถ ์ค ํ๋์ ๋๋ค.
5. ๋ถ์ฐ ์์คํ ํ ์คํธ: ์๊ฒฉํ ์ ๊ทผ ๋ฐฉ์
Raft์ ๊ฐ์ ๋ถ์ฐ ํฉ์ ์๊ณ ๋ฆฌ์ฆ์ ํ ์คํธํ๋ ๊ฒ์ ๋น๊ฒฐ์ ๋ก ์ ํน์ฑ๊ณผ ์๋ง์ ์ฅ์ ๋ชจ๋๋ก ์ธํด ๋งค์ฐ ์ด๋ ต์ต๋๋ค. ๊ฐ๋จํ ๋จ์ ํ ์คํธ๋ก๋ ์ถฉ๋ถํ์ง ์์ต๋๋ค. ์๊ฒฉํ ํ ์คํธ์๋ ๋ค์์ด ํฌํจ๋ฉ๋๋ค.
- ์ฅ์ ์ฃผ์ : ๋ ธ๋ ์ถฉ๋, ๋คํธ์ํฌ ๋ถํ , ๋ฉ์์ง ์ง์ฐ ๋ฐ ๋ฉ์์ง ์ฌ์ ๋ ฌ๊ณผ ๊ฐ์ ์ฅ์ ๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๋์ ํฉ๋๋ค. Jepsen๊ณผ ๊ฐ์ ๋๊ตฌ๋ ์ด ๋ชฉ์ ์ผ๋ก ํน๋ณํ ์ค๊ณ๋์์ต๋๋ค.
- ์์ฑ ๊ธฐ๋ฐ ํ ์คํธ: ๋ถ๋ณ ๋ฐ ์์ ์์ฑ(์: ๊ธฐ๊ฐ๋น ์ต๋ ํ๋์ ๋ฆฌ๋, ์ปค๋ฐ๋ ํญ๋ชฉ์ ์ ๋ ์์ค๋์ง ์์)์ ์ ์ํ๊ณ ๋ค์ํ ์กฐ๊ฑด์์ ๊ตฌํ์ด ์ด๋ฅผ ์ค์ํ๋์ง ํ ์คํธํฉ๋๋ค.
- ๋ชจ๋ธ ๊ฒ์ฌ: ์ค์ํ ์๊ณ ๋ฆฌ์ฆ ๋ถ๋ถ์ ๊ฒฝ์ฐ, ์ฌ๋ฐ๋ฆ์ ์ฆ๋ช ํ๊ธฐ ์ํด ํ์ ๊ฒ์ฆ ๊ธฐ๋ฒ์ ์ฌ์ฉํ ์ ์์ง๋ง, ์ด๋ ๋งค์ฐ ์ ๋ฌธํ๋ ์์ญ์ ๋๋ค.
- ์๋ฎฌ๋ ์ด์ ํ๊ฒฝ: ์ ์ญ ๋ฐฐํฌ์ ์ผ๋ฐ์ ์ธ ๋คํธ์ํฌ ์กฐ๊ฑด(์ง์ฐ ์๊ฐ, ํจํท ์์ค)์ ์๋ฎฌ๋ ์ด์ ํ๋ ํ๊ฒฝ์์ ํ ์คํธ๋ฅผ ์คํํฉ๋๋ค.
์ฌ์ฉ ์ฌ๋ก ๋ฐ ์ค์ ์ ํ๋ฆฌ์ผ์ด์
Raft์ ์ค์ฉ์ฑ๊ณผ ์ดํด ๊ฐ๋ฅ์ฑ์ ๋ค์ํ ์ค์ ์ธํ๋ผ ๊ตฌ์ฑ ์์์ ๋๋ฆฌ ์ฑํ๋๋ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์์ต๋๋ค.
1. ๋ถ์ฐ ํค-๊ฐ ์ ์ฅ์ ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณต์
- etcd: Kubernetes์ ๊ธฐ๋ฐ ๊ตฌ์ฑ ์์์ธ etcd๋ Raft๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑ ๋ฐ์ดํฐ, ์๋น์ค ๊ฒ์ ์ ๋ณด ๋ฐ ํด๋ฌ์คํฐ ์ํ ๊ด๋ฆฌ๋ฅผ ์ ์ฅํ๊ณ ๋ณต์ ํฉ๋๋ค. Kubernetes๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋ ค๋ฉด ๊ทธ ์ ๋ขฐ์ฑ์ด ๊ฐ์ฅ ์ค์ํฉ๋๋ค.
- Consul: HashiCorp์์ ๊ฐ๋ฐํ Consul์ ๋ถ์ฐ ์ ์ฅ์ ๋ฐฑ์๋์ Raft๋ฅผ ์ฌ์ฉํ์ฌ ๋์ ์ธํ๋ผ ํ๊ฒฝ์์ ์๋น์ค ๊ฒ์, ์ํ ํ์ธ ๋ฐ ๊ตฌ์ฑ ๊ด๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- TiKV: TiDB(๋ถ์ฐ SQL ๋ฐ์ดํฐ๋ฒ ์ด์ค)์์ ์ฌ์ฉ๋๋ ๋ถ์ฐ ํธ๋์ญ์ ํค-๊ฐ ์ ์ฅ์๋ ๋ฐ์ดํฐ ๋ณต์ ๋ฐ ์ผ๊ด์ฑ ๋ณด์ฅ์ ์ํด Raft๋ฅผ ๊ตฌํํฉ๋๋ค.
- CockroachDB: ์ด ์ ์ญ์ ์ผ๋ก ๋ถ์ฐ๋ SQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ง์ญ ์ ์ฒด ์ฅ์ ์๋ ๋ถ๊ตฌํ๊ณ ๊ณ ๊ฐ์ฉ์ฑ๊ณผ ๊ฐ๋ ฅํ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ๋ค์ค ๋ ธ๋ ๋ฐ ์ง๋ฆฌ์ ์์ญ์ ๊ฑธ์ณ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ ํ๋ ๋ฐ Raft๋ฅผ ๊ด๋ฒ์ํ๊ฒ ์ฌ์ฉํฉ๋๋ค.
2. ์๋น์ค ๊ฒ์ ๋ฐ ๊ตฌ์ฑ ๊ด๋ฆฌ
Raft๋ ํด๋ฌ์คํฐ ์ ์ฒด์ ์๋น์ค ๋ฐ ๊ตฌ์ฑ์ ๋ํ ์ค์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๋ฐฐํฌํด์ผ ํ๋ ์์คํ ์ ์ํ ์ด์์ ์ธ ๊ธฐ๋ฐ์ ์ ๊ณตํฉ๋๋ค. ์๋น์ค๊ฐ ๋ฑ๋ก๋๊ฑฐ๋ ๊ตฌ์ฑ์ด ๋ณ๊ฒฝ๋ ๋ Raft๋ ๋ชจ๋ ๋ ธ๋๊ฐ ์๋ก์ด ์ํ์ ๊ฒฐ๊ตญ ๋์ํ๋๋ก ๋ณด์ฅํ์ฌ ์๋ ๊ฐ์ ์์ด ๋์ ์ ๋ฐ์ดํธ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
3. ๋ถ์ฐ ํธ๋์ญ์ ์กฐ์ ์
์ฌ๋ฌ ์์ ๋๋ ์๋น์ค์ ๊ฑธ์ณ ์์์ฑ์ ์๊ตฌํ๋ ์์คํ ์ ๊ฒฝ์ฐ, Raft๋ ๋ถ์ฐ ํธ๋์ญ์ ์กฐ์ ์์ ๊ธฐ๋ฐ์ด ๋์ด ์ฐธ๊ฐ์ ์ ์ฒด์ ๊ฑธ์ณ ๋ณ๊ฒฝ ์ฌํญ์ ์ปค๋ฐํ๊ธฐ ์ ์ ํธ๋์ญ์ ๋ก๊ทธ๊ฐ ์ผ๊ด๋๊ฒ ๋ณต์ ๋๋๋ก ํ ์ ์์ต๋๋ค.
4. ๊ธฐํ ์์คํ ์ ํด๋ฌ์คํฐ ์กฐ์ ๋ฐ ๋ฆฌ๋ ์ ์ถ
๋ช ์์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋๋ ํค-๊ฐ ์ ์ฅ์ ์ฌ์ฉ ์ธ์๋ Raft๋ ์กฐ์ ์์ ์ ๊ด๋ฆฌํ๊ฑฐ๋, ๋ค๋ฅธ ๋ถ์ฐ ํ๋ก์ธ์ค์ ๋ฆฌ๋๋ฅผ ์ ์ถํ๊ฑฐ๋, ๋๊ท๋ชจ ์์คํ ์์ ์ ๋ขฐํ ์ ์๋ ์ ์ด ํ๋ฉด์ ์ ๊ณตํ๊ธฐ ์ํด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ ํต์ฌ ๊ตฌ์ฑ ์์๋ก ์ข ์ข ํฌํจ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ง์ ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ ์๋ฃจ์ ์ ์ ์ด ํ๋ฉด ๊ตฌ์ฑ ์์์ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด Raft๋ฅผ ํ์ฉํฉ๋๋ค.
Raft์ ์ฅ์ ๊ณผ ๋จ์
Raft๋ ์๋นํ ์ด์ ์ ์ ๊ณตํ์ง๋ง, ์ ์ถฉ์ ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
์ฅ์ :
- ์ดํด ๊ฐ๋ฅ์ฑ: ์ฃผ์ ์ค๊ณ ๋ชฉํ๋ก, ์ด์ ํฉ์ ์๊ณ ๋ฆฌ์ฆ(์: Paxos)๋ณด๋ค ๊ตฌํ, ๋๋ฒ๊น ๋ฐ ์ถ๋ก ํ๊ธฐ๊ฐ ๋ ์ฝ์ต๋๋ค.
- ๊ฐ๋ ฅํ ์ผ๊ด์ฑ: ์ปค๋ฐ๋ ๋ก๊ทธ ํญ๋ชฉ์ ๋ํ ๊ฐ๋ ฅํ ์ผ๊ด์ฑ ๋ณด์ฅ์ ์ ๊ณตํ์ฌ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ๊ณผ ์ ๋ขฐ์ฑ์ ๋ณด์ฅํฉ๋๋ค.
-
๋ด๊ฒฐํจ์ฑ: ๊ฐ์ฉ์ฑ ๋๋ ์ผ๊ด์ฑ์ ์์ง ์๊ณ ์์์ ๋
ธ๋(N๊ฐ ๋
ธ๋ ํด๋ฌ์คํฐ์์
(N-1)/2๊ฐ ์ฅ์ ๊น์ง)๋ฅผ ํ์ฉํฉ๋๋ค. - ์ฑ๋ฅ: ์์ ์ ์ธ ์กฐ๊ฑด(๋ฆฌ๋ ๋ณ๊ฒฝ ์์)์์ Raft๋ ๋ฆฌ๋๊ฐ ๋ชจ๋ ์์ฒญ์ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ณ ๋ณ๋ ฌ๋ก ๋ณต์ ํ์ฌ ๋คํธ์ํฌ ๋์ญํญ์ ํจ์จ์ ์ผ๋ก ํ์ฉํ๋ฏ๋ก ๋์ ์ฒ๋ฆฌ๋์ ๋ฌ์ฑํ ์ ์์ต๋๋ค.
- ์ ์๋ ์ญํ : ๋ช ํํ ์ญํ (๋ฆฌ๋, ํ๋ก์, ํ๋ณด) ๋ฐ ์ํ ์ ํ์ ์ ์ ๋ชจ๋ธ๊ณผ ๊ตฌํ์ ๋จ์ํํฉ๋๋ค.
- ๊ตฌ์ฑ ๋ณ๊ฒฝ: ํด๋ฌ์คํฐ์์ ๋ ธ๋๋ฅผ ์์ ํ๊ฒ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ๋ฉ์ปค๋์ฆ(Joint Consensus)์ ์ ๊ณตํฉ๋๋ค.
๋จ์ :
- ๋ฆฌ๋ ๋ณ๋ชฉ ํ์: ๋ชจ๋ ํด๋ผ์ด์ธํธ ์ฐ๊ธฐ ์์ฒญ์ ๋ฆฌ๋๋ฅผ ํต๊ณผํด์ผ ํฉ๋๋ค. ๊ทน๋๋ก ๋์ ์ฐ๊ธฐ ์ฒ๋ฆฌ๋ ๋๋ ๋ฆฌ๋๊ฐ ํด๋ผ์ด์ธํธ์์ ์ง๋ฆฌ์ ์ผ๋ก ๋ฉ๋ฆฌ ๋จ์ด์ง ์๋๋ฆฌ์ค์์๋ ์ด๊ฒ์ด ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ด ๋ ์ ์์ต๋๋ค.
- ์ฝ๊ธฐ ์ง์ฐ ์๊ฐ: ๊ฐ๋ ฅํ๊ฒ ์ผ๊ด๋ ์ฝ๊ธฐ๋ฅผ ๋ฌ์ฑํ๋ ค๋ฉด ์ข ์ข ๋ฆฌ๋์์ ํต์ ์ด ํ์ํ๋ฉฐ ์ ์ฌ์ ์ผ๋ก ์ง์ฐ ์๊ฐ์ด ์ถ๊ฐ๋ ์ ์์ต๋๋ค. ํ๋ก์์์ ์ฝ๋ ๊ฒ์ ์ค๋๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ํ์ด ์์ต๋๋ค.
- ์ฟผ๋ผ ์๊ตฌ ์ฌํญ: ์ ํญ๋ชฉ์ ์ปค๋ฐํ๋ ค๋ฉด ๊ณผ๋ฐ์ ๋ ธ๋๋ฅผ ์ฌ์ฉํ ์ ์์ด์ผ ํฉ๋๋ค. 5๋ ธ๋ ํด๋ฌ์คํฐ์์๋ 2๊ฐ์ ์ฅ์ ๋ฅผ ํ์ฉํฉ๋๋ค. 3๊ฐ์ ๋ ธ๋๊ฐ ์คํจํ๋ฉด ํด๋ฌ์คํฐ๋ ์ฐ๊ธฐ์ ๋ํด ์ฌ์ฉ ๋ถ๊ฐ๋ฅํ๊ฒ ๋ฉ๋๋ค. ์ด๋ ์ง์ญ ๊ฐ ๊ณผ๋ฐ์๋ฅผ ์ ์งํ๊ธฐ ์ด๋ ค์ด ๋ถํ ๋๊ฑฐ๋ ์ง๋ฆฌ์ ์ผ๋ก ๋ถ์ฐ๋ ํ๊ฒฝ์์๋ ์ด๋ ค์ธ ์ ์์ต๋๋ค.
- ๋คํธ์ํฌ ๋ฏผ๊ฐ๋: ๋คํธ์ํฌ ์ง์ฐ ์๊ฐ ๋ฐ ๋ถํ ์ ๋งค์ฐ ๋ฏผ๊ฐํ๋ฉฐ, ํนํ ๊ด๋ฒ์ํ๊ฒ ๋ถ์ฐ๋ ๋ฐฐํฌ์์ ์ ์ถ ์๊ฐ ๋ฐ ์ ๋ฐ์ ์ธ ์์คํ ์ฒ๋ฆฌ๋์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
- ๊ตฌ์ฑ ๋ณ๊ฒฝ์ ๋ณต์ก์ฑ: ๊ฐ๋ ฅํ์ง๋ง Joint Consensus ๋ฉ์ปค๋์ฆ์ Raft ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ์์ ๊ฐ์ฅ ๋ณต์กํ ๋ถ๋ถ ์ค ํ๋์ด๋ฉฐ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌํํ๊ณ ์ฒ ์ ํ ํ ์คํธํด์ผ ํฉ๋๋ค.
- ์ฐ๊ธฐ์ ๋ํ ๋จ์ผ ์ฅ์ ์ : ๋ฆฌ๋ ์ฅ์ ์ ๋ํด ๋ด๊ฒฐํจ์ฑ์ด ์์ง๋ง, ๋ฆฌ๋๊ฐ ์๊ตฌ์ ์ผ๋ก ๋ค์ด๋์๊ณ ์๋ก์ด ๋ฆฌ๋๋ฅผ ์ ์ถํ ์ ์๋ ๊ฒฝ์ฐ(์: ๋คํธ์ํฌ ๋ถํ ๋๋ ๋๋ฌด ๋ง์ ์ฅ์ ๋ก ์ธํด), ์์คํ ์ ์ฐ๊ธฐ์์ ์งํํ ์ ์์ต๋๋ค.
๊ฒฐ๋ก : ๋ณต์๋ ฅ ์๋ ๊ธ๋ก๋ฒ ์์คํ ์ ์ํ ๋ถ์ฐ ํฉ์ ๋ง์คํฐํ๊ธฐ
Raft ์๊ณ ๋ฆฌ์ฆ์ ๋ณต์กํ ๋ฌธ์ ๋ฅผ ๋จ์ํํ๋ ์ฌ๋ ค ๊น์ ์ค๊ณ์ ํ์ ์ฆ๋ช ํฉ๋๋ค. ์ดํด ๊ฐ๋ฅ์ฑ์ ๋ํ ๊ฐ์กฐ๋ ๋ถ์ฐ ํฉ์๋ฅผ ๋ฏผ์ฃผํํ์ฌ ๋ ๋์ ๋ฒ์์ ๊ฐ๋ฐ์์ ์กฐ์ง์ด ์ด์ ์ ๊ทผ ๋ฐฉ์์ ๋ํดํ ๋ณต์ก์ฑ์ ๊ตด๋ณตํ์ง ์๊ณ ๊ณ ๊ฐ์ฉ์ฑ ๋ฐ ๋ด๊ฒฐํจ์ฑ ์์คํ ์ ๊ตฌ์ถํ ์ ์๋๋ก ํ์ต๋๋ค.
Kubernetes(etcd๋ฅผ ํตํด)๋ก ์ปจํ ์ด๋ ํด๋ฌ์คํฐ๋ฅผ ์ค์ผ์คํธ๋ ์ด์ ํ๋ ๊ฒ๋ถํฐ CockroachDB์ ๊ฐ์ ๊ธ๋ก๋ฒ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ๋ณต์๋ ฅ ์๋ ๋ฐ์ดํฐ ์ ์ฅ์๋ฅผ ์ ๊ณตํ๋ ๊ฒ๊น์ง, Raft๋ ์ฐ๋ฆฌ์ ๋์งํธ ์ธ๊ณ๊ฐ ์ผ๊ด๋๊ณ ์ด์๋๋๋ก ๋ณด์ฅํ๋ ๋ณด์ด์ง ์๋ ํต์ฌ ์ญํ ์ ํฉ๋๋ค. Raft๋ฅผ ๊ตฌํํ๋ ๊ฒ์ ์ฌ์ํ ์ผ์ด ์๋์ง๋ง, ๊ทธ ๋ช ํํ ์ฌ์๊ณผ ํ๋ถํ ์ํ๊ณ๋ ๋ค์ ์ธ๋์ ๊ฐ๋ ฅํ๊ณ ํ์ฅ ๊ฐ๋ฅํ ์ธํ๋ผ๋ฅผ ๊ตฌ์ถํ๋ ๋ฐ ์ ๋ ํ๋ ์ฌ๋๋ค์๊ฒ ๋ณด๋ ์๋ ๋ ธ๋ ฅ์ ๋๋ค.
๊ฐ๋ฐ์ ๋ฐ ์ค๊ณ์๋ฅผ ์ํ ์คํ ๊ฐ๋ฅํ ํต์ฐฐ๋ ฅ:
- ์ดํด๋ฅผ ์ฐ์ ์ํ์ญ์์ค: ๊ตฌํ์ ์๋ํ๊ธฐ ์ ์ Raft์ ๊ฐ ๊ท์น๊ณผ ์ํ ์ ํ์ ์ฒ ์ ํ ์ดํดํ๊ธฐ ์ํด ์๊ฐ์ ํฌ์ํ์ญ์์ค. ์๋ณธ ๋ ผ๋ฌธ๊ณผ ์๊ฐ์ ์ค๋ช ์ ๊ท์คํ ๋ฆฌ์์ค์ ๋๋ค.
- ๊ธฐ์กด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ฉ: ๋๋ถ๋ถ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ, ์๊ตฌ ์ฌํญ์ด ๋งค์ฐ ํน์ํ๊ฑฐ๋ ํ์ ์ฐ๊ตฌ๋ฅผ ์ํํ๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด ์ฒ์๋ถํฐ ๊ตฌ์ถํ๋ ๋์ ์ ๊ฒ์ฆ๋ ๊ธฐ์กด Raft ๊ตฌํ(์: etcd, HashiCorp์ Raft ๋ผ์ด๋ธ๋ฌ๋ฆฌ)์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค.
- ์๊ฒฉํ ํ ์คํธ๋ ํ์ ๋ถ๊ฐ: ์ฅ์ ์ฃผ์ , ์์ฑ ๊ธฐ๋ฐ ํ ์คํธ ๋ฐ ๊ด๋ฒ์ํ ์ฅ์ ์๋๋ฆฌ์ค ์๋ฎฌ๋ ์ด์ ์ ๋ชจ๋ ๋ถ์ฐ ํฉ์ ์์คํ ์ ํ์์ ์ ๋๋ค. ์ฒ ์ ํ ๋ง๊ฐ๋จ๋ฆฌ์ง ์๊ณ ๋ "์๋ํ๋ค"๊ณ ๊ฐ์ ํ์ง ๋ง์ญ์์ค.
- ๊ธ๋ก๋ฒ ์ง์ฐ ์๊ฐ์ ๊ณ ๋ คํ์ฌ ์ค๊ณ: ๊ธ๋ก๋ฒ ๋ฐฐํฌ ์์๋ ๋ค๋ฅธ ์ง์ญ ์ ๋ฐ์ ์ผ๊ด์ฑ๊ณผ ์ฑ๋ฅ์ ์ต์ ํํ๊ธฐ ์ํด ์ฟผ๋ผ ๋ฐฐ์น, ๋คํธ์ํฌ ํ ํด๋ก์ง ๋ฐ ํด๋ผ์ด์ธํธ ์ฝ๊ธฐ ์ ๋ต์ ์ ์คํ๊ฒ ๊ณ ๋ คํ์ญ์์ค.
-
์๊ตฌ ๋ฐ ๋ด๊ตฌ์ฑ: ๊ธฐ๋ณธ ์ ์ฅ์ ๊ณ์ธต์ด ๊ฐ๋ ฅํ์ง ํ์ธํ๊ณ
fsync๋๋ ํด๋น ์์ ์ ์ถฉ๋ ์๋๋ฆฌ์ค์์ ๋ฐ์ดํฐ ์์ค์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฌ๋ฐ๋ฅด๊ฒ ์ฌ์ฉํ๊ณ ์๋์ง ํ์ธํ์ญ์์ค.
๋ถ์ฐ ์์คํ ์ด ๊ณ์ ๋ฐ์ ํจ์ ๋ฐ๋ผ Raft๊ฐ ๊ตฌํํ ์์น(๋ช ํ์ฑ, ๊ฒฌ๊ณ ์ฑ ๋ฐ ๋ด๊ฒฐํจ์ฑ)์ ์ ๋ขฐํ ์ ์๋ ์ํํธ์จ์ด ์์ง๋์ด๋ง์ ํต์ฌ์ผ๋ก ๋จ์ ๊ฒ์ ๋๋ค. Raft๋ฅผ ๋ง์คํฐํจ์ผ๋ก์จ ๊ทํ๋ ๋ถ์ฐ ์ปดํจํ ์ ๋ถ๊ฐํผํ ํผ๋์ ๊ฒฌ๋ ์ ์๋ ๋ณต์๋ ฅ ์๊ณ ๊ธ๋ก๋ฒ ํ์ฅ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ๋๊ตฌ๋ฅผ ๊ฐ์ถ๊ฒ ๋ฉ๋๋ค.