前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GCloud的设计目的

GCloud的设计目的

作者头像
韩伟
发布2018-03-05 15:12:14
2.4K0
发布2018-03-05 15:12:14
举报
文章被收录于专栏:韩伟的专栏韩伟的专栏

提高游戏服务器端逻辑的开发效率

  • 游戏服务器端有三个常用的典型功能,几乎每个游戏都要反复实现的。而这几个功能,都会符合一些最佳建模和最佳实践:
    • 客户端拉取服务器数据:有命令模式和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存储针对这个问题提供最切合实际的解决方案:让程序员可以设定每种数据的缓存方式,以配合不同的需求。
    • 一些游戏只读数据,如怪物列表、任务列表、场景列表,可以设定成每个节点都只读型缓存。如果进程缺失数据,直接从持久化设备读取一次即可。
    • 一些和玩家相关的变化很快,但不重要的数据,如玩家位置、HP等,可以设定成缓存读操作和写操作。如果数据丢失,从最近一次持久化的版本读取即可。
    • 一些变化不快,但非常重要的数据,如玩家的装备、等级,设定成缓存读操作,不缓存写操作。这样如果进程丢失了缓存数据,直接从持久化恢复即可。
    • 一些数据需要在多个进程间共享,比如组队列表,直接设置成不缓存,利用后端的持久化设备的能力进行处理。GCloud同时提供了自带缓存和持久化容灾的NOSQL利器Tcaplus系统,可以高效的处理这种情况。
  • GCloud由于是一个标准的静态库和一系列标准的进程,所以可以打包到一个docker的image中运行,这提供能采用docker云方式运行的可能性。因此我们提供了一整套基于云的运营环境:
    • 基于REST的部署、运行、监控平台
    • 提供Web界面进行集群部署管理
    • 海量日志数据的统计和监控

--------------------------------------------------- 如果你觉得文章不错,欢迎粉现象转发到朋友圈(拒绝任何形式的转载),也欢迎关注微信公号“韩大(ID:handa1740168)”。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-12-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 韩大 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 提高游戏运营的自动化程度
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档