File System

์นดํ”„์นด๋Š” ์™œ ๋””์Šคํฌ๋ฅผ ์“ธ๊นŒ?

๋Œ€์šฉ๋Ÿ‰ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์˜ ํ•ต์‹ฌ ํ”Œ๋žซํผ์ธ **์•„ํŒŒ์น˜ ์นดํ”„์นด(Apache Kafka)**๋Š” ๋ฐ์ดํ„ฐ๋ฅผ **๋ฉ”๋ชจ๋ฆฌ(RAM)**์— ์ €์žฅํ•˜๋Š” ๋Œ€์‹ , **ํŒŒ์ผ ์‹œ์Šคํ…œ(๋””์Šคํฌ)**์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. "๋””์Šคํฌ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ณด๋‹ค ๋А๋ฆฐ๋ฐ, ์™œ ์นดํ”„์นด๋Š” ๋””์Šคํฌ๋ฅผ ์‚ฌ์šฉํ• ๊นŒ?" ์ด๊ฒƒ์ด ๋ฐ”๋กœ ์นดํ”„์นด์˜ **์˜์†์„ฑ(Persistence)**๊ณผ ๊ณ ์„ฑ๋Šฅ ์ฒ˜๋ฆฌ๋ฅผ ๋™์‹œ์— ์žก์€ ํ•ต์‹ฌ ์ „๋žต์ž…๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์˜์†์„ฑ(Persistence)๊ณผ ์•ˆ์ •์„ฑ

์นดํ”„์นด๊ฐ€ ๋””์Šคํฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๋Š” ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ด์œ ๋Š” ๋ฐ์ดํ„ฐ์˜ ์œ ์‹ค์„ ๋ง‰๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค.

  • ์˜์†์ ์ธ ๋กœ๊ทธ ๊ธฐ๋ก: ์นดํ”„์นด ๋ธŒ๋กœ์ปค(์„œ๋ฒ„)๊ฐ€ ๊ฐ‘์ž๊ธฐ ๋‹ค์šด๋˜๋”๋ผ๋„, ๋ฐ์ดํ„ฐ๋Š” ์ด๋ฏธ ๋””์Šคํฌ์˜ ๋กœ๊ทธ ํŒŒ์ผ์— ๊ธฐ๋ก๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์†์‹ค๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ์ปจ์Šˆ๋จธ ๋…๋ฆฝ์„ฑ: ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ์—์„œ ์ปจ์Šˆ๋จธ๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ€์ ธ๊ฐ€๋ฉด ๋ณดํ†ต ๋ฉ”์‹œ์ง€๊ฐ€ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์นดํ”„์นด๋Š” ๋””์Šคํฌ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์„ค์ •๋œ ๊ธฐ๊ฐ„ ๋™์•ˆ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

    • ์˜ˆ์‹œ: ์†Œ๋น„์ž๊ฐ€ ๋ฐค 10์‹œ์— ์žฅ์• ๊ฐ€ ๋‚˜์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋‚  ์•„์นจ 8์‹œ์— ์‹œ์Šคํ…œ์„ ๋ณต๊ตฌํ•ด๋„, ๋””์Šคํฌ์— ๋‚จ์•„์žˆ๋Š” 10์‹œ๊ฐ„ ์น˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ์•ˆ์ „ํ•˜๊ฒŒ ๋‹ค์‹œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๊ณ ์„ฑ๋Šฅ ์ฒ˜๋ฆฌ (Sequential I/O์™€ Page Cache)

๋А๋ฆฐ ๋””์Šคํฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ๋„ ๊ณ ์„ฑ๋Šฅ์„ ๋‚ด๋Š” ์นดํ”„์นด์˜ ๋น„๊ฒฐ์€ ์šด์˜์ฒด์ œ์˜ ๊ธฐ๋Šฅ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ์„ค๊ณ„์— ์žˆ์Šต๋‹ˆ๋‹ค.

1. ์ˆœ์ฐจ์  I/O (Sequential I/O)

  • ๋ฐ์ดํ„ฐ ์“ฐ๊ธฐ ๋ฐฉ์‹: ์นดํ”„์นด๋Š” ๋””์Šคํฌ์˜ ๋กœ๊ทธ ํŒŒ์ผ์— **์˜ค์ง ๋งจ ๋์—๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€(Append-Only)**ํ•ฉ๋‹ˆ๋‹ค.

  • ์„ฑ๋Šฅ ํ–ฅ์ƒ: ๋””์Šคํฌ์˜ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๋ฐฉ์‹ ์ค‘ ๋ฌด์ž‘์œ„(Random) I/O๋Š” ๋А๋ฆฌ์ง€๋งŒ, ์ˆœ์ฐจ์ (Sequential) I/O๋Š” ๋งค์šฐ ๋น ๋ฆ…๋‹ˆ๋‹ค. ์นดํ”„์นด๋Š” ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๊ณ  ์ฝ์Œ์œผ๋กœ์จ, ๋””์Šคํฌ I/O์˜ ์†๋„๋ฅผ ํ•˜๋“œ๋””์Šคํฌ๊ฐ€ ์•„๋‹Œ, ๊ฑฐ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ˆ˜์ค€์œผ๋กœ ๋Œ์–ด์˜ฌ๋ฆฝ๋‹ˆ๋‹ค.

2. ์šด์˜์ฒด์ œ ํŽ˜์ด์ง€ ์บ์‹œ(OS Page Cache)์˜ ํ™œ์šฉ

  • ๋”๋ธ” ๋ฒ„ํผ๋ง ํšŒํ”ผ: ์นดํ”„์นด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ๋ฒจ์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์บ์‹ฑํ•˜์ง€ ์•Š๊ณ , ์šด์˜์ฒด์ œ(OS)๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ํŽ˜์ด์ง€ ์บ์‹œ ์˜์—ญ์„ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ์›๋ฆฌ: ํ”„๋กœ๋“€์„œ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด ๋””์Šคํฌ์— ์ €์žฅ๋  ๋•Œ, ์ด ๋ฐ์ดํ„ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ํŽ˜์ด์ง€ ์บ์‹œ์—๋„ ๋ณต์‚ฌ๋˜์–ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์ปจ์Šˆ๋จธ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๋ฉด, ์นดํ”„์นด๋Š” ๋””์Šคํฌ๊ฐ€ ์•„๋‹Œ ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” ํŽ˜์ด์ง€ ์บ์‹œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ๊ฐ€์ ธ์™€ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

  • ๊ฒฐ๊ณผ: ๋””์Šคํฌ์— ์˜์†์„ฑ์„ ํ™•๋ณดํ•˜๋ฉด์„œ, ์‹ค์ œ ์ฝ๊ธฐ/์“ฐ๊ธฐ ์ž‘์—…์€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ฒ˜๋ฆฌ๋˜์–ด ๊ณ ์„ฑ๋Šฅ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

3. ์ œ๋กœ ์นดํ”ผ (Zero-Copy)

  • ๋„คํŠธ์›Œํฌ ์ „์†ก ์ตœ์ ํ™”: ์นดํ”„์นด๋Š” ์ปจ์Šˆ๋จธ์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ๋•Œ, ๋””์Šคํฌ ๋ฒ„ํผ์˜ ๋ฐ์ดํ„ฐ๋ฅผ CPU๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ๋„คํŠธ์›Œํฌ ๋ฒ„ํผ๋กœ ๋ฐ”๋กœ ๋ณต์‚ฌํ•˜๋Š” Zero-Copy ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ํšจ๊ณผ: ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ๋ณต์‚ฌ ๋‹จ๊ณ„๋ฅผ ์ค„์—ฌ CPU ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ณ  ๋ฐ์ดํ„ฐ ์ „์†ก ์ฒ˜๋ฆฌ๋Ÿ‰์„ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค.


์นดํ”„์นด ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๊ณผ์ •

๋‹ค์Œ์€ ์นดํ”„์นด์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ €์žฅ๋˜๊ณ  ์ฒ˜๋ฆฌ๋˜๋Š” ํ๋ฆ„์„ ๊ฐ„๋žตํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹จ๊ณ„
์ฃผ์ฒด
๋™์ž‘
ํ•ต์‹ฌ ์›๋ฆฌ

1. ๋ฐœํ–‰ (Publish)

Producer (์ƒ์‚ฐ์ž)

๋ฉ”์‹œ์ง€๋ฅผ Kafka Broker๋กœ ์ „์†ก

-

2. ์ €์žฅ (Storage)

Broker (์นดํ”„์นด ์„œ๋ฒ„)

๋ฉ”์‹œ์ง€๋ฅผ ๋””์Šคํฌ์˜ ๋กœ๊ทธ ํŒŒ์ผ์— ์ˆœ์ฐจ์ ์œผ๋กœ(Append-Only) ๊ธฐ๋ก

์ˆœ์ฐจ์  I/O, ์˜์†์„ฑ ํ™•๋ณด

3. ์บ์‹ฑ (Caching)

OS (์šด์˜์ฒด์ œ)

๋””์Šคํฌ์— ๊ธฐ๋ก๋œ ๋ฉ”์‹œ์ง€๋ฅผ ํŽ˜์ด์ง€ ์บ์‹œ์— ๋ณต์‚ฌํ•ด ์ €์žฅ

๊ณ ์„ฑ๋Šฅ ์ฝ๊ธฐ ์ค€๋น„

4. ์†Œ๋น„ ์š”์ฒญ

Consumer (์†Œ๋น„์ž)

ํŠน์ • Offset์˜ ๋ฐ์ดํ„ฐ๋ฅผ Broker์— ์š”์ฒญ

-

5. ๋ฐ์ดํ„ฐ ์ „์†ก

Broker

ํŽ˜์ด์ง€ ์บ์‹œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ Zero-Copy๋กœ Consumer์—๊ฒŒ ์ „์†ก

ํŽ˜์ด์ง€ ์บ์‹œ ํ™œ์šฉ, Zero-Copy

Last updated