mmorpg 서버
웹서버는 요청과 응답이 끝이지만 게임서버는 interaction이 정말 많다.. a가 b에게 공격을 가하면 a는 공격을하고 스태미너가 감소하던가 b의 체력도 감소하게된다 이러한 하나의 연결이 아닌 여러 상호작용들이 존재한다. !
single스레드를 사용하면 안되나? actor 수가 너무 많아지면 하나의 스레드로는 감당을 하지 못한다, 게임 유저들은 참지못한다.!
그래서 사용한 것이 멀티스레딩 구조인데 이 상황에서는 문제가 많다. 중간에 queue로 범퍼 역할을 해도 lock lock을 거는데 여기서 성능도 문제가 되고, .. 그래서 가장 중요한 것이 구역을 잘 나누는 것이다. 구역을 잘 나누면된다.
멀티프로세스는 어떨까 그렇게 되면 lock도 필요없고 동기화고 필요없고 그렇지만. 경계에서 만나는 지점이 문제가 생긴다 seamless 구조를 생각한다면 멀티프로세스로는 안된다. 하나의 프로세스는 하나의 스레드만 가지고있어서, 안된다.
seamless
하나의 연결구조로 가면서 연결이 끊이지가 않는 상태이다 ( ex 대륙에서 다른 대륙으로 넘어갈 때 로딩이 있지만 심리스는 잠깐의 끊어짐도 존재하지않는다)
연결이 끊이지않으면서, 액터도 많은 상태면 무조건 멀티스레드로 갈 수밖에 없다.
싱글프로세스 vs 멀티프로세스
싱글프로세스는 프로세스가 하나다, 간단하게 게임서버가 하나라는 것이다..
싱글프로세스는 scale up방식이다 머신을 더 좋은 것으로 교체, 프로세스가 하나가 돌기에 머신 성능이 올라가면 프로세스 성능도 올라가게된다., 그렇지만 공짜점심같은 scale up방식은 무조건 좋지 않다 컴터 성능 올라가는거에비해, 전체적인 성능이 비례적으로 좋아지는 것은 아니다.
scale out은 퍼뜨리는 것이다 서버 대수를 늘리는 것이다.!!! 경제적인 측면에서도 scale out이 좋다, 요즘 또 cloud 기술이 좋아져서 virtual machine들을 대여해서 사용하기도 한다.
싱글프로세스의 단점은 spof이다, single point of failure 하나의 점이 망해가면 실패하는 것이다.
싱글프로세스는 그래도 sealess가 가능하다, 하나의 프로세스가 모든 것을 관리해서 끊어짐이 없다.
멀티프로세스는 sealess가 어렵지만 zone으로 나누면서 눈속임을 해야한다. 가장 쉬운 방법은 로딩을 해야한다, 걸어서 sealess하게 할려면 조금 복잡하다..
'c#_게임서버' 카테고리의 다른 글
zone (0) | 2022.07.13 |
---|---|
서버 멀티스레드 버전 (0) | 2022.07.09 |
spinlock, autoResetEvent, ReaderWriterLock (0) | 2022.07.02 |
lock (0) | 2022.06.30 |
소켓프로그래밍 (0) | 2022.06.28 |