Basic

μˆ˜ν‰μ  규λͺ¨ ν™•μž₯(Scale Out)

규λͺ¨ ν™•μž₯은 크게 수직적 규λͺ¨ ν™•μž₯κ³Ό μˆ˜ν‰μ  규λͺ¨ ν™•μž₯으둜 λ‚˜λ‰œλ‹€.

  • 수직적 규λͺ¨ ν™•μž₯: 단일 μ„œλ²„μ˜ μ„±λŠ₯을 ν–₯μƒμ‹œν‚€λŠ” 방법(CPU / RAM / SSD λ“± μ—…κ·Έλ ˆμ΄λ“œ

  • μˆ˜ν‰μ  규λͺ¨ ν™•μž₯: μ—¬λŸ¬ μ„œλ²„λ‘œ λΆ„μ‚°ν•˜μ—¬ μ²˜λ¦¬ν•˜λŠ” 방법

λ§Œμ•½ μ„œλ²„λ‘œ μœ μž…λ˜λŠ” νŠΈλž˜ν”½ 양이 μ κ±°λ‚˜ μ„œλ²„μ˜ μ„±λŠ₯이 μΆ©λΆ„ν•˜λ‹€λ©΄ 수직적 규λͺ¨ ν™•μž₯이 μœ λ¦¬ν•˜μ§€λ§Œ λ‹€μŒκ³Ό 같은 λ¬Έμ œκ°€ μ‘΄μž¬ν•œλ‹€.

  • ν•˜λ‚˜μ˜ μ„œλ²„λ‘œ νŠΈλž˜ν”½μ„ μ²˜λ¦¬ν•  수 μžˆλŠ” μ ˆλŒ€μ μΈ μ„±λŠ₯적 ν•œκ³„ 쑴재

  • SPOF(Single Point of Failure)둜 μΈν•œ μœ„ν—˜μ„±μ΄ 쑴재

  • μžλ™λ³΅κ΅¬ λ°©μ•ˆμ΄λ‚˜ 닀쀑화 λ°©μ•ˆμ΄ μ‘΄μž¬ν•˜μ§€ μ•Šμ•„ μž₯μ•  λ°œμƒ μ‹œ 볡ꡬ가 어렀움

μœ„μ™€ 같은 문제둜 인해 보톡 λŒ€κ·œλͺ¨ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 섀계할 λ•ŒλŠ” μˆ˜ν‰μ  규λͺ¨ ν™•μž₯을 κ³ λ €ν•œλ‹€.

λ‘œλ“œλ°ΈλŸ°μ„œ

λ‘œλ“œλ°ΈλŸ°μ„œλŠ” λΆ€ν•˜ λΆ„μ‚° 집합에 μ†ν•œ μ›Ή μ„œλ²„μ— νŠΈλž˜ν”½ λΆ€ν•˜λ₯Ό κ³ λ₯΄κ²Œ λΆ„μ‚°ν•˜λŠ” μ—­ν•  뿐만 μ•„λ‹ˆλΌ λ‹€μŒκ³Ό 같은 κΈ°λŠ₯을 μ œκ³΅ν•  수 μžˆλ‹€.

  • μžλ™λ³΅κ΅¬: λ‘œλ“œλ°ΈλŸ°μ„œλŠ” μ„œλ²„μ— μž₯μ• κ°€ λ°œμƒν•˜λ©΄ ν•΄λ‹Ή μ„œλ²„λ‘œμ˜ νŠΈλž˜ν”½μ„ μ°¨λ‹¨ν•˜κ³ , λ‹€λ₯Έ μ„œλ²„λ‘œ νŠΈλž˜ν”½μ„ λΆ„μ‚°ν•œλ‹€.

    • Amazon Elastic Load Balancer(ELB)λŠ” λ“±λ‘λœ λŒ€μƒμ„ μ •μ§€μ μœΌλ‘œ ν—¬μŠ€ μ²΄ν¬ν•˜μ—¬ λ¬Έμ œκ°€ μžˆλŠ” μΈμŠ€ν„΄μŠ€λ₯Ό νŠΈλž˜ν”½μ—μ„œ μžλ™μœΌλ‘œ μ œμ™Έν•œλ‹€.

  • ν™•μž₯μ„±: νŠΈλž˜ν”½μ— 따라 μ„œλ²„λ₯Ό μΆ”κ°€ν•˜κ±°λ‚˜ μ œκ±°ν•  수 μžˆλ‹€.

λ°μ΄ν„°λ² μ΄μŠ€ 닀쀑화

λ§Žμ€ λ°μ΄ν„°λ² μ΄μŠ€κ°€ 닀쀑화λ₯Ό μ§€μ›ν•˜λ©°, 보톡은 λ§ˆμŠ€ν„°-슬레이브 ꡬ쑰둜 κ΅¬μ„±λœλ‹€.

  • master: μ“°κΈ° μž‘μ—…μ„ μ²˜λ¦¬ν•˜λŠ” μ„œλ²„

  • slave: 읽기 μž‘μ—…μ„ μ²˜λ¦¬ν•˜λŠ” μ„œλ²„, 보톡 읽기 μž‘μ—…μ˜ νšŸμˆ˜κ°€ 많기 λ•Œλ¬Έμ— λ§Žμ€ slave μ„œλ²„λ₯Ό 두어 λΆ€ν•˜λ₯Ό λΆ„μ‚°ν•œλ‹€.

λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό λ‹€μ€‘ν™”ν•˜λ©΄ λ‹€μŒκ³Ό 같은 μž₯점을 얻을 수 μžˆλ‹€.

  • μ„±λŠ₯ ν–₯상: 읽기 μž‘μ—…μ„ λΆ„μ‚°ν•˜μ—¬ μ²˜λ¦¬ν•˜κΈ° λ•Œλ¬Έμ— μ„±λŠ₯ ν–₯상

  • μ•ˆμ •μ„±: λ°μ΄ν„°λ² μ΄μŠ€ 일뢀가 μ†μƒλ˜λ”λΌλ„ 데이터 보쑴 κ°€λŠ₯

  • κ°€μš©μ„±: ν•˜λ‚˜μ˜ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ— μž₯μ• κ°€ λ°œμƒν•˜λ”λΌλ„ λ‹€λ₯Έ μ„œλ²„μ— μžˆλŠ” 데이터 μ‚¬μš© κ°€λŠ₯

λ°μ΄ν„°λ² μ΄μŠ€ μˆ˜ν‰μ  ν™•μž₯(=Sharding)

λŒ€κ·œλͺ¨ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μƒ€λ“œλΌκ³  λΆ€λ₯΄λŠ” μž‘μ€ λ‹¨μœ„λ‘œ λΆ„ν• ν•˜λŠ” 기술둜, 각 μƒ€λ“œλŠ” 같은 μŠ€ν‚€λ§ˆλ₯Ό 가지고 μžˆμ§€λ§Œ μ„œλ‘œ λ‹€λ₯Έ 데이터λ₯Ό μ €μž₯ν•˜κ²Œ λœλ‹€. 데이터가 λ³΄κ΄€λ˜λŠ” μƒ€λ“œλŠ” 샀딩 μ „λž΅μ— 따라 κ²°μ •λ˜λ©°, 샀딩을 λ„μž…ν•˜κ²Œ 되면 λ‹€μŒκ³Ό 같은 λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆλ‹€.

  • 재 샀딩: ν•˜λ‚˜μ˜ μƒ€λ“œμ— μ €μž₯된 데이터가 λ„ˆλ¬΄ λ§Žμ•„μ§€κ±°λ‚˜ 뢄포가 κ· λ“±ν•˜μ§€ μ•Šμ„ 경우 샀딩 μ „λž΅μ„ μž¬μ„€μ • ν•„μš”

  • 유λͺ…인사 문제: νŠΉμ • μƒ€λ“œμ— μ§ˆμ˜κ°€ μ§‘μ€‘λ˜μ–΄ ν•΄λ‹Ή μƒ€λ“œμ— λΆ€ν•˜κ°€ μ§‘μ€‘λ˜λŠ” 문제

  • 쑰인과 λΉ„μ •κ·œν™”: μ—¬λŸ¬ μƒ€λ“œ μ„œλ²„λ‘œ μͺΌκ°œκ²Œ 되면, μ—¬λŸ¬ μƒ€λ“œμ— 걸친 데이터 쑰인이 νž˜λ“€μ–΄μ Έ λΉ„μ •κ·œν™”κ°€ ν•„μš”ν•  수 있음

μΊμ‹œ(Cache)

κ°’ λΉ„μ‹Ό μ—°μ‚° κ²°κ³Ό λ˜λŠ” 자주 μ°Έμ‘°λ˜λŠ” 데이터λ₯Ό λ©”λͺ¨λ¦¬μ— μ €μž₯ν•˜μ—¬ λΉ λ₯΄κ²Œ μ ‘κ·Όν•  수 μžˆλ„λ‘ ν•˜λŠ” μ €μž₯μ†Œμ΄λ‹€. μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ„±λŠ₯은 λ°μ΄ν„°λ² μ΄μŠ€ 쿼리의 μ„±λŠ₯에 크게 μ˜μ‘΄ν•˜λŠ”λ°, μΊμ‹œλ₯Ό μ‚¬μš©ν•˜λ©΄ λ°μ΄ν„°λ² μ΄μŠ€ 쿼리λ₯Ό 쀄여 μ„±λŠ₯을 ν–₯μƒμ‹œν‚¬ 수 μžˆλ‹€. λŒ€ν‘œμ μΈ μΊμ‹œ μ „λž΅μœΌλ‘  읽기 μ£Όλ„ν˜• μΊμ‹œ μ „λž΅(read-through caching strategy)이 μ‘΄μž¬ν•˜λ©°, λ‹€μŒκ³Ό 같이 λ™μž‘ν•œλ‹€.

  1. μΊμ‹œ 계측에 데이터 쑰회 μš”μ²­

  2. μΊμ‹œ 계측에 데이터가 μ‘΄μž¬ν•˜λ©΄ μΊμ‹œμ—μ„œ 데이터 쑰회

    1. μΊμ‹œ 계측에 데이터가 μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ©΄ λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ 데이터 쑰회

    2. λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μ‘°νšŒν•œ 데이터λ₯Ό μΊμ‹œ 계측에 데이터 μ €μž₯

  3. 데이터 λ°˜ν™˜

μΊμ‹œ μ‚¬μš© μ‹œ 고렀사항

μΊμ‹œ 적용 μ‹œμ—” κ°±μ‹  λΉˆλ„ / μ°Έμ‘° λΉˆλ„ / 만료 μ‹œκ°„μ„ κ³ λ €ν•΄μ•Όν•˜λ©°, κ·Έ 외에도 λ‹€μŒκ³Ό 같은 사항을 κ³ λ €ν•  수 μžˆλ‹€.

  • μΊμ‹œ λ©”λͺ¨λ¦¬: 크기가 λ„ˆλ¬΄ μž‘μœΌλ©΄ 데이터가 μΊμ‹œμ—μ„œ 자주 λ°€λ €λ‚˜ μ„±λŠ₯ μ €ν•˜ λ°œμƒ κ°€λŠ₯(κ³Όν• λ‹Ήν•˜μ—¬ 방지 ν•„μš”)

  • 데이터 방좜 μ •μ±…: μΊμ‹œκ°€ 꽉 찼을 λ•Œ 데이터가 μΊμ‹œμ—μ„œ λ°€λ €λ‚˜λŠ” 방법을 κ²°μ •ν•˜λŠ” μ •μ±…μœΌλ‘œ, LRU / LFU / FIFO 등이 μžˆλ‹€.

μ½˜ν…μΈ  전솑 λ„€νŠΈμ›Œν¬(CDN)

정적 μ½˜ν…μΈ λ₯Ό μ „μ†”ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” μ„œλ²„ λ„€νŠΈμ›Œν¬λ‘œ, 물리적으둜 λΆ„μ‚°λœ μ„œλ²„μ˜ λ„€νŠΈμ›Œν¬μ΄λ‹€. 이미지 / λΉ„λ””μ˜€ / CSS ? JavaScript 파일 등을 μΊμ‹œν•˜μ—¬ μ‚¬μš©μžμ—κ²Œ λΉ λ₯΄κ²Œ 전솑할 수 μžˆλ‹€.

μ‚¬μš©μžκ°€ νŠΉμ • 이미지 URL에 μ ‘κ·Όν•˜λŠ” 경우 μ•„λž˜μ™€ 같이 λ™μž‘ν•œλ‹€.

  1. μ‚¬μš©μžκ°€ 이미지 URL에 μ ‘κ·Ό

  2. CDN μ„œλ²„μ— μš”μ²­

  3. CDN μ„œλ²„μ— ν•΄λ‹Ή 이미지가 μ‘΄μž¬ν•˜λ©΄ CDN μ„œλ²„μ—μ„œ 이미지 쑰회

    1. CDN μ„œλ²„μ— ν•΄λ‹Ή 이미지가 μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ©΄ 원본 μ„œλ²„μ— μš”μ²­

    2. 원본 μ„œλ²„μ—μ„œ μ‘°νšŒν•œ 이미지λ₯Ό CDN μ„œλ²„μ— μ €μž₯

  4. CDN μ„œλ²„μ—μ„œ 이미지 λ°˜ν™˜

λ¬΄μƒνƒœ(Stateless) μ›Ή 계측

μ›Ή κ³„μΈ΅μ˜ μˆ˜ν‰μ  ν™•μž₯을 μœ„ν•΄μ„  μƒνƒœ 정보λ₯Ό μ›Ή κ³„μΈ΅μ—μ„œ μ œκ±°ν•΄μ•Ό ν•œλ‹€. μƒνƒœκ°€ ν•„μš”ν•œ κ²½μš°μ—” RDBMS / μΊμ‹œ μ‹œμŠ€ν…œ / NoSQL λ°μ΄ν„°λ² μ΄μŠ€ 등을 μ‚¬μš©ν•  수 μžˆλ‹€.

λ§Œμ•½ μƒνƒœ 정보λ₯Ό μ›Ή κ³„μΈ΅μ—μ„œ μ €μž₯ν•˜κ²Œ 되면, νŠΉμ • ν΄λΌμ΄μ–ΈνŠΈκ°€ 항상 같은 μ„œλ²„λ‘œ 전솑해야 ν•œλ‹€. λ‘œλ“œλ°ΈλŸ°μ„œμ˜ κ³ μ • μ„Έμ…˜ 방법을 μ‚¬μš©ν•  수 μžˆμ§€λ§Œ λ‘œλ“œλ°ΈλŸ°μ„œμ˜ λΆ€ν•˜κ°€ μ¦κ°€ν•˜κ³  μ„œλ²„ ν™•μž₯성이 μ €ν•˜λ  수 μžˆλ‹€.

닀쀑 데이터 μ„Όν„°

μ—¬λŸ¬ 데이터 μ„Όν„°λ₯Ό μ§€μ›ν•˜κ²Œ 되면, κ°€μš©μ„±μ„ 높이고 μ „ 세계 μ‚¬μš©μžμ—κ²Œ λΉ λ₯Έ 응닡 μ‹œκ°„μ„ μ œκ³΅ν•  수 μžˆλ‹€.

  • 지리적 λΌμš°νŒ…(geo-routing)을 μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μžκ°€ κ°€μž₯ κ°€κΉŒμš΄ 데이터 μ„Όν„°λ‘œ μ—°κ²°

  • νŠΉμ • 데이터 센터에 μž₯μ•  λ°œμƒ μ‹œ μž₯μ• κ°€ μ—†λŠ” 데이터 μ„Όν„°λ‘œ νŠΈλž˜ν”½μ„ μ „ν™˜

μ΄λŸ¬ν•œ 닀쀑 데이터센터 μ•„ν‚€ν…μ²˜λ₯Ό μ„€κ³„ν•˜κΈ° μœ„ν•΄μ„  λ‹€μŒκ³Ό 같은 사항을 κ³ λ €ν•΄μ•Ό ν•œλ‹€.

  • νŠΈλž˜ν”½ 우회: μ˜¬λ°”λ₯Έ 데이터 μ„Όν„°λ‘œ νŠΈλž˜ν”½μ„ λ³΄λ‚΄λŠ” 방법 ν•„μš”

  • 데이터 동기화: 데이터 μ„Όν„° κ°„ 데이터 동기화 방법 ν•„μš”

  • ν…ŒμŠ€νŠΈμ™€ 배포: 닀쀑 데이터 μ„Όν„° μ•„ν‚€ν…μ²˜λ₯Ό ν…ŒμŠ€νŠΈν•˜κ³  λ°°ν¬ν•˜λŠ” 방법 ν•„μš”

λ©”μ‹œμ§€ 큐

λ©”μ‹œμ§€μ˜ 무손싀을 보μž₯ν•˜λŠ” 비동기 톡신을 μ§€μ›ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈλ‘œ, λ©”μ‹œμ§€μ˜ 버퍼 역할을 ν•˜λ©΄μ„œ λΉ„λ™κΈ°μ μœΌλ‘œ μ „μ†‘ν•œλ‹€. λ©”μ‹œμ§€ 큐의 기본적인 λ™μž‘ 방식은 λ‹€μŒκ³Ό κ°™λ‹€.

  1. μƒμ‚°μž λ˜λŠ” λ°œν–‰μž(producer/publisher)라고 λΆˆλ¦¬λŠ” μž…λ ₯ μ„œλΉ„μŠ€κ°€ λ©”μ‹œμ§€λ₯Ό 큐에 λ°œν–‰(publish)

  2. μ†ŒλΉ„μ‚¬ λ˜λŠ” κ΅¬λ…μž(consumer/subscriber)라고 λΆˆλ¦¬λŠ” μ„œλ²„κ°€ λ©”μ‹œμ§€λ₯Ό λ°›μ•„ 그에 λ§žλŠ” λ™μž‘ μˆ˜ν–‰

λ©”μ‹œμ§€ 큐λ₯Ό μ΄μš©ν•˜λ©΄ μ„œλΉ„μŠ€ κ°„ / μ„œλ²„ κ°„ 결합을 λŠμŠ¨ν•˜κ²Œ ν•˜μ—¬ μ„œλΉ„μŠ€ κ°„ μ˜μ‘΄μ„±μ„ 쀄일 수 μžˆλ‹€. 결과적으둜 규λͺ¨ ν™•μž₯성을 높이고 μ„œλΉ„μŠ€μ˜ κ°€μš©μ„±μ„ 높일 수 μžˆλŠ” μ•„ν‚€ν…μ²˜λ₯Ό κ΅¬μ„±ν•˜κΈ° 쒋아진닀.

둜그 / λ©”νŠΈλ¦­ / μžλ™ν™”

μ‹œμŠ€ν…œμ˜ 규λͺ¨κ°€ 컀질수둝 둜그 / λ©”νŠΈλ¦­ / μžλ™ν™”μ˜ μ€‘μš”μ„±μ€ λ”μš± 컀진닀.

  • 둜그: μ‹œμŠ€ν…œμ˜ μƒνƒœλ₯Ό 좔적 및 문제 해결에 ν™œμš©(단일 μ„œλΉ„μŠ€λ‘œ λͺ¨μ•„μ£ΌλŠ” 도ꡬ ν™œμš©)

  • λ©”νŠΈλ¦­: μ‹œμŠ€ν…œμ˜ ν˜„μž¬ 상황 νŒŒμ•… 및 사업 μ „λž΅ μˆ˜λ¦½μ— ν™œμš©

  • μžλ™ν™”: μ‹œμŠ€ν…œμ˜ 배포 / 관리 / λͺ¨λ‹ˆν„°λ§μ„ μžλ™ν™”ν•˜μ—¬ 생산성과 μ•ˆμ •μ„± ν–₯상

섀계 μ‹œ 고렀사항

  • ꡬ체적인 κΈ°λŠ₯ λͺ©λ‘κ³Ό 핡심 κΈ°λŠ₯

  • μ‚¬μš©μž 수

  • 규λͺ¨κ°€ 컀질 경우λ₯Ό λŒ€λΉ„ν•œ ν™•μž₯μ„±(μ–Όλ§ˆλ‚˜ 빨리 μ»€μ§€λŠ”μ§€)

  • (ν˜„μž¬ 상황에)μ‚¬μš© κ°€λŠ₯ν•œ 기술 μŠ€νƒ

  • ν™œμš©ν•  수 μžˆλŠ” κΈ°μ‘΄ μ„œλΉ„μŠ€ 및 μ‹œμŠ€ν…œ

참고자료

Last updated