AidenAI
오픈채팅
← 읽을거리 목록

어떤 일을 어디에 맡겨야 할까? Meta가 공개한 배치 최적화 도구 Rebalancer

목차

Meta Rebalancer 공식 이미지

이미지 출처: Meta Engineering

서버에 작업이 몰리면 다른 서버로 나누면 됩니다. 하지만 작업마다 필요한 자원이 다르고, 서버마다 용량도 다르다면 이야기가 복잡해집니다. 장애에 대비해 작업을 분산해야 한다는 조건까지 붙으면, 단순히 개수를 맞추는 것으로는 충분하지 않습니다.

Meta는 이런 배치 문제를 해결하기 위해 9년 이상 사용해 온 Rebalancer를 오픈소스로 공개했습니다. 주어진 조건을 고려해 “무엇을 어디에 배치할지”를 계산하는 라이브러리입니다. 공식 발표

01. 작업 네 개를 서버 두 대에 나눈다면?

공식 GitHub의 예제부터 살펴보겠습니다.

작업은 네 개이고, 각 작업은 메모리를 10씩 사용합니다. 서버는 두 대이며, 각각 메모리를 20까지 수용할 수 있습니다. 그런데 처음에는 한 서버에 작업 세 개가 몰려 있습니다.

구분 처음 배치 개선된 배치
서버 A 작업 3개 → 메모리 30 사용 작업 2개 → 메모리 20 사용
서버 B 작업 1개 → 메모리 10 사용 작업 2개 → 메모리 20 사용

Rebalancer는 작업 하나를 옮겨 두 서버가 모두 용량 제한을 지키는 배치를 찾습니다.

이 예제에서는 작업의 메모리 사용량이 같아 두 개씩 나누면 됩니다. 실제 문제에서는 작업 개수뿐 아니라 작업마다 필요한 자원과 배치 조건을 함께 고려해야 합니다. 공식 예제

02. ‘지켜야 할 조건’과 ‘좋아졌으면 하는 목표’를 구분하기

Rebalancer에 문제를 전달하려면 다음 요소를 정의합니다.

구성 요소 의미 서버 배치에서의 예
대상 배치할 것 실행할 작업
배치할 곳 대상을 넣을 공간 서버
제약 조건 충족해야 하는 요구사항 서버의 메모리 용량
최적화 목표 더 좋게 만들고 싶은 기준 서버 간 부하 균형

여기서 용량을 넘지 않는 것과 부하를 고르게 나누는 것은 서로 다른 요구입니다. 전자는 배치가 허용되는지를 결정하고, 후자는 가능한 배치 가운데 어느 쪽이 더 좋은지를 판단하는 기준입니다.

Rebalancer는 용량 제한이나 부하 균형처럼 자주 쓰는 규칙을 미리 준비해 둡니다. 개발자는 이를 조합해 문제를 정의할 수 있습니다. 또한 문제 정의와 해결 알고리즘이 분리되어 있어, 같은 문제에 서로 다른 해결 방식을 적용할 수 있습니다. 공식 문서

03. 규모에 따라 해결 방법도 달라진다

Rebalancer는 대표적으로 두 가지 방식을 제공합니다.

첫 번째는 현재 배치를 조금씩 개선하는 ‘지역 탐색’입니다.

작업 하나를 다른 서버로 옮기거나 두 작업을 맞바꿔 보고, 더 나은 배치가 되면 반영합니다. 이런 개선을 반복하는 방식으로, 큰 문제를 다루는 데 적합합니다.

다만 전체 경우의 수 가운데 가장 좋은 답을 찾았다고 보장하지는 않습니다. 작은 변경만으로는 더 나아지기 어려운 지점에서 멈출 수 있습니다.

두 번째는 수학적 최적화 도구를 사용하는 방식입니다.

문제를 혼합정수계획법(MIP) 형태로 변환해 HiGHS·Gurobi·FICO Xpress 같은 도구에 전달합니다. 충분한 시간과 자원이 있다면 최적해를 찾을 수 있지만, 문제가 크고 복잡할수록 계산 부담도 커집니다. 시간 제한을 두면 그 안에 찾은 최선의 결과를 반환할 수 있습니다.

따라서 답의 품질, 계산 시간, 문제 규모를 함께 고려해 방식을 선택해야 합니다. 해결 방식 안내

04. Meta에서는 얼마나 크게 사용하고 있을까?

Meta가 발표한 운영 수치는 다음과 같습니다.

항목 발표된 규모
하루에 해결하는 배치 문제 약 4,000만 건
서로 다른 문제 정의 30종 이상
대상 26만 5,000개·배치 공간 3,200개인 문제 P99 해결 시간 12초
대상 100만 개 초과·배치 공간 5,000개인 문제 평균 해결 시간 171초

P99 12초는 측정한 실행의 약 99%가 12초 이내에 끝났다는 뜻입니다. 이 수치는 Meta의 해당 운영 사례에서 나온 결과이며, 모든 환경에서 같은 속도를 보장하는 것은 아닙니다.

활용처에는 데이터 조각의 서버 배치, 서비스별 서버 할당, 트래픽 분산, 머신러닝 학습 작업의 지역별 배치 등이 포함됩니다. 회의실 배정과 지원 티켓의 담당 엔지니어 배정에도 사용했다고 합니다. Meta 운영 사례

05. 결과가 예상과 다를 때 살펴보는 도구도 제공한다

배치를 계산했더라도, 왜 그런 결과가 나왔는지 이해해야 실제 업무에 적용할 수 있습니다.

함께 공개된 Rebalancer Explorer는 계산 결과를 살펴보고 문제를 점검하는 웹 도구입니다. 대상과 배치 공간, 제약 조건, 목표를 확인하고, 결과가 각 기준을 얼마나 충족하는지 살펴볼 수 있습니다. Explorer 안내

공식 문서에서 소개하는 기능에는 다음도 포함됩니다.

  • 처음 배치와 최종 배치를 나란히 비교하기
  • 특정 대상을 다른 곳으로 옮겼을 때의 영향 확인하기
  • 이동으로 인해 조건이 깨지거나 목표가 개선되는지 살펴보기

이렇게 결과를 확인하면서 입력한 규칙이 실제 의도와 맞는지 점검할 수 있습니다. 공식 문서

06. 직접 살펴보고 싶다면

Rebalancer는 C++과 Python 인터페이스를 제공하며, Apache 2.0 라이선스로 공개되어 있습니다. 관심이 있다면 공식 저장소의 작은 작업 배치 예제부터 살펴볼 수 있습니다. GitHub 저장소

서버 운영이나 업무 배정처럼 여러 조건을 동시에 고려해야 하는 일을 다룬다면, **“우리 문제도 대상·배치할 곳·제약·목표로 표현할 수 있을까?”**라는 질문에서 출발해 볼 만합니다.

다른 읽을거리