suyeonme

[๋…์„œ] ๊ฐ€์ƒ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์ดˆ - ์‚ฌ์šฉ์ž ์ˆ˜์— ๋”ฐ๋ฅธ ๊ทœ๋ชจ ํ™•์žฅ์„ฑ ๋ณธ๋ฌธ

๋…์„œ๐Ÿ“š

[๋…์„œ] ๊ฐ€์ƒ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์ดˆ - ์‚ฌ์šฉ์ž ์ˆ˜์— ๋”ฐ๋ฅธ ๊ทœ๋ชจ ํ™•์žฅ์„ฑ

suyeonme 2024. 6. 22. 08:54

ํ™•์žฅ๊ฐ€๋Šฅํ•œ ์•„ํ‚คํ…์ณ

์ˆ˜์ง์  ๊ทœ๋ชจ ํ™•์žฅ(Scale up) vs ์ˆ˜ํ‰์  ๊ทœ๋ชจ ํ™•์žฅ(Scale out)

์ˆ˜์ง์  ๊ทœ๋ชจ ํ™•์žฅ(Scale up)์˜ ๋ฌธ์ œ์ 

  • ํ•œ๋Œ€์˜ ์„œ๋ฒ„์— CPU๋‚˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฌดํ•œ๋Œ€๋กœ ์ฆ์„คํ•  ๋ฐฉ๋ฒ•์€ ์—†๊ธฐ์— ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค.
  • ์žฅ์• ์— ๋Œ€ํ•œ ์ž๋™๋ณต๊ตฌ(failover)๋‚˜ ๋‹ค์ค‘ํ™”(re-dundancy)๋ฐฉ์•ˆ์„ ์ œ์‹œํ•˜์ง€์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ์„œ๋ฒ„์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ค‘๋‹จ๋œ๋‹ค.

๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ

์—ญํ• 

  • ํŠธ๋ž˜ํ”ฝ ๋ถ„์‚ฐ: ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ์—ฌ๋Ÿฌ ์„œ๋ฒ„์— ๋ถ„์‚ฐ์‹œ์ผœ ๊ฐ ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ธ๋‹ค.
  • ๊ณ ๊ฐ€์šฉ์„ฑ: ์„œ๋ฒ„ ์žฅ์•  ์‹œ์—๋„ ์„œ๋น„์Šค๋ฅผ ์ง€์†ํ•  ์ˆ˜ ์žˆ๋„๋ก Health Check ๋ฐ Fail Over๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • ์„ฑ๋Šฅ ํ–ฅ์ƒ: ์„œ๋ฒ„ ๊ฐ„์˜ ํŠธ๋ž˜ํ”ฝ์„ ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„๋ฐฐํ•˜์—ฌ ์‘๋‹ต ์‹œ๊ฐ„์„ ์ค„์ด๊ณ  ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•œ๋‹ค.

์ข…๋ฅ˜

  • ์†Œํ”„ํŠธ์›จ์–ด ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ: NGINX, Apache Traffic Server๋“ฑ
  • ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ: AWS Elastic Load Balancing (ELB), Google Cloud Load Balancing, Azure Load Balancer๋“ฑ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‹ค์ค‘ํ™”

์„œ๋ฒ„ ์‚ฌ์ด์— master์™€ slave ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•˜๊ณ  ๋ฐ์ดํ„ฐ ์›๋ณธ์„ master ์„œ๋ฒ„์—, ์‚ฌ๋ณธ์€ slave ์„œ๋ฒ„์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

  • master ์„œ๋ฒ„: ๋ฐ์ดํ„ฐ ์›๋ณธ ์ €์žฅ, ์“ฐ๊ธฐ ์—ฐ์‚ฐ(write)
  • slave ์„œ๋ฒ„: ๋ฐ์ดํ„ฐ ์‚ฌ๋ณธ ์ €์žฅ, ์ฝ๊ธฐ ์—ฐ์‚ฐ(read)

์žฅ์ 

  • ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์—ฐ์‚ฐ์€ master ์„œ๋ฒ„, ์ฝ๊ธฐ ์—ฐ์‚ฐ์€ slave ์„œ๋ฒ„๋กœ ๋ถ„์‚ฐ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌ๋  ์ˆ˜ ์žˆ๋Š” query์˜ ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜์„œ ์„ฑ๋Šฅ์ด ์ข‹์•„์ง„๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์—ญ์ ์œผ๋กœ ๋–จ์–ด์ง„ ์žฅ์†Œ์— ๋‹ค์ค‘ํ™” ์‹œํ‚ด์œผ๋กœ์จ ์ž์—ฐ์žฌํ•ด๋“ฑ์˜ ์ด์œ ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„์˜ ์ผ๋ถ€๊ฐ€ ํŒŒ๊ดด๋˜์–ด๋„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์กดํ•  ์ˆ˜ ์žˆ๋‹ค. 
  • ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ์ง€์—ญ์— ๋ณต์ œํ•จ์œผ๋กœ์จ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ๋‹ค๋ฅธ ์„œ๋ฒ„์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋กœ ์„œ๋น„์Šค๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค. 

์˜ˆ์‹œ

  • slave ์„œ๋ฒ„๊ฐ€ 1๋Œ€์ธ๋ฐ ๋‹ค์šด๋œ ๊ฒฝ์šฐ, ์ฝ๊ธฐ ์—ฐ์‚ฐ์€ ํ•œ์‹œ์ ์œผ๋กœ master ์„œ๋ฒ„๋กœ ์ „๋‹ฌ๋œ๋‹ค. ๋˜ํ•œ ์ฆ‰์‹œ ์ƒˆ๋กœ์šด slave ์„œ๋ฒ„๊ฐ€ ์žฅ์•  ์„œ๋ฒ„๋ฅผ ๋Œ€์ฒดํ•œ๋‹ค. slave ์„œ๋ฒ„๊ฐ€ ์—ฌ๋Ÿฌ๋Œ€์ธ ๊ฒฝ์šฐ, ์ฝ๊ธฐ ์—ฐ์‚ฐ์€ ๋‚˜๋จธ์ง€ slave ์„œ๋ฒ„๋กœ ๋ถ„์‚ฐ๋  ๊ฒƒ์ด๋ฉฐ ์ƒˆ๋กœ์šด slave ์„œ๋ฒ„๊ฐ€ ์žฅ์•  ์„œ๋ฒ„๋ฅผ ๋Œ€์ฒดํ•œ๋‹ค.
  • master ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋˜๋ฉด, ํ•œ๋Œ€์˜ slave ์„œ๋ฒ„๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น slave ์„œ๋ฒ„๊ฐ€ ์ƒˆ๋กœ์šด master ์„œ๋ฒ„๊ฐ€ ๋œ๋‹ค. ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ์‚ฐ์€ ์ผ์‹œ์ ์œผ๋กœ ์ƒˆ๋กœ์šด master ์„œ๋ฒ„์—์„œ ์ฒ˜๋ฆฌ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ƒˆ๋กœ์šด slave ์„œ๋ฒ„๊ฐ€ ์ถ”๊ฐ€๋œ๋‹ค. 

์บ์‹œ

์‘๋‹ต ์‹œ๊ฐ„์€ ์บ์‹œ๋ฅผ ๋ถ™์ด๊ณ  ์ •์  ์ฝ˜ํ…์ธ ๋ฅผ CDN์œผ๋กœ ์˜ฎ๊ธฐ๋ฉด ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. 

์บ์‹œ๋Š” ๋น„์‹ผ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ ๋˜๋Š” ์ž์ฃผ ์ฐธ์กฐ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์•ˆ์— ๋‘๊ณ  ๋’ค์ด์€ ์š”์ฒญ์ด ๋ณด๋‹ค ๋นจ๋ฆฌ ์ฒ˜๋ฆฌ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์ €์žฅ์†Œ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ Redis๊ฐ€ ์žˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์–ผ๋งˆ๋‚˜ ์ž์ฃผ ํ˜ธ์ถœํ•˜๋Š๋ƒ์— ํฌ๊ฒŒ ์ขŒ์šฐ๋˜๋Š”๋ฐ ์บ์‹œ๋Š” ๊ทธ๋Ÿฐ ๋ฌธ์ œ๋ฅผ ์™„ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

์บ์‹œ ๊ณ„์ธต(cache tier)

์บ์‹œ ๊ณ„์ธต์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž ์‹œ ๋ณด๊ด€๋˜๋Š” ๊ณณ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ณด๋‹ค ๋น ๋ฅด๋‹ค. ๋ณ„๋„์˜ ์บ์‹œ ๊ณ„์ธต์„ ๋‘๋ฉด ์„ฑ๋Šฅ์ด ๊ฐœ์„ ๋  ๋ฟ์•„๋‹ˆ๋ผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๊ณ  ์บ์‹œ ๊ณ„์ธต์˜ ๊ทœ๋ชจ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฝ๊ธฐ ์ฃผ๋„ํ˜• ์บ์‹œ ์ „๋žต(read-through caching strategy)

์ฝ๊ธฐ ์ฃผ๋„ํ˜• ์บ์‹œ ์ „๋žต์€ ๋‹ค์Œ์˜ ์ˆœ์„œ๋กœ ์ง„ํ–‰๋œ๋‹ค.

  1. ์š”์ฒญ์„ ๋ฐ›์€ ์›น์„œ๋ฒ„๋Š” ์บ์‹œ์— ์‘๋‹ต์ด ์ €์žฅ๋˜์–ด์žˆ๋Š”์ง€ ๋ณธ๋‹ค.
  2. ๋งŒ์ผ ์ €์žฅ๋˜์–ด์žˆ๋‹ค๋ฉด ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  3. ์—†๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค query๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์•„ ์บ์‹œ์— ์ €์žฅํ•œ ๋’ค ํด๋ผ์ด์–ธํŠธ์— ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์บ์‹œ ์‚ฌ์šฉ์‹œ ์œ ์˜ํ•  ์ 

  • ๋ฐ์ดํ„ฐ๊ฐฑ์‹ ์€ ์ž์ฃผ ์ผ์–ด๋‚˜์ง€ ์•Š์ง€๋งŒ ์ฐธ์กฐ๊ฐ€ ๋นˆ๋ฒˆํ•˜๊ฒŒ ์ผ์–ด๋‚˜๋Š” ๊ฒฝ์šฐ ์บ์‹œ๊ฐ€ ์ ํ•ฉํ•˜๋‹ค.
  • ์บ์‹œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํœ˜๋ฐœ์„ฑ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๋ฏ€๋กœ ์˜๊ตฌ์ ์œผ๋กœ ๋ณด๊ด€ํ•  ๋ฐ์ดํ„ฐ๋Š” ์บ์‹œ์— ์ €์žฅํ•˜๋ฉด ์•ˆ๋œ๋‹ค.
  • ๋งŒ๋ฃŒ๋œ ๋ฐ์ดํ„ฐ๋Š” ์บ์‹œ์—์„œ ์‚ญ์ œํ•ด์•ผํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๋งŒ๋ฃŒ๊ธฐํ•œ์„ ์ ์ ˆํ•˜๊ฒŒ ์„ค์ •ํ•ด์•ผํ•œ๋‹ค.
  • ์ €์žฅ์†Œ์˜ ์›๋ณธ์„ ๊ฐฑ์‹ ํ•˜๋Š” ์—ฐ์‚ฐ๊ณผ ์บ์‹œ๋ฅผ ๊ฐฑ์‹ ํ•˜๋Š” ์—ฐ์‚ฐ์ด ๋‹จ์ผ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์ง€์•Š๋Š” ๊ฒฝ์šฐ ์ผ๊ด€์„ฑ์ด ๊นจ์งˆ ์ˆ˜ ์žˆ๋‹ค.
  • ์บ์‹œ ์„œ๋ฒ„๋ฅผ ํ•œ๋Œ€๋งŒ ๋‘๋Š” ๊ฒฝ์šฐ, ์žฅ์•  ๋ฐœ์ƒ์‹œ ํ•ด๋‹น ์„œ๋ฒ„๋Š” ๋‹จ์ผ ์žฅ์•  ์ง€์ (Single point of failure, SPOF)๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์—ฌ๋Ÿฌ ์ง€์—ญ์— ๊ฑธ์ณ ์บ์‹œ ์„œ๋ฒ„๋ฅผ ๋ถ„์‚ฐํ•ด์•ผํ•œ๋‹ค. 
  • ์ ์ ˆํ•œ ์บ์‹œ ๋ฐ์ดํ„ฐ ๋ฐฉ์ถœ ์ •์ฑ…์„ ์ ์šฉํ•ด์•ผํ•œ๋‹ค.

๋‹จ์ผ ์žฅ์•  ์ง€์ (Single point of failure, SPOF)

์–ด๋–ค ํŠน์ • ์ง€์ ์—์„œ์˜ ์žฅ์• ๊ฐ€ ์ „์ฒด ์‹œ์Šคํ…œ์˜ ๋™์ž‘์„ ์ค‘๋‹จ ์‹œํ‚ค๋Š” ๊ฒฝ์šฐ์ด๋‹ค.

 

์บ์‹œ ๋ฐ์ดํ„ฐ ๋ฐฉ์ถœ ์ •์ฑ…

์บ์‹œ๊ฐ€ ๊ฝ‰ ์ฐผ๋Š”๋ฐ ์ถ”๊ฐ€๋กœ ์บ์‹œ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด๋ณด๋‚ด๋Š” ์ •์ฑ…์ด๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ LRU(Least recently used) -- ๋งˆ์ง€๋ง‰์œผ๋กœ ์‚ฌ์šฉ๋œ ์‹œ์ ์ด ๊ฐ€์žฅ ์˜ค๋ž˜๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด๋ณด๋‚ด๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜-- ์ด๋‚˜ LFU(Least frequently used) --์‚ฌ์šฉ๋œ ๋นˆ๋„๊ฐ€ ๊ฐ€์žฅ ๋‚ฎ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด๋ณด๋‚ด๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์žˆ๋‹ค.


CDN

CDN์€ ์ •์  ์ปจํ…์ธ ๋ฅผ ์ „์†กํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ง€๋ฆฌ์ ์œผ๋กœ ๋ถ„์‚ฐ๋œ ์„œ๋ฒ„์˜ ๋„คํŠธ์›Œํฌ์ด๋‹ค. ์ด๋ฏธ์ง€, ๋น„๋””์˜ค, CSS, Javascript ํŒŒ์ผ๋“ฑ์„ ์บ์‹œํ•  ์ˆ˜ ์žˆ๋‹ค.  ์‚ฌ์šฉ์ž๊ฐ€ ์›น์‚ฌ์ดํŠธ๋ฅผ ๋ฐฉ๋ฌธํ•˜๋ฉด ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด CDN ์„œ๋ฒ„๊ฐ€ ์ •์  ์ปจํ…์ธ ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค. 

๋ฌด์ƒํƒœ(Stateless) ๊ณ„์ธต 

์ƒํƒœ ์›น ๊ณ„์ธต

์›น ๊ณ„์ธต์„ ์ˆ˜ํ‰์ ์œผ๋กœ ํ™•์žฅํ•˜๊ธฐ์œ„ํ•ด์„œ ์ƒํƒœ ์ •๋ณด(์‚ฌ์šฉ์ž์˜ ์„ธ์…˜)๋ฅผ ์›น๊ณ„์ธต์—์„œ ์ œ๊ฑฐํ•ด์•ผํ•œ๋‹ค. ์ƒํƒœ์ •๋ณด๋ฅผ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ NoSQL ๊ฐ™์€ ์ €์žฅ์†Œ์— ๋ณด๊ด€ํ•˜๊ณ  ํ•„์š”ํ•  ๋•Œ ๊ฐ€์ ธ์˜ค๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ƒํƒœ์ •๋ณด๊ฐ€ ์›น์„œ๋ฒ„์—์„œ ์ œ๊ฑฐ๋˜์—ˆ์œผ๋ฏ€๋กœ, ํŠธ๋ž˜ํ”ฝ ์–‘์— ๋”ฐ๋ผ ์›น์„œ๋ฒ„๋ฅผ ๋„ฃ๊ฑฐ๋‚˜ ๋นผ๊ธฐ๋งŒํ•˜๋ฉด ์ž๋™์ ์œผ๋กœ ๊ทœ๋ชจ๋ฅผ ํ™•์žฅ ํ•  ์ˆ˜ ์žˆ๋‹ค. 

์ƒํƒœ ์ •๋ณด ์˜์กด์ ์ธ ์•„ํ‚คํ…์ณ

์ƒํƒœ ์ •๋ณด๋ฅผ ๋ณด๊ด€ํ•˜๋Š” ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ ์ •๋ณด๋ฅผ ์š”์ฒญ ์‚ฌ์ด์—์„œ ๊ณต์œ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ™์€ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์€ ํ•ญ์ƒ ๊ฐ™์€ ์„œ๋ฒ„๋กœ ์ „์†ก๋˜์–ด์•ผํ•œ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋Š” ๊ณ ์ • ์„ธ์…˜(sticky session) ๊ธฐ๋Šฅ์œผ๋กœ ์ด๋ฅผ ์ง€์›ํ•˜๋Š”๋ฐ, ์ด๋Š” ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ์— ๋ถ€๋‹ด์„ ์ค€๋‹ค. 

๋ฉ”์„ธ์ง€ํ

๋ฉ”์„ธ์ง€ํ๋Š” ๋ฐ์ดํ„ฐ์˜ ๋ฌด์†์‹ค์„ ๋ณด์žฅํ•˜๊ณ  ๋น„๋™๊ธฐ ํ†ต์‹ ์„ ์ง€์›ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์ด๋‹ค. ๋ฉ”์„ธ์ง€ํ๋ฅผ ์ด์šฉํ•˜๋ฉด ์„œ๋น„์Šค ๋˜๋Š” ์„œ๋ฒ„๊ฐ„์˜ ๊ฒฐํ•ฉ์ด ๋Š์Šจํ•ด์ ธ์„œ ๊ทœ๋ชจ ํ™•์žฅ์„ฑ์ด ๋ณด์žฅ๋˜์–ด์•ผํ•˜๋Š” ์•ˆ์ •์  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์„ฑํ•˜๊ธฐ์ข‹๋‹ค.

๊ธฐ๋ณธ ์•„ํ‚คํ…์ณ

  • Producer/Publisher: ๋ฉ”์„ธ์ง€๋ฅผ ๋งŒ๋“ค์–ด ๋ฉ”์ œ์‹œํ์— publishํ•œ๋‹ค. ์ƒ์‚ฐ์ž๋Š” ์†Œ๋น„์ž ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค์šด๋˜์–ด๋„ ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐœํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Consumer/Subscriber: ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐ›์•„ ๊ทธ์— ๋งž๋Š” ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์†Œ๋น„์ž๋Š” ์ƒ์‚ฐ์ž ์„œ๋น„์Šค๊ฐ€ ๊ฐ€์šฉ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๊ฐ€ ์•„๋‹ˆ์—ฌ๋„ ๋ฉ”์„ธ์ง€๋ฅผ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค. 

์˜ˆ์‹œ

์‚ฌ์ง„ ๋ณด์ • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. ๋ณด์ •์€ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋น„๋™๊ธฐ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉด ํŽธ๋ฆฌํ•˜๋‹ค. ๋ฉ”์„ธ์ง€ํ๋ฅผ ์ด์šฉํ•ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. 

  1. ์›น์„œ๋ฒ„๋Š” ์‚ฌ์ง„ ๋ณด์ • ์ž‘์—…์„ ๋ฉ”์„ธ์ง€ ํ์— ๋„ฃ๋Š”๋‹ค.
  2. ์‚ฌ์ง„ ๋ณด์ • ์ž‘์—… ํ”„๋กœ์„ธ์Šค๋Š” ์ด ์ž‘์—…์„ ๋ฉ”์„ธ์ง€ํ์—์„œ ๊บผ๋‚ด์–ด ๋น„๋™๊ธฐ์ ์œผ๋กœ ์™„๋ฃŒํ•œ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ทœ๋ชจ ํ™•์žฅ

Sharding

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ˆ˜ํ‰์  ํ™•์žฅ์€ sharding์ด๋ผ๊ณ  ๋ถ€๋ฅด๋Š”๋ฐ, ๋” ๋งŽ์€ ์„œ๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•จ์œผ๋กœ์จ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ์ƒค๋”ฉ์€ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ Shard๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ์ž‘์€ ๋‹จ์œ„๋กœ ๋ถ„ํ• ํ•˜๋Š” ๊ธฐ์ˆ ์„ ๋งํ•œ๋‹ค. 

Sharding Key(Partition Key)

์ƒค๋”ฉ ์ „๋žต์„ ๊ตฌํ˜„ํ•  ๋•Œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์ƒค๋”ฉํ‚ค๋ฅผ ์–ด๋–ป๊ฒŒ ์ •ํ•˜๋Š๋ƒ์ด๋‹ค. ์ƒค๋”ฉ ํ‚ค๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ถ„์‚ฐ๋ ์ง€ ์ •ํ•˜๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ์ปฌ๋Ÿผ์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ์ƒค๋”ฉ ํ‚ค๋ฅผ ์ •ํ•  ๋•Œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ ๋ฅด๊ฒŒ ๋ถ„ํ• ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ค‘์š”ํ•˜๋‹ค.

๊ณ ๋ ค์‚ฌํ•ญ

  • ์ƒค๋“œ ์†Œ์ง„(Shard exhaustion) ํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜๋ฉด, ์ƒค๋“œ ํ‚ค๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์žฌ๋ฐฐ์น˜ํ•ด์•ผํ•œ๋‹ค.
  • ์œ ๋ช…์ธ์‚ฌ(Celebrity)/ํ•ซ์ŠคํŒŸ ํ‚ค(Hotspot key) ๋ฌธ์ œ ๋ฐœ์ƒ์‹œ, ์œ ๋ช…์ธ์‚ฌ ๊ฐ๊ฐ์— ์ƒค๋“œ ํ•˜๋‚˜์”ฉ์„ ํ• ๋‹นํ•˜๊ฑฐ๋‚˜ ๋” ์ž˜๊ฒŒ ์ชผ๊ฐœ์•ผํ•œ๋‹ค.
  • ์—ฌ๋Ÿฌ์ƒค๋“œ์— ๊ฑธ์นœ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ธํ•˜๊ธฐ๊ฐ€ ํž˜๋“  ๊ฒฝ์šฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋น„์ •๊ทœํ™”ํ•˜์—ฌ ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์—์„œ ์งˆ์˜๊ฐ€ ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

 

์ƒค๋“œ ์†Œ์ง„(Shard exhaustion)

๋ฐ์ดํ„ฐ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•„์„œ ํ•˜๋‚˜์˜ ์ƒค๋“œ๋กœ๋Š” ๊ฐ๋‹น๋ถˆ๊ฐ€ํ•œ ๊ฒฝ์šฐ, ๋˜๋Š” ์ƒค๋“œ๊ฐ„ ๋ฐ์ดํ„ฐ ๋ถ„ํฌ๊ฐ€ ๊ท ๋“ฑํ•˜์ง€๋ชปํ•ด์„œ ์–ด๋–ค ์ƒค๋“œ์— ํ• ๋‹น๋œ ๊ณต๊ฐ„ ์†Œ๋ชจ๊ฐ€ ๋‹ค๋ฅธ ์ƒค๋“œ์— ๋น„ํ•ด ๋น ๋ฅด๊ฒŒ ์ง„ํ–‰๋˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

์œ ๋ช…์ธ์‚ฌ(Celebrity)/ํ•ซ์ŠคํŒŸ ํ‚ค(Hotspot key) ๋ฌธ์ œ

ํŠน์ • ์ƒค๋“œ์— ์งˆ์˜๊ฐ€ ์ง‘์ค‘๋˜์–ด ์„œ๋ฒ„์— ๊ณผ๋ถ€ํ•˜๊ฐ€ ๊ฑธ๋ฆฌ๋Š” ๋ฌธ์ œ์ด๋‹ค.

'๋…์„œ๐Ÿ“š' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[๋…์„œ] ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์‚ฌ์‹ค๊ณผ ์˜คํ•ด  (0) 2022.07.25
Comments