shhicii 2017-03-28
更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloud
在3月8日的“2017游戏行业全球同服和安全攻防技术沙龙”上,阿里云资深业务架构师韩虎分享了阿里云全球同服游戏解决方案,他从当前的技术环境入手,介绍了业务功能整体架构,并重点解析了四种全球同服游戏参考架构,最后还辅以案例说明典型系统的设计要点。
以下内容根据现场分享和幻灯片整理而成。
经过前几年的激烈竞争,2017年国内手游行业进入一个稳定发展期,市场进一步细分,游戏公司纷纷寻求业务创新,其中手游重度化和端游经典IP手游化仍是重点所在,但是很多游戏厂商在去年已开始规划或操作游戏出海,如研发全球同服手游或发行游戏海外版。
背景介绍
2016年Supercell推出的全新手游《部落冲突:皇室战争》中,全球同服的概念大获成功。国内一部分游戏公司看到这种游戏的潜力,纷纷选择手游出海策略;中国游戏厂商智明星通开发的《COK列王的纷争》也取得了不菲的成绩。受这些成功游戏的影响,一大批全球同服手游相继涌现,这也成为游戏公司试水海外市场的突破口。
但在其中,还存在着亟待解决的技术痛点:
1.游戏架构设计问题,不同类型的游戏如何设计和部署游戏接入层、逻辑层和数据层;
2.网络延迟问题,如何让不同国家玩家都能快速顺畅地接入游戏、进行公平PK;
3.数据读写问题,在分布式部署方式下如何高效读写数据并保持必要的数据一致性;
4.资源管理问题,如何统一、高效地进行游戏运维和资源管理。
业务功能架构
无论页游、手游还是端游,基本都包含以下的游戏模块或服务,主要包括游戏服务器和游戏运营支撑两大部分。
全球同服游戏参考架构
2016年,通过和客户的深入交流和广泛调研,以及我们本身对游戏架构的研究,总结出了以下四种全球同服游戏参考架构。
一、全集中部署
第一种称为全集中部署架构,是目前对网络延迟不敏感的全球同服游戏的主要架构选择。这种架构下游戏的接入层、逻辑层和数据层全部集中部署到某一区域,全球所有玩家均通过Internet公网接入游戏。适用于希望重点覆盖某一区域的玩家,实现真正的全球玩家同服,游戏玩法对网络延迟不敏感,比如游戏的网络延迟容忍度在300ms以下,又比如传统的卡牌游戏。这种类型游戏的服系架构,设计初期不适合做分布式部署,如逻辑架构里未设置数据同步的机制,所以在上线时只能选择全集中部署。
架构优点:
1.部署简单、运维方便;
2.主要覆盖区域的玩家游戏体验较好;
3.没有数据一致性问题。
架构缺点:
1.无法实现所有玩家就近接入。
二、集中部署、优化网络
第二种称为集中部署、优化网络架构,该架构中游戏接入层、逻辑层和数据层同样集中部署到某一区域,然后在游戏所需覆盖区域的阿里云节点部署接入点或代理。通过智能DNS进行调度后,各区域玩家实行自动地就近接入,游戏服务与各接入点通过阿里云的高速通道进行内网互连。适合于游戏服务器架构不宜做分布式部署,而运营发行方又想覆盖尽量多的区域,并且游戏网络延迟容忍度在200ms以内,比如SLG游戏。
架构优点:
1.部署简单,运维方便;
2.可以实现网络加速;
3.没有数据一致性问题。
架构缺点:
1.延迟固定,通过专线进行网络加速所以延迟是固定值。固定延迟差异对于某些类型游戏来说会带来玩法上的公平性问题,需要采用帧同步等方法来消除延迟差异。
三、数据集中、逻辑分布
第三种称为数据集中、逻辑分布架构,该架构下数据层集中部署到某一机房,然后在全球其他所需覆盖的区域分别部署一套游戏的接入层、逻辑层和缓存层。它适用于游戏玩法上尽量是同区域玩家间互动,并且对网络延迟要求较高(比如120ms以下,人的肉眼一般最小可感知延迟是120ms)的游戏类型,如动作类游戏,并且希望全球各区域都同等覆盖。
架构优点:
1.玩家可就近接入;
2.游戏逻辑就近计算;
3.基本不存在数据一致性问题;
4.灵活调整分布式节点的部署策略。
架构缺点:
1.需要多区域部署;
2.跨区域玩家互动时会有一方玩家网络延迟变大;
3.需要有完善的脏数据回写机制以保证数据一致性。
以下为该架构的一些关键设计点:
注:游戏数据库指与玩家角色直接相关的一些数据;全局数据指游戏排行榜、游戏商城之类的数据。
四、全分布式
第四种称为全分布式架构,其中游戏逻辑和游戏数据都是分布式部署的,只有全局类的游戏和数据是集中部署(读写不频繁,对网络延迟要求不高)。适用于对网络延迟要求较高的游戏类型,不同区域间玩家有较多互动,希望全球各区域都同等覆盖,游戏架构中有完善的数据同步机制。
架构优点:
1、玩家可就近接入;
2、游戏逻辑就近计算;
3、游戏逻辑层完全无状态化设计;
4、数据读写速度快。
架构缺点:
1、需要多区域部署;
2、不同区域间会有较多数据同步,需要完善的数据同步机制。
以下为该架构的一些关键设计点:
全球同服游戏典型系统设计
下面是我们提供的全球同服游戏典型系统设计的一些参考,包括世界排行榜、游戏时间设计、游戏本地化方案、游戏同步几方面。
一、世界排行榜
世界排行榜服务在设计时需要从需求、分析、数据结构、Rank数据持久化、RankSvr单点问题几点上考虑,以下是排行服务的架构图:
二、游戏时间设计
全球同服游戏面向各个国家不同地区的用户,所以在游戏时间设定上也要有所注重。游戏服务器都使用距格林威治标准时间1970年1月1日00:00:00的偏移量(一般是一个绝对的秒数)来表示游戏内时间,此时间会同步给游戏客户端,游戏客户端取手机所设置的时区来计算出在游戏客户端里应该显示的游戏时间。
游戏时间同步有其必要性:
1.防止客户端修改本地时间造成游戏逻辑混乱,所以客户端使用的时间为服务器时间;
2.几乎所有解决游戏状态同步问题的技术,如预测拉扯技术、服务器验证同步技术,都需要时间同步作为基础;
3.游戏内一些定时的活动或与时间相关的游戏玩法,为了游戏公平性,必须以统一的游戏服务器时间为标准;
4.在客户端与服务器通信时更为安全的做法是,在每一个数据包中都添加时间戳,用于服务器验证数据包的有效性。
三、游戏本地化方案
这是游戏出海很重要的一个点,无论是游戏出海发行还是游戏的地区外发行,都需要注重本地化工作。一般做法是打一个统一的客户端安装包,里面包含几个基础的素材包,还会包含各种不同语种的美术素材包,还有一些素材是程序素材,可通过手机的语言版本来动态渲染。
以下是常见的几种安装策略:
1.下载客户端安装包后玩家自行设置语言版本。这种大安装包包含各种语言包,软件内置一键切换语言;
2.客户端安装时根据手机所设置的语言种类进行动态安装。安装包一般会内置一套default语言,需要其他语言时,通过网络下载语言包;
3.分别提交不同语言版本的客户端安装包到应用商店。针对不同区域投放不同的安装包,每种安装包都需要定制化。
四、游戏同步
同步是网络游戏的关键技术也是难点,如何通过消除或隐藏延迟,从而将用户带入快速的交互式实时游戏中,需要根据具体的情况来决定采取哪些不同的同步策略。
在游戏同步方案上,有基于时间轴的同步,还有帧同步、Server同步等技术层面。
五、游戏数据同步
方案一
该场景下,游戏逻辑层分布式部署,数据层完全集中部署,那么分布式节点就需要向集中部署的数据层进行数据读取或回写。
主要有以下两种情况涉及到该类数据同步:
A、玩家在本地区域登录(流程如图中红色字体所示)
1.数据库代理从数据库读取角色数据。
2.数据库代理将角色数据插入缓存。
3.从缓存读取角色数据参与计算。
4.数据有变化时,同时更新缓存数据和数据库数据。
5.玩家退出游戏时删除缓存数据。
B、玩家跨区域登录
1.先检查玩家是否已在其他区域登录,是,执行2,否,执行3。
2.将玩家的角色数据回写数据库并删除缓存和退出登录。
3.数据库代理从数据库读取角色数据。
4.数据库代理将角色数据插入缓存。
5.从缓存读取角色数据参与计算。
6.数据有变化时,同时更新缓存数据和数据库数据。
7.玩家退出游戏时删除缓存数据。
方案二
该场景属于全分布式系统架构,各分区数据库实时同步,可通过消息服务或者阿里云DTS实现实时同步,各分区数据库都存有游戏所有玩家数据。
优点:玩家跨区游戏时不用再迁移玩家数据,所有分区都是本地数据读写。
缺点:由于是异步同步,有可能存在数据不一致情况,如玩家使用VPN进行游戏,如果VPN闪断,会造成玩家跨区重登录,如果数据同步消息丢失或有延迟,会造成重登录时读取的数据不是最新,这种情况概率较小出现;各分区都存有全部玩家数据,实时同步可能会对数据库造成一定压力;各分区间数据库实时同步会使用较多跨区域专线带宽。
方案三
该场景下通过RPC,即远程登录的方式进行数据回写。跨区域登录时,从玩家出生服远程读取战斗数据,战斗结果通过接口调用方式触发出生服进行数据更新。
优点:本区域玩家均是就近本地进行角色数据读写。
缺点:实现逻辑较复杂,需要把所有战斗结果抽象成接口,统一由原服的接口来进行数据变更。
方案四
该场景下,玩家在跨区域登录时需要从玩家上次登录服远程迁移玩家数据,每次玩家登录时均需检查是否需要迁移数据。
游戏同步方案Roadmap
图中划线处是我们已经完成的方案,未画线的是我们接下来需要继续完善的方向。
典型客户案例
以下是我们选取的以阿里云解决方案进行游戏部署的典型客户案例。
一、上海木七七《卡片怪兽》
《卡片怪兽》是一款全球同服卡牌游戏,游戏已经开始推广,目前游戏服务器部署在阿里云美国西部1地域,由于游戏玩法对网络延迟要求不高,300ms以下的延迟都不会影响游戏体验,所以客户没有优化网络接入或者施行分布式部署的计划,采用的是全集中部署的全球同服游戏架构。
二、北京奇云《帝国时代OL》
《帝国时代OL》是一款全球实时多人战争游戏,游戏已经公测上线,游戏采取集中部署,优化网络的全球同服游戏参考架构,游戏接入层、逻辑层和数据层服务均部署在阿里云美国西部1地域,通过阿里云高速通道连接美国西部1地域和华北2地域的VPC,在华北2地域的VPC里设置接入层流量代理,通过智能DNS来进行流量调度,这样就可以提高中国大陆玩家访问游戏的速度。
阿里云目前已在全球部署了15大节点,基本覆盖全球主要游戏市场区域。