
Azure Virtual Machine Scale Sets(가상 머신 확장 집합)은 동일한 구성의 VM을 자동으로 생성하고 관리할 수 있는 확장 가능한 솔루션이다.
IaaS로서 VMSS는 고가용성을 보장하며, 애플리케이션의 요구에 따라 가상 머신을 자동으로 확장할 수 있다.
VMSS의 주요 개념, 기능 및 실용적인 응용에 대한 이해를 위해 이 글을 작성하게 되었다.
VMSS는 Azure에서 동일한 구성의 가상 머신 그룹을 생성하고 관리하는 서비스이다. 이를 통해 자동으로 로드밸런싱 및 확장이 가능하고 애플리케이션의 부하에 따라 가상 머신의 수를 조정할 수 있다.
VMSS는 애플리케이션의 트래픽 변화에 따라 자동으로 가상 머신 인스턴스를 추가하거나 제거한다. 이것은 높은 가용성과 성능을 유지하면서 비용을 최적화 할 수 있게 해준다.
Azure Portal에서 VMSS 생성 시 오케스트레이션 모드를 선택할 수 있는데 오케스트레이션 모드에는 유연 모드와 균일 모드가 있다.
오케스트레이션
다양한 시스템과 서비스를 효율적이고 일관되게 관리할 수 있도록 하는 기능
균일 모드 (Uniform) : 모든 VM 인스턴스가 동일한 설정과 이미지를 공유한다. 이는 일관성을 유지하고 관리의 복잡성을 줄이는데 도움이 된다.
유연 모드 (Flexible) : 서로 다른 이미지나 크기를 가진 VM 인스턴스를 포함 할 수 있다. 이는 다양한 워크로드를 지원하고 유연성을 높이는데 유리하다.
이미지
이미지는 가상머신을 생성할 때 사용하는 템플릿으로, 운영체제(OS), 설정 애플리케이션 및 데이터가 포함된 파일을 의미한다.
이미지 파일은 VM의 초기 상태를 정의하며, VMSS에서 새로운 인스턴스를 생성할 때 이 이미지를 기반으로 VM이 만들어 진다.
(name:vmss-conor)

크기 조정 모드에는 용량 수동 업데이트 모드와 자동 크기 조정 모드가 있다.
수동 크기 조정 모드 : 설정한 고정 인스턴스 수가 유지된다.
자동 크기 조정 모드 : 모든 매트릭을 기준으로 일정에서 가상 머신 확장 집합의 용량을 확장할 수 있다.
크기 조정 모드는 VMSS를 생성 한 후에도 설정을 변경할 수 있기 때문에 기본인 수동 크기 조정 모드로 생성한다.

가상네트워크를 구성하고 부하분산을 위한 Azure Load Balancer를 생성하여 구성한다.

VMSS 생성 완료

(name:vmss-uniform)
Flexible 모드로 생성한 VMSS와 오케스트레이션 모드를 제외한 설정값들을 동일하게 설정한다

내가 두 Mode의 차이를 확인하기 위해 테스트를 진행한 것을 설명하겠다.
Flexible Mode : 새로운 인스턴스가 생성 될 때, 인스턴스의 이름과 순서가 랜덤으로 할당될 수 있다. 이것은 유연 모드의 특성상, 각 인스턴스가 독립적으로 관리되기 때문이다.
Uniform Mode : 새로운 인스턴스가 생성 될 때, 일반적으로 스케일셋 이름에 숫자가 추가된 형태로 순서대로 생성된다.
Flexible Mode : SKU가 Standard_D2as_v4로 설정 후에 Standard_DS1_v2로 VMSS SKU 크기를 변경했을 때 새로 추가되는 VM에만 Standard_DS1_v2 크기가 적용된다.
Uniform Mode : Flexible Mode와 동일하다.
균일 모드에서는 스케일 셋 전체의 SKU를 변경하여 새로 추가되는 모든 VM 인스턴스에 적용할 수 있다는 의미!
따라서 모든 VM의 크기를 동일하게 하려면 기존 VM을 제거 후 재생성 해야한다.
균일모드 사용 사례
동일한 작업을 수행하는 대규모의 동일한 VM 인스턴스가 필요한 경우에 사용해야하는데 기존에 생성한 VMSS 크기와 변경해야할 때 사용
유연 모드에서는 각각의 VM의 크기를 직접 변경할 수 있다.


구성의 일관성
균일모드 : 모든 인스턴스가 동일한 구성으로 일관성을 유지
유연모드 : 인스턴스 별로 다양한 구성을 허용하여 유연성을 제공
리소스 관리
균일 모드 : 리소스 관리가 단순하며, 일괄적으로 모든 인스턴스 관리 가능
유연 모드 : 복잡한 리소스 요구사항을 개별적으로 관리
적용 범위
균일모드 : 동일한 작업을 수행하는 대규모 배포에 적합
유연모드 : 다양한 작업과 역할을 수행하는 환경에 적합
여기서, 나는 "실제로 다양한 역할과 요구사항을 가진 인스턴스를 제공해서 유연성을 가지는 경우"가 어떤 것이 있을까 라는 의문이 들었다!
게임 서버
온라인 게임 서버는 다양한 역할을 수행하는 여러 인스턴스를 필요로 함,1. 매치메이킹 서버: 플레이어들을 매치메이킹하는 서버. 빠른 응답이 중요하여 높은 네트워크 I/O 성능이 필요.
2. 게임 서버 인스턴스: 실제 게임 플레이를 호스팅하는 서버. 높은 CPU와 메모리 요구사항이 있음.
3. 리더보드 및 통계 서버: 플레이어의 점수와 통계를 관리하는 서버. 데이터베이스 성능이 중요.
다중 계층 웹 애플리케이션
다중 계층 웹 애플리케이션은 보통 프론트엔드, 백엔드, 데이터베이스 등 여러 계층으로 구성된다. 각 계층은 다른 요구사항과 리소스 설정을 필요로 한다.
1. 프론트엔드 서버: 웹 트래픽을 처리하며, 주로 HTTP 요청을 수신하고 사용자 인터페이스를 제공. CPU 및 메모리 요구사항이 중간 정도.
2. 백엔드 서버: 비즈니스 로직을 처리하며, 더 높은 CPU 및 메모리 요구사항이 있을 수 있음. 때로는 특정 작업을 위한 GPU가 필요할 수도 있음.
3. 데이터베이스 서버: 데이터 저장 및 쿼리 처리. 메모리와 디스크 I/O 성능이 중요한 요소.
데이터 처리 파이프라인
데이터 처리 파이프라인은 데이터의 수집, 처리, 저장 단계를 포함한다. 각 단계는 서로 다른 리소스 요구사항을 가질 수 있다.
1. 데이터 수집 인스턴스: 다양한 소스로부터 데이터를 수집. 네트워크 I/O가 중요.
2. 데이터 처리 인스턴스: 수집된 데이터를 처리. CPU와 메모리 집약적 작업이 많음.
3. 데이터 저장 인스턴스: 처리된 데이터를 저장. 디스크 I/O 성능이 중요.
유연 모드를 사용하여 각 단계에 맞는 인스턴스를 최적화할 수 있다!
VMSS는 애플리케이션 요구에 따라 VM 인스턴스를 자동으로 확장하거나 축소할 수 있다.
여기에 자동 크기조정(Auto-Scaling)과 수동 크기조정(Manual-Scaling)이 포함된다.
애플리케이션의 트래픽이나 부하에 따라 VM 인스턴스를 자동으로 조정하는 기능
1. 메트릭 기반 자동 크기 조정




관지자가 필요에 따라 인스턴스 수를 직접 조정 할 수 있다.

수동 크기 조정은 트래픽이 증가해도 별도의 자동 알림이 뜨지 않지만 Azure Monitor와 같은 도구를 사용하여 트래픽 증가를 모니터링 하고 알림을 설정 할 수 있다.
수동 업데이트 사용 이유
자동 확장을 사용하면 트래픽 증가에 따라 VM 인스턴스가 자동으로 추가되기 때문에 비용 예측이 불가능 하다. 한정된 예산을 사용하는 스타트업 같은 경우에 수동으로 관리하는게 비용 관리에 적합할 수 있다.
특별한기간 동안에만 트래픽이 증가할 것으로 예상되는 사이트(티켓 사이트 또는 전자 상거래 사이트)는 이벤트 전에 수동으로 인스턴스를 늘려 부하를 예방하여 미리 분산시킬 수 있다.