• 로그인
  • 장바구니에 상품이 없습니다.

The power of 2 random choices (로드밸런싱)


AWS S3라는 하드 대여 서비스가 있습니다.

고객이 자료 저장을 요청하면 하드 하나에 저장해주는 간단한 서비스일 뿐입니다.

그래서 AWS S3에는 하드 100만개가 있는데

하드 100만개에 유저의 데이터를 고르게 분산하고 싶으면 어떻게 할까요?



가장 쉬운 방법은 요청이 들어올 때마다 랜덤하게 하드 1개를 골라서 저장하는 것입니다.

AWS 정도의 스케일이면 1초에 1억건의 요청이 들어오기 때문에

그냥 랜덤으로 하드를 골라도 알아서 고르게 들어가긴 합니다.



실제로 AWS에서 하드를 랜덤으로 골랐을 때 하드마다 사용률같은걸 기록해봤다고 하는데 

그럼 이쁜 벨 모양이 그려지게 됩니다. (단위는 아마 %, 평균사용률과의 차이 측정)

하지만 벨 모양은 만족스럽진 않은 게

어떤 하드디스크는 운이 나쁘면 데이터가 많이 몰려서 지연이 발생할 수 있습니다.

이런게 결국 유지비용 증가로 이어지게 됩니다.

그래서 모든 하드디스크의 사용률을 서로 매우 비슷하게 맞춰주는게 중요합니다.


밸런싱을 고르게하고 싶으면 관련 알고리즘은 여러가지가 있습니다.

Round Robin, Least Connections, Rendezvous Hashing 이런 로드밸런싱 알고리즘이 있는데

하지만 AWS S3에선 가장 간단한 알고리즘을 씁니다.




데이터를 저장할 때 랜덤하게 하나를 고르는게 아니라 2개를 고르는 겁니다.

그 다음에 2개의 사용률을 뽑아본 다음 사용률이 적은 하드에 저장하는 것임





이러면 놀랍게도 하드들의 사용률이 이렇게 찍히게 됩니다.

전부 평균 사용률에서 크게 벗어나지 않습니다.

이런 알고리즘을 멋진 말로 The power of 2 choices 라고 부르기도 합니다.







그냥 Random

Power of 2 Choices


▲ 직접 버튼눌러서 실험해봅시다.

400개의 아이템을 가로 20개 칸에 하나씩 랜덤하게 넣는 시뮬레이션인데 각각 다른 알고리즘을 써봤습니다.

그래서 오늘의 결론은 랜덤보다 좋은건 랜덤 2개기 때문에

분포를 고르게 만들고 싶을 때 매우 쉽게 써볼 수 있습니다.







코딩할 때 말고 현실에서도 쓸 수가 있는데

예를 들어 옷장에 빤쓰가 100개 있는데 

빤쓰 100개를 아주 고르게 입고 싶어서 빤쓰 로드밸런싱을 하고 싶으면 어떻게 하죠?

빤쓰끼리 정렬하고 순서정하고 요일 정하고 그럴 필요없이

그냥 랜덤으로 2개 뽑아서 냄새가 덜 나는거 입으면 되겠습니다.






2026년 6월 29일

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관, 개인정보처리방침
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호: 212-26-14752 온라인 교육학원업 / 통신판매업신고: 제 2017-서울강동-0002 호 / 개인정보관리자: 박종흠 / 대표자명: 박해윤