C_and_CPP 板


LINE

版上各位先進好: 小弟我目前在設計多執行緒的伺服器上遇到效能瓶頸, 底層的Socket Server是用Boost::Asio, 單純用single io_service & multiple thread的架構處理效能還不錯, 但目前系統上都會需要封包指令是要將某個index要對應到某個session, 所以只好在accept時把index跟session存入到map中,這時就需要使用lock去做保護, 因為加了這個lock導致在一秒內如果是上萬的連線數要aceept延遲就會提高, 後面開始run的過程中因為我使用的是shared_mutex, 所以對map純讀(shared_lock)感覺效能還可以。 如果是單純讀寫分離的Queue還可以用boost::lockfree去處理, 但遇到真的架構上就需要有一個map,這種情況就不知道怎麼優化它, 想問版上的各位先進有什麼設計方向可供我參考,謝謝。 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.117.102.47
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1552575225.A.E28.html
1F:→ Schottky: 問題在於你為什麼會設計成一秒需要 accept 上萬次吧 03/14 23:04
老闆的需求 QQ
2F:推 easyman: vector 存 index + session, 就不用lock ? 03/15 00:27
index是int64_t, 直接先配置好vector好像有點太大, 還有session連線斷線的問題勢必要lock
3F:→ tinlans: 白說這問題打成英文上 stackoverflow 問應該會比較好 03/15 02:30
4F:→ tinlans: 坦白說 03/15 02:30
5F:→ tinlans: 目前可以知道的資訊有點少,也許你目前這層可以複製 N 個 03/15 02:35
6F:→ tinlans: docker containers 去跑起來,然後最前端再擋個類似負載 03/15 02:36
7F:→ tinlans: 平衡的東西,譬如根據 index % N 的值來轉發封包給對應的 03/15 02:36
8F:→ tinlans: container 處理這個 request。這種解法比較偏向架構解, 03/15 02:38
9F:→ tinlans: 考量將來 scalability 的話你早晚要做類似的工。如果你只 03/15 02:39
10F:→ tinlans: 打算先集中在程式解,那試試看起多個 io_context 有沒有 03/15 02:40
11F:→ tinlans: 什麼用吧。 03/15 02:40
12F:→ tinlans: io_service 在新版 boost 已經 deprecated 了。 03/15 02:41
13F:→ tinlans: 簡單講的話目的都是先增加你程式的入口數,然後把原本因 03/15 02:47
14F:→ tinlans: 為 lock 變成瓶頸的單一大資料塊拆分成多個。 03/15 02:48
其實就是GameServer的入口, index就是玩家資料在DB的ID, 資料轉到其他Service去處理完後,再丟回給GameServer傳給對應的玩家, 所以它才需要一個ID跟Session的Map, 目前的確我是有設計類似加開分流的概念去處理這件事, 但不同的Server的遊戲邏輯是不互通的, 所以還是想增加單個伺服器的承載量. ※ 編輯: klsdf (122.117.102.47), 03/15/2019 07:10:46
15F:→ tinlans: 這種東西連線建立以後就不需要再反覆 accept 了,每秒上 03/15 12:13
16F:→ tinlans: 萬次的連線需求是怎麼出現的?畢竟不是 http 這種連完 03/15 12:14
17F:→ tinlans: 一次就斷一次的連線型態。 03/15 12:14
18F:→ sarafciel: int64_t你也用不完呀 實務上你抓個可以涵蓋峰值的大小 03/15 14:32
19F:→ sarafciel: 配就好了 而且vector要鎖最起碼可以個別鎖呀 03/15 14:35
20F:推 ketrobo: 每一條連線有平均與最大的耗用資源量,同時估計一下resp 03/16 07:29
21F:→ ketrobo: onse time/CPU時間,找出一臺機器的服務上限,對應的sess 03/16 07:29
22F:→ ketrobo: ion數量一次配置完,連線對應固定的索引值就不用map了 03/16 07:29
主要是索引值是玩家的編號 即使知道目前的帳號數量pre-allocate 但對新註冊的帳號沒有用, 不過使用vector跟隨機存取的想法我可能可以多想一下 ※ 編輯: klsdf (122.117.102.47), 03/17/2019 00:08:03
23F:推 steve1012: 寫個load balancer 03/17 01:02
24F:推 LiloHuang: SO_REUSEPORT https://goo.gl/4rxJfr 參考看看 03/17 19:58
25F:→ LiloHuang: 若非得查表可考慮使用 tbb::concurrent_unordered_map 03/17 20:09







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BabyMother站內搜尋

TOP