๋ชฉ์ฐจ
- TL;DR
- ๋ถ์ฐ ์์คํ ์ 3 ๊ฐ์ง Gaurantee
- CAP ์ด๋ก
- CP ์์คํ
- AP ์์คํ
- CAP ์์คํ ์ด ์กด์ฌํ์ง ์๋ ์ด์
- CAP ์ด๋ก ์ ํ๊ณ
- PACELC ์ด๋ก
TL;DR
์ด๋ฒ ๊ธ์ ํต์ฌ์ ์์ฝํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- CAP ์ด๋ก
- ํํฐ์ ์ด ํญ์ ๋ฐ์ํ ์ ๋ฐ์ ์๋ ๋ถ์ฐ ์์คํ ์์ C, A ์ค ํ๋๋ง ์ ํํ ์ ์์์ ์๋ฏธํ๋ ์ด๋ก
- Consistency
- Availability
- Partition Tolerance
- CAP ์ด๋ก ์ ํ๊ณ
- ์๋ฒฝํ CP, AP ์์คํ ์ ์กด์ฌํ์ง ์๋๋ค
- ๋๋ถ๋ถ์ ๋ถ์ฐ ์์คํ ์ CP ์ AP ์ฌ์ด ์ด๋์ฏค์ด๋ค
- PACELC ์ด๋ก
- partition ์ํฉ๊ณผ ์๋(else) ์ํฉ์ผ๋ก ๋๋๊ณ ๊ฐ๊ฐ trade off ์ ์ ๊ธ์๋ฅผ ๋ด ์ด๋ก
- ํํฐ์
partition
์ํฉ์ผ ๊ฒฝ์ฐAvaliabilty
์Consistency
์ฌ์ด์์ ๊ณ ๋ฏผํ๊ณ - ์๋(
Else
) ์ํฉ์์๋Latency
์Consistency
์ฌ์ด์์ ๊ณ ๋ฏผํ๋ค
- ํํฐ์
- partition ์ํฉ๊ณผ ์๋(else) ์ํฉ์ผ๋ก ๋๋๊ณ ๊ฐ๊ฐ trade off ์ ์ ๊ธ์๋ฅผ ๋ด ์ด๋ก
๋ถ์ฐ ์์คํ ์ 3 ๊ฐ์ง Gaurantee
์ฌ๋ฌ ๊ฐ์ ๋ ธ๋(node)๋ผ ๋ถ๋ฆฌ๋ ๊ฐ๋ณ ์ธ์คํด์ค๋ค์ด ๋ชจ์ฌ ํ๋์ ๋ชฉ์ ์ ๋ฌ์ฑํ๋ ๋ถ์ฐ ์์คํ ์์๋ ์ ๋ช ํ 3๊ฐ์ง์ guarantee ๊ฐ ์กด์ฌํ๋ค
- ์ผ๊ด์ฑ, Consistency
- ๊ฐ์ฉ์ฑ, Availability
- ํํฐ์ ๋ด์ฑ(๊ฐ๋ด ํน์ ํ์ฉ), Partition Tolerance
์ผ๊ด์ฑ, Consistency
consistency ๋ ๋ถ์ฐ ์์คํ ์์ ํญ์ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ๋ง์ถ๋ gaurantee ์ด๋ค.
๋ง์ฝ ํน์ ๋ ธ๋๊ฐ ํด๋ฌ์คํฐ ๋ด๋ถ์์ ์ ์ ๋์์ ํ์ง ์๋๋ค๋ฉด, ๋ค๋ฅธ ์์คํ ์ ๋ค์ ์ฐ๊ฒฐํ ์ ์์ ๋๊น์ง ์์ ๋ ์์ฒญ์ ๋ํด์ ๋ ์ด์ ์๋ตํ์ง ์๋๋ค.
๋ง์ฝ ์์ ์ํฉ์์ ์์ฒญ์ ๋ชจ๋ ์์ ํ๋ค๋ฉด ํน์ ๋ ธ๋์ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ๊นจ์ง ์ ์์ผ๋ฏ๋ก ๊ฐ์ฉ์ฑ์ ํฌ๊ธฐํ๋ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๋ค๊ณ ๋ณผ ์ ์๋ค
๊ฐ์ฉ์ฑ, Availability
availability ๋ ์์ ๋ ๋ชจ๋ ์์ฒญ์ ๋ํด ๊ณ์ํด์ ์๋ต์ ํ ์ ์๋ gaurantee ๋ฅผ ์๋ฏธํ๋ค
๋ง์ฝ ํน์ ๋ ธ๋๊ฐ ํด๋ฌ์คํฐ ๋ด๋ถ์์ ์ ์ ๋์ํ์ง ์๋๋ผ๋ ๋ค๋ฅธ ๋ ธ๋๋ค์ด ์์ ๋ ์์ฒญ์ ์ฒ๋ฆฌํ๋ค.
์ด๋ ๊ฐ์ฉ์ฑ์ ๊ฐ์ฅ ์ฐ์ ์ผ๋ก ์๊ฐํ๊ณ ๋ณด์ฅํ๋ค๊ณ ํ ์ ์๋ค
ํํฐ์ ๊ฐ๋ด, Partition Tolerance
partition ์ DB ์ partitioning ์ด๋ kafka ์ partition ๊ณผ ๋ค๋ฅด๋ค.
CAP ์ด๋ก ๋ฌธ๋งฅ์์์ partition ์ ๋ฐ๋ก ์ฅ์ ์ด๋ค.
partition ์ ๋ค์ํ ์ํฉ์์ ๋ฐ์ํ ์ ์๋ค.
network ๊ฐ ๋ถ์์ ํด์ ์ง์ฐ์ด ๋ฐ์ํ๊ฑฐ๋, computing engine ์ด ์ผ์์ ์ผ๋ก down ๋ ๊ฒ์ ๋ชจ๋ partition ์ด๋ผ๊ณ ํ๋ค.
partition tolerance ๋ ์ด๋ฌํ partition ์ํฉ์์์ recovery gaurantee ๋ฅผ ์๋ฏธํ๋ค
CAP ์ด๋ก
CAP ์ด๋ก ์ ๋ฐ๋ก ์์ 3๊ฐ์ง์ guarantee ๋ก ๋ถํฐ ์์๋๋ค.
๋ถ์ฐ ์์คํ ์์๋ ์๋ก ๋ค๋ฅธ ๋ ธ๋๋ค์ด ํ๋์ ๋ชฉ์ ์ ๋ฌ์ฑํ๊ธฐ ์ํด์ ํ๋์ธ ๊ฒ ์ฒ๋ผ clustered ๋์ด ๋์ํ๊ฒ ๋๋ค.
์ด๋ฌํ ๋ถ์ฐ ์์คํ ์์ ๊ฐ์ฅ ์ฃผ์ํ ํน์ฑ์ ๋ฐ๋ก ๋ ธ๋๊ฐ์ Liveness ์ด๋ค.
๋ ธ๋๊ฐ์ Liveness ๊ฐ ์ง๊ฒจํค์ง์ง ์๋ ๊ฒฝ์ฐ๋ ๋งค์ฐ ๋ค์ํ๋ค.
์์ ์ด์ผ๊ธฐํ๊ฒ ์ฒ๋ผ ์ฐ๋ฆฌ๊ฐ ํญ์ network ๋ฅผ ์ ๋ขฐํ์ง ์๋์
, ์ธ์ ๋ ์ง computing engine ์ down ๋ ์ ์๋ค๋ ์
์ ๊ณ ๋ คํ๋ค๋ฉด partition ์ธ ์ํฉ์ ๋ถ์ฐ ํ๊ฒฝ์์ ํญ์ ๋ฐ์ํ ์ ์๋ ๋ถ๊ฐํญ๋ ฅ์ด๋ค.
CAP ์ด๋ก ์ ๋ถ์ฐ ์์คํ ์์ Partition ์ํฉ์ด ํญ์ ๋ฐ์ํ ์ ๋ฐ์ ์๋ค๊ณ ๊ฐ์ ํ๊ณ , Partition ์ด ๋ฐ์ํ๋ฉด Availability ์ Consistency ์ฌ์ด์์ ์ ํ์ ํด์ผํ๋ค๋ ์ด๋ก ์ด๋ค
CAP ๋ฅผ ๋ชจ๋ ๋ง์กฑํ๋ ์์คํ ์ ์กด์ฌํ ์ ์๋ค. ์ฐ๋ฆฌ๋ 2๊ฐ์ง์ guarantee ์์ trade off ๋ฅผ ๊ณ ๋ คํด ํ ๊ฐ์ง๋ฅผ ์ ํํด์ผ ํ๋ค
1-1. CAP ์ด๋ก - CP ์์คํ
Consistency + Partition Tolerance
CP ์์คํ ์ Partition ์ํฉ์์ ์ผ๊ด์ฑ(Consistency) ๋ฅผ ์ฐ์ ์ผ๋ก ์๊ฐํ๋ค๋ ์์คํ ์ด๋ค
CP ์์คํ ์ ๋ถ์ฐ ์์คํ ์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ๊ตฌ์กฐ๊ฐ ์๋๊น ์ถ๋ค.
๋ํ์ ์ผ๋ก RDBMS ๋ CP ์์คํ ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก CP ์์คํ ์ Primary-Secondary ๊ตฌ์กฐ๋ก ๊ตฌ์ฑ์ด ๋๊ณ p ์ s ์ฌ์ด์ ๊ณ์ํด์ heartbeat checking ์ ํตํด liveness ๋ฅผ ํ์ธํ๋ค.
๋ง์ฝ primary node ์ ์ก์ธ์คํ ์ ์๋ค๋ฉด secondary ์ค ๋๊ตฐ๊ฐ๊ฐ primary ๊ฐ ๋๋ค.
์ด๋, consistency ๋ฅผ ์ํด ๋ชจ๋ ์์ฒญ์ blocking ํ๋๋ฐ, ์ด๋ ํํฐ์ ์ด ํด๊ฒฐ๋ ๋ ๊น์ง blocking ํ๊ฒ ๋๋ค.
ํํฐ์ ์ด ๋ณต๊ตฌ๋ ๋ ๊น์ง ์์ฒญ์ blocking ํ๊ธฐ ๋๋ฌธ์ availability ๋ ๋ฎ์์ง๊ฒ ๋๋ค.
1-2. CAP ์ด๋ก - AP ์์คํ
Availability + Partition Tolerance
AP ์์คํ ์ Partition ์ํฉ์์ ๊ฐ์ฉ์ฑ(Availability) ์ ์ฐ์ ์ผ๋ก ์๊ฐํ๋ค๋ ์์คํ ์ด๋ค
AP ์์คํ ์ ์ผ๋ช Turntable consistency ๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค.
์ด ๊ตฌ์กฐ๋ Primary ๊ฐ ์กด์ฌํ์ง ์๋ Primaryless, Masterless ๊ตฌ์กฐ์ด๋ค. ์ฆ ๋ชจ๋๊ฐ Primary ์ด๋ฉฐ Secondary ๋ผ๋ ๊ฒ์ด๋ค.
๊ทธ๋์ ๋ชจ๋ ๋ ธ๋๋ก write ์ฐ์ฐ๊ณผ read ์ฐ์ฐ์ด ๋ถ๋ฐฐ๋ ์ ์๊ณ , write ์์ ์ด ๋ฐ์ํ๋ฉด ๋ชจ๋ ๋ ธ๋๋ฅผ ๋๊ธฐํํ๋ ํํ์ด๋ค.
๊ทธ๋์ ๋ง์ฝ ํํฐ์ ์ํฉ์ด ๋ฐ์ํ๋๋ผ๋ ์์ฒญ์ ๋ค๋ฅธ node ๋ก ๋ณด๋ด๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๊ฐ์ฉ์ฑ์ด ๋์์ง๋ค.
primary ๊ฐ ์์ด์ ๋ ธ๋๊ฐ์ ๋ฐ์ดํฐ ๋๊ธฐํ๊ฐ ์ด๋ฃจ์ด์ง๊ธฐ๊น์ง ๋์ผํ ๋ฐ์ดํฐ์ง๋ง ์๋ก ๋ค๋ฅธ version ์ ๊ฐ์ ธ consistency ๊ฐ ์ผ์์ ์ผ๋ก ๊นจ์ง๋ ์ํฉ์ด ์กด์ฌํ๋ค.
ํ์ง๋ง ๋ชจ๋ ์ ๋ฐ์ดํธ(write) ์์ ์ ๋ํด์ ๊ฒฐ๊ตญ ๋ชจ๋ ๋ ธ๋์ ๋๋ฌํ ๊ฒ์์ ์๋ฏธํ๋ Eventual Consistency ๋ฅผ ๋ณด์ฅํ๋ค
1-3. CAP ์ด๋ก - ์ CAP ๋ฅผ ๋ชจ๋ ๋ง์กฑํ๋ ์์คํ ์ ์กด์ฌํ ์ ์์๊น?
Partition ์ด ๋ฐ์ํ์ ๋, Consistency ์ Availability ๋ฅผ ๋ง์กฑํ๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ partitioned node ๋ฅผ ์ข ๋ฃ์ํค๊ณ cluster ์์ ์ ์ธํ๋ ๊ฒ์ด๋ค.
๊ทธ๋ผ ๋ณต๊ตฌ๋ ์ ํฉ์ ๋ํ ์ ๊ฒฝ์ ๋ ์ด์ ํ์ง ์์๋ ๋๋ฏ๋ก Consistency ์ Availability ๊ฐ ๊ณ์ํด์ ๋ง์กฑ๋ ๊ฒ์ด๋ค.
ํ์ง๋ง ํํฐ์ ์ด ํญ์ ์กด์ฌํ ์ ๋ฐ์ ์๋ ๋ถ์ฐ ํ๊ฒฝ์์ ๊ณ์ํด์ ๋ฌธ์ ๊ฐ ์๊ธด node ๋ฅผ ๋ฐฉ์ถ์ํจ๋ค๋ฉด ๋จ์ผ ๋ ธ๋๋ก ์๋ ดํ ๊ฒ์ด๋ค.
๊ทธ๋ผ ๋ถ์ฐ ํ๊ฒฝ์ด ๋ ์ด์ ์๋๊ฒ ๋๋ค. CAP ์ด๋ก ์ ๋ถ์ฐ ํ๊ฒฝ์์ ์๋ฏธ๊ฐ ์๋ ๊ฒ์ธ๋ฐ, ์ด๋ ๊ฒ ๋๋ฉด ๋ ์ด์ CAP ๊ฐ ํ์ ์์ด์ง๋ค.
CA ์์คํ ์ ๋ํด ์ค๋ช ํ๋ ์ฌ๋ฌ ๊ธ์ ๋ณด๋ฉด ๋จ์ผ ์ธ์คํด์ค๋ก MySQL ์๋ฒ๋ฅผ ๊ตฌ์ฑํ๋ฉด ๋๋ค๊ณ ํ๋ค.
ํ์ง๋ง ์ฌ์ค์ ๋จ์ผ ์ธ์คํด์ค์ธ ๊ฒฝ์ฐ๋ ๋ถ์ฐ ํ๊ฒฝ์ด ์๋๊ธฐ์ CAP ์ด๋ก ์ ์ ์ฉํ๋ ์๋ฏธ๊ฐ ์์ด ์ง๋ ๊ฒ์ด๋ค.
2. CAP ์ด๋ก ์ ํ๊ณ
๋ชจ๋ ์ด๋ก ์ด ๊ทธ๋ ๋ฏ, ํ์ค์ ๋ชจ๋ ๊ฒ์ 100% ์ ์ฉํ๊ธฐ๋ ์ฝ์ง ์๋ค.
CAP ์ด๋ก ๋ ๊ทธ๋ฌํ๋ฐ, CAP ์ด๋ก ์ ํฌ๊ฒ 3๊ฐ์ง ํ๊ณ๊ฐ ์กด์ฌํ๋ค.
- ์๋ฒฝํ CP, AP ์์คํ ์ ์กด์ฌํ์ง ์๋๋ค. ๋๋ถ๋ถ์ CP ์ AP ์ฌ์ด ์ด๋์ฏค์ด๋ค
- ๋ถ์ฐ ์์คํ ์ ํต์ฌ ์์์ธ ์ฑ๋ฅ๊ณผ ์ง์ฐ์๊ฐ์ ํํํ ์ ์๋ค.
- ์ฐ๋ฆฌ์ ์์คํ ์ ํญ์ partitioned ์ํฉ์ด ์๋๋ค
์ด๋ฌํ ํ๊ณ๋ฅผ ์ค๋ช ํ๊ธฐ ์ํด์ PACELC ๋ผ๋ ์ด๋ก ์ด ์กด์ฌํ๋๋ฐ, ํ ๋ฒ ํ์ธํด๋ณด์
3. PACELC ์ด๋ก
PACELC ์ด๋ก ์ ์์ CAP ์ด๋ก ์ ํ๊ณ๋ก ์ธํด ํ์ํ๊ฒ ๋์๋ค.
ํ์ค์์๋ Partition ์ํฉ๊ณผ ์๋(Else) ์ํฉ์ด ํจ๊ป ์กด์ฌํ๋ค๊ณ ๊ฐ์ ํ๊ณ , 2๊ฐ์ง ์ํฉ์ ๋๋ ๊ฐ๊ฐ ์ด๋ค gaurantee ๋ฅผ ์ ํํ ๊ฒ์ธ์ง ๋๋ ๋์ ๊ฒ์ด๋ค.
์ฒ์์ ์๊ฐํ๋ 3๊ฐ์ง์ Gaurantee ์ Latency Gaurantee ๋ฅผ ์ถ๊ฐํ์ฌ PACELC ์ด๋ก ์ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ๋ถํ๋ค
- Partition ์ํฉ
- ์ ํ์ง 1. Availability
- ์ ํ์ง 2. Consistency
- Else ์ํฉ
- ์ ํ์ง 1. Latency
- ์ ํ์ง 2. Consistency
์ด๋ฌํ Gaurantee ๋ค์ ํตํด์ ๋ค์ 4๊ฐ์ง ์กฐํฉ(PA/EL
, PA/EC
, PC/EL
, PC/EC
)์ด ๋ง๋ค์ด์ง ์ ์๋๋ฐ, ์ด๋ค์ ํํฐ์
์ด ์กด์ฌํ๋ ์ํฉ์ ๋ฐ๋ผ ๋จผ์ ๊ตฌ๋ถํด๋ณด์
3-1. ํํฐ์ ์ด ๋ฐ์ํ์ ๋ ๊ฐ์ฉ์ฑ์ ์ฐ์ ์ผ๋ก ์๊ฐํ๋ PA System
ํํฐ์ ์ด ๋ฐ์ํ์ ๋, ๊ฐ์ฉ์ฑ์ ์ฐ์ ์ผ๋ก ์๊ฐํ๋ค๋ฉด PA ์์คํ ์ด๋ผ๊ณ ํ๋ค. ์์ ์ค๋ช ํ ๋ฐ๋ก๋ AP System ๊ณผ ๋์ผํ๋ค.
ํน์ ๋ ธ๋๊ฐ ๋น์ ์์ ์ด๋ผ๋ ๋ชจ๋ ์์ฒญ์ ์์ ํ์ฌ ์ต์ข ์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๋ค
๊ทธ ์ธ์ ์ํฉ์์๋ ๋ค์ 2๊ฐ์ง๋ก ๋๋ ์ ์๋ค.
- PA/EL
- PA/EC
PA/EL
PA/EC ์์คํ ์ partition ์ํฉ์์๋ ๊ฐ์ฉ์ฑ์ด ์ค์ํ๊ณ ์ผ๋ฐ์ ์ธ ์ํฉ์์๋ ์๋๊ฐ ์ฐ์ ์ธ ์์คํ ์ด๋ค
๋ํ์ ์ผ๋ก apache cassandra ๋ dynamo ์ ๊ฐ์ ์์คํ ์ด ๊ทธ๋ฌํ๋ค
cassandra ๋ ํดํ ์ด๋ธ ๊ตฌ์กฐ๋ก ์ธ์ ๋ ๋์ผํ๊ฒ ๋ชจ๋ ๋ ธ๋๊ฐ primary ์ด๋ฉฐ secondary ์ด๊ธฐ์ ๊ฐ์ฉ์ฑ๊ณผ ์ฑ๋ฅ(low latency)์ด ๋๋ค.
PA/EC
PA/EC ์์คํ ์ partition ์ํฉ์์๋ ๊ฐ์ฉ์ฑ์ด ์ค์ํ๊ณ ์ผ๋ฐ์ ์ธ ์ํฉ์์๋ ์ผ๊ด์ฑ์ด ์ฐ์ ์ธ ์์คํ ์ด๋ค
๋ํ์ ์ผ๋ก๋ MongoDB ๊ฐ ๊ทธ๋ ๋ค
MongoDB ๋ replication ์ ๋ฐ์ดํฐ ์ฑํฌ๊ฐ ๋น๋๊ธฐ์ ์ผ๋ก ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ secondary ์ ๋ณต์ ๋์ง ์์ ๋ฐ์ดํฐ๊ฐ ์์ค๋ ์ ์์ผ๋ ๊ฐ์ฉ์ฑ์ด ๋๋ค.
ํ์ง๋ง MongoDB ๋ non-locking cosistent read ์ ๋ํ์ ์ธ ๊ธฐ๋ฒ์ธ MVCC ๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ consistency ๋ฅผ ๋ณด์ฅํ ์ ์๋ค
3-2. ํํฐ์ ์ด ๋ฐ์ํ์ ๋ ์ผ๊ด์ฑ์ ์ฐ์ ์ผ๋ก ์๊ฐํ๋ PC System
ํํฐ์ ์ด ๋ฐ์ํ์ ๋, ์ผ๊ด์ฑ์ ์ฐ์ ์ผ๋ก ์๊ฐํ๋ค๋ฉด PC System ์ด๋ผ๊ณ ํ๋ค. ์์ ์ค๋ช ํ ๋ฐ๋ก๋ CP System ๊ณผ ๋์ผํ๋ค.
ํน์ ๋ ธ๋๊ฐ ๋น์ ์์ ์ด๋ผ๋ฉด ์์ฒญ์ block ํ์ฌ ์ผ๊ด์ฑ์ ์ฐ์ ์ผ๋ก ์๊ฐํ๋ค.
๊ทธ ์ธ์ ์ํฉ์์๋ ๋ค์ 2๊ฐ์ง๋ก ๋๋ ์ ์๋ค
- PC/EC
- PC/EL
PC/EC System
PC/EL ์์คํ ์ partition ์ด๋ ๊ทธ ์ธ๋ (else) ๋ชจ๋ Consistency ๊ฐ ๊ฐ์ฅ ์ค์ํ๋ค
ํ์กดํ๋ data storage service ์ค์ RDBMS ๊ฐ ๊ทธ ๋ํ์ ์ธ ์์์ด๋ค.
MySQL ์ด๋ Postgresql ๊ณผ ๊ฐ์ rdb ๋ ACID ๋ฅผ ํตํด ๋ consistent operation ๋ง์ ์ํํ๋ค
PC/EL System
PC/EL System ์ partition ์ธ ์ํฉ์์๋ Consistency ๋ฅผ ์ค์ํ๊ฒ ์๊ฐํ๊ณ ๊ทธ ์ธ์ ์ํฉ์์๋ ์๋๋ฅผ ์ค์ํ๊ฒ ์๊ฐํ๋ค.
์ด ํน์ฑ์ ๊ฐ์ง ์์คํ ์ด ๋ง์ง ์์๋ฐ, ๋ํ์ ์ธ ๊ฒ์ Yahoo ์ PNUTS ๋ผ๋ DBMS ๊ฐ ์๋ค๊ณ ํ๋ค.
๋๊ธ