Azure Service Fabric을 사용하는 동기 멀티 플레이어
이 예제에서 게임 서버 풀은 Azure Virtual Machine Scale Sets 만들기 및 오케스트레이션을 담당하는 Azure Service Fabric에서 관리합니다. 각 지역에는 자체 게임 서버 풀이 있습니다.
아키텍처 다이어그램
관련 서비스
- Azure Traffic Manager - 대기 시간을 기준으로 플레이어를 가장 적절한 지역 영역에 연결합니다.
- Azure Service Fabric - 컨테이너 내에서 확장 가능하고 안정적인 게임 서버를 간편하게 패키지, 배포 및 관리할 수 있습니다.
배포 템플릿
클러스터 설정에 사용하도록 사용자 지정할 수 있는 샘플 Service Fabric 클러스터 템플릿을 포함하는 이 리포지토리를 참조하세요. 이는 다른 개발자가 만든 클러스터의 입력 및 형식을 기반으로 매우 다양한 템플릿을 제공하기 위한 것입니다. 템플릿은 Windows 및 Linux 클러스터를 모두 커버합니다.
처음 시작하는 가장 기본적인 템플릿은 다음과 같습니다. 이 템플릿을 사용하여 Windows Server 2016 Datacenter를 실행하는 보안 5 노드, 단일 노드 유형 Service Fabric 클러스터 및 컨테이너를 Azure Diagnostics이 켜져 있고 네트워크 보안 그룹을 사용하도록 설정된 Standard_D2_v2 크기 가상 컴퓨터 확장 집합에 배포할 수 있습니다.
다음 단추를 클릭하여 프로젝트를 Azure 구독에 배포합니다.
이 작업은 Azure 구독에 대한 azuredeploy.json ARM 템플릿 파일의 템플릿 배포를 트리거합니다. 그러면 필요한 Azure 리소스가 만들어집니다. 이로 인해 Azure 계정에 요금이 부과될 수 있습니다.
Azure 서비스에 대한 명명 규칙 및 제한 사항을 요약하는 문서가 포함된 일반 지침 문서를 참조하세요.
Service Fabric에서는 모두 사용할 수 있으므로 게임 서버 바이너리를 Azure Storage 또는 Azure Container Registry에 저장할 수 있습니다.
단계별 설명
- 플레이어의 디바이스 클라이언트는 Azure Traffic Manager에 연결하여 게임 서버를 찾는 플레이어의 요청을 라우팅합니다.
- Azure Traffic Manager는 대기 시간이 가장 짧은 지역 영역에 연결하고 매치 메이커를 가리켜 사용 가능한 게임 서버를 가져옵니다.
- 매치 메이커는 게임 서버를 선택하는 데 필요한 모든 정보를 갖고 있으며 용량이 더 필요한 경우 Azure Service Fabric 서비스를 사전에 ping하여 특정 Service Fabric 클러스터에서 확장을 시작합니다.
- Azure Service Fabric 서비스가 요청을 수신하고 확장을 시작합니다. 자동 크기 조정이 설정된 경우에는 설정된 규칙에 따라 프로세스를 더 적극적으로 시작할 수 있습니다.
- 게임 세션이 종료하고 게임 서버가 다시 사용 가능해지면 서버는 주기적으로 매치 메이커에 현재 IP 주소 및 포트와 함께 상태 업데이트를 전송합니다.
- 각 플레이어 디바이스는 매치 메이커에서 제공하는 연결 정보를 사용하여 게임 서버에 직접 연결합니다.
선택적으로, 게임 세션이 종료된 후 관련 정보를 Azure Storage 계정에 저장할 수 있습니다.
크기 조정
다음과 같은 두 가지 주요 접근 방법이 있습니다.
매치 메이커는 크기 조정을 제어하지 않습니다. 대신, Azure Service Fabric 자동 크기 조정을 사용하여 Azure Service Fabric이 크기 조정 요구 사항을 소유합니다. 이 경우 서비스는 게임 서버에서 보고하는 부하에 따라 또는 리소스 사용량을 기준으로 게임 서버의 크기를 동적으로 조정합니다. 자동 크기 조정은 탄력성을 제공하며 필요 시 게임 서버의 추가 인스턴스 또는 파티션을 프로비전할 수 있습니다. 전체 자동 크기 조정 프로세스는 자동화되고 투명하며, 일반 정책을 설정한 후에는 게임 서버 수준에서 수동 크기 조정 작업이 필요하지 않습니다. 자동 크기 조정은 만들 때 또는 업데이트를 통해 언제든지 켤 수 있습니다.
자동 크기 조정이 유용한 일반적인 시나리오는 멀티 플레이어 게임처럼 부하가 시간에 따라 달라 지는 경우입니다.
또는 이 예제와 같이 매치 메이커를 사용하여 Azure Service Fabric에서 확장 시점을 알 수 있습니다. 가장 좋은 방법은 풀 관리 패턴을 사용하는 것입니다.
이 패턴은 애플리케이션에서 런타임에 Service Fabric 서비스 인스턴스를 동적으로 만드는 기능이 필요한 상황에 가장 흔히 CreateServiceAsync 호출을 통해 해결 방법을 제공합니다. 이를 통해 관리해야 하는 서비스를 등록할 수 있으며 서비스에서 구성된 사용 가능 인스턴스 수를 풀에서 사용할 수 있게 됩니다.
배포 및 초기화 후 게임은 단순히 서비스 인스턴스를 요청하는 관리자를 호출하여 게임에서 이전에 사용하던 인스턴스(고유 ID로 확인)를 반환하거나 아직 할당되지 않은 사용 가능한 인스턴스를 반환함으로써 사용할 수 있는 인스턴스에 대한 포인터를 반환합니다. 일정 시간 동안 유휴 상태를 유지하는 서비스 인스턴스가 있는 경우 관리자는 해당 인스턴스를 비활성화하여 클러스터에서 추가 용량을 개방합니다.
이 패턴을 사용하는 주요 이점은 새 인스턴스를 수동으로 인스턴스화할 때 게임이 지연될 수 있는 시간을 현저히 줄이는 것입니다.
크기 조정 가능한 게임을 빌드하는 방법에 대한 자세한 내용은 Server Fabric에서 크기 조정을 참조하세요.
추가 리소스 및 샘플
Azure Service Fabric 게임 및 클러스터를 성공적으로 관리하려면 안정성을 최적화하기 위해 수행 해야 하는 권장 작업이 있습니다. 보안, 네트워킹, 코어로서의 인프라, 모니터링 등에 대해 설명하는 이 문서를 참조하세요.
가격
Azure 구독이 없는 경우 무료 계정을 만들어 12개월 무료 서비스를 시작합니다. 이러한 서비스의 제한을 초과하지 않는 한 Azure 무료 계정에서 무료로 제공하는 서비스에 대해서는 요금이 부과되지 않습니다. Azure Portal을 통해 또는 사용량 파일을 통해 사용량을 확인하는 방법을 알아보세요.
이러한 참조 아키텍처를 실행하는 동안 사용되는 Azure 서비스의 비용은 사용자가 부담합니다. 전체 금액은 사용량에 따라 달라집니다. 참조 아키텍처에 사용된 각 서비스에 대한 가격 웹 페이지를 참조하세요.
Azure 가격 계산기를 사용하여 사용하려는 Azure 서비스에 대한 비용을 구성하고 예측할 수도 있습니다.