๐Ÿš€ Facebook์ด ๋งŒ๋“  ๋ถ„์‚ฐ ๋กœ๊ทธ ์‹œ์Šคํ…œ LogDevice, ์™œ ์ฃผ๋ชฉํ•ด์•ผ ํ• ๊นŒ?

์›ํ˜œ๋ฆฐยท2025๋…„ 5์›” 27์ผ
post-thumbnail

์‹ค์ „ ์ค‘์‹ฌ์˜ LogDevice ์•„ํ‚คํ…์ฒ˜ ์ดํ•ด์™€ ํ™œ์šฉ๋ฒ•


โœจ ๊ฐœ์š”

๋ชจ๋˜ ๋ฐฑ์—”๋“œ ์•„ํ‚คํ…์ฒ˜์—์„œ ๋กœ๊ทธ๋Š” ๋‹จ์ˆœํ•œ ๋””๋ฒ„๊น… ๋„๊ตฌ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
๋ฐ์ดํ„ฐ ๋ณต์ œ, ๋ฉ”์‹œ์ง€ ํ, ์ด๋ฒคํŠธ ์†Œ์‹ฑ, CDC ๋“ฑ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์˜ ๊ธฐ๋ฐ˜์ด์ฃ .

Kafka๊ฐ€ ์‚ฌ์‹ค์ƒ ์—…๊ณ„ ํ‘œ์ค€์ด์ง€๋งŒ,
Facebook(๋ฉ”ํƒ€)์€ ์™œ Kafka ๋Œ€์‹  LogDevice๋ผ๋Š” ์ž์ฒด ์‹œ์Šคํ…œ์„ ๊ฐœ๋ฐœํ–ˆ์„๊นŒ์š”?

์ด ๊ธ€์—์„œ๋Š” LogDevice์˜ ์„ค๊ณ„ ์ฒ ํ•™, ์•„ํ‚คํ…์ฒ˜, ๊ทธ๋ฆฌ๊ณ  ์‹ค์ „ ํ™œ์šฉ ํฌ์ธํŠธ๋ฅผ ๊นŠ์ด ์žˆ๊ฒŒ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค.


๐Ÿ” LogDevice๋ž€?

LogDevice๋Š” Facebook์ด ๋งŒ๋“  ๊ณ ์„ฑ๋Šฅ ๋ถ„์‚ฐ ๋กœ๊ทธ ์ €์žฅ์†Œ์ž…๋‹ˆ๋‹ค.

์ฃผ์š” ํŠน์ง•

  • ๐Ÿงต ์ˆ˜๋ฐฑ๋งŒ ๊ฐœ์˜ ๋กœ๊ทธ ์ŠคํŠธ๋ฆผ ์ง€์›
  • โœ๏ธ Append-only ๋กœ๊ทธ ๊ตฌ์กฐ
  • ๐Ÿ’ช ์“ฐ๊ธฐ ์„ฑ๋Šฅ ์ตœ์ ํ™”
  • ๐Ÿ” ํด๋ผ์ด์–ธํŠธ ์ธก offset ๊ด€๋ฆฌ
  • โš™๏ธ ์œ ์—ฐํ•œ consistency ๋ฐ durability ์„ค์ •

โš–๏ธ Kafka vs LogDevice

ํ•ญ๋ชฉKafkaLogDevice
๋‹จ์œ„Topic + PartitionLog (ID ๊ธฐ๋ฐ˜ stream)
Offset ์ €์žฅBroker (Zookeeper ๋“ฑ)Client ๊ด€๋ฆฌ
Retention์‹œ๊ฐ„/์šฉ๋Ÿ‰ ๊ธฐ์ค€Trim point ๊ธฐ๋ฐ˜
Storage ๊ตฌ์กฐSegment ํŒŒ์ผCopyset + WAL
ํ™•์žฅ ๋ฐฉ์‹Partition ์ˆ˜ ์ฆ๊ฐ€๋กœ๊ทธ ID ์ˆ˜ํ‰ ํ™•์žฅ

LogDevice๋Š” ๋Œ€๊ทœ๋ชจ ํ™˜๊ฒฝ์—์„œ partition ๊ด€๋ฆฌ ์—†์ด ์ˆ˜ํ‰ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


๐Ÿงฑ ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์„ฑ

1. ๊ตฌ์„ฑ ์š”์†Œ

  • Clients: ๋กœ๊ทธ ๊ธฐ๋ก/์†Œ๋น„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
  • Sequencer Nodes: ๋กœ๊ทธ์˜ ์ˆœ์„œ ๊ด€๋ฆฌ
  • Storage Nodes: ์‹ค์ œ ๋กœ๊ทธ ์ €์žฅ
  • Admin API & Config Store: ์„ค์ • ๋ฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ

2. Sequencer / Storage ๋ถ„๋ฆฌ

  • ๐Ÿงญ Sequencer๋Š” ๋กœ๊ทธ ์ˆœ์„œ ๋ถ€์—ฌ ๋ฐ ๋ณต์ œ ๋Œ€์ƒ ๊ฒฐ์ •
  • ๐Ÿ—‚ Storage Node๋Š” ๋ณต์ œ๋œ ๋กœ๊ทธ ๋ฐ์ดํ„ฐ ์ €์žฅ

์“ฐ๊ธฐ ๊ฒฝ๋กœ์™€ ์ €์žฅ ๊ฒฝ๋กœ๋ฅผ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ ๋ณ‘๋ชฉ์„ ์ค„์ด๊ณ  ํ™•์žฅ์„ฑ์„ ํ™•๋ณดํ•ฉ๋‹ˆ๋‹ค.

3. Copyset Replication

  • ๐Ÿ” ๊ณ ์ •๋œ ๋…ธ๋“œ ์…‹์—๋งŒ ๋ณต์ œ
  • ๐ŸŒ ๋„คํŠธ์›Œํฌ ์‚ฌ์šฉ๋Ÿ‰ ๊ฐ์†Œ & ๋น ๋ฅธ ๋ณต๊ตฌ

Kafka์˜ ISR๋ณด๋‹ค ํšจ์œจ์ ์ธ ๋ณต์ œ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค.


๐Ÿงช ์‹ค์ „์—์„œ ๊ณ ๋ คํ•  ์ 

โœ… 1. Offset ๊ด€๋ฆฌ

  • Kafka์™€ ๋‹ฌ๋ฆฌ, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์†Œ๋น„ ์œ„์น˜๋ฅผ ์ง์ ‘ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • โ†’ ์œ ์—ฐํ•˜์ง€๋งŒ, offset ์ €์žฅ/๋™๊ธฐํ™”๊ฐ€ ๊นŒ๋‹ค๋กœ์šธ ์ˆ˜ ์žˆ์Œ
  • LogDevice๋Š” epoch ๊ธฐ๋ฐ˜ ์ฝ๊ธฐ API & checkpoint API๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿงน 2. ๋กœ๊ทธ ์‚ญ์ œ ์ •์ฑ… (Trim Policy)

  • trim point๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋กœ๊ทธ๊ฐ€ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.
  • โ†’ ์„œ๋น„์Šค SLA, ์†Œ๋น„์ž offset ๊ณ ๋ คํ•ด์„œ ์„ค๊ณ„ ํ•„์š”

๐Ÿ”ง 3. ์žฅ์•  ํ—ˆ์šฉ์„ฑ

  • ๋ณต์ œ๋ณธ ๊ธฐ๋ฐ˜ Storage Node ์žฅ์•  ๋Œ€์‘ ๊ฐ€๋Šฅ
  • Sequencer ์žฅ์•  ์‹œ ์ž๋™ failover
  • ๋‹จ, sequencer ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์†์ƒ ์‹œ ์“ฐ๊ธฐ ๋ถˆ๊ฐ€ ์œ„ํ—˜ โ†’ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ durability ์ค‘์š”

๐Ÿงญ ์–ด๋–ค ์ƒํ™ฉ์— ์ ํ•ฉํ• ๊นŒ?

  • โš™๏ธ ๋ณต์žกํ•œ Partition ์—†์ด ๋กœ๊ทธ ์ŠคํŠธ๋ฆผ ๋ถ„๋ฆฌ ํ•„์š”
  • ๐Ÿงฌ ์ด๋ฒคํŠธ ์†Œ์‹ฑ ๊ธฐ๋ฐ˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค
  • ๐Ÿ”„ CDC / ๋กœ๊ทธ ๋ณต์ œ ์‹œ์Šคํ…œ
  • ๐Ÿ” OLAP ๋กœ๊ทธ ์ˆ˜์ง‘๊ธฐ ๋˜๋Š” ์‹ค์‹œ๊ฐ„ ๋ถ„์„ ๊ธฐ๋ฐ˜

Kafka์˜ ๋ฒ”์šฉ์„ฑ๋ณด๋‹ค๋Š” ํŠน์ • ๊ทœ๋ชจ์™€ ์‹œ๋‚˜๋ฆฌ์˜ค์— ์ตœ์ ํ™”๋œ ๋Œ€์•ˆ์ž…๋‹ˆ๋‹ค.


โœ… ์ •๋ฆฌ

ํŠน์ง•์„ค๋ช…
์œ ์—ฐ์„ฑ๋กœ๊ทธ ๋‹จ์œ„, ๋ณต์ œ ๋ฐฉ์‹, ์†Œ๋น„์ž ๋ชจ๋ธ์ด ์œ ์—ฐ
ํ™•์žฅ์„ฑ์ˆ˜๋ฐฑ๋งŒ ๊ฐœ์˜ ๋กœ๊ทธ ์ŠคํŠธ๋ฆผ๋„ ๋ฌด๋ฆฌ ์—†์ด ์ฒ˜๋ฆฌ
์‹ค์šฉ์„ฑ๋ฉ”์‹œ์ง€ ํ๋ณด๋‹ค๋Š” ๋กœ๊ทธ ์ €์žฅ/๋ณต์ œ์— ์ตœ์ ํ™”

LogDevice๋Š” ๋กœ๊ทธ๋ฅผ ์ผ๋“ฑ ์‹œ๋ฏผ์œผ๋กœ ๋‹ค๋ฃจ๋Š” ์‹œ์Šคํ…œ์—์„œ ํฐ ์žฅ์ ์„ ๋ฐœํœ˜ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ”— ์ฐธ๊ณ  ์ž๋ฃŒ


๊ถ๊ธˆํ•œ ์ ์ด ์žˆ๊ฑฐ๋‚˜ ์‹ค๋ฌด ๋„์ž… ๊ฒฝํ—˜์ด ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ ๋‚˜๋ˆ ์ฃผ์„ธ์š”! ๐Ÿ™Œ
Kafka๋งŒ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด, LogDevice๋„ ํ•œ๋ฒˆ ํƒํ—˜ํ•ด๋ณด์„ธ์š”!

profile
๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž

0๊ฐœ์˜ ๋Œ“๊ธ€