GCloud游戏服务器端开发框架设计目的

发表于2016-10-22
评论0 6.7k浏览
提高游戏服务器端逻辑的开发效率
  一、游戏服务器端有三个常用的典型功能,几乎每个游戏都要反复实现的。而这几个功能,都会符合一些最佳建模和最佳实践:
  客户端拉取服务器数据:有命令模式和RPC这两中常见的建模。GCloud采用RPC建模,可以用上Thrfit这款开源软件的跨语言能力,以适配各种不同语言的游戏客户端。
  服务器端对于游戏数据存取和持久化:游戏数据绝大多数都能通过固定的索引获取,因此采用Map接口就能满足需求。同时还可以根据数据特征做记录的缓存以及设定持久化策略。这样有利于屏蔽底层不同的持久化设备如MySQL/Redis等等。在大型的需要存储大量状态的游戏服务器端上,使用Map接口还能自动化提供分布式存储和本地进程存储(使用发起请求端的堆内存),能极大的提高数据存取效率。因此GCloud使用类似Coherence的思想,使用Map接口提供分布式缓存+持久化,以及带本地缓存功能。
  对所有客户端的数据广播或同步:游戏客户端广播需要同时满足两个常见的需求,一是高性能的广播给所有客户端,减少游戏的卡顿;二是要让广播逻辑经过服务器程序的处理,以免出现破坏游戏公平的程序。因此GCloud广播数据,提供了可使用多个服务器端接入组件(Tconnd)进行多点广播的方案,同时广播请求包也以RPC形式发送给服务器端处理。同时,GCloud也计划提供P2P方案,进一步降低广播的延迟和对游戏运营商带宽的消耗。

  二、游戏服务器端需要低延迟的处理,同时也要快速开发大量逻辑,这本身就是一对矛盾,因此GCloud使用了两个方案来解决这对矛盾:
  全系统使用主逻辑线程,全异步的编程方式,尽其所能的降低延迟。但是由于使用异步的方式,按一般的做法,程序中会遍布各种回调函数,在代码阅读上颇为不便,不利于提高逻辑代码的开发效率。因此GCloud提供了协程的功能,让异步代码写起来就好像同步代码一样。大大解决了代码不易懂的问题。GCloud本身自带的定时器功能就是用协程编写的。
  由于游戏逻辑的复杂,所以一般使用C++开发会比较吃力。所以GCloud也支持Lua脚本语言。同时也提供了所有GCloud能里的Lua调用接口封装,这可以让游戏程序员直接用Lua来使用GCloud的所有功能和性能。

提高游戏运营的自动化程度
  一、在海量用户情况下的运营游戏,最重要的是杜绝系统中的单点故障。也希望能在有故障的时候,自动使用其他机器和进程接替正常服务;在加入新的机器和进程时,最好是无需人为操作,就能为系统扩容——简单来说就是“容灾”和“扩容”的问题。GCloud采用ZooKeeper作为集群中心点,而所有的GCloud Server都自动在ZooKeeper上注册服务和查询、访问服务,因此整个集群没有单独故障的可能。同时由于采用RPC作为基本代码接口,所以对于服务的调用都是基于“函数名字”的,这些名字经过ZooKeeper的查询再提供具体的服务地址,所以不管是有进程故障,或者是新加入进程,都可以在ZooKeeper上实时的反应出来。所以容灾和扩容也基本上是自动的。没有单点、自动容灾扩容,形成了GCloud自动化运营最重要的能力。

  二、游戏服务器端,一般都会有大量的临时状态,比如玩家在游戏世界中的位置,玩家的HP数值等等。这些数据往往是容灾和扩容时最难处理的问题,因为需要同步到新的服务进程上。GCloud提供的分布式Map存储针对这个问题提供最切合实际的解决方案:让程序员可以设定每种数据的缓存方式,以配合不同的需求。
1、一些游戏只读数据,如怪物列表、任务列表、场景列表,可以设定成每个节点都只读型缓存。如果进程缺失数据,直接从持久化设备读取一次即可。
2、一些和玩家相关的变化很快,但不重要的数据,如玩家位置、HP等,可以设定成缓存读操作和写操作。如果数据丢失,从最近一次持久化的版本读取即可。
3、一些变化不快,但非常重要的数据,如玩家的装备、等级,设定成缓存读操作,不缓存写操作。这样如果进程丢失了缓存数据,直接从持久化恢复即可。
4、一些数据需要在多个进程间共享,比如组队列表,直接设置成不缓存,利用后端的持久化设备的能力进行处理。GCloud同时提供了自带缓存和持久化容灾的NOSQL利器Tcaplus系统,可以高效的处理这种情况。

  三、GCloud由于是一个标准的静态库和一系列标准的进程,所以可以打包到一个docker的image中运行,这提供能采用docker云方式运行的可能性。因此我们提供了一整套基于云的运营环境:
1、基于REST的部署、运行、监控平台
2、提供Web界面进行集群部署管理
3、海量日志数据的统计和监控
  看了上面的文章 热爱游戏创作的你是不是已经开始热血沸腾了呢?是不是迫不及待的想加入游戏团队成为里面的一员呢?
  福利来啦~赶快加入腾讯GAD交流群,人满封群!每天分享游戏开发内部干货、教学视频、福利活动、和有相同梦想的人在一起,更有腾讯游戏专家手把手教你做游戏!

腾讯GAD游戏程序交流群:484290331

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引