日前,Perforce攜手合作伙伴龍智一同亮相Unreal Fest 2024上海站,分享Helix Core版本控制系統(tǒng)及其協(xié)作套件的強(qiáng)大功能與最新動(dòng)態(tài),助力游戲創(chuàng)意產(chǎn)業(yè)加速前行。
Perforce解決方案工程師Kory Luo在活動(dòng)主會(huì)場(chǎng),帶來(lái)《Perforce Helix Core+UnrealEngine工作流程與使用實(shí)踐》的主題演講,分享Helix Core在ProjectTitan項(xiàng)目中的關(guān)鍵角色、與UnrealEngine的配置技巧、常見(jiàn)的使用誤區(qū)及解決辦法、以及Helix Core的最新功能與應(yīng)用等重磅干貨。
此次演講的精華回顧,我們將分為上下兩期為您呈現(xiàn)(內(nèi)容有精簡(jiǎn)優(yōu)化);本期為(上)期,敬請(qǐng)持續(xù)關(guān)注。
大家好!我叫Kory,來(lái)自Perforce Software,很榮幸能參加這次Unreal Fest上海站的活動(dòng)。相信大家在活動(dòng)期間過(guò)得非常充實(shí),也希望大家能在此找到自己所需要的新技術(shù)和新功能。
接下來(lái),我將為大家介紹Helix?Core版本控制系統(tǒng)及其與UnrealEngine相輔相成的工作流程和最佳使用實(shí)踐。
Helix Core和ProjectTitan:關(guān)于這場(chǎng)4000+人參與的全球藝術(shù)盛會(huì)的細(xì)節(jié)
話不多說(shuō),首先來(lái)做個(gè)小調(diào)查:大家是否了解ProjectTitan?或者是否曾參與到這個(gè)藝術(shù)創(chuàng)作中來(lái)?
ProjectTitan是由Epic Games發(fā)起一個(gè)UE藝術(shù)盛會(huì),對(duì)全球的UE藝術(shù)家開(kāi)放。該項(xiàng)目提供一個(gè)基本開(kāi)放的世界觀框架,鼓勵(lì)所有參與者共同協(xié)作,去創(chuàng)造一個(gè)嶄新的世界。在這個(gè)64平方公里的虛擬土地上,有各種地貌,比如濕地、沙漠、森林等,參與者可以在其中創(chuàng)建各類(lèi)角色、材料、道具和效果等等。
Helix Core作為這次項(xiàng)目的版本控制軟件,負(fù)責(zé)存儲(chǔ)ProjectTitan當(dāng)中的所有數(shù)據(jù)信息,助力協(xié)同完成了這場(chǎng)創(chuàng)作。該項(xiàng)目歷時(shí)10周,從3月份一直持續(xù)到6月份。項(xiàng)目結(jié)束時(shí),ProjectTitan一共有4122名用戶(hù)參與,協(xié)同創(chuàng)建了17000個(gè)變更列表。項(xiàng)目結(jié)束后,下載到本地電腦會(huì)占據(jù)75GB的磁盤(pán)空間,服務(wù)器端儲(chǔ)存的版本控制文件一共有350GB。
ProjectTitan 服務(wù)器規(guī)格
首先,我們來(lái)了解下ProjectTitan中的服務(wù)器規(guī)格。
為了方便Epic Games和Perforce去管理構(gòu)建這樣一個(gè)項(xiàng)目,初始的服務(wù)器規(guī)格其實(shí)非常小,性能相對(duì)較弱,部署在AWS上,使用的是AWS C5.large,只有兩個(gè)VirtualCPU和4GB的RAM。
但是當(dāng)項(xiàng)目開(kāi)始運(yùn)行后,參與者變得非常多。第一周大概有800多個(gè)用戶(hù),第二周就激增到1600個(gè)用戶(hù)。如此一來(lái),小規(guī)格的服務(wù)器就不再適用了。于是,我們相應(yīng)擴(kuò)充了服務(wù)器規(guī)格,采用m5.2xlarge,內(nèi)存為32GB,這個(gè)規(guī)格支撐了項(xiàng)目運(yùn)行的大部分時(shí)間。
在項(xiàng)目后期,我們觀察到RAM的峰值達(dá)到了32GB。為了確保項(xiàng)目的持續(xù)順利運(yùn)行,保障客戶(hù)體驗(yàn),我們將配置升級(jí)到m5.4xlarge。另外,關(guān)于我們的儲(chǔ)存空間,root volume有50GB;用于存儲(chǔ)日志的hxlogs,也是50GB;用于存儲(chǔ)元數(shù)據(jù)的hxmetadata,有80GB;hxdepot是用于存儲(chǔ)版本控制軟件的實(shí)體文件,大概為1T。
ProjectTitan 服務(wù)器拓?fù)浣Y(jié)構(gòu)
下面來(lái)看一下ProjectTitan服務(wù)器的拓?fù)浣Y(jié)構(gòu),了解我們是如何支撐4000多名用戶(hù)在AWS上面完美地完成這場(chǎng)藝術(shù)創(chuàng)作的。
我們有一個(gè)主服務(wù)器在英國(guó)倫敦,有三個(gè)代理服務(wù)器,其中兩個(gè)在美國(guó)的維吉尼亞和加利福尼亞,還有一個(gè)在韓國(guó)首爾,以便亞太地區(qū)的用戶(hù)能夠更好地與Helix Core進(jìn)行交互、下載文件。我們代理服務(wù)器的安裝非常簡(jiǎn)單,對(duì)配置的要求也相對(duì)較低。其配置是主服務(wù)器初始時(shí)的最低配版本,完全能夠支持大量用戶(hù)的訪問(wèn)和下載。
整個(gè)ProjectTitan服務(wù)器的部署,都是通過(guò)我們的SDP(Server Deployment Package)服務(wù)器部署包進(jìn)行安裝的。使用該部署包不需要支付任何費(fèi)用,也無(wú)需注冊(cè)任何信息。
如果您對(duì)Helix Core的部署有任何問(wèn)題,歡迎咨詢(xún)Perforce中國(guó)授權(quán)合作伙伴——龍智,我們的專(zhuān)業(yè)服務(wù)團(tuán)隊(duì)可為您提供相應(yīng)指導(dǎo)。
ProjectTitan 服務(wù)器監(jiān)控功能
接下來(lái),我們來(lái)了解ProjectTitan服務(wù)器的監(jiān)控功能。我們使用P4Prometheus來(lái)實(shí)時(shí)監(jiān)察,了解服務(wù)器的運(yùn)行狀況。
從上圖的第一張圖表中,可以看出CPU的使用率不足25%,處理指令非常絲滑,沒(méi)有任何問(wèn)題。
第二張圖表中,可以看到內(nèi)存峰值在32GB上下浮動(dòng),我們也是觀察到這個(gè)變動(dòng)之后,才繼續(xù)升級(jí)了服務(wù)器的規(guī)格。
第三張圖表可以看到服務(wù)器的負(fù)載情況,每天有多少個(gè)用戶(hù)訪問(wèn)服務(wù)器,每個(gè)時(shí)段有多少個(gè)指令在服務(wù)器進(jìn)行交互,這些都是可以直觀呈現(xiàn)的。
最后一張圖表,用于監(jiān)察磁盤(pán)空間。我們每天都會(huì)清理磁盤(pán)空間,清理舊的日志,以確保項(xiàng)目的順利進(jìn)行。黃線代表服務(wù)器元數(shù)據(jù)儲(chǔ)存空間。在項(xiàng)目后期我們擴(kuò)充了該磁盤(pán),所以圖表可見(jiàn)其向下波動(dòng)。所有人執(zhí)行的每一項(xiàng)操作,我們都可以在服務(wù)器監(jiān)控到。
另外,我們?yōu)槭裁磿?huì)在項(xiàng)目結(jié)束前五天或前一周的時(shí)候,去擴(kuò)充metadata的磁盤(pán)空間呢?因?yàn)槲覀兛紤]到,大部分的UE藝術(shù)家,往往在項(xiàng)目結(jié)束前會(huì)進(jìn)行大量提交,有可能導(dǎo)致系統(tǒng)卡頓和運(yùn)行不暢。最終,我們選擇擴(kuò)充磁盤(pán)空間,也是避免了這一情況,成功為項(xiàng)目保駕護(hù)航,確保了項(xiàng)目的順利完成。
P4Prometheus 概述
P4Prometheus是一個(gè)與Helix Core相集成的監(jiān)控框架。管理員可以通過(guò)圖中的一些圖表,直觀了解到服務(wù)器的運(yùn)行狀況,而不用去盯著那些死板的數(shù)字了。
通過(guò)實(shí)時(shí)監(jiān)控服務(wù)器的運(yùn)行狀況,我們可以處理日志,并在Grafana面板上清楚地展示,以便于管理員實(shí)時(shí)了解。在監(jiān)測(cè)一些實(shí)時(shí)指標(biāo)時(shí),我們也可以將其視作為一個(gè)系統(tǒng)預(yù)警,以有效地減緩意外的發(fā)生,并在問(wèn)題產(chǎn)生之前就將其解決。
Helix Core與UnrealEngine的配置:適用于任何規(guī)模的安裝基本知識(shí)和技巧
接下來(lái),我們一起來(lái)了解大家比較關(guān)心的內(nèi)容——UnrealEngine如何與Helix Core集成使用,也有一些基本知識(shí)要為大家介紹。
Typemaps
我們先來(lái)認(rèn)識(shí)Typemaps。Typemaps是一個(gè)自定義文件,用于規(guī)定文件存入到Helix Server當(dāng)中所對(duì)應(yīng)的文件儲(chǔ)存類(lèi)型。
上圖右側(cè)的圖表,包含了binary文件,也就是二進(jìn)制文件。從事美術(shù)開(kāi)發(fā)的人員都知道,二進(jìn)制文件是不能合并的,這就會(huì)導(dǎo)致多人同時(shí)處理同一文件時(shí),可能會(huì)產(chǎn)生工作沖突。
為了避免這一問(wèn)題,有效地提升開(kāi)發(fā)效率,我們引入了filetype modifier,也就是“+l”,我們叫exclusive lock,即文件的專(zhuān)屬鎖。如何理解呢?有了文件專(zhuān)屬鎖,一旦文件被某個(gè)用戶(hù)檢出(checkout),服務(wù)器將顯示專(zhuān)屬鎖,防止其他的用戶(hù)修改同一文件,避免工作浪費(fèi),從而提升工作效率。
當(dāng)管理員在服務(wù)器端設(shè)置好Typemap后,用戶(hù)在上傳文件時(shí),它就會(huì)自動(dòng)根據(jù)該表分配文件的存儲(chǔ)類(lèi)型。上圖中,我們還看到“+S2”的文件類(lèi)型,什么意思呢?我們只保留最新的兩個(gè)版本文件到服務(wù)器端,以節(jié)省磁盤(pán)空間。如果大家有需要的話,也可以參考設(shè)置。
我們提供的Typemap是一個(gè)標(biāo)準(zhǔn)模板,適用于UnrealEngine和Unity,下載后即可投入使用。進(jìn)一步了解Typemap,歡迎咨詢(xún)Perforce中國(guó)授權(quán)合作伙伴龍智。
如果需要更改Typemap,該怎么辦?
Typemap設(shè)置后,如需更改,也可以進(jìn)行實(shí)時(shí)更改,但不會(huì)影響已存到服務(wù)器現(xiàn)有版本的文件類(lèi)型。如需更改現(xiàn)有的文件類(lèi)型,可以使用P4 retype進(jìn)行更改。
上圖下方是一個(gè)示例,可知之前的 .uasset管理員設(shè)置的文件類(lèi)型是binary,我們發(fā)現(xiàn)同時(shí)更改二進(jìn)制文件可引發(fā)沖突后,對(duì)文件類(lèi)型進(jìn)行“+l”操作,那此后服務(wù)器當(dāng)中的所有.uasset文件類(lèi)型都是“binary+l”。
.p4ignore文件
下面來(lái)看一下 .p4ignore。顧名思義,ignore就是“忽略”,它是在客戶(hù)端上傳文件時(shí)用于忽略特定文件的一項(xiàng)規(guī)則。
如何忽略?就是通過(guò)上圖所示的這張表。對(duì)于文件路徑或是相符的文件名稱(chēng)、擴(kuò)展名,都可以通過(guò)該表進(jìn)行忽略。
舉例來(lái)說(shuō),如果將系統(tǒng)生成的文件上傳到服務(wù)器,會(huì)非常占空間且無(wú)用,那么,我們就可以在上傳之前將其忽略掉。管理員在設(shè)置好這個(gè)功能后,可以提交到我們的版本倉(cāng),這樣用戶(hù)在下載文件的時(shí)候,該ignore文件就會(huì)自動(dòng)下載到本地的磁盤(pán)空間。然后,ignore規(guī)則就開(kāi)始適用了。
當(dāng)然,也有一個(gè)小bug。因?yàn)橛脩?hù)對(duì)版本倉(cāng)都是有更改權(quán)限的,很可能存在文件誤刪或誤改的情況。這個(gè)時(shí)候也沒(méi)有關(guān)系,因?yàn)槲覀冊(cè)诜?wù)器端還有控制管理。管理員可以在流規(guī)范(stream spec)中直接設(shè)置,進(jìn)一步設(shè)置ignore規(guī)則。不過(guò)呢,相對(duì)于.p4ignore,流規(guī)范中的ignore在通配符使用上相對(duì)比較局限。所以我們通過(guò)用戶(hù)端的.p4ignore和服務(wù)器端的ignore設(shè)置,來(lái)進(jìn)行雙重管控,避免將不必要的文件上傳到服務(wù)器。
權(quán)限及文件保護(hù)設(shè)置
接下來(lái),我們談?wù)剻?quán)限管理。
我們的IP至關(guān)重要,為了防止團(tuán)隊(duì)文件被未授權(quán)的人員或者第三方訪問(wèn),管理員可以為整個(gè)服務(wù)器的用戶(hù)或小組設(shè)置獨(dú)立的專(zhuān)屬權(quán)限。
Helix Core的權(quán)限控制非常細(xì)粒度,可以精確到每一個(gè)版本倉(cāng)、每一個(gè)文件夾、每一個(gè)子文件夾、每一個(gè)特定文件或者特定的一個(gè)擴(kuò)展名,這些全部都可以在protection table中進(jìn)行設(shè)置。
對(duì)于新加入項(xiàng)目組的用戶(hù),操作不太熟練,可能會(huì)出現(xiàn)誤改或誤刪的情況,影響到項(xiàng)目進(jìn)度。我們可以通過(guò)限制其訪問(wèn)范圍來(lái)避免這一情況,也可以根據(jù)職位給予合適的權(quán)限和合適的文件路徑。
另外,在與第三方合作時(shí),往往需要限制第三方的合作視野,我們也可以通過(guò)Helix Core進(jìn)行很好地權(quán)限控制。
具體來(lái)認(rèn)識(shí)一下protection table。它包含多個(gè)縱列,比如權(quán)限級(jí)別,它能夠控制用戶(hù)是否可以提交、下載、創(chuàng)建分支,以及能否查看特定路徑的特定文件,包括文件名、文件內(nèi)容等等。
下圖是ProjectTitan項(xiàng)目中權(quán)限表的部分截圖示例。
可以看到,這個(gè)開(kāi)放項(xiàng)目在初始時(shí),所有用戶(hù)的權(quán)限都比較開(kāi)放,但對(duì)于一些關(guān)鍵文件(比如11-16行),我們?cè)O(shè)置了“no open”,也就是說(shuō),對(duì)于這些文件,所有用戶(hù)都是無(wú)法更改和刪除的。此外,我們還可以限制訪問(wèn)的IP地址,確保只有在受信任的IP地址中,用戶(hù)才能獲得相應(yīng)的訪問(wèn)權(quán)限。
備份及服務(wù)器還原點(diǎn)設(shè)置
再來(lái)了解一下還原點(diǎn)設(shè)置,我們稱(chēng)之為checkpoint。它記錄了Helix Core服務(wù)器當(dāng)中所有元數(shù)據(jù)的全部信息,包括誰(shuí)、在什么時(shí)間、修改了什么版本、執(zhí)行了什么操作。所含的信息比如:常見(jiàn)的變更列表、用戶(hù)信息、標(biāo)簽、分支、工作請(qǐng)求等等,checkpoint都將其全部包含在內(nèi)。
不過(guò),我們?cè)趧?chuàng)建還原點(diǎn)時(shí)需要注意其對(duì)數(shù)據(jù)庫(kù)性能的影響。因數(shù)據(jù)庫(kù)大小的不同,鎖住數(shù)據(jù)庫(kù)的時(shí)長(zhǎng)也不同。在服務(wù)區(qū)繁忙時(shí)會(huì)導(dǎo)致命令堆積,從而影響到服務(wù)器性能。因此,我們建議在服務(wù)器負(fù)載較低的時(shí)間段,比如夜間或凌晨,進(jìn)行checkpoint的創(chuàng)建。另外呢,Helix Core的服務(wù)器部署包(SDP)也提供了自動(dòng)化腳本,可以設(shè)置在夜間的某個(gè)時(shí)段,自動(dòng)化創(chuàng)建checkpoint。
未完待續(xù)......
-
控制器
+關(guān)注
關(guān)注
112文章
16376瀏覽量
178225 -
游戲引擎
+關(guān)注
關(guān)注
0文章
6瀏覽量
1437 -
版本管理
+關(guān)注
關(guān)注
0文章
7瀏覽量
174 -
版本控制
+關(guān)注
關(guān)注
0文章
14瀏覽量
64
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論