로드 밸런싱이란 뭐 일것 같은지 한번 잠깐 생각 해보자.
로드 (= 부하) 를 밸런싱(= 균형있게 분산) 하는것.
난 먹는거 좋아하니까, 어떤 음식점이 있다고 치자.
음식점이 커지고, 손님이 많아지면 당연히 기존 직원으로는 정상적인 운영을 하기가 힘들다.
이런 손님증가 (=트래픽 증가) 에 대처할 수 있는 방법은 크게 2가지가 있는데...
1. 기존 직원들이 일을 더 빠르고, 숙련되고, 효율적으로 하기 (=서버 성능개선, scale up 이라고 함)
2. 직원을 더 뽑기 (=서버 증설, scale out 이라고 함)
"1.기존직원이 더 잘 하기" 는 그냥 기존 직원들을 스파르타로 교육하면 된다.ㅋㅋㅋ
(쉬는날 돈들여 교육을 시킨다던지, 영업마감 후 사장이 직접 빡시게 굴리던지.. etc)
문제는 사장님이 2번을 선택했을 때 발생한다.
"2.직원 추가모집" 을 했다고 치자.
무조건 뽑아만 놓으면 바쁜 식당의 문제가 해결되나? -> 절대 아니다.
무조건 서버를 증설해서 전원 만 꼽아놓으면 트래픽이 해결되나? -> 절절절절절대 아니다ㅠㅠㅠㅠ
식당의 기존직원에 신규인원이 합류되면서 업무분장이 제대로 안 되면
중구난방으로 일을 하게 되어 나중엔 기존 직원들까지
엉뚱한 업무를 하게 되는 피해를 받을 수도 있다.
직원의 상태,숙련도,또는 어떤 규칙에 따라 일을 효율적으로 던져주는 '로드밸런싱'이 반드시 필요하다.
예를 들면?
어제 갓 채용한 김정수 웨이터 에겐 '물 리필' 같은 단순한 업무를 주는 게 좋다.
이 가게의 핵심 멤버인 박셰프 에겐 10년 단골인 입맛 까다로운 손님이 주문한
'메뉴판에없는 회오리오므라이스' 를 만드는 일을 맡기는 게 좋다.
박셰프는 물 리필할 줄 아는데, 김정수는 오므라이스를 못 만든다.
따라서 김정수-물리필 , 박셰프-오므라이스 만들기 에 배치하는 것이
누가 봐도 가게 운영 면에서 효율적이다.
근데 누가 이러한 '업무분장' 을 직원들에게 해 줄 것인가?
가게 규모가 적당하면 사장이 눈치껏 샥샥 일을 주면 되겠지만,
가게가 겁나 잘되서 직원이 50명이 되었다면??
그것도 모자라 100층짜리 식당이 되어 손님들이 누르는 주문 벨이
1초에 한번씩 울린다면??????
사장 혼자 모든 웨이터에게 일을 분배해 주기는 사실상 불가능에 가깝다.
그래서 이 100층짜리 가게 지하엔 로드밸런싱 팀 이 존재한다.
모든 웨이터의 현재 일 상태가 상황판에 중계되고, 로드밸런싱 팀 은 이를 모니터링 한다.
100층 식당 어딘가에서 손님이 주문 벨을 누르면, 이 로드밸런싱 팀 에 가장 먼저 보고되고,
( [29층 테이블143 에 앉은 손님이 음식을 주문하려함] 따위로 보고가 되겠지.)
이 팀은 그 주문받는 행위를 어떤 웨이터에게 줄지 0.1초 만에 빠르게 파악 한 다음
해당 직원에게 무전을 쳐 준다.
이 로드밸런싱 팀은 어떻게 이렇게 재빠르고, 정확하게
해당업무에 적당한 웨이터를 찾아내는 것일까???
지금부터 설명하도록 하겠다.
📘로드밸런싱 하는 방식에 따른 알고리즘
1.라운드로빈 방식
- 요청이 들어오면 그냥 순서대로 돌아가면서 배정한다. 웨이터가 김,이,박 3명이라고 치면
- 요청1 - 김
- 요청2 - 이
- 요청3 - 박
- 요청4 - 김
- 요청5 - 이
- 요청6 - 박
매우 단순한 방식 중 하나다.
2. 가중 라운드로빈 방식
- 직원마다 가중치를 매기고 그것에 따라 우선적으로 배정한다.
- 직원 간에 능력차이가 클 경우 적합하다
3. IP해시 방식
- 특정 손님은 특정 직원이 맡도록 매핑된다. 직원입장에서 특정손님을 전담하니 척하면 척이다.
- 단골손님 비중이 많은 가게에 적합하다
4. 최소연결방식 (Least Connection)
- 가장 한가한 직원에게 우선적으로 일던짐
- 세션이 자주 길어지는경우 권장(하나의 주문을 받을때 오래걸리는 서브웨이 같은경우 권장)
5. 최소응답시간방식(Least Response Time method)
- 4번의 직원 한가함 여부 + 손님이 불렀을때 가장 빨리 다가올수 있나의 여부를 동시에 고려
- 개 한가해도 5층짜리 음식점에서 1층손님이 불렀는데 5층에 있는사람을 부르는것 보단 할일이 대충 끝나가는 2층직원 이 가는게 효율적 이니까..
이 밖에 로드밸런싱이 이뤄지는 단계에 따라 분류 하기도 한다.
L2, L3, L4, L7 등으로 나눔
- 손님이 문밖에 도착했을 때 로드밸런싱을 할꺼냐 (주문관련/웨이팅관련/일행찾으려함 등)
- 손님이 테이블에 앉아서 벨을 눌렀을 때 로드밸런싱을 할꺼냐(음식주문/화장실위치묻기/기타 등)
안정적으로 무언가를 운영 한다는 것은 매우 중요하다.
왜냐면 그게 IT서비스의 꽃이자 핵심 중 하나이기 때문.
실제로 규모가 큰 서비스 들에는 로드밸런서 개발만 전담하는 팀이 따로 있을정도.
아니면 이런 로드밸런서 알고리즘을 개발해서 돈받고 파는 회사도 존재한다.
실제로 로드 밸런서의 가격이나 성능이 천차 만별 이기도 하고.
어쨌든,
🔥100층짜리 음식점에는....
지하어딘가에서 모든 직원들의 현재 일 진행 상태를 모니터링 하면서
손님이 벨을 누르면 어떤 웨이터를 보낼지 배치해주는 전담 로드밸런서가 있다.
🔥모든 규모있는 IT 서비스에는.....
사용자들의 트래픽을 적절히 서버에 분산시켜 주는 로드밸런서가 있다.
댓글