호드는 확장 가능하도록 설계되었으며, 필요에 따라 다양한 환경설정으로 디플로이할 수 있습니다. 이 페이지에서는 호드의 시스템 아키텍처, 호드를 구성하는 다양한 컴포넌트, 호드가 접속하는 외부 서비스를 설명합니다.
컴포넌트
호드에는 다음 컴포넌트가 필요합니다.
- 호드 대시보드(Horde Dashboard)
- React를 사용하여 Typescript로 작성된 호드의 웹 프론트엔드입니다. 대시보드는 일반 호드 서버나 별도의 웹 서버에서 호스팅할 수 있습니다.
- 호드 서버(Horde Server)
- C#/ASP.NET으로 작성된 코어 서버 코드입니다. 별개로 디플로이하거나, 로드 밸런서가 적용된 다수의 인스턴스를 통해 수평으로 확장된 서비스로 디플로이할 수 있습니다. Windows 및 Linux에서 지원됩니다.
- 참고: 디플로이 > 서버
- 호드 에이전트(Horde Agent)
- 작업자 머신에서 실행되어 호드 서버에 의해 할당된 작업을 실행하는 소프트웨어입니다. C#/NET으로 작성되며, Windows, Mac, Linux에서 지원됩니다.
- 참고: 디플로이 > 에이전트
- MongoDB 데이터베이스 (또는 호환되는 제품)
- 작업, 사용자, 에이전트 등의 호드 상태를 트래킹하고 지속하는 데 사용되는 문서 데이터베이스입니다. 달리 환경설정되지 않는 한, 호드는 시작 시 로컬 MongoDB 데이터베이스를 자동으로 생성합니다.
- MongoDB의 독립형 또는 호스팅된 인스턴스는 MongoDB, Inc에서 이용할 수 있습니다. 또한 호환되는 호스팅된 제품을 Amazon(DocumentDB) 및 Microsoft(Azure CosmosDB)에서 이용할 수 있습니다.
- Redis 데이터베이스 (또는 호환되는 제품)
- 서버 인스턴스 간에 자주 액세스되는 상태를 캐싱하고 서버 내 통신에 Pub/Sub 서비스를 제공하는 데 사용되는 메모리 내 데이터베이스입니다. 달리 환경설정되지 않는 한, 호드는 시작 시 로컬 Redis 인스턴스를 자동으로 시작합니다.
- Redis의 독립형 (또는 호스팅된) 인스턴스는 Redis Labs에서 이용할 수 있습니다. 또한 호환되는 호스팅된 제품을 Amazon(ElastiCache) 및 Microsoft(Azure Cache for Redis)에서 이용할 수 있습니다.
- 스토리지(Storage)
- 호드는 중간 및 출력 아티팩트, 로그 파일, 캐시 데이터를 저장하기 위해 로컬 디스크, 네트워크 공유 또는 클라우드 기반 오브젝트 스토어(예: AWS S3, Azure Blob Store)를 사용할 수 있습니다.
IStorageBackend인터페이스를 통해 다른 백엔드를 구현할 수 있습니다. 기본적으로 호드는 서버 머신에 로컬로 데이터를 저장합니다.
- 호드는 중간 및 출력 아티팩트, 로그 파일, 캐시 데이터를 저장하기 위해 로컬 디스크, 네트워크 공유 또는 클라우드 기반 오브젝트 스토어(예: AWS S3, Azure Blob Store)를 사용할 수 있습니다.
통합
- Slack
- 호드는 Slack에 알림을 전송하는 기능을 기본적으로 지원하지만,
INotificationSink인터페이스를 통해 다른 백엔드를 지원할 수 있습니다. - 참고: 디플로이 > 통합 > Slack
- 호드는 Slack에 알림을 전송하는 기능을 기본적으로 지원하지만,
- Perforce
- 호드는 CI 세팅의 리비전 컨트롤을 위해 Perforce를 지원하며, Perforce에서 바로 환경설정 데이터를 읽는 기능을 지원합니다.
- 참고: 디플로이 > 통합 > Perforce
- Jira
- 호드에는 빌드 상태 문제를 트래킹하고 분류하기 위한 시스템이 있지만, 원하는 경우 외부 문제 서비스에 접속할 수 있습니다. 호드는 Jira를 기본적으로 지원하지만,
IExternalIssueService인터페이스를 통해 다른 백엔드를 구현할 수 있습니다.
- 호드에는 빌드 상태 문제를 트래킹하고 분류하기 위한 시스템이 있지만, 원하는 경우 외부 문제 서비스에 접속할 수 있습니다. 호드는 Jira를 기본적으로 지원하지만,
에픽게임즈 내부에서 사용해 본 결과, 위에 언급된 서비스를 지원하게 되었습니다. 지원 서비스는 향후 변경될 수 있으며 특정 제품을 추천하거나 추천하지 않는 것으로 간주해서는 안 됩니다.
에픽게임즈의 호드 디플로이
에픽게임즈 내부의 호드 디플로이는 AWS에서 호스팅하며, 다음 요소로 구성됩니다.
- SSL 종료 및 라우팅을 위한 Amazon Load Balancer
- Amazon ECS에서 관리하는 대시보드 제공 Linux 컨테이너 2개(각 vCPU 0.25개, RAM 0.5GB)
- '서버' RunMode로 환경설정된 호드 서버 인스턴스 10개, Amazon ECS에서 관리하는 Linux 컨테이너에서 실행됨(각 vCPU 4개, RAM 16GB)
- 이러한 인스턴스는 가벼운 사용자 대상 요청을 처리합니다.
- '작업자' RunMode로 환경설정된 호드 서버 인스턴스 2개, Amazon ECS에서 관리하는 Linux 컨테이너에서 실행됨(각 vCPU 4개, RAM 16GB)
- 이러한 인스턴스는 Perforce 메타데이터 리플리케이션, 환경설정 상태 읽기 및 업데이트, 예약된 작업 시작 등 보다 무거운 예약된 작업을 처리합니다.
- Amazon DocumentDB(MongoDB와 호환됨)
- Amazon ElastiCache(Redis와 호환됨)
- 호드 에이전트가 포함된 AMI를 실행하는 몇백 개의 EC2 인스턴스
- 모바일 디바이스, 콘솔, 호스팅되지 않는 플랫폼(예: Mac)에 액세스 권한을 제공하기 위해 온프레미스로 호스팅되는 약 100개의 머신