๐ฆ 12. System design & Scalability
12. System design & Scalability
๋ฌธ์ ๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ
- ์ํตํ๋ผ
- ์ฒ์์๋ ํฌ๊ด์ ์ผ๋ก ์ ๊ทผํ๋ผ
- ํ์ดํธ๋ณด๋๋ฅผ ์ฌ์ฉํ๋ผ
- ๋ฉด์ ๊ด์ด ์ฐ๋ คํ๋ ๋ถ๋ถ์ ์ธ์ ํ๋ผ
- ๊ฐ์ ์ ํ ๋ ์ฃผ์ํ๋ผ
- ์ฌ๋ฌ๋ถ์ด ์๊ฐํ๋ ๊ฐ์ ์ ๋ช ํํ ์ธ๊ธํ๋ผ
- ํ์ํ๋ค๋ฉด ์ด๋ฆผ์ก์ ๋ณด๋ผ
- ๋ฐ์ด๋ค๋ผ
์ต๊ณ ์ ์ค๊ณ๋ฅผ ํด๋ด๋ ๊ฒ๋ณด๋ค ๋๊ฒ ๊ทธ ๊ณผ์ ์ ์ค์ํ๊ฒ ๋ณธ๋ค
์์คํ ์ค๊ณ: ๋จ๊ณ์ ์ ๊ทผ๋ฒ
TinyURL ๊ณผ ๊ฐ์ ์์คํ ์ค๊ณ์์, ์ค์ ์ค๊ณ์ ๋ค์ด๊ฐ๊ธฐ์ ํ๊ณ ์ถ์ ์ง๋ฌธ์ด ๋ง์ ๊ฒ์ด๋ค.
๋ฉด์ ์์๋ ์ด๋ฐ ๋ฐฉ์์ผ๋ก ๋ฌธ์ ์ ์ ๊ทผํด์ผ ํ๋ค.
1๋จ๊ณ: ๋ฌธ์ ์ ๋ฒ์๋ฅผ ์ค์ ํ๋ผ
๋ง๋ค๊ณ ์ ํ๋ ์์คํ ๊ณผ ๋ฉด์ ๊ด์ด ์ํ๋ ๊ฒ์ด ๊ฐ์์ง ํ์คํ ํ๊ธฐ ์ํด ๋ฌธ์ ์ ๋ฒ์๋ฅผ ํ์ ํด๋ผ
์๋ฅผ ๋ค์ด TinyURL ์ ์๋ง๋ ๋ค์๊ณผ ๊ฐ์ ํน์ง์ด ์๋ค.
- URL์ TinyURL๋ก ์ถ์ฝ
- URL์ ๋ถ์
- TinyURL๊ณผ ์ฐ๊ฒฐ๋ URL์ ๊ฒ์
- ์ฌ์ฉ์ ๊ณ์ ๋ฐ ๋งํฌ ๊ด๋ฆฌ
2๋จ๊ณ: ํฉ๋ฆฌ์ ์ธ ๊ฐ์ ์ ๋ง๋ค์ด๋ผ
ํ์ํ๋ค๋ฉด ๊ฐ์ ์ ์ธ์ฐ๋ ๊ฒ๋ ๊ด์ฐฎ์ง๋ง, ํฉ๋นํด์ผ ํ๋ค.
์ด๋ฐ ๊ฐ์ ์ ํตํด ์ผ๋ง๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด์ผ ํ๋์ง ๊ณ์ฐํด ๋ณผ ์ ์๋ค.
์ด๋ค ๊ฐ์ ์ ์ธ์ฐ๋ ค๋ฉด ์ ํ์ ๋ํ ๊ฐ์ด ์์ด์ผ ํ ์๋ ์๋ค.
3๋จ๊ณ: ์ค์ํ ๋ถ๋ถ์ ๋จผ์ ๊ทธ๋ ค๋ผ
์์คํ ์ ์ฃผ์ํ ๋ถ๋ถ์ ๋ค์ด์ด๊ทธ๋จ์ผ๋ก ๊ทธ๋ ค๋ผ.
๊ทธ ์์คํ ์ด ์ด๋ป๊ฒ ์๊ฒผ๋์ง ๊ทธ๋ฆผ์ผ๋ก ๊ทธ๋ ค๋ผ.
์์คํ ์ ์ฒ์๋ถํฐ ๋ง์ง๋ง๊น์ง ์ด๋ป๊ฒ ๋์ํ๋์ง ๊ทธ ํ๋ฆ์ ๋ณด์ด๋ผ
4๋จ๊ณ: ํต์ฌ ๋ฌธ์ ์ ์ ์ฐพ์ผ๋ผ
๊ธฐ๋ณธ์ ์ธ ์ค๊ณ๋ฅผ ๋ง์น ๋ค์๋ ๋ฐ์ํ ์ ์๋ ํต์ฌ ๋ฌธ์ ์ ์ง์คํด์ผ ํ๋ค.
์ด๋ค URL์ ๋๋ฌผ๊ฒ ์ฌ์ฉ๋๋ ๋ฐ๋ฉด ํน์ ํ URL์ ์ฌ์ฉ๋์ด ๊ฐ์๊ธฐ ์น์๋ ๊ฒฝ์ฐ๊ฐ ์์ ์๋ ์๋ค.
5๋จ๊ณ: ํต์ฌ ๋ฌธ์ ์ ์ ํด๊ฒฐํ ์ ์๋๋ก ๋ค์ ์ค๊ณํ๋ผ
ํต์ฌ ๋ฌธ์ ๊ฐ ๋ฌด์์ธ์ง ์์๋๋ค๋ฉด ์ด์ ๋ ๊ทธ์ ๋ง๊ฒ ์ฌ๋ฌ๋ถ์ ์ค๊ณ๋ฅผ ์์ ํด์ผ ํ๋ค.
์์ ๊ทธ๋ฆฐ ๋ค์ด์ด๊ทธ๋จ์ ๋ฐ๋ ์ค๊ณ์ ๋ง๊ฒ ์์ ํ๋ผ
๊ท๋ชจ ํ์ฅ์ ์ํ ์๊ณ ๋ฆฌ์ฆ: ๋จ๊ณ๋ณ ์ ๊ทผ๋ฒ
์์คํ ์ ์ฒด๊ฐ ์๋ ์์คํ ์ ํ ๋ถ๋ถ ํน์ ์๊ณ ๋ฆฌ์ฆ์ ์ค๊ณํด ๋ณด๋ผ๋ ์์ฒญ์ ๋ฐ์ ์๋ ์๋ค.
์ด๋๋ ๋ฐ๋์ ๊ท๋ชจ ํ์ฅ์ฑ์ ์ ๊ฒฝ ์จ์ผ ํ๋ค.
1๋จ๊ณ: ์ง๋ฌธํ๋ผ
๋ฌธ์ ๋ฅผ ์ ๋๋ก ์ดํดํ๋์ง ํ์ธํ๊ธฐ ์ํ ์ง๋ฌธ ์๊ฐ์ด ํ์ํ๋ค
2๋จ๊ณ: ํ์ค์ ์ ์ฝ์ ๋ฌด์ํ๋ผ
๋ฉ๋ชจ๋ฆฌ ์ ์ฝ์ด ์๊ณ , ์ปดํจํฐ ํ ๋์์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค ์ฒ๋ฆฌํ ์ ์๋ค๊ณ ๊ฐ์ ํด๋ณด๋ผ
3๋จ๊ณ: ํ์ค๋ก ๋์์ค๋ผ
๋ค์ ์๋ ๋ฌธ์ ๋ก ๋์์์ ์ปดํจํฐ ํ ๋์ ์ ์ฅํ ์ ์๋ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๋ ์ผ๋ง๋ ๋๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ์กฐ๊ฐ์ผ๋ก ์ชผ๊ฐฐ์ ๋ ์ด๋ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ง ์๊ฐํด ๋ณด๋ผ.
4๋จ๊ณ: ๋ฌธ์ ๋ฅผ ํ์ด๋ผ
๋ฐ๊ฒฌํ ๋ฌธ์ ์ ๋ค์ ์ด๋ป๊ฒ ํด๊ฒฐํ ์ง ์๊ฐํด ๋ณด์ผ ํ๋ค.
์ํ์ ์ ๊ทผ๋ฒ์ด ์ผ๋ฐ์ ์ผ๋ก ์ ์ฉํ๋ค.
์ด๋ค ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ฉด, ๋ ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ณ , ๊ทธ ๋ฌธ์ ๋ฅผ ๋ค์ ํด๊ฒฐํด ๋๊ฐ๊ณ ๋ฅผ ๋ฐ๋ณตํ๋ ์์ ์ด๋ค.
์์คํ ์ค๊ณ์ ํต์ฌ ๊ฐ๋
์ํ์ (horizontal) vs. ์์ง์ (vertical) ๊ท๋ชจ ํ์ฅ
- ์์ง์ ๊ท๋ชจ ํ์ฅ: ํน์ ๋ ธ๋์ ์์์ ์์ ๋๋ฆฌ๋ ๋ฐฉ๋ฒ (์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ ์ถ๊ฐ)
- ์ํ์ ๊ท๋ชจ ํ์ฅ: ๋ ธ๋์ ๊ฐ์๋ฅผ ๋๋ฆฌ๋ ๋ฐฉ๋ฒ (์๋ฒ๋ฅผ ์ถ๊ฐ โ ๋ถํ๋ฅผ ์ค์)
์๋ฒ ๋ถํ ๋ถ์ฐ ์ฅ์น(load balancer)
์๋ฒ์ ๊ฑธ๋ฆฌ๋ ๋ถํ๋ฅผ ์ฌ๋ฌ ๋์ ์๋ฒ์ ๊ท ์ผํ๊ฒ ๋ถ์ฐ์ํฌ ์ ์๊ณ ์๋ฒ ํ ๋ ๋๋ฌธ์ ์ ์ฒด ์์คํ ์ด ์ฃฝ๊ฑฐ๋ ๋ค์ด๋๋ ์ํฉ์ ๋ฐฉ์งํ ์ ์๋ค
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ญ์ ๊ทํ(denormalization)์ NoSQL
RDB์ join ์ฐ์ฐ์ ์์คํ ์ด ์ปค์ง์๋ก ๊ต์ฅํ ๋๋ ค์ง๋ค.
์ญ์ ๊ทํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฌ๋ถ์ ์ ๋ณด๋ฅผ ์ถ๊ฐํด์ ์ฝ๊ธฐ ์ฐ์ฐ ์๋๋ฅผ ํฅ์์ํจ๋ค.
๋ ํ ์ด๋ธ์ ์กฐ์ธํ๊ธฐ๋ณด๋จ ์ ๋ณด๋ฅผ ์ถ๊ฐ๋ก ์ ์ฅํด ๋ ๋น ๋ฅด๊ฒ ์์ ์ ์ํํ ์ ์๋ค.
NoSQL์ join ์ฐ์ฐ ์์ฒด๊ฐ ์์ด ๊ท๋ชจ ํ์ฅ์ฑ์ด ์ข๋๋ก ์ค๊ณ๋์ด ์๋ค
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ถํ (์ค๋ฉ)
์ค๋ฉ(sharding)์ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ์ปดํจํฐ์ ๋๋ ์ ์ ์ฅํ๋ ๋์์
์ด๋ค ๋ฐ์ดํฐ๊ฐ ์ด๋ค ์ปดํจํฐ์ ์ ์ฅ๋์ด ์๋์ง ์ ์ ์๋ ๋ฐฉ์์ด๋ค.
- ์์ง์ ๋ถํ : ์๋ฃ์ ํน์ฑ๋ณ๋ก ๋ถํ ํ๋ ๋ฐฉ์, ํน์ ํ ์ด๋ธ์ ํฌ๊ธฐ๊ฐ ์ผ์ ์์ค ์ด์์ด ๋๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์ฌ๋ถํ ํด์ผ ํ ์๋ ์๋ค.
- ํค or ํด์ ๊ธฐ๋ฐ ๋ถํ :
mod(key, n)
์ ๊ฐ์ N๊ฐ์ ์๋ฒ์ ๋ถํ ์ ์ฅํ๋ค. ๋จ ์๋ฒ์ ๊ฐ์๊ฐ ์ฌ์ค์ ๊ณ ์ ๋์ด ์์ด์ผ ํ๋ค. ์๋ฒ๋ฅผ ์๋ก ์ถ๊ฐํ ๋ ๋ง๋ค ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ์ฌ๋ถ๋ฐฐํด์ผ ํ๋ค. - ๋๋ ํฐ๋ฆฌ ๊ธฐ๋ฐ ๋ถํ : ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ๋ ์ฌ์ฉ๋๋ ์กฐํ ํ ์ด๋ธ(lookup table)์ ์ ์งํ๋ ๋ฐฉ๋ฒ, ์กฐํ ํ ์ด๋ธ์ด ๋จ์ผ ์ฅ์ ์ง์ ์ด ๋ ์๋ ์๊ณ ์ง์์ ์ผ๋ก ํ ์ด๋ธ์ ์ฝ๋ ํ์๊ฐ ์ ์ฒด ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น ์ ์๋ค.
์บ์ฑ(caching)
์ธ๋ฉ๋ชจ๋ฆฌ ์บ์๋ฅผ ์ด์ฉํด ๊ฒฐ๊ณผ๋ฅผ ๋น ๋ฅด๊ฒ ๊ฐ์ ธ์ฌ ์ ์๋ค.
๋ฉ๋ชจ๋ฆฌ ์บ์๋ key-value ์์ผ๋ก ๊ฐ๋ ๊ฐ๋จํ ๊ตฌ์กฐ์ด๋ค.
๋น๋๊ธฐ์ ์ฒ๋ฆฌ & ํ
์๋๊ฐ ๋๋ฆฐ ์ฐ์ฐ์ ๋น๋๊ธฐ์(asynchronous)์ผ๋ก ์ฒ๋ฆฌํด์ผ ํ๋ค.
๋๋ ์ด ์ฐ์ฐ์ ๋ฏธ๋ฆฌ ํด ๋์ ์๋ ์๋ค.
์ด๋ฐ ์น์ฌ์ดํธ๋ ์ด๋ค ๋ถ๋ถ์ ์ฌ์ฉ ๊ฐ๋ฅ์ผ๋ก ๋ฐ๊ฟ ๋๊ณ , ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋๋ฐ ์ผ๋ง๋ ์์๋๋์ง ์๋ ค์ฃผ๋ฉฐ ์์ ์ด ๋๋๋ฉด ์๋ฆผ์ ๋ณด๋ด ์ค๋ค.
๋คํธ์ํฌ ์ฑ๋ฅ ์ฒ๋
- ๋์ญํญ
- ์ฒ๋ฆฌ๋
- ์ง์ฐ ์๋
์ง์ฐ ์๊ฐ์ ๋ฌด์๋๊ธฐ ์ฝ์ง๋ง ์จ๋ผ์ธ ๊ฒ์์์ ์ง์ฐ ์๊ฐ์ด ์์ฃผ ์ค์ํ๋ค.
MapReduce
๊ต์ฅํ ์ปค๋ค๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋๋ฐ ์ฌ์ฉ๋๋ค.
- Map์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ๋ค <key, value> ์์ ๋ฐํํ๋ค.
- Reduce ๋ key์ ๊ด๋ จ value ๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ฒ๋ฆฌ ๊ณผ์ ์ ๊ฑฐ์ณ ์๋ก์ด ํค๊ฐ์ ๋ฐํํ๋ค
์์คํ ์ค๊ณ ์ ๊ณ ๋ คํ ์
- ์คํจ: ์คํจ์ ๋ํ ๋๋น์ฑ ์ด ํ์
- ๊ฐ์ฉ์ฑ: ์ฌ์ฉ ๊ฐ๋ฅํ ์์คํ ์ ์๊ฐ
- ์ ๋ขฐ์ฑ: ํน์ ๋จ์ ์๊ฐ์ ์์คํ ์ด ์ฌ์ฉ ๊ฐ๋ฅํ ํ๋ฅ
- ์ฝ๊ธฐ ์ค์ฌ vs. ์ฐ๊ธฐ ์ค์ฌ: ์ฐ๋ ์ฐ์ฐ์ด ๋ง๋ค๋ฉด ํ, ์ฝ๋ ์ฐ์ฐ์ด ๋ง๋ค๋ฉด ์บ์๊ฐ ์ข์ ์ ์๋ค
- ๋ณด์
์๋ฒฝํ ์์คํ ์ ์๋ค
์๋ฒฝํ๊ฒ ๋์ํ๋ ์์คํ ์ค๊ณ๋ ์กด์ฌํ์ง ์๋๋ค.
๋ชจ๋ ์์คํ ์๋ ์ฅ๋จ์ ์ด ์กด์ฌํ๋ค.