2011년 2월 18일 금요일

mmo engines in Erlang


http://sunweaver.blogspot.com/

어떤 사람이 Erlang으로 MMO엔진을 만들고 있다.KVS(key-value store),KVS2 로 메모리 캐쉬를 쓴 것과 Simulation,Logic,Physics 를 분리한 면에 눈여겨 봐야 한다.
아쉽게도 오픈소스가 아니라서, 소스를 볼 수는 없다. 블로그를 보면, AI NPC를 만드는데, 많은 노력을 한 것처럼 보인다.
Goal에서 Erlang을 활용한 이유가 보인다.
"Once SMASH is finished you will be able to create a Massive Multiplayer Online Game (MMO), a messenger-, a dynamic webpage-, an IRC- or SMS-network or anything that requires sending messages across groups of users on different servers, while being completely independent of the platform, as long as Erlang compiles on the OS. SMASH can be upgraded in run-time without missing a beat"

즉,서버를 다운시키지 않고, 업그레이드가 가능하게 한다는 이야기이다.
그러나, 이것은 클라이언트에서도 dependency분리를 잘 해야지만, 동적으로 다운로드와 업그레이드가 가능할 것이다. 이러한 구조를 구현한 솔루션도 없지 않다. Hero Engine이 그 예이다.

그런데, Erlang을 선택한 이유가 그것만 되서는 안된다고 생각한다.
이른바 '서버군'으로 나누어지는 이유는 DB의 용량때문이다. 그 한계를 넘어야 한다.

또한, 만약 서비스가 인기를 얻어, 200만명이 한꺼번에 하나의 월드에서 한다면?
(200만명은 중국에서 인기를 얻으면 가능한 숫자이고, 기록된바 있다.)
200만명이 하는데, 코드 에러 때문에, 200만명이 한꺼번에 튕긴다면?



아래 그림은 여러 노드들을 합친 형태이다.


그림에서는 정확한 아키텍쳐를 알 수는 없지만, 하나로 합치려는 시도로 보여진다.

다음은, 참고할 만한 다른 소스들이다.

: 또 다른 Erlang으로 만든 MMO Engine

:Online Poker를 Erlang으로 구현했다.

: ragnarok online을  Erlang으로 구현했다. 소스를 보면, packet parsing을 어떻게 하는지 볼 수 있다.

도움이 되셨다면, 광고 클릭을 ㅎㅎ ^^