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/cn.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灯, 水草

请输入看板名称,例如:Soft_Job站内搜寻

TOP