第四十章 四千人,伺服器崩了

投票推薦 加入書籤 小說報錯

  9月22日,上午八點四十分。

  上海浦東,華融大廈。

  初秋的早上透著些許悶熱,任宇昕穿著一件深色夾克,單手拖著一隻黑色的行李箱,大步走進了盛大網絡的前台大廳。大概是搭乘早班機的原因,他的眉宇間有些疲憊。

  前台核實來訪者姓名後,直接將他帶到了最裡面的大會議室。

  許進楷坐在了會議桌主位上,手裡端著一杯茶。聽到推門的動靜,許進楷抬起頭,目光停在任宇昕腳邊那隻還掛著深圳寶安機場託運條的行李箱上。

  「騰訊這麼快就放人了?」許進楷問道。

  「馬總前天下午就和我說了,」任宇昕拉開椅子坐了下來,「所以昨天我就抓緊把手上的事情交接完了,今天搭乘最早的航班趕過來。」

  許進楷點點頭,對於他來說效率才是最好的態度。

  隨後的十分鐘裡,盛大核心部門的幾位負責人陸續推門進來。

  人到齊了,許進楷當場宣布起新的高層任命:「各位,這位就是盛大的新任總經理任宇昕先生,以後由他全權負責《傳奇》的上線及運營計劃,以及公司的日常管理。」

  宣布完任命,任宇昕就開始看起了技術總監譚群釗遞來的測試方案,詢問起了準備工作。

  他問道:「下午參加測試的一共有多少個名額?」

  「五千零四十個帳號。」

  譚群釗回答道:「我們篩選了上海、蘇州和杭州的一百二十六家核心網吧,每家預留了四十台電腦。從下午兩點開始,按照總控台的統一指令分批登錄。」

  「第一批先進一千人,逐步增加到兩千、三千、四千,最後測試五千人的峰值數據。」

  任宇昕繼續往後翻閱方案細則:「進入遊戲以後怎麼測?」

  「有固定引導,打怪、公屏聊天、面對面交易、跨職業組隊、同屏切換地圖、高頻上下線。」

  「每十五分鐘更換一次測試內容,網吧現場的督導負責記錄玩家遇到的問題,再反饋給我們。盛大機房這邊,監控伺服器負載和資料庫寫入。」

  任宇昕聽到這裡才稍稍點了點頭。

  五千個玩家如果只是在遊戲裡掛機發呆,根本測不出什麼東西,還是要靠玩家在野外釋放技能打怪、拾取掉落物品、頻繁交易。這一系列玩家動作產生的數據封包量和運算邏輯,比站著不動要龐大和複雜,這才能測出伺服器真正的壓力極限。

  他翻到伺服器物理配置那一頁,皺起了眉頭:「現在你們預估的『兩萬人承載能力』是怎麼推算出來的?」

  「這是韓國方面給出的參考標準,一組物理伺服器能承載五千人。」譚群釗如實說道,「我們把之前租的伺服器一起組成了四組,所以暫時是按照承載兩萬人的估值來計算的。」

  「還沒有測試過?」

  「今天是第一次完整壓力測試。」

  任宇昕沒有再繼續問下去了,他站起身拿上馬克筆,在白板上寫下三組數字。

  9月28日,十萬

  10月3日,三十萬

  10月13日,五十萬

  全網首發更新𝔗𝔚看書網→𝔰𝔥𝔲.𝔱𝔴

  「十萬,是9月28日首批公測開放時必須要有的承載量。」

  任宇昕用筆尖點著白板:「三十萬,是我們初期想通過全網推廣達到的同時在線人數。因此伺服器、機房、骨幹網寬帶,都必須提前準備好。」

  「至於五十萬,是公測十五天的戰略擴容目標。」

  接著,他又在旁邊寫下一個醒目的「五千」。

  「今天要確定的就是韓國人說的,一組伺服器到底能不能承載五千人!」

  任宇昕掃視全場:「這個數字如果成立,十萬人要二十組機器,三十萬人需要六十組,五十萬人需要整整一百組。」

  「但是,如果實際測下來一組承載不了五千人,那麼後面的設備採購數量、機櫃的租賃、光纖線路和維護人員,全部都要推翻再重新計算。」

  說完,任宇昕轉頭盯著採購主管問道,「第一批設備呢?」

  採購負責人挺直脊背回答道:「昨天老闆的一千五百萬一到帳,我們就把首批合同簽了。」

  「盛大現在租了四組伺服器,另外還緊急採購了十六組最高配的IBM機型,按照單組五千人的標準,正好滿足十萬人的需求,還額外配了兩組備用設備以防萬一。」

  「第一批在明天下午進機房,二十六日以前,保證完成全部物理安裝和網絡調通。」

  「訂單照常執行。」

  任宇昕沉聲道:「今天下午如果達不到五千人的標準,就按照實際測出來的缺口追加設備。九月二十八日的十萬人絕對不能出問題,後面兩批的採購數量,也根據今天的測試結果進行動態調整。」

  坐在主位上的許進楷平靜地看向採購負責人:「需要增加多少預算,今晚直接報給我。」

  上午的會議一結束,盛大所有的部門立刻高速運轉起來,開始為下午的『生死大考』做著最後的準備。

  從工廠壓製出來的三萬張客戶端光碟,有一部分在前一天就連夜送到了江浙滬參加測試的合作網吧,網管們先用光碟給幾台母機安裝好兩百多兆的遊戲端,再把客戶端通過網吧的區域網迅速複製到了其他機器上。

  下午一點五十分。

  前方督導傳回消息,一百二十六家網吧的五千多台測試機,已經全部準備完畢。

  盛大的會議室被臨時改造成了指揮中心。伺服器CPU占用率、資料庫並發寫入隊列、機房線路監控數據,被實時投射到巨大的幕布上。

  下午兩點整。

  任宇昕下達指令,第一批帳號開始登錄。

  兩點零三分,計數器的在線人數迅速攀升到九百二十七人。

  幕布上投射著遊戲實時畫面,新手村擠滿了穿著粗布衣服的玩家。有人在城外砍鹿、打稻草人;有人不斷地在比奇城和毒蛇山谷地圖之間來回切換;還有人嚴格按照測試指令,在公屏上反覆發送著長串的聊天消息。

  各項圖標波動不大,伺服器運行一切正常。

  兩點十五分,第二批帳號開始登錄。

  在線人數很快突破兩千大關。聊天伺服器的壓力肉眼可見地上升,但在最吃伺服器性能的角色移動、物品拾取和地圖切換上,並沒有出現很明顯的延遲。

  兩點三十分,第三批帳號湧入遊戲。

  兩千五百人。

  兩千八百人。

  三千零六十七人!

  一直死死盯著屏幕的監控工程師突然大聲匯報導:「譚總,資料庫寫入隊列開始增加了!」

  「延遲多少?」譚群釗快步走到幕布前,掌心滲出了一層細汗。

  「平均不到一秒,但瞬時最高已經接近兩秒了。」

  按照原定的極壓測試流程,需要數百名玩家在同一時間、同一場景面對面交易,讓武器、紅藍藥品和大量金幣在不同角色之間高頻來回傳輸。

  幕布上,那根原本平緩的資料庫寫入曲線,如同突然被拽住,迅速地抬高。

  少數玩家撿起怪物掉落物品後,物品要延遲一兩秒才會出現在背包里。玩家最密集的新手村出生點的畫面,也開始出現短暫的卡頓。

  譚群釗眉頭緊鎖,讓工程師記下準確的時間戳和內存水位,咬牙道:「繼續。」

  三點整,第四批帳號接入遊戲。

  在線人數迅速超過三千五百人。

  遊戲的物理反饋情況在這一會兒發生了惡化。切換地圖的平均讀取時間從最初的不到一秒加載,硬生生上升到了三秒以上。部分角色小退以後,直接卡在了登錄界面,需要反覆強制退出再重新進入。公屏的聊天信息也開始出現明顯的滯後。

  會議室桌上的幾部座機也接二連三地響了起來,都是各家網吧的督導在陸續傳回現場出現的問題。

  「上海十九號網吧反饋,角色完成交易以後,買家背包沒有及時刷新出物品!」

  「蘇州七號網吧反饋,有整整十六個帳號在切換過圖時畫面黑屏失敗。」

  「杭州十一號網吧說,部分玩家無法拾取掉落在地面的物品。」

  各種情況層出不窮,監控屏幕上,代表伺服器內存占用的曲線不斷向上攀升,而詭異的是,資料庫的寫入速度反而因為通道擁堵在開始下降。

  三點十二分,在線人數突破四千。

  外圍的登錄驗證隊列迅速堆積,形成了一個巨大的數據堰塞湖。

  負責外圍測試放行的工程師滿頭大汗,轉頭看向譚群釗:「譚總,最後一批帳號還放嗎?」

  譚群釗死死盯著屏幕,沒有立刻回答。

  韓國人預估單組伺服器標準承載量是五千人,可現在的總人數還不到四千一百人,整個底層架構就已經出現了極其明顯的異常狀態。

  任宇昕雙臂環抱在胸前,看著屏幕上那幾條堪比心電圖波動的曲線,沉穩地說道:「第五批先不要進,保持現在的在線人數,讓遊戲裡的玩家不要停下來,繼續執行最高頻的測試動作。」

  停止放行的命令被迅速傳達到各家網吧。已經在線的四千多名玩家繼續瘋狂地打怪、交易、切換地圖。

  三點十九分,在線人數穩定在了四千三百一十二人。

  伺服器並沒有立刻崩潰,但是遊戲裡的操作卻越來越慢。

  玩家發出的聊天消息要過四五秒鐘才會在公屏上顯示。有人在裝備欄更換了武器,人物模型的手裡還依舊拿著原來的舊裝備。更有幾名玩家面對面完成交易,雙方的背包裡面遲遲沒有刷新出交易後的物品。

  三點二十二分。

  主監控幕布上的一條綠線毫無徵兆的向下一折。

  登錄網關和維持在線的會話進程突然停止了響應。

  「斷了!」

  伴隨著工程師的一聲驚呼,幕布上的在線人數計數器的數值開始不斷下跌。

  四千。

  兩千七。

  一千一。

  不到一分鐘,那個代表著所有人努力的數字就徹底變成了灰色的『零』。

  「不要重啟!」譚群釗幾乎從椅子上彈了起來,大聲喝止正準備敲擊鍵盤的下屬。

  「所有人別動進程!先保存內存故障信息,立刻複製底層日誌,再給資料庫做絕對隔離的只讀快照。」

  幾名高級工程師迅速按照指令操作起來。

  緊張的十分鐘過去後,現場所有的數據保存完畢,測試伺服器這才重新啟動。

  為了確定這種異常崩潰會不會讓掉線的角色數據受損,盛大通過後台切斷了公用通道,只允許各家網吧登錄指定的排查帳號。

  最讓人擔心的問題,還是出現了。

  八十七個角色,發生了不同程度的數據回檔。有的是剛打完怪獲得的經驗憑空消失,有的是在重連後回到了切換地圖以前的位置。

  最致命的問題是,交易邏輯出了問題。

  一家上海網吧的督導緊急打來電話:兩位參與測試的玩家在伺服器崩潰前的一分鐘面對面交易了一把鐵劍,重新登錄以後,不僅購買人的背包里有一把鐵劍,售出者的背包里還有那把本該被扣除的鐵劍。

  督導已經讓兩名玩家退出遊戲,徹底清空緩存再重新登錄,兩個玩家的背包里還是有那把屬性一模一樣的鐵劍。

  譚群釗只覺得一陣寒意竄上了背脊,厲聲道:「拉後台!讓人核對二十分鐘內所有的交易記錄!一筆一筆查!」

  下午四點十分。

  一份還帶著印表機餘溫的排查結果表被送進了會議室。

  在伺服器崩潰前後,全服一共出現了十七筆異常交易。

  由於並發極高,系統寫入產生了微小的時間差。物品接收方的數據擠進了通道,被成功保存;而物品轉出方卻因為資料庫寫入超時,被系統保護機制強制回退到交易發生前的狀態。

  十七件物品就這麼硬生生地被複製成了兩份。

  許進楷看完手裡的數據表,提了一個最核心的問題:「如果是玩家自己網絡不好導致掉線,會不會出現這種複製情況?」

  「暫時還不能確定。」譚群釗神色凝重,「現在我們通過日誌能確認的只有一點:交易雙方的數據在底層邏輯上不是同時保存的。它是先寫入接收方數據,再寫入轉出方數據。」

  「伺服器恰好在這兩個步驟執行的間隙出現了異常,才造成了這次極其偶然的單邊回檔複製。」

  「這種機制能不能被人故意利用?」任宇昕這句話直擊要害。

  「要重新搭建獨立環境測試過後才能確定。」譚群釗不敢在老闆面前輕易下結論,分析道:「如果必須要整個伺服器的會話進程崩潰才能觸發,那被玩家主動利用的概率很小。但是如果單個角色利用拔網線強制掉線來精準卡住這個時間差,從而觸發複製機制,那問題就嚴重了。」

  會議室頓時安靜了下來。

  伺服器承載量不足,可以通過砸錢增加設備解決。

  但複製物品就是網遊的頑疾,只要有人在公測後找到了穩定的觸發方法,遊戲裡所有的稀有武器、道具和金幣,在幾天內就會成為失去價值的廢品,整個遊戲經濟系統就會迅速崩盤。

  「今天的測試到此結束。」

  許進楷放下手裡的數據表:「把所有的崩潰日誌、資料庫快照以及全部操作過程整理成技術文檔,馬上聯繫韓國,讓Actoz和wemade給我們一個合理的說法。」

  下午五點四十分。

  跨越黃海的越洋三方電話會議正式接通。

  Actoz海外項目負責人以及wemade伺服器架構工程師同時加入會議。盛大把下午的壓力測試過程、監控數據以及那十七筆異常交易的記錄都傳真了過去。

  面對這種嚴重事故,兩家韓國公司也沒有推卸責任,《傳奇》的中國區授權合同是由Actoz、wemade和盛大三方共同簽訂的,伺服器底層邏輯的程序修補和後續支持也屬於韓方必須承擔的責任範疇。

  但在問題的成因上,中韓兩邊出現了意見分歧。

  Actoz的工程師先檢查了盛大這邊的部署環境,他認為承載四千人以後出現的嚴重延遲和擁堵,很大可能是因為受到了資料庫參數未優化、伺服器連接方式以及中國機房網絡配置的綜合影響,需要拿到盛大完整的日誌才能確定是不是韓方代碼的問題。

  而作為研發方的wemade工程師則更加直接,他看過那十七筆回退記錄後指出:無論盛大的伺服器是因為什麼原因崩潰的,角色交易作為一個整體事件,在邏輯上就絕對不應該出現只保存一方數據的情況,這都是因為底層代碼交易鎖缺失。

  兩方對伺服器性能瓶頸的判斷雖然有不同意見,但好在很快協商好搶修的分工:

  Actoz負責徹查盛大這邊的部署程序、資料庫配置和相關的技術文檔。

  wemade的核心團隊則全權負責在韓國機房測試物品複製的漏洞,並連夜修改交易鎖和角色數據保存的底層邏輯。

  並約定第二天上午雙方都必須提交第一份故障分析報告,並且在九月二十四日以前,wemade必須向盛大提供修復後的最新測試版本。同時安排兩名原本負責項目交付驗收的韓國工程師第二天直接飛上海來現場辦公。

  眼看韓方計劃好了技術排期,任宇昕又嚴肅地問道:「九月二十八日,能不能正常進行公測?」

  首爾那端的電話里,陷入了沉默。

  過了好半晌,Actoz項目負責人的聲音才傳了過來:

  「現在還不能保證。」

  「在底層修復物品的複製問題以後,我們還要進行大量的回歸測試,包括角色交易、倉庫儲存、物品丟棄和死亡數據回檔等。只是改動一處代碼,也許又會在其他地方產生新的問題。」

  電話會議在壓抑中結束,任宇昕掛掉了電話後,徑直來到了白板面前。

  那個預期「十萬、三十萬、五十萬」的宏偉目標依舊沒有變化,但任宇昕在旁邊寫下了今天的實測結果:

  【單組在線四千三百一十二人,進程崩潰。】

  【穩定承載量,暫計三千人。】

  「各位,按照單組承載三千人準備吧,十萬人我們需要三十四組伺服器集群。」

  任宇昕扔掉了手裡的筆,看向採購部:「盛大租賃的設備加上已經到貨的採購設備,預備的兩台伺服器不能動,現在滿打滿算也只有二十組,我們還需要十四組。」

  「採購部門今晚就聯繫所有長期供應商,不惜一切代價,先滿足九月二十八日承載量的需求。至於三十萬和五十萬的承載量具體需要多少設備,等拿到韓國補丁測試的結果以後,再決定最終的採購數量。」

  交代好之後,任宇昕又拿起筆開始推演時間線。

  9月24日,測試版本。

  9月25日,第二次單組壓力測試。

  9月26日,多組伺服器聯合測試。

  9月27日,最終數據核定。

  「二十五日拿到韓國的新補丁後,仍舊使用今天這五千個帳號進行測試,重新把今天全部的測試流程跑一遍。」任宇昕用手指敲了敲白板,「單組抗壓通過以後,二十六日再測多組伺服器的聯合運行和網關並發。」

  「如果二十七日上午,遊戲中依然存在複製物品的漏洞,伺服器依舊達不到單組穩定承載量的標準,」任宇昕咬了咬牙,「那九月二十八日,就延遲公測。」

  這話一出,會議室里幾位管理的心猛地一顫,同時望向了主位坐著的許進楷。

  遊戲前期的宣發造勢早就把盛大架了起來,如果公測跳票,公司的士氣和口碑都會受到很大的衝擊。

  許進楷看著技術總監,問了一句:「如果我們帶著這個漏洞強行上線,多久才會被市面上的玩家發現?」

  譚群釗苦笑了一下,搖頭道:「這種事全看運氣。也許一個月都不會有人發現,但也可能,公測第一天就被網吧偶然斷網的玩家發現。」

  「那就按任總的計劃執行。」

  許進楷定下了結論:「如果二十七日的結果達不到預期,公測直接延期。」

  他很清醒,「今天伺服器崩在了四千人,這只是壓力測試結果,幸好我們發現了問題所在。但要是為了趕檔期,二十八日那天在全國十萬個玩家面前伺服器崩了,那就是盛大萬劫不復的事故。」

  當天夜裡,十一點零七分。

  wemade發來了第一份技術補充說明。

  郵件內容很簡短:

  韓方工程師已經在純淨的測試環境中,成功重現了物品複製。

  最可怕的是,根本不需要整組伺服器陷入擁堵癱瘓後崩潰,只要玩家找準時機,卡好面對面交易的時間點,人為製造客戶端的角色會話異常(比如強行拔掉網線),就有很大概率將物品成功保留在雙方的背包。

  這意味著,只要有人在公測後掌握了這個物理斷線的方法,就能無限量地利用這個漏洞掠奪遊戲內的財富。

  許進楷盯著郵件里的測試對比結果沉默了。

  隨後他拿出手機,給京城那邊發了一條消息,學校那邊請假,他國慶假日結束前都不回去了。

  他抬頭看向牆上的日曆。

  距離那個決定中國網遊歷史的命運之日的到來,只剩最後五天。


章節目錄