Perforce演讲回顾(上):从UE项目Project Titan,看Helix Core在大型游戏开发中的版本控制与集成使用策略

news2024/11/26 0:33:07

日前,Perforce携手合作伙伴龙智一同亮相Unreal Fest 2024上海站,分享Helix Core版本控制系统及其协作套件的强大功能与最新动态,助力游戏创意产业加速前行。

Perforce解决方案工程师Kory Luo在活动主会场,带来《Perforce Helix Core+Unreal Engine工作流程与使用实践》的主题演讲,分享Helix Core在Project Titan项目中的关键角色、与UnrealEngine的配置技巧、常见的使用误区及解决办法、以及Helix Core的最新功能与应用等重磅干货。

此次演讲的精华回顾,我们将分为上下两期为您呈现(内容有精简优化);本期为(上)期,敬请持续关注。


大家好!我叫Kory,来自Perforce Software,很荣幸能参加这次Unreal Fest上海站的活动。相信大家在活动期间过得非常充实,也希望大家能在此找到自己所需要的新技术和新功能。

接下来,我将为大家介绍Helix Core版本控制系统及其与Unreal Engine相辅相成的工作流程和最佳使用实践。

Helix Core和Project Titan:关于这场4000+人参与的全球艺术盛会的细节

话不多说,首先来做个小调查:大家是否了解Project Titan?或者是否曾参与到这个艺术创作中来?

Project Titan是由Epic Games发起一个UE艺术盛会,对全球的UE艺术家开放。该项目提供一个基本开放的世界观框架,鼓励所有参与者共同协作,去创造一个崭新的世界。在这个64平方公里的虚拟土地上,有各种地貌,比如湿地、沙漠、森林等,参与者可以在其中创建各类角色、材料、道具和效果等等。

Helix Core作为这次项目的版本控制软件,负责存储Project Titan当中的所有数据信息,助力协同完成了这场创作。该项目历时10周,从3月份一直持续到6月份。项目结束时,Project Titan一共有4122名用户参与,协同创建了17000个变更列表。项目结束后,下载到本地电脑会占据75GB的磁盘空间,服务器端储存的版本控制文件一共有350GB。

Project Titan 服务器规格

首先,我们来了解下Project Titan中的服务器规格。

为了方便Epic Games和Perforce去管理构建这样一个项目,初始的服务器规格其实非常小,性能相对较弱,部署在AWS上,使用的是AWS C5.large,只有两个VirtualCPU和4GB的RAM。

但是当项目开始运行后,参与者变得非常多。第一周大概有800多个用户,第二周就激增到1600个用户。如此一来,小规格的服务器就不再适用了。于是,我们相应扩充了服务器规格,采用m5.2xlarge,内存为32GB,这个规格支撑了项目运行的大部分时间。

在项目后期,我们观察到RAM的峰值达到了32GB。为了确保项目的持续顺利运行,保障客户体验,我们将配置升级到m5.4xlarge。另外,关于我们的储存空间,root volume有50GB;用于存储日志的hxlogs,也是50GB;用于存储元数据的hxmetadata,有80GB;hxdepot是用于存储版本控制软件的实体文件,大概为1T。

Project Titan 服务器拓扑结构

下面来看一下Project Titan服务器的拓扑结构,了解我们是如何支撑4000多名用户在AWS上面完美地完成这场艺术创作的。

我们有一个主服务器在英国伦敦,有三个代理服务器,其中两个在美国的维吉尼亚和加利福尼亚,还有一个在韩国首尔,以便亚太地区的用户能够更好地与Helix Core进行交互、下载文件。我们代理服务器的安装非常简单,对配置的要求也相对较低。其配置是主服务器初始时的最低配版本,完全能够支持大量用户的访问和下载。

整个Project Titan服务器的部署,都是通过我们的SDP(Server Deployment Package)服务器部署包进行安装的。使用该部署包不需要支付任何费用,也无需注册任何信息。

如果您对Helix Core的部署有任何问题,欢迎咨询Perforce中国授权合作伙伴——龙智,我们的专业服务团队可为您提供相应指导。

Project Titan 服务器监控功能

接下来,我们来了解Project Titan服务器的监控功能。我们使用P4Prometheus来实时监察,了解服务器的运行状况。

从上图的第一张图表中,可以看出CPU的使用率不足25%,处理指令非常丝滑,没有任何问题。

第二张图表中,可以看到内存峰值在32GB上下浮动,我们也是观察到这个变动之后,才继续升级了服务器的规格。

第三张图表可以看到服务器的负载情况,每天有多少个用户访问服务器,每个时段有多少个指令在服务器进行交互,这些都是可以直观呈现的。

最后一张图表,用于监察磁盘空间。我们每天都会清理磁盘空间,清理旧的日志,以确保项目的顺利进行。黄线代表服务器元数据储存空间。在项目后期我们扩充了该磁盘,所以图表可见其向下波动。所有人执行的每一项操作,我们都可以在服务器监控到。

另外,我们为什么会在项目结束前五天或前一周的时候,去扩充metadata的磁盘空间呢?因为我们考虑到,大部分的UE艺术家,往往在项目结束前会进行大量提交,有可能导致系统卡顿和运行不畅。最终,我们选择扩充磁盘空间,也是避免了这一情况,成功为项目保驾护航,确保了项目的顺利完成。

P4Prometheus 概述

P4Prometheus是一个与Helix Core相集成的监控框架。管理员可以通过图中的一些图表,直观了解到服务器的运行状况,而不用去盯着那些死板的数字了。

通过实时监控服务器的运行状况,我们可以处理日志,并在Grafana面板上清楚地展示,以便于管理员实时了解。在监测一些实时指标时,我们也可以将其视作为一个系统预警,以有效地减缓意外的发生,并在问题产生之前就将其解决。

如需进一步了解,可扫描图中二维码免费下载,获取详细的安装和使用流程。

Helix Core与UnrealEngine的配置:适用于任何规模的安装基本知识和技巧

接下来,我们一起来了解大家比较关心的内容——Unreal Engine如何与Helix Core集成使用,也有一些基本知识要为大家介绍。

Typemaps

我们先来认识Typemaps。Typemaps是一个自定义文件,用于规定文件存入到Helix Server当中所对应的文件储存类型。

上图右侧的图表,包含了binary文件,也就是二进制文件。从事美术开发的人员都知道,二进制文件是不能合并的,这就会导致多人同时处理同一文件时,可能会产生工作冲突。

为了避免这一问题,有效地提升开发效率,我们引入了filetype modifier,也就是“+l”,我们叫exclusive lock,即文件的专属锁。如何理解呢?有了文件专属锁,一旦文件被某个用户检出(checkout),服务器将显示专属锁,防止其他的用户修改同一文件,避免工作浪费,从而提升工作效率。

当管理员在服务器端设置好Typemap后,用户在上传文件时,它就会自动根据该表分配文件的存储类型。上图中,我们还看到“+S2”的文件类型,什么意思呢?我们只保留最新的两个版本文件到服务器端,以节省磁盘空间。如果大家有需要的话,也可以参考设置。

我们提供的Typemap是一个标准模板,适用于UnrealEngine和Unity,下载后即可投入使用。进一步了解Typemap,欢迎咨询Perforce中国授权合作伙伴龙智。

如果需要更改Typemap,该怎么办?

Typemap设置后,如需更改,也可以进行实时更改,但不会影响已存到服务器现有版本的文件类型。如需更改现有的文件类型,可以使用P4 retype进行更改。

上图下方是一个示例,可知之前的 .uasset管理员设置的文件类型是binary,我们发现同时更改二进制文件可引发冲突后,对文件类型进行“+l”操作,那此后服务器当中的所有 .uasset文件类型都是“binary+l”。

.p4ignore文件

下面来看一下 .p4ignore。顾名思义,ignore就是“忽略”,它是在客户端上传文件时用于忽略特定文件的一项规则。

如何忽略?就是通过上图所示的这张表。对于文件路径或是相符的文件名称、扩展名,都可以通过该表进行忽略。

举例来说,如果将系统生成的文件上传到服务器,会非常占空间且无用,那么,我们就可以在上传之前将其忽略掉。管理员在设置好这个功能后,可以提交到我们的版本仓,这样用户在下载文件的时候,该ignore文件就会自动下载到本地的磁盘空间。然后,ignore规则就开始适用了。

当然,也有一个小bug。因为用户对版本仓都是有更改权限的,很可能存在文件误删或误改的情况。这个时候也没有关系,因为我们在服务器端还有控制管理。管理员可以在流规范(stream spec)中直接设置,进一步设置ignore规则。不过呢,相对于 .p4ignore,流规范中的ignore在通配符使用上相对比较局限。所以我们通过用户端的.p4ignore和服务器端的ignore设置,来进行双重管控,避免将不必要的文件上传到服务器。

权限及文件保护设置

接下来,我们谈谈权限管理。

  • 我们的IP至关重要,为了防止团队文件被未授权的人员或者第三方访问,管理员可以为整个服务器的用户或小组设置独立的专属权限。
  • Helix Core的权限控制非常细粒度,可以精确到每一个版本仓、每一个文件夹、每一个子文件夹、每一个特定文件或者特定的一个扩展名,这些全部都可以在protection table中进行设置。
  • 对于新加入项目组的用户,操作不太熟练,可能会出现误改或误删的情况,影响到项目进度。我们可以通过限制其访问范围来避免这一情况,也可以根据职位给予合适的权限和合适的文件路径。
  • 另外,在与第三方合作时,往往需要限制第三方的合作视野,我们也可以通过Helix Core进行很好地权限控制。

具体来认识一下protection table。它包含多个纵列,比如权限级别,它能够控制用户是否可以提交、下载、创建分支,以及能否查看特定路径的特定文件,包括文件名、文件内容等等。

下图是Project Titan项目中权限表的部分截图示例。

可以看到,这个开放项目在初始时,所有用户的权限都比较开放,但对于一些关键文件(比如11-16行),我们设置了“no open”,也就是说,对于这些文件,所有用户都是无法更改和删除的。此外,我们还可以限制访问的IP地址,确保只有在受信任的IP地址中,用户才能获得相应的访问权限。

备份及服务器还原点设置

再来了解一下还原点设置,我们称之为checkpoint。它记录了Helix Core服务器当中所有元数据的全部信息,包括谁、在什么时间、修改了什么版本、执行了什么操作。所含的信息比如:常见的变更列表、用户信息、标签、分支、工作请求等等,checkpoint都将其全部包含在内。

不过,我们在创建还原点时需要注意其对数据库性能的影响。因数据库大小的不同,锁住数据库的时长也不同。在服务区繁忙时会导致命令堆积,从而影响到服务器性能。因此,我们建议在服务器负载较低的时间段,比如夜间或凌晨,进行checkpoint的创建。另外呢,Helix Core的服务器部署包(SDP)也提供了自动化脚本,可以设置在夜间的某个时段,自动化创建checkpoint。

未完待续......

如需进一步了解,欢迎咨询Perforce中国授权合伙伙伴龙智,获取更多Helix Core管理员需要了解的基础知识与技巧。
官网: http://www.shdsd.com
电话:400-666-7732
邮箱:marketing@shdsd.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2190435.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论文理解【LLM-CV】—— 【MAE】Masked Autoencoders Are Scalable Vision Learners

文章链接:Masked Autoencoders Are Scalable Vision Learners代码:GitHub - facebookresearch/mae发表:CVPR 2022领域:LLM CV一句话总结:本文提出的 MAE 是一种将 Transformer 模型用作 CV backbone 的方法&#xff0c…

新闻推荐系统:Spring Boot的可扩展性

6系统测试 6.1概念和意义 测试的定义:程序测试是为了发现错误而执行程序的过程。测试(Testing)的任务与目的可以描述为: 目的:发现程序的错误; 任务:通过在计算机上执行程序,暴露程序中潜在的错误。 另一个…

csp-j模拟五补题报告

前言 今天第二题文件名把 r 写成 t 了 又跌出前10名了 白丢了好多分 &#xff08;“关于二进制中一的个数的研究与规律”这篇文章正在写&#xff09; 第一题 牛奶(milk) 我的代码&#xff08;AC&#xff09; #include<bits/stdc.h> #define ll long long #define fi …

Acwing 线性DP

状态转移方程呈现出一种线性的递推形式的DP&#xff0c;我们将其称为线性DP。 Acwing 898.数字三角形 实现思路&#xff1a; 对这个三角形的数字进行编号&#xff0c;状态表示依然可以用二维表示&#xff0c;即f(i,j),i表示横坐标&#xff08;横线&#xff09;&#xff0c;j表…

pygame--超级马里奥(万字详细版)

超级马里奥点我下载https://github.com/marblexu/PythonSuperMario 1.游戏介绍 小时候的经典游戏&#xff0c;代码参考了github上的项目Mario-Level-1&#xff0c;使用pygame来实现&#xff0c;从中学习到了横版过关游戏实现中的一些处理方法。原项目实现了超级玛丽的第一个小…

Windows应急响应-Auto病毒

文章目录 应急背景分析样本开启监控感染病毒查看监控分析病毒行为1.autorun.inf分析2.异常连接3.进程排查4.启动项排查 查杀1.先删掉autorun.inf文件2.使用xuetr杀掉进程3.启动项删除重启排查入侵排查正常流程 应急背景 运维人员准备通过windows共享文档方式为公司员工下发软件…

【Java】Java面试题笔试

[赠送]面试视频指导简历面试题 Java面试笔试题题库华为 java笔试面试题2014.files 就业相关java 面试题 面试题库 视频笔记 java笔试题大集合及答案 java面试书籍源码 java算法大全源码包8张图解 java.docx25个经典的Spring面试问答.docx 25个经典的Spring面试问答.docx 100家大…

知识图谱入门——10:使用 spaCy 进行命名实体识别(NER)的进阶应用:基于词袋的实体识别与知识抽取

在构建知识图谱的过程中&#xff0c;如何准确地识别和提取实体是关键。spaCy 提供了强大的命名实体识别&#xff08;NER&#xff09;功能&#xff0c;我们可以结合自定义规则和工具来实现更精准的实体抽取。本文将详细探讨如何在 spaCy 中实现自定义实体抽取&#xff0c;包括使…

OpenAI 推出 Canvas 工具,助力用户与 ChatGPT 协作写作和编程

OpenAI 近日推出了一款名为 Canvas 的新工具&#xff0c;旨在帮助用户更高效地与 ChatGPT 协作进行写作与编程。 Canvas 允许用户在一个独立窗口中与 ChatGPT 实时协作修改内容。无论是改进文本、调整语言风格、审查代码&#xff0c;还是在不同编程语言间转换&#xff0c;Canv…

Js逆向分析+Python爬虫结合

JS逆向分析Python爬虫结合 特别声明&#x1f4e2;&#xff1a;本教程只用于教学&#xff0c;大家在使用爬虫过程中需要遵守相关法律法规&#xff0c;否则后果自负&#xff01;&#xff01;&#xff01; 完整代码地址Github&#xff1a;https://github.com/ziyifast/ziyifast-co…

自闭症干预寄宿学校:为孩子搭建沟通与社交的桥梁

在探索自闭症儿童教育的广阔天地里&#xff0c;一所优秀的寄宿学校不仅是知识的殿堂&#xff0c;更是孩子们学习沟通与社交技能的桥梁。位于广州的星贝育园自闭症儿童寄宿制学校&#xff0c;正是这样一所专注于为自闭症儿童提供全面、个性化教育服务的机构&#xff0c;它以其独…

Linux-du命令使用方法

Linux-du&#xff08;disk useage&#xff09;命令 du 命令用于查看文件和目录占用的磁盘空间。 du [选项] [文件或目录]-h (human-readable)&#xff1a; 将输出格式转为人类可读的形式&#xff0c;使用 KB、MB 等单位。 du -h /path/to/directory1.5M /path/to/directory…

Pikachu-SSRF(curl / file_get_content)

SSRF SSRF是Server-side Request Forge的缩写&#xff0c;中文翻译为服务端请求伪造。产生的原因是由于服务端提供了从其他服务器应用获取数据的功能且没有对地址和协议等做过滤和限制。常见的一个场景就是&#xff0c;通过用户输入的URL来获取图片。这个功能如果被恶意使用&am…

Linux 之 安装软件、GCC编译器、Linux 操作系统基础

安装软件、GCC编译器、Linux 操作系统基础 学习任务&#xff1a; 安装 Vmware虚拟机、掌握Ubuntu 系统的使用认识 Ubuntu 操作系统的终端和 Shell掌握软件安装、文件系统、掌握磁盘管理与解压缩掌握 VIM 编辑器、Makefile 基本语法熟悉 Linux 常见指令操作 安装好开发软件&…

力扣189.轮转数组

给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步: [5,6,7,1,2,3,4…

数据库(MySQL):使用命令从零开始在Navicat创建一个数据库及其数据表(一).创建基础表

一. 使用工具和命令 1.1 使用的工具 Navicat Premium 17 &#xff1a;“Navicat”是一套可创建多个连接的数据库管理工具。 MySQL版本8.0.39 。 1.2 使用的命令 Navicat中使用的命令 命令命令解释SHOW DATABASES&#xff1b;展示所有的数据库CREATE DATABASE 数据库名称; 创…

10以内数的分解

// 10以内数的分解.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 //#include <iostream> using namespace std; int main(int argc, char* argv[]){for (int i 2; i < 10; i){for (int j 1; j < i; j){printf("%d%d%d ",j…

CSS样式基础样式选择器(案例+代码实现+效果图)

目录 1.css样式的规则 2.引入css样式的方式 1)行内式 2)内嵌式 3)外链式 1-link导入 2-import导入 4)总 3.css基础选择器 1)标签选择器 案例&#xff1a;使用标签选择器编写一个圆 1.代码 2.效果 2)类选择器 案例&#xff1a;使用类选择器为div添加背景色 1.代码 2.效果 3)id…

深度探索Kali Linux的精髓与实践应用

Kali Linux简介 Kali Linux作为全球网络安全领域的首选操作系统之一&#xff0c;其强大的功能性及广泛的适用范围令人瞩目。除了上述基础介绍外&#xff0c;让我们深入探究Kali Linux的几个关键特性及其在实际操作中的具体应用案例。 Kali工具集成&#xff1a;全面的安全工具…

加湿器模块(5V STM32)

目录 一、介绍 二、模块原理 1.原理图 2.引脚描述 3.尺寸介绍 三、程序设计 main.c文件 jsq.h文件 jsq.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 加湿器模块通常是指在智能家居设备中负责增加室内空气湿度的部分&#xff0c;这种模块设计旨在改善干燥环…