-
분산처리 방법
기능적 분산처리 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 통신 ,디버깅의 어려움)들이 존재하므로, 함부로 결정해서는 안된다 .
- 성능 분석 툴을 이용하여 필요한 부분에 분산처리 진행