关于GDC
Adrian Astley
Tools & Infrastructure Engineer, Activision
演讲标题:
Adrian于2017年加入电子游戏行业,主要从事开发工具和基础设施管理方面的工作。他开发的工具帮助动视发行了6款《使命召唤》游戏以及旗下其他游戏。
演讲概述:
动视的游戏开发模式是采用大型分布式开发,特点就是多工作室、多岗位、多地区、多QA站点协作开发,多个LAN网络通过WAN网络进行通信,地理上分布于美国、澳大利亚、上海和欧洲等。目前遇到的问题如下:
扩展性和容错性
数据去重
数据需清理
不清理是不可能的,因为数据实在太大。如果通过脚本遍历文件进行清除,遍历操作随着文件系统不断变大而陷入死循环。
历史做法及存在的问题
如何提升
首先,要明确提升的目标:
● 简单二进制的客户端工具;
● 基于数据块的数据去重功能;
● 自动清除无用数据;
● 系统组件垂直可扩展,具备容错性,尤其是数据存储方面;
● 本地命令行输入终端,用户可输入命令进行操作,命令语句明确且易用,能使用脚本运行;
● 能把文件上传到远端的服务器。因为文件共享不是很好的方式,所以可选择HTTP对象存储作为文件服务器;
● HTTP是高度可扩展的,可跨平台,有丰富的工具和完善的基础设施;
Indy工具包括二进制客户端indy,元数据服务器Ark,云对象存储服务器WebDAV,使用Golang来开发工具和服务器组件。Indy通过Image来组织所有的数据资源。Image包含文件包,ENV变量,以及处理文件/变量的命令操作。
图示的系统有客户端A和B,Ark元数据服务器,以及对象存储服务器。第一步,Client A通过“Indy build”命令创建一张Image,并且它想要共享这张Image。接下来,Client A通过‘Indy push’命令,会告诉Ark需要上传的数据,然后Client A并发上传构建的图到对象存储服务器。Client B通过“Indy pull”命令进行下载,告知Ark需要下载的数据,然后从对象存储服务器下载。下载下来的图像是不能直接使用的,需要用“Indy mount”命令加载为一个Image对象才可以使用。
图像的构建需要创建IndyFile文件(下图左),利用自定义语言对图像的内容进行定义。自定义语言如“Add”指令是添加文件,“CHUNK”指令是切割文件。有了IndyFile之后,就可调用“Indy build”命令。Indy工具会读取IndyFile中的指令,并运行指令创造一张Image。Build命令会输出一串Sha1哈希串,用于唯一标识Image。通过Sha1值去引用图像是不方便的,所以通过创建一个可读性友好的标签(Label),作为一个指针来引用Image,标签格式如下图右。
对于缓存系统来说,由于文件是基于内容的Sha1哈希串来标识,所有文件都是不可变的,不存在缓存的一致性问题。下图的系统有中央对象存储器,每个工作室有专门的缓存节点。所有客户端内部的下载和上传操作都通过缓存节点,客户端无需连接中央对象存储器。这个模式的优点如下:
● 缓存节点缓存文件,工作室内所有客户端通过LAN从缓存节点下载数据,减少WAN带宽,降低对象存储器的负载压力。
● 缓存节点是可控的,可做更有效的专门调整来保障WAN流量尽可能优化。
● 使用S3对象存储:NFS文件系统不能扩展,有单点失败问题。
通过对Indy,这一协助动视暴雪曾成功制作和发行了多部《使命召唤》游戏的工具的介绍,演讲者为大家分享了在全球多地协同开发过程中如何提升效率的方法。最后演讲者提出了未来的开发计划,以期更有效的节省资源和成本,实现全球化多地协同工作。
● 完善服务器的权限管理
● 开发缓存节点的服务自发现功能
● 完善客户端命令的机制
GDC2022雷火UX演讲一览
【实录】条条大路通罗马:在《永劫无间》中用不同学科方法分析流失
本文来自微信公众号“网易雷火UX用户体验中心”(ID:LeihuoUX)。大作社经授权转载,该文观点仅代表作者本人,大作社平台仅提供信息存储空间服务。