Re: [討論] 請問如何建立大型伺服器(2)

看板Minecraft (當個創世神)作者 (喔喔喔)時間11年前 (2014/05/16 00:43), 11年前編輯推噓6(605)
留言11則, 10人參與, 最新討論串1/1
硬體篇 這篇多少會提到一些軟體的東西 像是作業系統 不過本篇還是以硬體為主 測試環境:Linux+SPIGOT(#1472) 先說一下Minecraft的軟體設計機制 他是SMP(Symmetric multiprocessing)架構 (其他架構如MPP、NUMA、CCS,在此就不贅述,有興趣請自行GOOGLE) 例如AI一個執行緒、水流一個執行緒 並非硬體上的平行處理的架構 由於執行緒並無跨處理器的特性 因此只要單一物件讓處理器達到100%負載 就會產生LAG(系統會切換CPU沒錯,但是完全無法解決問題) 因此硬體的選購是很重要的 以下我就電腦的每個零組件作重點說明: 1.中央處理器: 運算能力比核心數量重要 需選購浮點運算較強的電腦 我以INTEL官方提供的數據來作列舉 這是實體核心數量的總運算能力(線上人數極限是訪問了部分開服者所得到的結果) 可以除以核心數之後獲得單核心的計算能力 (1)I7-3770:108.8GFlops(27.2),線上人數極限是30~100人。 (2)I7-3930:153.6GFlops(25.6),線上人數極限是40~150人。 (3)I3-2120:52.8GFlops(26.4),線上人數極限是10~50人。 (4)I5-3470:102.4GFlops(25.6),線上人數極限是20~90人。 (5)E3-1230V2:105.6GFlops(26.4),線上人數極限是20~90人。 (6)E5-2620:96.0GFlops(16.0),線上人數極限是30~110人。 (7)E5-2640:120.0GFlops(20.0),線上人數極限是40~200人。 (8)I7-2600:108.8GFlops(27.2),線上人數極限是20~80人。 (9)Q6600:38.4GFlops(9.6),線上人數極限是4~30人。 (10)E5-2670 v2:230.0GFlops(23.0),線上人數預估是150~300人。 (11)E5-2697 v3:319.7GFlops(22.8),線上人數預估是200~350人。 核心數量確實會有幫助 只是幫助有限 也需看系統的配置與設定 這也是為什麼大型伺服器一定是用多伺服器串連或者多重世界串連 單台電腦是無法負荷千人以上的運算需求的 就算是多處理器(多路)的系統也是一樣 因為使用SMP以外的架構需要重寫程式碼才能真正發揮作用 這又是另外一個主題了 在此不詳加討論 簡單的說 SMP因為共用系統記憶體與匯流排 因此會有RACE CONDITION的情形發生(有在寫程式的人應該會知道這個名詞) 2.記憶體: 記憶體的影響較小 16GB以上即可 3.硬碟: 不論是否有作磁碟陣列 一張含有CPU與記憶體的磁碟控制卡是最佳解 不過價錢當然是頗高 為什麼需要另外的IO卡呢 因為這樣能幫CPU分擔運算負擔 另外為了顧及資料安全 建議建置RAID5或以上的磁碟陣列(6、7) 備源硬碟(HS)也需多準備幾顆 這樣一來在其中幾顆硬碟故障時 系統還能繼續運作不至中斷 4.網路卡: 好的網路卡也是非常重要的 同樣的道理 網卡也必須盡量選購有NPU的產品 配置特殊的記憶體與處理器來輔助封包的解析 大幅降低CPU的使用率 建議是INTEL I350等級以上的晶片 若能買INTEL NE等級的晶片更好 配有獨立的記憶體 當然價錢會比較高 5.不斷電系統: 這是非常重要的設備 甚至可以配置穩壓器(AVR) 並注意電池容量 確保硬體安全 6.協同處理器: 這個部分國外已有玩家在進行研究 像是使用NV的CUDA處理器 或是去年INTEL發表的PHI 不過這些硬體的架構屬平行架構 既是像MPP但又不是MPP 不過同樣的是 要讓這些協同處理器發揮效用 一樣要重新編寫程式碼 這個部份我想等出了MOD API之後應該就會比較好開發了 7.網路頻寬: 視野9 每個玩家載入的chunck數為19*19=361 登入時消耗頻寬為160~200kB/s 移動時消耗的頻寬為20~60kB/s 約為官方伺服器的1/3 其他行為的頻寬消耗皆低於移動 因此就不列出了 因為spigot載入地圖的方式是以視野前方為優先 後方較晚載入 因此頻寬需求較少 以移動來當基準 100M/100M的網路頻寬(上下傳皆為12.5MB/s) 理論上可允許64人同時登入而不LAG 同時在線的玩家理論上可容納213個(以移動時最大頻寬消耗60kB/s計算) 以上內容僅供參考 因為架服的因素實在太多 若有些資料與實際不符 也歡迎指正 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.227.96.222 ※ 文章網址: http://www.ptt.cc/bbs/Minecraft/M.1400172232.A.9A7.html

05/16 01:19, , 1F
UPS買Online就不用AVR了
05/16 01:19, 1F

05/16 02:49, , 2F
太專業,只好推了
05/16 02:49, 2F

05/16 02:50, , 3F
原PO該不會是某遊戲公司的硬體工程師...(被拖走
05/16 02:50, 3F

05/16 10:49, , 4F
長知識 推!
05/16 10:49, 4F

05/16 11:06, , 5F
大推>////< 就是期待這種專業說明
05/16 11:06, 5F

05/16 13:58, , 6F
它的SMP不會自己lock resource嘛?不然怎麼會RaceCond
05/16 13:58, 6F
官方就是為了避免RACE 加上普遍硬體架構的限制 才沒有設計出平行運算的伺服端 只用安全執行緒來設計 不過即使這樣 在使用新的網路架構後(NETTY) 依然偶爾會產生RACE導致CPU全部核心100%負載 如果硬體架構"真的安全" 軟體設計也會輕鬆許多 ※ 編輯: softpak (218.164.18.48), 05/16/2014 14:16:35

05/16 15:49, , 7F
無論是官方server還是CraftBukkit都是相同概念嗎?
05/16 15:49, 7F
是的 可以這麼說 接下來的軟體篇可能會拖久一點 因為我會先實驗性的使用CUDA(或OPENCL)來輔助運算看看成果 預定使用JNI呼叫CUDA C 為何不直接用JCUDA來寫呢? 因為看了REF之後發現限制太多啦 只好用C來寫 再用外部呼叫 ※ 編輯: softpak (218.164.18.48), 05/16/2014 17:05:20 ※ 編輯: softpak (61.227.96.222), 05/16/2014 18:29:01

05/17 02:44, , 8F
先推不然人家以為我看不懂
05/17 02:44, 8F

05/17 03:25, , 9F
我看的懂但是我不知道要接啥 orz
05/17 03:25, 9F

05/17 20:16, , 10F
P4伺服器推
05/17 20:16, 10F

05/22 10:04, , 11F
你需要的是Blade Server + SAN Storage
05/22 10:04, 11F
文章代碼(AID): #1JTEx8cd (Minecraft)
文章代碼(AID): #1JTEx8cd (Minecraft)