[譯]拳頭公司是如何優(yōu)化實時應(yīng)用的

原文:FIXING THE INTERNET FOR REAL TIME APPLICATIONS: PART II

譯者:NStal

在上一篇博客里晌杰, 我提到了為什么現(xiàn)在的互聯(lián)網(wǎng)網(wǎng)絡(luò)環(huán)境對英雄聯(lián)盟這樣的實時應(yīng)用很糟糕疤祭,以及延時和丟包是如何降低實時游戲的體驗的。那么很自然的,下一個問題就是: "我說Peyton啊,那我們該怎么辦?"

答案是簡單又讓人興奮的: 我們打造自己的專屬互聯(lián)網(wǎng)就好啦。在你說這是白日夢之前簿寂,先讓我再重新介紹一下我之前博客里面提到的互聯(lián)網(wǎng)構(gòu)架京办。整個互聯(lián)網(wǎng)不是一個某個個體所管理捡鱼,獨立統(tǒng)一的系統(tǒng)拐叉,而是由多個組織聚合體來共同管理的们何。當(dāng)你玩LOL的時候萄焦,數(shù)據(jù)從Riot的服務(wù)器傳送到主干網(wǎng)絡(luò)(比如Level 3,Zayo 和 Cogent)垂蜗,然后到ISP公司(比如Comcast楷扬,AT&T解幽,Time Warner Cable和 Verizon) 最后到達(dá)你設(shè)置的目的地(撥號器,路由器烘苹,用戶電腦)躲株,并且返回。

我們并不是第一個企圖改造互聯(lián)網(wǎng)網(wǎng)絡(luò)的團(tuán)隊; Google已經(jīng)公開的在美國的好幾個社區(qū)里鋪設(shè)了光纖镣衡。但是Google的重點放在通向家庭的光纜霜定,我們則更關(guān)心如何像那些主干網(wǎng)絡(luò)公司一樣去創(chuàng)建網(wǎng)絡(luò)。這能讓我們在離玩家最近的地方得到玩家的數(shù)據(jù)并放到我們的網(wǎng)絡(luò)里去──一個有更少路由器(和其他設(shè)備)的網(wǎng)絡(luò)廊鸥,這樣丟包和其他的糟糕體驗就會少的多望浩。

總的來說我們要做的事情就是把這樣的東西:


變成這樣的:


挺簡單的,是吧? 恩惰说,不 ── 我們至少花了一年的努力來完成這件事情磨德。為了讓我們的服務(wù)器連上ISP,首先我們得買很多路由器吆视,在數(shù)十個美國最大的數(shù)據(jù)中心租位置來放這些路由器(一般來說典挑,我們管這些地方叫場地托管,等會再細(xì)談)啦吧,租用Dark fibre(暗光纖 預(yù)先建設(shè)但還沒被使用的光纖)和Optical Wavelength Service(OWS 一種把并行數(shù)據(jù)分布在不同波長防止數(shù)據(jù)干擾您觉,共享鏈路,從而增大光纖帶寬和穩(wěn)定性的服務(wù))來連接那些路由器授滓,最后聯(lián)通所有我們能搞定的ISP琳水。

在這篇文章里,我會進(jìn)一步闡述我們是如何跟ISP們一同合作來糾正一些網(wǎng)絡(luò)標(biāo)準(zhǔn)的般堆,也會順便分享一些成果在孝。

路由器,托管郁妈,暗光纖浑玛,天啊

第一步,買路由器噩咪。這很簡單顾彰。我們得在數(shù)據(jù)中心有地方給他們安家。 托管場地胃碾,有時候也叫做"中繼器旅館"涨享,指的是一種大型的建筑,能夠給網(wǎng)絡(luò)運行提供空間和能源仆百。許多運營商都會在同一個地方設(shè)有入口厕隧,這種"扎堆"的方式讓他們可以輕松的與對方互聯(lián)。比如,我們在Zaya在紐約的托管場地也放了設(shè)備吁讨,這樣我們就能聯(lián)通那個建筑里所有的ISP了髓迎。

盡管多個網(wǎng)絡(luò)運營商能讓我們能同時連接他們,但做起來并不容易建丧。每一個連接都需要復(fù)雜的物理設(shè)備的部署以及非常復(fù)雜的理論研究排龄。比如,以我們之前提到的在紐約的入網(wǎng)點(PoP)為例子翎朱,那里 Zayo橄维,Telx,Equinix(還有很多)拴曲,都有他們的入口争舞。與他們連接需要購買Telx和Equinix的服務(wù),所以我們的光纖會在相關(guān)的Meet Me Rooms(托管中心的數(shù)據(jù)交換點)的Patch Panel(跳線器)離會合澈灼,我們還會讓我們的設(shè)備從Zayo那兒得到Cross-Connect(不同運營商機(jī)組之間的通信)的能力竞川。這些事情幾乎要做一輩子。

我進(jìn)行了一系列的背景調(diào)查叁熔,來找到最快的光纖路由流译,找到最好的托管場地,能夠和最多的ISP相連者疤,并且確保有Internet Exchanges(IXs,互聯(lián)網(wǎng)數(shù)據(jù)交換)功能來進(jìn)一步和更多的ISP相連叠赦。當(dāng)我們在托管空間里安置和連接好了我們的路由器之后驹马,我們還需要讓那些在不同的國家的路由器相連。為了做到這件事情除秀,我們得在每個托管點之間找到暗光纖或OWS服務(wù)糯累。我們聯(lián)系了很多公司,獲取了他們的路由器信息册踩,并且物理比較了每一個路由器泳姐。我們曾經(jīng)見識過同樣的地點間,一家公司的光纖路由比另一家公司的長三倍暂吉。

另外一個復(fù)雜的問題是胖秒,這些設(shè)備很可能負(fù)擔(dān)過重。當(dāng)我們調(diào)研從芝加哥到洛杉磯途徑西雅圖的路由時慕的,我們發(fā)現(xiàn)路由使用了從芝加哥到西雅圖的同一片設(shè)備阎肝。同時使用這兩個路由方案會導(dǎo)致這個系統(tǒng)的一個單點故障 ── 如果西雅圖的路由器下線了,會導(dǎo)致很多LoL的玩家難過肮街。我們明白我們還得不斷的尋找從芝加哥到洛杉磯的連接方案风题。

即使上面所有的東西都搞定了,我們還得跟那些玩家直接接入的ISP,進(jìn)行長期的溝通沛硅。整個過程耗時耗力 - 一個簡單的合同要花上8個月才能落地眼刃,我也是醉了── 不過我不會在這里講這些無聊的細(xì)節(jié)。

為什么不讓這些事情簡單些?

考慮到我剛才描繪的那些困難重重摇肌,你也許會問擂红,我們?yōu)槭裁床桓纱喔鶤T&T,Comcast或者Level3這樣的大型網(wǎng)絡(luò)中繼商簽訂合同朦蕴,讓他們幫我們搞定這些事情? 原因很簡單篮条,我們試過了,但不管用吩抓。很不幸涉茧,他們的商業(yè)模型讓我們的需求很難被滿足。ISP們搭建的網(wǎng)絡(luò)更多的是公共數(shù)據(jù)傳輸疹娶,來盡可能的承載更多的流量伴栓。減少過程中的路由器會減少延時(對,為了LoL玩家)雨饺, 但是這也會減少他們能服務(wù)的用戶的數(shù)量钳垮。ISPs是根據(jù)他們的合作伙伴的需求來建立網(wǎng)絡(luò)的,這意味著承載量的大小是根據(jù)運營商之間的關(guān)系來決定的额港,而不是為了優(yōu)化某一類程序饺窿。

因此,打個比方移斩,如果AT&T是我們的網(wǎng)絡(luò)提供商肚医,他們不會直接跟Comcast建立直接連接來讓我們離Comcast的玩家更近,因為他們不是合作伙伴向瓷。他們也不會為了我們而移除中間的任何路由器來讓網(wǎng)絡(luò)變得更有效率肠套。他們的目標(biāo)站在他們的立場上來看是合理的,就像我們的要求站在我們的立場上一樣猖任,只是很遺憾雙方立場相悖你稚。我們希望讓玩家的連接盡可能的快,不管玩家到底是在用哪家的網(wǎng)絡(luò)服務(wù)朱躺,所以我們創(chuàng)建了一個"中立"的組織來連接所有的網(wǎng)絡(luò)刁赖。

不僅如此,沒有任何網(wǎng)絡(luò)中繼商(類似Zayo室琢,Level 3 或 Cogent)的物理設(shè)施符合我們的需求乾闰。打個比方,想象兩個中繼X和Y都連接了紐約和芝加哥盈滴,而且中繼X的速度更快涯肩。然而轿钠,中繼X并沒有連接芝加哥和西雅圖,但是中繼Y連接了病苗。因此疗垛,沒有哪家公司能給我們符合要求的主干網(wǎng)絡(luò)服務(wù)。為了給玩家提供最好的游戲體驗硫朦,我們需要和兩家中繼服務(wù)簽訂合約贷腕,來共同打造最好的網(wǎng)絡(luò)。

建立標(biāo)準(zhǔn)

建立我們的主干網(wǎng)絡(luò)只是我們一部分的工作(盡管是主要的)咬展,我們有一個更大的目標(biāo)泽裳,那就是把目前的互聯(lián)網(wǎng)優(yōu)化到滿足實時游戲的需求。除開物理和合同問題破婆,我們還有許多技術(shù)挑戰(zhàn)要克服涮总。除了需要連接ISP們,我們還需要和他們合作一同找出那些過去互聯(lián)網(wǎng)標(biāo)準(zhǔn)中的最佳實踐祷舀。

這些標(biāo)準(zhǔn)規(guī)定了互聯(lián)網(wǎng)流量該如何傳輸瀑梗,并且很久沒更新過了 ── 它們?nèi)匀缓芎玫臐M足了多種類型的流量需求,但是不包括我們這種實時無緩存應(yīng)用的需求裳扯。特別是互聯(lián)網(wǎng)的標(biāo)準(zhǔn)路由協(xié)議抛丽,Border Gateway Protocol (BGP),讓我們非常頭疼饰豺。我們希望流量使用最優(yōu)路徑亿鲜,而不是任何路徑。然而BGP是為了商用路由而定制的冤吨。換句話來說狡门,BGP認(rèn)為互聯(lián)網(wǎng)模型很簡單: 如何把流量從一個網(wǎng)絡(luò)擁有者,也叫Autonomous System(AS)锅很,傳輸給另一個》锱埽可是大部分的ISP在構(gòu)建靜態(tài)路由的時候都沒很好的的優(yōu)化BGP爆安。

我們來討論一個常用的BGP概念"會話年齡",用來描述某個路由被用了多久仔引。想象有兩個路由在Riot和某個ISP之間: 一條快速的路由A和一條慢速的路由B扔仓。如果A路由下線了,那么流量會轉(zhuǎn)移到B路由──這當(dāng)然是個合理的變化咖耘,因為它是此時最好的路由翘簇。問題是,如果A路由再次上線儿倒,ISP還是會繼續(xù)使用B路由版保,僅僅是因為它被使用了更久呜笑,因此就更傾向于使用它。這一切都是協(xié)議的默認(rèn)表現(xiàn)彻犁,對那些有大量節(jié)點的ISP來說叫胁,這比重新選擇一個更好地的路由要輕松的多。因此我們必須使用一些臨時方案汞幢,比如讓路由B下線驼鹅,來刻意的讓流量回到鏈路由A。

在類似會話年齡這樣的問題上森篷,我們必須開始考慮應(yīng)該如何接受和分發(fā)流量输钩。在大部分情況下,ISP會基于一個地理位置仲智,這種情況很簡單买乃。 對于那些分布在不同大陸上的ISP,我們就得聯(lián)通不同的位置坎藐。比如为牍,以Comcast為例,他們在整個國家都有路由器分布岩馍。如果我們只在芝加哥連接他們碉咆,那么玩家的流量在Comcast的入口,比如波士頓蛀恩,會一直在他們的網(wǎng)絡(luò)上直到芝加哥疫铜,繞過了我們辛辛苦苦建立的主干網(wǎng)絡(luò)。為了解決這個問題双谆,我們在Comcast數(shù)個地點都有接入壳咕,打造了我們主干網(wǎng)絡(luò)的數(shù)個接入點。當(dāng)我們連接Comcast莫個區(qū)域的路由器節(jié)點之后顽馋,所有從那個區(qū)域接入的Comcast流量都會直接進(jìn)入我們的網(wǎng)絡(luò)谓厘。

這里還有一個附加問題,那就是處理發(fā)往別處的流量寸谜。當(dāng)BGP處理大量的數(shù)據(jù)在AS之間的傳輸時竟稳,他的默認(rèn)狀態(tài)時尋找"最近"的出口。換句話說熊痴,BGP允許流量從最好的入口進(jìn)入我們的數(shù)據(jù)中心他爸,但是它會為所有流量選擇統(tǒng)一的出口,而不是為每個不同方向的流量選擇最好的果善。


比如說诊笤,當(dāng)我們剛建立我們的主干網(wǎng)絡(luò)的時候,我們接入了一個位于波特蘭和芝加哥的ISP巾陕。芝加哥的玩家會通過芝加哥節(jié)點進(jìn)入我們的網(wǎng)絡(luò)讨跟,當(dāng)我們發(fā)送回程的流量時纪他,它會沿著它來的路徑沿路返回。然而许赃,當(dāng)波特蘭的玩家從波特蘭的入口進(jìn)入我們的網(wǎng)絡(luò)時止喷,我們送出的流量還是會從芝加哥出去,而不是波特蘭混聊。會這樣是因為當(dāng)ISP路由節(jié)點從波特蘭引導(dǎo)流量時弹谁,到我們的AS(6507)的最快路徑入口就是在波特蘭,然而當(dāng)我們的服務(wù)器發(fā)送回程流量時句喜,BGP計算出邏輯上到ISP的AS的最快路徑還是從芝加哥出去预愤。我們必須和ISP一起協(xié)作,通過使用BGP Communities或者M(jìn)ED對流量進(jìn)行標(biāo)記咳胃,來解決這個問題植康。這些技術(shù)讓我們能夠定制回程流量的規(guī)則。

上面說的這些東西的工作量可是大得很! 而且很遺憾的是展懈,并不是所有的ISP都支持這些工作──盡管我們直接接入了一個ISP销睁,玩家們還是無法有最好的體驗。

但結(jié)果很好

根據(jù)我之前所描述的種種問題存崖,你可能覺得我們的這次嘗試可能注定會失敗冻记。然而,我們每個階段都穩(wěn)步慢行来惧,最后的結(jié)果也是很好的冗栗。基于我們在北美所作的這一切供搀,我們實際上構(gòu)建了這塊大陸上最快的網(wǎng)絡(luò)隅居。而且通過我們在這當(dāng)中學(xué)習(xí)到的經(jīng)驗,我們還能大幅的改進(jìn)我們所構(gòu)建的網(wǎng)絡(luò)葛虐。

但最終的效果還是要根據(jù)玩家的體驗來決定胎源。我們進(jìn)行判斷的一個標(biāo)準(zhǔn)是,有多少玩家游戲時的ping值在80ms以下屿脐。在我們移動到芝加哥之前乒融,短短的9個月內(nèi)我們把這個比例從31%提升到了50%,因為我們直接接入了ISP來讓流量直接發(fā)送到Riot摄悯。你可以看到整個提升的過程:


這不表示所有的玩家都體驗到了更好的服務(wù),但是總的來說更多的LoL玩家有了更短的ping愧捕。當(dāng)我們完成了游戲服務(wù)器到芝加哥的遷移之后奢驯,整個結(jié)果更好了。我們一夜之間把這個比例從50%提升到了80%! 在玩家體驗上次绘,我們達(dá)到了我們的內(nèi)部目標(biāo)瘪阁。


我們還會持續(xù)集成ISP和中繼點撒遣,來讓玩家的整個體驗變得更好,而且我們實際上在全世界范圍內(nèi)在做這件事情! 我們實際上已經(jīng)在除了南極和非洲以外的所有的大陸都部署了這樣的網(wǎng)絡(luò)管跺。

我們非常高興能夠持續(xù)的在世界范圍內(nèi)提高玩家的體驗义黎,當(dāng)然我們還有很多可以做的東西。我們堅信游戲值得擁有他們的專屬網(wǎng)絡(luò)豁跑。這個系列文章的下一篇廉涕,我們會介紹一下那些在研究和構(gòu)建網(wǎng)游環(huán)境時用到的那些新技術(shù)。

更多精彩

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末艇拍,一起剝皮案震驚了整個濱河市狐蜕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌卸夕,老刑警劉巖层释,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異快集,居然都是意外死亡贡羔,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門个初,熙熙樓的掌柜王于貴愁眉苦臉地迎上來乖寒,“玉大人,你說我怎么就攤上這事勃黍∠常” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵覆获,是天一觀的道長马澈。 經(jīng)常有香客問我,道長弄息,這世上最難降的妖魔是什么痊班? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮摹量,結(jié)果婚禮上涤伐,老公的妹妹穿的比我還像新娘。我一直安慰自己缨称,他們只是感情好凝果,可當(dāng)我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著睦尽,像睡著了一般器净。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上当凡,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天山害,我揣著相機(jī)與錄音纠俭,去河邊找鬼。 笑死浪慌,一個胖子當(dāng)著我的面吹牛冤荆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播权纤,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼钓简,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了妖碉?” 一聲冷哼從身側(cè)響起涌庭,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎欧宜,沒想到半個月后坐榆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡冗茸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年席镀,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片夏漱。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡豪诲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出挂绰,到底是詐尸還是另有隱情屎篱,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布葵蒂,位于F島的核電站交播,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏践付。R本人自食惡果不足惜秦士,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望永高。 院中可真熱鬧隧土,春花似錦、人聲如沸命爬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饲宛。三九已至皆愉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背亥啦。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留练链,地道東北人翔脱。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像媒鼓,于是被迫代替她去往敵國和親届吁。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容