1. 游戏行业背景
1.1 行业概况
2019全球数字游戏营收1094亿美元,其中中国市场328亿美元。国内游戏⽤户数6.5亿;移动端
(60%)>PC端>主机。移动游戏占⽐逐年增⻓已成为绝对的主流。国内公司近3万+,近200上市,Top10:腾讯53%,网易15%,三七,中手游,世纪华通,完美,搜狐畅游、游族、多益,紫龙互娱。
趋势:业务上融合电竞赛事/直播往社交化、多元化发展;技术上通过AR/VR/云游戏等来提升体验。
政策管控:18年开始趋严,文化部管运营备案;广电总局管版号,19年只有数百个版号。
1.2 业务类型
- 分类维度:终端、题材、美术风格、玩法、架构
- 终端:端游、⼿游、页游、主机
- 玩法:MMORPG、ACG、MOBA、RTS、FPS、SLG
- 风格:武侠、魔幻、写实、⼆次元
- 架构:分区分服、全区全服、全球同服
2. 游戏技术特征
2.1 核心技术逻辑
对于任何网络游戏而⾔,同步是⼀定要解决的核心问题,甚至比游戏玩法逻辑本身还重要,什么是同步?同步是网络游戏的基础,通过网络通讯来确保同屏玩家看到的游戏世界中每个游戏单位的位置、世界场景、状态属性都要保持⼀致。即:客户端的表现要⼀致,同时客户端与服务端的数据要⼀致。业界主要有两种同步方式。
状态同步
图1
状态同步玩法逻辑(比如战⽃逻辑)写在服务端,服务端作为逻辑控制层,客户作为⼀个表现层,玩家对象数据在服务端生成并维护,客户端中玩家对象的所有动作都会通知到服务端,服务端进⾏逻辑计算并将结果同步给所有客户端,客户端执行表现(播放动画、特效并修改玩家对象的属性显示),这种方式下,客户端的数据只能由服务端的指令来修改。
优点:安全性极高,防外挂能力强;断线重连⽐较好实现,无非就是把整个场景和⼈物全部重新⽣成⼀遍发给中途掉线重连上来的客户端去表现即可。
缺点:服务端压力较大(所有动作的计算逻辑需要在服务端上做),网络交互流量大,实现难度大,开发效率低。(通过分区风服来平行扩展);对于格⽃竞技竞速类,玩家动作、位移、⻆度的切换⾮常频繁且快,也需要比较强的同步校验,这时状态同步无法解决。
典型游戏:状态同步对网络延迟的要求并不高(玩家表现层是不是⼀致没有太大关系,只要结果⼀致就行),
⼀般RPG游戏在200-300ms的延迟也能玩下去,如MMORPG,魔兽世界、天龙八部等。
帧同步
图2
帧同步也叫指令同步,玩法逻辑写在客户端了(比如战斗逻辑),客户端所有动作生成⼀条指令发给服务端(比如攻击对象B),服务端收到指令后什么也不做,直接转发给所有客户端,客户端收到指令后执⾏逻辑计算并执行表现层(播放动画、特效并修改玩家对象的属性数据)。
优点:服务端压力小(仅仅起到⼀个转发的作⽤),网络流量小,能做到更好的及时反馈及细节反馈的⽤户体
验。
缺点:容易外挂,断线重连会⽐较繁琐,需要在客户端重放每⼀条指令。
典型游戏:RTS、moba等即时对战类游戏,对同步性的要求很高,⼀场战斗的人数是确定的。王者荣耀、魔兽争霸3、所有格斗类游戏等。实时性要求非常高,要求RTT小于50ms才能有流畅的体验。
2.2 典型技术架构
分区分服:典型MMORPG
MMORPG 大型多人在线角色扮演,如魔兽世界,剑灵,天龙八部
图3
特点:玩家之间强交互、实时性要求⾼、全⾯的游戏世界系统。
- 业务流:特征,交付实时性,主要压力在哪⾥(网络、cpu、内存)。
- 数据流:对数据库的访问逻辑,压力情况。
全区全服:典型MOBA
分少量几个大区、分服对用户不可见;或者全局对客户不可见,应⽤层按⼀定算法进行分配。
ACG/SNS:休闲竞技类
MOBA(Multiplayer online battle arena)匹配开房间类,大逃杀吃鸡类(MOBA+FPS)王者荣耀、绝地求生;堡垒之夜。
特点:休闲竞技类,匹配玩法,需要大量的可匹配玩家,匹配后生成战斗服。
图4
全球同服:典型SLG
为什么要做全球同服,是⼀个运营需求还是⼀个技术需求?不是所有的游戏类型都适合全球同服。
特点:游戏对象之间弱交互,实时性要求并不高,300ms内的同步延迟可接受;卡牌,SLG等,如COC:往往有3种架构:
- 服务端全集中部署,优化接入网络(加速器、DCDN)。
- 全分布式部署,服务端应⽤+数据都分区域部署,做区域间数据同步。
- 服务端应用层分区域部署,数据集中部署,通过区域缓存+高速通道(专线方式访问DB)。
数据⼀致性问题:⼀个玩家断线,缓存数据还未落地,玩家重新登录被判定到另⼀个区域登录了,可能获取不⼀致的角色数据;需要gamesvr判定上一次登录在哪个区域,通过⼀个全局服务去通知对方gamesvr下线玩家并回写数据,然后再预取数据。
图5
2.3 技术痛点及诉求
游戏业务最主要就是要求服务端逻辑处理的实时性和高并发支撑能力,玩法逻辑和数据都在⼀个进程是最理想的方式,但往往因为性能容量的限制,⽬前主流都是逻辑模块拆分、分布式部署,同时又要控制分布式调⽤的链路和次数来控制延迟的目的;对于运行时数据基本都是在内存进行处理(如共享内存),玩家角色的结算/存档数据以固定周期持久化。
图6
基于以上游戏技术特征分析,总体来说对游戏对技术层⾯的诉求优先级是:网络>计算>安全>数据库。
在网络方面核心痛点其实就是如何解决网络延迟、丢包、抖动对玩家卡顿、掉线等体验的破坏,随着服务端技术更新和同屏玩家数量的增加,对游戏服务层的并发访问、稳定性、⽹络延迟也有了越来越高的要求。
3. 游戏网络优化
游戏体验的优化是⼀个系统工程,需要多种优化手段联合作用,业界很多的精力是放在逻辑层的处理上,纯网络层面的优化只能说是一方面,以下基于云环境的网络优化方案进行阐述。
3.1 游戏单服网络能力
对于状态同步的MMORPG类游戏,每⼀次网络同步的数据是整个游戏世界场景的所有单位的属性、状态、行为判定等数据,同步量大,网络吞吐要求高,以⼀个单服设计容量1万在线的MMORPG游戏来说,通常⼀次网络同步的包大小在512byte左右,单⽤户评估带宽30kbps,则出网卡吞吐、包量能力需要的值:
以上是出公网的网卡的流量,GameServer还存在内网通信的需求,因此在这种场景⼀般建议是选择能⽀持百万级别pps的实例,如:
ecs.c6.4xlarge 依托神⻰架构,将网络虚拟化功能卸载到专用硬件,提供了更⾼的网络io承载能力和稳定性。
同时建议将网络中断分散给不同的vCPU处理,提升网络PPS和带宽性能。即开启网卡多队列功能:
图7
图8
3.2 玩家接⼊网络加速
这块主要是玩家到游戏服的公网链路上进行加速。
基于加速器优化玩家接入
加速器与游戏是天然关联的两个行业,主要解决玩家与游戏服因物理距离遥远而出现的延迟、丢包等情况对游戏流畅度的影响,这在国内玩家访问海外游戏服的场景中很常见(比如某些游戏国内禁止发行而国内玩家只能登陆海外服来体验),玩家可以购买各类加速器产品,或者使⽤游戏客户端⾃集成的加速产品来实现链路优化,在云上要构建这⼀层加速其实已经⾮常简单,甚⾄直接利⽤云的架构轻松实现⼀个加速器产品。
图9
具体流量路径
- 在上海VPC和⽇本VPC建⽴高速通道实现两地ECS内网互通。
- 在两端地域ECS之间建立隧道协议,GRE或VXLAN,分别绑定本地地域EIP。
- 国内玩家通过公⽹VPN连接到上海上车点ECS,经过隧道接⼝路由到日本下车点ECS。
- ⽇本ECS接收到去往游戏服的数据包从日本本地EIP出去,同时回程路由到隧道接口发给上海ECS。
基于DCDN动态加速页游
对于页游、H5小游戏等产品由于其⾛http协议,轻客户端模式动态逻辑中也包含有⼤量静态资源,这类游戏往往是全区全服单地域覆盖全国,网络上的主要痛点是:玩家跨运营商跨地域访问游戏服,网络传输拥塞的时延、丢包等情况严重影响用户体验,同时客户自行去做动静分离、动态加速等方案需要大量的时间、成本投入。
图10
全站加速(DCDN)通过动静分离、边缘缓存、智能路由、压缩传输等技术,解决跨运营商、网络不稳
定、单线源站、突发流量、网络拥塞等诸多因素导致的响应慢、丢包、服务不稳定的问题,提升动静态混合、纯动态站点或App的加速性能和访问体验;这种比较适合如三七页游、抖⾳小游戏等,其实对于⼀些重度游戏的全局⾮战斗模块、周边系统等也能接入DCDN来进行全局加速。
基于CEN加速特定地区玩家
国内地域⼴阔,游戏服虽是尽量做本地覆盖,但出于成本因素对于有些偏远地区还是覆盖不全,这部分玩家涉及跨运营商跨地域的远程访问游戏服,游戏掉线、卡顿时有发⽣,⽐如对于新疆、⻄藏、宁夏、⻘海等地域,游戏服在部署上基本不会做本地覆盖,如果拉近游戏服与玩家的距离?⽬前基于阿⾥云有种可行的方案是:SLB+CEN+游戏服(跨地域)。
图11
该⽅案对于没有POP点、anycast⽀持的地域比较合适,相当于SLB挂载跨地域的ECS(白名单开放),拉近游戏服到用户侧距离。
3.3 全球同服⽹络构建
这块主要是基于专线的加速方案,在全球同服游戏类似中,数据传输需要跨运营商、跨多国通信,这对⽹络质量提出更高的要求,当然⽬前能实现真正意义上的全球同服游戏其实没有,主要还是对即时性体验要求不高的SLG、卡牌等类型,游戏对象之间弱交互,实时性要求并不高。
基于GA全球加速
GA利⽤阿⾥云全球传输网络,实现全球用户就近接入和跨地域部署,减少延迟、抖动、丢包等网络问题的影响,按区域覆盖玩家。
图12
GA为每个接⼊加速区域的地域分配⼀个加速IP,客户端流量通过加速IP就近从接⼊点进⼊阿⾥云加速网络。进⼊阿⾥云加速网络后,全球加速可以智能选择路由并⾃动完成网络调度,然后把客户端的网络访问请求送达至最佳终端节点,避开公网的拥堵,达到减少时延的效果。
基于Anycast EIP 加速
同样全球同服的场景,Anycast 主要解决多国多地域的跨网通信链路的质量问题,通过单个ip覆盖全球的加速能力,这大大简化了游戏全局模块的部署问题。
图13
阿⾥云⽬前在全球各地域部署anycast pop点,覆盖地域/国家通过这些点来就近接⼊,部署在HK的游戏
服只需要⼀个ip,通过Anycast路由协议在多个Anycast POP点发布该ip,pop点通过专线连接部署在阿⾥云VPC的游戏服务。
我们是阿里云智能全球技术服务-SRE团队,我们致力成为一个以技术为基础、面向服务、保障业务系统高可用的工程师团队;提供专业、体系化的SRE服务,帮助广大客户更好地使用云、基于云构建更加稳定可靠的业务系统,提升业务稳定性。我们期望能够分享更多帮助企业客户上云、用好云,让客户云上业务运行更加稳定可靠的技术,您可用钉钉扫描下方二维码,加入阿里云SRE技术学院钉钉圈子,和更多云上人交流关于云平台的那些事。
原文链接
本文为阿里云原创内容,未经允许不得转载。