일본의 Developer Summit 2012의 발표에서 발췌

 

DeNA에서 그룹 기업인 미국 ngmoco사와 제휴 아래 스마트 폰용 크로스 플랫폼 게임 엔진 「ngCore(ngCore Client)()를 개발·제공하는 것과 동시에 주변 소프트웨어의 개발도 진행하고 있다. 하나는 Node.js를 베이스로 하는 JavaScript로 게임 서버 개발을 지원 하는 「ngServer. 그리고 또 하는 ngCore를 이용한 게임 개발 환경/라이브러리의 「ngGoBuilder」이다.

 

 

DeNA에서는 스마트 폰용 소셜 게임 개발 플랫폼으로서 클라이언트 앱 개발용의 게임 엔진 「ngCore(ngCore Client), 개발 툴의 「ngBuilder(ngGoBuilder)를 제공하고 있으며 소셜 게임의 서버 사이드 구현을 지원하는 「ngServer」를 현재 개발 중이다.

 

ngServerNode.js를 베이스로 한 서버 사이드 체제. Node.js를 채용하고 있는 이유로 「보다 많은 접속 수에 대처할 수 있는 것」.

 

「특히 스마트 폰용  소셜 게임에서는 리얼타임의 요구가 증가하여 이른바 C10K 문제가 현실성을 띠어 오고 있다. 그 때문에 대량의 동시 접속을 처리하는데 충분한 성능을 발휘할 수 있는 것이 중요한 포인트」

 

그 밖에도 Node.js는 메모리 사용 효율이 뛰어나다 「스레드를 사용한 서버 프로그램과 비교하면 꽤 유효하게 메모리 자원을 사용할 수 있다」라고 한다.

 

이미 Node.js 서버를 사용하여 서비스를 전개하고 있는 Mobage의 소셜 게임으로 「SKYFALL」와「VIP LIFE2. 이것들은 DeNA의 그룹 회사인 미국 ngmoco사의 타이틀로 미국의 Android 마켓 등에서 베타 공개되고 있다.

 

이러한 게임 개발에서는 Node.js의 버전 업이 너무 빨라서 모듈의 업데이트를 따라갈 수 없는 것처럼 Node.js를 채용하면서 문제가 되기도 하였다. 그 중에서도 제일 고생한 것이 CPU 스파이크 문제라고 한다.

 

 「일정한 부하가 걸린 상태로 운용하고 있으면 어느새 인가 CPU 스파이크가 발생하였다. 좀처럼 그 원인을 특정할 수 없었지만 최종적으로는 Node.js 자체의 문제인 것을 알았다」

그 근본적인 원인은 Node.js가 채용한 JavaScript 엔진 「V8」의 GC(가베지 컬렉션)애서 큰 힙 메모리가 확보되었을 때에 같은 문제가 일어났다고 한다. Node.jsV8의 업데이트를 따라 가기 때문에 만약 신 버전의 V8에 미지의 약점이 있다면 그대로 Node.js에도 발생해 버린다. 프로덕션의 서버에서는 Node.js의 릴리스 버전을 사용할지, 혹은 커스터 마이즈 버전으로 운용할지 등 검토한 위에 자사의 방침을 결단할 필요가 있을 것이다.

 

이러한 경험을 기초로 개발된 서버 사이드 프레임워크가 ngServer이다.

 「진기함을 자랑하지 않는 표준적인 구성」이라고 한다.

아래 그림의 아키텍쳐를 소개.

디바이스(스마트 폰)으로부터 JSON이 보내지면 ngServer의 콘트롤러는 JSON을 돌려준다. 디바이스 측은 그것을 기초로 디바이스 상에서 렌더링을 실시. 종래의 휴대 전화(feature )의 소셜 게임과 같이 서버로부터 디바이스에 swf 파일이나 렌더링 된 HTML파일, 이미지 등이 송신될 일은 없으며 거래되는 것은 JSON만으로 하는 것으로 Node.js의 강점을 최대한으로 살리는 구조다.

 




 

출처 : http://codezine.jp/article/detail/6446

저작자 표시
신고
by 흥배 2012.03.21 09:00