過去12個月以來,我們已經見證了Docker容器技術在游戲服務器領域諸多激動人心的發展態勢。
這款核心產品在成熟度水平方面已經迎來顯著提升,而用戶基礎也實現可觀增長,同時亦出現了一部分能夠解決多種關鍵性阻礙的先進功能、能夠幫助游戲服務器以及其它較為嚴苛的應用類型實現在容器環境中的運行。我們還迎來了一系列激動人心的新型產品及技術發展成果,這也進一步證明了容器技術在游戲服務器領域的可觀發展潛力。
作為一名熱愛游戲產業的軟件工程師,我一直把自己的業余時間用在同游戲相關的項目開發工作身上。我還就游戲服務器中的自動化機制進行過一番思考,并將借今天這篇文章與大家探討過去12個月當中Docker世界給游戲服務器乃至整個游戲業界帶來的影響。
“2015年在游戲服務器領域出現了眾多激動人心的@Docker開發成果。”——@brendanfosberry
盡管容器技術已經被世界范圍內的眾多Web應用所采納,但其普及速度在游戲行業則仍顯得比較遲緩。
從傳統角度講,游戲行業一般高度關注截止時間與交付能力,而不太重視可復用代碼、開發人員體驗或者代碼庫壽命。這類以交付為關注重點的開發工作能夠顯著實現創新,但創新范疇往往被限制在核心產品領域之內。有鑒于此,游戲行業在其核心優勢層面拿出了眾多激動人心的成果——包括人工智能、渲染、物理效果、分布式模擬與預測等等,但在周邊或者附帶服務領域卻沒能實現多少值得一提的新技術。
正因為如此,Web服務行業在公共API及工具、容器技術乃至新型語言與框架領域一直保持著領先優勢。而將其與游戲行業中典型的閉源編譯產品相結合,我們就能清楚地看到Docker及其它容器技術為什么會在擁有可觀適應度的情況下仍然未能被游戲業所廣泛接受。事實上,容器系統確實能夠協助解決各個行業當中的常見問題,特別是游戲服務器領域中的問題,包括可移植能力、關聯性以及資源控制等等。
容器能夠解決游戲行業中的諸多難題,但其未能被廣泛接納亦是有原因的。
這并不是說Docker并沒能找到自己在游戲行業中的切入點。Improbable.io就已經開始逐步利用Docker支撐其模擬平臺,而就在今年早些時候EA公司亦就自身對Docker的應用進行了說明。在這兩個案例當中,Docker都負責對游戲服務器者托管——但在托管的同時,亦負責提供一套高度自動化的實現平臺。
Thomas Shaw曾在DockerCon 2015大會上做出過精彩的演講,探討如何利用Docker推動文化變革。Demonware公司利用Docker工具集作為其開發流程中的組成部分,旨在支持長期運行項目并減少不同項目之間跨越性關聯性所引發的問題數量。這無疑是一種值得借鑒的將Docker應用在廣泛相關場景之下的實例,意味著我們并不需要過多考慮其管理的到底是何種最終產品或者托管方案。
在Docker中托管游戲服務器的現實障礙
正如我們所見,Docker已經被游戲行業所接納,并搭配通用型工作流程或者作為集中性高自動化托管環境容納應用程序的獨立運行。這些重要進展意味著各游戲服務器能夠被作為一個整體,并通過合適的容器化調整實現種種顯著收益。
就目前而言,游戲服務器擁有以下幾種重要表現形式:
自主托管。EA等大型廠商的運營思路導致各部門很難運行屬于自己的游戲服務器,但他們可以向游戲玩家提供一套強大的服務器資源池以承載各類公共與私人競賽平臺。這種同質化游戲服務器環境意味著容器化技術能夠輕松進行部署,并為各游戲服務器帶來高度自動化水平。不過這同時意味著通過mod以及定制化游戲建模實現創新的空間被大大壓縮。
非托管。在非大型多人游戲當中,部分游戲玩家會在短時間內充當游戲主機,這意味著游戲廠商不需要為其提供專門的游戲服務器。在這類情況下,該服務器通常可被集成至游戲客戶端當中,而容器化技術則很難再有用武之地。由于游戲以本地方式進行托管,因此游戲玩家能夠對內容擁有更充裕的控制空間。
混合型。在大多數情況下,游戲服務器都會由專門的服務器充當并供用戶使用,但開發人員也可以提供一整套官方服務器資源池,以供游戲玩家獲得更理想的游玩體驗。在專用服務器當中,用戶能夠以任何適合自己的方式進行游戲內容托管,而容器化選項也能夠發揮重要作用。這也是我們應當高度關注的使用方式。
以上提到的幾種不同使用模式會極大影響游戲服務器管理員的工作內容。很明顯,在托管環境當中,這很像是由大量自動運行服務器所支撐起的DevOps團隊。
而在使用專用服務器時,用戶群體則往往變得更加多樣化。除了傳統托管平臺——包括開發商自身的平臺以及某些獨立組織提供的平臺——之外,大家往往還能夠看到一些由小型游戲團隊及公會托管的,由數臺服務器構成的運行平臺或者獨立承載設備。當然,也有一些由個別玩家運行的臨時性服務器存在。
這些團隊之間的技術水平往往存在著巨大差異,而這會顯著影響Docker等技術方案的具體實現效果。設置過程越簡單、管理員的技術水平越低,那么用戶在使用容器化等非標準化托管方案時的體驗也就越差。
考慮到這一點,我們也就理解了為什么Docker往往無法成為游戲服務器技術體系中的常見組成部分。由于不同游戲服務器需要匹配不同的持久性、配置與網絡架構選項,因此其復雜程度也相當之高,這意味著游戲服務器往往會給容器技術帶來諸多限制條件。
“游戲服務器往往會給容器技術帶來諸多限制條件。”——@brendanfosberry
雖然我們能夠利用容器完美解決很多與依賴性相關的問題,但其它問題卻往往很難從容器中找到答案。一般來講,用戶比較喜歡利用IP地址接入特定游戲服務器,而且開發人員通常并不會將高可用性作為游戲服務器設計中的必要組成部分。
這些問題關乎標準化、復雜性以及具體理解,也明確解答了為什么很少有人愿意利用容器作為游戲服務器托管平臺。盡管如此,仍有一部分早期容器鏡像以此為目標,旨在實現包括《我的世界》以及其它一些游戲的服務器運行平臺。
容器技術確實能夠解決多種常見問題,包括隔離性、資源控制、速度保障、可移植能力以及其它各類游戲服務器需要考慮的因素。目前大多數游戲服務器托管廠商都以速度/成本指標作為優先考量,意味著其屬于一種成本驅動型解決方案。而容器自身具備的潛在效率與速度優勢則讓容器化成為游戲行業無法忽略的重要選項,只不過在廣泛應用方面仍存在著一系列障礙。
2015年內最具顛覆性的Docker變化
在過去12個月當中,核心Docker產品及其它相關方案已經迎來了巨大變化,而這也會給容器化機制在游戲服務器領域的表現產生顯著影響。
CRIU
今年年內容器技術最引人注目的變化莫過于對CRIU的支持能力,DockerCon 2015大會就完美展示了《雷神之錘》的遷移案例。
“從游戲角度來看,@Docker最顯著的變化就是面向@_criu_的支持能力。”
作為早期演示案例,其證明了應如何將CRIU作為容器基礎設施的組成部分,從而幫助我們在最低影響前提下對運行中的特定應用進行實時遷移。CRIU應該會通過runC庫成為Docker核心功能中的組成部分。
由于CRIU能夠保留內存數據、進程甚至是開放接口,因此其應該可以同各類不同游戲服務器乃至應用程序類型相兼容。這意味著大多數現代游戲服務器都可以借此輕松從一臺主機遷移至另一臺,甚至實現跨數據中心遷移——而且除了一些意料之外的延遲,接入游戲服務器的玩家仍能繼續游玩。
很明顯,這種設計思路同不少傳統游戲服務器完全不同,特別是那些高度依賴于相關服務器網絡架構的集群化及其它典型大規模Web服務。有鑒于此,CRIU可能無法與某些游戲服務器直接兼容。
Docker插件
Weave、Calico以及其它一些容器網絡技術已經擁有一段時間的發展過程。然而,隨著Docker插件框架的出現,上述技術恐怕將逐步退出歷史舞臺。強大的插件支持能夠雖然值得贊賞,但其持續性往往很難滿足游戲服務器對于核心功能的要求。
不少游戲服務器會利用主服務器清單進行自我注冊,并對其IP地址以及具體端口進行自動化報告。這意味著各客戶端能夠自動定位并接入游戲服務器,但同時也意味著其設立了一種容器范例所無法兼容的簡單網絡堆棧架構。
通過使用網絡插件,我們能夠發揮路由方案的固有優勢,使得容器IP在這套基礎設施中成為優先項目。這不僅可以顯著簡化動態路由機制的實現方式,同時也能夠帶來額外的助益,使得IP地址在整套堆棧內自由遷移以保持同游戲服務器實例的持續連接。這種特性對于那些通過連接信息保存IP及端口的簡單服務器實現方法而言非常重要。
更為重要的是,通過使用Docker網絡插件,我們能夠將CRIU功能集納入到更為廣泛的游戲服務器當中,從而實現更加復雜的網絡架構。
Rancher與SpotInst
去年11月,Rancher發布了SpotInst集成方案。這套集成方案能夠對SpotInst等服務的復雜性進行抽象化處理,從而實現任意類型基礎設施的托管任務——這對于以性能表現為第一訴求的游戲服務器行業而言不啻為一大福音。
AWS Spot實例與谷歌Preemptible虛擬機都以臨時性方式為基礎使用備用集群容量,且有權在通知發布后的短時間內進行虛擬機的反激活與移除。利用這種低成本、低正常運行時間保障的主機往往很合適游戲服務器的既定需要,因為游戲服務器一般對于正常運行時間并不會做出太高要求。事實上,重啟與連接頻繁斷開幾乎成為游戲服務器中的一種常態。
而在SpotInst集成方案的幫助下,Rancher用戶能夠立足于由動態spot實例構成的Docker集群實現容器托管能力,且無需擔心由容器遷移及主機替換管理所帶來的復雜性因素。
《Docker世界》(Dockercraft)
這是一套源自《我的世界》的Docker mod,首次亮相于DockerCon歐洲大會。與游戲相關的討論與自主修改一直極具人氣,《Docker世界》當然也不例外。受到《Docker毀滅戰士》的啟發,這套mod允許用戶利用游戲內置的各種方塊素材創建并控制容器環境。
我們永遠樂于見證各類能夠對復雜系統進行整合與控制的新型途徑。就個人而言,我迫不及待地希望見證Docker版本《太空工程師》的出現——盡管這類mod的具體使用仍然存在諸多限制。而從游戲服務器的角度出發,這能夠使容器設計原則變得更加簡單,并以深入淺出的方式幫助喜愛游戲的朋友們了解容器方案。
這一切對2016年意味著什么?
很明顯,容器技術將在游戲行業中得到更為普遍的接納,而Docker產品與整個容器生態系統的演進也將給游戲服務器帶來巨大助益。我們可以高度期待著利用Docker作為平臺組成部分的更多大規模自我托管廠商加入到EA等企業的行列中來,而游戲開發團隊也將繼續把Docker納入到自身開發流程。
“我們可以期待在2016年中看到更多游戲廠商將Docker作為其平臺的組成部分。”
而我個人更加關注的其實是CRIU、SpotInst以及其它網絡插件在整體公共游戲服務器托管行業中的實際表現。這些要素都將在該高度競爭的市場當中帶來巨大顛覆,不過必須承認其廣泛普及仍然面臨著一些障礙。
Docker會帶來陡峭的學習曲線
不少游戲服務器管理員只了解Windows環境,而且其中相當一部分甚至只知道基礎性的管理與托管知識以實現服務器的啟動與運行。Windows支持能力已經顯著緩和了容器技術的學習曲線,而《Docker世界》等工具的出現也將幫助人們快速了解其核心概念。
不存在兩臺一模一樣的游戲服務器
不同的游戲服務器擁有著不同的應用與操作系統依賴性,而Docker正是一款能夠解決此類難題的完美工具。
盡管有助于廣泛解決應用程序依賴性問題,但不同游戲服務器之間的運行方式仍然存在顯著差異。某些游戲存在著交互性控制臺,也有一些會面向stdout進行寫入。不同的服務器采用不同的配置方案,且對持續性的要求也有所區別。
閉源
絕大多數游戲服務器承載閉源應用程序,而且在默認情況下無法輕易實現容器化。另外,根據社區要求實現標準化也存在著極高難度。
隨著Docker在游戲行業當中獲得越來越廣泛的普及水平,希望這一切能夠推動游戲服務器實現進入更具兼容性的新階段。
總結陳詞
縱觀新的一年,我們可以期待看到容器技術的全面改進。將有更多Docker工具與定制化容器服務逐步出爐以幫助我們降低學習成本; 另外,隨著大型廠商對容器的重視,游戲服務器也應當在設計方面向容器兼容性做出傾斜。
作為當前的主要障礙,標準化與實用性缺失問題仍然嚴重影響到容器技術在游戲行業中的普及,而這一切都能夠通過游戲服務器在工具與常見容器化問題的抽象化處理方面的努力得到緩解。我個人也在通過gscs項目解決此類難題——這是一套容器規范,旨在降低對不同游戲服務器進行容器化調整時的復雜性。
只要擁有良好的標準化水平與跨平臺容器兼容能力,我們甚至能夠看到容器方案成為未來專用游戲服務器的標準配置。那么大家在新的一年當中期待著怎樣的游戲服務器轉變態勢呢?在各位看來,游戲行業中的顛覆性機制會以怎樣的方式于何時出現?您認為哪些項目將給游戲服務器托管甚至是整個游戲行業帶來巨大變革?
我期待著新的一年中游戲服務器領域能夠迎來更多新鮮元素,現在也是時候將容器技術納入游戲體系了。