개발 서적 리뷰/게임서버 프로그래머 책

[게임서버프로그래밍#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. 동기/비동기, 복제 방식 모두 장단점을 충분히 고려해야 한다.