[게임 서버] 10.4 매치메이킹의 분산 처리

게시:     수정

카테고리:

태그:

이 글은 아래의 책을 자세히 정리한 후, 정리한 글을 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
  • 길찾기만 기능적으로 분산할 수도 있다.

GameServer 카테고리 내 다른 글 보러가기

댓글남기기