View a markdown version of this page

GAMEREL03-BP02 게임 기능의 느슨한 결합을 구현하여 플레이어 경험에 미치는 영향을 최소화하면서 장애를 처리합니다. - 게임 산업 렌즈

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

GAMEREL03-BP02 게임 기능의 느슨한 결합을 구현하여 플레이어 경험에 미치는 영향을 최소화하면서 장애를 처리합니다.

구성 요소 분리란 서버 구성 요소가 최대한 독립적으로 작동하도록 설계하는 개념을 말합니다. 플레이어에게 좋은 게임 내 경험을 제공하려면 데이터가 최대한 최신 상태여야 하므로 게임의 일부 측면은 분리하기 어렵습니다. 그러나 많은 구성 요소와 게임 작업을 분리할 수 있습니다. 예를 들어 리더보드 및 통계 서비스는 게임 플레이 경험에 중요하지 않으며 이러한 서비스에 대한 읽기 및 쓰기는 게임에서 비동기적으로 수행할 수 있습니다.

이 모범 사례가 확립되지 않을 경우 노출되는 위험 수준: 높음

구현 지침

게임에서 문제가 감지되면 자동으로 또는 관리자가 비활성화할 수 있는 기능에 대한 정상적인 성능 저하를 구현하고, 기능에 의존하는 업스트림 서비스를 구성하여 장애를 정상적으로 처리할 수 있도록 합니다. 예를 들어 특정 플레이어 데이터가 게임 클라이언트 내에서 제대로 로드되지 않는 경우이 데이터가 게임 플레이 경험에 중요한지 고려해야 합니다. 그렇지 않은 경우 플레이어의 경험을 방해하지 않고이 실패를 정상적으로 처리하도록 게임 클라이언트를 구성하고 플레이어가 화면을 다시 방문할 때 나중에이 데이터 가져오기를 다시 시도하도록 선택합니다.

제한 시간, 재시도 및 백오프와 같은 로직을 사용하여 오류와 실패를 처리합니다. 제한 시간은 시스템이 불합리하게 장시간 중단되는 것을 방지합니다. 재시도는 일시적 및 무작위 오류의 고가용성을 제공할 수 있습니다.

중요 구성 요소에 느슨하게 결합할 수 있는 중요하지 않은 구성 요소를 정의합니다. 느슨한 결합을 사용하면 한 구성 요소의 장애가 다른 구성 요소로 캐스케이드되지 않으므로 시스템의 복원력이 향상됩니다. 게임 기능에 게임 서버 또는 백엔드에 대한 상태 저장 연결이 필요하지 않은 경우 상태 비저장 프로토콜을 구현하여 동적으로 확장하고 일시적인 장애로부터 복구해야 합니다. HTTP/JSON API를 사용하여 상태 비저장 프로토콜과 느슨하게 결합할 수 있는 중요하지 않은 구성 요소를 개발합니다. 게임 클라이언트의 네트워크 호출을 비동기식 및 비차단식으로 구현하여 성능이 느린 게임 기능 또는 기타 종속 서비스로 인해 플레이어에게 미치는 영향을 최소화합니다.

느슨한 결합을 통해 복원력을 더욱 개선하려면 비동기적으로 처리할 수 있는 구성 요소 간에 대기열, 스트리밍 또는 주제 기반 시스템과 같은 메시징 서비스를 사용합니다. 이 모델은 즉각적인 응답이 필요하지 않거나 요청이 등록되었다는 확인으로 충분한 상호 작용에 적합합니다. 이 솔루션에는 이벤트를 생성하는 구성 요소와 이벤트를 사용하는 구성 요소가 포함됩니다. 두 구성 요소는 직접적인 point-to-point 상호 작용을 통해 통합되지 않고 내구성 있는 스토리지 또는 대기열 계층과 같은 중간을 통해 통합됩니다. 또한 처리 실패 시 메시지를 보존하여 시스템의 신뢰성을 개선하는 데 도움이 됩니다.

다양한 메시징 서비스가 주문 및 전송 메커니즘과 같은 다양한 특성을 가지고 있으므로 적절한 메시징 메커니즘을 조사하고 선택합니다. 선택한 메시지 시스템이 메시지를 한 번 이상 전송하도록 작업을 멱등성으로 설계합니다. 예를 들어 게임에서 플레이어 재생 시간, 통계 또는 기타 관련 데이터를 추적해야 하는 일반적인 게임 사용 사례를 고려하면 플레이어 동시성이 가장 높을 때 쓰기 처리량 사용 사례가 높아질 수 있습니다.

신뢰할 수 있는 아키텍처를 구현하려면 사용 사례에 플레이어가 인식하는 read-after-write 일관성이 필요한지 여부를 고려하세요. 일반적으로 이러한 시나리오는 비동기 처리에 적합하며 요청이 Amazon SQS와 같은 확장 가능하고 내구성 있는 메시지 대기열에 수집되고 Lambda 함수와 같은 소비자 서비스를 사용하여 백엔드 데이터베이스에 배치로 삽입할 수 있는 쓰기 대기열 패턴을 구현하여 달성할 수 있습니다. 이 접근 방식은 플레이어의 게임 클라이언트, 백엔드 웹 및 애플리케이션 서버, 내부 데이터베이스 시스템을 포함한 여러 분산 구성 요소 간의 동기식 통신보다 더 안정적입니다. 또한 필요에 따라이 수집 속도를 늦추는 데 쓰기 대기열의 소비자 처리를 사용할 수 있으므로 백엔드 데이터베이스를 최대 쓰기 처리량을 충족하기 위해 확장할 필요가 없기 때문에 비용이 절감됩니다.

구현 단계

  • 리더보드 및 통계 서비스와 같은 중요하지 않은 구성 요소를 중요한 게임 플레이 기능과 분리하여 비동기 작업을 허용하고 복원력을 개선합니다.

  • 제한 시간, 재시도 및 백오프에 대한 로직을 사용하여 중요하지 않은 기능에 대한 정상적인 성능 저하를 구현하고 게임 클라이언트가 플레이어 경험을 방해하지 않고 장애를 처리하는지 확인합니다.

  • 구성 요소 간의 비동기 통신을 위해 Amazon SQS와 같은 메시징 시스템을 사용하면 높은 처리량 사용 사례를 확장 가능하고 안정적이며 안정적으로 처리할 수 있습니다.

리소스