게임 서버 아키텍처의 분산화
기존 시스템은 단일 서버 구조로 개발 단계에서 단순성과 효율성을 제공했으나 다음과 같은 한계점 발생
- 수평적 확장 제한 : 단일 서버에 모든 기능이 집중되어 있어 트래픽 증가에 대응하기 힘듬
- 장애 시 서버 마비 : 서버 장애 발생 시 전체 서비스 중단
- 유지보수성 문제 : 서버의 역할과 기능이 복잡하게 얽혀있어 문제 진단 및 수정이 어려움
위와 같은 문제를 해결하고 안정성과 확장성을 확보하기 위하여 순차적으로 분산 서버 아키텍처 전환 진행
분산 서버 구조
새로운 아키텍처는 서버의 역할을 분리하여 기능별로 독립된 서버로 구성
각 서버는 다음과 같은 구조로 설계
- Nginx 서버 ( 리버스 프록시 )
- 역할 : 각 클라이언트의 요청을 각 서버로 라우팅, API를 통한 Stream 수정 및 리로드
- 목표 : 요청 분산과 각 서버 보호
- 인증 서버
- 역할 : 사용자 로그인, 회원가입 및 인증토큰 발급/검증
- 목표 : 인증 관련 작업을 별도로 처리하여 보안성 강화
- 로비 서버
- 역할 : 유저 상태 관리 및 게임 시작 전 설정 관리
- 목표 : 실시간 사용자 동기화와 효율적인 세션 관리 지원
- 매칭 서버
- 역할 : 레디스를 활용한 실시간 플레이어 매칭
- 목표 : 안정적인 매칭 시스템 구현
- 헬스체크 서버
- 역할 : 각 게임서버의 상태 모니터링 및 게임서버 등록시 자동 nginx 매핑요청
- 목표 ; 시스템 안정성을 보장하고, 자동화 장애 대응 목표(추후) / 봇 알림 서비스 (추후)
- 게임 서버
- 역할 : 실제 게임 로직 처리, 게임 상태 동기화, 사용자 입력 처리
- 목표 : 게임 로직에만 집중하여 성능 최적화 및 안정성 제공
분산 서버 장단점
장점
- 트래픽 증가 시 특정 서버만 수평적 확장 가능
- 필요한 부분만 자원 추가하여 효율적 운영 가능
- 장애 발생 시 다른 서버에 영향을 최소화 하여 서비스 지속 가능
- 기능별 서버 분리로 문제 발생 시 원인 파악 및 빠른 수정이 가능
- 각 서버별로 특정 작업만 처리함으로 작업 효율 및 처리속도 증가
단점
- 네트워크 구성 및 인스턴스 설계가 추가되어 구현과 유지가 더 어려워짐
- 서버 간 통신이 원활해야 하며 단일서버에 비해 레이턴시 증가
- 서버 운영 비용 증가 ( 실물 서버, 클라우드 서버 등 )
- 분산 시스템 설계 및 구축에 시간과 자원 소요
- 난이도 급증급증
결론
이전 단일 서버 구조는 단순성과 초기 개발의 빠른 진행이 가능했으나 앞으로 올 트래픽에 대한 대처가 부족하고 확장성과 안정성이 떨어지는 관계로 분산 서버 아키텍처 구성으로 전환을 통해 다음과 같은 결과를 추구합니다.
- 대용량 트래픽 대비
- 장애 발생 시 서비스 지속 가능성 확보
- 각 서버 모니터링을 통한 유지보수성 증가