λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

πŸ’»..Tech..πŸ’»

⚑️ Scale Out된 ν™˜κ²½μ—μ„œ μ„Έμ…˜ 관리방법 ⚑️

λ¨Όμ € 닀쀑 μ„œλ²„ ν™˜κ²½μ΄ μƒκΈ°λŠ” μ΄μœ μ— λŒ€ν•΄ μ•Œμ•„λ³΄μž. νŠΈλž˜ν”½μ΄ μ¦κ°€ν•˜λ©΄ 이λ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ μ„œλ²„μ˜ μ„±λŠ₯을 ν–₯μƒΉμ‹œμΌœμ•Ό ν•œλ‹€.

이λ₯Ό μœ„ν•œ 두 가지 방법이 μžˆλ‹€.

Scale Up / Scale Out

μŠ€μΌ€μΌμ—…μ€ 단일 μ„œλ²„μ˜ μ„±λŠ₯을 μ¦μΉ΄μ‹œμΌœ 더 λ§Žμ€ μš”μ²­μ„ μ²˜λ¦¬ν•˜λŠ” 방법 (CPU, λ©”λͺ¨λ¦¬, λ””μŠ€ν¬ μ—…κ·Έλ ˆμ΄λ“œ)

μž₯점

  • μ„œλ²„κ°€ ν•˜λ‚˜μ΄λ―€λ‘œ 데이터 μ •ν•©μ„± μ΄μŠˆκ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€. (μž₯점)

단점

  • μΌμ •μˆ˜μ€€μ΄μƒ μ„±λŠ₯이 크게 μ¦κ°€ν•˜μ§€ μ•ŠμŒ (λΉ„νš¨μœ¨)
  • μ„œλ²„κ°€ 죽으면 λ³΅κ΅¬μ „κΉŒμ§€ λͺ¨λ“  μ„œλΉ„μŠ€κ°€ μ€‘λ‹¨λœλ‹€.

 

μŠ€μΌ€μΌμ•„μ›ƒμ€ μƒˆλ‘œμš΄ μ„œλ²„λ₯Ό μΆ”κ°€ν•˜μ—¬ νŠΈλž˜ν”½μ„ 각 μ„œλ²„κ°€ λ‚˜λˆ κ°€μ Έ 더 λ§Žμ€ μš”μ²­μ„ μ²˜λ¦¬ν•˜λŠ” 방법

μž₯점

  • μ„œλ²„κ°€ μ—¬λŸ¬ λŒ€μ΄λ―€λ‘œ ν•˜λ‚˜κ°€ 죽어도 λ‹€λ₯Έ μ„œλ²„μ—μ„œ μ„œλΉ„μŠ€ 제곡 κ°€λŠ₯ν•˜μ—¬ ‘κ°€μš©μ„±’을 높일 수 μžˆλ‹€.
  • μš”μ²­λŸ‰μ— 따라 ν•„μš”μ— 따라 μ„œλ²„μ˜ 갯수λ₯Ό μ‘°μ ˆν•  수 있음 (ν™•μž₯에 μœ μ—°)
  • 각 μ„œλ²„μ˜ λ‘œλ“œμœ¨, λΆ€ν•˜λŸ‰, 응닡속도λ₯Ό 계산해 νŠΈλž˜ν”½μ„ λΆ„μ‚°μ‹œν‚€λŠ” λ‘œλ“œλ°ΈλŸ°μ‹±μ„ ν•  수 있음

단점

  • μ—¬λŸ¬ λŒ€μ˜ μ„œλ²„λ‘œ ν•˜λ‚˜μ˜ μ„œλΉ„μŠ€λ₯Ό μœ„ν•΄ μ‚¬μš©ν•˜λ―€λ‘œ 각 μ„œλ²„κ°€ 가진 μžμ›μ˜ λΆˆμΌμΉ˜κ°€ λ°œμƒν•  수 있음

 

ACIDκ³Ό μ² μ €ν•˜κ²Œ μ§€μΌœμ Έμ•Όν•œλ‹€λ©΄ μŠ€μΌ€μΌμ—… - νŠΈλžœμž­μ…˜ μ²˜λ¦¬λ³΄λ‹€ νŠΈλž˜ν”½ μ²˜λ¦¬κ°€ μ€‘μš”ν•˜λ‹€λ©΄ μŠ€μΌ€μΌμ•„μ›ƒ

 

λ‹€μ€‘μ„œλ²„ν™˜κ²½μ—μ„œ Session 관리 방법

Sticky Session 방식 : 각 μ„œλ²„κ°€ 각자의 μ„Έμ…˜μ •λ³΄λ₯Ό μœ μ§€ν•˜λ©° λ‘œλ“œλ°ΈλŸ°μ„œκ°€ ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„Έμ…˜μ„ μƒμ„±ν•œ 곳으둜 μš”μ²­μ„ 보냄

→ μ •ν•©μ„± μ΄μŠˆλŠ” λ°œμƒν•˜μ§€ μ•ŠμœΌλ‚˜ νŠΉμ •μ„œλ²„μ— νŠΈλž˜ν”½μ΄ 집쀑될 수 μžˆλ‹€.

 

 

Session Clustering 방법 : μ„Έμ…˜μ΄ 생성될 λ•Œλ§ˆλ‹€ λ³΅μ œν•˜μ—¬ 각 μ„œλ²„μ˜ μ„Έμ…˜μ •λ³΄ μ •ν•©μ„±μ΄μŠˆλ₯Ό ν•΄κ²°ν•œλ‹€.

→ 맀번 λ³΅μ œν•˜λ―€λ‘œ λ„€νŠΈμ›Œν¬ νŠΈλž˜ν”½μ΄ 많이 λ°œμƒν•˜κ³  μ˜€λ²„ν—€λ“œκ°€ 많이 λ°œμƒν•˜μ—¬ λ¬Έμ œκ°€ 생길 수 μžˆλ‹€.

ν΄λŸ¬μŠ€ν„°λ§ : μ—¬λŸ¬ λŒ€μ˜ 컴퓨터듀이 μ—°κ²°λ˜μ–΄ ν•˜λ‚˜μ˜ μ‹œμŠ€ν…œμ²˜λŸΌ λ™μž‘ν•˜λ„λ‘ λ§Œλ“œλŠ” 것.

 

μ„Έμ…˜ μŠ€ν† λ¦¬μ§€ 뢄리 : μ„œλ²„μ—μ„œ λΆ„λ¦¬λœ μ„Έμ…˜ μ €μž₯μ†Œλ₯Ό μ‚¬μš©ν•˜μ—¬ 각 μ„œλ²„μ˜ μ„Έμ…˜ 정보λ₯Ό ν•œ 곳에 λͺ¨μ•„ μ €μž₯ν•˜κ³  κΊΌλ‚΄μ–΄ μ‚¬μš©ν•œλ‹€.

→ μ„Έμ…˜ μŠ€ν† λ¦¬μ§€κ°€ 죽으면 λͺ¨λ“  μ„œλ²„κ°€ μ„Έμ…˜μ„ μ‚¬μš©ν•˜μ§€ λͺ»ν•  수 μžˆμ§€λ§Œ μ΄λŠ” 볡제 μ„Έμ…˜ μŠ€ν† λ¦¬μ§€λ₯Ό 톡해 ν•΄κ²°ν•  수 μžˆλ‹€.

 

μ„Έμ…˜ μŠ€ν† λ¦¬μ§€ μ‚¬μš©μ‹œ 고렀사항

λ‹€μ€‘μ„œλ²„ν™˜κ²½μ—μ„œ λ°œμƒν•  수 μžˆλŠ” μ •ν•©μ„± 문제λ₯Ό μ„Έμ…˜ μŠ€ν† λ¦¬μ§€λ₯Ό μ‚¬μš©ν•˜μ—¬ ν•΄κ²°ν•˜κΈ°λ‘œ ν–ˆλ‹€λ©΄ μ–΄λ–€ μŠ€ν† λ¦¬μ§€λ₯Ό μ‚¬μš©ν• μ§€ κ²°μ •ν•΄μ•Όν•œλ‹€.

  • 선택 고렀사항
    • λ‹€μ–‘ν•œ μš”μ²­μ—μ„œ ν•΄λ‹Ή μš”μ²­μ΄ λ‘œκ·ΈμΈν•œ μ‚¬μš©μžμΈμ§€ ν™•μΈν•˜κΈ°μœ„ν•΄ μ„Έμ…˜μŠ€ν† λ¦¬μ§€λ₯Ό λ°©λ¬Έν•΄μ•Όν•˜λ―€λ‘œ λΉ λ₯΄κ²Œ 데이터에 μ ‘κ·Όν•  수 μžˆμ–΄μ•Ό μ„±λŠ₯에 영ν–₯을 주지 μ•Šμ„ 수 μžˆλ‹€.

 

  • In-Memory λ°μ΄ν„°λ² μ΄μŠ€μ™€ Disk기반 λ°μ΄ν„°λ² μ΄μŠ€

λ°μ΄ν„°λ² μ΄μŠ€μ—λŠ” λ””μŠ€ν¬κΈ°λ°˜κ³Ό In-Memory λ°μ΄ν„°λ² μ΄μŠ€κ°€ μ‘΄μž¬ν•œλ‹€. In-Memory λ°μ΄ν„°λ² μ΄μŠ€λŠ” λ©”λͺ¨λ¦¬μ— 데이터λ₯Ό κ΄€λ¦¬ν•˜κΈ° λ•Œλ¬Έμ— I/O에 λŒ€ν•œ 뢀담을 덜 수 μžˆλ‹€. λ”°λΌμ„œ, λ””μŠ€ν¬κΈ°λ°˜μ— λΉ„ν•΄ μ²˜λ¦¬μ†λ„κ°€ μ›”λ“±νžˆ λΉ λ₯΄λ‹€. ν•˜μ§€λ§Œ 전원곡급이 μ€‘λ‹¨λ˜λ©΄ λ©”λͺ¨λ¦¬μ˜ 데이터λ₯Ό λͺ¨λ‘ μžƒμ–΄λ²„λ¦¬κ²Œ λœλ‹€.

 

  • In-Memory DB 선택

In-Memoryλ₯Ό μ‚¬μš©ν•˜λ©΄ 둜그인 정보λ₯Ό λΉ λ₯΄κ²Œ 가져와 μ„±λŠ₯에 영ν–₯을 주지 μ•ŠλŠ”λ‹€. λ˜ν•œ, μ„œλΉ„μŠ€ μž₯μ• λ‘œ 인해 둜그인 정보λ₯Ό μžƒμ–΄λ²„λ¦¬κ²Œ λ˜λŠ” 점이 큰 ν”Όν•΄λ₯Ό μΌμœΌν‚€μ§€λŠ” μ•Šμ„ 것이닀. μ‚¬μš©μžλŠ” λ‹€μ‹œ λ‘œκ·ΈμΈμ„ ν•˜λ©΄λ˜κΈ° λ•Œλ¬Έμ΄λ‹€.

 

  • μ„Έμ…˜ μ €μž₯에 μ•Œλ§žμ€ μ €μž₯μ†Œ

μ„Έμ…˜μ΄ Key-valueν˜•νƒœλ‘œ μ €μž₯λ˜λ―€λ‘œ 이에 맞게 Redisλ‚˜ Memcached 같은 Key-Value NoSql을 μ‚¬μš©

 

  • In-Memory 단점 해결방법

ν•˜μ§€λ§Œ μ΄λŸ¬ν•œ 단점을 ν•΄κ²°ν•˜κΈ° μœ„ν•΄μ„œ Master정보λ₯Ό Slave DB에 λ³΅μ œν•΄λ‘κ³  Masterμž₯μ•  μ‹œ Slaveλ₯Ό Master둜 μŠΉκ²©μ‹œμΌœ μ„œλΉ„μŠ€ 쀑단없이 μ •μƒμ μœΌλ‘œ 둜그인 정보λ₯Ό μ œκ³΅ν•  수 μžˆλ‹€.