πŸ‹οΈ Load Balancing πŸ‹οΈ

On a regular basisΒ·2021λ…„ 9μ›” 9일
0
post-thumbnail

πŸ‹οΈ Load Balancing πŸ‹οΈ

πŸ₯• Load Balancingμ΄λž€?

  • ν•˜λ‚˜μ˜ 인터넷 μ„œλΉ„μŠ€κ°€ λ°œμƒν•˜λŠ” νŠΈλž˜ν”½μ΄ λ§Žμ„ λ•Œ μ—¬λŸ¬ λŒ€μ˜ μ„œλ²„κ°€ λΆ„μ‚°μ²˜λ¦¬ν•˜μ—¬ μ„œλ²„μ˜ λ‘œλ“œμœ¨ 증가, λΆ€ν•˜λŸ‰, μ†λ„μ €ν•˜ 등을 κ³ λ €ν•˜μ—¬ 적절히 λΆ„μ‚°μ²˜λ¦¬ν•˜μ—¬ ν•΄κ²°ν•΄μ£ΌλŠ” μ„œλΉ„μŠ€!

  • ν•˜λ“œμ›¨μ–΄ ν–₯μƒν•˜λŠ” λΉ„μš©λ³΄λ‹€ μ„œλ²„ ν•œλŒ€ μΆ”κ°€ λΉ„μš©μ΄ 더 적음! μ—¬λŸ¬ λŒ€μ˜ Server 덕뢄에 무쀑단 μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•  수 있음. μ—¬λŸ¬ λŒ€μ˜ Serverμ—κ²Œ κ· λ“±ν•˜κ²Œ Traffic을 λΆ„μ‚°μ‹œμΌœμ£ΌλŠ” 역할을 ν•˜λŠ” 것이 Load Balancer.

πŸ₯• Clientκ°€ ν•œ 두λͺ…인 κ²½μš°μ—λŠ”?
-> ServerλŠ” μ—¬μœ λ‘­κ²Œ μ‚¬μš©μžκ°€ μ›ν•˜λŠ” κ²°κ³Όλ₯Ό 응닡 해쀄 수 μžˆλ‹€!

πŸ₯• ν•˜μ§€λ§Œ Clientκ°€ ν•œ 두λͺ…이 μ•„λ‹Œ 수천만λͺ…이라면???
-> ServerλŠ” λͺ¨λ“  μ‚¬λžŒλ“€μ˜ 응닡을 ν•΄μ£Όλ €κ³  λ…Έλ ₯ν•˜μ§€λ§Œ κ²°κ΅­μ—” μ§€μ³μ„œ λ™μž‘μ„ λ©ˆμΆ”κ² μ°Œ..γ… γ… 

πŸ₯• 그럼 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ–΄λ–»κ²Œ ν•΄μ•Όν• κΉŒ?

  • Scale-up : Serverκ°€ 더 λΉ λ₯΄κ²Œ λ™μž‘ν•˜κΈ° μœ„ν•΄ ν•˜λ“œμ›¨μ–΄ μ„±λŠ₯을 μ˜¬λ¦¬λŠ” 방법.
  • Scale-out : ν•˜λ‚˜μ˜ Server λ³΄λ‹€λŠ” μ—¬λŸ¬ λŒ€μ˜ Serverκ°€ λ‚˜λˆ μ„œ 일을 ν•˜λŠ” 방법.

πŸ₯• 그럼 Scale-out의 μž₯점이 뭘까?

  • ν•˜λ“œμ›¨μ–΄ ν–₯μƒν•˜λŠ” λΉ„μš©λ³΄λ‹€ μ„œλ²„ ν•œλŒ€ μΆ”κ°€ λΉ„μš©μ΄ 더 적음!
  • μ—¬λŸ¬ λŒ€μ˜ Server 덕뢄에 무쀑단 μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•  수 있음!

πŸ₯• ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ„ νŠΉμ • μ„œλ²„μ— λΆ„λ°°ν•˜λŠ” λ‘œλ“œλ°ΈλŸ°μ‹± 기법은 μ—¬λŸ¬ 가지가 μžˆλ‹€! ν™œμš©ν•  수 μžˆλŠ” λΆ€ν•˜ λΆ„μ‚° 방식(λ‘œλ“œλ°ΈλŸ°μ‹± μ•Œκ³ λ¦¬μ¦˜)에 μ–΄λ– ν•œ 것듀이 μžˆλŠ”μ§€ μ•Œμ•„λ³΄μž!

β€’ λΌμš΄λ“œλ‘œλΉˆ 방식(Round Robin Method)
μ„œλ²„μ— λ“€μ–΄μ˜¨ μš”μ²­μ„ μˆœμ„œλŒ€λ‘œ λŒμ•„κ°€λ©° λ°°μ •ν•˜λŠ” 방식. ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ„ μˆœμ„œλŒ€λ‘œ λΆ„λ°°ν•˜κΈ° λ•Œλ¬Έμ— μ—¬λŸ¬ λŒ€μ˜ μ„œλ²„κ°€ λ™μΌν•œ μŠ€νŽ™μ„ κ°–κ³  있고, μ„œλ²„μ™€μ˜ μ—°κ²°(μ„Έμ…˜)이 였래 μ§€μ†λ˜μ§€ μ•ŠλŠ” κ²½μš°μ— ν™œμš©ν•˜κΈ° 적합.

β€’ 가쀑 λΌμš΄λ“œλ‘œλΉˆ 방식(Weighted Round Robin Method)
각각의 μ„œλ²„λ§ˆλ‹€ κ°€μ€‘μΉ˜λ₯Ό 맀기고 κ°€μ€‘μΉ˜κ°€ 높은 μ„œλ²„μ— ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­μ„ μš°μ„ μ μœΌλ‘œ λ°°λΆ„. 주둜 μ„œλ²„μ˜ νŠΈλž˜ν”½ 처리 λŠ₯λ ₯이 μƒμ΄ν•œ 경우 μ‚¬μš©λ˜λŠ” λΆ€ν•˜ λΆ„μ‚° 방식. 예λ₯Ό λ“€μ–΄ AλΌλŠ” μ„œλ²„κ°€ 5λΌλŠ” κ°€μ€‘μΉ˜λ₯Ό κ°–κ³  BλΌλŠ” μ„œλ²„κ°€ 2λΌλŠ” κ°€μ€‘μΉ˜λ₯Ό κ°–λŠ”λ‹€λ©΄, λ‘œλ“œλ°ΈλŸ°μ„œλŠ” λΌμš΄λ“œλ‘œλΉˆ λ°©μ‹μœΌλ‘œ A μ„œλ²„μ— 5개 B μ„œλ²„μ— 2개의 μš”μ²­μ„ 전달.

β€’ IP ν•΄μ‹œ 방식(IP Hash Method)
ν΄λΌμ΄μ–ΈνŠΈμ˜ IP μ£Όμ†Œλ₯Ό νŠΉμ • μ„œλ²„λ‘œ λ§€ν•‘ν•˜μ—¬ μš”μ²­μ„ μ²˜λ¦¬ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€. μ‚¬μš©μžμ˜ IPλ₯Ό ν•΄μ‹±ν•΄(Hashing, μž„μ˜μ˜ 길이λ₯Ό μ§€λ‹Œ 데이터λ₯Ό κ³ μ •λœ 길이의 λ°μ΄ν„°λ‘œ λ§€ν•‘ν•˜λŠ” 것, λ˜λŠ” κ·ΈλŸ¬ν•œ ν•¨μˆ˜) λ‘œλ“œλ₯Ό λΆ„λ°°ν•˜κΈ° λ•Œλ¬Έμ— μ‚¬μš©μžκ°€ 항상 λ™μΌν•œ μ„œλ²„λ‘œ μ—°κ²°λ˜λŠ” 것을 보μž₯.

β€’ μ΅œμ†Œ μ—°κ²° 방식(Least Connection Method)
μš”μ²­μ΄ λ“€μ–΄μ˜¨ μ‹œμ μ— κ°€μž₯ 적은 μ—°κ²°μƒνƒœλ₯Ό λ³΄μ΄λŠ” μ„œλ²„μ— μš°μ„ μ μœΌλ‘œ νŠΈλž˜ν”½μ„ λ°°λΆ„. 자주 μ„Έμ…˜μ΄ κΈΈμ–΄μ§€κ±°λ‚˜, μ„œλ²„μ— λΆ„λ°°λœ νŠΈλž˜ν”½λ“€μ΄ μΌμ •ν•˜μ§€ μ•Šμ€ κ²½μš°μ— μ ν•©ν•œ 방식.

β€’ μ΅œμ†Œ λ¦¬μŠ€ν°νƒ€μž„(Least Response Time Method)
μ„œλ²„μ˜ ν˜„μž¬ μ—°κ²° μƒνƒœμ™€ μ‘λ‹΅μ‹œκ°„(Response Time, μ„œλ²„μ— μš”μ²­μ„ 보내고 졜초 응닡을 받을 λ•ŒκΉŒμ§€ μ†Œμš”λ˜λŠ” μ‹œκ°„)을 λͺ¨λ‘ κ³ λ €ν•˜μ—¬ νŠΈλž˜ν”½μ„ λ°°λΆ„. κ°€μž₯ 적은 μ—°κ²° μƒνƒœμ™€ κ°€μž₯ 짧은 μ‘λ‹΅μ‹œκ°„μ„ λ³΄μ΄λŠ” μ„œλ²„μ— μš°μ„ μ μœΌλ‘œ λ‘œλ“œλ₯Ό λ°°λΆ„ν•˜λŠ” 방식.

πŸ₯• λ„€νŠΈμ›Œν¬ 톡신 μ‹œμŠ€ν…œμ€ 크게 μΌκ³±κ°€μ§€μ˜ 계측(OSI 7 layers! λ‚΄κ°€ μ§€λ‚œ μ‹œκ°„ λΈ”λ‘œκΉ…ν•  λ•Œ κ³΅λΆ€ν•œ 게 λ‚˜μ™”λ„Ή...?πŸ˜‡)으둜 λ‚˜λ‰¨!! 각각의 계측(Layer)이 L1/L2/L3β€₯β€₯L7에 ν•΄λ‹Ή. μƒμœ„ κ³„μΈ΅μ—μ„œ μ‚¬μš©λ˜λŠ” μž₯λΉ„λŠ” ν•˜μœ„ κ³„μΈ΅μ˜ μž₯λΉ„κ°€ κ°–κ³  μžˆλŠ” κΈ°λŠ₯을 λͺ¨λ‘ 가지고 있으며, μƒμœ„ κ³„μΈ΅μœΌλ‘œ 갈수둝 λ”μš± μ •κ΅ν•œ λ‘œλ“œλ°ΈλŸ°μ‹±μ΄ κ°€λŠ₯.

  • λΆ€ν•˜ λΆ„μ‚°μ—λŠ” L4 λ‘œλ“œλ°ΈλŸ°μ„œμ™€ L7 λ‘œλ“œλ°ΈλŸ°μ„œκ°€ κ°€μž₯ 많이 ν™œμš©λ¨. κ·Έ μ΄μœ λŠ” L4 λ‘œλ“œλ°ΈλŸ°μ„œλΆ€ν„° 포트(Port)정보λ₯Ό λ°”νƒ•μœΌλ‘œ λ‘œλ“œλ₯Ό λΆ„μ‚°ν•˜λŠ” 것이 κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έ. ν•œ λŒ€μ˜ μ„œλ²„μ— 각기 λ‹€λ₯Έ 포트 번호λ₯Ό λΆ€μ—¬ν•˜μ—¬ λ‹€μˆ˜μ˜ μ„œλ²„ ν”„λ‘œκ·Έλž¨μ„ μš΄μ˜ν•˜λŠ” 경우라면 μ΅œμ†Œ L4 λ‘œλ“œλ°ΈλŸ°μ„œ 이상을 μ‚¬μš©ν•΄μ•Όλ§Œ 함!

  • L4: Transport Layer(IP와 Port) Levelμ—μ„œ Load Balancing.(TCP, UDP)

  • L7: Application Layer(μ‚¬μš©μžμ˜ Request) Levelμ—μ„œ Load Balancing.(HTTP, HTTPS, FTP)

  • L4 λ‘œλ“œλ°ΈλŸ°μ„œλŠ” λ„€νŠΈμ›Œν¬ 계측(IP, IPX)μ΄λ‚˜ 트랜슀포트 계측(TCP, UDP)의 정보λ₯Ό λ°”νƒ•μœΌλ‘œ λ‘œλ“œλ₯Ό 뢄산함. IPμ£Όμ†Œλ‚˜ 포트번호, MACμ£Όμ†Œ, 전솑 ν”„λ‘œν† μ½œμ— 따라 νŠΈλž˜ν”½μ„ λ‚˜λˆ„λŠ” 것이 κ°€λŠ₯.

  • 반면, L7 λ‘œλ“œλ°ΈλŸ°μ„œμ˜ 경우 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 계측(HTTP, FTP, SMTP)μ—μ„œ λ‘œλ“œλ₯Ό λΆ„μ‚°ν•˜κΈ° λ•Œλ¬Έμ— HTTP 헀더, μΏ ν‚€ λ“±κ³Ό 같은 μ‚¬μš©μžμ˜ μš”μ²­μ„ κΈ°μ€€μœΌλ‘œ νŠΉμ • μ„œλ²„μ— νŠΈλž˜ν”½μ„ λΆ„μ‚°ν•˜λŠ” 것이 κ°€λŠ₯함. μ‰½κ²Œ 말해 νŒ¨ν‚·μ˜ λ‚΄μš©μ„ ν™•μΈν•˜κ³  κ·Έ λ‚΄μš©μ— 따라 λ‘œλ“œλ₯Ό νŠΉμ • μ„œλ²„μ— λΆ„λ°°ν•˜λŠ” 것이 κ°€λŠ₯ν•œ 것. μœ„ κ·Έλ¦Όκ³Ό 같이 URL에 따라 λΆ€ν•˜λ₯Ό λΆ„μ‚°μ‹œν‚€κ±°λ‚˜, HTTP ν—€λ”μ˜ 쿠킀값에 따라 λΆ€ν•˜λ₯Ό λΆ„μ‚°ν•˜λŠ” λ“± ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ„ 보닀 μ„ΈλΆ„ν™”ν•΄ μ„œλ²„μ— 전달할 수 μžˆλ‹€! λ˜ν•œ, L7 λ‘œλ“œλ°ΈλŸ°μ„œμ˜ 경우 νŠΉμ •ν•œ νŒ¨ν„΄μ„ μ§€λ‹Œ λ°”μ΄λŸ¬μŠ€λ₯Ό 감지해 λ„€νŠΈμ›Œν¬λ₯Ό λ³΄ν˜Έν•  수 있으며, DoS/DDoS와 같은 비정상적인 νŠΈλž˜ν”½μ„ 필터링할 수 μžˆμ–΄ λ„€νŠΈμ›Œν¬ λ³΄μ•ˆ λΆ„μ•Όμ—μ„œλ„ ν™œμš©λ˜κ³  있음!

좜처1: https://m.post.naver.com/viewer/postView.nhn?volumeNo=27046347&memberNo=2521903
좜처2: https://nesoy.github.io/articles/2018-06/Load-Balancer

profile
개발 기둝

0개의 λŒ“κΈ€