当前位置: 首页>NodeJS>Node.js实现网游服务器高性能和可扩展(第2页)

Node.js实现网游服务器高性能和可扩展(第2页)

时间:2015-07-08 16:00 来源:网络整理 作者:KKWL 点击:
在上图2中,我们可以看出,每个进程负责采用单一职责,各进程间通过一定的规则(如RPC远程过程调用)来进行通信,游戏中的各场景服务使用一个进程来服务,实现各场景游戏运行的


    在上图2中,我们可以看出,每个进程负责采用单一职责,各进程间通过一定的规则(如RPC远程过程调用)来进行通信,游戏中的各场景服务使用一个进程来服务,实现各场景游戏运行的分离。但是在开发过程中,不需要考虑每个场景具体的信息,全部采用统一的代码来实现,开发方便,通过添加适当的参数来实现较易的调试,每个进程分别运行在服务器的多核上,即可以充分使用计算机的资源,也由于职责单一,由于每个进程都专职做自己的事,因此,在压力大的时候,可以很明显的查出问题所在,并可以较好的实现对相应的服务进行调优,可以达到较好的性能和一定的可伸缩性。但是,在各游戏的世界里,无法准确的知道游戏的状态如在线人数之类的,会存在热点数据和服务过载等一些问题,造成部分服务堵死等现象,也无法达到在不停服务的情况下进行服务器扩容与自动切换等问题,同时会给游戏运营带来一定的问题,不能充分的对玩家数据进行分析与挖掘,因此,这种实现方式可以满足中小型的游戏开发。这种架构目前很多的游戏服务器中还在使用,技术发展也较成熟,如传奇服务端架构等。


    分布式服务架构

\


 

    图3 分布式的服务架构


    同样,分布式的服务架构与多进程的架构具有很多相同点,如进程服务单一职责,较好的性能调优,同时采用集中式的方式对游戏服务器进行管理,各游戏服务器可以通过自定义的方式即DSL进行游戏业务的路由与分发,通过主备服务器的状态可以很清楚的知道每个服务的状态及运行情况,这样可通过动态添加服务来到达负载均衡,具备较好的性能和可扩展性,能满足大型游戏的开发。当然,采用这样方式,会具有一定的复杂性,同时各服务之间可能是不在同一台服务器上的,因此会带来一定的网络开销,在大量广播的场景中,网络IO压力大,需要通过定时批量或AOI服务等方式来进行广播通信,同时,游戏的通信协议需要经过特别的设计,尽量避免数据序列化上的CPU重复开销,采用胖客户端的方式去分担游戏服务器的序列化与反序列化;另外还有可能引入分布式事务等相关问题,需要在一个集中点进行处理。当然,在游戏设计中,策划开发人员需要尽量避免这种跨场景跨进程的游戏逻辑需求。


    在分布式架构实现中,目前商业上较成功的案例是BigWorld游戏服务框架,国内外很多大型的游戏开发商都在使用。而在开源部分,目前还没有较稳定成熟的方案,我们团队采用Node.js正在开发的Pomelo游戏服务框架正在努力实现这一目标,现已进入最后的文档整理阶段,预计将在十月份进行开源与线上示例演示。


    总结


    采用 Node.js 来实现网络游戏服务器的开发,除了能利用JavaScript的动态语言的优势特性、强大的开源社区和V8引擎的优越性能外,在网络数据传输的异步化方面具有快速、实时等事件编程模型;特别在HTML5的应用开发中,还具有前后端代码共享、DSL灵活定义等特点。但是也由于JavaScript的动态脚本语言的性质,同时V8在内存使用上的限制等问题。尽管V8引擎对脚本语言通过动态编译进行了静态化,但如果开发工程师在大规模开发时,没有注意到一些代码的细节,比如代码的额外异常检查和类属性的动态变化等方面,导致未经过调优的代码整体上还是无法和C、Java等静态语言相比的,然而在经过调优过后的代码是可以达到静态语言的性能的。在云计算应用中,也得到很多公司的推广与使用,如国外的SmartOS,Vmware以及国内的阿里云等,相信其性能与应用层面都会发展的越来越好;


    此外,采用 Node.js 来实现游戏服务框架并开源也是一件非常有价值的事情,在追求高性能与低成本同时,希望能给开发者提供即简单又快速的开发方式,游戏开发者通过使用游戏框架,可以完全把精力放在业务代码的实现,不需要再把精力放在框架的实现。有机会我们将在后面的一系列讨论中介绍采用 Node.js 来开发游戏服务架构遇到的很多性能问题及优化过程。 最后,本文并不是建议大家一定要采用 Node.js 去开发游戏服务器,只是给新老游戏开发者提供一种解决方案,欢迎大家关注和探讨我们团队近期将开源的 Node.js 游戏服务解决框架。

(责编:sunnie)

声明:凡注明CIO时代网()之作品(文字、图片、图表),转载请务必注明出处为CIO时代网(),违者本网将依法追究责任。

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------