JUST DO IT!

๋น…๋ฐ์ดํ„ฐ์˜ ์‹ค์‹œ๊ฐ„ ์ฒ˜๋ฆฌ -TIL230710 ๋ณธ๋ฌธ

TIL

๋น…๋ฐ์ดํ„ฐ์˜ ์‹ค์‹œ๊ฐ„ ์ฒ˜๋ฆฌ -TIL230710

sunhokimDev 2023. 7. 11. 00:44

๐Ÿ“š KDT WEEK 15 DAY 1 TIL

  • ๋น…๋ฐ์ดํ„ฐ์˜ ์ฒ˜๋ฆฌ

 


 

๐ŸŸฅ ๋น…๋ฐ์ดํ„ฐ์˜ ์ฒ˜๋ฆฌ

 

์ฒ˜์Œ์—๋Š” ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ์— ์ดˆ์  > ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์–‘์ด ์ค‘์š”

์„œ๋น„์Šค๊ฐ€ ๊ณ ๋„ํ™”๋˜๋ฉด์„œ ์ ์  ๋” ์‹ค์‹œ๊ฐ„ ์ฒ˜๋ฆฌ ์š”๊ตฌ๊ฐ€ ์ƒ๊ธฐ๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค.

 

๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ฃผ์š” ์šฉ์–ด 4๊ฐœ

  • ์ฒ˜๋ฆฌ๋Ÿ‰(Throughput) : ๋‹จ์œ„ ์‹œ๊ฐ„๋™์•ˆ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์–‘, ๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์Šค์˜ ๋ฐฐ์น˜ ์‹œ์Šคํ…œ์—์„œ ์ค‘์š”
  • ์ง€์—ฐ์‹œ๊ฐ„(Latency) : ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„, ํ”„๋กœ๋•์…˜ DB์ฒ˜๋Ÿผ ์‹ค์‹œ๊ฐ„ ์‹œ์Šคํ…œ์—์„œ ์ค‘์š”
  • ๋Œ€์—ญํญ(Bandwidth) : ์ฒ˜๋ฆฌ๋ž‘ x ์ง€์—ฐ์‹œ๊ฐ„
  • SLA(Service Level Argreement) : ์„œ๋น„์Šค ์ œ๊ณต์—…์ฒด์™€ ๊ณ ๊ฐ ๊ฐ„์˜ ๊ณ„์•ฝ ๋˜๋Š” ํ•ฉ์˜
    • ์‚ฌ๋‚ด ์‹œ์Šคํ…œ๋“ค๊ฐ„์—์„œ๋„ ์ง€์—ฐ์‹œ๊ฐ„์ด๋‚˜ ์—…ํƒ€์ž„๋“ฑ์ด SLA๋กœ ์‚ฌ์šฉ๋˜๊ธฐ๋„ ํ•œ๋‹ค.
    • ๋ฐ์ดํ„ฐ ์‹œ์Šคํ…œ์ด๋ผ๋ฉด ๋ฐ์ดํ„ฐ์˜ ์‹œ์˜์„ฑ(Freshness)๋„ ์ค‘์š”ํ•œ ํฌ์ธํŠธ๊ฐ€ ๋œ๋‹ค.
    • ex) API์˜ ํ‰๊ท  ์‘๋‹ต ์‹œ๊ฐ„์ด 0.5์ดˆ์•ˆ์— ์‘๋‹ต ๋˜์–ด์•ผํ•œ๋‹ค

 

โ— ๋ฐ์ดํ„ฐ์˜ ์‹ค์‹œ๊ฐ„ ์ฒ˜๋ฆฌ

 

๋ฐ์ดํ„ฐ์˜ ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ

  • ๋ณดํ†ต ๋ถ„์—์„œ ์‹œ๊ฐ„, ์ผ ๋‹จ์œ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ์•„์„œ ์ฒ˜๋ฆฌ ๋ฐ ์ €์žฅ
  • ํ•œ๋ฒˆ์— ๋ชจ์•„์„œ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถ„์‚ฐ ํŒŒ์ผ ์‹œ์Šคํ…œ(HDFS, S3 ๋“ฑ)์„ ์‚ฌ์šฉ
  • ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ(MapReduce, Hive, Spark ๋“ฑ) ๋ฐ ์Šค์ผ€์ค„๋ง์œผ๋กœ Airflow๋ฅผ ์‚ฌ์šฉ

 

๋ฐ์ดํ„ฐ ์‹ค์‹œ๊ฐ„ ์ฒ˜๋ฆฌ

  • ๋ถ„๋ณด๋‹ค ๋” ๋‚ฎ์€ ์ฃผ๊ธฐ(micro batch)๋กœ ์—ฐ์†์ ์ธ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ => semi-realtime
  • ํŠน์ •ํ•œ ์ด๋ฒคํŠธ๋ฅผ ํŠธ๋ฆฌ๊ฑฐ๋กœ ์ฆ‰์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌ ๋ฐ ์ €์žฅ => realtime
  • ์ฒ˜๋ฆฌ๋Ÿ‰๋ณด๋‹ค ์ง€์—ฐ์‹œ๊ฐ„(์ฒ˜๋ฆฌ์†๋„, Latency)๊ฐ€ ์ค‘์š”
  • ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ ๋‹ค์Œ์˜ ๊ณ ๋„ํ™” ๋‹จ๊ณ„๋กœ, ์‹œ์Šคํ…œ ๊ด€๋ฆฌ ๋“ฑ์˜ ๋ณต์žก๋„๊ฐ€ ์ฆ๊ฐ€ํ•œ๋‹ค.

 

์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์˜ ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•

 

1. ๋ฐ์ดํ„ฐ ์ƒ์„ฑ์ž(Producer, Publisher)๊ฐ€ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ

2. ์—ฐ์†ํ•ด์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๊ฐ„์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด Message Queue(or Event Stream)์— ์ €์žฅ

3. ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ์ดํ„ฐ ์†Œ๋น„์ž(Consumer, Subscriber)๊ฐ€ ์ฝ๊ฒŒ ๋จ

 

์ด ์ดˆ๋‹จ์œ„์˜ ๊ณ„์†์ ์ธ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ Event๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ, Immutableํ•œ ํŠน์„ฑ์ด ์žˆ๋‹ค.

 

++) ์ด ์‹ค์‹œ๊ฐ„ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์„œ๋น„์Šค๋“ค

์ด๋ฒคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์‹œ์ง€ ํ๋“ค : Kafka, Kinesis..

์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ : Spark Streaming, Samza...

์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋Œ€์‹œ๋ณด๋“œ : Druid(์˜คํ”ˆ์†Œ์Šค)

 

๐Ÿ“Œ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์˜ ์žฅ๋‹จ์ 

 

์‹ค์‹œ๊ฐ„ ์ฒ˜๋ฆฌ์˜ ์žฅ์ 

  • ์ฆ‰์ž‘์ ์ธ ์ธ์‚ฌ์ดํŠธ ๋ฐœ๊ฒฌ ๋ฐ ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ์‹ ์† ๋Œ€์‘
  • ์šด์˜์˜ ํšจ์œจ์„ฑ ํ–ฅ์ƒ๊ณผ ํšจ์œจ์ ์ธ ๊ฐœ์ธํ™”๋œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜
  • IoT ๋ฐ ์„ผ์„œ ๋ฐ์ดํ„ฐ์— ํ™œ์šฉ ๋ฐ ํƒ์ง€์™€ ๋ณด์•ˆ ๊ธฐ๋Šฅ์„ฑ

 

์‹ค์‹œ๊ฐ„ ์ฒ˜๋ฆฌ์˜ ๋‹จ์ 

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

 

๐Ÿ†š Realtime vs Semi-Realtime

 

Realtime

  • ์งง์€ Latency, ๊ฑฐ์˜ ์ฆ‰๊ฐ ๋ฐ˜์‘
  • ์—ฐ์†์ ์ธ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ
  • ์ด๋ฒคํŠธ ์ค‘์‹ฌ ์•„ํ‚คํ…์ฒ˜ : ์ˆ˜์‹  ๋ฐ์ดํ„ฐ ์ด๋ฒคํŠธ์— ์˜ํ•ด ์ž‘์—…์ด๋‚˜ ๊ณ„์‚ฐ์ด ํŠธ๋ฆฌ๊ฑฐ๋˜๋Š” ๊ตฌ์กฐ ex) ์‹ ์šฉ์นด๋“œ์˜ ์‚ฌ์šฉ
  • ๋™์  ๋ฐ ๋ฐ˜์‘ํ˜• : ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์˜ ๋ณ€ํ™”์— ๋™์ ์œผ๋กœ ๋Œ€์‘ํ•˜์—ฌ ์‹ค์‹œ๊ฐ„ ๋ถ„์„

 

Semi-Realtime

  • ํ•ฉ๋ฆฌ์ ์ธ Latency, ์ผ๋ฐ˜์ ์ธ ๋ฐฐ์น˜๋ณด๋‹ค๋Š” ์งง์€ ์ฃผ๊ธฐ
  • ๋ฐฐ์น˜์™€ ์œ ์‚ฌํ•œ ์ฒ˜๋ฆฌ(ํ•˜์ง€๋งŒ micro-batch)
  • ์ ์‹œ์„ฑ๊ณผ ํšจ์œจ์„ฑ ์‚ฌ์ด์˜ ๊ท ํ˜•์„ ๋งž์ถฐ ์‚ฌ์šฉ > ๋ฆฌ์†Œ์Šค ํ™œ์šฉ๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•œ ์ฆ‰๊ฐ์„ฑ์˜ ํฌ์ƒ

 


 

๐ŸŽ‡ ๋žŒ๋‹ค ์•„ํ‚คํ…์ฒ˜(Lambda Architecture)

๋ฐฐ์น˜ ๋ ˆ์ด์–ด์™€ ์‹ค์‹œ๊ฐ„ ๋ ˆ์ด์–ด ๋‘ ๊ฐœ๋ฅผ ๋ณ„๋„๋กœ ์šด์˜ํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜

 

Lambda Architecture

 

๐Ÿ†š ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ• ๋‘ ๊ฐ€์ง€

 

1. Point to Point

Producer๊ฐ€ Consumer์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”๋กœ ๋ณด๋‚ด๋Š” ํ˜•ํƒœ

  • Throughput๋„ ์ค‘์š”ํ•˜์ง€๋งŒ Latency๊ฐ€ ์ค‘์š”ํ•œ ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ (๋ณดํ†ต API)
  • ๋‹ค์ˆ˜์˜ Consumer๋“ค์ด ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ค‘๋ณตํ•ด์„œ ๋ณด๋‚ด์•ผํ•จ
  • BackPressure์— ์ทจ์•ฝํ•จ

 

2. Messaging Queue

Producer๊ฐ€ ์ƒ์„ฑํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ Message Queue๋ฅผ ๊ฑฐ์ณ Consumer๊ฐ€ ์†Œ๋น„ํ•˜๋Š” ํ˜•ํƒœ

  • Producer์™€ Consumer๊ฐ€ ๋…๋ฆฝ์ ์ธ ํ˜•ํƒœ๋กœ ์‚ฌ๊ณ  ์œ„ํ—˜์ด ์ ์Œ
  • ์•„์ฃผ ์งง์€ ์ฃผ๊ธฐ(micro-batch)๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ์•„์„œ ์ฒ˜๋ฆฌ > ex) Spark Streaming
  • ๋‹ค์ˆ˜์˜ Consumer๋ฅผ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉฐ Point-to-Point๋ณด๋‹ค ์šด์˜์ด ์šฉ์ด

 

♠ BackPressure

 

๋ฐ์ดํ„ฐ ์ƒ์„ฑ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋นˆ๋„๊ฐ€ ๋ฐ์ดํ„ฐ ์†Œ๋น„์ž์˜ ๋ฐ์ดํ„ฐ ์†Œ๋น„ ๋นˆ๋„๋ณด๋‹ค ๋†’์•„ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ€๋ฆฌ๋Š” ๋ฌธ์ œ

 

Message Queue๋ฅผ ์ค‘๊ฐ„์— ๋„์ž…ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์–ด๋Š์ •๋„ ๋ฐฉ์ง€ ๊ฐ€๋Šฅ >> Kafka

Consumer์—๊ฒŒ Buffer๋ผ๋Š” ์ž‘์€ ๊ณต๊ฐ„์ด ์žˆ๊ธดํ•˜์ง€๋งŒ, ์ด๊ฑด ๊ธˆ๋ฐฉ์ฐธ

 

BackPressure