한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

게임 렉 백서 › L13 서버 구성과 운영

게이트웨이·프록시 경유 Gateway / proxy hop

원인 ID in-gateway · 주 담당 게임개발팀·서버 개발 · 함께 인프라팀·서버 인프라, 게임개발팀·클라이언트 개발

그림과 실험이 있는 원본 카드로 열기 →

클라이언트와 게임 서버 사이에 중간 서버를 두면, 한 번 거칠 때마다 처리 시간이 붙고 그 서버가 단일 장애 지점이 됩니다.

왜 클라이언트 ↔ 게이트웨이 ↔ 게임 서버 구조 → 그러면 중간 서버의 처리·대기 추가, 과부하 시 모두에게 영향 → 화면에서는 전체 핑 상승, 게이트웨이 장애 시 그곳을 거치는 사용자 전원 접속 끊김

증상
입력 지연, 접속 끊김
요인
지연, 정체
누가 겪나
서버 전체
언제
사람이 몰릴 때, 항상
담당
주 담당 게임개발팀·서버 개발 · 함께 인프라팀·서버 인프라, 게임개발팀·클라이언트 개발
게임개발팀 할 일
서버: 게이트웨이를 여러 대로 늘릴 수 있는 구조, 게이트웨이가 죽어도 다른 게이트웨이로 다시 붙으면 캐릭터가 그대로 이어지는 구조(세션 재연결). 클라이언트: 게이트웨이가 끊기면 자동 재접속.
인프라팀 할 일
게이트웨이 수평 확장(대수 추가), 게이트웨이별 CPU·연결 수·처리 지연 모니터링.
수치 감각
같은 데이터센터 안이라 평소에는 한 번 거칠 때 1ms 미만. 게이트웨이가 과부하면 수십~수백 ms로 늘어납니다.
그래프에서는
인원·부하를 따라 오름 · 게이트웨이 처리 지연, 게이트웨이 CPU·연결 수
확인할 곳
게이트웨이의 CPU·연결 수와 게이트웨이 소켓의 Recv-Q(ss·netstat), 게이트웨이를 지나기 전과 지난 뒤의 지연 차이. 서비스 메시를 거치는 HTTP·gRPC 호출이면 Istio 표준 지표 istio_request_duration_milliseconds를 보내는 쪽(reporter=source)과 받는 쪽(reporter=destination)으로 나눠 비교
이러면 맞음
게임 서버의 처리 시간은 그대로인데 게이트웨이 구간의 지연만 늘고 그 시각 게이트웨이의 CPU가 포화되거나 Recv-Q가 쌓임
이러면 아님
게이트웨이를 거치지 않는 경로(직접 접속, 다른 게이트웨이)도 똑같이 느리면 회선이나 게임 서버 쪽
확인 수단
인프라 도구로 확인(게임 코드 불필요)
더 알아보기
서비스 메시(Istio 등)를 쓰면 서버마다 옆에 붙는 사이드카 프록시(Envoy)도 한 단계로 더해집니다. 서비스 사이의 요청은 보내는 쪽 사이드카와 받는 쪽 사이드카를 차례로 거치고, 프록시에 로그·지표 수집 같은 기능을 더할수록 처리 시간과 대기 시간이 늘어납니다.
실제 사례
Riot Games 2020: League of Legends 유럽·브라질 서버의 엣지 호스트 과부하

출처

  1. The Unique Architecture behind Amazon Games’ Seamless MMO New World AWS
    New World는 클라이언트가 공개 주소가 있는 입구 서버(REP) 4대 중 하나로 접속하고, 그 뒤의 시뮬레이션 서버(허브)와 통신
  2. Designs, Lessons and Advice from Building Large Distributed Systems Google
    LADIS 2009 기조연설(Jeff Dean). 같은 데이터센터 안 왕복 약 0.5ms
  3. Site Reliability Engineering, Chapter 22: Addressing Cascading Failures Google
    과부하로 큐가 길어지면 대기 시간이 처리 시간의 몇 배로 늘어남(처리 100ms, 큐가 스레드 수의 10배면 1.1초)
  4. Performance and Scalability Istio
    사이드카 모드에서 요청은 보내는 쪽 사이드카와 받는 쪽 사이드카 프록시를 차례로 거침, 기능을 더할수록 프록시 안의 처리 경로가 길어지고 텔레메트리 수집이 다음 요청의 대기 시간을 늘림
  5. What is Envoy Envoy
    Envoy는 모든 애플리케이션 서버 옆에서 따로 도는 프로세스이고 앱은 localhost의 Envoy를 거쳐 주고받음
  6. Istio Standard Metrics Istio
    istio_request_duration_milliseconds(HTTP·gRPC 요청 처리 시간 분포), reporter 라벨로 보내는 쪽(source)·받는 쪽(destination) 프록시 구분
  7. netstat(8) — Linux manual page net-tools
    Recv-Q: 연결된 소켓에서 사용자 프로그램이 아직 가져가지 않은 바이트 수

함께 보면 좋은 원인

같은 층: L13 서버 구성과 운영

같은 증상(입력 지연)의 다른 층 원인

그림과 실험이 있는 원본 카드 보기