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