JiwonDev

๋Œ€๊ทœ๋ชจ ๋ถ„์‚ฐ ํ™˜๊ฒฝ key-value ์ €์žฅ์†Œ ์„ค๊ณ„

by JiwonDev

https://bytebytego.com/courses/system-design-interview/design-a-key-value-store

 

ByteByteGo | Technical Interview Prep

Everything you need to take your system design skill to the next level

bytebytego.com

 

์ „ํ†ต์ ์ธ ๊ด€๊ณ„ํ˜• DB์™€ ๋‹ค๋ฅด๊ฒŒ ์ƒํ™ฉ์— ๋”ฐ๋ผ key-value ํ˜•ํƒœ๋กœ ์ €์žฅ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ์„œ๋น„์Šค๋กœ๋Š” AWS DynamoDB, Memcached, Redis ๊ฐ™์€ ๊ฒƒ๋“ค์ด ์žˆ์œผ๋ฉฐ ํฐ ํ‹€์—์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ํŠน์ง•์„ ๊ฐ€์ง„๋‹ค.

  • key: ์œ ์ผํ•œ ๊ฐ’์ด์–ด์•ผํ•œ๋‹ค. ๊ฐ’์˜ ์ข…๋ฅ˜๋Š” ์ƒ๊ด€์—†๋‹ค. ์ˆซ์žํ˜•, ํ•ด์‰ฌ๊ฐ’, ์˜๋ฏธ์žˆ๋Š” ํ…์ŠคํŠธ๋“ฑ.
  • value: ๊ด€๊ณ„ํ˜• DB์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ๋ฌธ์ž์—ด, ๋ฆฌ์ŠคํŠธ, ๊ฐ์ฒด ๋ฌด์—‡์ด๋“  ๋  ์ˆ˜ ์žˆ๋‹ค.

Redis์—์„œ ์ง€์›ํ•˜๋Š” value ๊ฐ’์˜ ํ˜•ํƒœ

 

 

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

  • key-value ์Œ์˜ ํฌ๊ธฐ๋Š” 10KB ์ดํ•˜
  • ์ˆ˜๋ฐฑ๋งŒ ์ด์ƒ์˜ ์‚ฌ์šฉ์ž๊ฐ€ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ๋†’์€ ๊ฐ€์šฉ์„ฑ (High Availablity): ์‹œ์Šคํ…œ์˜ ์‘๋‹ต์€ ๋นจ๋ผ์•ผํ•œ๋‹ค. ์„ค๋ น ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋”๋ผ๋„.
  • ๋†’์€ ํ™•์žฅ์„ฑ (High Scalabilty): ํŠธ๋ž˜ํ”ฝ ์–‘์ด ๋Š˜์—ˆ์„ ๋•Œ ์†์‰ฝ๊ฒŒ ์„œ๋ฒ„๋ฅผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ์ž๋™ ์Šค์ผ€์ผ๋ง(Automatic scaling): ํŠธ๋ž˜ํ”ฝ ์–‘์ด ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ์„œ๋ฒ„์˜ ์ฆ์„ค/์‚ญ์ œ๊ฐ€ ์ž๋™์œผ๋กœ ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์žˆ์–ด์•ผํ•œ๋‹ค.
  • ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. (Tunable consistency)
  • ์‘๋‹ต ์ง€์—ฐ์‹œ๊ฐ„์ด ์งง์•„์•ผ ํ•œ๋‹ค. (Low latency)

 

1๏ธโƒฃ ๋‹จ์ผ ์„œ๋ฒ„ key-value ์ €์žฅ์†Œ

์„œ๋ฒ„๊ฐ€ ํ•œ ๋Œ€๋ผ๋ฉด ์„ค๊ณ„๋Š” ๋งค์šฐ ๊ฐ„๋‹จํ•˜๋‹ค. ๊ทธ๋ƒฅ ์ „๋ถ€ ํ•ด์‹œ ํ…Œ์ด๋ธ”๋กœ ์ €์žฅํ•˜๋ฉด ๋œ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.

  • ๋ฐ์ดํ„ฐ๋ฅผ ์••์ถ•ํ•ด์„œ ์‚ฌ์šฉํ•˜๊ธฐ
  • ์ž์ฃผ ์“ฐ์ด๋Š” ๋ฐ์ดํ„ฐ๋งŒ ์šฐ์„ ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ๋‘๊ธฐ

 

2๏ธโƒฃ ๋ถ„์‚ฐ ์„œ๋ฒ„ key-value ์ €์žฅ์†Œ

๋‹จ์ผ ์„œ๋ฒ„๋ฅผ ์•„๋ฌด๋ฆฌ scale-upํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹คํ•ด๋„ ์–ธ์  ๊ฐ€ ๋ถ€์กฑํ•œ ๋•Œ๊ฐ€ ์ฐพ์•„์˜ค๊ธฐ ๋งˆ๋ จ์ด๋‹ค. ์ด ๋•Œ๋Š” ์„œ๋ฒ„๋ฅผ ๋ถ„์‚ฐ์‹œ์ผœ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

์ด๋Š” ๋ถ„์‚ฐ ํ•ด์‹œํ…Œ์ด๋ธ”์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋Š”๋ฐ ์ด๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ๋Š” ํŠธ๋ ˆ์ด๋“œ ์˜คํ”„์˜ ๊ธฐ๋ณธ์ธ CAP(Consitency, Availabilty, Partition Tolerance ) ๋ฅผ ๊ณ ๋ คํ•ด์•ผํ•œ๋‹ค.

์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ ์„ธ๊ฐ€์ง€์ค‘ ๋‘ ๊ฐ€์ง€ ์†์„ฑ๋งŒ ์ถฉ์กฑํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‚˜๋จธ์ง€ ํ•˜๋‚˜๋Š” ํฌ์ƒ๋  ์ˆ˜ ๋ฐ–์— ์—†๋‹ค. (* ๊ทธ์ค‘ ์‹ค ๋น„์ฆˆ๋‹ˆ์Šค์—์„œ ๋ถ„๋‹จ ๋‚ด์„ฑ์€ ํ•„์ˆ˜)

 * P์˜ ์ •ํ™•ํ•œ ์ •์˜๋Š” ๋ถ„์‚ฐ ๋„คํŠธ์›Œํฌ๊ฐ„ ํ†ต์‹ ๊ณผ์ •์—์„œ ์ผ์–ด๋‚˜๋Š” ๋ฉ”์‹œ์ง€ ์†์‹ค์„ ์–ผ๋งˆ๋‚˜ ํ—ˆ์šฉํ• ์ง€ ๊ทœ์น™์„ ์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

  • CP ์‹œ์Šคํ…œ: ์ผ๊ด€์„ฑ, ํŒŒํ‹ฐ์…˜ ๊ฐ๋‚ด๋ฅผ ์ง€์›
  • AP ์‹œ์Šคํ…œ: ๊ฐ€์šฉ์„ฑ๊ณผ ํŒŒํ‹ฐ์…˜ ๊ฐ๋‚ด๋ฅผ ์ง€์›
  • CA ์‹œ์Šคํ…œ: ์ผ๊ด€์„ฑ๊ณผ ๊ฐ€์šฉ์„ฑ์„ ์ง€์›ํ•˜๋Š” ์ €์žฅ์†Œ. ๋‹ค๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ๋ถ„์‚ฐ ํ™˜๊ฒฝ ๋น„์ฆˆ๋‹ˆ์Šค์—์„œ ๋ถ„๋‹จ ๋‚ด์„ฑ์„ ํฌ๊ธฐํ•˜๋Š”๊ฑด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์‹ค์ œ ์„œ๋น„์Šค ์šด์˜์—์„œ ํŠน์ • ํŒŒํ‹ฐ์…˜์˜ ์žฅ์• ๋Š” ํ”ผํ•  ์ˆ˜ ์—†๋‹ค. ์ด ๋•Œ ์ผ๊ด€์„ฑ๊ณผ ๊ฐ€์šฉ์„ฑ ์ค‘ ์–ด๋–ค ๊ฒƒ์„ ์šฐ์„ ์ ์œผ๋กœ ์ฑ™๊ฒจ์•ผํ• ์ง€ ๊ณ ๋ฏผํ•ด์•ผํ•œ๋‹ค.

  • ์ผ๊ด€์„ฑ(CP)์ด ์ค‘์š”ํ•˜๋‹ค๋ฉด ์“ฐ๊ธฐ ์—ฐ์‚ฐ์„ ์ค‘์ง€์‹œํ‚ค๋ฉด ํŒŒํ‹ฐ์…˜๊ฐ„ ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜๋ฅผ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค. ๋‹จ ์„œ๋น„์Šค ๊ฐ€์šฉ์„ฑ์€ ๋งŽ์ด ๋‚ฎ์•„์ง„๋‹ค. 
    ์˜จ๋ผ์ธ ๋ฑ…ํ‚น ๊ฐ™์ด ๊ณ„์ขŒ์˜ ์ตœ์‹ ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž. ์ด ๋•Œ๋Š” ๊ฐ€์šฉ์„ฑ๋ณด๋‹ค ์ผ๊ด€์„ฑ์ด ํ›จ์”ฌ ์ค‘์š”ํ•˜๋‹ค.
  • ๊ฐ€์šฉ์„ฑ(AP)์ด ์ค‘์š”ํ•˜๋‹ค๋ฉด ์˜›๋‚  ๋ฐ์ดํ„ฐ๋ฅผ ์ž˜๋ชป ๋ฐ˜ํ™˜ํ•˜๋”๋ผ๋„ ์“ฐ๊ธฐ ๋ฐ ์ฝ๊ธฐ๋ฅผ ๊ณ„์† ํ—ˆ์šฉํ•ด์•ผํ•œ๋‹ค.
    ํŽ˜์ด์Šค๋ถ ๊ฐ™์€ ์ปค๋ฎค๋‹ˆํ‹ฐ ์„œ๋น„์Šค๋ผ๋ฉด ๋Œ“๊ธ€์ด ์ž ๊น ์ž˜๋ชป๋‚˜์˜ค๋”๋ผ๋„ ์„œ๋น„์Šค ๊ฐ€์šฉ์„ฑ๊ณผ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ฑ™๊ธฐ๋Š”๊ฒŒ ํ›จ์”ฌ ์ค‘์š”ํ•˜๋‹ค. 

 

์ด๋Ÿฌํ•œ ๋ถ„์‚ฐํ™˜๊ฒฝ key-value ์ €์žฅ์†Œ๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์š”์†Œ๋ฅผ ๊ณ ๋ คํ•ด์•ผํ•˜๋Š”๋ฐ, ๊ฐ ์š”์†Œ๋“ค์„ ํ•˜๋‚˜์”ฉ ์‚ดํŽด๋ณด์ž.

  • Data partition (๋ฐ์ดํ„ฐ ํŒŒํ‹ฐ์…˜)
  • Data replication (๋ฐ์ดํ„ฐ ๋‹ค์ค‘ํ™”)
  • Data consistency (๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ, ์ผ๊ด€์„ฑ ๋ชจ๋ธ)
  • Inconsistency resolution (์ผ๊ด€์„ฑ ๋ถˆ์ผ์น˜ ํ•ด์†Œ)
  • Handling failures (์žฅ์•  ์ฒ˜๋ฆฌ, ์žฅ์•  ๊ฐ์ง€)
  • System architecture diagram (์•„ํ‚คํ…์ฒ˜ ๋‹ค์ด์–ด๊ทธ๋žจ ์„ค๊ณ„)

 

# Data partition (๋ฐ์ดํ„ฐ ํŒŒํ‹ฐ์…˜)

๋Œ€๊ทœ๋ชจ ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ, ํ•œ ๋Œ€์— ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š”๊ฑด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ์ž‘์€ ํŒŒํ‹ฐ์…˜์œผ๋กœ ๋ถ„ํ• ํ•˜์—ฌ ์—ฌ๋Ÿฌ ๋Œ€์— ๋‚˜๋ˆ  ์ €์žฅํ•ด์•ผํ•œ๋‹ค. ์ด ๋•Œ ์•„๋ž˜์˜ ์š”์†Œ๋“ค์„ ๊ณ ๋ คํ•ด์•ผํ•œ๋‹ค.

  • ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ ์„œ๋ฒ„์— ๊ณ ๋ฅด๊ฒŒ ๋ถ„์‚ฐํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€
  • ์„œ๋ฒ„(๋…ธ๋“œ)๊ฐ€ ์ถ”๊ฐ€, ์‚ญ์ œ๋˜๋”๋ผ๋„ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŽ์ด ์ด๋™ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š”๊ฐ€

์ด๋Š” ์•ž์—์„œ ๋ฐฐ์šด ์•ˆ์ •ํ•ด์‹œ๋ฅผ ํ†ตํ•ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์•ˆ์ •ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ถ”๊ฐ€์ ์œผ๋กœ ์ž๋™ ํ™•์žฅ(Auto Scaling)์ด ์‰ฌ์›Œ์ง€๊ณ  ๊ฐ ์„œ๋ฒ„์˜ ์šฉ๋Ÿ‰์— ๋งž๊ฒŒ ์„ค์ •์„ ๋‹ค์–‘ํ™”(heterogeneity) ํ•  ์ˆ˜ ์žˆ๋‹ค. 2024.02.18 - [๐Ÿ‘€๊ธฐ๋ณธ ์ง€์‹/CS ๊ธฐ๋ณธ์ง€์‹] - ์•ˆ์ • ํ•ด์‹œ(Consistent Hashing)

 

์•ˆ์ • ํ•ด์‹œ(Consistent Hashing)

๐Ÿ€ ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•ด ์š”์ฒญ์„ ๋ถ„์‚ฐํ•˜๋Š” ๋ฐฉ๋ฒ• N๊ฐœ์˜ ์บ์‹œ ์„œ๋ฒ„๊ฐ€ ์žˆ์„ ๋•Œ ๋ถ€ํ•˜๋ฅผ ๋‚˜๋ˆ„๋Š” ๋ณดํŽธ์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค. MD5 (2^128): ์†๋„๊ฐ€ ๋ณด์•ˆ๋ณด๋‹ค ์ค‘์š”ํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜. SHA-256 ์—

jiwondev.tistory.com

 

 

# Data replication (๋ฐ์ดํ„ฐ ๋‹ค์ค‘ํ™”)

ํ•˜๋‚˜์˜ ์„œ๋ฒ„๋ฅผ ์•„๋ฌด๋ฆฌ ์ฒ ์ €ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•œ๋‹ค๊ณ  ํ•ด๋„ ๋†’์€ ๊ฐ€์šฉ์„ฑ๊ณผ ์•ˆ์ •์„ฑ์„ ์–ป๊ธด ์–ด๋ ต๋‹ค. ์ด๋ฅผ ํ™•๋ณดํ•˜๋ ค๋ฉด ๋น„๋™๊ธฐ์ ์ธ ๋‹ค์ค‘ํ™”๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

์•ˆ์ •ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ๋ฅผ ๋“ค์–ด๋ณธ๋‹ค๋ฉด ์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ์›์„ ์ˆœํšŒํ•˜๋ฉด์„œ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ์ฒซ N๊ฐœ ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ ์‚ฌ๋ณธ์„ ๋ณด๊ด€ํ•˜๋ฉด ๋œ๋‹ค. ๋˜ํ•œ ์ •์ „, ๋„คํŠธ์›Œํฌ ์ด์Šˆ, ์ž์—ฐ์žฌํ•ด๋“ฑ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ์œ„ํ•ด ๊ฐ ๋ฌผ๋ฆฌ์„œ๋ฒ„๋Š” ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์— ๋ณด๊ด€ํ•˜๋„๋ก ๊ตฌ์„ฑํ•˜๋ฉด ๋œ๋‹ค. (์ด๋Š” AWS ๊ฐ™์€ ํด๋ผ์šฐ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์‰ฝ๊ฒŒ ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•˜๋‹ค.)

 

 

# Data consistency (๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ)

์—ฌ๋Ÿฌ ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์ค‘ํ™”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ ์ ˆํ•œ ๋กœ์ง์„ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๊ฐ€ ๋™๊ธฐํ™”๊ฐ€ ๋˜์–ด์•ผํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด Quorum Consensus(์ •์กฑ์ˆ˜ ํ•ฉ์˜) ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ๊ธฐ/์“ฐ๊ธฐ ์—ฐ์‚ฐ์— ์•„๋ž˜์™€ ๊ฐ™์ด ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

  • N: ์‚ฌ๋ณธ๊ฐœ์ˆ˜
  • W: ์“ฐ๊ธฐ ์—ฐ์‚ฐ์— ๋Œ€ํ•œ ์„œ๋ฒ„ ์ •์กฑ์ˆ˜(* ์™„๋ฃŒ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์ตœ์†Œ ์„ฑ๊ณต ์ˆ˜)
  • R: ์ฝ๊ธฐ ์—ฐ์‚ฐ์— ๋Œ€ํ•œ ์„œ๋ฒ„ ์ •์กฑ์ˆ˜(* ์™„๋ฃŒ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์ตœ์†Œ ์„ฑ๊ณต ์ˆ˜)

ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์€ ์ค‘์žฌ์ž(coordinator)๊ฐ€ ๋ฐ›์•„์„œ ํ”„๋ก์‹œ์ฒ˜๋Ÿผ ์ฒ˜๋ฆฌํ•œ๋‹ค.

W,R,N ์„ ๋”ฐ๋กœ ์ •์˜ํ•œ ์ด์œ ๋Š” ์‘๋‹ต ๋ ˆ์ดํ„ด์‹œ์™€ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ ์‚ฌ์ด์— ํŠธ๋ ˆ์ด๋“œ ์˜คํ”„๋ฅผ ๊ณ ๋ คํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

  • W,R ์ด ๋ช‡ ๊ฐœ ์•ˆ๋˜๋Š” ๊ฒฝ์šฐ ์‘๋‹ต ๋ ˆ์ดํ„ด์‹œ๋Š” ๋งค์šฐ ๋น ๋ฅผ ๊ฒƒ์ด๋‹ค. ๋Œ€์‹  ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์€ ์ž ๊น ์ผ์น˜ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.
  • W,R ์ด ์ „์ฒด ๊ฐœ์ˆ˜์™€ ๋น„์Šทํ•˜๋‹ค๋ฉด ์‘๋‹ต ๋ ˆ์ดํ„ด์‹œ๋Š” ๋Š๋ฆด ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์€ ์–ธ์ œ๋‚˜ ๊ฐ™์„ ๊ฒƒ์ด๋‹ค.

์ •๋‹ต์€ ์—†๋‹ค. ์„œ๋น„์Šค์— ๋งž์ถฐ์„œ ๊ฒฐ์ •ํ•ด์•ผํ•œ๋‹ค.

 

ํ”„๋กœํ† ์ฝœ๋งŒ ๊ณ ๋ คํ–ˆ๋‹ค๊ณ  ๋์€ ์•„๋‹ˆ๋‹ค. ์„œ๋น„์Šค์˜ ํŠน์„ฑ์— ๋”ฐ๋ผ ์ผ๊ด€์„ฑ ๋ชจ๋ธ์„ ์ •ํ•ด์„œ ๊ตฌํ˜„ํ•ด์•ผํ•œ๋‹ค.

  • ๊ฐ•ํ•œ ์ผ๊ด€์„ฑ(Strong Consistency) : ๋ชจ๋“  ์ฝ๊ธฐ๋Š” ์ตœ์‹  ๋ฐ์ดํ„ฐ์ด๋‹ค. ๋‚ก์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์—†๋‹ค.
  • ์•ฝํ•œ ์ผ๊ด€์„ฑ(Weak Consistency) : ์ฝ๊ธฐ ์—ฐ์‚ฐ์€ ์ตœ์‹  ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹ ์ˆ˜ ์žˆ๋‹ค. ์–ด๋Š์ •๋„ ์ผ๊ด€์„ฑ ์†์‹ค์„ ๊ฐ์ˆ˜ํ•œ๋‹ค.
  • ์ตœ์ข… ์ผ๊ด€์„ฑ(Eventual Consistency) : ์ฝ๊ธฐ ์—ฐ์‚ฐ์€ ์ตœ์‹  ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹ ์ˆ˜ ์žˆ์œผ๋‚˜ ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ๋ชจ๋“  ์‚ฌ๋ณธ์— ์ผ๊ด€์„ฑ์ด ๋งž์ถฐ์ง„๋‹ค.

DB ๊ฐ™์€ ๊ฒฝ์šฐ์—” ๊ฐ•ํ•œ ์ผ๊ด€์„ฑ์„, ๋™์˜์ƒ ์ŠคํŠธ๋ฆฌ๋ฐ์„œ๋น„์Šค๋Š” ์•ฝํ•œ ์ผ๊ด€์„ฑ์„, key-value ์ธ ๋‹ค์ด๋‚˜๋ชจ, ์นด์‚ฐ๋“œ๋ผ ๊ฐ™์€๊ฒฝ์šฐ์—๋Š” ์ตœ์ข… ์ผ๊ด€์„ฑ ๋ชจ๋ธ์„ ์„ ํƒํ•˜๊ณ  ์žˆ๋‹ค.

์ตœ์ข… ์ผ๊ด€์„ฑ๋“ฑ์—์„œ ์ผ๊ด€์„ฑ์„ ํ•ด์†Œํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋Š”, ๋ฐ์ดํ„ฐ ๋ฒ„์ €๋‹(versioning)๊ณผ ๋ฒกํ„ฐ ์‹œ๊ณ„(vector clock)์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

  • ๋ฒ„์ €๋‹์€ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์‹œ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ์˜ ์ƒˆ๋กœ์šด ๋ฒ„์ „์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค. ๊ฐ ๋ฒ„์ „์˜ ๋ฐ์ดํ„ฐ๋Š” ๋ถˆ๋ณ€ํ•˜๋‹ค
  • ๋ฒกํ„ฐ ์‹œ๊ณ„๋Š” [์„œ๋ฒ„, ๋ฒ„์ „]์˜ ์ˆœ์„œ์Œ์„ ์‹œ๊ฐ„ ๊ฐ’์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ์— ๋‹ฌ์•„๋‘๋Š” ๊ฒƒ์ด๋‹ค. ์–ด๋–ค ๋ฒ„์ „์ด ์„ ํ–‰ ๋ฒ„์ „์ธ์ง€, ํ›„ํ–‰ ๋ฒ„์ „์ธ์ง€, ์•„๋‹ˆ๋ฉด ๋‹ค๋ฅธ ๋ฒ„์ „๊ณผ ์ถฉ๋Œ์ด ์žˆ๋Š”์ง€ ํŒ๋ณ„ํ•˜๋Š”๋ฐ ์“ฐ์ธ๋‹ค.

์ถฉ๋Œ๋‚˜๋ฉด ๊ทธ ๋‹ค์Œ ์š”์ฒญ์ž(ํด๋ผ์ด์–ธํŠธ)๊ฐ€ ์ด๋ฅผ ์ง์ ‘ git merge ํ•ด์„œ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•œ ์›๋ฆฌ

 

๋ฌผ๋ก  ์ด ๋ฐฉ๋ฒ•๋„ ๋งŒ๋Šฅ์€ ์•„๋‹ˆ๋‹ค. ์•„๋ž˜์˜ ๋‹จ์ ๋“ค์„ ๋ณด๊ณ  ํŠธ๋ ˆ์ด๋“œ ์˜คํ”„๋ฅผ ๊ณ ๋ คํ•ด์•ผํ•œ๋‹ค.

  • ์‚ฌ์šฉ์ž(ํด๋ผ์ด์–ธํŠธ)๊ฐ€ ์ถฉ๋Œ์„ ๊ฐ์ง€ํ•˜๊ณ  ํ•ด์†Œํ•ด์•ผํ•œ๋‹ค. ํด๋ผ์ด์–ธํŠธ ๊ตฌํ˜„์ด ๋ณต์žกํ•ด์ง„๋‹ค
    Last Write Wins  ๊ฐ™์€ ๊ทœ์น™์„ ์ •ํ•˜๊ณ  timestamp์— ๊ธฐ๋ฐ˜ํ•ด์„œ ์ถฉ๋Œ์„ ํ•ด๊ฒฐํ•˜๋Š” ๋กœ์ง์„ ๊ตฌํ˜„ํ•ด์•ผํ•œ๋‹ค.
  • ์ˆ˜์ •์ด ์žฆ์„ ๊ฒฝ์šฐ, ์ด๋ก ์ƒ [์„œ๋ฒ„:๋ฒ„์ „]์˜ ์Œ์ด ์—„์ฒญ๋‚˜๊ฒŒ ๋งŽ์ด ๋Š˜์–ด๋‚  ์ˆ˜ ์žˆ๋‹ค.
    ๋‹คํ–‰ํžˆ AWS ๋‹ค์ด๋‚˜๋ชจ ๋ฌธํ—Œ์— ๋”ฐ๋ฅด๋ฉด ์‹ค์ œ ์„œ๋น„์Šค์—์„œ [์„œ๋ฒ„:๋ฒ„์ „]์Œ์ด ๋งŽ์•„์ ธ์„œ ๋ฌธ์ œ๊ฐ€ ๋œ ์ ์€ ์—†๋‹ค๊ณ  ํ•œ๋‹ค.

 

 

# Handling failures (์žฅ์•  ๊ฐ์ง€, ์ฒ˜๋ฆฌ)

๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ์—์„œ ์žฅ์• ๋Š” ๊ทธ์ € ๋ถˆ๊ฐ€ํ”ผํ•˜๊ธฐ๋งŒ ํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์•„์ฃผ ํ”ํ•˜๊ฒŒ ๋ฒŒ์–ด์ง€๋Š” ์‚ฌ๊ฑด์ด๋‹ค. ๋จผ์ € ์žฅ์•  ๊ฐ์ง€ ๊ธฐ๋ฒ•์„ ์‚ดํŽด๋ณด๊ณ  ๋’ค์—์„œ ์žฅ์•  ํ•ด์†Œ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž.

 

๋ถ„์‚ฐ ํ™˜๊ฒฝ์—์„œ ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ๋ฐฉ๋ฒ•์€ ์ „๋ถ€ ๋‹ค ์—ฐ๊ฒฐํ•ด ๋ฉ€ํ‹ฐ์บ์ŠคํŒ…(multicasting) ์œผ๋กœ ์žฅ์• ๋ฅผ ๊ฐ์ง€ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋‹น์—ฐํžˆ ์ด๋Š” ๋น„ํšจ์œจ์ ์ด๋‹ค.

 

๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ๊ฐ€์‹ญ ํ”„๋กœํ† ์ฝœ(gossip protocol)๊ฐ™์€ ๋ถ„์‚ฐํ˜• ์žฅ์•  ๊ฐ์ง€ ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๋™์ž‘ํ•œ๋‹ค.

  • ๊ฐ ๋…ธ๋“œ๋Š” ๋ฉค๋ฒ„์‹ญ ๋ชฉ๋ก์„ ์œ ์ง€ํ•œ๋‹ค. ๋ฉค๋ฒ„์‹ญ ๋ชฉ๋ก์€ ๊ฐ [memberId, Heartbeat counter] ์Œ์˜ ๋ชฉ๋ก์ด๋‹ค.
  • ๊ฐ ๋…ธ๋“œ๋Š” ์ฃผ๊ธฐ์ ์œผ๋กœ ์ž์‹ ์˜ Heartbeat counter ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.
  • ๊ฐ ๋…ธ๋“œ๋Š” ๋ฌด์ž‘์œ„๋กœ ์„ ์ •๋œ ๋…ธ๋“œ๋“ค์—๊ฒŒ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ž์‹ ์˜ Heartbeat counter ๋ชฉ๋ก์„ ๋ณด๋‚ธ๋‹ค.
  • Heartbeat counter ๋ชฉ๋ก์„ ๋ฐ›์€ ๋…ธ๋“œ๋Š” ๋ฉค๋ฒ„์‹ญ ๋ชฉ๋ก์„ ์ตœ์‹ ๊ฐ’์œผ๋กœ ๊ฐฑ์‹ ํ•œ๋‹ค.
  • ์–ด๋–ค ๋ฉค๋ฒ„์˜ Heartbeat counter ๊ฐ’์ด ์ง€์ •๋œ ์‹œ๊ฐ„๋™์•ˆ ๊ฐฑ์‹ ๋˜์ง€ ์•Š์œผ๋ฉด (= ํŠน์ • ์„œ๋ฒ„์˜ counter ๋ฆฌ์ŠคํŠธ๋ฅผ ์–ด๋””์—๋„ ๋ฐ›์ง€ ๋ชปํ–ˆ๋‹ค๋ฉด) ํ•ด๋‹น ๋ฉค๋ฒ„๋Š” ์žฅ์•  ์ƒํƒœ์ธ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋œ๋‹ค.

counter๊ฐ€ ์˜ค๋žซ๋™์•ˆ ์ฆ๊ฐ€๋˜์ง€์•Š์œผ๋ฉด, ์ด๋ฅผ ๋ฐœ๊ฒฌํ•œ ๋ชจ๋“  ๋…ธ๋“œ๋Š” ํ•ด๋‹นID๋ฅผ ์žฅ์•  ๋…ธ๋“œ๋กœ ํ‘œ์‹œํ•œ๋‹ค.

 

1๏ธโƒฃ ๊ฐ€์‹ญ ํ”„๋กœํ† ์ฝœ๋กœ ๋ฐœ๊ฒฌ -> ์ผ์‹œ์ ์ธ ์žฅ์•  ์ฒ˜๋ฆฌ

๋งŒ์•ฝ ์œ„ ๊ณผ์ •์„ ํ†ตํ•ด ์žฅ์• ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ๋‹ค๋ฉด ๊ฐ€์šฉ์„ฑ ๋ณด์žฅ์„ ์œ„ํ•ด ์ ์ ˆํ•œ ์กฐ์น˜๋ฅผ ์ทจํ•ด์•ผํ•œ๋‹ค.

  • ์—„๊ฒฉํ•œ ์ •์กฑ์ˆ˜(strict quorum): ์ „์ฒด ์ฝ๊ธฐ/์“ฐ๊ธฐ ์—ฐ์‚ฐ์„ ๊ธˆ์ง€์‹œ์ผœ๋ฒ„๋ฆฐ๋‹ค. ์žฅ์•  ๋ฐœ์ƒ์‹œ ๊ฐ€์šฉ์„ฑ์€ ์ตœ์•…์ด ๋œ๋‹ค.
  • ๋Š์Šจํ•œ ์ •์กฑ์ˆ˜(sloppy quorum): ์“ฐ๊ธฐ ์—ฐ์‚ฐ์šฉ W๊ฐœ์˜ ์ •์ƒ๋…ธ๋“œ, ์ฝ๊ธฐ ์—ฐ์‚ฐ์šฉ R๊ฐœ์˜ ์ •์ƒ๋…ธ๋“œ๋งŒ ์‚ฌ์šฉํ•œ๋‹ค. ๋‚˜๋จธ์ง€ ์„œ๋ฒ„๋Š” ๋ฌด์‹œํ•œ๋‹ค.
    ์ดํ›„ ์žฅ์•  ์„œ๋ฒ„๊ฐ€ ๋ณต๊ตฌ๋˜์—ˆ์„ ๋•Œ ๋ณ€๊ฒฝ์‚ฌํ•ญ(hint)์„ ์ผ๊ด„ ๋ฐ˜์˜ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค.

์žฅ์•  ํ•ด๊ฒฐ์ดํ›„ ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๊ฒŒ ๋ณ„๋„๋กœ ๊ธฐ๋ก(hint)ํ•œ๋‹ค.

 

2๏ธโƒฃ ๊ฐ€์‹ญ ํ”„๋กœํ† ์ฝœ๋กœ ๋ฐœ๊ฒฌ -> ์˜๊ตฌ์ ์ธ ์žฅ์•  ์ฒ˜๋ฆฌ

ํ•ด๋‹น ์„œ๋ฒ„๊ฐ€ ์ž ๊น ๋ฌธ์ œ์˜€๋‹ค๋ฉด ์œ„ ๋ฐฉ๋ฒ•์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋œ๋‹ค. ๋‹ค๋งŒ ์ž์—ฐ์žฌํ•ด๋‚˜ ์–ด๋– ํ•œ ์ด์œ ๋กœ ์˜๊ตฌ์ ์ธ ์žฅ์• ์ƒํ™ฉ์ด๋ผ๋ฉด ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ๊นŒ?

๋ฐ˜-์—”ํŠธ๋กœํ”ผ ํ”„๋กœํ† ์ฝœ (anti-entropy protocol) ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ์‚ฌ๋ณธ์„ ๋น„๊ตํ•˜์—ฌ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ๊ฐฑ์‹ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

 

๋‹จ์ˆœ ๋ฌด์‹ํ•˜๊ฒŒ ๋ชจ๋“  ๊ฑธ ๋น„๊ตํ•ด์„œ ์‚ฌ๋ณธ์„ ์ฐพ์„์ˆ˜๋„ ์žˆ๊ฒ ์ง€๋งŒ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ์—๋Š” ์„ฑ๋Šฅ์ด ๋งค์šฐ ๋Š๋ ค์ง„๋‹ค. ๋Œ€์‹  ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋จธํดํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉด ๋ฐ์ดํ„ฐ ์ด๋Ÿ‰๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ์ด๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. ์•„๋ž˜์™€ ๊ฐ™์ด ๋จธํดํŠธ๋ฆฌ(์ž์‹ ๋…ธ๋“œ๋“ค์˜ ๋ ˆ์ด๋ธ”๋กœ๋ถ€ํ„ฐ ๊ณ„์‚ฐ๋œ ํ•ด์‹œ๊ฐ’์„ ํ…Œ์ด๋ธ”๋กœ ๋ถ™์—ฌ๋‘๋Š” ํŠธ๋ฆฌ)๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค.
  2. ์ดํ›„ ์™ผ์ชฝ ์ž์‹->์˜ค๋ฅธ์ชฝ ์ž์‹์œผ๋กœ BFS ํƒ์ƒ‰์„ ํ•˜๋ฉฐ root ๋…ธ๋“œ ํ•ด์‹œ์™€ ๋น„๊ตํ•œ๋‹ค.
  3. ํ•ด์‰ฌ๊ฐ’์ด ๊ฐ™๋‹ค๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ™์œผ๋‹ˆ ๋„˜์–ด๊ฐ€๋ฉด ๋˜๊ณ , ๋‹ค๋ฅด๋‹ค๋ฉด ๊ทธ ๋ฒ„ํ‚ท์„ ๋™๊ธฐํ™”ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

๋จธํด ํŠธ๋ฆฌ: https://en.wikipedia.org/wiki/Merkle_tree

์นด์‚ฐ๋“œ๋ผ ์•„ํ‚คํ…์ฒ˜: https://cassandra.apache.org/doc/latest/architecture/

SStable: https://www.igvita.com/2012/02/06/sstable-and-log-structured-storage-leveldb/

๋ธ”๋ฃธ ํ•„ํ„ฐ https://en.wikipedia.org/wiki/Bloom_filter

 

 

 

3๏ธโƒฃ ํŠน์ • ๋ฐ์ดํ„ฐ์„ผํ„ฐ์˜ ์žฅ์• 

์ด๋Š” ์ž์—ฐ์žฌํ•ด์— ๊ฐ€๊นŒ์šฐ๋ฏ€๋กœ ํ”„๋กœํ† ์ฝœ๋กœ ๊ทน๋ณตํ•  ์ˆ˜ ์—†๋‹ค. ์ดˆ๊ธฐ ์„ค๊ณ„๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ๋ฅผ ๋‹ค์ค‘ํ™”ํ•˜์—ฌ ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

 

 

# System architecture diagram (์•„ํ‚คํ…์ฒ˜ ๋‹ค์ด์–ด๊ทธ๋žจ ์„ค๊ณ„)

์œ„์—์„œ ์—ฌ๋Ÿฌ๊ฐ€์ง€๋ฅผ ๊ณ ๋ คํ•ด๋ณด์•˜์œผ๋‹ˆ ์ด์ œ ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•˜๊ธฐ์œ„ํ•ด ํฐ๊ทธ๋ฆผ, ์ฆ‰ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ทธ๋ฆด ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ๋Š” ํ‚ค-๊ฐ’ ์ €์žฅ์†Œ๊ฐ€ ์ œ๊ณตํ•˜๋Š” API get(key)์™€ put(key, value)๋กœ ํ†ต์‹ ํ•œ๋‹ค.
  • ์ค‘์žฌ์ž๋Š” ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ํ‚ค-๊ฐ’ ์ €์žฅ์†Œ์— ๋Œ€ํ•œ ํ”„๋ฝ์‹œ ์—ญํ• ์„ ํ•˜๋Š” ๋…ธ๋“œ๋‹ค.
  • ๋…ธ๋“œ๋Š” ์•ˆ์ •ํ•ด์‹œ์˜ ํ•ด์‹œ๋ง ์œ„์— ๋ถ„ํฌํ•œ๋‹ค.
  • Client API ์ง„์ž…์  ๋ฐ ๋ถ„์‚ฐ ํ™˜๊ฒฝ์—์„œ ํ•„์š”ํ•œ ์–ธ๊ธ‰ํ•œ ์š”์†Œ( ์žฅ์• ๊ฐ์ง€, ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ, ๋‹ค์ค‘ํ™”, ๋ณต๊ตฌ..)๋ฅผ ๋‹ค ์ง€์›ํ•ด์•ผํ•œ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด key-value ์ €์žฅ์†Œ์ค‘ ํ•˜๋‚˜์ธ ์นด์‚ฐ๋“œ๋ผ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์“ฐ๊ธฐ์™€ ์ฝ๊ธฐ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.

 

 

 

๐Ÿ€ ๋ถ€๋ก - AWS Dynamo DB ๊ฐ€ ์„ค๊ณ„๋œ ๊ณผ์ •

AWS์—์„œ ์ „์„ธ๊ณ„์ ์ธ ์„œ๋น„์Šค๋ฅผ ์šด์˜ํ•  ๋•Œ ํ•„์š”ํ•œ ๊ณ ๊ฐ€์šฉ์„ฑ์˜ ๋ถ„์‚ฐ key-value ์ €์žฅ์†Œ๊ฐ€ ํ•„์š”ํ–ˆ๊ณ  ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๋…ผ๋ฌธ(Dynamo: Amazon’s Highly Available Key-value Store)์„ ๊ฒŒ์ œ ํ›„ ๋งŒ๋“  ์„œ๋น„์Šค๊ฐ€ DynamoDB์ด๋‹ค. ์‹ค์ œ๋กœ ์˜คํ”ˆ์†Œ์Šค์ธ ์นด์‚ฐ๋“œ๋ผ๋„ ์ด ๋…ผ๋ฌธ์˜ ์˜ํ–ฅ์„ ๋ฐ›์•˜๋‹ค๊ณ  ํ•œ๋‹ค.

 

๋ฌผ๋ก  ์‹ฌ์‹ฌํ•ด์„œ Dynomo๋ฅผ ๋งŒ๋“  ๊ฑด ์•„๋‹ˆ๋‹ค. AWS๋Š” ๊ธฐ์กด์—๋Š” Oracle DB๋กœ ์šด์˜ํ•˜์˜€์œผ๋‚˜, ์„œ๋น„์Šค๊ฐ€ ์ „์„ธ๊ณ„์ ์œผ๋กœ ํ™•์žฅ๋˜๋ฉฐ ๋” ์ด์ƒ ๊ด€๊ณ„ํ˜•DB๋กœ๋Š” ๊ฐ๋‹นํ•  ์ˆ˜๊ฐ€ ์—†์—ˆ๊ธฐ์— ์ง์ ‘ ๋ถ„์‚ฐํ™˜๊ฒฝ์— ์ ์ ˆํ•œ ๊ณ ๊ฐ€์šฉ์„ฑ DB๋ฅผ ์„ค๊ณ„ํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜์˜€๋‹ค๊ณ  ํ•œ๋‹ค.

 

# ์–ด๋–ค ๊ณผ์ •์„ ๊ฑฐ์ณ ๋งŒ๋“ค์–ด์กŒ์„๊นŒ 

๋ถ„์‚ฐ ํ™˜๊ฒฝ Key-Value ์ €์žฅ์†Œ์ธ Dynomo๊ฐ€ ํƒ„์ƒํ•˜๊ฒŒ ๋œ ๋ฐฐ๊ฒฝ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • Oracle ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ ํŒจํ„ด์„ ์กฐ์‚ฌ -> ์Šค์ผ€์ผ ์•„์›ƒ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด JOIN ์ž์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•˜๋‹ค.
  • ์ฆ‰ ๋ณต์ˆ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒฝ์šฐ, ํ•œ ์ฟผ๋ฆฌ๊ฐ€ ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์—์„œ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ํ˜•ํƒœ์˜€๋‹ค.
  • ๊ทธ ์™ธ์—๋Š” ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•œ ๋‹จ์ผ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰์ด ๋Œ€๋ถ€๋ถ„์ด์—ˆ๋‹ค.

https://changhoi.kim/posts/database/dynamodb-internals-1/

 

 

# ์–ด๋–ค ๊ณ ๋ฏผ๋“ค์ด ์žˆ์—ˆ์„๊นŒ

Dynomo๋Š” ๋„คํŠธ์›Œํฌ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ์ด๋ผ๋Š” ๊ฐ€์ • ์•„๋ž˜ ๊ฐ€์šฉ์„ฑ์„ ์ตœ๋Œ€๋ก ๋†’์ด๋„๋ก ๋””์ž์ธ๋˜์—ˆ๋‹ค.

์ฆ‰ ๋ฐ์ดํ„ฐ๋Š” ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ „ํŒŒ๋˜์ง€๋งŒ ์ด์— ๋”ฐ๋ฅธ ๋ฐ์ดํ„ฐ ์ถฉ๋Œ ๋ฌธ์ œ (ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค๋ฅธ ์ˆ˜์ •์œผ๋กœ ์—ฌ๋Ÿฌ ๋ฒ„์ „์œผ๋กœ ๋ถ„๊ธฐ) ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฝ๊ธฐ ์‹œ์ ์˜ ํ•ด๊ฒฐ์€, ์ผ๋‹จ ์“ฐ๊ธฐ๋Š” ํ—ˆ์šฉํ•˜๊ณ  ์ดํ›„ ๋ณต๊ตฌํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์น˜๊ฒŒ๋œ๋‹ค.

 

๋ถ„์‚ฐ ์ €์žฅ์†Œ์—์„œ๋Š” DB ํŠธ๋žœ์žญ์…˜์ฒ˜๋Ÿผ ์“ฐ๊ธฐ๋ฅผ ๋ง‰์„ ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ž˜์„œ "ํ•ญ์ƒ ์“ฐ๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•œ" key-value ์ €์žฅ์†Œ๋ฅผ ๋ชฉํ‘œ๋กœ ํ•˜๊ฒŒ๋œ๋‹ค.

  • ์–ธ์ œ ํ•ด๊ฒฐํ•  ๊ฒƒ์ธ๊ฐ€?
    ์“ฐ๊ธฐ ์ž‘์—…์˜ ๊ฐ€์šฉ์„ฑ์„ ์œ„ํ•ด ์ฝ๊ธฐ ์ž‘์—…์—์„œ ์ถฉ๋Œ์„ ํ•ด๊ฒฐํ•œ๋‹ค.
  • ๋ˆ„๊ฐ€ ํ•ด๊ฒฐํ•  ๊ฒƒ์ธ๊ฐ€?
    DB๊ฐ€ ์•„๋‹Œ ์„œ๋ฒ„ ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜์—ฌ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.

์—ฌ๊ธฐ์— ์žˆ์–ด ์•„๋ž˜์˜ ์š”์†Œ๋“ค์„ ๊ฐ™์ด ๊ณ ๋ คํ–ˆ๋‹ค๊ณ  ํ•œ๋‹ค.

  • ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€/์‚ญ์ œํ•  ๋•Œ ์šด์˜ ๋ฐ ์‹œ์Šคํ…œ์— ์ตœ์†Œํ•œ์˜ ์˜ํ–ฅ๋งŒ์„ ์ฃผ์–ด์•ผํ•œ๋‹ค.
  • ๋‹จ์ผ ๋…ธ๋“œ์˜ ์žฅ์• ๊ฐ€ ์ „ํŒŒ๋˜์„œ๋Š” ์•ˆ๋œ๋‹ค. ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ๋™์ผํ•œ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ด์•ผํ•œ๋‹ค.
  • ์ค‘์•™ ์‹œ์Šคํ…œ์ด ์žฅ์• ๋กœ ๋งˆ๋น„๋˜๋”๋ผ๋„ P2P ๋ฅผ ํ†ตํ•œ ๋ถ„์‚ฐ ์ปจํŠธ๋กค์ด ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•ด์•ผํ•œ๋‹ค.
  • ๊ฐ ๋…ธ๋“œ๋“ค์€ ์ƒํ™ฉ์— ๋”ฐ๋ผ ํšจ์œจ์ ์œผ๋กœ ๋‹ค์–‘ํ•˜๊ฒŒ(Heterogeneitry) ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ๋‹ค.
ํŒŒํ‹ฐ์…”๋‹ ( ๋…ธ๋“œ ์ถ”๊ฐ€ / ์ œ๊ฑฐ) ์•ˆ์ •ํ•ด์‹œ ์‚ฌ์šฉ ํŠธ๋ž˜ํ”ฝ์— ๋”ฐ๋ฅธ ์„œ๋ฒ„ ์ฆ์„ค, ์ฆ‰ ์ฆ๋ถ„ ํ™•์žฅ์„ฑ์„ ์‰ฝ๊ฒŒ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์Œ.
์“ฐ๊ธฐ ๊ณ ๊ฐ€์šฉ์„ฑ(HA) ๊ตฌ์„ฑ vector clock ์‚ฌ์šฉ
๋ฐ์ดํ„ฐ ์ถฉ๋Œ์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•ด๊ฒฐ
๋ฐ์ดํ„ฐ ์ „ํŒŒ๋Š” Eventual Consistency๋ฅผ ์„ ํƒํ•จ. ์“ฐ๊ธฐ ๊ฐ€์šฉ์„ฑ์„ ๋ณด์žฅ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ.
์ผ์‹œ์  ์‹คํŒจ quorum ํ”„๋กœํ† ์ฝœ๊ณผ Hinted Handoff(๋ณต๊ตฌ๋ฅผ ์œ„ํ•œ ๊ธฐ๋ก) ์‚ฌ์šฉ ๋ฒ”์šฉ์ ์ธ ์‹œ์Šคํ…œ์„ ์œ„ํ•œ ์ผ์‹œ์ ์ธ ์‹คํŒจ ๋ณต๊ตฌ ๋ฐฉ๋ฒ•
๋ฉค๋ฒ„์‹ญ, ์žฅ์•  ํƒ์ง€ gossip ํ”„๋กœํ† ์ฝœ ์‚ฌ์šฉ ๊ฐ ๋…ธ๋“œ์˜ ๋™์ผ์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ํƒˆ ์ค‘์•™ํ™” ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„

 

Dynomo๋Š” ์•ˆ์ • ํ•ด์‹œ์— ์˜ํ•ด ๋ชจ๋“  ๋…ธ๋“œ์—์„œ ์“ฐ๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ฆ‰ Leader ๋…ธ๋“œ๋ผ๋Š” ๊ฐœ๋… ์ž์ฒด๊ฐ€ ๋ชจํ˜ธํ•˜๋‹ค.

์“ฐ๊ธฐ๋ฅผ ์‹คํŒจํ•˜๋Š” ๊ฒƒ์€ ๋Š์Šจํ•œ ์ •์กฑ์ˆ˜ (sloppy quorum)๋ฅผ ์ด์šฉํ•ด ์ฝ๊ธฐ/์“ฐ๊ธฐ๊ฐ€ ์„ฑ๊ณตํ–ˆ๋Š”์ง€๋ฅผ ํŒ๋‹จํ•œ๋‹ค. 

 

 

์œ„์—์„œ ์„ค๋ช…ํ•œ quorum๊ณผ๋Š” ์กฐ๊ธˆ ๋‹ค๋ฅธ๊ฒŒ Dynamo๋Š” ์š”์ฒญ์„ ๋ฐ›์•„ ๋…ธ๋“œ์—๊ฒŒ ์ „ํŒŒํ•ด์ฃผ๋Š” ์ค‘๊ฐœ์ž(Coordinator)๊ฐ€ ๋”ฐ๋กœ ์—†๋‹ค. ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” key์— ๋”ฐ๋ผ ์•ˆ์ •ํ•ด์‹œ์—์„œ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ด์•ผํ•˜๋Š” ์ฒซ๋ฒˆ์งธ ๋…ธ๋“œ๊ฐ€ ์ค‘๊ฐœ์ž ์—ญํ• ์„ ํ•˜๋„๋ก ๊ตฌํ˜„๋˜์–ด์žˆ๋‹ค.

 

์š”์ฒญ์„ ๋ฐ›์•„ ์ค‘๊ฐœ์ž๊ฐ€ ๋œ ๋…ธ๋“œ๋Š” ๋ณต์ œํ•ด์•ผํ•˜๋Š” ๋…ธ๋“œ ์ˆ˜ ๋งŒํผ ๋‹ค๋ฅธ ๋…ธ๋“œ(preference list)์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „ํŒŒํ•ด์•ผํ•œ๋‹ค. ์ด ๊ณผ์ • ์†์—์„œ ์‹คํŒจ ์—ฌ๋ถ€๋Š” ์–ธ๊ธ‰ํ•œ๋Œ€๋กœ ๋Š์Šจํ•œ ์ •์กฑ์ˆ˜(Sloppy Quorum)๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์„ฑ๊ณต ์‘๋‹ต์„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋Š์Šจํ•œ ์ •์กฑ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ผ๋ถ€ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ์„œ๋น„์Šค ๊ฐ€์šฉ์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค.

 

 

 

์ด ๋‚ด์šฉ๋“ค์„ ์ฝ์–ด๋ณด๋ฉด ์•ž์—์„œ ์–ธ๊ธ‰ํ•œ ๋‚ด์šฉ๋“ค๊ณผ ๋น„์Šทํ•œ ๋ถ€๋ถ„์ด ๋งŽ๋‹ค๋Š” ๊ฑธ ๋Š๋‚„ ๊ฒƒ์ด๋‹ค.

๋‹น์žฅ์€ ํ•„์š”์—†์„ ์ˆ˜ ์žˆ๋Š” ์ง€์‹์ด์ง€๋งŒ ๋ถ„์‚ฐ ํ™˜๊ฒฝ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋œ๋‹ค๋ฉด ์ง€๊ธˆ ๋ฐฐ์› ๋˜ ๋‚ด์šฉ๋“ค์„ ์•Œ์ฐจ๊ฒŒ ์จ๋จน์„ ์ˆ˜ ์žˆ๋‹ค.

์•ž์—์„œ ๋ฐฐ์šด ๋‚ด์šฉ๋“ค

 

์• ์ดˆ์— Dynomo๋„ ์ฒœ์žฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง ํ•˜๊ณ  ๋งŒ๋“ค์–ด๋‚ธ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ „๋ถ€ํ„ฐ ๋…ผ์˜๋˜์–ด์˜ค๋˜ ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•๋“ค์„ ์ตœ์ ํ™”ํ•œ ๊ฒฐ๊ณผ์ด๊ธฐ ๋•Œ๋ฌธ์ด๊ธฐ๋„ ํ•˜๋‹ค.

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

JiwonDev

JiwonDev

ํ™œ๋™ํ•˜๊ธฐ