[게임 서버] 10.4 매치메이킹의 분산 처리
카테고리: GameServer
태그: GameServer
이 글은 아래의 책을 자세히 정리한 후, 정리한 글을 GPT에게 요약을 요청하여 작성되었습니다.
게임 서버 프로그래밍 교과서, 배현직 저자
📦 10. 분산 서버 구조 사례
👉🏻 4. 몬스터 NPC 처리의 분산 처리
🎮 일반적인 몬스터 관련 처리
---
config:
look: handDrawn
theme: dark
title: 일반적인 몬스터 관련 처리
---
sequenceDiagram
participant C as 클라이언트
participant S as 게임 서버
loop 일정 시간마다(deltaTime)
S-->>C: 몬스터 상태 전송<br>(위치, 애니메이션 등)
end
C->>S: 공격 요청<br>(몬스터 타격)
Note right of S: 몬스터 데미지 연산<br>플레이어 보상 연산
S-->>C: 결과 반영<br>(몬스터 사망 / 보상 지급)
- 몬스터 수가 많아지면, 연산량이 많아진다.
- 길찾기 알고리즘이나 이 외의 연산들
⚠️ 문제가 있는 분산 시도
---
config:
look: handDrawn
theme: dark
title: 문제가 있는 분산 시도
---
sequenceDiagram
participant C as 클라이언트
participant G as 게임 서버
participant N as NPC 서버
C->>G: ① attack()<br>2000클록 사이클
activate G
deactivate G
G->>N: ② attack()<br>2000클록 사이클
activate N
deactivate N
Note right of N: 몬스터 데미지 연산<br>플레이어 보상 연산<br>300클록 사이클
N-->>G: ③ died()<br>2000클록 사이클
activate G
deactivate G
G-->>C: ④ died()<br>2000클록 사이클
activate C
deactivate C
- 분산하였지만 문제가 있다.
- 실질 연산 처리량보다 메시지 송수신에 더 많은 자원을 소모한다.
- 광역 스킬과 같이 서로 간의 연산이 많은 경우, 엄청난 과부하가 발생한다.
- 이를 해결하기 위해 먼저 성능 분석이 필요하다.
- 길찾기에 막대한 연산이 들어간다고 가정한다.
✅ 길찾기 서버 분리
---
config:
look: handDrawn
theme: dark
title: 길찾기 서버 분리
---
sequenceDiagram
participant C as 클라이언트
participant G as 게임 서버
participant N as NPC 길찾기 서버
C->>G: ① interaction()
activate G
deactivate G
G-->>C: ② interaction()
activate C
deactivate C
C->>G: ③ interaction()
activate G
deactivate G
G-->>C: ④ interaction()
activate C
deactivate C
G->>N: ⑤ request path()
activate N
deactivate N
N-->>G: ⑥ reply path()
activate G
deactivate G
C->>G: ⑦ interaction()
activate G
deactivate G
G-->>C: ⑧ interaction()
activate C
deactivate C
C->>G: ⑨ interaction()
activate G
deactivate G
G-->>C: ⑩ interaction()
activate C
deactivate C
- 길찾기만 기능적으로 분산할 수도 있다.
댓글남기기