兩萬人線上伺服器架構和一些公有云使用心得
感謝各大公有云不斷的技術創新,使得人(zhi)丁(you)稀(1)少(ge)的我們,能夠在三個月內完成支援線上2萬人的伺服器組,以支撐即將到來的江湖X資料片“世界服”。�
本文主要寫給程式猿看,所以會有大量的晦(zhuang)澀(bi)語句,不感興趣的還是跳過吧。。吐槽在最後
正文
本文主要是短句子的羅列。
組成:
我們一個標準的伺服器組,由以下部分組成:
- 兩個負載均衡,一個掛目錄服,一個掛遊戲服;負載均衡由阿里保證雙可用區高可用;
- 至少兩個目錄服ECS,分別在兩個可用區;
- 至少兩個遊戲服ECS,分別在兩個可用區;
- 至少一個管理服ECS;
- 至少有一個例項充當所有ECS的備用;
- 三個Mysql資料庫,賬號mysql,資料mysql,統計mysql,阿里保證雙可用區高可用;
- 兩個Redis,資料redis和公共redis,阿里保證雙可用區高可用;
要點 :
- 為了與客戶端程式碼語言的一致性(U3D),我們後臺都是用.Net實現的,所以所有例項都是windows例項,逼格比linux少了90%,易用性提升90%(PS:VS是世界上最好的IDE);
- 將所有線上玩家的存檔資料(約500kB/人),放在一個高效能的支援事物的資料redis裡面,由這個redis來充當“公共記憶體”,給多個遊戲服ECS使用;
- 玩家離線一定時間之後,將存檔資料序列化存入Mysql;玩家再上線的時候,從mysql取出資料反序列化放入redis;
- 所有的統計資料和不需要多次查詢的資料,放入一個專用的“統計Mysql”;
- 所有的玩法級別的東西,例如PVP,世界boss,好友系統等,都放入一個redis裡面,我們稱為“公共redis”,這個redis其實是當資料庫使用,redis本身就支援持久化(用阿里預設的備份功能就行);
- 所有伺服器配置放在mysql裡,目錄服和遊戲服初始化的時候會去資料庫載入配置;
- 目錄服處理玩家註冊、登入,以及遊戲版本、伺服器狀態和熱更包的下發;
- 遊戲服主要是保持與玩家的socket長連線,並與mysql/redis互動資料,自身記憶體不儲存任何狀態資訊;
- 管理服主要是用來管理所有的mysql和redis,並計算一些玩法級別的東西,例如PVP結算,世界boss結算,客服後臺,郵件公告等;
優缺點:
- 遊戲服ECS不儲存任何狀態,不需要考慮同步、加鎖等問題,隨點隨用,一秒重啟不是夢(手遊裡,秒級的資料丟失是可以接受的);
- 通過redis和mysql的原生事務來保證原子性,不需要coding來實現,省時省事效率高,雖然效能低下,不過效能,夠用就行;
- 充分利用公有云的高可用性和一切便利性,能不自己做的堅決不自己做,能花(xiao)錢解決的堅決不花時間;(這一點大家算算程式猿工資就知道哪個划算了,現在一個例項才多少錢);
- 參考上點,這麼做的一個缺點就是花費稍微大了點(多了redis的花費,很貴;多了一些例項,因為CPU沒用滿,可以用效能換空間),從一千塊一個月變成了兩三千一個月,一年多出了一個程式設計師的月薪(手動滑稽);
Redis相關:
- 江湖X每個線上玩家,對“公共redis”,會產生大概每秒2-3的QPS(最早的設計,好蠢,還不能改);
- 阿里雲和Ucloud目前的主備版redis,能支援6萬的QPS;
- 單臺例項連線redis,能達到2萬的QPS,四臺例項的時候,每臺1萬5的QPS;
- 一個玩家在redis中的資料,平均為500k(好蠢,同上);
- 所以,一個16G的redis,能支援1.5-2萬線上,3萬左右的資料保有量;
- 以20萬日活來計算,玩家離線3小時,就需要把資料從redis移到mysql;
- 單臺例項能支援5000-7000的線上使用者;
- 如果單臺16G例項扛不住,考慮加多個redis,只需要維護一個使用者所在redis的表就行,一個使用者只能在一個redis裡;
- redis儘量用hash,能比key-value快一半;
- servicestack.redis,推薦4.0版本以上,事務回撥很完善;
- 阿里不支援sync命令,無法自建slave例項;Ucloud支援sync命令,所以slave可以走起;
- Ucloud的redis沒有密碼。。沒有密碼。。。所以不小心一個flushall,就哭吧,適合小公司;
- 阿里最近上了叢集版的redis,最小16G,QPS令人髮指(幾十萬),不過不支援事務。。。。如果自己在程式端實現了redis事務而不用原生事務(米哈遊就自己寫的),那麼用叢集版redis,幾十萬線上不是夢啊,以後會不會是一個叢集redis,掛著幾十臺1核1G的例項,最便宜的1核1G只要33/月,10臺330,能跑幾萬個TCP長連線;
網路相關:
- 由於主要的計算都發生在客戶端,因此江湖X的網路負載很小;
- 歷史遺留原因,我們採用Scut來做多使用者管理和網路分發(socket),並且到目前為止,表現不錯;
- 採用負載均衡,並且按量付費,是目前最適合我們的解決方案;(負載均衡一般都能支援幾十萬的TCP連線)
- 熱更包地址由目錄服下發給客戶端,客戶端去CDN上下載;
- 阿里的cdn越來越好用,秒級回源,不過有時候也會掛掉(今年掛過一次);
- 阿里出過一個事情,就是某臺例項的IP被中國移動給ban了,導致所有移動玩家上不去伺服器;
- 一般玩家說掉線頻繁,第一反應都是問對方,“你是不是中國移動4G“,95%都是;
Mysql相關:
- Mysql還挺貴的;
- 一個使用者一秒才0.3次QPS,所以2核4G的mysql應該夠我們用了;
- mysql和redis可用區切換,程式要自動重連(感謝servicestack);半年內,有一個mysql切換過一次;
- 定期看一下慢日誌,說不定就找到一些漏網之魚沒有建索引;
- Ucloud的Mysql,回檔會損壞blob資料,原因未明,需要問一下;
計算相關:
- 除了rank系統,計算量都幾乎沒有;
- 資料從redis移動到mysql計算量比較大,交給管理服;
- rank系統的戰鬥計算,需要在服務端進行,準備引入MQ,通過MQ來進行計算任務的下發和結果的採集;
- 一些定點結算(遍歷所有玩家)的任務,都在管理服做,例如排行榜結算、世界boss結算,活動結算;
- CPU比較過一次,各家相同價位都差不多;
磁碟相關:
- 對磁碟I/O沒有任何要求,所以阿里雲用起來沒有問題(阿里雲的磁碟I/O就是辣雞,ssd盤都比不過ucloud的普通盤)
各家吐槽:
- 阿里,對磁碟沒有要求的話,阿里是最佳選擇了,穩定性,易用性很好,價格不貴,就是服務差,店大欺客,買了就不能退(包月),退還要手續費(包年),以前吃不完的還不能打包(不能降配),就是一黑店啊;另外,高可用和高併發,阿里說第二,沒人敢說第一;
- Ucloud,阿里降價之後,價格大概是阿里的80%。優點很明顯,服務好,還有,包月包年機器隨時可以退,並且只計算髮生費用,這簡直逆天啊;缺點也很明顯,可用區少啊。。全國只有北京有多可用區,還資源緊張;我們需要的華南只有一個可用區,只好揮淚斬馬謖;還有就是太靈活,以致不敢用,特別公司大了,風險比較大,例如mysql給root許可權,redis無法設定密碼等;
- Azure,聽說用它的人才能準確發音,反正我發不準。這是世界上唯一的一�個公有云,產品文件是由程式猿完成的,並且,還是機翻成的中文。這都還好,增加的是學習成本,但是,價格是阿里雲的兩倍是幾個意思?
- AWS,如果要有海外服,我們首選就是AWS,沒什麼好說的;額,同理,國內的AWS,也沒什麼好說的,”不敢“用;並且,機房在北京和銀川,離廣東太遠了,電信南北光纖,最近每個月要故障兩次,丟包15%,電信威武;
- 華為雲,功能少,貴;
- 比格雲,宣傳得很有逼格,不敢用,有待時間驗證其穩定性;
- 京東雲,聯絡過,沒叼我們;
- 騰訊雲,持續關注,有可能會要用(應用寶上游戲必須架在騰訊雲上);
- 百度雲,等等,這不是存小黃片的麼?
相關文章
- 公有云高手UCloud如何玩轉私有云?Cloud
- 如何從架構層面降低公有云多可用區同時故障的機率架構
- 雲端計算、公有云、私有云、混合雲等
- 公有云與私有云對比分析報告
- 一線架構師的一些專案管理心得架構專案管理
- 公有云在中國實踐落地
- Tungsten Fabric知識庫丨構建、安裝與公有云部署
- 公有云降本增效最佳實踐
- 藉助公有云伺服器內網穿牆ssh訪問內網伺服器伺服器內網
- 私有云和公有云的主要區別有幾點?兩者哪個更安全?
- sqli-labs———伺服器(兩層)架構SQL伺服器架構
- 雲防火牆如何玩轉公有云引流防火牆
- 公有云RDS-MySQL基準測試MySql
- SAP公有云和私有云解決方案概述
- Service Mesh 在華為公有云的實踐
- 單體架構、微服務和無伺服器架構架構微服務伺服器
- 轉:LogMiner安裝和使用的一些心得
- 公有云專線直連服務-ElinkcloudCloud
- Docker在公有云的應用處理能力Docker
- 公有云和私有云的主要區別在哪裡
- iOS 移動端架構初探心得iOS架構
- IDC企業使用公有云管理系統的好處是什麼?
- 教程|雲幫手部署Windows公有云管理系統Windows
- 公有云管理系統的主要作用是什麼?
- 企業遷移到公有云之前的注意事項
- 超融合私有云基礎架構方案評估(架構與儲存篇)架構
- OpenMLDB 線上模組架構解析架構
- Gorm 的使用心得和一些常用擴充套件 (一)GoORM套件
- 資料整合的兩種架構:ELT和ETL架構
- LuckySheet一款線上Excel使用心得Excel
- ZKEYS公有云分銷系統最新個人體驗
- 教程|雲幫手部署Linux公有云管理系統Linux
- EMQ X Cloud - MQTT 5.0 公有云服務正式釋出MQCloudQT
- 公有云(AWS)上的生產環境效能分析案例
- Omdia:IT 在公有云服務商方面的支出大幅增加
- Linux中公有云是什麼?有什麼作用?Linux
- 基於Oracle的私有云架構探析(連載二)Oracle架構
- 基於Oracle的私有云架構探析(連載三)Oracle架構