【編者按】容器技術是一種羽量級虛擬化技術,能夠以很細的細微性,虛擬化獨立的系統運行環境。 這就意味著,一台物理的伺服器,或者是一台雲上面的虛擬伺服器,能夠同時運行成百上千個獨立的容器。
基於遊戲行業「短平快」的鮮明特點, 每一個遊戲世界裡面,每一種業務邏輯,譬如控制人物的行走,戰鬥,場景,聊天,存檔,資料庫等,都可以運行在一個獨立的容器中。 這一系列的容器,就構成了一個獨立的遊戲世界的自治系統。 目前,騰訊內部業務運行環境基本全部實現了容器化,在2014 Container技術大會中,騰訊雲高級產品經理劉永峰曾發表演講「Docker時代,公有雲面臨的挑戰和機遇」。 本文中劉永峰展望了容器技術在遊戲雲的應用。 以下為原文:
什麼是容器?
容器(Container)是一種羽量級的虛擬化技術,所謂羽量級虛擬化,就是使用了一種作業系統層虛擬化技術,這種技術允許一個作業系統上使用者空間被分割成幾個獨立的單元在內核中運行,彼此互不幹擾,這樣一個獨立的空間, 就稱之為一個容器。 舉個例子,一個作業系統,可以類比成一套公寓,那麼容器,就相當於公寓中的一個房間,大家共用同一個客廳,廚房和衛生間。 但是房間和房間之間彼此隔離,一個房間裡面的人的活動,不會影響到其他房間的住客。 房間也有門,有一定的安全措施。 隨著虛擬化技術的發展,一台物理的機器可以虛擬成多台虛擬機器,但是虛擬一個獨立作業系統是存在系統損耗的,不可能虛擬太多。 而容器就不同了,同一台機器,可以運行幾十個甚至數百個容器。 基本沒有太大的性能上的損耗,並且啟動一個容器,就像啟動一個進程那麼簡單,在秒級的時間即可完成。 因此在某些場景下,容器技術會有非常大的優勢。
容器技術的發展歷程
容器的技術並不是一項很新的技術,早在十多年前,其思想就已經開始得到應用了。 2005年,Solaris系統率先推出了容器的概念。 2007年的時候,容器技術的核心特性cgroup正式進入Liunux內核。 2011年,已經形成了標準化的規範。 業界在對容器的使用上,也越來越廣泛,特別是一些大的互聯網公司,國內的騰訊,百度,都已經在內部生產環境中大規模使用了容器技術。 對於容器技術使用最成熟的當屬Google,Google內部的幾乎所有的業務,其運行環境基本全部實現了容器化。 容器發展的最重要的一個里程碑是Docker的出現。 很多人有誤解,Docker其實並不是一種虛擬化的技術,而是一種容器的管理技術,它主要由容器管理引擎,用戶端以及AUFS檔案系統組成。 將容器的構建,分發和運行標準化了。 因此出來一年多,其熱度已經席捲全球。
容器技術有哪些優勢
隨著容器技術的發展,特別是插上Docker的翅膀後,顯得如虎添翼。 它有什麼優勢,能夠解決什麼問題呢?
這裡總結了如下幾點:
提升了虛擬化的細微性:由於Container是一種作業系統層的虛擬化技術,可以在進程級別進行隔離,因此一台物理的機器,可以運行非常多的容器,而將性能損耗降到最低。 當然也支援在虛擬機器上運行容器。 因此,一些低成本,支援動態伸縮的微服務成為可能。 譬如一個個人網站,一個公眾帳號,一個個人博客。 當然也可以用於遊戲服的場景。 IT服務交付標準化:在Docker中,有容器和倉庫的概念,任何服務,都可以打包成容器。 容器可以存儲在倉庫中。 當需要執行式,直接從倉庫中拉取進行執行。 遮罩了底層IT基礎設施之間的差異。 服務的運營實體不需要瞭解容器內部的結構,只需要從倉庫中拉取進行執行就行了。 因此可以在IT服務的交付和消費者之間劃開一條清晰的界限。 非常適合目前IT服務分工越來越細的趨勢。 開發,測試,部署一體化:系統的持續集成,持續部署,一直是IT開發人員,運維人員夢寐以求的事情,但是實際上,解決起來非常困難,很多時候,開發出來後,要花很大力氣搭建一套測試環境,測試完成後,又得重新搭建一套運營環境。 而Docker三個核心的概念Build,Ship,Run,其實涵蓋了從開發到部署到執行的全流程。 以容器為單位,當開發完成後,打包成容器,放到倉庫,然後進入測試流程,測試完成後,依然push到倉庫,最後到生成環境。 讓三個環節平滑的銜接。 避免了複雜的運行環境搭建的工作量。
遊戲託管的主要特點
前一部分主要介紹了容器技術的優勢和特點,那如何和遊戲來結合呢。 這得現成遊戲行業本身的特點以及業務特徵說起。 其實遊戲行業是對雲的接受度最高,但是也是對雲的特點使用最不充分的行業。 俗話說,遊戲行業,特別是現在比較火的手遊行業,本質是「短平快」:
短:遊戲生命週期短,特別是手游,一般一款遊戲,只有一年左右的生命週期; 平:遊戲後臺架構是一個扁平的架構,大部分遊戲都是單區單服,一台機器,一個資料庫,可以搞定好多個遊戲服; 快:遊戲滾服快,很多遊戲, 使用者都是爆炸式增長,通常一個遊戲服,只支援固定數量的使用者,達到使用者上線,就開一個新的服,因此主要表現在開服快,同時,也由於生命週期短,也需要開發快,部署上線快。
遊戲業務的後臺伺服器架構,目前大多數也沿襲了傳統的模式,以比較常見的單區單服架構為例,通常都是使用一台性能比較好的機器,譬如16核64G記憶體,在機器上開一定數量的遊戲服(相當於同時運行多個遊戲後臺服務進程, 通過不同的埠來提供服務)。 每個服支撐固定數量的線上使用者。 每個遊戲服,構成了一個獨立的遊戲世界,不同遊戲服之間,資料是不互通的。 遊戲服有多有少,以騰訊雲的某一款遊戲為例,一台16核的雲伺服器,開到80~100個遊戲服。 為什麼不是一台伺服器開一個遊戲服呢? 主要還是成本方面的考慮。 當然也有人會問,為什麼不能每個遊戲服使用者數多一些,從而開少一些的遊戲服呢? 這主要是由於遊戲特點決定的,例如MMORPG(多人線上RPG)類的遊戲,每個遊戲服,地圖有限,不可能支撐太多使用者,同時,使用者太多,等級差異較大,造成遊戲生態系統不平衡。 因此,每個遊戲服使用者數,是一個恒定的量。
傳統遊戲後臺架構存在的問題
一台機器同時運行大量的遊戲服,當機器宕機時,影響的使用者面比較廣; 由於每一個遊戲服是一個後臺服務進程,進程之間沒有強隔離,會導致不同遊戲服之間資源配置不均勻,或者資源相互搶佔的問題; 一個遊戲中, 會涉及很多不同種類的業務邏輯,譬如登錄,聊天,戰鬥,行走,甚至記錄日誌。 傳統的方式情況下,為了簡化部署,大多都運行在同一台伺服器上面。 因此需要不同的進程或者執行緒去完成這些業務邏輯。 管理起來非常的複雜,特別是當一台機器上同時存在很多組遊戲服時。
當然,也有一些優化後的架構,譬如將一個遊戲大區裡面登錄邏輯獨立出來,由一組單獨的伺服器去承載。 但是,要讓一個遊戲世界,所有的業務邏輯都能協調運行,依然是一個非常複雜的事情。 特別是一台物理的機器,部署了多組遊戲服時。
一個全新的遊戲自治系統
前面的章節談到了容器技術的優點。 其中比較重要的一個優勢是,容器技術是一種羽量級虛擬化技術,能夠以很細的細微性,虛擬化獨立的系統運行環境。 這就意味著,一台物理的伺服器,或者是一台雲上面的虛擬伺服器,能夠同時運行成百上千個獨立的容器。 每一個遊戲世界裡面,每一種業務邏輯,譬如控制人物的行走,戰鬥,場景,聊天,存檔,資料庫等,都可以運行在一個獨立的容器中。 這一系列的容器,就構成了一個獨立的遊戲世界的自治系統。 一個自治系統裡面的所有容器,可以運行在一台物理的機器上面,也可以分佈在彼此獨立的機器上面。 同時,還可以根據每一類業務使用資源的不同,合理的規劃這一類容器的資源用量,做到彼此互不幹擾。 當然,如果只是純粹的容器技術,這個自治系統裡面的容器管理也是一個大問題。 但是Docker技術的出現,為我們完美的解決了這個問題。 Docker裡面有倉庫的概念,所有的自治系統的基本單元(容器),都可以存儲在倉庫中,同時,借助于FIG,SERF等容器編排,以及服務自發現的技術。 當這些容器被分發到一個運行環境(一批執行的伺服器)時,能夠將一個自治系統快速構建出來。 讓一個遊戲世界的後臺架構,能夠在秒級的時間裡面快速重建。 這將完全顛覆遊戲開服的概念。 我們知道,現在的開服,需要申請機器,安裝軟體版本,修改配置等非常繁瑣的操作,雖然通過腳本,可以基本實現自動化,但是依然需要一部分人工去介入。 結合了Docker等技術,只需要分發和複製就可以了,將Docker所提倡的三個核心概念Build,Ship,Run體現的淋漓極致。
容錯和熱遷移
遊戲的穩定性一直是運營方最為關心的問題。 一次異常的宕機,可能導致非常大得損失。 傳統模式下,一台伺服器,同時運行幾十組遊戲服時,一次宕機,可能會影響數萬的遊戲玩家。 當遊戲服的所有業務邏輯實現容器化後,某一次機器故障,可能只是影響到了部分遊戲服裡面的某些業務邏輯。 我們可以將一個遊戲自治系統看做是一個正在運轉的機器。 一起出現故障時,需要重新開機並組裝機器,現在可以做到在不停機的情況下,替換零件。 譬如控制行走任務的容器正好位於某個故障機器時,可能只是暫態的卡頓,立即就恢復正常。 借助某些監控的手段,一些重要的業務邏輯甚至可以同時運行多個備份容器,當一個邏輯出現問題時,能夠快速切換到另外一個備用容器。
未來的展望
遊戲對於雲的使用,目前還處於非常初級階段,大部分遊戲廠商,還是使用的傳統的IDC託管,即使使用雲的廠商,也是將雲主機當傳統的物理機在使用。 容器技術雖然有多年的發展,但是Docker之類技術目前還只是繈褓中的嬰兒。 遊戲領域能夠接受容器的概念,還需要一個探索和實踐的過程。 但是隨著遊戲領域的競爭加劇,低成本,精細化運營是未來的趨勢。 遊戲一直是騰訊雲最重要的拓展領域,由於有國內最大規模的遊戲使用者群體,因此對於遊戲理念的理解,遊戲架構的設計以及運營經驗,一直是騰訊雲最重要的競爭優勢之一,所以騰訊雲很早就啟動了容器技術在遊戲領域的研究。 目前,容器技術在騰訊的社交網路已經有多年的實踐經驗,內部業務運行環境基本全部實現了容器化。 相信很快在遊戲領域也會逐步應用開來。 在文章的最後,我想到和某個從國外回來的大型遊戲公司的老闆在聊天時,他給我描述的未來遊戲世界的一種場景。 全世界所有遊戲玩家都在一個遊戲世界裡面。 有堪比現實世界般廣袤的地圖。 遊戲中的場景和人物都由強大雲計算支撐的AI智慧控制,整個遊戲,就是現實世界的完全類比。 或許借助于文章中展望的技術,我們會看到類似的這種大同的景象。 (責編:周小璐)
如需要瞭解更多Docker相關的資訊或是技術文檔可訪問Docker技術社區;如有更多的疑問請在Dcoker技術論壇提出,我們會邀請專家回答。 CSDN Docker技術交流QQ群:303806405。
CSDN誠邀您參加中國大資料有獎大調查活動,只需回答23個問題就有機會獲得最高價值2700元的大獎(共10個), 速度參與進來吧!
全國大資料創新專案評選活動目前也在如火如荼進行中,詳情點擊這裡。
2014中國大資料技術大會(Big Data Technology Conference 2014,BDTC 2014)將于2014年12月12日-14日在北京新雲南皇冠假日酒店召開。 傳承自2008年,歷經七屆沉澱,「中國大資料技術大會」是目前國內最具影響、規模最大的大資料領域技術盛會。 本屆會議,你不僅可以瞭解到Apache Hadoop提交者Uma Maheswara Rao G(兼專案管理委員會成員)、Yi Liu,以及Apache Hadoop和Tez專案管理委員會成員Bikas Saha等分享的通用大資料開源專案的最新成果和發展趨勢,還將斬獲來自騰訊、阿裡、Cloudera、LinkedIn、網易等機構的數十場乾貨分享。 當下門票團購還有些許優惠, 預購從速。
免費訂閱「CSDN大資料」微信公眾號,即時瞭解最新的大資料進展!
CSDN大資料,專注大資料資訊、技術和經驗的分享和討論,提供Hadoop、Spark、Impala、Storm、HBase、MongoDB、Solr、機器學習、智慧演算法等相關大資料觀點,大資料技術,大資料平臺,大資料實踐 ,大資料產業資訊等服務。