ν‹°μŠ€ν† λ¦¬ λ·°

 

 

πŸ‘©πŸ»‍🏫 ν‚€-κ°’ μ €μž₯μ†Œ μ‹œμŠ€ν…œμ„ μ„€κ³„ν•΄ μ£Όμ„Έμš”!

λΌλŠ” μš”μ²­μ„ λ°›μ•˜λ‹€λ©΄?

 

λ¨Όμ € ν‚€-κ°’ μ €μž₯μ†Œκ°€ 무엇인지 μ•Œμ•„μ•Ό ν•œλ‹€.

 

πŸ€” ν‚€-κ°’ μ €μž₯μ†Œ?

  • 자료ꡬ쑰의 Mapκ³Ό 같이 ν‚€(key)λ₯Ό μ‹λ³„μžλ‘œ κ°’(value)을 μ €μž₯ν•˜λŠ” μΌμ’…μ˜ 데이터 베이슀
  • λΉ„κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€ (ex. μ•„λ§ˆμ‘΄ λ‹€μ΄λ‚˜λͺ¨, memcached, λ ˆλ””μŠ€)

πŸ’¬ ν‚€-κ°’ μ €μž₯μ†Œμ˜ νŠΉμ§•

βœ”οΈ ν‚€λŠ” μœ μΌν•΄μ•Ό ν•œλ‹€.

βœ”οΈ 였직 ν‚€λ‘œ λŒ€μ‘λ˜λŠ” 값에 μ ‘κ·Όν•  수 μžˆλ‹€.

βœ”οΈ ν‚€λŠ” 일반 ν…μŠ€νŠΈμ΄κ±°λ‚˜ ν•΄μ‹œ 값이닀.

βœ”οΈ ν‚€λŠ” μ§§μ„μˆ˜λ‘ μ„±λŠ₯이 μ’‹λ‹€.

βœ”οΈ 값은 λ¬Έμžμ—΄, 리슀트, 객체 λ“± λ‹€μ–‘ν•œ ν˜•νƒœμ˜ 데이터λ₯Ό κ°€μ§ˆ 수 μžˆλ‹€.

 

 

기본적인 κΈ°λŠ₯(put(key, value), get(key))을 가진 ν‚€-κ°’ μ €μž₯μ†Œ μ‹œμŠ€ν…œμ„ 섀계 ν•΄λ³΄μž!

 


 

1️⃣ 단일 μ„œλ²„ ν‚€-κ°’ μ €μž₯μ†Œ

 : ν‚€-κ°’ 쌍 μ „λΆ€λ₯Ό λ©”λͺ¨λ¦¬μ— ν•΄μ‹œ ν…Œμ΄λΈ”λ‘œ μ €μž₯

  • 속도가 λΉ λ₯΄λ‹€.
  • 데이터가 λ§Žμ•„μ§€λ©΄ λ©”λͺ¨λ¦¬μ— λͺ¨λ“  데이터λ₯Ό μ €μž₯ν•  수 μ—†λ‹€.
    πŸ’‘ ν•΄κ²°μ±…
      - 데이터 μ••μΆ•
      - 자주 μ“°μ΄λŠ” λ°μ΄ν„°λ§Œ λ©”λͺ¨λ¦¬μ— μ €μž₯ν•˜κ³  λ‚˜λ¨Έμ§€λŠ” λ””μŠ€ν¬μ— μ €μž₯

πŸ€” ν•˜λ‚˜μ˜ μ„œλ²„μ—μ„œ 데이터 읽기/μ“°κΈ° 연산은 μ–΄λ–»κ²Œ λ™μž‘ν• κΉŒ?

βœ”οΈ μ“°κΈ° 경둜

  1.  μ“°κΈ° μš”μ²­μ΄ 컀밋 둜그 νŒŒμΌμ— κΈ°λ‘λœλ‹€.
  2. 데이터가 λ©”λͺ¨λ¦¬ μΊμ‹œμ— ν‚€λ‘λœλ‹€.
  3. λ©”λͺ¨λ¦¬ μΊμ‹œκ°€ κ°€λ“μ°¨κ±°λ‚˜ μž„κ³„μΉ˜μ— λ„λ‹¬ν•˜λ©΄ λ°μ΄ν„°λŠ” λ””μŠ€ν¬μ— μžˆλŠ” SSTable에 κΈ°λ‘λœλ‹€.

* SSTable: Sorted-String Table, <ν‚€, κ°’>의 μˆœμ„œμŒμ„ μ •λ ¬λœ 리슀트 ν˜•νƒœλ‘œ κ΄€λ¦¬ν•˜λŠ” ν…Œμ΄λΈ”

 

βœ”οΈ μ½κΈ° 경둜

  1.  λ°μ΄ν„°κ°€ λ©”λͺ¨λ¦¬μ— μžˆλŠ”μ§€ κ²€μ‚¬ν•œλ‹€. 있으면 λ°”λ‘œ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•˜κ³  μ—†λ‹€λ©΄ 2둜 κ°„λ‹€.
  2. λΈ”λ£Έ ν•„ν„°λ₯Ό 톡해 μ–΄λ–€ SSTable에 ν‚€κ°€ λ³΄κ΄€λ˜μ–΄ μžˆλŠ”μ§€ μ•Œμ•„λ‚Έλ‹€.
  3. SSTableμ—μ„œ 데이터λ₯Ό κ°€μ Έμ˜¨λ‹€.
  4. ν•΄λ‹Ή 데이터λ₯Ό λ°˜ν™˜ν•œλ‹€.

* λΈ”λ£Έ ν•„ν„°: μ–΄λŠ SSTable에 μ°ΎλŠ” ν‚€κ°€ μžˆλŠ”μ§€ μ°Ύμ•„μ£ΌλŠ” ν•„ν„°

 

ν•˜μ§€λ§Œ 데이터가 계속 μ¦κ°€ν•˜λ©΄ κ²°κ΅­ ν•˜λ‚˜μ˜ μ„œλ²„λ‘œλŠ” 감당할 수 μ—†λ‹€.

ν‚€-κ°’ μŒμ„ μ—¬λŸ¬ μ„œλ²„μ— λΆ„μ‚°μ‹œμΌœ μ €μž₯ν•΄λ³΄μž!

 

2️⃣ λΆ„μ‚° ν‚€-κ°’ μ €μž₯μ†Œ

 : 데이터λ₯Ό μž‘μ€ νŒŒν‹°μ…˜λ“€λ‘œ λΆ„ν• ν•œ λ‹€μŒ μ—¬λŸ¬ λŒ€μ˜ μ„œλ²„μ— μ €μž₯

 

πŸ€” 데이터λ₯Ό μ–΄λ–»κ²Œ λΆ„ν• ν•΄μ•Ό ν• κΉŒ?

 β–ͺ️ 데이터λ₯Ό μ—¬λŸ¬ μ„œλ²„μ— κ³ λ₯΄κ²Œ λΆ„μ‚°ν•΄μ•Ό ν•œλ‹€.

 β–ͺ️ λ…Έλ“œ(μ„œλ²„)κ°€ μΆ”κ°€λ˜κ±°λ‚˜ μ‚­μ œλ  λ•Œ λ°μ΄ν„°μ˜ 이동을 μ΅œμ†Œν™”ν•΄μ•Ό ν•œλ‹€.

 

πŸ’‘ 해결책은 μ•ˆμ • ν•΄μ‹œ

  • μ‹œμŠ€ν…œ λΆ€ν•˜μ— 따라 μ„œλ²„κ°€ μžλ™μœΌλ‘œ μΆ”κ°€λ˜κ±°λ‚˜ μ‚­μ œ λ˜λ„λ‘ λ§Œλ“€ 수 μžˆλ‹€.
  • 각 μ„œλ²„ μš©λŸ‰μ— 맞게 가상 λ…Έλ“œμ˜ 수λ₯Ό μ‘°μ •ν•  수 μžˆλ‹€.

πŸ“Ž [λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œ 섀계 기초] 5μž₯ μ•ˆμ • ν•΄μ‹œ 섀계

 


 

ν•˜μ§€λ§Œ μ—¬κΈ°μ„œ 끝이 μ•„λ‹ˆλΌ,

λ°μ΄ν„°μ˜ λ†’은 κ°€μš©μ„±κ³Ό μ•ˆμ „성을 ν™•λ³΄ν•˜κΈ° μœ„ν•΄μ„œ 데이터λ₯Ό μ—¬λŸ¬ μ„œλ²„μ— λ‹€μ€‘ν™” ν•΄μ•Ό ν•œλ‹€. (SPOF 방지)

 

N개의 μ„œλ²„μ— 데이터λ₯Ό λ‹€μ€‘ν™”ν•˜κΈ°λ‘œ ν–ˆλ‹€λ©΄,

πŸ€” μ–΄λ–»κ²Œ 닀쀑화 ν•  μ„œλ²„λ₯Ό μ„ νƒν• κΉŒ?

  • ν‚€(key)λ₯Ό ν•΄μ‹œ 링 μœ„μ— λ°°μΉ˜ν•œ λ’€, μ‹œκ³„λ°©ν–₯으둜 λ§Œλ‚˜λŠ” 첫 N개 μ„œλ²„μ— μ €μž₯
  • 가상 λ…Έλ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ μ„ νƒλ˜λŠ” 물리 μ„œλ²„κ°€ 쀑볡될 수 μžˆμœΌλ―€λ‘œ 쀑볡 처리λ₯Ό ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€.

❕ μ΄λ•Œ, 데이터 μ„Όν„° μž₯μ•  μ‹œ κ°€μš©μ„±μ„ ν™•λ³΄ν•˜λ €λ©΄ 물리 μ„œλ²„κ°€ λ‹€λ₯Έ 데이터 센터에 μžˆλ„λ‘ ν•˜λŠ” 것도 κ³ λ €ν•΄μ•Ό ν•œλ‹€.

 

닀쀑화할 μ„œλ²„λ₯Ό κ²°μ • ν–ˆλ‹€λ©΄..

πŸ€” N개의 μ„œλ²„μ—μ„œ 데이터 λ™κΈ°ν™”λŠ” μ–΄λ–»κ²Œ ν• κΉŒ?

πŸ’‘ μ •μ‘±μˆ˜ ν•©μ˜ ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•΄μ„œ 읽기/μ“°κΈ° μ—°μ‚° λͺ¨λ‘μ— 일관성 보μž₯ κ°€λŠ₯

 

❓ μ •μ‘±μˆ˜ ν•©μ˜ ν”„λ‘œν† μ½œ?
1️⃣ ν΄λΌμ΄μ–ΈνŠΈκ°€ 데이터 μ—°μ‚°(읽기, μ“°κΈ°)을 μš”μ²­ν•œλ‹€.
2️⃣ μ€‘μž¬μž(ν”„λ‘μ‹œ)κ°€ ν•΄λ‹Ή 연산을 λ‹€μ€‘ν™”λœ μ„œλ²„μ— μš”μ²­ν•œλ‹€.
3️⃣ λ‹€μ€‘ν™”λœ μ„œλ²„μ—μ„œ μ—°μ‚° κ²°κ³Όλ₯Ό μ€‘μž¬μžμ—κ²Œ μ „λ‹¬ν•œλ‹€.
4️⃣ μ€‘μž¬μžκ°€ 성곡 μ‘λ‹΅μ˜ μˆ˜μ™€ ν•΄λ‹Ή μ—°μ‚°μ˜ μ •μ‘±μˆ˜λ₯Ό 비ꡐ해 ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­μ˜ 성곡 μ—¬λΆ€λ₯Ό κ²°μ •ν•œλ‹€. 

 

πŸ€” 읽기 μ—°μ‚°μ˜ μ •μ‘±μˆ˜(W)와 μ“°κΈ° μ—°μ‚°μ˜ μ •μ‘±μˆ˜(R)λŠ” μ–΄λ–»κ²Œ μ •ν•΄μ•Ό ν• κΉŒ?

πŸ’‘ 데이터 일관성과 높은 κ°€μš©μ„± μ‚¬μ΄μ˜ νŠΈλ ˆμ΄λ“œμ˜€ν”„λ₯Ό κ³ λ €ν•΄μ„œ κ²°μ •ν•΄μ•Ό ν•œλ‹€! (bc. CAP정리)

  • Wλ˜λŠ” R이 μž‘μœΌλ©΄ ν”„λ‘μ‹œλŠ” 적은 μ—°μ‚° 결과만 가지고도 ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 응닡할 수 μžˆλ‹€ (높은 κ°€μš©μ„±)
  • Wλ˜λŠ” R이 크면 λ°μ΄ν„° μΌκ΄€μ„±μ˜ μˆ˜μ€€μ΄ ν–₯μƒλœλ‹€.
❕ CAP 정리
 : λ°μ΄ν„°μ˜ 일관성(consistency), κ°€μš©μ„±(availability), νŒŒν‹°μ…˜ 감내(partition torweance theomrem)λΌλŠ” μ„Έ 가지 μš”κ΅¬μ‚¬ν•­μ„ λ™μ‹œμ— λ§Œμ‘±ν•˜λŠ” λΆ„μ‚° μ‹œμŠ€ν…œμ„ μ„€κ³„ν•˜λŠ” 것은 λΆˆκ°€λŠ₯ν•˜λ‹€λŠ” 정리

β–ͺ️ 일관성: λΆ„μ‚° μ‹œμŠ€ν…œμ— μ ‘μ†ν•˜λŠ” λͺ¨λ“  ν΄λΌμ΄μ–ΈνŠΈλŠ” μ–΄λ–€ λ…Έλ“œμ— μ ‘μ†ν–ˆλŠλƒμ— 관계없이 μ–Έμ œλ‚˜ 같은 데이터λ₯Ό 보게 λ˜μ–΄μ•Ό ν•œλ‹€.
β–ͺ️ κ°€μš©μ„±: λΆ„μ‚° μ‹œμŠ€ν…œμ— μ ‘μ†ν•˜λŠ” ν΄λΌμ΄μ–ΈνŠΈλŠ” 일뢀 λ…Έλ“œμ— μž₯μ• κ°€ λ°œμƒν•˜λ”λΌλ„ 항상 응닡을 받을 수 μžˆμ–΄μ•Ό ν•œλ‹€.
β–ͺ️ νŒŒν‹°μ…˜ 감내: νŒŒν‹°μ…˜μ€ 두 λ…Έλ“œ 사이에 톡신 μž₯μ• κ°€ λ°œμƒν•˜μ˜€μŒμ„ μ˜λ―Έν•œλ‹€. νŒŒν‹°μ…˜ κ°λ‚΄λŠ” λ„€νŠΈμ›Œν¬μ— νŒŒν‹°μ…˜μ΄ 생기더라도 μ‹œμŠ€ν…œμ€ 계속 λ™μž‘ν•˜μ—¬μ•Ό ν•œλ‹€

이듀 κ°€μš΄λ° μ–΄λ–€ 두 가지λ₯Ό μΆ©μ‘±ν•˜λ €λ©΄ λ‚˜λ¨Έμ§€ ν•˜λ‚˜λŠ” λ°˜λ“œμ‹œ ν¬μƒλ˜μ–΄μ•Ό ν•œλ‹€.
ν•˜μ§€λ§Œ λΆ„μ‚° μ‹œμŠ€ν…œμ€ λ„€νŠΈμ›Œν¬ μž₯μ• λ₯Ό ν”Όν•  수 μ—†μœΌλ―€λ‘œ νŒŒν‹°μ…˜ κ°λ‚΄λŠ” 무쑰건 κ°€μ Έκ°€μ•Ό ν•œλ‹€. (κ²°κ΅­ CP, AP μ‹œμŠ€ν…œ 쀑 선택)

 

κ·Έλ ‡λ‹€λ©΄ μ‹œμŠ€ν…œμ—μ„œ ν•„μš”ν•œ μΌκ΄€μ„±μ˜ μˆ˜μ€€μ΄ μ–΄λŠ 정도인지 νŒŒμ•…ν•΄λ³΄μž!

 

  • κ°•ν•œ 일관성 : λͺ¨λ“  읽기 연산은 κ°€μž₯ μ΅œκ·Όμ— κ°±μ‹ λœ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•œλ‹€. (W + R > N)
  • μ•½ν•œ 일관성 : 읽기 연산은 κ°€μž₯ μ΅œκ·Όμ— κ°±μ‹ λœ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•˜μ§€ λͺ»ν•  수 도 μžˆλ‹€.
  • 결과적 일관성 : μ•½ν•œ μΌκ΄€μ„±μ˜ ν•œ ν˜•νƒœλ‘œ, ν΄λΌμ΄μ–ΈνŠΈ μΈ‘μ—μ„œ λ°μ΄ν„° 버전 정보λ₯Ό ν™œμš©ν•΄ 일관성이 깨진 데이터λ₯Ό 읽지 μ•Šλ„λ‘ ν•˜λŠ” 기법 (κ²°κ΅­μ—λŠ” κ°±μ‹  κ²°κ³Όκ°€ λͺ¨λ“  사본에 반영)

❕ κ°•ν•œ 일관성을 λ‹¬μ„±ν•˜λŠ” 일반적인 방법은, λͺ¨λ“  사본에 ν˜„μž¬ μ“°κΈ° μ—°μ‚°μ˜ κ²°κ³Όκ°€ 반영될 λ•ŒκΉŒμ§€ ν•΄λ‹Ή 데이터에 λŒ€ν•œ 연산을 κΈˆμ§€ν•˜λŠ” 것

 

πŸ€” W + R > Nκ°€ μ™œ κ°•ν•œ 일관성을 보μž₯ν• κΉŒ?
N = 3이고 W = 2, R = 2으둜 μ„€μ •ν–ˆλ‹€κ³  κ°€μ •ν•˜μž.

μ“°κΈ° μž‘μ—…μ„ 1, 2, 3 μ„œλ²„ 쀑 1, 2μ„œλ²„μ—μ„œ μˆ˜ν–‰ν–ˆκ³ , 3 μ„œλ²„μ—μ„œ μ‹€νŒ¨ν–ˆλ‹€κ³  ν•΄λ³΄μž.
λ‹€μŒ 읽기 μž‘μ—…μ—μ„œ μ΅œμ†Œ 2λŒ€μ˜ μ„œλ²„μ—μ„œ 읽기λ₯Ό μˆ˜ν–‰ν•΄μ•Ό ν•˜λŠ”λ°, μ΄λ•Œ 3 μ„œλ²„κ°€ 읽기λ₯Ό μˆ˜ν–‰ν–ˆλ”λΌλ„ 1κ³Ό 2 μ„œλ²„ 쀑 ν•˜λ‚˜λŠ” 무쑰건 읽기에 μ°Έμ—¬ν•˜κΈ° λ•Œλ¬Έμ— μ€‘μž¬μžκ°€ μ΅œμ‹  데이터λ₯Ό ν™•μΈν•˜κ³  응닡할 수 μžˆλ‹€!

 

κ°•ν•œ 일관성과 μ•½ν•œ μΌκ΄€μ„±μ˜ 쀑간이라고 λ³Ό 수 μžˆλŠ” 결과적 일관성을 λ‹€μ΄λ‚˜λͺ¨, μΉ΄μ‚°λ“œλΌμ—μ„œλ„ μ„ νƒν•˜κ³  μžˆλ‹€.

 

어쨋든, κ°€μš©μ„±μ„ ν¬κΈ°ν•˜κ³  κ°•ν•œ 일관성을 μ„ νƒν•˜μ§€ μ•ŠλŠ” 이상 데이터 λΆˆμΌμΉ˜λŠ” λ°œμƒν•  μˆ˜λ°–μ— μ—†λ‹€!

πŸ€” 데이터 비일관성을 μ–΄λ–»κ²Œ ν•΄κ²°ν•  수 μžˆμ„κΉŒ?

πŸ’‘ λ°μ΄ν„° 버저닝, λ²‘ν„° μ‹œκ³„

 

❓ λ°μ΄ν„° 버저닝

 : 데이터λ₯Ό λ³€κ²½ν•  λ•Œλ§ˆλ‹€ ν•΄λ‹Ή λ°μ΄ν„°μ˜ μƒˆλ‘œμš΄ 버전을 λ§Œλ“œλŠ” 것 (ex. ETag)

 

❓ λ²‘ν„° μ‹œκ³„

 : [μ„œλ²„, 버전]의 μˆœμ„œμŒμ„ 데이터에 ν•¨κ»˜ μ €μž₯ν•˜λŠ” 것

1️⃣ ν΄λΌμ΄μ–ΈνŠΈκ°€ μ“°κΈ° μ—°μ‚° μš”μ²­μ„ λ³΄λƒˆλ‹€. (데이터 λΉ„ 일관성 λ¬Έμ œλŠ” μ“°κΈ° μ—°μ‚°μ—μ„œ λ°œμƒ)
2️⃣ μ„œλ²„ Sxκ°€ 쓰기연산을 μˆ˜ν–‰ν•˜κ³ , 벑터 μ‹œκ³„κ°€ D1([Sx, 1])이 λœλ‹€. (DλŠ” 데이터) 
3️⃣ μ„œλ‘œ λ‹€λ₯Έ ν΄λΌμ΄μ–ΈνŠΈκ°€ 같은 λ°μ΄ν„°μ˜ μ“°κΈ° 연산을 λ™μ‹œμ— μš”μ²­ ν–ˆλ‹€.
4️⃣ μ„œλ²„ Sy와 Szκ°€ 각각의 연산을 μˆ˜ν–‰ν•˜κ³  벑터 μ‹œκ³„κ°€ 각각 D2([Sx, 1], [Sy, 1]), D3([Sx, 1], [Sz, 1])
5️⃣ ν΄λΌμ΄μ–ΈνŠΈκ°€ D2와 D3λ₯Ό 읽으면, 데이터 κ°„ 좩돌(μ–΄λŠ μͺ½λ„ λ‹€λ₯Έ 벑터 μ‹œκ³„λ³΄λ‹€ μš°μ„ ν•˜μ§€ μ•ŠμŒ)을 ν™•μΈν•˜κ³  λ‹€μ‹œ μ“°κΈ° 연산을 μš”μ²­
6️⃣ Sxκ°€ μ“°κΈ° 연산을 μˆ˜ν–‰ν•˜κ³ , λ°±ν„° μ‹œκ³„κ°€ D4([Sx, 2], [Sy, 1], [Sz, 1])둜 λ³€κ²½

*A의 벑터 μ‹œκ³„μ— μžˆλŠ” λͺ¨λ“  μš”μ†Œκ°€ B의 λ°±ν„° μ‹œκ³„μ— μžˆλŠ” μš”μ†Œλ³΄λ‹€ μž‘κ±°λ‚˜ κ°™κ³  적어도 ν•˜λ‚˜μ˜ μš”μ†Œκ°€ 더 μž‘μ€ 경우 Aκ°€ B보닀 λ¨Όμ € λ°œμƒν•˜λŠ” κ²ƒμœΌλ‘œ κ°„μ£Ό

 

  • 좩돌 감지 및 ν•΄μ†Œ 둜직이 ν΄λΌμ΄μ–ΈνŠΈμ— λ“€μ–΄κ°€ μžˆμ–΄, ν΄λΌμ΄μ–ΈνŠΈ κ΅¬ν˜„μ΄ λ³΅μž‘ν•΄μ§„λ‹€.
  • [μ„œλ²„: 버전]의 μˆœμ„œμŒμ΄ ꡉμž₯히 빨리 λŠ˜μ–΄λ‚œλ‹€.
    πŸ’‘ ν•΄κ²°μ±…
      - 벑터 μ‹œκ³„μ˜ 길이 μž„κ³„μΉ˜λ₯Ό μ„€μ •ν•˜κ³ , μž„κ³„μΉ˜λ₯Ό λ„˜μœΌλ©΄ 였래된 μˆœμ„œμŒμ„ 제거

 


 

이제 κ°€μš©μ„±κ³Ό 일관성을 잘 μ‘°μœ¨ν•΄μ„œ ν‚€-κ°’ μ €μž₯μ†Œ μ‹œμŠ€ν…œμ„ μ„€κ³„ν–ˆλ‹€!

λ§ˆμ§€λ§‰μœΌλ‘œ μž₯μ• (offline)에 λŒ€μ‘ν•  수 μžˆλ„λ‘ μ‹œμŠ€ν…œμ— 섀계λ₯Ό μΆ”κ°€ν•΄λ³΄μž!

 

μž₯μ• λ₯Ό μ²˜λ¦¬ν• λ €λ©΄, 일단 μž₯μ• κ°€ λ°œμƒν–ˆλ‹€λŠ” 것을 κ°μ§€ν•΄μ•Όν•œλ‹€.

πŸ€” μž₯μ• λŠ” μ–΄λ–»κ²Œ 감지할 수 μžˆμ„κΉŒ?

πŸ’‘ κ°€μ‹­ ν”„λ‘œν† μ½œ (λΆ„μ‚°ν˜• μž₯μ•  감지)

 

❓가십 ν”„λ‘œν† μ½œ?
1️⃣ 각 λ…Έλ“œλŠ” 멀버십 λͺ©λ‘(λ‹€λ₯Έ λ…Έλ“œλ“€)을 μœ μ§€ν•œλ‹€. (멀버십 λͺ©λ‘: 각 멀버 ID와 κ·Έ 박동 μΉ΄μš΄ν„° 쌍)
2️⃣ 각 λ…Έλ“œλŠ” 주기적으둜 μžμ‹ μ˜ 박동 μΉ΄μš΄ν„°λ₯Ό μ¦κ°€μ‹œν‚¨λ‹€
3️⃣ 각 λ…Έλ“œλŠ” λ¬΄μž‘μœ„λ‘œ μ„ μ •λœ λ…Έλ“œλ“€μ—κ²Œ 주기적으둜 자기 박동 μΉ΄μš΄ν„° λͺ©λ‘μ„ 보낸닀.
4️⃣  μ–΄λ–€ λ©€λ²„μ˜ 박동 μΉ΄μš΄ν„° 값이 μ§€μ •λœ μ‹œκ°„ λ™μ•ˆ κ°±μ‹ λ˜μ§€ μ•ŠμœΌλ©΄ ν•΄λ‹Ή λ©€λ²„λŠ” μž₯μ•  μƒνƒœμΈ κ²ƒμœΌλ‘œ κ°„μ£Όν•œλ‹€.

 

 

μž₯μ• λ₯Ό κ°μ§€ν–ˆλ‹€λ©΄,

πŸ€” μ–΄λ–»κ²Œ μž₯μ• λ₯Ό μ²˜λ¦¬ν•  수 μžˆμ„κΉŒ?

 

μž₯μ• λŠ” μΌμ‹œμ μΈ μž₯애와 영ꡬ적인 μž₯μ• λ‘œ ꡬ뢄할 수 μžˆλ‹€! 각각 μž₯μ•  상황에 λ§žλŠ” 처리 방법을 μ•Œμ•„λ³΄μž.

 

βœ”οΈ μΌμ‹œμ  μž₯μ•  처리

πŸ’‘ μ—„κ²©ν•œ μ •μ‘±μˆ˜ 접근법을 μ‚¬μš©ν•˜κ³  μžˆμ—ˆλ‹€λ©΄, λŠμŠ¨ν•œ μ •μ‘±μˆ˜ μ ‘κ·Όλ²•μœΌλ‘œ λ³€κ²½

πŸ’‘ κ·Έ ν›„ μž₯μ•  μ„œλ²„λ‘œ κ°€λŠ” μš”μ²­μ„ λ‹€λ₯Έ μ„œλ²„κ°€ μž μ‹œ 맑아 μ²˜λ¦¬ν•˜κ³ , κ·Έ λ™μ•ˆ λ°œμƒν•œ λ³€κ²½ 사항(λ‹¨μ„œ)을 μž₯μ•  μ„œλ²„κ°€ 볡ꡬ λ˜μ—ˆμ„ λ•Œ 일괄 λ°˜μ˜ν•˜λŠ”λ‹¨μ„œ ν›„ μž„μ‹œμœ„νƒ κΈ°λ²•μ„ μ‚¬μš©

 

* λŠμŠ¨ν•œ μ •μ‘±μˆ˜ 접근법: μ •μ‘±μˆ˜ μš”κ΅¬μ‚¬ν•­μ„ κ°•μ œν•˜λŠ” λŒ€μ‹ , μ“°κΈ° 연산을 μˆ˜ν–‰ν•  W개의 κ±΄κ°•ν•œ μ„œλ²„μ™€ 읽기 연산을 μˆ˜ν–‰ν•  R개의 κ±΄κ°•ν•œ μ„œλ²„(μž₯μ•  μ„œλ²„X)λ₯Ό ν•΄μ‹œλ§μ—μ„œ κ³ λ₯Έλ‹€.

 

βœ”οΈ μ˜κ΅¬μ  μž₯μ•  처리

πŸ’‘ λ°˜-μ—”νŠΈλ‘œν”Ό ν”„λ‘œν† μ½œ

β“λ°˜-μ—”νŠΈλ‘œν”Ό ν”„λ‘œν† μ½œ?
1️⃣ 각 λ…Έλ“œλŠ” μ •κΈ°μ μœΌλ‘œ λ‹€λ₯Έ λ…Έλ“œμ˜ 데이터와 μžμ‹ μ˜ 데이터λ₯Ό λΉ„κ΅ν•©λ‹ˆλ‹€.
2️⃣ 두 λ…Έλ“œ 간에 λ°μ΄ν„°μ˜ 차이가 발견되면, 이λ₯Ό μ‹λ³„ν•©λ‹ˆλ‹€.
3️⃣ 차이가 발견된 λ°μ΄ν„°λŠ” μ΅œμ‹  μƒνƒœλ‘œ μ—…λ°μ΄νŠΈλ˜μ–΄, λͺ¨λ“  λ…Έλ“œκ°€ λ™μΌν•œ 데이터λ₯Ό 가지도둝 ν•©λ‹ˆλ‹€.

 

두 λ…Έλ“œ 간에 데이터λ₯Ό λΉ„κ΅ν•˜κΈ° μœ„ν•΄ λ¨Έν΄ νŠΈλ¦¬κ°€ μ‚¬μš©λœλ‹€.

❓머클 트리(ν•΄μ‹œ 트리)?
 : 각 λ…Έλ“œμ— κ·Έ μžμ‹ λ…Έλ“œλ“€μ˜ λ ˆμ΄λΈ”λ‘œλΆ€ν„° κ³„μ‚°λœ ν•΄μ‹œ 값을 λ ˆμ΄λΈ”λ‘œ λΆ™μ—¬λ‘λŠ” 트리 (μžμ‹ λ…Έλ“œκ°€ 쒅단 λ…Έλ“œλΌλ©΄ μžμ‹ λ…Έλ“œλ“€μ— λ³΄κ΄€λœ κ°’μ˜ ν•΄μ‹œ)

1️⃣ ν‚€ 곡간을 λ²„ν‚·μœΌλ‘œ λ‚˜λˆˆλ‹€.
2️⃣ λ²„킷에 ν¬ν•¨λœ 각각의 킀에 κ· λ“± 뢄포 ν•΄μ‹œ ν•¨μˆ˜λ₯Ό μ μš©ν•˜μ—¬ ν•΄μ‹œ 값을 κ³„μ‚°ν•œλ‹€.
3️⃣ λ²„ν‚·λ³„λ‘œ ν•΄μ‹œκ°’μ„ κ³„μ‚°ν•œ ν›„, ν•΄λ‹Ή ν•΄μ‹œ 값을 λ ˆμ΄λΈ”λ‘œ κ°–λŠ” λ…Έλ“œλ₯Ό λ§Œλ“ λ‹€.
4️⃣ μžμ‹ λ…Έλ“œμ˜ λ ˆμ΄λΈ”λ‘œλΆ€ν„° μƒˆλ‘œμš΄ ν•΄μ‹œ 값을 κ³„μ‚°ν•˜μ—¬, 이진 트리λ₯Ό 상ν–₯μ‹μœΌλ‘œ ꡬ성해 λ‚˜κ°„λ‹€.
이제 두 μ„œλ²„μ˜ 머클 트리λ₯Ό 비ꡐ해 보자
5️⃣  루트 λ…Έλ“œμ˜ ν•΄μ‹œκ°’μ„ λΉ„κ΅ν•œλ‹€. (ν•΄μ‹œκ°’μ΄ μΌμΉ˜ν•œλ‹€λ©΄ 두 μ„œλ²„λŠ” 같은 데이터λ₯Ό κ°–λŠ” 것이닀.)
6️⃣ ν•΄μ‹œκ°’μ΄ λ‹€λ₯΄λ‹€λ©΄, μ™Όμͺ½ μžμ‹ λ…Έλ“œμ˜ ν•΄μ‹œκ°’μ„ λΉ„κ΅ν•˜κ³ , κ·Έ λ‹€μŒμœΌλ‘œ 였λ₯Έμͺ½ μžμ‹ λ…Έλ“œμ˜ ν•΄μ‹œκ°’μ„ λΉ„κ΅ν•œλ‹€. (DFSκ°™κ΅°..)
7️⃣ μ΄λ ‡κ²Œ μ•„λž˜μͺ½μœΌλ‘œ 탐색해 λ‚˜κ°€λ©΄μ„œ λΆˆμΌμΉ˜ν•˜λŠ” 데이터λ₯Ό λ°œκ²¬ν•˜κ³  λ™κΈ°ν™”ν•œλ‹€.

❕ 머클 νŠΈλ¦¬μ—μ„œ 동기화해야 ν•˜λŠ” λ°μ΄ν„°μ˜ 양은 μ‹€μ œλ‘œ μ‘΄μž¬ν•˜λŠ” 데이터 차이에 λΉ„λ‘€, λ°μ΄ν„°μ˜ μ΄λŸ‰μ˜ λΉ„λ‘€X (효율적)

 

 


 

이제 곡뢀λ₯Ό 잘 ν–ˆλ‹€λ©΄, μ•„λž˜μ˜ μ§ˆλ¬Έμ— λŒ€λ‹΅ν•΄λ³΄μž

πŸ‘©πŸ»‍🏫 μ•„λž˜μ™€ 같은 μš”κ΅¬μ‚¬ν•­μ„ 가진 ν‚€-κ°’ μ €μž₯μ†Œ μ‹œμŠ€ν…œμ„ 섀계해 μ£Όμ„Έμš”.

  • ν‚€-κ°’ 쌍의 ν¬κΈ°λŠ” 10KB μ΄ν•˜μ΄λ‹€.
  • 큰 데이터λ₯Ό μ €μž₯ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€.
  • 높은 κ°€μš©μ„±μ„ μ œκ³΅ν•΄μ•Ό ν•œλ‹€. λ”°λΌμ„œ μ‹œμŠ€ν…œμ€ 섀사 μž₯μ• κ°€ μžˆλ”λΌλ„ 빨리 응닡해야 ν•œλ‹€.
  • 높은 규λͺ¨ ν™•μž₯성을 μ œκ³΅ν•΄μ•Ό ν•œλ‹€. λ”°λΌμ„œ νŠΈλž˜ν”½ 양에 따라 μžλ™μ μœΌλ‘œ μ„œλ²„ 증섀/μ‚­μ œκ°€ 이루어져야 ν•œλ‹€.
  • 데이터 일관성 μˆ˜μ€€μ€ 쑰정이 κ°€λŠ₯ν•΄μ•Ό ν•œλ‹€.
  • 응닡 μ§€μ—°μ‹œκ°„μ΄ 짧아야 ν•œλ‹€.

 

(힌트) μš”κ΅¬μ‚¬ν•­μ„ λ§Œμ‘±ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ κΈ°λŠ₯λ“€

더보기
  • ν΄λΌμ΄μ–ΈνŠΈ API
  • 닀쀑화
  • 데이터 좩돌 ν•΄μ†Œ
  • μž₯μ•  감지
  • μž₯μ•  볡ꡬ λ©”μ»€λ‹ˆμ¦˜
  • μ €μž₯μ†Œ 엔진
  • ....

 

곡지사항
μ΅œκ·Όμ— 올라온 κΈ€
μ΅œκ·Όμ— 달린 λŒ“κΈ€
Total
Today
Yesterday
링크
Β«   2025/02   Β»
일 μ›” ν™” 수 λͺ© 금 ν† 
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
κΈ€ 보관함