NDC/Server

[NDC 2015] 피파온라인3 서버 구조와 85만 동접 포스트 모템

MAKGA 2023. 1. 5. 21:15
320x100

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

320x100