virtual-machines

2 개의 포스트

가상 머신 퍼즐 해결: (새 탭에서 열림)

구글 리서치와 딥마인드가 개발한 LAVA는 클라우드 데이터 센터의 자원 효율성을 극대화하기 위해 가상 머신(VM)의 수명을 실시간으로 예측하고 적응하는 새로운 스케줄링 알고리즘입니다. 기존의 단발성 예측 방식에서 벗어나 VM이 실행되는 동안 지속적으로 남은 수명을 재예측하는 방식을 채택하여 자원 파편화와 낭비를 획기적으로 줄였습니다. 이 시스템은 실제 구글의 대규모 클러스터 관리 시스템인 Borg에 적용되어 빈 호스트 확보 및 자원 활용도 측면에서 유의미한 성능 향상을 입증했습니다. ## 수명 예측의 불확실성과 연속 재예측 기술 * 클라우드 VM의 수명은 매우 불확실하며, 대다수의 단기 VM(88%)이 아주 적은 자원(2%)만 사용하는 반면 극소수의 장기 VM이 대부분의 자원을 점유하는 롱테일(Long-tail) 분포를 보입니다. * LAVA는 생존 분석(Survival Analysis)에서 영감을 얻은 머신러닝 모델을 사용하여 VM 수명을 단일 값이 아닌 확률 분포로 예측함으로써 내재된 불확실성을 관리합니다. * "연속 재예측(Continuous Reprediction)" 기능을 통해 VM이 실행되는 동안 축적된 정보를 바탕으로 남은 수명을 실시간으로 업데이트하며, 이를 통해 초기 예측 오류를 스스로 수정하고 정확도를 높입니다. ## NILAS: 기존 시스템에 통합되는 비침습적 스케줄링 * NILAS(Non-Invasive Lifetime Aware Scheduling)는 기존 구글의 Borg 스케줄러 점수 함수에 수명 예측 데이터를 통합한 알고리즘입니다. * 새로운 VM을 배치할 때 해당 호스트에 이미 있는 VM들의 예상 종료 시간을 고려하여, 비슷한 시기에 종료될 VM들을 한곳에 모읍니다. * 이 방식은 특정 시점에 호스트 내의 모든 VM이 동시에 종료되도록 유도하여, 대규모 작업이나 유지보수에 필수적인 '빈 호스트'를 더 많이 확보하는 데 기여합니다. ## LAVA와 LARS를 통한 자원 배치 및 재배치 최적화 * **LAVA (Lifetime-Aware VM Allocation):** 장기 VM이 점유 중인 호스트의 남은 유휴 공간에 아주 짧은 수명의 VM들을 배치하는 전략입니다. 이는 자원 파편화(Resource Stranding)를 방지하며, 단기 VM이 빠르게 종료되므로 호스트의 전체 수명에 영향을 주지 않고 효율을 높입니다. * **LARS (Lifetime-Aware Rescheduling):** 데이터 센터 유지보수나 파편화 제거가 필요할 때, 예측된 수명이 긴 VM부터 우선적으로 다른 호스트로 이주시킵니다. 수명이 짧은 VM은 이주시키지 않고 자연스럽게 종료되도록 기다림으로써 불필요한 시스템 중단과 이동 비용을 최소화합니다. LAVA의 도입은 예측 불가능한 사용자 워크로드를 다루는 클라우드 인프라에서 단순한 정적 규칙보다 실시간 데이터 기반의 적응형 알고리즘이 훨씬 효과적임을 시사합니다. 이러한 접근법은 대규모 데이터 센터 운영에서 경제적 효율성을 높일 뿐만 아니라, 서버 가동률 최적화를 통해 에너지 소비를 줄이는 환경적 지속 가능성 측면에서도 중요한 솔루션이 될 수 있습니다.

Scaling support with Vagrant and Terraform (새 탭에서 열림)

Datadog의 솔루션 팀은 고객이 사용하는 다양한 기술 스택과 복잡한 인프라 환경에서 발생하는 문제를 정확히 재현하기 위해 Vagrant와 Terraform을 활용한 자동화된 샌드박스 시스템을 구축했습니다. 인프라 구축 과정을 코드화하여 팀 전체가 공유함으로써, 개별 엔지니어가 생소한 기술을 매번 처음부터 학습하고 설치해야 하는 비효율을 제거하고 문제 해결 속도를 획기적으로 높였습니다. 결과적으로 로컬 가상 머신과 클라우드 인스턴스를 자유롭게 오가는 유연한 디버깅 환경을 통해 팀 간 협업과 고객 지원의 품질을 극대화할 수 있었습니다. **Vagrant 프로비저닝을 통한 환경 구축 자동화** * 고객의 특정 OS, 커널 버전, 복잡한 통합 도구(Kafka, MS SQL, RabbitMQ 등)를 수동으로 설치하는 것은 시간이 많이 걸리고 오류가 발생하기 쉽습니다. * Vagrant의 '프로비저닝(Provisioning)' 기능을 활용하여, 인프라 설치 및 설정에 필요한 모든 명령어를 `setup.sh`와 같은 쉘 스크립트에 담아 자동화했습니다. * 한 번 작성된 프로비저닝 스크립트는 팀 공용 GitHub 저장소에 저장되어, 다른 팀원들이 동일한 이슈를 처리할 때 `vagrant up` 명령어 하나만으로 즉시 동일한 환경을 갖출 수 있게 합니다. **샌드박스 저장소의 구조화 및 유연성 확보** * 저장소는 운영체제와 배포판, 서비스 이름에 따라 계층적으로 디렉토리를 나누어 관리하며, 각 디렉토리에는 `Vagrantfile`, `setup.sh`, 그리고 설정 파일 등이 담긴 `/data` 폴더를 포함합니다. * 엔지니어 개인별로 달라야 하는 설정(호스트 이름, API 키, 태그 등)은 `.sandbox.conf.sh`라는 로컬 설정 파일에 분리하여 관리함으로써 스크립트의 범용성을 유지합니다. * 이를 통해 새로운 환경이 필요할 때 기존 템플릿을 복사하여 빠르게 변형할 수 있으며, 팀 내 기술적 노하우가 코드를 통해 자연스럽게 축적됩니다. **Terraform을 이용한 클라우드 확장 및 협업** * 로컬 가상 머신 사용 시 발생하는 RAM 자원 부족 문제를 해결하고 팀원 간 환경을 쉽게 공유하기 위해 Terraform을 도입하여 AWS EC2 인스턴스를 활용합니다. * Vagrant에서 사용하던 `setup.sh`와 `/data` 파일을 그대로 재사용하면서, 인스턴스 생성을 위한 `.tf` 파일만 추가하여 로컬과 클라우드 환경 간의 일관성을 유지합니다. * 클라우드 기반 샌드박스를 활용하면 여러 시간대의 팀원들이 동일한 원격 환경에 접속해 조사를 이어갈 수 있으며, 고객과의 실시간 상담 중에도 미리 준비된 환경을 즉시 배포하여 대응할 수 있습니다. **실용적인 결론** 반복적인 환경 구축이 필요한 기술 지원이나 개발 팀이라면 인프라를 코드로 관리(IaC)하는 것이 필수적입니다. Vagrant로 로컬에서 가볍게 시작하되, 동일한 프로비저닝 스크립트를 Terraform과 공유할 수 있도록 설계하면 로컬의 편의성과 클라우드의 협업 능력을 동시에 잡을 수 있습니다. 특히 `setup.sh`와 같은 범용 스크립트를 중심에 두면 도구가 바뀌어도 재사용성을 높일 수 있습니다.