工作小結和聊天系統設計
最近一段時間在做優化,繼續關注線上bug,額外是安全,壓測和容災相關的工作。
先總結下這段時間發現的問題,主要是穩定性和體驗,比較經典。其他同事加了一些功能,但在幾次測試的時候偶現玩家登陸卡住幾秒,後來再登陸就沒有出現這樣的情況。再後來加的一個功能導致登陸必定會卡幾秒鐘,後來問了該同事是配置問題,加上配置後就會跳過。但是這裡並不是配置的根本原因,因為在登陸的時候會同步走網路請求資料,那這塊是有問題的,請求次要資料可以走非同步,讓登陸儘快完成,帶資料回來後再設定,因為網路的不穩定的,這樣修改後就不會再卡,至少不是必現。
本以為找到卡的原因,後來又偶現,還是在登陸時。翻了之前的聊天記錄,檢視相關程式碼在登陸時並沒有同步請求,後來發現第一次登陸可能卡可能不,後來登陸的玩家就不會。在日誌那邊列印log跟蹤,發現在登陸時需要給這個服務傳送非同步訊息,但是該服務並沒有在程式啟動的時候建立,所以建立一個虛擬機器,雖然建立本身耗時,建立初始化的時候,去走網路請求一些資料,那麼就會卡住。第一次會建立,因為是唯一服務,後面就不會卡住。把這塊放到啟動的時候建立並請求會更合適。
還有一個問題同事那邊比較難解決,後來一起排查。從網頁運算元據,比如給玩家傳送元寶,那麼到php這邊後,php封裝請求到遊戲程式,然後處理。出現的問題時,有時候成功有時候返回失敗。後來排除資料格式問題,排除邏輯問題,排除程式負載高的情況。檢視網路連結,發現返回失敗後處於timewait,這個沒問題。然後跟蹤到比較久遠的底層程式碼,有個定時器,設定超時時間是一秒,把這個設定長一些就解決了。
包括還有些設計方案不大合理,平滑處理會更好些。
之前想聊聊遊戲系統中聊天模組和郵件模組實現的要點,系統功能的設計其實不難,關鍵在於細節,設計細節,包括穩定性,效能,儲存等這些。如果沒有相關經驗,設計之初可以不考慮效能和流量消耗,後期可以根據業務需求去優化,這樣經過幾輪迭代後面不管壓測還是安全測試獨立沒什麼問題。
之前壓力測試時,聊天系統出現一些問題。這塊程式碼和設計是沿用上一款遊戲的模組,不是我寫的。雖然後期優化什麼的把這個實現梳理了遍並做了些調整。機器配置就不說了,壓測報告出來時,四千機器人同時線上,一千個人同時發世界廣播訊息,出現了cpu負載很高,且延長較大,持續了幾秒。算了下,一秒傳送400萬訊息,不考慮內容大小和處理邏輯,僅僅轉發,都夠嗆的。之前部落格記錄過一些相關的優化點,這裡還可以再激進些優化。由於skynet框架的特點,如果優化skynet框架其實沒有必要,只能去優化使用者程式碼。
仔細分析這塊邏輯的訊息走向,然後列出瓶頸,一個個攻破,由於是多執行緒,不能因為一個非重要的聊天系統拖累整個系統和使用者體驗,這裡再次優化下。
一般客戶端只能顯示一定數目的訊息,一下子發幾千條大部分沒有必要,大部分都超時,可以做適當的丟棄,這塊還是可以優化下。
以上,可以優化的地方很多,總之是穩定,不卡頓,節省資源和頻寬。這樣設計後,模組清晰,解藕、後面可以針對性優化和替換。
相關文章
- 深度探究MMO社交對話系統(二):聊天系統結構設計和功能邏輯
- 分散式任務排程系統設計小結分散式
- 解析帶emoji和連結的聊天系統訊息
- 結算系統設計
- 競拍系統設計和核心資料結構資料結構
- PDM系統的結構設計
- 【系統設計】系統設計中經常使用的20個高階資料結構和演算法資料結構演算法
- 系統分析設計小組作業1
- linux系統程式設計CP小測試Linux程式設計
- 聊天表設計
- 【系統設計】指標監控和告警系統指標
- Java工作量統計系統Java
- 直播系統聊天技術(七):直播間海量聊天訊息的架構設計難點實踐架構
- LevelDB系統結構與設計思路分析
- [譯] 使用 Go 和 ReactJS 構建聊天系統 (四)GoReactJS
- [譯] 使用 Go 和 ReactJS 構建聊天系統 (三)GoReactJS
- [譯] 使用 Go 和 ReactJS 構建聊天系統 (二)GoReactJS
- [譯] 使用 Go 和 ReactJS 構建聊天系統 (一)GoReactJS
- [譯] 使用 Go 和 ReactJS 構建聊天系統 (五)GoReactJS
- [譯] 使用 Go 和 ReactJS 構建聊天系統 (六)GoReactJS
- 愛聊-社交線上聊天交友系統技術開發程式設計示例程式設計
- 工作十年,談談我的高可用架構和系統設計經驗架構
- 非同步程式設計小結非同步程式設計
- 系統設計:設計Spotify
- 即時聊天社交系統開發/聊天交友/ChatGPT社交聊天ChatGPT
- 設計模式之蛋糕店結賬系統設計模式
- 短連結系統的設計與實現
- B2C電商系統整體功能和流程設計總結
- 駕校管理系統設計和實現
- 系統設計面試參考-設計Spotify系統面試
- ChatGPT人工智慧語言聊天系統設計開發及技術對接ChatGPT人工智慧
- 系統設計:使用Scala、Spark和Hadoop構建推薦系統SparkHadoop
- 聊天資料表設計
- woann-chat 基於 laravelS 和 layim 的聊天系統Laravel
- 使用 Go 和 ReactJS 構建聊天系統(五):改善前端GoReactJS前端
- 用訊息佇列和socket實現聊天系統佇列
- [系統設計]秒殺系統
- 【web】資料庫應用系統設計體系結構Web資料庫