ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 서버 분산처리 방법
    책/게임서버 프로그래머 책 2024. 6. 14. 00:32
    분산처리 방법

    기능적 분산처리  vs 데이터 분산처리 ( 수평 방법 )

    • 기능적 분산처리
      • 기능단위로써, 분산 처리 진행
      • 동기적 분산처리 / 비동기적 분산 처리 / 데이터 복제
      • ex) 플레이어 담당 서버 <-> 몬스터 담당 서버  ( 플레이어가 몬스터 공격시 로직 )
    Player Server < - > Monster Server ( message 통신 )

    1. 플레이어 공격
    2. 플레이어, 몬스터, 공격 값 "몬스터 서버"에게 전달
    3. 데미지 로직 결과값 "플레이어 서버"에게 전달
    4. 처리완료
     
    • 데이터 분산 처리 (수평 분산 처리)
      • 데이터 응집도에 따른 수평 분산처리
      • ex) 같은 서버내의 객체들끼리 같은 서버에서 로직 진행 / 매칭 시스템으로서 같은 계층에 존재하는 객체들간의 같은 서버에서 로직 진행

     

     

    기능적 분산 처리

    • 동기적 분산처리
      • Player Server < - > Monster Server
        • 공격 message 전달 ( 대기 )
        • Monster Server 로직 실행 ( +아이템, 몬스터 죽음 여부 )
        • Monster Server -> player Server 공격 결과 전달 (대기 해제)
      • Player 서버는 player 정보만, Monster 서버는 monster 정보만 가지고 있다
      • 응답 대기 시간이 존재 ( 같은 네트워크 상에 존재하므로 빠르게 통신이 가능하지만 여러 클라이언트간의 상용작용이 있을경우 성능저하가 존재하게 된다)
      • 정확한 데이터 일관성을 가질 수 있다
    • 비동기적 분산처리
      • Player Server < - > Monster Server
        • 공격 message 전달 ( 다른 로직 실행, 일방향 통신 )
        • Monster Server  로직 실행 
        • 공격 결과 전달
      • Player 서버는 player 정보만, Monster 서버는 monster 정보만 가지고 있다
      • 응답 구조가 존재하지 않기에, 모든 상황에 적용되지 않을 수 있다. 
      • 응답 대기 구조가 아니기에, 레이턴시에 따른 데이터 정합성이 맞지 않을 수 있다
    • 데이터 복제
      • Player Server < - > Monster Server
        • 서로 Player 와 Monster에 대한 정보를 두개의 서버 다 가지고 있다.
        • 서로 데이터가 업데이트 되었을 시, 데이터 복제를 통해 Player Server 와 Monster Server 를 동기화 해준다.
        • 동기화가 일어나지 않는 간극동안에 데이터 정합성이 안맞을 수 있다.

     

     

    데이터 분산 처리 (수평 분산 처리)

    • 기능적 분산처리 문제
      • 기능중 하나가 서버 장애를 일으키면 다른 서버가 대신 일을 해줄 수가 없다 (고가용성의 문제)
      • 기능적 분산처리의 경우 존재하는 방법론 간의 단점이 존재하므로 주의해야한다
      • 동기적 또는 비동기적으로 처리할경우도, lock(병목 문제)을 통한 성능 저하가 발생할 수 있다 
        • 암달의 법칙 존재 (아무리 병렬적으로 처리해도, 원했던 성능보다 오히려 성능저하가 발생할 수 있음, 한계가 존재)
    • 데이터 분산처리
      • 데이터 응집도에 따라 분산처리를 진행
      • 서버 하나가 장애를 일으켜도 해당 서버에서 통신하던 일부 Player들에게만 장애가 일어나고, 다른 서버들의 경우 정상동작이 가능하다
      • 데이터 응집도에 따라 주변에 있는 player들간의 통신이 일어나지 않고 한개의 서버에서 처리되므로 분산처리로 인한 성능저하를 회피할 수 있다.

     

    고가용성

    • Active - Passive (Master - Slave)
      • Active 서버만 클라이언트와 통신이 일어나고 Passive 서버의 경우는 Active 서버의 정보만 백업 하게 된다.
      • Active 서버가 장애가 있을시, Passive 서버가 바통 터치를 받음
      • 문제점 ) Passive 서버는 백업용도로만 사용되므로 서버 자원을 제대로 활용하지 못하게 된다.
    • Active - Active
      • 서로 분산하여 처리하고 처리한 결과를 복제해준다 ( 양방향 복제가 일어남 )
      • 서로 분산하여 처리하므로 동기화 과정중에 같은 내용의 데이터에 접근한 문제가 발생할 수 있음
        • 회피방법) 메모리 공유 서버 사용 (공유메모리 부분의 서버를 따로 두어 같은 메모리에 접근하는 것을 막을 수 있음 
      • Active 중 한개의 서버가 장애가 일어나면, 남은 Active 서버 한개가 모든 통신을 이어받음

     

     

    *분산처리시 주의점*

    - 분산처리의 경우 불필요한 작업(server 간의 message 통신 ,디버깅의 어려움)들이 존재하므로, 함부로 결정해서는 안된다 .
    - 성능 분석 툴을 이용하여 필요한 부분에 분산처리 진행
Designed by Tistory.