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

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

배포·재시작 Deploy / rolling restart

원인 ID in-deploy · 주 담당 게임개발팀·서버 개발 · 함께 인프라팀·서버 인프라

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

업데이트하려고 서버를 재시작할 때 연결을 옮기지 않으면 그 서버에 있던 사람들의 접속이 끊기고, 종료 직전 저장과 재접속이 한꺼번에 몰립니다.

왜 핫픽스 배포로 서버를 순서대로 재시작 → 그러면 연결을 다른 서버로 옮기지 않고 종료, 그 서버에 있던 모든 유저의 저장이 DB에 몰림 → 화면에서는 공지 없는 접속 끊김, 재접속 폭주

증상
접속 끊김, 접속 불가·무한 로딩, 입력 지연
요인
정체
누가 겪나
서버 전체, 특정 장소·채널
언제
가끔 무작위로, 접속·점검 직후
담당
주 담당 게임개발팀·서버 개발 · 함께 인프라팀·서버 인프라
게임개발팀 할 일
드레인 기능(새 접속만 막고 기존 사람이 빠질 때까지 기다리기), 캐릭터를 다른 서버로 옮기기, 종료 전 저장 나눠 하기, 재시작 뒤 캐시 로딩·JIT 워밍업을 마치고 준비 완료 알리기, 핫 리로드는 별도 스레드에서 미리 읽어 두고 틱 사이에 한 번에 교체.
인프라팀 할 일
배포 도구가 한 대씩 드레인을 기다린 뒤 재시작, 재시작한 서버는 준비 완료(예열 끝)를 확인한 뒤 트래픽 받기, 배포 시각 공지.
수치 감각
서버 한 대에 5,000명이면 종료 직전 몇 초 안에 저장 5,000건이 DB로 몰립니다.
그래프에서는
연결이 한꺼번에 끊김 · 서버별 접속 수, DB 쓰기 수
확인할 곳
배포 도구의 작업 기록(서버별 재시작 시각)을 접속 수·끊김 수·DB 쓰기·로그인 요청 그래프에 세로선(주석)으로 겹쳐 봄
이러면 맞음
서버별 접속 수가 재시작 시각에 한 대씩 차례로 급락하고 그 직전에 DB 쓰기가, 직후에 로그인 요청이 솟음
이러면 아님
끊긴 시각이 배포·재시작 기록과 겹치지 않으면 서버 크래시나 네트워크 장비 쪽
확인 수단
인프라 도구로 확인(게임 코드 불필요)
더 알아보기
다시 켠 직후 몇 분도 느립니다. 캐시가 비어 DB 조회가 몰리고 Java·C# 서버는 실행하면서 코드를 최적화하는 과정(JIT 워밍업)이 끝나기 전이라 같은 일에 시간이 더 듭니다. 서버를 끄지 않고 스크립트·데이터 테이블을 다시 읽는 방식(핫 리로드)도 읽는 동안 틱이 멈춰 잠깐 멈춤이 생깁니다.

출처

  1. Site Reliability Engineering, Chapter 20: Load Balancing in the Datacenter Google
    SIGTERM을 받은 서버는 lame duck 상태로 새 요청을 다른 서버로 돌리고 진행 중인 요청만 마침, 재시작 직후 몇 분은 JIT 최적화 전이라 자원이 더 들어 예열 뒤 트래픽을 받게 함
  2. Liveness, Readiness, and Startup Probes Kubernetes
    레디니스 검사로 연결 수립·파일 로딩·캐시 예열이 끝날 때까지 트래픽을 보내지 않음
  3. Edit target group attributes for your Network Load Balancer AWS
    대상을 등록 해제하면 새 연결은 보내지 않고 기존 연결은 드레인(기본 300초)

함께 보면 좋은 원인

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

같은 증상(접속 끊김)의 다른 층 원인

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