[SWA] System Design Warmup - 1
๐๏ธ
๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์์คํ ์ ์ค๊ณํ ๋์ ๊ณ ๋ คํด์ผํ ์ฌํญ๋ค์ด ์กด์ฌํ๋ค. ํจ์จ์ ์ด๊ณ ๊ฒฝ์ ์ ์ธ ์์คํ ์ ๊ตฌ์ถํ๊ธฐ ์ํด์ ์ด๋ฌํ ๊ฐ๋ ์ ์ ์๊ณ ์์ด์ผ ํ๋ค. ์ด๋ฌํ ํต์ฌ ๊ตฌ์ฑ ์์๋ ์๋์ ๊ฐ๋ค
-
CAP Theorem
-
PACELC Theorem
-
SQL vs NoSQL
-
Load Balancing
-
Caching
-
Data Partitioning
-
Redundancy & Replication
-
Indexing
-
Proxies
-
Long Polling vs WebSocket vs Server-Sent Event
-
Leader & Follower
-
Quorum
-
Heartbeat
-
Bloom Filter
-
Checksum
-
Consistent Hashing
1. ๋ถ์ฐ ์์คํ ์ ํ์ ๊ณ ๋ ค์ฌํญ
๋ถ์ฐ ์์คํ ์ ํ์ ๊ณ ๋ ค์ฌํญ์ ๋ค์๊ณผ ๊ฐ๋ค
-
ํ์ฅ์ฑ Scalability
- ์ฆ๊ฐํ๋ ์์ ๋์ ์ง์ํ๊ธฐ ์ํด ์ง์์ ์ผ๋ก ํ์ฅ ๊ฐ๋ฅํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ธ์ผ ํ๋ค.
- Storage, Computing, Network ๋ฆฌ์์ค ๋ฑ์ ๋ํด์ ํ์ฅ์ด ๊ฐ๋ฅํด์ผ ํ๋ค.
- ์ผ๋ฐ์ ์ผ๋ก ์์คํ ์ ์ฑ๋ฅ์ ํ์ฅํจ์ ๋ฐ๋ผ ์ฆ๊ฐํ์ง๋ง ๊ด๋ฆฌ/ํ๊ฒฝ์ ์ธ ๋น์ฉ์ผ๋ก ์ฑ๋ฅ์ด ๊ฐ์ํ ์ ์๋ค.(locality ๊ฐ์, N/W ๋ง ๋ถ๋ฆฌ์ ๋ฐ๋ฅธ ์ฑ๋ฅ ์ ํ ๋ฑ)
- ํ์ฅ ๊ฐ๋ฅํ ์ํคํ ์ณ๋ ๊ฐ ์์ ๋ค์ atomic ํ๊ฒ ๋๋ ์ ์์ด์ผ ํ๊ณ , ๋ชจ๋ ๋ ธ๋์ ๋ก๋๋ฅผ ๊ท ๋ฑํ๊ฒ ์กฐ์ ํด์ผ ํ๋ค.
- ์ผ๋ฐ์ ์ผ๋ก ๋ถ์ฐ ์์คํ ์ ํ์ฅ์ฑ์ scale-up์ด ์๋ scale-out์ ์๋ฏธํ๋ค. (scale-up์ downtime์ ๋ณดํต ์ ๋ฐํ๋ค.)
-
์ ๋ขฐ์ฑ Reliability
- HW๋ SW๊ฐ ๊ณ ์ฅ๋๋ ๋น๋๋ ๊ณ ์ฅ๋๋ ๊ธฐ๊ฐ์ ๋ํ๋ด๋ ๊ฐ๋ . ์๋น์ค๊ฐ ์ฌ๋ฐ๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํ ์ ์๋ ๋ฅ๋ ฅ
- ์ผ๋ถ ์์ ์ด ์คํจํ๋๋ผ๋ ํด๋น ์์ ์ ๊ฒฐ๊ตญ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋์ด์ผ ํ๋ค.
- ์๋ฅผ๋ค์ด ์ฌ์ฉ์๊ฐ ์ฅ๋ฐ๊ตฌ๋์ ํญ๋ชฉ์ ์ถ๊ฐํ ๊ฒฝ์ฐ ์์คํ ์ ํด๋น ๋ฐ์ดํฐ๊ฐ ์๊ตฌ์ ์ผ๋ก ์ ์ฅ๋ ๊ฒ์ผ๋ก ์๊ฐํ๋ค. ์ด๋ ๋ฐ์ดํฐ ์ค๋ณต์ ํตํด ๋ฌ์ฑํ ์ ์์ผ๋ฉฐ, ์ฅ๋ฐ๊ตฌ๋ ์ ๋ณด๋ฅผ ๊ฐ์ง ์๋ฒ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ๋ณต์ ๋ณธ์ ํตํด ์ด๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๋ค.
- ์ ๋ขฐํ ์ ์๋ ์์คํ ์ ๋ชจ๋ SPoF๋ฅผ ์ ๊ฑฐํ๊ณ ์๋น์ค์ ๋ํ ๋ณต์๋ ฅresilience๋ฅผ ์ ๊ณตํ๊ธฐ ์ํ ๋น์ฉ์ด ๋ฐ์ํ๋ค.
-
๊ฐ์ฉ์ฑ Availability
- ์ฌ์ฉ์ ์ ์ฅ์์ ์์คํ ์ ์ด๋์ ๋ ์ด์ฉํ ์ ์์ ์ง ๋ํ๋ด๋ ๊ฐ๋ . ์๋น์ค๋ฅผ ์ ๊ณตํ ์ ์๋ ๋ฅ๋ ฅ.
- ์ ๋ขฐ์ฑ์ ๊ฐ์ฉ์ฑ๋ณด๋ค ๋ ๋์ ๋ฒ์๋ก ๋ชจ๋ ์กฐ๊ฑด์์ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌ๋ ์ ์๋ ์๊ฐ์ ์๋ฏธํ๋ค.
- ์์คํ ์ด ์ ๋ขฐ์ฑ์ด ์์ผ๋ฉด ๊ฐ์ฉํ๋, ๊ฐ์ฉ์ฑ์ด ์๋ค๊ณ ํด์ ์ ๋ขฐ์ฑ์ด ์๋ ๊ฒ์ ์๋๋ค. ์ ๋ขฐ์ฑ์ด ๋ฎ์ ์์คํ ์ด๋ผ๊ณ ํ๋๋ผ๋ ์๋น์ค ๋ณต๊ตฌ ์๊ฐ์ ์ต์ํํ๊ณ ๋์ฒด ์๋น์ค๋ฅผ ์ ๊ณตํจ์ผ๋ก์จ ๊ณ ๊ฐ์ฉ์ฑHigh Availability ๋ฅผ ๋ณด์ฅํ ์ ์๋ค.
- ์๋ฅผ ๋ค์ด ๋ฐ๋๋ก, ์ถ์ ํ 2๋ ๋์ ๊ฐ์ฉ์ฑ์ด 99.99% ์ธ ์จ๋ผ์ธ ๋ง์ผ์ด ๋ณ๋์ ๋ณด์ ํ ์คํธ ์์ด ์๋น์ค ๋๊ณ ์๋ ๊ฒฝ์ฐ ์ด๋ ์ ๋ขฐํ ์ ์์ง๋ง ๊ฐ์ฉ์ฑ์ ๋์ ์ํ๊ฐ ๋๋ค. ๋ง์ฝ 3๋ ์ฐจ์ ๋ณด์ ์ฌ๊ณ ๊ฐ ๋ฐ์ํ๊ณ ๋๋ฉด ์ด๋๋ ๊ฐ์ฉ์ฑ๊ณผ ์ ๋ขฐ์ฑ ๋ชจ๋ ๋จ์ด์ง๊ฒ ๋๋ค.
-
ํจ์จ์ฑ Efficiency
- ๋ถ์ฐ ์์คํ
์์์ ํจ์จ์ฑ ์งํ๋ ๋ ๊ฐ์ง๋ก ๋ํ๋ผ ์ ์๋ค.
- ์๋ต์๊ฐresponse time (latency) - ๊ฒฐ๊ณผ๋ฅผ ์ป๊ธฐ ์ํด ์ง์ฐ๋๋ ์๊ฐ
- ์ฒ๋ฆฌ๋throughput(bandwidth) - ๋จ์ ์๊ฐ ๋น ์ฒ๋ฆฌํ ์ ์๋ ๋ฐ์ดํฐ ๋
- ๋ ์ธก์ ๊ฐ์ ๋ค์์ ๋จ์๋น์ฉ์ ์์๋๋ค.
- ์ ์ก๋๋ ๋ฉ์ธ์ง ์ (๋ฉ์ธ์ง ํฌ๊ธฐ์ ๋ฌด๊ด)
- ์ ์ก๋ ๋ฉ์ธ์ง ํฌ๊ธฐ (๋ฉ์ธ์ง ์์ ๋ฌด๊ด)
- ์ผ๋ฐ์ ์ผ๋ก ๋ฉ์ธ์ง ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ถ์ฐ ์์คํ ์ ๋ถ์ํ๋ ๊ฒ์ ์ง๋์น๊ฒ ๋จ์ํ์ฌ ๋ง์ ํน์ฑ๋ค์ ๋์น๊ฒ ๋๋ค. (?)
- ๋ถ์ฐ ์์คํ ์์์ ์ฑ๋ฅ์ ๋ํ ์์ธก์ ๋งค์ฐ ์ด๋ ต์ง๋ง ์ฑ๋ฅ ๊ธฐ์ค์ด ๋๋ ์ถ์ ์น๋ ์ ์ํ ์ ์์ด์ผ ํ๋ค.
- ๋ถ์ฐ ์์คํ
์์์ ํจ์จ์ฑ ์งํ๋ ๋ ๊ฐ์ง๋ก ๋ํ๋ผ ์ ์๋ค.
-
๊ด๋ฆฌ์ฑ Manageability
- ์์คํ ์ ์๋ฆฌํ๊ฑฐ๋ ์ ์ง๋ณด์ ํ ์ ์๋ ๋จ์์ฑ๊ณผ ์๋๋ฅผ ์๋ฏธ
- ๋ชจ๋ํฐ๋ง์ ํตํด ๊ฒฐํจ์ ์กฐ๊ธฐ์ ๋ฐ๊ฒฌํ๊ฑฐ๋, ์๋ํ๋ ์กฐ์น๋ก ์์คํ ๋ค์ด ํ์์ ์ค์ด๋ ๋ฑ์ ๋ฅ๋ ฅ์ ๋งํจ.
2. CAP ์ด๋ก
๋ถ์ฐ ์์คํ ์์๋ ๋ค์ํ ์ ํ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์๋ค. ์๋ฅผ ๋ค์ด ์๋ฒ๊ฐ ์๊ตฌ์ ์ผ๋ก ์ถฉ๋ํ๊ฑฐ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ฑฐ๋ ๋์คํฌ๊ฐ ์์๋์ด ๋ฐ์ดํฐ๊ฐ ์์ค๋๊ฑฐ๋ ๋คํธ์ํฌ ์ฐ๊ฒฐ์ด ๋์ด์ ธ ์์คํ ์ผ๋ถ์ ์ก์ธ์ค ํ ์ ์๊ฒ ๋ ์ ์๋ค. ๋ค์ํ ๋ฆฌ์์ค๋ฅผ ํ์ฉํด์ ์ต๋ํ์ ์ด์ ์ ์ป๊ธฐ ์ํด ์ด๋ป๊ฒ ์์คํ ์ ๋์์ธ ํด์ผ ํ๋์ง ์์๋ณด์
CAP์ด๋ก ์์๋ ๋ถ์ฐ ์์คํ ์ด ๋ค์ ์ธ ๊ฐ์ง ๋ฐ๋์งํ ์์ฑ์ ๋ชจ๋ ๋์์ ์ ๊ณตํ๋๊ฒ์ ๋ถ๊ฐ๋ฅ ํ๋ค๊ณ ํ๋ค. ๋ชจ๋ ๋ถ์ฐ ์์คํ ์ ์ธ๊ฐ์ง ์์ฑ ์ค ๋๊ฐ์ง๋ฅผ ์ ํํด์ผ ํ๋ค.
- ์ผ๊ด์ฑConsistency
- ๋ชจ๋ ๋ ธ๋๊ฐ ๋์์ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ์กฐํ. ์ด๋ ๋ฐ์ดํฐ ์ฌ๋ณธ์ ๊ฐ์ง๋ ๊ฒ๊ณผ ๋์ผ
- ๊ฐ์ฉ์ฑAvailability
- ์์คํ ์ ์คํจํ์ง ์์ ๋ ธ๋๊ฐ ๋ฐ์ ์์ฒญ์ ์๋ต์ ๋ฐ์์ผ ํ๋ค. ์ฌ๊ฐํ ์ฅ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋ ๋ชจ๋ ์์ฒญ์ ์ ์์ ์ผ๋ก ์ข ๋ฃ๋์ด์ผ ํ๋ค.
- ํํฐ์
ํ์ฉPartition tolerance
- ์์คํ ์ ๋ถ๋ถ์ ์ธ ์ค๋ฅ๋ ์์์ ๋ฉ์ธ์ง ์์ค์๋ ์ ์์ ์ผ๋ก ๋์ํด์ผ ํ๋ค. ์์คํ ์ ์ฒด ๋คํธ์ํฌ ์ฅ์ ๊ฐ ์๋ ํ, ๋ชจ๋ ๋คํธ์ํฌ ์ฅ์ ๋ฅผ ๊ฒฌ๋๊ณ ๋ฐ์ดํฐ๋ ์ถฉ๋ถํ ๋ณต์ ๋์ด ์์คํ ์ ์ ์ง๋์ด์ผ ํ๋ค.
ํํฐ์ ํ์ฉ๊ฐ ์๋ ๊ฒฝ์ฐ ๋คํธ์ํฌ ์ฅ์ ์ ๋ํด์ ์ผ๊ด์ฑ/๊ฐ์ฉ์ฑ์ ํฌ๊ธฐํด์ผ ํ๊ธฐ ๋๋ฌธ์ CA๋ ์ผ๊ด๋ ์ต์ ์ด ๋ ์ ์๋ค. ๋ฐ๋ผ์ ์ค์ ๋ถ์ฐ์์คํ ์์๋ CP ๋๋ AP๋ฅผ ์ ํํด์ผ ํ๋ค.
3.PACELC ์ด๋ก
๋ถ์ฐ์์คํ ์ partitioning์ ํผํ ์ ์์์ผ๋ก CAP์ ๋ฐ๋ผ ์ผ๊ด์ฑ ๋๋ ๊ฐ์ฉ์ฑ์ ์ ํํด์ผ ํ๋ค. ACID(Atomicity, Consistency, Isolation, Durability) ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ผ๊ด์ฑ์ ์ ํํ ๋ฐ๋ฉด BASE (Basically Available, Soft-state, Eventually consistency) ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๊ฐ์ฉ์ฑ์ ์ ํํ๋ค. BASE๋ ์ต์ ๋ฐ์ดํฐ๋ฅผ ํ์ธํ์ง ์๊ณ ๋ก์ปฌ ๋ฐ์ดํฐ๋ก ์๋ต์ ์ ๊ณตํ๋ค. PACELC ์ด๋ก ์ ํํฐ์ ๋์ ํ์ง ์์์ ๋์ ์ ํ ๋ฐฉ๋ฒ์ ์ถ๊ฐ๋ก ์ ์ํ๋ค.
- P๊ฐ ์๋ ๋ถ์ฐ ์์คํ ์ A์ C๊ฐ ๊ท ํ์ ๋ง์ถ ์ ์๋ค.
- ๊ทธ๋ ์ง ์์ผ๋ฉด(Else - E) ํํฐ์ ์ด ์๋ ์ํ์์ ์์คํ ์ด ์ ์์ ์ผ๋ก ์คํ๋ ๋ ์์คํ ์ ๋๊ธฐ์๊ฐ(L)๊ณผ ์ผ๊ด์ฑ(C)์ ๊ท ํ์ ๋ง์ถ ์ ์๋ค.
- ๊ฒฐ๊ตญ PAC๋ CAP์ ๋์ผํ๊ณ ELC๋ P๊ฐ ์๋ ๊ฒฝ์ฐ์ ๋ํ ํ์ฅ์ด๋๋ค.
- PACELC์ ์ ์ฒด ๋ ผ๋ฌธ์์๋ ๋ณต์ ๋ฅผ ํตํ ๊ณ ๊ฐ์ฉ์ฑ์ ์ ์งํ๊ฒ ๋๋ค. ๋ฐ๋ผ์ ์คํจ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ ๋ฐ์ํ๋ฉด CAP์ ๋ฆฌ๊ฐ ์ฐ์ ๋๊ณ , ์คํจ๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ์ผ๊ด์ฑ๊ณผ ๋๊ธฐ์๊ฐ ๊ฐ tradeoff๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ค.
์ด์ ๋ํ ์์๋ ์๋์ ๊ฐ๋ค
- Dynamo์ Cassandra๋ PA / EL ์์คํ ์ ๋๋ค. ํํฐ์ ์ด ๋ฐ์ํ ๋ ์ผ๊ด์ฑ๋ณด๋ค ๊ฐ์ฉ์ฑ์ ์ ํํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ฎ์ ์ง์ฐ ์๊ฐ์ ์ ํํฉ๋๋ค.
- BigTable ๋ฐ HBase๋ PC / EC ์์คํ ์ ๋๋ค. ํญ์ ์ผ๊ด์ฑ์ ์ ํํ์ฌ ๊ฐ์ฉ์ฑ์ ํฌ๊ธฐํ๊ณ ์ง์ฐ ์๊ฐ์ ์ค์ ๋๋ค.
- MongoDB๋ PA / EC์ ๋๋ค. ๋คํธ์ํฌ ํํฐ์ ์ ๊ฒฝ์ฐ ๊ฐ์ฉ์ฑ์ ์ ํํ์ง๋ง ๊ทธ๋ ์ง ์์ผ๋ฉด ์ผ๊ด์ฑ์ ๋ณด์ฅํฉ๋๋ค.
4. SQL vs NoSQL
ํ ์์ ์์ ์ผ๋ฐ์ ์ผ๋ก SQL์ด๋ผ๊ณ ์ด์ผ๊ธฐํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค (RDB)๋ฅผ ์๋ฏธํ๋ ๊ฒ์ด๋ฉฐ, NoSQL์ ์ด๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ฅผ ์๋ฏธํ๋ค๊ณ ๋ด๋ ๊ณผ์ธ์ด ์๋๋ค. ์์ CAP์์ RDB์ ํด๋น ํ๋ ๊ฒ์ CA์ด๋ฉฐ, NoSQL์ CP, AP๋ฅผ ์๋ฏธํ๋ค.
4.1 SQL
- ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ๊ณผ ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ
- ๊ฐ ํ์๋ ํ๋์ ํญ๋ชฉ์ ๋ํ ๋ชจ๋ ์ ๋ณด๊ฐ ํฌํจ๋๊ณ ๊ฐ ์ด์๋ ๋ชจ๋ ๊ฐ๋ณ ๋ฐ์ดํฐ ์์๊ฐ ํฌํจ.
- ex) MySQL, Oracle, MS SQL Server, SQLite, Postgres, MariaDB
4.2 NoSQL
- NoSQL์ ํํ์ ๋ฐ๋ผ ์ผ๋ฐ์ ์ผ๋ก ์๋์ ๊ฐ์ด ๊ตฌ๋ถํจ.
- Key-Value : ๋ฐ์ดํฐ๋ key-value ํํ๋ก ์ ์ฅ (Redis, Voldemort, DynamoDB ๋ฑ)
- Document : ๋ฐ์ดํฐ๋ ๋ฌธ์ ํํ๋ก ์ ์ฅ๋๋ฉฐ, ๋ฌธ์๋ collection ํํ๋ก ๊ทธ๋ฃนํ ๋๋ค. ๊ฐ ๋ฌธ์๋ ์ ํด์ง ๊ตฌ์กฐ๊ฐ ์์ผ๋ฉฐ ์๋ก ๋ค๋ฅธ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ์ ์๋ค. (CouchDB, MongoDB ๋ฑ)
- Wide-Column : ํ ์ด๋ธ ๋์ column family๋ฅผ ๊ฐ์ง๊ณ ํ์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค. ๋ชจ๋ column์ ๋ฏธ๋ฆฌ ์ ํ์๊ฐ ์์ผ๋ฉฐ ๊ฐ ํ์ ๋์ผํ ์์ column์ด ์์ ํ์๊ฐ ์๋ค. (Cassandra, HBase ๋ฑ)
- Graph : ๋ฐ์ดํฐ๋ ๋ ธ๋(entity), ์์ฑ(properties) ๋ฐ ์ (line)์ผ๋ก ๊ตฌ์ฑ๋์ด ๊ด๊ณ๋ฅผ ๋ํ๋ธ๋ค. (Neo4J, InfiniteGraph ๋ฑ)
4.3 SQL๊ณผ NoSQL์ ์ฐจ์ด์
1) ์คํค๋ง
- SQL : ๊ฐ ๋ ์ฝ๋๋ ๊ณ ์ ์คํค๋ง๋ฅผ ๋ฐ๋ฆ. row ๋ง๋ค ๊ณ ์ ๋ column ๊ฐ์ ๊ฐ์ ธ์ผํจ
- NoSQL : ์คํค๋ง๊ฐ ๋์ ์ด๋ฉฐ ์ฝ๊ฒ column ์ ์ถ๊ฐํ ์ ์์. row ๋ง๋ค ์๋ก ๋ค๋ฅธ column์ ๊ฐ์ง ์ ์์.
2) ์ฟผ๋ฆฌ
- SQL : ๋ฐ์ดํฐ๋ฅผ ์ ์ํ๊ณ ์กฐ์ํ๋๋ฐ ๊ฐ๋ ฅํ SQL์ ์ฌ์ฉ
- NoSQL : ์ข ๋ฅ์ ๋ฐ๋ผ ์ ๊ณตํ๊ณ ์๋ ๊ธฐ๋ฅ์ด ์ ๋ถ ๋ค๋ฆ
- ํ์ฅ์ฑ
- SQL : ์ผ๋ฐ์ ์ผ๋ก scale-up์ ํตํด์ ํ์ฅ ๊ฐ๋ฅ. partitioning์ ํตํด์ ํ์ฅ ๊ฐ๋ฅ
- NoSQL : scale-out์ด ๊ฐ๋ฅํจ์ผ๋ก ์๋ฒ๋ฅผ ์ถ๊ฐํด์ ์ฝ๊ฒ ๋ถํ๋ถ์ฐ์ ํ ์ ์์
- ์ ๋ขฐ์ฑ / ACID
- SQL : ์ผ๋ฐ์ ์ผ๋ก RDBMS ๋ ACID๋ฅผ ๋ณด์ฅํจ. ์์ ์ฑ๊ณผ ํธ๋์ญ์ ์ฒ๋ฆฌ๋ ๋ ์ข์
- NoSQL : ์ฑ๋ฅ๊ณผ ํ์ฅ์ฑ์ ์ํด์ ACID๋ฅผ ๋ถ๋ถ์ ์ผ๋ก ํฌ์ํ๋ค.
4.4 ์ ์ ํ DBMS์ ์ ํ
์ธ์์ ๋ชจ๋ ๊ฒ์ ๊ณ ์น๋ ๋ง๋ณํต์น์ฝ์ด ์์ง ๊ฐ๋ฐ๋์ง ์์๋ฏ, ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๊ธฐ์ ๋ ๋ชจ๋ ๊ฒ์ ๋ง์กฑ์ํฌ ์๋ ์๋ค. ๋ฐ๋ผ์ ์์คํ ์ ์๊ตฌ์ฌํญ์ ํ์ธํ๊ณ ์ฌ๋ฐ๋ฅธ ๊ธฐ์ ์ ์ ํํด์ผ ํ๋ค.
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ํํด์ผ ํ๋ ๊ฒฝ์ฐ
- ACID๊ฐ ๋ณด์ฅ๋์ด์ผ ํ๋ ๊ฒฝ์ฐ.
- ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ํ๋ฒ ์ ์๋๋ฉด ๋ณ๊ฒฝ๋์ง ์์ ๊ฒฝ์ฐ.
- ๋๊ท๋ชจ ๋ฐ์ดํฐ๊ฐ ์ ์ฌ๋์ง ์์ผ๋ฉฐ ์ผ๊ด๋ ๋ฐ์ดํฐ ๋์ผ๋ก ์์ ๋์ด์ผ ํ๋ ๊ฒฝ์ฐ
NoSQL์ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ
- ๋น ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๋ ๊ฒฝ์ฐ. ์ฌ๊ธฐ์์ ๋น ๋ฐ์ดํฐ๋ ๋์ฉ๋์ ๋ฐ์ดํฐ๋ฅผ ์๋ฏธํ ์๋ ๋งค์ฐ ๋น ๋ฅด๊ฒ ๋ค์ด์ค๋ ํธ๋์ญ์ ์ด ๋ ์๋ ์๋ค.
- ๋งค์ฐ ๋น ๋ฅธ ํธ๋์ญ์ ์ ์ฒ๋ฆฌํด์ผ ํ๋ ๊ฒฝ์ฐ(MongoDB, CouchDB, Cassandra, HBase ๋ฑ)
- ์คํค๋ง๊ฐ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋๋์ผ๋ก ์ ์ฅํ๋ ๊ฒฝ์ฐ.
- ํด๋ผ์ฐ๋ ์คํ ๋ฆฌ์ง ๋ฐ ์ปดํจํ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฒฝ์ฐ. scale-out์ ํตํด ํ์ฅํ ์ ์๊ธฐ ๋๋ฌธ์ NoSQL์ ์ฌ์ฉ.
- ๋น ๋ฅด๊ฒ ๊ฐ๋ฐ์ ํด์ผํ๋ ๊ฒฝ์ฐ
5. Load Balancing
๋ก๋ ๋ฐธ๋ฐ์ (LB)๋ ์๋ฒ ๋ฐ DB์ ๋ํ ์๋ต์ฑ๊ณผ ๊ฐ์ฉ์ฑ์ ํฅ์์ํค๊ธฐ ์ํด ์ฌ์ฉ๋จ. ๋ค์ํ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ๋ฐธ๋ฐ์ฑ ๋์์๊ฒ ํจ์จ์ ์ผ๋ก ํธ๋ํฝ์ ๋ถ์ฐํด์ฃผ๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก client์ server ์ฌ์ด์ ๋์ฌ์ ์ฒ๋ฆฌ๊ฐ ๋จ.
์์ ํ ํ์ฅ์ฑ๊ณผ ์ค๋ณต์ฑ์ ํ์ฉํ๊ธฐ ์ํด ์์คํ ์ ๊ฐ ๊ณ์ธต์ LB๋ฅผ ๋ ์ ์์
- ์ฌ์ฉ์์ web-server ์ฌ์ด
- web-server์ application ์๋ฒ ๋๋ cache ์๋ฒ์ ๊ฐ์ ๋ด๋ถ ํ๋ซํผ ๊ณ์ธต ์ฌ์ด
- ๋ด๋ถ ํ๋ซํผ ๊ณ์ธต๊ณผ DB ์ฌ์ด
LB๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๊ฐ์ฉ์ฑ(์ผ๋ถ๊ฐ ์ฅ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋ ์ฌ์ฉ ๊ฐ๋ฅํ ์๋ฒ๋ก ์ฐ๊ฒฐ), ์๋ต์ฑ(์ฌ๋ฌ ์๋ฒ๊ฐ ๋๋ ์ ์์ฒญ์ ๋ฐ์), ์ฒ๋ฆฌ๋ ์ฆ๊ฐ(์ฌ๋ฌ ์๋ฒ์ ์ปดํจํ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉ)ํ๋ ์ฅ์ ์ด ์์.
LB์์ ์ ๊ณต๋๋ ์๊ณ ๋ฆฌ์ฆ
-
Health check - LB๋ ๊ฐ ์๋ฒ์ ์ํ๋ฅผ ํ์ธํ์ฌ ์ ์์ผ๋ก ์ํ๋๋ ๋ฐฑ์๋ ์๋ฒ๋ก ํธ๋ํฝ์ ์ ๋ฌํจ. ๋ฐฑ์๋ ์๋ฒ์ ์ํ๋ฅผ ๋ชจ๋ํฐ๋ง ํ๊ธฐ ์ํด ์ฃผ๊ธฐ์ ์ผ๋ก ์ฐ๊ฒฐ์ ์๋ํจ. ์ํ ํ์ธ์ ์คํจํ๋ฉด ์๋น์ค ๋์์์ ์ ๊ฑฐํ๊ณ ์ํ ํ์ธ์ ๋ค์ ์๋ต ํ๊ธฐ ์ ๊น์ง ํธ๋ํฝ์ด ์ ๋ฌ๋์ง ์์
-
์ต์์ฐ๊ฒฐ๋ฒ Least Connection - ํ์ฑ ์ฐ๊ฒฐ์ด ๊ฐ์ฅ ์ ์ ์๋ฒ๋ก ํธ๋ํฝ์ ์ ๋ฌ. ์ด ๋ฐฉ์์ ์๋ฒ๊ฐ ๊ณ ๋ฅด์ง ์๊ฒ ๋ถ์ฐ๋ ์๊ตฌ์ ์ธpersistent client ์ฐ๊ฒฐ์ด ๋ง์ ๊ฒฝ์ฐ ์ ์ฉํจ.
-
์ต์์๋ต์๊ฐ๋ฒ Least Response Time - ํ์ฑ์ฐ๊ฒฐ์ด ๊ฐ์ฅ ์ ๊ณ ํ๊ท ์๋ต์ด ๊ฐ์ฅ ๋ฎ์ ์๋ฒ๋ก ํธ๋ํฝ์ ๋ณด๋
-
์ต์ ๋์ญํญ Least Bandwith - ์ด๋น ๋ฉ๊ฐ ๋นํธ๋ก ์ธก์ ๋ ์ต์ ํธ๋ํฝ ์์ ์ ๊ณตํ๋ ์๋ฒ๋ฅผ ์ ํ
-
๋ผ์ด๋ ๋ก๋น Round Robin - ์๋ฒ ๋ชฉ๋ก์ ์ํํ๊ณ ๊ฐ๊ฐ์ ์ ์์ฒญ์ ๋ค์ ์๋ฒ๋ก ๋ณด๋. ๋ชฉ๋ก ๋์ ๋๋ฌํ๋ฉด ์ฒ์๋ถํฐ ๋ค์ ์์.
-
๊ฐ์ค ๋ผ์ด๋ ๋ก๋น Weighted Round Robin - ๊ฐ ์๋ฒ์ ์ฌ์์ด ๋ค๋ฅผ ๋ ํด๋น ์ฌ์์ ๋ง์ถฐ ์์ฒญ์ ๋ณด๋ด๊ธฐ ์ํด์ ๊ณ ์๋จ.
-
IP hash - ํด๋ผ์ด์ธํธ IP์ฃผ์์ ํด์ ๊ฐ์ ๊ตฌํด ํด์ ํ ์ด๋ธ์ ์์ํ๋ ์๋ฒ๋ก ์ฐ๊ฒฐํด ์ค.
LB ์์ฒด๊ฐ SPoF๊ฐ ๋ ์ ์์. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ LB๋ฅผ ํด๋ฌ์คํฐ๋ก ๊ตฌ์ฑํ ์ ์์. LB๋ ๋ค๋ฅธ LB์ ์ํ๋ฅผ ๋ชจ๋ํฐ๋งํ๊ณ ๋ LB ๋ชจ๋ ํธ๋ํฝ ๋ฐ ์ฅ์ ๊ฐ์ง๋ฅผ ๋๋ฑํ๊ฒ ์ ๊ณตํด์ค ์ ์์์ผ๋ก primary LB๊ฐ ์คํจํ๋ฉด secondary LB๊ฐ ๋์ํ๊ฒ ๋จ
6. Caching
LB๋ scale-out์ ํตํ ํ์ฅ์์ ์ฌ์ฉ๋๋ฉด์ ์ฑ๋ฅ ๊ฐ์ ์ ๋์์ ์ฃผ์ง๋ง, ์บ์ฑcaching์ ์ฌ์ฉํ๋ฉด ์ด๋ฏธ ๋ณด์ ํ ๋ฆฌ์์ค๋ฅผ ํจ์ฌ ๋ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ผ๋ฉฐ LB๋ฅผ ํตํด ์ ๊ณต๋ ์ ์๋ ์์ค์ ์ฑ๋ฅํฅ์์ ์ ๊ณตํด ์ค ์ ์๋ค.
์บ์๋ ์ฐธ์กฐ ์์น์ ์ง์ญ์ฑ์ ํ์ฉํ๋๋ฐ ์ต๊ทผ ์์ฒญ ๋ ๋ฐ์ดํฐ๋ ๋ค์ ์์ฒญ ๋ ๊ฐ๋ฅ์ฑ์ ํน์ฑ์ ์ด์ฉํ๋ ๊ฒ์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก ํ๋ ํ ๋ฒ์น์ ๋ฐ๋ผ ์ฝ 20%์ ๋ฐ์ดํฐ๋ฅผ ์บ์ํจ์ผ๋ก์ ์ ์ฒด 80%์ ํธ๋ํฝ์์ ์บ์ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ ์ ์๋ค. ์บ์๋ ๋ชจ๋ ์ปดํจํ ๊ณ์ธต์์ ์ฌ์ฉ๋๋ค. (HW, ์ด์ ์ฒด์ , ์น ๋ธ๋ผ์ฐ์ , ์น ์ ํ๋ฆฌ์ผ์ด์ ๋ฑ)
์บ์๋ ์ํคํ ์ฒ์ ๋ชจ๋ ์์ค์ ์กด์ฌํ ์ ์์ง๋ง ์ข ์ข ํ๋ฐํธ ์๋์ ๊ฐ์ฅ ๊ฐ๊น์ด ์์ค์์ ๋ฐ๊ฒฌ๋๋ฉฐ ๋ค์ด ์คํธ๋ฆผ ์์ค์ ๋ถ๋ด์์ฃผ์ง ์๊ณ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ๋ฐํํ๋๋ก ๊ตฌํ๋๋ค.
App ์๋ฒ ์บ์
์์ฒญ ๊ณ์ธต ๋ ธ๋์ ์ง์ ์บ์๋ฅผ ๋ฐฐ์นํ๋ฉด ์์ฒญ ๋ฐ์ดํฐ์ ๋ํ ์๋ต์ด ๋ก์ปฌ ์ ์ฅ์๋ฅผ ์ฐธ์กฐํ์ฌ ์ฒ๋ฆฌ๋๋ค. ์์ฒญ ๊ณ์ธต ๋ ธ๋์ ์บ์๋ ๋ฉ๋ชจ๋ฆฌ (๋งค์ฐ ๋น ๋ฆ)์ ๋ ธ๋์ ๋ก์ปฌ ๋์คํฌ (๋คํธ์ํฌ ์คํ ๋ฆฌ์ง๋ก ์ด๋ํ๋ ๊ฒ๋ณด๋ค ๋น ๋ฆ) ๋ชจ๋์ ์์นํ ์ ์๋ค.
- cache-hit : ์๋น์ค๊ฐ ์์ฒญ๋ ๋๋ง๋ค ์บ์๋ฅผ ํ์ธํ์ฌ ์์ฒญํ ๋ฐ์ดํฐ๊ฐ ์บ์์ ์๋ ๊ฒฝ์ฐ ์บ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ก ๋ฐํ
- cache-miss : ์์ฒญํ ๋ฐ์ดํฐ๊ฐ ์บ์์ ์์ผ๋ฉด ์์ฒญ ๋ ธ๋๊ฐ ๋์คํฌ/์ธ๋ถ ์๋น์ค์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ด
์์ฒญ ๋ ์ด์ด๊ฐ ์ฌ๋ฌ ๋ ธ๋๋ก ํ์ฅ ๋ ๊ฒฝ์ฐ์๋ ๊ฐ ๋ ธ๋๊ฐ ์์ฒด ์บ์๋ฅผ ๊ฐ์ง ์ ์๋ค. ๊ทธ๋ฌ๋ LB์ ์ํด ์์ฒญ์ด ๋ฌด์์๋ก ๋ถ์ฐ๋๋ฉด ๋์ผํ ์์ฒญ์ด ๋ค๋ฅธ ๋ ธ๋๋ก ์ด๋ํจ์ผ๋ก ๋ก์ปฌ ์บ์์ ํจ๋ ฅ์ด ์ฝํด์ง๋ค ๋ฐ๋ผ์ ์ด๋ฅผ ์ํด์ ์๋์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์ฒ๋ฆฌํ๋ค.
- ์ ์ญ ์บ์global cache
- ๋ถ์ฐ ์บ์distributed cache
CDN (Content Delivery Network)
CDN์ ๋ง์ ์์ ์ ์ ๋ฏธ๋์ด(image, videos, file ๋ฑ) ๋ฅผ ์ ๊ณตํ๋ ์๋น์ค์์ ์ฌ์ฉํ๋ ์บ์๋ก, ์ผ๋ฐ์ ์ธ CDN ์ค์ ์์ ์์ฒญ์ ๋จผ์ CDN์ ์ ์ ๋ฏธ๋์ด๋ฅผ ์์ฒญํ๋ค.
- cache-hit : CDN์ ํด๋น ์ฝํ ์ธ ๋ฅผ ๋ก์ปฌ์์ ์ฌ์ฉํ ์์๋ ๊ฒฝ์ฐ ์ ๊ณต
- cache-miss : ์ฌ์ฉํ ์์๋ ๊ฒฝ์ฐ CDN์ ๋ฐฑ์๋ ์๋ฒ์ ํ์ผ์ ์ฟผ๋ฆฌํ๊ณ ๋ก์ปฌ์ ์บ์ ํ ๋ค์ ์์ฒญํ๋ ์ฌ์ฉ์์๊ฒ ์ ๊ณต.
์์คํ ์ด ์์ฒด CDN์ ๊ฐ์ง๋งํผ ์ถฉ๋ถํ ํฌ์ง ์์ ๊ฒฝ์ฐ Nginx์ ๊ฐ์ ๊ฒฝ๋ HTTP ์๋ฒ๋ฅผ ์ฌ์ฉํ์ฌ ๋ณ๋์ ํ์ ๋๋ฉ์ธ (์ : static.yourservice.com)์์ ์ ์ ๋ฏธ๋์ด๋ฅผ ์ ๊ณตํ์ฌ ํฅํ CDN์ผ๋ก ์ฝ๊ฒ ์ ํํ ์ ์๋ฐ.
์บ์ ๋ฌดํจํ Cache Invalidation
์บ์ฑ์ ์ฑ๋ฅ์ ํฅ์์์ผ์ฃผ์ง๋ง ์๋ณธ ๋ฐ์ดํฐ (ex. DB์ ์ ์ฅ๋์ด ์๋ ๋ฐ์ดํฐ)์ ์ผ๊ด์ฑ์๊ฒ ์ ์งํ๊ธฐ ์ํด ์ ์ง๊ด๋ฆฌ๊ฐ ํ์ํ๋ค. ๋ฐ์ดํฐ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์์ ๋๋ฉด ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ด ๊นจ์ ธ App์ด ์ค์๋ํ ์ ์๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ ์บ์ ๋ฌดํจํ๋ผ๊ณ ํ๋ค.
์ฃผ๋ก ์ฌ์ฉ๋๋ ์ธ ๊ฐ์ง ์ฃผ์ ์ฒด๊ณ๊ฐ ์๋ค.
- Write-through ์บ์ : ๋ฐ์ดํฐ๊ฐ ์บ์์ ์ DB(์๋ณธ ๋ฐ์ดํฐ)๊ฐ ์ ๋์์ ๊ธฐ๋ก๋จ. ์์ ํ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ๊ฐ๊ฒ๋๋ ๋ชจ๋ ์ฐ๊ธฐ์์ ์ ์บ์์ DB ๋๋ฒ ์ํํด์ผ ํจ์ผ๋ก write ์์ ์ ๋ํ ์ฑ๋ฅ์ด ์ ํ๋๋ค.
- Write-around ์บ์ : write-through ์บ์์ ์ ์ฌํ์ง๋ง ๋ฐ์ดํฐ๋ ์บ์์ ์ฐ์ด์ง ์๊ณ DB(์๋ณธ ๋ฐ์ดํฐ)์ ์ง์ ๊ธฐ๋กํ๊ณ , ๋์ค์ ์ฝ๊ธฐ ์์ฒญ์ด ๋ค์ด์์ ๋ ๋ฐ์ดํฐ๊ฐ ์บ์์ ์๋ค๋ฉด DB์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ์บ์์ ๊ธฐ๋กํ๊ฒ ๋๋ค. ์ด๋ ์ต๊ทผ์ ์ด ๋ฐ์ดํฐ์ ๋ํ ์ฝ๊ธฐ ์์ฒญ์ด “cache-miss"๋ฅผ ์์ฑํ๊ณ read ์์ ์์ ๋ ๋์ ์ง์ฐ์ด ๋ฐ์ํ๊ฒ ๋๋ค.
- Write-back ์บ์ :๋ฐ์ดํฐ๊ฐ ์บ์์๋ง ๊ธฐ๋ก๋๊ณ ํด๋ผ์ด์ธํธ์ ์ฆ์ ์๋ฃ๊ฐ ํ์ธ๋๋ค. DB(์๋ณธ ๋ฐ์ดํฐ)์ ๋ํ ์ฐ๊ธฐ๋ ์ง์ ๋ ๊ฐ๊ฒฉ ํ์ ๋๋ ํน์ ์กฐ๊ฑด์์ ์ํ๋๋ค. write-heavy์ธ ์๋น์ค์์ ์งง์ ์ง์ฐ ์๊ฐ๊ณผ ๋์ ์ฒ๋ฆฌ๋์ด ์ ๊ณต๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ธฐ๋ก ๋ ๋ฐ์ดํฐ์ ์ ์ผํ ๋ณต์ฌ๋ณธ์ด ์บ์์ ์๊ธฐ ๋๋ฌธ์ ์ถฉ๋ ๋๋ ๋ฐ์ดํฐ ์์ค ์ํ์ด ์๋ค.
์บ์ ์ ๊ฑฐ ์ ์ฑ Cache eviction policies
๋ค์์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์บ์ ์ ๊ฑฐ ์ ์ฑ ์ด๋ค.
- FIFO (First In First Out) : ์บ์๋ ์ด์ ์ ์ก์ธ์ค ํ ๋น๋ ๋๋ ํ์์ ๊ด๊ณ์์ด ๋จผ์ ์ก์ธ์ค ํ ์ฒซ ๋ฒ์งธ ๋ธ๋ก์ ์ ๊ฑฐ
- LIFO (Last In First Out) : ์บ์๋ ์ด์ ์ ์ก์ธ์ค ํ ๋น๋ ๋๋ ํ์์ ๊ด๊ณ์์ด ๊ฐ์ฅ ์ต๊ทผ์ ์ก์ธ์ค ํ ๋ธ๋ก์ ๋จผ์ ์ ๊ฑฐ
- LRU(Least Recentlry Used) : ๊ฐ์ฅ ์ ๊ฒ ์ฌ์ฉ๋ ํญ๋ชฉ์ ๋จผ์ ์ ๊ฑฐ
- MRU(Most Recently Used) : LRU์ ๋ฌ๋ฆฌ ๊ฐ์ฅ ์ต๊ทผ์ ๋ง์ด ์ฌ์ฉํ ํญ๋ชฉ์ ๋จผ์ ์ ๊ฑฐ
- LFU (Least Frequently Used) : ํญ๋ชฉ์ด ํ์ํ ๋น๋๋ฅผ ๊ณ์ฐํฉ๋๋ค. ์์ฃผ ์ฌ์ฉ๋์ง ์๋ ํญ๋ชฉ์ด ๋จผ์ ์ ๊ฑฐ
- RR(Random Replacement) : ํ๋ณด ํญ๋ชฉ์ ๋ฌด์์๋ก ์ ํํ๊ณ ํ์ํ ๋ ๊ณต๊ฐ์ ํ๋ณดํ๊ธฐ ์ํด ์ ๊ฑฐ