溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

揭秘LOL背后的IT基礎(chǔ)架構(gòu)丨踏上部署多樣性的征程

發(fā)布時間:2020-02-14 11:07:31 來源:網(wǎng)絡(luò) 閱讀:158 作者:TF中文社區(qū) 欄目:網(wǎng)絡(luò)管理

本期開始,我們將陸續(xù)分享Tungsten Fabric用戶案例文章,一起發(fā)現(xiàn)TF的更多應(yīng)用場景?!敖颐豅OL”系列的主人公是TF用戶Riot Games游戲公司,作為LOL《英雄聯(lián)盟》的開發(fā)和運營商,Riot Games面臨全球范圍復(fù)雜部署的挑戰(zhàn),讓我們一起揭秘LOL背后的“英雄們”,看他們是如何運行在線服務(wù)的吧。
作者:Jonathan McCaffrey(文章來源:Riot Games)

揭秘LOL背后的IT基礎(chǔ)架構(gòu)丨踏上部署多樣性的征程

我叫Jonathan McCaffrey,在Riot的基礎(chǔ)架構(gòu)團隊工作。這是該系列文章中的第一篇,我們將深入探討如何在全球范圍內(nèi)部署和操作后端功能。在深入探討技術(shù)細節(jié)之前,重要的是要了解Rioters(Riot人)如何考慮功能開發(fā)。在Riot,玩家的價值至高無上,開發(fā)團隊通常直接與玩家社區(qū)合作,以提供功能和改進信息。為了提供最佳的玩家體驗,我們需要快速行動,并具備可以根據(jù)反饋保持快速更改計劃的能力?;A(chǔ)架構(gòu)團隊的任務(wù),就是為我們的開發(fā)人員能做到這一點鋪平道路——越是加強Riot團隊的能力,就可以越快地將功能交付給玩家使用。

當然,說起來容易做起來難!鑒于我們在部署上的多樣性,因此出現(xiàn)了許多挑戰(zhàn):我們的服務(wù)器遍布在公共云、私有數(shù)據(jù)中心,以及騰訊和Garena這樣的合作伙伴環(huán)境當中,所有這些環(huán)境在地理位置和技術(shù)上都各不相同。

當功能團隊準備好交付組件時,這種復(fù)雜性給他們帶來了巨大的負擔。那就是基礎(chǔ)架構(gòu)團隊的職責所在——我們通過基于容器的內(nèi)部云環(huán)境(我們稱為“rCluster”)消除了一些部署障礙。在本文中,我將討論Riot從手動部署到使用rCluster啟動功能的歷程。為了說明rCluster的產(chǎn)品和技術(shù),我將逐步介紹Hextech Crafting系統(tǒng)的發(fā)布(Hextech Crafting是英雄聯(lián)盟的開箱系統(tǒng)的名字)。

一點歷史

7年前,當我剛開始在Riot工作時,我們并沒有太多的部署或服務(wù)器管理流程,Riot當時是一家具有遠見卓識,但預(yù)算少并且需要快速發(fā)展的初創(chuàng)公司。當為《英雄聯(lián)盟》構(gòu)建生產(chǎn)環(huán)境基礎(chǔ)架構(gòu)時,我們匆忙的滿足游戲的需求、從開發(fā)人員帶來的更多功能的需求,來自區(qū)域團隊的在全球開設(shè)新區(qū)的需求。我們手動啟用服務(wù)器和應(yīng)用,很少考慮原則或戰(zhàn)略規(guī)劃。

在此過程中,我們轉(zhuǎn)向利用Chef完成許多常見的部署和基礎(chǔ)設(shè)施任務(wù)。同時,開始將越來越多的公共云用于大數(shù)據(jù)和Web工作。這些變革也多次觸發(fā)了我們的網(wǎng)絡(luò)設(shè)計、供應(yīng)商選擇和團隊結(jié)構(gòu)的變化。

我們的數(shù)據(jù)中心容納了數(shù)千臺服務(wù)器,并且?guī)缀鯙槊總€新應(yīng)用程序都安裝了新的服務(wù)器。新服務(wù)器將存在于自己手動創(chuàng)建的VLAN中,并具備路由和防火墻規(guī)則,以實現(xiàn)網(wǎng)絡(luò)之間的安全訪問。盡管此過程可以幫助我們提高安全性并明確定義故障域,但它既費時又費力。更麻煩的是,當時的大多數(shù)新功能都被設(shè)計為小型Web服務(wù),這使得我們的LoL(英雄聯(lián)盟)的生態(tài)系統(tǒng),獨立應(yīng)用的數(shù)量激增。

最重要的是,開發(fā)團隊對他們的應(yīng)用程序測試能力缺乏信心,尤其是在涉及諸如配置和網(wǎng)絡(luò)連接之類的部署問題時。將應(yīng)用程序與物理環(huán)境緊密聯(lián)系在一起,意味著生產(chǎn)數(shù)據(jù)中心環(huán)境之間的差異不會在QA(測試)、Staging(上線前)和PBE(基于模式開發(fā))中復(fù)制。每個環(huán)境都是手工制作的、獨特的,到最后始終也不能一致。(注釋:本文主要想描述的兩個問題,第一是客戶的應(yīng)用和環(huán)境緊密相關(guān),但是由于不同的團隊或者部門的應(yīng)用環(huán)境不同,因此可能出現(xiàn)因為不一致對應(yīng)用上線帶來問題)

當我們在應(yīng)用程序數(shù)量不斷增加的生態(tài)系統(tǒng)中,應(yīng)對手動服務(wù)器和網(wǎng)絡(luò)配置的挑戰(zhàn)時,Docker開始在我們的開發(fā)團隊中獲得普及,作為解決配置一致性和開發(fā)環(huán)境問題的方法。一旦開始使用,我們能明顯感覺到Docker可以做更多的事情,并且可以在處理基礎(chǔ)架構(gòu)的過程中發(fā)揮關(guān)鍵作用。

2016年及以后

當時基礎(chǔ)架構(gòu)團隊設(shè)定了一個目標,為2016賽季的玩家,開發(fā)人員和Riot公司解決這些問題。到2015年底,我們已經(jīng)從手動部署功能,轉(zhuǎn)變?yōu)橐宰詣踊乙恢碌姆绞皆赗iot地區(qū)部署類似Hextech Crafting等功能。我們的解決方案是用rCluster這一全新的系統(tǒng),該系統(tǒng)在微服務(wù)架構(gòu)中利用了Docker和SDN軟件定義網(wǎng)絡(luò)。切換到rCluster可以彌補我們在環(huán)境和部署過程中的不一致之處,并使產(chǎn)品團隊可以專注于他們的產(chǎn)品開發(fā)。

讓我們深入研究一下這項技術(shù),以了解rCluster如何在后臺支持Hextech Crafting等功能。解釋一下,Hextech Crafting是《英雄聯(lián)盟》的一項功能,可為玩家提供一種解鎖游戲內(nèi)物品的新方法。

該功能內(nèi)部稱為“Loot”,由3個核心組件組成:

  • Loot服務(wù) -通過HTTP/JSON ReST API提供Loot請求的Java應(yīng)用程序。
  • Loot緩存 -使用Memcached和小型golang sidecar進行監(jiān)控、配置,以及啟動/停止操作的緩存集群。
  • Loot數(shù)據(jù)庫 -具有一個主服務(wù)器和多個從屬服務(wù)器的MySQL數(shù)據(jù)庫集群。

當你打開crafting屏幕時,將發(fā)生以下情況:

揭秘LOL背后的IT基礎(chǔ)架構(gòu)丨踏上部署多樣性的征程

  1. 玩家在客戶端中打開crafting屏幕。

  2. 客戶端對前端應(yīng)用程序(也稱為“feapp”)進行RPC調(diào)用,以代理玩家和內(nèi)部后端服務(wù)之間的調(diào)用。

  3. feapp調(diào)用Loot服務(wù)器
  • feapp在“服務(wù)發(fā)現(xiàn)”中查找Loot服務(wù),以尋找其IP和端口信息。
  • feapp對Loot服務(wù)進行HTTP GET調(diào)用。
  • Loot服務(wù)會檢查Loot緩存,以查看玩家的庫存物品是否存在。
  • 庫存物品不在緩存中,因此,Loot服務(wù)調(diào)用Loot數(shù)據(jù)庫以查看玩家當前擁有的物品,并把該結(jié)果填充到緩存。
  • Loot服務(wù)答復(fù)GET調(diào)用。
  1. feapp將RPC響應(yīng)發(fā)送回客戶端。

與Loot團隊合作,我們能夠?qū)erver和Cache層內(nèi)置到Docker容器中,并且它們的部署配置在JSON文件中定義,如下所示:

Loot服務(wù)器JSON示例:
揭秘LOL背后的IT基礎(chǔ)架構(gòu)丨踏上部署多樣性的征程

Loot緩存JSON示例:
揭秘LOL背后的IT基礎(chǔ)架構(gòu)丨踏上部署多樣性的征程

但是,要實際部署此功能,并在減少前述的問題方面取得真正的進展——我們需要在北美、南美、歐洲和亞洲等地創(chuàng)建可以支持Docker的集群。這需要我們解決一堆難題,例如:

  • 調(diào)度容器
  • 與Docker網(wǎng)絡(luò)聯(lián)網(wǎng)
  • 持續(xù)交付
  • 運行動態(tài)應(yīng)用程序

隨后的文章將更詳細地介紹rCluster系統(tǒng)的這些組件,在這里我簡要概述一下每個組件。

調(diào)度(SCHEDULING)

我們使用編寫的Admiral軟件在rCluster生態(tài)系統(tǒng)中實現(xiàn)了容器調(diào)度。Admiral跨過一系列物理機器與Docker守護進程(daemons)進行對話,以了解其當前的運行狀態(tài)。用戶通過HTTPS發(fā)送上述JSON(Admiral用來更新了解對相關(guān)容器所需的狀態(tài))來發(fā)出請求,然后,它會連續(xù)掃描集群的活動狀態(tài)和所需狀態(tài),以找出需要采取的措施。最后,Admiral再次調(diào)用Docker守護程序來啟動和停止容器,以收斂于所需的狀態(tài)。

如果某個容器崩潰,Admiral可以發(fā)現(xiàn)實時狀態(tài)與期望狀態(tài)間的差異,并在另一臺主機上啟動該容器以對其進行糾正。這種靈活性使管理服務(wù)器變得更加容易,因為我們可以無縫地“榨干”它們,加以維護,或者重新啟用它們以處理工作負載。

Admiral與開源工具Marathon相似,因此我們正在研究移植工作以利用Mesos、Marathon和DC/OS。如果這項工作取得成果,我們將在以后的文章中討論。

與DOCKER進行聯(lián)網(wǎng)

容器運行后,我們需要在Loot應(yīng)用程序和生態(tài)系統(tǒng)的其他部分之間提供網(wǎng)絡(luò)連接。為此,我們利用OpenContrail為每個應(yīng)用程序提供了專用網(wǎng)絡(luò),并讓我們的開發(fā)團隊使用GitHub中的JSON文件自己管理其策略。

Loot服務(wù)器網(wǎng)絡(luò):
揭秘LOL背后的IT基礎(chǔ)架構(gòu)丨踏上部署多樣性的征程

Loot緩存網(wǎng)絡(luò):
揭秘LOL背后的IT基礎(chǔ)架構(gòu)丨踏上部署多樣性的征程

當工程師在GitHub中更改此配置時,將運行一個轉(zhuǎn)換作業(yè),并在Contrail中進行API調(diào)用,為其應(yīng)用程序的專用網(wǎng)絡(luò)創(chuàng)建和更新策略。

Contrail使用一種稱為“Overlay Networking”的技術(shù)來實現(xiàn)這些專用網(wǎng)絡(luò)。在我們的案例中,Contrail 在計算主機之間使用GRE隧道,并使用網(wǎng)關(guān)路由器來管理進入和離開overlay隧道并前往網(wǎng)絡(luò)其余部分的流量。OpenContrail系統(tǒng)的靈感來自于標準MPLS L3V P N,并且在概念上與標準MPLS L3V P N非常相似??梢栽谶@里找到更深入的架構(gòu)細節(jié)。(附注:opencontrail現(xiàn)在已經(jīng)改名為TF)

揭秘LOL背后的IT基礎(chǔ)架構(gòu)丨踏上部署多樣性的征程

在實施此系統(tǒng)時,我們必須解決一些關(guān)鍵挑戰(zhàn):

  • Contrail和Docker之間的集成
  • 允許網(wǎng)絡(luò)的其他部分(rCluster外部)無縫訪問新的overlay網(wǎng)絡(luò)
  • 允許一個集群中的應(yīng)用程序與另一個集群進行通信
  • 在AWS上運行overlay網(wǎng)絡(luò)
  • 在overlay中構(gòu)建面向邊緣的應(yīng)用程序HA負載均衡

持續(xù)交付

對于Loot應(yīng)用程序,CI流程如下所示:

揭秘LOL背后的IT基礎(chǔ)架構(gòu)丨踏上部署多樣性的征程

此處的總體目標是,當更改主倉庫(Master repo)時,將創(chuàng)建一個新的應(yīng)用程序容器并將其部署到QA環(huán)境。有了這個工作流程,團隊可以快速迭代他們的代碼,并查看實際游戲中反映的更改。緊密的反饋回路,使得迅速改善體驗成為可能,這是Riot“專注于玩家”工程的主要目標。

運行動態(tài)應(yīng)用程序

至此,我們已經(jīng)討論了如何構(gòu)建和部署Hextech Crafting之類的功能,但是,如果你花了很多時間在這樣的容器環(huán)境上工作,那便不是問題所在。

在rCluster模型中,容器具有動態(tài)IP地址,并且不斷跳轉(zhuǎn)。這與我們以前的靜態(tài)服務(wù)器和部署方法完全不同,因此需要有效的新工具和流程。

其中一些關(guān)鍵問題如下:

  • 如果應(yīng)用程序的容量和端點一直在變化,我們該如何監(jiān)視它?
  • 如果一個應(yīng)用程序一直在變化,那么它如何知道另一個應(yīng)用程序的端點?
  • 如果你無法ssh進入容器并且每次啟動新容器時都重置日志,那么如何分類應(yīng)用程序的問題?
  • 如果在構(gòu)建時baking容器,如何配置數(shù)據(jù)庫密碼之類的東西,或者在“土耳其”與“北美”之間都切換了哪些選項?

為了解決這些問題,我們必須構(gòu)建一個微服務(wù)平臺,來處理諸如服務(wù)發(fā)現(xiàn)、配置管理和監(jiān)視之類的事情。在本系列的最后一部分中,我們將深入探討該系統(tǒng)及其解決問題的更多細節(jié)。

結(jié)論

希望本文能為你提供一個概覽,了解我們正在嘗試解決的各種問題,以使Riot更加輕松地傳遞玩家價值。如前所述,我們將在后續(xù)文章中重點介紹rCluster對調(diào)度的使用、與Docker進行聯(lián)網(wǎng),以及運行動態(tài)應(yīng)用程序。

如果你正處于類似的“旅程”中,或者想?yún)⑴c討論,非常歡迎與我們?nèi)〉寐?lián)系。


揭秘LOL背后的IT基礎(chǔ)架構(gòu)丨踏上部署多樣性的征程
關(guān)注微信:TF中文社區(qū)
揭秘LOL背后的IT基礎(chǔ)架構(gòu)丨踏上部署多樣性的征程

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI