[게임서버프로그래밍#1] 서버 분산 처리
2024. 6. 14. 00:32ㆍ개발 서적 리뷰/게임서버 프로그래머 책
이 글에서는 서버에서 분산처리를 수행하는 두 가지 주요 방식인
기능적 분산처리와 데이터 분산처리를 설명한다.
각각의 특징, 장단점, 구체적 예시를 함께 다루며,
암달의 법칙이 분산처리 효율성에 미치는 영향까지 살펴본다.
분산처리란 무엇인가
서버 시스템이 커지면서 하나의 서버만으로 모든 요청을 처리하는 데 한계가 생긴다. 이를 해결하기 위해 작업을 여러 서버에 나누어 처리하는 방법을 분산처리라고 한다. 분산처리에는 기능적 분산처리와 데이터(수평) 분산처리 두 가지 주요 방법이 있다.
[ 기능적 분산처리 ]
정의:
서버의 기능 단위를 나누어 각각 다른 서버가 담당하도록 분리하는 방법이다.
예시:
- 플레이어 관련 로직은 Player Server에서,
- 몬스터 관련 로직은 Monster Server에서 처리한다.
- 플레이어가 몬스터를 공격하면, Player Server가 Monster Server로 메시지를 보내어 데미지를 계산한다.
동기적 분산처리
- 메시지를 보내고 응답이 올 때까지 기다린다.
- Player Server → Monster Server로 공격 메시지를 전송하고,
Monster Server는 데미지를 계산하여 결과를 다시 Player Server로 보낸다. - 장점: 데이터 일관성이 매우 높다.
- 단점: 응답을 기다리기 때문에 레이턴시(지연시간)가 발생할 수 있으며, 여러 클라이언트가 동시에 접근하면 병목 현상이 생긴다.
비동기적 분산처리
- 메시지를 보내고 응답을 기다리지 않는다.
- Player Server는 공격 메시지를 전송한 뒤, 별도의 응답 없이 다음 로직을 처리한다.
- 장점: 서버가 대기 없이 처리할 수 있어 빠른 응답이 가능하다.
- 단점: Monster Server의 처리 결과와 Player Server의 데이터가 일시적으로 불일치할 수 있다.
(→ 정합성 문제가 발생할 수 있음)
데이터 복제 기반 분산처리
- 두 서버 모두 플레이어와 몬스터 데이터를 복제해 보유한다.
- 데이터 변경이 발생할 때마다 서로 복제(sync)하여 일관성을 유지한다.
- 문제점:
동기화 간극 동안 데이터 불일치 가능성이 있으며, 복제 트래픽 비용이 추가로 발생한다.
[데이터 분산처리 (수평 분산처리)]
정의:
데이터 자체를 나누어 여러 서버에 저장하고 처리하는 방법이다.
예시:
- 서버 A: 서울 지역의 유저 담당
- 서버 B: 부산 지역의 유저 담당
- 서버 C: 해외 유저 담당
→ 각 서버는 자신에게 할당된 유저 데이터만 처리한다.
특징:
- 데이터 응집도가 높은 객체들을 묶어서 같은 서버에 배치한다.
- 하나의 서버에 문제가 생겨도, 그 서버에 속한 일부 유저만 영향을 받는다.
- 서버 간 통신이 줄어들어 전체 시스템 성능 저하를 줄일 수 있다.
장점:
- 서버 장애시 영향 범위를 최소화할 수 있다.
- 대규모 트래픽에도 수평 확장(scale-out)하기 쉽다.
[암달의 법칙]
정의:
프로그램을 병렬화할 때, 전체 성능 향상에는 한계가 있다는 이론이다.
의미:
- 병렬화할 수 없는 부분이 존재한다면, CPU를 늘려도 무한히 빨라지지 않는다.
- 분산처리 역시 같은 원리가 적용된다. 서버를 늘려도 성능 향상이 일정 수준에 이르면 멈춘다.
- 즉, 분산처리는 필요한 부분에만 신중하게 적용해야 한다.
예시:
- 전체 로직 중 90%를 병렬 처리할 수 있어도, 10%는 직렬 처리해야 한다면, 아무리 많은 서버를 추가해도 10%의 시간은 무조건 걸린다.
[고가용성(HA: High Availability)]
Active - Passive 방식
- Active 서버만 클라이언트 요청을 처리하고, Passive 서버는 대기하며 데이터를 복제받는다.
- Active 서버 장애 시, Passive 서버가 인계하여 시스템 다운을 방지한다.
- 단점: Passive 서버가 평소에는 자원을 거의 사용하지 못한다.
Active - Active 방식
- 두 서버가 동시에 요청을 처리하고 서로 데이터를 복제한다.
- 한 서버 장애 시, 나머지 서버가 역할을 인계한다.
- 문제: 동시에 같은 데이터에 접근하면 충돌이 발생할 수 있다.
(→ 공유 메모리 서버를 두어 해결하는 방법이 있음)
* 분산처리 시 주의사항 *
1. 서버 간 메시지 통신, 디버깅의 어려움 등 부작용이 존재하므로 무분별한 분산처리는 피해야 한다.
2. 성능 분석 툴을 통해 필요한 부분에만 분산처리를 적용해야 한다.
3. 동기/비동기, 복제 방식 모두 장단점을 충분히 고려해야 한다.
'개발 서적 리뷰 > 게임서버 프로그래머 책' 카테고리의 다른 글
[게임서버프로그래밍#6] 클라이언트-서버 구현을 위한 소켓 기초 정리 (0) | 2025.04.29 |
---|---|
[게임서버프로그래밍#2] RDBMS와 NoSQL (4) | 2024.06.13 |
[게임서버프로그래밍#4] Client-Server 기본 연결과 통신 (0) | 2024.06.08 |
[게임서버프로그래밍#3] Overlapped I/O (0) | 2024.06.04 |