🌱 CS

μ„œλ²„κ°€ λŠλ €μ§€λ©΄ μ–΄λ–»κ²Œ ν•΄κ²°ν• κΉŒ? (Scale Out vs Scale Up, Primary-Secondary DB μ•„ν‚€ν…μ²˜, μΊμ‹œ(Redis), DSR)

alreadykite 2023. 12. 10. 15:14

 

μ„œλ²„κ°€ 느렀질 경우 ν•΄κ²°ν•˜λŠ” 방법에 λŒ€ν•˜μ—¬ 순차적으둜 μ•Œμ•„λ³΄μž

 

1. μ„œλ²„ ν™•μž₯ : μŠ€μΌ€μΌ 아웃, μŠ€μΌ€μΌ μ—…

2. DB 병λͺ© ν•΄κ²° : Primary-Secondary DB, 자주 μ“°λŠ” 데이터 μΊμ‹œ(Redis)

 

 

1. μ„œλ²„ ν™•μž₯


1) μŠ€μΌ€μΌ 아웃(Scale Out)

μ„œλ²„ μ—¬λŸ¬ λŒ€λ₯Ό μΆ”κ°€ν•˜μ—¬ μ‹œμŠ€ν…œμ„ ν™•μž₯ν•˜λŠ” 'μˆ˜ν‰ ν™•μž₯' 방법이닀.

μ„œλ²„κ°€ μ—¬λŸ¬ λŒ€κ°€ 되기 λ•Œλ¬Έμ— μ„œλ²„μ— κ±Έλ¦¬λŠ” λΆ€ν•˜λ₯Ό κ· λ“±ν•˜κ²Œ ν•΄μ£ΌλŠ” λ‘œλ“œλ°ΈλŸ°μ‹±μ΄ ν•„μˆ˜μ μœΌλ‘œ λ™λ°˜λ˜μ–΄μ•Ό ν•œλ‹€.

μŠ€μΌ€μΌ μ•„μ›ƒμ˜ 경우 μ„œλ²„ ν•œ λŒ€κ°€ μž₯μ• λ‘œ λ‹€μš΄λ˜λ”λΌλ„ λ‹€λ₯Έ μ„œλ²„λ‘œ μ„œλΉ„μŠ€ 제곡이 κ°€λŠ₯ν•˜λ‹€λŠ” μž₯점이 μžˆλ‹€.

ν•˜μ§€λ§Œ λͺ¨λ“  μ„œλ²„κ°€ λ™μΌν•œ 데이터λ₯Ό κ°€μ§€κ³  μžˆμ–΄μ•Ό ν•˜λ―€λ‘œ 데이터 λ³€ν™”κ°€ 적은 μ›Ή μ„œλ²„μ— μ ν•©ν•œ 방식이닀.

 

2) μŠ€μΌ€μΌ μ—…(Scale Up)

μ„œλ²„μ— CPUλ‚˜ RAM 등을 μΆ”κ°€ν•˜κ±°λ‚˜ κ³ μ„±λŠ₯의 λΆ€ν’ˆ, μ„œλ²„λ‘œ κ΅ν™˜ν•˜λŠ” '수직 ν™•μž₯' 방법이닀.

μ„œλ²„μ— μΆ”κ°€ λΆ€ν’ˆμ„ μž₯μ°©ν•  수 μžˆλŠ” μ—¬μœ  슬둯이 μžˆλ‹€λ©΄ CPUλ‚˜ RAM을 μΆ”κ°€ν•  수 있고, κ·Έλ ‡μ§€ μ•Šλ‹€λ©΄ μ„œλ²„ 자체λ₯Ό κ³ μ„±λŠ₯으둜 κ΅μ²΄ν•˜λŠ” 것이 ν•„μš”ν•˜λ‹€.

μŠ€μΌ€μΌ μ—…μ˜ 경우 μ„œλ²„ ν•œλŒ€μ— λͺ¨λ“  λΆ€ν•˜κ°€ μ§‘μ€‘λ˜λ―€λ‘œ μž₯μ•  μ‹œ 영ν–₯을 크게 받을 수 μžˆλŠ” μœ„ν—˜μ„±μ΄ μžˆλ‹€. (μ„œλ²„ μžμ²΄κ°€ 죽을 μˆ˜λ„ 있고, λ™μ μœΌλ‘œ λŠ˜λ¦¬κΈ°κ°€ 어렀움) 

반면, ν•œλŒ€μ˜ μ„œλ²„μ—μ„œ λͺ¨λ“  데이터λ₯Ό μ²˜λ¦¬ν•˜λ―€λ‘œ 데이터 갱신이 λΉˆλ²ˆν•˜κ²Œ μΌμ–΄λ‚˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ— μ ν•©ν•œ 방식이닀.

 

 

2. DB 병λͺ© ν•΄κ²°


μ„œλ²„ μžμ²΄λŠ” λŠ˜λ €μ„œ μ„œλ²„μ˜ μžμ›μ€ μΆ©λΆ„ν•œλ° DB 병λͺ©μœΌλ‘œ λŠλ €μ§„λ‹€λ©΄ DB λ‹¨μ—μ„œμ˜ μž‘μ—…λ„ ν•„μš”ν•˜λ‹€.

1) Primary-Secondary λ°μ΄ν„°λ² μ΄μŠ€ ꡬ쑰

Primary-Secondary κ΅¬μ‘°λŠ” κ³ μ„±λŠ₯ 및 ν™•μž₯μ„±, κ³ κ°€μš©μ„±μ„ κ³ λ €ν•˜μ—¬ 데이터 정합성을 μœ μ§€ν•˜λ©° λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„λ₯Ό 늘릴 수 μžˆλŠ” ꡬ쑰이닀. 

λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„λ₯Ό 늘릴 λ•ŒλŠ” λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„ κ°„μ˜ 데이터 μ •ν•©μ„±(Data Consistency)을 μœ μ§€ν•΄μ•Ό ν•œλ‹€.

λ°μ΄ν„°λ² μ΄μŠ€μ˜ 성격은 일반적으둜 SELECT 쿼리λ₯Ό ν†΅ν•œ 데이터 읽기(READ) μž‘μ—…μ΄, INSERT, UPDATE, DELETE λ“±μ˜ 데이터 μ“°κΈ°(WRITE) μž‘μ—…λ³΄λ‹€ 훨씬 λ§Žλ‹€.

 

데이터 정합성을 μœ μ§€ν•˜λ©° 데이터 읽기 μž‘μ—… μš©λ„μ˜ DBλ₯Ό λΆ„λ¦¬ν•˜λŠ” 방식이 Read-Replica 방식이닀.

Read-Replica ꡬ쑰

Primary DBλŠ” μ“°κΈ° μž‘μ—…, Secondary DBλŠ” 읽기 μž‘μ—…μ„ μˆ˜ν–‰

μ„±λŠ₯ 및 ν™•μž₯성을 μœ„ν•œ Primary-Secondary ꡬ쑰둜, λͺ¨λ“  λ°μ΄ν„°μ˜ μ“°κΈ° μž‘μ—…μ€ Primary DBμ—μ„œλ§Œ μ‹€ν–‰ν•˜κ³ , μ΅œμ’… 데이터 μƒνƒœλ₯Ό Secondary DB에 주기적으둜 볡제(replication)ν•˜λŠ” 방식을 μ‚¬μš©ν•˜μ—¬ 볡수의 DB μ„œλ²„ κ°„ 데이터 정합성을 ν•΄κ²°ν•œλ‹€. 

 

Active-Standby ꡬ쑰

Primary DBκ°€ 읽고 μ“°κΈ° μž‘μ—…, Secondary DBλŠ” λ°±μ—…DB둜 Stand-By ν˜•νƒœ μœ μ§€

μ„±λŠ₯λ³΄λ‹€λŠ” 백업에 μ΄ˆμ μ„ λ‘” κ³ κ°€μš©μ„±μ„ μœ„ν•œ Primiary-Secondary ꡬ쑰이닀.

Secondary DBλ₯Ό Stand-By ν˜•νƒœλ‘œ μœ μ§€ν•˜λ‹€κ°€, Primary DB에 λ¬Έμ œκ°€ λ°œμƒν•˜λ©΄ Secondary DB(λ°±μ—…DB)κ°€ Active λ˜λŠ” ν˜•νƒœλ₯Ό μ‚¬μš©ν•œλ‹€. λ°±μ—… DBλŠ” 주기적으둜 Primary DB의 μŠ€λƒ…μƒ·μ„ λ³΅μ œν•˜μ—¬ 데이터 정합성을 μœ μ§€ν•œλ‹€.

 

쿼리 μ˜€ν”„λ‘œλ”©(Query Offloading)

μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 섀계 μ‹œλΆ€ν„° DB 읽기/μ“°κΈ° μž‘μ—… λͺ¨λ“ˆμ„ λΆ„λ¦¬ν•˜μ—¬ DB μž‘μ—…μ„ λΆ„μ‚°μ‹œν‚΄
(Production DBμ—μ„œ μˆ˜ν–‰λ˜λŠ” 쿼리 μž‘μ—…μ˜ 일뢀λ₯Ό λ‹€λ₯Έ μ‹œμŠ€ν…œμœΌλ‘œ μ΄λ™μ‹œν‚€λŠ” 것)

각각의 λͺ¨λ“ˆμ€ μ“°κΈ°/읽기 μ „μš© DB에 접속할 수 μžˆλ„λ‘ 컀λ„₯μ…˜ ν’€(connection pool)을 κ΅¬ν˜„ν•œλ‹€.

N개의 Secondary DB 쀑, κ°€μž₯ μ„±λŠ₯이 쒋은 μ„œλ²„λ‘œ 연결될 수 μžˆλ„λ‘ λ‘œλ“œ λ°ΈλŸ°μ‹± λ˜ν•œ κ΅¬ν˜„ν•œλ‹€.

Primary DB에 λ°œμƒν•œ WRITE μž‘μ—…μ΄ CDC(Change Data Capture)둜그λ₯Ό 톡해 Secondary DB에 μ „λ‹¬λ˜λŠ”λ°, Secondary의 μˆ˜κ°€ λ§Žμ„μˆ˜λ‘ 이 μž‘μ—…μ— λΆ€ν•˜κ°€ 생길 수 μžˆμœΌλ―€λ‘œ λ°”μœ Primary DB에 뢀담을 μ€„μ΄κ³ μž 쀑간에 볡제만 λ‹΄λ‹Ήν•˜λŠ” Staging DBλ₯Ό λ‘˜ μˆ˜λ„ μžˆλ‹€.

 

 

2) μΊμ‹œ(Redis)

https://velog.io/@ha0kim/2021-02-22

 

 

 

 

 

 

μ°Έκ³  링크 πŸ™‡‍♀️


https://library.gabia.com/contents/infrahosting/1222/

 

κ°€λΉ„μ•„ 라이브러리

IT μ½˜ν…μΈ  ν—ˆλΈŒ

library.gabia.com

https://blog.naver.com/techtrip/221965081270

 

Primary-Secondary λ°μ΄ν„°λ² μ΄μŠ€ μ•„ν‚€ν…μ²˜

μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜μ—μ„œ 기본적으둜 ν•˜λ‚˜μ˜ μ»΄ν¬λ„ŒνŠΈλŠ” SPOF(Single Point Of Failure)κ°€ 될 수 있기 ...

blog.naver.com