Front-End
__ Node.js + Express
__ Game Server, Notification Server, Relay Server
Back-End
__ Redis
__ MongoDB
Etc
__ Munin: 모니터링
__ Jenkins: 빌드 자동화
Game Server
Graceful Restart
- 서비스에 영향을 주치 않는 서버 재시작
- 스키마 / DB 주소 수정과 커넥션이 연결된 서버는 적용이 불가
- 구현:
__ L7 ping 응답을 404 failed로 보냄
__ 1분 동안 대기 (기존 응답이 모두 처리될 때 까지)
__ 서버 종료 & 업데이트 & 재시작
__ 재기동이 완료되면 L7 ping 응답을 200 ok로 보내서 살아났음을 알림
서비스 중 문제 해결 사례
MetaDB 로그 장애
MetaDB?
- 게임 내의 공통 데이터 및 시스템 로그 저장
- 서버 기동, 유저 로그인 시 필요한 공통 데이터를 읽어옴
주말 오후 1~2시 진행된 이벤트 중 모든 응답이 느려지며 MetaDB의 부하가 급증
원인:
__ 유저가 몰리며 서버 응답이 느려지며 슬로우 로그 대량 발생
__ 시스템 로그를 MetaDB에 저장하며 부하걸림 => 무한 반복
대응:
__ 시스템 로그를 일부만 기록하도록 변경하여 모든 서버 GraceFul
__ 이후 MetaDB의 로그는 별도의 서버로 분리
이적 시장 검색 장애
온타임 이벤트 진행 중 match 쪽은 별로 부하가 없는데 이적 시장 DB 부하가 급증
원인:
__ 잠깐 들어온 유저들이라 게임은 안하고 이적 시장 검색만 많이함
대응:
__ 이적 시장 검색 결과 캐싱 (Redis에 먼저 확인, 만료되거나 없으면 캐시에 추가)
계정 정지 없는 아이템 회수
테스트 서버 상점에 올라가야 할 아이템이 실서버 상점에 올라가게 됨
개선:
__ 거래에 대한 API를 일괄적으로 관리하는 시스템 구축
__ 스위치 하나로 서버 전체/개인에 대한 아이템 사용, 구매, 판매, 강화, 트레이드, 방출 기능을 차단
__ 상황 발생시 서버 전체에 대한 거래 차단
__ 원인 분석 후 제제 대상이 명확해지면 서버 전체의 차단을 풀고 일부 유저만 거래 차단
동시 접속자 기록 경신 대비 작업
1. 부하가 큰 기능을 일시적으로 막음
__ 리그 시뮬권
__ 보관함 / 판매대금 모두 받기
__ 친구 / 클럽원 ELO 점수 알아오기
2. 잦은 요청에 대한 쿼터제
__ 특정 시간동안 일정 횟수가 넘어가게 요청하면 기능을 일시 중단
__ 채팅, 이적 시장의 검색 / 판매 / 구매
3. QoS(Quality of Service) 적용
__ 요청에 대한 응답을 지연해 보냄 (100ms ~ 500ms)
__ 응답을 받아야 다음 동작을 하는 클라이언트 특성상 전체 요청이 줄어드는 효과
__ 즉시 응답해야 하는 부분을 제외한 모든 곳에 적용
4. MetaDB 부하 분산
__ 메타 데이터 변경시 모든 게임 서버가 동시에 변경된 데이터 요청
__ 이를 30초 내에 랜덤하게 요청하도록 변경하여 시점을 분산시킴
출처: http://ndcreplay.nexon.com/NDC2015/sessions/NDC2015_0029.html
'NDC > Server' 카테고리의 다른 글
[NDC 2016] UDP를 사용해서 게임 서버 만들기 (0) | 2023.01.10 |
---|---|
[NDC 2015] <쿠키런> 바쁘고 가난한 개발자를 위한 S3 기반 로그 시스템 (0) | 2023.01.05 |
[NDC 2014] WCF를 이용하여 쉽게 만드는 모바일 게임서버 (0) | 2022.10.21 |
[NDC 2014] 분산서버 구축의 ABC (0) | 2022.10.19 |
[NDC 2014] Rx와 Functional Reactive Programming으로 고성능 서버 어플리케이션 만들기 (0) | 2021.12.02 |